Add strings for db actions

Broadcast database actions
This commit is contained in:
Philipp Crocoll 2014-05-29 20:28:49 +02:00
parent 87fe6abd38
commit 85fb4ba9f8
6 changed files with 93 additions and 6 deletions

View File

@ -20,6 +20,7 @@ public abstract class PluginActionBroadcastReceiver extends BroadcastReceiver {
protected Context _context; protected Context _context;
protected Intent _intent; protected Intent _intent;
public PluginActionBase(Context context, Intent intent) public PluginActionBase(Context context, Intent intent)
{ {
_context = context; _context = context;
@ -35,6 +36,16 @@ public abstract class PluginActionBroadcastReceiver extends BroadcastReceiver {
return _context; return _context;
} }
}
protected abstract class PluginEntryActionBase extends PluginActionBase
{
public PluginEntryActionBase(Context context, Intent intent)
{
super(context, intent);
}
protected HashMap<String, String> getEntryFieldsFromIntent() protected HashMap<String, String> getEntryFieldsFromIntent()
{ {
HashMap<String, String> res = new HashMap<String, String>(); HashMap<String, String> res = new HashMap<String, String>();
@ -60,7 +71,7 @@ public abstract class PluginActionBroadcastReceiver extends BroadcastReceiver {
} }
protected class ActionSelected extends PluginActionBase protected class ActionSelected extends PluginEntryActionBase
{ {
public ActionSelected(Context ctx, Intent intent) { public ActionSelected(Context ctx, Intent intent) {
super(ctx, intent); super(ctx, intent);
@ -114,7 +125,7 @@ public abstract class PluginActionBroadcastReceiver extends BroadcastReceiver {
} }
} }
protected class CloseEntryView extends PluginActionBase protected class CloseEntryView extends PluginEntryActionBase
{ {
public CloseEntryView(Context context, Intent intent) { public CloseEntryView(Context context, Intent intent) {
super(context, intent); super(context, intent);
@ -126,7 +137,7 @@ public abstract class PluginActionBroadcastReceiver extends BroadcastReceiver {
} }
} }
protected class OpenEntry extends PluginActionBase protected class OpenEntry extends PluginEntryActionBase
{ {
public OpenEntry(Context context, Intent intent) public OpenEntry(Context context, Intent intent)
@ -195,6 +206,29 @@ public abstract class PluginActionBroadcastReceiver extends BroadcastReceiver {
} }
protected class DatabaseAction extends PluginActionBase
{
public DatabaseAction(Context context, Intent intent) {
super(context, intent);
}
public String getFileDisplayName()
{
return _intent.getStringExtra(Strings.EXTRA_DATABASE_FILE_DISPLAYNAME);
}
public String getFilePath()
{
return _intent.getStringExtra(Strings.EXTRA_DATABASE_FILEPATH);
}
public String getAction()
{
return _intent.getAction();
}
}
//EntryOutputModified is very similar to OpenEntry because it receives the same //EntryOutputModified is very similar to OpenEntry because it receives the same
//data (+ the field id which was modified) //data (+ the field id which was modified)
protected class EntryOutputModified extends OpenEntry protected class EntryOutputModified extends OpenEntry
@ -233,6 +267,13 @@ public abstract class PluginActionBroadcastReceiver extends BroadcastReceiver {
{ {
entryOutputModified(new EntryOutputModified(ctx, intent)); entryOutputModified(new EntryOutputModified(ctx, intent));
} }
else if (action.equals(Strings.ACTION_LOCK_DATABASE)
|| action.equals(Strings.ACTION_UNLOCK_DATABASE)
|| action.equals(Strings.ACTION_OPEN_DATABASE)
|| action.equals(Strings.ACTION_CLOSE_DATABASE))
{
databaseAction(new DatabaseAction(ctx, intent));
}
else else
{ {
//TODO handle unexpected action //TODO handle unexpected action
@ -249,4 +290,6 @@ public abstract class PluginActionBroadcastReceiver extends BroadcastReceiver {
protected void entryOutputModified(EntryOutputModified eom) {} protected void entryOutputModified(EntryOutputModified eom) {}
protected void databaseAction(DatabaseAction db) {}
} }

View File

@ -164,6 +164,21 @@ public class Strings {
*/ */
public static final String ACTION_SET_ENTRY_FIELD = "keepass2android.ACTION_SET_ENTRY_FIELD"; public static final String ACTION_SET_ENTRY_FIELD = "keepass2android.ACTION_SET_ENTRY_FIELD";
/** Actions for an intent from KP2A to the plugin to inform that a database was opened, closed, quicklocked or quickunlocked.*/
public static final String ACTION_OPEN_DATABASE = "keepass2android.ACTION_OPEN_DATABASE";
public static final String ACTION_CLOSE_DATABASE = "keepass2android.ACTION_CLOSE_DATABASE";
public static final String ACTION_LOCK_DATABASE = "keepass2android.ACTION_LOCK_DATABASE";
public static final String ACTION_UNLOCK_DATABASE = "keepass2android.ACTION_UNLOCK_DATABASE";
/** Extra for ACTION_OPEN_DATABASE and ACTION_CLOSE_DATABASE containing a filepath which is used
* by KP2A internally to identify the file. Use only where necessary, might contain credentials
* for accessing the file (on remote storage).*/
public static final String EXTRA_DATABASE_FILEPATH = "keepass2android.EXTRA_DATABASE_FILEPATH";
/** Extra for ACTION_OPEN_DATABASE and ACTION_CLOSE_DATABASE containing a filepath which can be
* displayed to the user.*/
public static final String EXTRA_DATABASE_FILE_DISPLAYNAME = "keepass2android.EXTRA_DATABASE_FILE_DISPLAYNAME";
public static final String EXTRA_FIELD_VALUE = "keepass2android.EXTRA_FIELD_VALUE"; public static final String EXTRA_FIELD_VALUE = "keepass2android.EXTRA_FIELD_VALUE";
public static final String EXTRA_FIELD_PROTECTED = "keepass2android.EXTRA_FIELD_PROTECTED"; public static final String EXTRA_FIELD_PROTECTED = "keepass2android.EXTRA_FIELD_PROTECTED";

View File

@ -35,6 +35,7 @@ using Android.Content.PM;
using KeePassLib.Keys; using KeePassLib.Keys;
using KeePassLib.Serialization; using KeePassLib.Serialization;
using KeePassLib.Utility; using KeePassLib.Utility;
using Keepass2android.Pluginsdk;
using OtpKeyProv; using OtpKeyProv;
using keepass2android.Io; using keepass2android.Io;
using keepass2android.Utils; using keepass2android.Utils;
@ -1293,6 +1294,8 @@ namespace keepass2android
_act.LaunchNextActivity(); _act.LaunchNextActivity();
_act.BroadcastOpenDatabase();
GC.Collect(); // Ensure temporary memory used while loading is collected GC.Collect(); // Ensure temporary memory used while loading is collected
} }
@ -1303,6 +1306,11 @@ namespace keepass2android
} }
} }
private void BroadcastOpenDatabase()
{
App.Kp2a.BroadcastDatabaseAction(this, Strings.ActionOpenDatabase);
}
private void ClearEnteredPassword() private void ClearEnteredPassword()
{ {
SetEditText(Resource.Id.password, ""); SetEditText(Resource.Id.password, "");

View File

@ -44,7 +44,7 @@ namespace keepass2android
} }
public static void GotoUrl(Context context, String url) { public static void GotoUrl(Context context, String url) {
if ( url != null && url.Length > 0 ) { if ( !string.IsNullOrEmpty(url) ) {
if (url.StartsWith("androidapp://")) if (url.StartsWith("androidapp://"))
{ {

View File

@ -34,6 +34,7 @@ using Android.Preferences;
#if !EXCLUDE_TWOFISH #if !EXCLUDE_TWOFISH
using TwofishCipher; using TwofishCipher;
#endif #endif
using Keepass2android.Pluginsdk;
using keepass2android.Io; using keepass2android.Io;
using keepass2android.addons.OtpKeyProv; using keepass2android.addons.OtpKeyProv;
@ -96,6 +97,7 @@ namespace keepass2android
if (!QuickLocked) if (!QuickLocked)
{ {
Kp2aLog.Log("QuickLocking database"); Kp2aLog.Log("QuickLocking database");
BroadcastDatabaseAction(Application.Context, Strings.ActionLockDatabase);
QuickLocked = true; QuickLocked = true;
} }
@ -108,6 +110,8 @@ namespace keepass2android
{ {
Kp2aLog.Log("Locking database"); Kp2aLog.Log("Locking database");
BroadcastDatabaseAction(Application.Context, Strings.ActionCloseDatabase);
// Couldn't quick-lock, so unload database instead // Couldn't quick-lock, so unload database instead
_db.Clear(); _db.Clear();
QuickLocked = false; QuickLocked = false;
@ -122,6 +126,21 @@ namespace keepass2android
Application.Context.SendBroadcast(new Intent(Intents.DatabaseLocked)); Application.Context.SendBroadcast(new Intent(Intents.DatabaseLocked));
} }
public void BroadcastDatabaseAction(Context ctx, string action)
{
Intent i = new Intent(action);
i.PutExtra(Strings.ExtraDatabaseFileDisplayname, App.Kp2a.GetFileStorage(App.Kp2a.GetDb().Ioc).GetDisplayName(App.Kp2a.GetDb().Ioc));
i.PutExtra(Strings.ExtraDatabaseFilepath, App.Kp2a.GetDb().Ioc.Path);
foreach (var plugin in new PluginDatabase(ctx).GetPluginsWithAcceptedScope(Strings.ScopeDatabaseActions))
{
i.SetPackage(plugin);
ctx.SendBroadcast(i);
}
}
public void LoadDatabase(IOConnectionInfo ioConnectionInfo, MemoryStream memoryStream, CompositeKey compositeKey, ProgressDialogStatusLogger statusLogger, IDatabaseLoader databaseLoader) public void LoadDatabase(IOConnectionInfo ioConnectionInfo, MemoryStream memoryStream, CompositeKey compositeKey, ProgressDialogStatusLogger statusLogger, IDatabaseLoader databaseLoader)
{ {
_db.LoadData(this, ioConnectionInfo, memoryStream, compositeKey, statusLogger, databaseLoader); _db.LoadData(this, ioConnectionInfo, memoryStream, compositeKey, statusLogger, databaseLoader);
@ -134,6 +153,8 @@ namespace keepass2android
QuickLocked = false; QuickLocked = false;
UpdateOngoingNotification(); UpdateOngoingNotification();
BroadcastDatabaseAction(Application.Context, Strings.ActionUnlockDatabase);
} }
public void UpdateOngoingNotification() public void UpdateOngoingNotification()