mirror of
https://github.com/moparisthebest/keepass2android
synced 2024-11-26 03:02:24 -05:00
Changelog: setCancellable(false)
AppTask: bugfix for read-only dbs CopyToClipboardService: Can handle time-out for additional strings copied to clipboard; can update the Keyboard data added comments minor changes
This commit is contained in:
parent
dd557cb455
commit
2849620f55
@ -20,7 +20,7 @@
|
|||||||
<DebugType>full</DebugType>
|
<DebugType>full</DebugType>
|
||||||
<Optimize>False</Optimize>
|
<Optimize>False</Optimize>
|
||||||
<OutputPath>bin\Debug</OutputPath>
|
<OutputPath>bin\Debug</OutputPath>
|
||||||
<DefineConstants>DEBUG;EXCLUDE_TWOFISH;INCLUDE_KEYBOARD;INCLUDE_FILECHOOSER;INCLUDE_JAVAFILESTORAGE;INCLUDE_KEYTRANSFORM</DefineConstants>
|
<DefineConstants>DEBUG;EXCLUDE_TWOFISH;EXCLUDE_KEYBOARD;EXCLUDE_FILECHOOSER;EXCLUDE_JAVAFILESTORAGE;EXCLUDE_KEYTRANSFORM</DefineConstants>
|
||||||
<ErrorReport>prompt</ErrorReport>
|
<ErrorReport>prompt</ErrorReport>
|
||||||
<WarningLevel>4</WarningLevel>
|
<WarningLevel>4</WarningLevel>
|
||||||
<ConsolePause>False</ConsolePause>
|
<ConsolePause>False</ConsolePause>
|
||||||
|
@ -2,7 +2,7 @@
|
|||||||
//------------------------------------------------------------------------------
|
//------------------------------------------------------------------------------
|
||||||
// <auto-generated>
|
// <auto-generated>
|
||||||
// Dieser Code wurde von einem Tool generiert.
|
// Dieser Code wurde von einem Tool generiert.
|
||||||
// Laufzeitversion:4.0.30319.34011
|
// Laufzeitversion:4.0.30319.34014
|
||||||
//
|
//
|
||||||
// Änderungen an dieser Datei können falsches Verhalten verursachen und gehen verloren, wenn
|
// Änderungen an dieser Datei können falsches Verhalten verursachen und gehen verloren, wenn
|
||||||
// der Code erneut generiert wird.
|
// der Code erneut generiert wird.
|
||||||
|
@ -20,7 +20,7 @@
|
|||||||
<DebugType>full</DebugType>
|
<DebugType>full</DebugType>
|
||||||
<Optimize>false</Optimize>
|
<Optimize>false</Optimize>
|
||||||
<OutputPath>bin\Debug\</OutputPath>
|
<OutputPath>bin\Debug\</OutputPath>
|
||||||
<DefineConstants>TRACE;DEBUG;EXCLUDE_TWOFISH;INCLUDE_KEYBOARD;INCLUDE_FILECHOOSER;INCLUDE_JAVAFILESTORAGE;INCLUDE_KEYTRANSFORM</DefineConstants>
|
<DefineConstants>TRACE;DEBUG;EXCLUDE_TWOFISH;EXCLUDE_KEYBOARD;EXCLUDE_FILECHOOSER;EXCLUDE_JAVAFILESTORAGE;EXCLUDE_KEYTRANSFORM</DefineConstants>
|
||||||
<ErrorReport>prompt</ErrorReport>
|
<ErrorReport>prompt</ErrorReport>
|
||||||
<WarningLevel>4</WarningLevel>
|
<WarningLevel>4</WarningLevel>
|
||||||
</PropertyGroup>
|
</PropertyGroup>
|
||||||
|
2
src/Kp2aUnitTests/Resources/Resource.Designer.cs
generated
2
src/Kp2aUnitTests/Resources/Resource.Designer.cs
generated
@ -2,7 +2,7 @@
|
|||||||
//------------------------------------------------------------------------------
|
//------------------------------------------------------------------------------
|
||||||
// <auto-generated>
|
// <auto-generated>
|
||||||
// Dieser Code wurde von einem Tool generiert.
|
// Dieser Code wurde von einem Tool generiert.
|
||||||
// Laufzeitversion:4.0.30319.34011
|
// Laufzeitversion:4.0.30319.34014
|
||||||
//
|
//
|
||||||
// Änderungen an dieser Datei können falsches Verhalten verursachen und gehen verloren, wenn
|
// Änderungen an dieser Datei können falsches Verhalten verursachen und gehen verloren, wenn
|
||||||
// der Code erneut generiert wird.
|
// der Code erneut generiert wird.
|
||||||
|
@ -1,63 +1,9 @@
|
|||||||
using System;
|
|
||||||
using KeePassLib;
|
using KeePassLib;
|
||||||
using KeePassLib.Collections;
|
|
||||||
using KeePassLib.Keys;
|
using KeePassLib.Keys;
|
||||||
using KeePassLib.Security;
|
|
||||||
using KeePassLib.Serialization;
|
using KeePassLib.Serialization;
|
||||||
|
|
||||||
namespace keepass2android
|
namespace keepass2android
|
||||||
{
|
{
|
||||||
/// <summary>
|
|
||||||
/// Represents the strings which are output from a PwEntry.
|
|
||||||
/// </summary>
|
|
||||||
/// In contrast to the original PwEntry, this means that placeholders are replaced. Also, plugins may modify
|
|
||||||
/// or add fields.
|
|
||||||
public class PwEntryOutput
|
|
||||||
{
|
|
||||||
private readonly PwEntry _entry;
|
|
||||||
private readonly PwDatabase _db;
|
|
||||||
private readonly ProtectedStringDictionary _outputStrings = new ProtectedStringDictionary();
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Constructs the PwEntryOutput by replacing the placeholders
|
|
||||||
/// </summary>
|
|
||||||
public PwEntryOutput(PwEntry entry, PwDatabase db)
|
|
||||||
{
|
|
||||||
_entry = entry;
|
|
||||||
_db = db;
|
|
||||||
|
|
||||||
foreach (var pair in entry.Strings)
|
|
||||||
{
|
|
||||||
_outputStrings.Set(pair.Key, new ProtectedString(entry.Strings.Get(pair.Key).IsProtected, GetStringAndReplacePlaceholders(pair.Key)));
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
string GetStringAndReplacePlaceholders(string key)
|
|
||||||
{
|
|
||||||
String value = Entry.Strings.ReadSafe(key);
|
|
||||||
value = SprEngine.Compile(value, new SprContext(Entry, _db, SprCompileFlags.All));
|
|
||||||
return value;
|
|
||||||
}
|
|
||||||
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// Returns the ID of the entry
|
|
||||||
/// </summary>
|
|
||||||
public PwUuid Uuid
|
|
||||||
{
|
|
||||||
get { return Entry.Uuid; }
|
|
||||||
}
|
|
||||||
|
|
||||||
/// <summary>
|
|
||||||
/// The output strings for the represented entry
|
|
||||||
/// </summary>
|
|
||||||
public ProtectedStringDictionary OutputStrings { get { return _outputStrings; } }
|
|
||||||
|
|
||||||
public PwEntry Entry
|
|
||||||
{
|
|
||||||
get { return _entry; }
|
|
||||||
}
|
|
||||||
}
|
|
||||||
public class App
|
public class App
|
||||||
{
|
{
|
||||||
|
|
||||||
|
@ -87,16 +87,7 @@ namespace keepass2android
|
|||||||
|
|
||||||
public void StorePlugin(string pluginPackage, string accessToken, IList<string> requestedScopes)
|
public void StorePlugin(string pluginPackage, string accessToken, IList<string> requestedScopes)
|
||||||
{
|
{
|
||||||
ISharedPreferences hostPrefs = GetHostPrefs();
|
|
||||||
ISharedPreferences pluginPrefs = GetPreferencesForPlugin(pluginPackage);
|
ISharedPreferences pluginPrefs = GetPreferencesForPlugin(pluginPackage);
|
||||||
var stringSet = hostPrefs.GetStringSet(_pluginlist, new Collection<string>());
|
|
||||||
if (!stringSet.Contains(pluginPackage))
|
|
||||||
{
|
|
||||||
stringSet.Add(pluginPackage);
|
|
||||||
hostPrefs.Edit()
|
|
||||||
.PutStringSet(_pluginlist, stringSet)
|
|
||||||
.Commit();
|
|
||||||
}
|
|
||||||
|
|
||||||
pluginPrefs.Edit()
|
pluginPrefs.Edit()
|
||||||
.PutString(_scopes, AccessManager.StringArrayToString(requestedScopes))
|
.PutString(_scopes, AccessManager.StringArrayToString(requestedScopes))
|
||||||
|
@ -21,6 +21,9 @@ using keepass2android.views;
|
|||||||
namespace PluginHostTest
|
namespace PluginHostTest
|
||||||
{
|
{
|
||||||
[Activity(Label = "TODO Details")]
|
[Activity(Label = "TODO Details")]
|
||||||
|
[IntentFilter(new[] { Strings.ActionEditPluginSettings},
|
||||||
|
Label = AppNames.AppName,
|
||||||
|
Categories = new[] { Intent.CategoryDefault })]
|
||||||
public class PluginDetailsActivity : Activity
|
public class PluginDetailsActivity : Activity
|
||||||
{
|
{
|
||||||
protected override void OnCreate(Bundle bundle)
|
protected override void OnCreate(Bundle bundle)
|
||||||
|
@ -1,28 +1,19 @@
|
|||||||
using System;
|
using System;
|
||||||
using System.Collections.Generic;
|
using System.Collections.Generic;
|
||||||
using System.IO;
|
|
||||||
using System.Linq;
|
using System.Linq;
|
||||||
using System.Text;
|
|
||||||
using System.Xml.Linq;
|
|
||||||
using Android.App;
|
using Android.App;
|
||||||
using Android.Content;
|
using Android.Content;
|
||||||
using Android.Content.PM;
|
using Android.Content.PM;
|
||||||
using Android.OS;
|
|
||||||
using Android.Runtime;
|
|
||||||
using Android.Util;
|
using Android.Util;
|
||||||
using Android.Views;
|
|
||||||
using Android.Widget;
|
|
||||||
using KeePassLib;
|
|
||||||
using KeePassLib.Collections;
|
|
||||||
using KeePassLib.Serialization;
|
|
||||||
using KeePassLib.Utility;
|
using KeePassLib.Utility;
|
||||||
using Keepass2android;
|
|
||||||
using Keepass2android.Pluginsdk;
|
using Keepass2android.Pluginsdk;
|
||||||
using Org.Json;
|
using Org.Json;
|
||||||
using PluginHostTest;
|
|
||||||
|
|
||||||
namespace keepass2android
|
namespace keepass2android
|
||||||
{
|
{
|
||||||
|
/// <summary>
|
||||||
|
/// Class which manages plugins inside the app
|
||||||
|
/// </summary>
|
||||||
[BroadcastReceiver()]
|
[BroadcastReceiver()]
|
||||||
[IntentFilter(new[] { Strings.ActionRequestAccess})]
|
[IntentFilter(new[] { Strings.ActionRequestAccess})]
|
||||||
public class PluginHost: BroadcastReceiver
|
public class PluginHost: BroadcastReceiver
|
||||||
@ -33,6 +24,9 @@ namespace keepass2android
|
|||||||
|
|
||||||
private static readonly string[] _validScopes = { Strings.ScopeDatabaseActions, Strings.ScopeCurrentEntry };
|
private static readonly string[] _validScopes = { Strings.ScopeDatabaseActions, Strings.ScopeCurrentEntry };
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// Sends a broadcast to all potential plugins prompting them to request access to our app.
|
||||||
|
/// </summary>
|
||||||
public static void TriggerRequests(Context ctx)
|
public static void TriggerRequests(Context ctx)
|
||||||
{
|
{
|
||||||
Intent accessIntent = new Intent(Strings.ActionTriggerRequestAccess);
|
Intent accessIntent = new Intent(Strings.ActionTriggerRequestAccess);
|
||||||
@ -65,9 +59,6 @@ namespace keepass2android
|
|||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
public override void OnReceive(Context context, Intent intent)
|
public override void OnReceive(Context context, Intent intent)
|
||||||
{
|
{
|
||||||
PluginDatabase pluginDb = new PluginDatabase(context);
|
PluginDatabase pluginDb = new PluginDatabase(context);
|
||||||
@ -143,6 +134,9 @@ namespace keepass2android
|
|||||||
return true;
|
return true;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/// <summary>
|
||||||
|
/// adds the entry output data to the intent to be sent to a plugin
|
||||||
|
/// </summary>
|
||||||
public static void AddEntryToIntent(Intent intent, PwEntryOutput entry)
|
public static void AddEntryToIntent(Intent intent, PwEntryOutput entry)
|
||||||
{
|
{
|
||||||
/*//add the entry XML
|
/*//add the entry XML
|
||||||
|
@ -57,6 +57,7 @@
|
|||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<Compile Include="Activity1.cs" />
|
<Compile Include="Activity1.cs" />
|
||||||
<Compile Include="App.cs" />
|
<Compile Include="App.cs" />
|
||||||
|
<Compile Include="AppNames.cs" />
|
||||||
<Compile Include="ClickView.cs" />
|
<Compile Include="ClickView.cs" />
|
||||||
<Compile Include="CopyToClipboardService.cs" />
|
<Compile Include="CopyToClipboardService.cs" />
|
||||||
<Compile Include="EntryActivity.cs" />
|
<Compile Include="EntryActivity.cs" />
|
||||||
@ -78,6 +79,7 @@
|
|||||||
<Compile Include="PluginHost.cs" />
|
<Compile Include="PluginHost.cs" />
|
||||||
<Compile Include="EntryActivityClasses\PluginMenuOption.cs" />
|
<Compile Include="EntryActivityClasses\PluginMenuOption.cs" />
|
||||||
<Compile Include="EntryActivityClasses\PluginPopupMenuItem.cs" />
|
<Compile Include="EntryActivityClasses\PluginPopupMenuItem.cs" />
|
||||||
|
<Compile Include="PwEntryOutput.cs" />
|
||||||
<Compile Include="Resources\Resource.Designer.cs" />
|
<Compile Include="Resources\Resource.Designer.cs" />
|
||||||
<Compile Include="Properties\AssemblyInfo.cs" />
|
<Compile Include="Properties\AssemblyInfo.cs" />
|
||||||
<Compile Include="SprCompileFlags.cs" />
|
<Compile Include="SprCompileFlags.cs" />
|
||||||
|
@ -39,6 +39,7 @@ namespace keepass2android
|
|||||||
};
|
};
|
||||||
|
|
||||||
builder.SetPositiveButton(Android.Resource.String.Ok, (dlgSender, dlgEvt) => { });
|
builder.SetPositiveButton(Android.Resource.String.Ok, (dlgSender, dlgEvt) => { });
|
||||||
|
builder.SetCancelable(false);
|
||||||
|
|
||||||
builder.SetMessage("temp");
|
builder.SetMessage("temp");
|
||||||
Dialog dialog = builder.Create();
|
Dialog dialog = builder.Create();
|
||||||
|
@ -2,7 +2,7 @@
|
|||||||
//------------------------------------------------------------------------------
|
//------------------------------------------------------------------------------
|
||||||
// <auto-generated>
|
// <auto-generated>
|
||||||
// Dieser Code wurde von einem Tool generiert.
|
// Dieser Code wurde von einem Tool generiert.
|
||||||
// Laufzeitversion:4.0.30319.34011
|
// Laufzeitversion:4.0.30319.34014
|
||||||
//
|
//
|
||||||
// Änderungen an dieser Datei können falsches Verhalten verursachen und gehen verloren, wenn
|
// Änderungen an dieser Datei können falsches Verhalten verursachen und gehen verloren, wenn
|
||||||
// der Code erneut generiert wird.
|
// der Code erneut generiert wird.
|
||||||
|
@ -180,7 +180,8 @@ namespace keepass2android
|
|||||||
{
|
{
|
||||||
Finish();
|
Finish();
|
||||||
return true;
|
return true;
|
||||||
} else
|
}
|
||||||
|
else
|
||||||
{
|
{
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
@ -343,7 +343,10 @@ namespace keepass2android
|
|||||||
{
|
{
|
||||||
//if the database is readonly, don't offer to modify the URL
|
//if the database is readonly, don't offer to modify the URL
|
||||||
if (App.Kp2a.GetDb().CanWrite == false)
|
if (App.Kp2a.GetDb().CanWrite == false)
|
||||||
|
{
|
||||||
base.OnCompleteCreateEntryActivity(entryActivity);
|
base.OnCompleteCreateEntryActivity(entryActivity);
|
||||||
|
return;
|
||||||
|
}
|
||||||
entryActivity.AskAddUrlThenCompleteCreate(UrlToSearchFor);
|
entryActivity.AskAddUrlThenCompleteCreate(UrlToSearchFor);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -25,6 +25,7 @@ namespace keepass2android
|
|||||||
public class Intents
|
public class Intents
|
||||||
{
|
{
|
||||||
|
|
||||||
|
|
||||||
/// <summary>Broadcast this intent to lock the database (with quick unlock if enabled)</summary>
|
/// <summary>Broadcast this intent to lock the database (with quick unlock if enabled)</summary>
|
||||||
public const String LockDatabase = "keepass2android.lock_database";
|
public const String LockDatabase = "keepass2android.lock_database";
|
||||||
/// <summary>Broadcast this intent to close the database (no quick unlock, full close)</summary>
|
/// <summary>Broadcast this intent to close the database (no quick unlock, full close)</summary>
|
||||||
@ -50,6 +51,8 @@ namespace keepass2android
|
|||||||
public const int RequestCodeFileBrowseForKeyfile = 987324;
|
public const int RequestCodeFileBrowseForKeyfile = 987324;
|
||||||
|
|
||||||
public const String ShowNotification = "keepass2android.show_notification";
|
public const String ShowNotification = "keepass2android.show_notification";
|
||||||
|
public const String UpdateKeyboard = "keepass2android.update_keyboard";
|
||||||
|
public const String CopyStringToClipboard = "keepass2android.copy_string_to_clipboard";
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -30,7 +30,7 @@
|
|||||||
<DebugType>full</DebugType>
|
<DebugType>full</DebugType>
|
||||||
<Optimize>false</Optimize>
|
<Optimize>false</Optimize>
|
||||||
<OutputPath>bin\Debug</OutputPath>
|
<OutputPath>bin\Debug</OutputPath>
|
||||||
<DefineConstants>DEBUG;EXCLUDE_TWOFISH;INCLUDE_KEYBOARD;INCLUDE_FILECHOOSER;INCLUDE_JAVAFILESTORAGE;INCLUDE_KEYTRANSFORM</DefineConstants>
|
<DefineConstants>DEBUG;EXCLUDE_TWOFISH;EXCLUDE_KEYBOARD;EXCLUDE_FILECHOOSER;EXCLUDE_JAVAFILESTORAGE;EXCLUDE_KEYTRANSFORM</DefineConstants>
|
||||||
<ErrorReport>prompt</ErrorReport>
|
<ErrorReport>prompt</ErrorReport>
|
||||||
<WarningLevel>4</WarningLevel>
|
<WarningLevel>4</WarningLevel>
|
||||||
<ConsolePause>False</ConsolePause>
|
<ConsolePause>False</ConsolePause>
|
||||||
@ -110,6 +110,12 @@
|
|||||||
<Compile Include="icons\DrawableFactory.cs" />
|
<Compile Include="icons\DrawableFactory.cs" />
|
||||||
<Compile Include="icons\Icons.cs" />
|
<Compile Include="icons\Icons.cs" />
|
||||||
<Compile Include="NfcOtpActivity.cs" />
|
<Compile Include="NfcOtpActivity.cs" />
|
||||||
|
<Compile Include="pluginhost\PluginArrayAdapter.cs" />
|
||||||
|
<Compile Include="pluginhost\PluginDatabase.cs" />
|
||||||
|
<Compile Include="pluginhost\PluginDetailsActivity.cs" />
|
||||||
|
<Compile Include="pluginhost\PluginHost.cs" />
|
||||||
|
<Compile Include="pluginhost\PluginListActivity.cs" />
|
||||||
|
<Compile Include="PwEntryOutput.cs" />
|
||||||
<Compile Include="Resources\Resource.designer.cs" />
|
<Compile Include="Resources\Resource.designer.cs" />
|
||||||
<Compile Include="Properties\AssemblyInfo.cs" />
|
<Compile Include="Properties\AssemblyInfo.cs" />
|
||||||
<Compile Include="KeePass.cs" />
|
<Compile Include="KeePass.cs" />
|
||||||
@ -607,11 +613,11 @@
|
|||||||
<AndroidResource Include="Resources\drawable\navigation_cancel.png" />
|
<AndroidResource Include="Resources\drawable\navigation_cancel.png" />
|
||||||
<AndroidResource Include="Resources\values-v14\styles.xml" />
|
<AndroidResource Include="Resources\values-v14\styles.xml" />
|
||||||
<AndroidResource Include="Resources\values-v14\colors.xml" />
|
<AndroidResource Include="Resources\values-v14\colors.xml" />
|
||||||
<AndroidResource Include="Resources\layout-v14\entry_view_contents.xml" />
|
<AndroidAsset Include="Resources\layout-v14\entry_view_contents.xml" />
|
||||||
<AndroidResource Include="Resources\layout-v14\group_add_entry.xml">
|
<AndroidResource Include="Resources\layout-v14\group_add_entry.xml">
|
||||||
<SubType>Designer</SubType>
|
<SubType>Designer</SubType>
|
||||||
</AndroidResource>
|
</AndroidResource>
|
||||||
<AndroidResource Include="Resources\layout-v14\entry_view.xml" />
|
<AndroidAsset Include="Resources\layout-v14\entry_view.xml" />
|
||||||
<AndroidResource Include="Resources\layout-v14\entry_edit.xml" />
|
<AndroidResource Include="Resources\layout-v14\entry_edit.xml" />
|
||||||
<AndroidResource Include="Resources\layout-v14\SaveButton.xml" />
|
<AndroidResource Include="Resources\layout-v14\SaveButton.xml" />
|
||||||
<AndroidResource Include="Resources\layout-v14\generate_password.xml" />
|
<AndroidResource Include="Resources\layout-v14\generate_password.xml" />
|
||||||
@ -689,6 +695,10 @@
|
|||||||
<Project>{a8779d4d-7c49-4c2f-82bd-2cdc448391da}</Project>
|
<Project>{a8779d4d-7c49-4c2f-82bd-2cdc448391da}</Project>
|
||||||
<Name>Kp2aKeyboardBinding</Name>
|
<Name>Kp2aKeyboardBinding</Name>
|
||||||
</ProjectReference>
|
</ProjectReference>
|
||||||
|
<ProjectReference Include="..\PluginSdkBinding\PluginSdkBinding.csproj">
|
||||||
|
<Project>{3da3911e-36de-465e-8f15-f1991b6437e5}</Project>
|
||||||
|
<Name>PluginSdkBinding</Name>
|
||||||
|
</ProjectReference>
|
||||||
<ProjectReference Include="..\TwofishCipher\TwofishCipher.csproj">
|
<ProjectReference Include="..\TwofishCipher\TwofishCipher.csproj">
|
||||||
<Project>{5cf675a5-9bee-4720-bed9-d5bf14a2ebf9}</Project>
|
<Project>{5cf675a5-9bee-4720-bed9-d5bf14a2ebf9}</Project>
|
||||||
<Name>TwofishCipher</Name>
|
<Name>TwofishCipher</Name>
|
||||||
@ -957,4 +967,15 @@
|
|||||||
<ItemGroup>
|
<ItemGroup>
|
||||||
<AndroidResource Include="Resources\drawable\collections_new_label_holodark.png" />
|
<AndroidResource Include="Resources\drawable\collections_new_label_holodark.png" />
|
||||||
</ItemGroup>
|
</ItemGroup>
|
||||||
|
<ItemGroup>
|
||||||
|
<AndroidAsset Include="Resources\layout-v14\plugin_details.xml" />
|
||||||
|
</ItemGroup>
|
||||||
|
<ItemGroup>
|
||||||
|
<AndroidAsset Include="Resources\layout-v14\plugin_list.xml">
|
||||||
|
<SubType>AndroidResource</SubType>
|
||||||
|
</AndroidAsset>
|
||||||
|
</ItemGroup>
|
||||||
|
<ItemGroup>
|
||||||
|
<AndroidAsset Include="Resources\layout-v14\ListViewPluginRow.xml" />
|
||||||
|
</ItemGroup>
|
||||||
</Project>
|
</Project>
|
@ -49,6 +49,13 @@ namespace keepass2android
|
|||||||
public const int NotifyKeyboard = 3;
|
public const int NotifyKeyboard = 3;
|
||||||
public const int ClearClipboard = 4;
|
public const int ClearClipboard = 4;
|
||||||
|
|
||||||
|
public void CopyValueToClipboardWithTimeout(Context ctx, string text)
|
||||||
|
{
|
||||||
|
Intent i = new Intent(ctx, typeof(CopyToClipboardService));
|
||||||
|
i.SetAction(Intents.CopyStringToClipboard);
|
||||||
|
i.PutExtra(_stringtocopy, text);
|
||||||
|
ctx.StartService(i);
|
||||||
|
}
|
||||||
|
|
||||||
public CopyToClipboardService (IntPtr javaReference, JniHandleOwnership transfer)
|
public CopyToClipboardService (IntPtr javaReference, JniHandleOwnership transfer)
|
||||||
: base(javaReference, transfer)
|
: base(javaReference, transfer)
|
||||||
@ -79,8 +86,9 @@ namespace keepass2android
|
|||||||
filter.AddAction(Intents.DatabaseLocked);
|
filter.AddAction(Intents.DatabaseLocked);
|
||||||
RegisterReceiver(_stopOnLockBroadcastReceiver, filter);
|
RegisterReceiver(_stopOnLockBroadcastReceiver, filter);
|
||||||
|
|
||||||
|
if ((intent.Action == Intents.ShowNotification) || (intent.Action == Intents.UpdateKeyboard))
|
||||||
|
{
|
||||||
String uuidBytes = intent.GetStringExtra(EntryActivity.KeyEntry);
|
String uuidBytes = intent.GetStringExtra(EntryActivity.KeyEntry);
|
||||||
bool closeAfterCreate = intent.GetBooleanExtra(EntryActivity.KeyCloseAfterCreate, false);
|
|
||||||
|
|
||||||
PwUuid entryId = PwUuid.Zero;
|
PwUuid entryId = PwUuid.Zero;
|
||||||
if (uuidBytes != null)
|
if (uuidBytes != null)
|
||||||
@ -98,8 +106,26 @@ namespace keepass2android
|
|||||||
return StartCommandResult.NotSticky;
|
return StartCommandResult.NotSticky;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if (intent.Action == Intents.ShowNotification)
|
||||||
|
{
|
||||||
|
//first time opening the entry -> bring up the notifications
|
||||||
|
bool closeAfterCreate = intent.GetBooleanExtra(EntryActivity.KeyCloseAfterCreate, false);
|
||||||
DisplayAccessNotifications(entry, closeAfterCreate);
|
DisplayAccessNotifications(entry, closeAfterCreate);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
//this action is received when the data in the entry has changed (e.g. by plugins)
|
||||||
|
//update the keyboard data.
|
||||||
|
//Check if keyboard is (still) available
|
||||||
|
if (Keepass2android.Kbbridge.KeyboardData.EntryId == entry.Uuid.ToHexString())
|
||||||
|
MakeAccessibleForKeyboard(entry);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (intent.Action == Intents.CopyStringToClipboard)
|
||||||
|
{
|
||||||
|
|
||||||
|
TimeoutCopyToClipboard(intent.GetStringExtra(_stringtocopy));
|
||||||
|
}
|
||||||
|
|
||||||
return StartCommandResult.RedeliverIntent;
|
return StartCommandResult.RedeliverIntent;
|
||||||
}
|
}
|
||||||
@ -308,12 +334,6 @@ namespace keepass2android
|
|||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
static string GetStringAndReplacePlaceholders(PwEntry entry, string key)
|
|
||||||
{
|
|
||||||
String value = entry.Strings.ReadSafe(key);
|
|
||||||
value = SprEngine.Compile(value, new SprContext(entry, App.Kp2a.GetDb().KpDatabase, SprCompileFlags.All));
|
|
||||||
return value;
|
|
||||||
}
|
|
||||||
|
|
||||||
public void OnWaitElementDeleted(int itemId)
|
public void OnWaitElementDeleted(int itemId)
|
||||||
{
|
{
|
||||||
@ -392,6 +412,9 @@ namespace keepass2android
|
|||||||
// Setup to allow the toast to happen in the foreground
|
// Setup to allow the toast to happen in the foreground
|
||||||
readonly Handler _uiThreadCallback = new Handler();
|
readonly Handler _uiThreadCallback = new Handler();
|
||||||
private ClearClipboardTask _clearClipboardTask;
|
private ClearClipboardTask _clearClipboardTask;
|
||||||
|
private const string _stringtocopy = "StringToCopy";
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
private Notification GetNotification(String intentText, int descResId, int drawableResId, String entryName) {
|
private Notification GetNotification(String intentText, int descResId, int drawableResId, String entryName) {
|
||||||
String desc = GetString(descResId);
|
String desc = GetString(descResId);
|
||||||
|
Loading…
Reference in New Issue
Block a user