Compare commits
8 Commits
bugfix/gdr
...
bugfix/lis
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
677c6555e8 | ||
|
|
c62f6ef139 | ||
|
|
0c34625782 | ||
|
|
e86fa6f9fa | ||
|
|
e2e975f357 | ||
|
|
8eaf6d3f88 | ||
|
|
a9fed1c203 | ||
|
|
6d8407676d |
1
Makefile
1
Makefile
@@ -20,6 +20,7 @@
|
||||
# - nuget: restore NuGet packages
|
||||
# - msbuild: build the project
|
||||
# - apk: same as all
|
||||
# - manifestlink: creates a symlink (to be used in building) to the AndroidManifest corresponding to the selected Flavor
|
||||
#
|
||||
# - distclean: run a 'git clean -xdff'. Remove everyhing that is not in the git tree.
|
||||
# - clean: all clean_* targets below
|
||||
|
||||
@@ -35,8 +35,6 @@ namespace KeePassLib.Cryptography
|
||||
{
|
||||
get
|
||||
{
|
||||
Debug.Assert(m_dicts.Count > 0); // Should be initialized
|
||||
|
||||
int iMaxLen = 0;
|
||||
foreach(int iLen in m_dicts.Keys)
|
||||
{
|
||||
|
||||
@@ -1148,30 +1148,46 @@ namespace keepass2android.Io
|
||||
});
|
||||
}
|
||||
|
||||
string? driveId = parentPath.DriveId;
|
||||
if ((string.IsNullOrEmpty(driveId)) && (drives?.Any() == true))
|
||||
{
|
||||
driveId = drives.First().Id;
|
||||
}
|
||||
|
||||
|
||||
if (!CanListShares)
|
||||
return result;
|
||||
|
||||
|
||||
var sharedWithMeResponse = await client.Drives[driveId].SharedWithMe.GetAsSharedWithMeGetResponseAsync();
|
||||
|
||||
foreach (DriveItem i in sharedWithMeResponse?.Value ?? [])
|
||||
try
|
||||
{
|
||||
var oneDrive2ItemLocation = parentPath.BuildShare(i.RemoteItem.Id, i.RemoteItem.Name, i.RemoteItem.WebUrl, i.RemoteItem.ParentReference.DriveId);
|
||||
FileDescription sharedFileEntry = new FileDescription()
|
||||
string? driveId = parentPath.DriveId;
|
||||
if (string.IsNullOrEmpty(driveId))
|
||||
{
|
||||
CanWrite = true, CanRead = true, DisplayName = i.Name,
|
||||
IsDirectory = true,
|
||||
Path = oneDrive2ItemLocation.ToString()
|
||||
};
|
||||
result.Add(sharedFileEntry);
|
||||
driveId = (await client.Me.Drive.GetAsync()).Id;
|
||||
}
|
||||
if ((string.IsNullOrEmpty(driveId)) && (drives?.Any() == true))
|
||||
{
|
||||
driveId = drives.First().Id;
|
||||
}
|
||||
|
||||
var sharedWithMeResponse = await client.Drives[driveId].SharedWithMe.GetAsSharedWithMeGetResponseAsync();
|
||||
|
||||
foreach (DriveItem i in sharedWithMeResponse?.Value ?? [])
|
||||
{
|
||||
var oneDrive2ItemLocation = parentPath.BuildShare(i.RemoteItem.Id, i.RemoteItem.Name, i.RemoteItem.WebUrl, i.RemoteItem.ParentReference.DriveId);
|
||||
FileDescription sharedFileEntry = new FileDescription()
|
||||
{
|
||||
CanWrite = true,
|
||||
CanRead = true,
|
||||
DisplayName = i.Name,
|
||||
IsDirectory = (i.Folder != null) || ((i.RemoteItem != null) && (i.RemoteItem.Folder != null)),
|
||||
Path = oneDrive2ItemLocation.ToString()
|
||||
};
|
||||
result.Add(sharedFileEntry);
|
||||
|
||||
}
|
||||
}
|
||||
catch (Exception e)
|
||||
{
|
||||
logDebug("Failed to list shares: " + e);
|
||||
}
|
||||
|
||||
|
||||
|
||||
return result;
|
||||
}
|
||||
|
||||
@@ -47,8 +47,8 @@
|
||||
<permission android:description="@string/permission_desc2" android:icon="@drawable/ic_notify_locked" android:label="KP2A entry search" android:name="keepass2android.keepass2android_debug.permission.KP2aInternalSearch" android:protectionLevel="signature" />
|
||||
<permission android:description="@string/permission_desc3" android:icon="@drawable/ic_launcher" android:label="KP2A choose autofill dataset" android:name="keepass2android.keepass2android_debug.permission.Kp2aChooseAutofill" android:protectionLevel="signature" />
|
||||
<application
|
||||
android:icon="@mipmap/ic_launcher_online"
|
||||
android:roundIcon="@mipmap/ic_launcher_online_round"
|
||||
android:icon="@mipmap/ic_launcher_debug"
|
||||
android:roundIcon="@mipmap/ic_launcher_debug_round"
|
||||
android:networkSecurityConfig="@xml/network_security_config"
|
||||
>
|
||||
<meta-data
|
||||
@@ -243,6 +243,15 @@ The scheme=file is still there for old OS devices. It's also queried by apps lik
|
||||
<action android:name="keepass2android.ACTION_START_WITH_TASK" />
|
||||
<category android:name="android.intent.category.DEFAULT" />
|
||||
</intent-filter>
|
||||
|
||||
<intent-filter>
|
||||
<action android:name="android.intent.action.VIEW" />
|
||||
<category android:name="android.intent.category.DEFAULT" />
|
||||
<category android:name="android.intent.category.BROWSABLE" />
|
||||
<data android:scheme="otpauth"/>
|
||||
<data android:host="totp"/>
|
||||
<data android:host="hotp"/>
|
||||
</intent-filter>
|
||||
</activity>
|
||||
<uses-library android:required="false" android:name="com.sec.android.app.multiwindow" />
|
||||
<meta-data android:name="com.sec.android.support.multiwindow" android:value="true" />
|
||||
|
||||
@@ -255,7 +255,14 @@ The scheme=file is still there for old OS devices. It's also queried by apps lik
|
||||
<action android:name="keepass2android.ACTION_START_WITH_TASK" />
|
||||
<category android:name="android.intent.category.DEFAULT" />
|
||||
</intent-filter>
|
||||
x
|
||||
<intent-filter>
|
||||
<action android:name="android.intent.action.VIEW" />
|
||||
<category android:name="android.intent.category.DEFAULT" />
|
||||
<category android:name="android.intent.category.BROWSABLE" />
|
||||
<data android:scheme="otpauth"/>
|
||||
<data android:host="totp"/>
|
||||
<data android:host="hotp"/>
|
||||
</intent-filter>
|
||||
</activity>
|
||||
<uses-library android:required="false" android:name="com.sec.android.app.multiwindow" />
|
||||
<meta-data android:name="com.sec.android.support.multiwindow" android:value="true" />
|
||||
|
||||
@@ -236,6 +236,14 @@ The scheme=file is still there for old OS devices. It's also queried by apps lik
|
||||
<action android:name="keepass2android.ACTION_START_WITH_TASK" />
|
||||
<category android:name="android.intent.category.DEFAULT" />
|
||||
</intent-filter>
|
||||
<intent-filter>
|
||||
<action android:name="android.intent.action.VIEW" />
|
||||
<category android:name="android.intent.category.DEFAULT" />
|
||||
<category android:name="android.intent.category.BROWSABLE" />
|
||||
<data android:scheme="otpauth"/>
|
||||
<data android:host="totp"/>
|
||||
<data android:host="hotp"/>
|
||||
</intent-filter>
|
||||
</activity>
|
||||
<uses-library android:required="false" android:name="com.sec.android.app.multiwindow" />
|
||||
<meta-data android:name="com.sec.android.support.multiwindow" android:value="true" />
|
||||
|
||||
Binary file not shown.
|
After Width: | Height: | Size: 11 KiB |
Binary file not shown.
|
After Width: | Height: | Size: 20 KiB |
@@ -27,6 +27,7 @@ using KeePassLib.Serialization;
|
||||
using Console = System.Console;
|
||||
using Object = Java.Lang.Object;
|
||||
using AndroidX.Core.Content;
|
||||
using Uri = Android.Net.Uri;
|
||||
|
||||
namespace keepass2android
|
||||
{
|
||||
@@ -302,9 +303,23 @@ namespace keepass2android
|
||||
}
|
||||
else
|
||||
{
|
||||
|
||||
if (Intent.Action == Intent.ActionView)
|
||||
{
|
||||
GetIocFromViewIntent(Intent);
|
||||
if (IsOtpUri(Intent.Data))
|
||||
{
|
||||
AppTask = new CreateEntryThenCloseTask()
|
||||
{
|
||||
AllFields = Newtonsoft.Json.JsonConvert.SerializeObject(new Dictionary<string, string>()
|
||||
{
|
||||
{ "otp", Intent.DataString }
|
||||
})
|
||||
};
|
||||
}
|
||||
else
|
||||
{
|
||||
GetIocFromViewIntent(Intent);
|
||||
}
|
||||
}
|
||||
else if (Intent.Action == Intent.ActionSend)
|
||||
{
|
||||
@@ -334,6 +349,11 @@ namespace keepass2android
|
||||
|
||||
}
|
||||
|
||||
private bool IsOtpUri(Uri? uri)
|
||||
{
|
||||
return uri?.Scheme == "otpauth";
|
||||
}
|
||||
|
||||
protected override void OnStart()
|
||||
{
|
||||
base.OnStart();
|
||||
|
||||
@@ -93,11 +93,13 @@ namespace keepass2android
|
||||
#if DEBUG
|
||||
public const string PackagePart = "keepass2android_debug";
|
||||
public const string Searchable = "@xml/searchable_debug";
|
||||
public const int LauncherIcon = Resource.Mipmap.ic_launcher_debug;
|
||||
#else
|
||||
public const string PackagePart = "keepass2android";
|
||||
public const string Searchable = "@xml/searchable";
|
||||
public const int LauncherIcon = Resource.Mipmap.ic_launcher_online;
|
||||
#endif
|
||||
public const int LauncherIcon = Resource.Mipmap.ic_launcher_online;
|
||||
|
||||
public const int NotificationLockedIcon = Resource.Drawable.ic_notify_loaded;
|
||||
public const int NotificationUnlockedIcon = Resource.Drawable.ic_notify_locked;
|
||||
|
||||
|
||||
Reference in New Issue
Block a user