diff --git a/src/Kp2aBusinessLogic/ProgressDialogStatusLogger.cs b/src/Kp2aBusinessLogic/ProgressDialogStatusLogger.cs
index f3849e46..510434ec 100644
--- a/src/Kp2aBusinessLogic/ProgressDialogStatusLogger.cs
+++ b/src/Kp2aBusinessLogic/ProgressDialogStatusLogger.cs
@@ -30,8 +30,12 @@ namespace keepass2android
readonly IKp2aApp _app;
private readonly Handler _handler;
private string _message = "";
+ private string _submessage;
- public ProgressDialogStatusLogger() {
+ public String SubMessage => _submessage;
+ public String Message => _message;
+
+ public ProgressDialogStatusLogger() {
}
@@ -56,6 +60,7 @@ namespace keepass2android
public void UpdateSubMessage(String submessage)
{
+ _submessage = submessage;
if (_app != null && _progressDialog != null && _handler != null)
{
_handler.Post(() =>
diff --git a/src/Kp2aBusinessLogic/ProgressTask.cs b/src/Kp2aBusinessLogic/ProgressTask.cs
index b26fc667..08c76b70 100644
--- a/src/Kp2aBusinessLogic/ProgressTask.cs
+++ b/src/Kp2aBusinessLogic/ProgressTask.cs
@@ -25,33 +25,94 @@ namespace keepass2android
///
/// Class to run a task while a progress dialog is shown
///
- public class ProgressTask {
- private readonly Handler _handler;
+ public class ProgressTask
+ {
+ //for handling Activity recreation situations, we need access to the currently active task. It must hold that there is no more than one active task.
+ private static ProgressTask _currentTask = null;
+
+ public static void SetNewActiveActivity(Activity activeActivity)
+ {
+ if (_currentTask != null)
+ {
+ _currentTask.ActiveActivity = activeActivity;
+ }
+ }
+ public static void RemoveActiveActivity(Activity activity)
+ {
+ if ((_currentTask != null) && (_currentTask._activeActivity == activity))
+ _currentTask.ActiveActivity = null;
+
+ }
+
+ public Activity ActiveActivity
+ {
+ get { return _activeActivity; }
+ private set
+ {
+ _activeActivity = value;
+ if (_task != null)
+ _task.ActiveActivity = _activeActivity;
+ if (_activeActivity != null)
+ {
+ SetupProgressDialog(_app);
+ _progressDialog.Show();
+ }
+ }
+ }
+
+ private readonly Handler _handler;
private readonly RunnableOnFinish _task;
- private readonly IProgressDialog _progressDialog;
+ private IProgressDialog _progressDialog;
private readonly IKp2aApp _app;
private Thread _thread;
+ private Activity _activeActivity;
+ private ProgressDialogStatusLogger _progressDialogStatusLogger;
- public ProgressTask(IKp2aApp app, Context ctx, RunnableOnFinish task) {
+ public ProgressTask(IKp2aApp app, Activity activity, RunnableOnFinish task)
+ {
+ _activeActivity = activity;
_task = task;
_handler = app.UiThreadHandler;
_app = app;
- // Show process dialog
- _progressDialog = app.CreateProgressDialog(ctx);
- _progressDialog.SetTitle(_app.GetResourceString(UiStringKey.progress_title));
- _progressDialog.SetMessage("Initializing...");
-
- // Set code to run when this is finished
- _task.OnFinishToRun = new AfterTask(task.OnFinishToRun, _handler, _progressDialog);
- _task.SetStatusLogger(new ProgressDialogStatusLogger(_app, _handler, _progressDialog));
+ SetupProgressDialog(app);
+
+ // Set code to run when this is finished
+ _task.OnFinishToRun = new AfterTask(activity, task.OnFinishToRun, _handler, this);
+
+ _task.SetStatusLogger(_progressDialogStatusLogger);
}
-
- public void Run() {
- // Show process dialog
- _progressDialog.Show();
+
+ private void SetupProgressDialog(IKp2aApp app)
+ {
+ string currentMessage = "Initializing...";
+ string currentSubmessage = "";
+
+ if (_progressDialogStatusLogger != null)
+ {
+ currentMessage = _progressDialogStatusLogger.Message;
+ currentSubmessage = _progressDialogStatusLogger.SubMessage;
+ }
+
+
+ // Show process dialog
+ _progressDialog = app.CreateProgressDialog(_activeActivity);
+ _progressDialog.SetTitle(_app.GetResourceString(UiStringKey.progress_title));
+ _progressDialogStatusLogger = new ProgressDialogStatusLogger(_app, _handler, _progressDialog);
+ _progressDialogStatusLogger.UpdateMessage(currentMessage);
+ _progressDialogStatusLogger.UpdateSubMessage(currentSubmessage);
+ }
+
+ public void Run(bool allowOverwriteCurrentTask = false)
+ {
+ if ((!allowOverwriteCurrentTask) && (_currentTask != null))
+ throw new Exception("Cannot start another ProgressTask while ProgressTask is already running! " + _task.GetType().Name + "/" + _currentTask._task.GetType().Name);
+ _currentTask = this;
+
+ // Show process dialog
+ _progressDialog.Show();
// Start Thread to Run task
@@ -66,11 +127,11 @@ namespace keepass2android
}
private class AfterTask : OnFinish {
- readonly IProgressDialog _progressDialog;
+ readonly ProgressTask _progressTask;
- public AfterTask (OnFinish finish, Handler handler, IProgressDialog pd): base(finish, handler)
+ public AfterTask (Activity activity, OnFinish finish, Handler handler, ProgressTask pt): base(activity, finish, handler)
{
- _progressDialog = pd;
+ _progressTask = pt;
}
public override void Run() {
@@ -79,17 +140,19 @@ namespace keepass2android
if (Handler != null) //can be null in tests
{
// Remove the progress dialog
- Handler.Post(delegate { _progressDialog.Dismiss(); });
+ Handler.Post(delegate { _progressTask._progressDialog.Dismiss(); });
}
else
{
- _progressDialog.Dismiss();
+ _progressTask._progressDialog.Dismiss();
}
+ _currentTask = null;
}
}
-
+
+
}
}
diff --git a/src/Kp2aBusinessLogic/database/CheckDatabaseForChanges.cs b/src/Kp2aBusinessLogic/database/CheckDatabaseForChanges.cs
index 3bc976b9..d9ceef73 100644
--- a/src/Kp2aBusinessLogic/database/CheckDatabaseForChanges.cs
+++ b/src/Kp2aBusinessLogic/database/CheckDatabaseForChanges.cs
@@ -18,8 +18,8 @@ namespace keepass2android
private readonly IKp2aApp _app;
- public CheckDatabaseForChanges(Context context, IKp2aApp app, OnFinish finish)
- : base(finish)
+ public CheckDatabaseForChanges(Activity context, IKp2aApp app, OnFinish finish)
+ : base(context, finish)
{
_context = context;
_app = app;
diff --git a/src/Kp2aBusinessLogic/database/Database.cs b/src/Kp2aBusinessLogic/database/Database.cs
index 7d09bf39..6956e7b2 100644
--- a/src/Kp2aBusinessLogic/database/Database.cs
+++ b/src/Kp2aBusinessLogic/database/Database.cs
@@ -21,7 +21,6 @@ using System.IO;
using System.Runtime.Serialization;
using System.Security.Cryptography;
using System.Text;
-using Android.Content;
using Java.Lang;
using KeePassLib;
using KeePassLib.Keys;
@@ -218,7 +217,7 @@ namespace keepass2android
}
- public void SaveData(Context ctx) {
+ public void SaveData() {
KpDatabase.UseFileTransactions = _app.GetBooleanPreference(PreferenceKey.UseFileTransactions);
using (IWriteTransaction trans = _app.GetFileStorage(Ioc).OpenWriteTransaction(Ioc, KpDatabase.UseFileTransactions))
diff --git a/src/Kp2aBusinessLogic/database/SynchronizeCachedDatabase.cs b/src/Kp2aBusinessLogic/database/SynchronizeCachedDatabase.cs
index dc8e367a..bd8c7ca1 100644
--- a/src/Kp2aBusinessLogic/database/SynchronizeCachedDatabase.cs
+++ b/src/Kp2aBusinessLogic/database/SynchronizeCachedDatabase.cs
@@ -11,12 +11,12 @@ namespace keepass2android
{
public class SynchronizeCachedDatabase: RunnableOnFinish
{
- private readonly Context _context;
+ private readonly Activity _context;
private readonly IKp2aApp _app;
private SaveDb _saveDb;
- public SynchronizeCachedDatabase(Context context, IKp2aApp app, OnFinish finish)
- : base(finish)
+ public SynchronizeCachedDatabase(Activity context, IKp2aApp app, OnFinish finish)
+ : base(context, finish)
{
_context = context;
_app = app;
@@ -59,7 +59,7 @@ namespace keepass2android
if (cachingFileStorage.HasLocalChanges(ioc))
{
//conflict! need to merge
- _saveDb = new SaveDb(_context, _app, new ActionOnFinish((success, result) =>
+ _saveDb = new SaveDb(_context, _app, new ActionOnFinish(ActiveActivity, (success, result, activity) =>
{
if (!success)
{
diff --git a/src/Kp2aBusinessLogic/database/edit/ActionOnFinish.cs b/src/Kp2aBusinessLogic/database/edit/ActionOnFinish.cs
index f9446ebf..f7a7f910 100644
--- a/src/Kp2aBusinessLogic/database/edit/ActionOnFinish.cs
+++ b/src/Kp2aBusinessLogic/database/edit/ActionOnFinish.cs
@@ -16,41 +16,37 @@ This file is part of Keepass2Android, Copyright 2013 Philipp Crocoll.
*/
using System;
+using Android.App;
using Android.OS;
namespace keepass2android
{
public class ActionOnFinish: OnFinish
{
- public delegate void ActionToPerformOnFinsh(bool success, String message);
+ public delegate void ActionToPerformOnFinsh(bool success, String message, Activity activeActivity);
readonly ActionToPerformOnFinsh _actionToPerform;
- public ActionOnFinish(ActionToPerformOnFinsh actionToPerform) : base(null, null)
+ public ActionOnFinish(Activity activity, ActionToPerformOnFinsh actionToPerform) : base(activity, null, null)
{
_actionToPerform = actionToPerform;
}
- public ActionOnFinish(ActionToPerformOnFinsh actionToPerform, OnFinish finish) : base(finish)
+ public ActionOnFinish(Activity activity, ActionToPerformOnFinsh actionToPerform, OnFinish finish) : base(activity, finish)
{
_actionToPerform = actionToPerform;
}
-
- public ActionOnFinish(ActionToPerformOnFinsh actionToPerform, Handler handler) : base(handler)
- {
- _actionToPerform = actionToPerform;
- }
-
+
public override void Run()
{
if (Message == null)
Message = "";
if (Handler != null)
{
- Handler.Post(() => {_actionToPerform(Success, Message);});
+ Handler.Post(() => {_actionToPerform(Success, Message, ActiveActivity);});
}
else
- _actionToPerform(Success, Message);
+ _actionToPerform(Success, Message, ActiveActivity);
base.Run();
}
}
diff --git a/src/Kp2aBusinessLogic/database/edit/AddEntry.cs b/src/Kp2aBusinessLogic/database/edit/AddEntry.cs
index 6c4c313b..7cfcfda4 100644
--- a/src/Kp2aBusinessLogic/database/edit/AddEntry.cs
+++ b/src/Kp2aBusinessLogic/database/edit/AddEntry.cs
@@ -15,6 +15,7 @@ This file is part of Keepass2Android, Copyright 2013 Philipp Crocoll. This file
along with Keepass2Android. If not, see .
*/
+using Android.App;
using Android.Content;
using KeePassLib;
@@ -29,20 +30,20 @@ namespace keepass2android
private readonly IKp2aApp _app;
private readonly PwEntry _entry;
private readonly PwGroup _parentGroup;
- private readonly Context _ctx;
+ private readonly Activity _ctx;
- public static AddEntry GetInstance(Context ctx, IKp2aApp app, PwEntry entry, PwGroup parentGroup, OnFinish finish) {
+ public static AddEntry GetInstance(Activity ctx, IKp2aApp app, PwEntry entry, PwGroup parentGroup, OnFinish finish) {
return new AddEntry(ctx, app, entry, parentGroup, finish);
}
- protected AddEntry(Context ctx, IKp2aApp app, PwEntry entry, PwGroup parentGroup, OnFinish finish):base(finish) {
+ protected AddEntry(Activity ctx, IKp2aApp app, PwEntry entry, PwGroup parentGroup, OnFinish finish):base(ctx, finish) {
_ctx = ctx;
_parentGroup = parentGroup;
_app = app;
_entry = entry;
- _onFinishToRun = new AfterAdd(app.GetDb(), entry, OnFinishToRun);
+ _onFinishToRun = new AfterAdd(ctx, app.GetDb(), entry, OnFinishToRun);
}
@@ -68,7 +69,7 @@ namespace keepass2android
private readonly Database _db;
private readonly PwEntry _entry;
- public AfterAdd(Database db, PwEntry entry, OnFinish finish):base(finish) {
+ public AfterAdd(Activity activity, Database db, PwEntry entry, OnFinish finish):base(activity, finish) {
_db = db;
_entry = entry;
diff --git a/src/Kp2aBusinessLogic/database/edit/AddGroup.cs b/src/Kp2aBusinessLogic/database/edit/AddGroup.cs
index 69597dd8..f052dcfb 100644
--- a/src/Kp2aBusinessLogic/database/edit/AddGroup.cs
+++ b/src/Kp2aBusinessLogic/database/edit/AddGroup.cs
@@ -16,6 +16,7 @@ This file is part of Keepass2Android, Copyright 2013 Philipp Crocoll. This file
*/
using System;
+using Android.App;
using Android.Content;
using KeePassLib;
@@ -34,16 +35,16 @@ namespace keepass2android
internal PwGroup Group;
internal PwGroup Parent;
protected bool DontSave;
- readonly Context _ctx;
+ readonly Activity _ctx;
- public static AddGroup GetInstance(Context ctx, IKp2aApp app, string name, int iconid, PwUuid groupCustomIconId, PwGroup parent, OnFinish finish, bool dontSave) {
+ public static AddGroup GetInstance(Activity ctx, IKp2aApp app, string name, int iconid, PwUuid groupCustomIconId, PwGroup parent, OnFinish finish, bool dontSave) {
return new AddGroup(ctx, app, name, iconid, groupCustomIconId, parent, finish, dontSave);
}
- private AddGroup(Context ctx, IKp2aApp app, String name, int iconid, PwUuid groupCustomIconId, PwGroup parent, OnFinish finish, bool dontSave)
- : base(finish)
+ private AddGroup(Activity ctx, IKp2aApp app, String name, int iconid, PwUuid groupCustomIconId, PwGroup parent, OnFinish finish, bool dontSave)
+ : base(ctx, finish)
{
_ctx = ctx;
_name = name;
@@ -53,7 +54,7 @@ namespace keepass2android
DontSave = dontSave;
_app = app;
- _onFinishToRun = new AfterAdd(this, OnFinishToRun);
+ _onFinishToRun = new AfterAdd(ctx, this, OnFinishToRun);
}
@@ -76,7 +77,7 @@ namespace keepass2android
private class AfterAdd : OnFinish {
readonly AddGroup _addGroup;
- public AfterAdd(AddGroup addGroup,OnFinish finish): base(finish) {
+ public AfterAdd(Activity activity, AddGroup addGroup,OnFinish finish): base(activity, finish) {
_addGroup = addGroup;
}
diff --git a/src/Kp2aBusinessLogic/database/edit/AddTemplateEntries.cs b/src/Kp2aBusinessLogic/database/edit/AddTemplateEntries.cs
index f79b7a83..c2b39b63 100644
--- a/src/Kp2aBusinessLogic/database/edit/AddTemplateEntries.cs
+++ b/src/Kp2aBusinessLogic/database/edit/AddTemplateEntries.cs
@@ -18,6 +18,7 @@ This file is part of Keepass2Android, Copyright 2016 Philipp Crocoll. This file
using System;
using System.Collections.Generic;
using System.Linq;
+using Android.App;
using Android.Content;
using KeePassLib;
using KeePassLib.Security;
@@ -128,10 +129,10 @@ namespace keepass2android
}
private readonly IKp2aApp _app;
- private readonly Context _ctx;
+ private readonly Activity _ctx;
- public AddTemplateEntries(Context ctx, IKp2aApp app, OnFinish finish)
- : base(finish)
+ public AddTemplateEntries(Activity ctx, IKp2aApp app, OnFinish finish)
+ : base(ctx, finish)
{
_ctx = ctx;
_app = app;
@@ -358,7 +359,7 @@ namespace keepass2android
private readonly Database _db;
private readonly List _entries;
- public AfterAdd(Database db, List entries, OnFinish finish):base(finish) {
+ public AfterAdd(Activity activity, Database db, List entries, OnFinish finish):base(activity, finish) {
_db = db;
_entries = entries;
diff --git a/src/Kp2aBusinessLogic/database/edit/CopyEntry.cs b/src/Kp2aBusinessLogic/database/edit/CopyEntry.cs
index 14ffd7bb..74ece4a9 100644
--- a/src/Kp2aBusinessLogic/database/edit/CopyEntry.cs
+++ b/src/Kp2aBusinessLogic/database/edit/CopyEntry.cs
@@ -16,7 +16,7 @@ namespace keepass2android.database.edit
{
public class CopyEntry: AddEntry
{
- public CopyEntry(Context ctx, IKp2aApp app, PwEntry entry, OnFinish finish)
+ public CopyEntry(Activity ctx, IKp2aApp app, PwEntry entry, OnFinish finish)
: base(ctx, app, CreateCopy(entry, app), entry.ParentGroup, finish)
{
}
diff --git a/src/Kp2aBusinessLogic/database/edit/CreateDB.cs b/src/Kp2aBusinessLogic/database/edit/CreateDB.cs
index f35df74c..2e066ca2 100644
--- a/src/Kp2aBusinessLogic/database/edit/CreateDB.cs
+++ b/src/Kp2aBusinessLogic/database/edit/CreateDB.cs
@@ -16,6 +16,7 @@ This file is part of Keepass2Android, Copyright 2013 Philipp Crocoll. This file
*/
using System.Collections.Generic;
+using Android.App;
using Android.Content;
using KeePassLib;
using KeePassLib.Cryptography.KeyDerivation;
@@ -31,19 +32,19 @@ namespace keepass2android
private readonly IOConnectionInfo _ioc;
private readonly bool _dontSave;
- private readonly Context _ctx;
+ private readonly Activity _ctx;
private readonly IKp2aApp _app;
private CompositeKey _key;
- public CreateDb(IKp2aApp app, Context ctx, IOConnectionInfo ioc, OnFinish finish, bool dontSave): base(finish) {
+ public CreateDb(IKp2aApp app, Activity ctx, IOConnectionInfo ioc, OnFinish finish, bool dontSave): base(ctx, finish) {
_ctx = ctx;
_ioc = ioc;
_dontSave = dontSave;
_app = app;
}
- public CreateDb(IKp2aApp app, Context ctx, IOConnectionInfo ioc, OnFinish finish, bool dontSave, CompositeKey key)
- : base(finish)
+ public CreateDb(IKp2aApp app, Activity ctx, IOConnectionInfo ioc, OnFinish finish, bool dontSave, CompositeKey key)
+ : base(ctx, finish)
{
_ctx = ctx;
_ioc = ioc;
diff --git a/src/Kp2aBusinessLogic/database/edit/DeleteEntry.cs b/src/Kp2aBusinessLogic/database/edit/DeleteEntry.cs
index 533d56cd..047e0d5c 100644
--- a/src/Kp2aBusinessLogic/database/edit/DeleteEntry.cs
+++ b/src/Kp2aBusinessLogic/database/edit/DeleteEntry.cs
@@ -17,6 +17,7 @@ This file is part of Keepass2Android, Copyright 2013 Philipp Crocoll. This file
using System;
using System.Collections.Generic;
+using Android.App;
using Android.Content;
using KeePassLib;
using KeePassLib.Interfaces;
@@ -28,8 +29,8 @@ namespace keepass2android
private readonly PwEntry _entry;
private UiStringKey _statusMessage;
- public DeleteEntry(Context ctx, IKp2aApp app, PwEntry entry, OnFinish finish):base(finish, app) {
- Ctx = ctx;
+ public DeleteEntry(Activity activiy, IKp2aApp app, PwEntry entry, OnFinish finish):base(activiy, finish, app) {
+ Ctx = activiy;
Db = app.GetDb();
_entry = entry;
diff --git a/src/Kp2aBusinessLogic/database/edit/DeleteGroup.cs b/src/Kp2aBusinessLogic/database/edit/DeleteGroup.cs
index 7a764953..a0f3c414 100644
--- a/src/Kp2aBusinessLogic/database/edit/DeleteGroup.cs
+++ b/src/Kp2aBusinessLogic/database/edit/DeleteGroup.cs
@@ -17,6 +17,7 @@ This file is part of Keepass2Android, Copyright 2013 Philipp Crocoll. This file
using System;
using System.Collections.Generic;
+using Android.App;
using Android.Content;
using KeePassLib;
@@ -28,10 +29,10 @@ namespace keepass2android
private PwGroup _group;
protected bool DontSave;
- public DeleteGroup(Context ctx, IKp2aApp app, PwGroup group, OnFinish finish)
- : base(finish, app)
+ public DeleteGroup(Activity activity, IKp2aApp app, PwGroup group, OnFinish finish)
+ : base(activity, finish, app)
{
- SetMembers(ctx, app, group, false);
+ SetMembers(activity, app, group, false);
}
/*
public DeleteGroup(Context ctx, Database db, PwGroup group, Activity act, OnFinish finish, bool dontSave)
@@ -44,9 +45,9 @@ namespace keepass2android
SetMembers(ctx, db, group, null, dontSave);
}
*/
- private void SetMembers(Context ctx, IKp2aApp app, PwGroup group, bool dontSave)
+ private void SetMembers(Activity activity, IKp2aApp app, PwGroup group, bool dontSave)
{
- base.SetMembers(ctx, app.GetDb());
+ base.SetMembers(activity, app.GetDb());
_group = group;
DontSave = dontSave;
diff --git a/src/Kp2aBusinessLogic/database/edit/DeleteMultipleItems.cs b/src/Kp2aBusinessLogic/database/edit/DeleteMultipleItems.cs
index 620ab150..02f5bcfa 100644
--- a/src/Kp2aBusinessLogic/database/edit/DeleteMultipleItems.cs
+++ b/src/Kp2aBusinessLogic/database/edit/DeleteMultipleItems.cs
@@ -1,5 +1,6 @@
using System.Collections.Generic;
using System.Linq;
+using Android.App;
using Android.Content;
using KeePassLib;
using KeePassLib.Interfaces;
@@ -11,11 +12,11 @@ namespace keepass2android
private readonly List _elementsToDelete;
private readonly bool _canRecycle;
- public DeleteMultipleItems(Context ctx, Database db, List elementsToDelete, OnFinish finish, IKp2aApp app)
- : base(finish, app)
+ public DeleteMultipleItems(Activity activity, Database db, List elementsToDelete, OnFinish finish, IKp2aApp app)
+ : base(activity, finish, app)
{
_elementsToDelete = elementsToDelete;
- SetMembers(ctx, db);
+ SetMembers(activity, db);
//determine once. The property is queried for each delete operation, but might return false
//after one entry/group is deleted (and thus in recycle bin and thus can't be recycled anymore)
diff --git a/src/Kp2aBusinessLogic/database/edit/DeleteRunnable.cs b/src/Kp2aBusinessLogic/database/edit/DeleteRunnable.cs
index 50fed440..582aa1de 100644
--- a/src/Kp2aBusinessLogic/database/edit/DeleteRunnable.cs
+++ b/src/Kp2aBusinessLogic/database/edit/DeleteRunnable.cs
@@ -1,5 +1,6 @@
using System;
using System.Collections.Generic;
+using Android.App;
using Android.Content;
using KeePassLib;
@@ -7,8 +8,8 @@ namespace keepass2android
{
public abstract class DeleteRunnable : RunnableOnFinish
{
- protected DeleteRunnable(OnFinish finish, IKp2aApp app)
- : base(finish)
+ protected DeleteRunnable(Activity activity, OnFinish finish, IKp2aApp app)
+ : base(activity, finish)
{
App = app;
}
@@ -17,11 +18,11 @@ namespace keepass2android
protected Database Db;
- protected Context Ctx;
+ protected Activity Ctx;
- protected void SetMembers(Context ctx, Database db)
+ protected void SetMembers(Activity activity, Database db)
{
- Ctx = ctx;
+ Ctx = activity;
Db = db;
}
@@ -209,7 +210,7 @@ namespace keepass2android
Android.Util.Log.Debug("KP2A", "Calling PerformDelete..");
PerformDelete(touchedGroups, permanentlyDeletedGroups);
- _onFinishToRun = new ActionOnFinish((success, message) =>
+ _onFinishToRun = new ActionOnFinish(ActiveActivity,(success, message, activity) =>
{
if (success)
{
diff --git a/src/Kp2aBusinessLogic/database/edit/EditGroup.cs b/src/Kp2aBusinessLogic/database/edit/EditGroup.cs
index a357a91d..fb596011 100644
--- a/src/Kp2aBusinessLogic/database/edit/EditGroup.cs
+++ b/src/Kp2aBusinessLogic/database/edit/EditGroup.cs
@@ -16,6 +16,7 @@ This file is part of Keepass2Android, Copyright 2013 Philipp Crocoll. This file
*/
using System;
+using Android.App;
using Android.Content;
using KeePassLib;
@@ -32,10 +33,10 @@ namespace keepass2android
private readonly PwIcon _iconId;
private readonly PwUuid _customIconId;
internal PwGroup Group;
- readonly Context _ctx;
+ readonly Activity _ctx;
- public EditGroup(Context ctx, IKp2aApp app, String name, PwIcon iconid, PwUuid customIconId, PwGroup group, OnFinish finish)
- : base(finish)
+ public EditGroup(Activity ctx, IKp2aApp app, String name, PwIcon iconid, PwUuid customIconId, PwGroup group, OnFinish finish)
+ : base(ctx, finish)
{
_ctx = ctx;
_name = name;
@@ -44,7 +45,7 @@ namespace keepass2android
_customIconId = customIconId;
_app = app;
- _onFinishToRun = new AfterEdit(this, OnFinishToRun);
+ _onFinishToRun = new AfterEdit(ctx, this, OnFinishToRun);
}
@@ -64,8 +65,8 @@ namespace keepass2android
private class AfterEdit : OnFinish {
readonly EditGroup _editGroup;
- public AfterEdit(EditGroup editGroup, OnFinish finish)
- : base(finish)
+ public AfterEdit(Activity ctx, EditGroup editGroup, OnFinish finish)
+ : base(ctx, finish)
{
_editGroup = editGroup;
}
diff --git a/src/Kp2aBusinessLogic/database/edit/FileOnFinish.cs b/src/Kp2aBusinessLogic/database/edit/FileOnFinish.cs
index 58c40311..b6f9da21 100644
--- a/src/Kp2aBusinessLogic/database/edit/FileOnFinish.cs
+++ b/src/Kp2aBusinessLogic/database/edit/FileOnFinish.cs
@@ -16,6 +16,7 @@ This file is part of Keepass2Android, Copyright 2013 Philipp Crocoll. This file
*/
using System;
+using Android.App;
namespace keepass2android
{
@@ -23,7 +24,7 @@ namespace keepass2android
public abstract class FileOnFinish : OnFinish {
private String _filename = "";
- protected FileOnFinish(FileOnFinish finish):base(finish) {
+ protected FileOnFinish(Activity activity, FileOnFinish finish):base(activity, finish) {
}
public string Filename
diff --git a/src/Kp2aBusinessLogic/database/edit/LoadDB.cs b/src/Kp2aBusinessLogic/database/edit/LoadDB.cs
index 22e8a32b..553d3e94 100644
--- a/src/Kp2aBusinessLogic/database/edit/LoadDB.cs
+++ b/src/Kp2aBusinessLogic/database/edit/LoadDB.cs
@@ -20,6 +20,7 @@ using System.IO;
using System.Linq;
using System.Threading;
using System.Threading.Tasks;
+using Android.App;
using KeePassLib;
using KeePassLib.Keys;
using KeePassLib.Serialization;
@@ -35,7 +36,7 @@ namespace keepass2android
private readonly bool _rememberKeyfile;
IDatabaseFormat _format;
- public LoadDb(IKp2aApp app, IOConnectionInfo ioc, Task databaseData, CompositeKey compositeKey, String keyfileOrProvider, OnFinish finish): base(finish)
+ public LoadDb(Activity activity, IKp2aApp app, IOConnectionInfo ioc, Task databaseData, CompositeKey compositeKey, String keyfileOrProvider, OnFinish finish): base(activity, finish)
{
_app = app;
_ioc = ioc;
diff --git a/src/Kp2aBusinessLogic/database/edit/MoveElements.cs b/src/Kp2aBusinessLogic/database/edit/MoveElements.cs
index 8b923a22..c5aacf5c 100644
--- a/src/Kp2aBusinessLogic/database/edit/MoveElements.cs
+++ b/src/Kp2aBusinessLogic/database/edit/MoveElements.cs
@@ -2,6 +2,7 @@
using System.Collections.Generic;
using System.Text;
using System.Text.RegularExpressions;
+using Android.App;
using Android.Content;
using KeePassLib;
using KeePassLib.Interfaces;
@@ -12,10 +13,10 @@ namespace keepass2android.database.edit
{
private readonly List _elementsToMove;
private readonly PwGroup _targetGroup;
- private readonly Context _ctx;
+ private readonly Activity _ctx;
private readonly IKp2aApp _app;
- public MoveElements(List elementsToMove, PwGroup targetGroup, Context ctx, IKp2aApp app, OnFinish finish) : base(finish)
+ public MoveElements(List elementsToMove, PwGroup targetGroup, Activity ctx, IKp2aApp app, OnFinish finish) : base(ctx, finish)
{
_elementsToMove = elementsToMove;
_targetGroup = targetGroup;
@@ -82,7 +83,7 @@ namespace keepass2android.database.edit
}
- _onFinishToRun = new ActionOnFinish((success, message) =>
+ _onFinishToRun = new ActionOnFinish(ActiveActivity, (success, message, activity) =>
{
if (!success)
{ // Let's not bother recovering from a failure.
diff --git a/src/Kp2aBusinessLogic/database/edit/OnFinish.cs b/src/Kp2aBusinessLogic/database/edit/OnFinish.cs
index b01d43a0..ff516c1f 100644
--- a/src/Kp2aBusinessLogic/database/edit/OnFinish.cs
+++ b/src/Kp2aBusinessLogic/database/edit/OnFinish.cs
@@ -16,6 +16,7 @@ This file is part of Keepass2Android, Copyright 2013 Philipp Crocoll. This file
*/
using System;
+using Android.App;
using Android.Content;
using Android.OS;
using Android.Widget;
@@ -31,27 +32,47 @@ namespace keepass2android
protected OnFinish BaseOnFinish;
protected Handler Handler;
private ProgressDialogStatusLogger _statusLogger = new ProgressDialogStatusLogger(); //default: no logging but not null -> can be used whenever desired
-
+ private Activity _activeActivity;
- public ProgressDialogStatusLogger StatusLogger
+
+ public ProgressDialogStatusLogger StatusLogger
{
get { return _statusLogger; }
set { _statusLogger = value; }
}
+ public Activity ActiveActivity
+ {
+ get { return _activeActivity; }
+ set
+ {
+ _activeActivity = value;
+ if (BaseOnFinish != null)
+ {
+ BaseOnFinish.ActiveActivity = value;
+ }
+ }
+ }
- protected OnFinish(Handler handler) {
+
+ protected OnFinish(Activity activeActivity, Handler handler)
+ {
+ ActiveActivity = activeActivity;
BaseOnFinish = null;
Handler = handler;
}
- protected OnFinish(OnFinish finish, Handler handler) {
+ protected OnFinish(Activity activeActivity, OnFinish finish, Handler handler)
+ {
+ ActiveActivity = activeActivity;
BaseOnFinish = finish;
Handler = handler;
}
- protected OnFinish(OnFinish finish) {
+ protected OnFinish(Activity activeActivity, OnFinish finish)
+ {
+ ActiveActivity = activeActivity;
BaseOnFinish = finish;
Handler = null;
}
diff --git a/src/Kp2aBusinessLogic/database/edit/RunnableOnFinish.cs b/src/Kp2aBusinessLogic/database/edit/RunnableOnFinish.cs
index 91b9c077..6ef58a55 100644
--- a/src/Kp2aBusinessLogic/database/edit/RunnableOnFinish.cs
+++ b/src/Kp2aBusinessLogic/database/edit/RunnableOnFinish.cs
@@ -15,6 +15,8 @@ This file is part of Keepass2Android, Copyright 2013 Philipp Crocoll. This file
along with Keepass2Android. If not, see .
*/
using System;
+using Android.App;
+using Android.Content;
namespace keepass2android
{
@@ -23,8 +25,11 @@ namespace keepass2android
protected OnFinish _onFinishToRun;
public ProgressDialogStatusLogger StatusLogger = new ProgressDialogStatusLogger(); //default: empty but not null
+ private Activity _activeActivity;
- protected RunnableOnFinish(OnFinish finish) {
+ protected RunnableOnFinish(Activity activeActivity, OnFinish finish)
+ {
+ _activeActivity = activeActivity;
_onFinishToRun = finish;
}
@@ -34,7 +39,18 @@ namespace keepass2android
set { _onFinishToRun = value; }
}
- protected void Finish(bool result, String message, Exception exception = null) {
+ public Activity ActiveActivity
+ {
+ get { return _activeActivity; }
+ set
+ {
+ _activeActivity = value;
+ if (_onFinishToRun != null)
+ _onFinishToRun.ActiveActivity = _activeActivity;
+ }
+ }
+
+ protected void Finish(bool result, String message, Exception exception = null) {
if ( OnFinishToRun != null ) {
OnFinishToRun.SetResult(result, message, exception);
OnFinishToRun.Run();
@@ -56,7 +72,7 @@ namespace keepass2android
StatusLogger = status;
}
- abstract public void Run();
+ public abstract void Run();
}
}
diff --git a/src/Kp2aBusinessLogic/database/edit/SaveDB.cs b/src/Kp2aBusinessLogic/database/edit/SaveDB.cs
index 363bde4f..ae2035a3 100644
--- a/src/Kp2aBusinessLogic/database/edit/SaveDB.cs
+++ b/src/Kp2aBusinessLogic/database/edit/SaveDB.cs
@@ -18,6 +18,7 @@ This file is part of Keepass2Android, Copyright 2013 Philipp Crocoll. This file
using System;
using System.IO;
using System.Security.Cryptography;
+using Android.App;
using Android.Content;
using Android.OS;
using Java.Lang;
@@ -42,8 +43,8 @@ namespace keepass2android
private readonly Context _ctx;
private Thread _workerThread;
- public SaveDb(Context ctx, IKp2aApp app, OnFinish finish, bool dontSave)
- : base(finish)
+ public SaveDb(Activity ctx, IKp2aApp app, OnFinish finish, bool dontSave)
+ : base(ctx, finish)
{
_ctx = ctx;
_app = app;
@@ -58,8 +59,8 @@ namespace keepass2android
///
///
/// Stream for reading the data from the (changed) original location
- public SaveDb(Context ctx, IKp2aApp app, OnFinish finish, bool dontSave, Stream streamForOrigFile)
- : base(finish)
+ public SaveDb(Activity ctx, IKp2aApp app, OnFinish finish, bool dontSave, Stream streamForOrigFile)
+ : base(ctx, finish)
{
_ctx = ctx;
_app = app;
@@ -67,8 +68,8 @@ namespace keepass2android
_streamForOrigFile = streamForOrigFile;
}
- public SaveDb(Context ctx, IKp2aApp app, OnFinish finish)
- : base(finish)
+ public SaveDb(Activity ctx, IKp2aApp app, OnFinish finish)
+ : base(ctx, finish)
{
_ctx = ctx;
_app = app;
@@ -248,7 +249,7 @@ namespace keepass2android
private void PerformSaveWithoutCheck(IFileStorage fileStorage, IOConnectionInfo ioc)
{
StatusLogger.UpdateSubMessage("");
- _app.GetDb().SaveData(_ctx);
+ _app.GetDb().SaveData();
_app.GetDb().LastFileVersion = fileStorage.GetCurrentFileVersionFast(ioc);
}
diff --git a/src/Kp2aBusinessLogic/database/edit/SetPassword.cs b/src/Kp2aBusinessLogic/database/edit/SetPassword.cs
index 521414c3..a3869ef8 100644
--- a/src/Kp2aBusinessLogic/database/edit/SetPassword.cs
+++ b/src/Kp2aBusinessLogic/database/edit/SetPassword.cs
@@ -15,6 +15,7 @@ This file is part of Keepass2Android, Copyright 2013 Philipp Crocoll. This file
along with Keepass2Android. If not, see .
*/
using System;
+using Android.App;
using Android.Content;
using KeePassLib;
using KeePassLib.Keys;
@@ -27,9 +28,9 @@ namespace keepass2android
private readonly String _keyfile;
private readonly IKp2aApp _app;
private readonly bool _dontSave;
- private readonly Context _ctx;
+ private readonly Activity _ctx;
- public SetPassword(Context ctx, IKp2aApp app, String password, String keyfile, OnFinish finish): base(finish) {
+ public SetPassword(Activity ctx, IKp2aApp app, String password, String keyfile, OnFinish finish): base(ctx, finish) {
_ctx = ctx;
_app = app;
_password = password;
@@ -37,8 +38,8 @@ namespace keepass2android
_dontSave = false;
}
- public SetPassword(Context ctx, IKp2aApp app, String password, String keyfile, OnFinish finish, bool dontSave)
- : base(finish)
+ public SetPassword(Activity ctx, IKp2aApp app, String password, String keyfile, OnFinish finish, bool dontSave)
+ : base(ctx, finish)
{
_ctx = ctx;
_app = app;
@@ -72,7 +73,7 @@ namespace keepass2android
pm.MasterKey = newKey;
// Save Database
- _onFinishToRun = new AfterSave(previousKey, previousMasterKeyChanged, pm, OnFinishToRun);
+ _onFinishToRun = new AfterSave(ActiveActivity, previousKey, previousMasterKeyChanged, pm, OnFinishToRun);
SaveDb save = new SaveDb(_ctx, _app, OnFinishToRun, _dontSave);
save.SetStatusLogger(StatusLogger);
save.Run();
@@ -83,7 +84,7 @@ namespace keepass2android
private readonly DateTime _previousKeyChanged;
private readonly PwDatabase _db;
- public AfterSave(CompositeKey backup, DateTime previousKeyChanged, PwDatabase db, OnFinish finish): base(finish) {
+ public AfterSave(Activity activity, CompositeKey backup, DateTime previousKeyChanged, PwDatabase db, OnFinish finish): base(activity, finish) {
_previousKeyChanged = previousKeyChanged;
_backup = backup;
_db = db;
diff --git a/src/Kp2aBusinessLogic/database/edit/UpdateEntry.cs b/src/Kp2aBusinessLogic/database/edit/UpdateEntry.cs
index e70638d2..4bed5cbf 100644
--- a/src/Kp2aBusinessLogic/database/edit/UpdateEntry.cs
+++ b/src/Kp2aBusinessLogic/database/edit/UpdateEntry.cs
@@ -15,6 +15,7 @@ This file is part of Keepass2Android, Copyright 2013 Philipp Crocoll. This file
along with Keepass2Android. If not, see .
*/
+using Android.App;
using Android.Content;
using KeePassLib;
@@ -23,13 +24,13 @@ namespace keepass2android
public class UpdateEntry : RunnableOnFinish {
private readonly IKp2aApp _app;
- private readonly Context _ctx;
+ private readonly Activity _ctx;
- public UpdateEntry(Context ctx, IKp2aApp app, PwEntry oldE, PwEntry newE, OnFinish finish):base(finish) {
+ public UpdateEntry(Activity ctx, IKp2aApp app, PwEntry oldE, PwEntry newE, OnFinish finish):base(ctx, finish) {
_ctx = ctx;
_app = app;
- _onFinishToRun = new AfterUpdate(oldE, newE, app, finish);
+ _onFinishToRun = new AfterUpdate(ctx, oldE, newE, app, finish);
}
@@ -45,7 +46,7 @@ namespace keepass2android
private readonly PwEntry _updatedEntry;
private readonly IKp2aApp _app;
- public AfterUpdate(PwEntry backup, PwEntry updatedEntry, IKp2aApp app, OnFinish finish):base(finish) {
+ public AfterUpdate(Activity activity, PwEntry backup, PwEntry updatedEntry, IKp2aApp app, OnFinish finish):base(activity, finish) {
_backup = backup;
_updatedEntry = updatedEntry;
_app = app;
diff --git a/src/keepass2android/CancelDialog.cs b/src/keepass2android/CancelDialog.cs
index d7fea910..8053d5eb 100644
--- a/src/keepass2android/CancelDialog.cs
+++ b/src/keepass2android/CancelDialog.cs
@@ -22,8 +22,12 @@ namespace keepass2android
{
public class CancelDialog : Dialog {
- public CancelDialog(Context context): base(context) {
- }
+ protected readonly Activity _activity;
+
+ public CancelDialog(Activity activity): base(activity)
+ {
+ _activity = activity;
+ }
public bool Canceled { get; private set; }
diff --git a/src/keepass2android/CreateDatabaseActivity.cs b/src/keepass2android/CreateDatabaseActivity.cs
index 82cbdb24..305b3b65 100644
--- a/src/keepass2android/CreateDatabaseActivity.cs
+++ b/src/keepass2android/CreateDatabaseActivity.cs
@@ -411,15 +411,15 @@ namespace keepass2android
}
else
{
- var task = new CreateNewFilename(new ActionOnFinish((success, messageOrFilename) =>
+ var task = new CreateNewFilename(this, new ActionOnFinish(this, (success, messageOrFilename, activity) =>
{
if (!success)
{
- Toast.MakeText(this, messageOrFilename, ToastLength.Long).Show();
+ Toast.MakeText(activity, messageOrFilename, ToastLength.Long).Show();
return;
}
_ioc = new IOConnectionInfo { Path = ConvertFilenameToIocPath(messageOrFilename) };
- UpdateIocView();
+ ((CreateDatabaseActivity)activity)?.UpdateIocView();
}), filename);
@@ -471,7 +471,7 @@ namespace keepass2android
private readonly IOConnectionInfo _ioc;
public LaunchGroupActivity(IOConnectionInfo ioc, CreateDatabaseActivity activity)
- : base(null)
+ : base(activity, null)
{
_activity = activity;
_ioc = ioc;
diff --git a/src/keepass2android/CreateNewFilename.cs b/src/keepass2android/CreateNewFilename.cs
index cf530f63..f918f458 100644
--- a/src/keepass2android/CreateNewFilename.cs
+++ b/src/keepass2android/CreateNewFilename.cs
@@ -1,4 +1,5 @@
using System;
+using Android.App;
using KeePassLib.Serialization;
namespace keepass2android
@@ -7,8 +8,8 @@ namespace keepass2android
{
private readonly string _filename;
- public CreateNewFilename(OnFinish finish, string filename)
- : base(finish)
+ public CreateNewFilename(Activity activity, OnFinish finish, string filename)
+ : base(activity,finish)
{
_filename = filename;
}
diff --git a/src/keepass2android/EntryActivity.cs b/src/keepass2android/EntryActivity.cs
index a835708f..096635fc 100644
--- a/src/keepass2android/EntryActivity.cs
+++ b/src/keepass2android/EntryActivity.cs
@@ -1056,7 +1056,7 @@ namespace keepass2android
- internal void AddUrlToEntry(string url, Action finishAction)
+ internal void AddUrlToEntry(string url, Action finishAction)
{
PwEntry initialEntry = Entry.CloneDeep();
@@ -1084,10 +1084,10 @@ namespace keepass2android
//save the entry:
- ActionOnFinish closeOrShowError = new ActionOnFinish((success, message) =>
+ ActionOnFinish closeOrShowError = new ActionOnFinish(this, (success, message, activity) =>
{
OnFinish.DisplayMessage(this, message);
- finishAction();
+ finishAction((EntryActivity)activity);
});
diff --git a/src/keepass2android/EntryEditActivity.cs b/src/keepass2android/EntryEditActivity.cs
index 5ee22207..663aef82 100644
--- a/src/keepass2android/EntryEditActivity.cs
+++ b/src/keepass2android/EntryEditActivity.cs
@@ -413,20 +413,20 @@ namespace keepass2android
RunnableOnFinish runnable;
- ActionOnFinish closeOrShowError = new ActionOnFinish((success, message) => {
+ ActionOnFinish closeOrShowError = new ActionOnFinish(this, (success, message, activity) => {
if (success)
{
- Finish();
+ activity.Finish();
} else
{
- OnFinish.DisplayMessage(this, message);
+ OnFinish.DisplayMessage(activity, message);
}
});
- ActionOnFinish afterAddEntry = new ActionOnFinish((success, message) =>
+ ActionOnFinish afterAddEntry = new ActionOnFinish(this, (success, message, activity) =>
{
if (success)
- _appTask.AfterAddNewEntry(this, newEntry);
+ _appTask.AfterAddNewEntry((EntryEditActivity)activity, newEntry);
},closeOrShowError);
if ( State.IsNew ) {
diff --git a/src/keepass2android/ExportDatabaseActivity.cs b/src/keepass2android/ExportDatabaseActivity.cs
index 196e9782..eaa7bd14 100644
--- a/src/keepass2android/ExportDatabaseActivity.cs
+++ b/src/keepass2android/ExportDatabaseActivity.cs
@@ -119,11 +119,11 @@ namespace keepass2android
}
else
{
- var task = new CreateNewFilename(new ActionOnFinish((success, messageOrFilename) =>
+ var task = new CreateNewFilename(this, new ActionOnFinish(this, (success, messageOrFilename, activity) =>
{
if (!success)
{
- Toast.MakeText(this, messageOrFilename, ToastLength.Long).Show();
+ Toast.MakeText(activity, messageOrFilename, ToastLength.Long).Show();
return;
}
ExportTo(new IOConnectionInfo { Path = ConvertFilenameToIocPath(messageOrFilename) });
@@ -162,15 +162,15 @@ namespace keepass2android
private void ExportTo(IOConnectionInfo ioc)
{
- var exportDb = new ExportDb(App.Kp2a, new ActionOnFinish(delegate(bool success, string message)
- {
- if (!success)
- Toast.MakeText(this, message, ToastLength.Long).Show();
- else
- Toast.MakeText(this, GetString(Resource.String.export_database_successful), ToastLength.Long).Show();
- Finish();
- }
- ), _ffp[_fileFormatIndex], ioc);
+ var exportDb = new ExportDb(this, App.Kp2a, new ActionOnFinish(this, (success, message, activity) =>
+ {
+ if (!success)
+ Toast.MakeText(activity, message, ToastLength.Long).Show();
+ else
+ Toast.MakeText(activity, GetString(Resource.String.export_database_successful), ToastLength.Long).Show();
+ activity.Finish();
+ }
+ ), _ffp[_fileFormatIndex], ioc);
ProgressTask pt = new ProgressTask(App.Kp2a, this, exportDb);
pt.Run();
}
@@ -196,7 +196,7 @@ namespace keepass2android
private readonly FileFormatProvider _fileFormat;
private IOConnectionInfo _targetIoc;
- public ExportDb(IKp2aApp app, OnFinish onFinish, FileFormatProvider fileFormat, IOConnectionInfo targetIoc) : base(onFinish)
+ public ExportDb(Activity activity, IKp2aApp app, OnFinish onFinish, FileFormatProvider fileFormat, IOConnectionInfo targetIoc) : base(activity, onFinish)
{
_app = app;
this._fileFormat = fileFormat;
diff --git a/src/keepass2android/GroupActivity.cs b/src/keepass2android/GroupActivity.cs
index aa180a14..fd841fc0 100644
--- a/src/keepass2android/GroupActivity.cs
+++ b/src/keepass2android/GroupActivity.cs
@@ -230,11 +230,8 @@ namespace keepass2android
{
//yes
ProgressTask pt = new ProgressTask(App.Kp2a, this,
- new AddTemplateEntries(this, App.Kp2a, new ActionOnFinish(
- delegate
- {
- StartAddEntry();
- })));
+ new AddTemplateEntries(this, App.Kp2a, new ActionOnFinish(this,
+ (success, message, activity) => ((GroupActivity)activity)?.StartAddEntry())));
pt.Run();
},
(o, args) =>
diff --git a/src/keepass2android/GroupBaseActivity.cs b/src/keepass2android/GroupBaseActivity.cs
index 88035704..cde7dd72 100644
--- a/src/keepass2android/GroupBaseActivity.cs
+++ b/src/keepass2android/GroupBaseActivity.cs
@@ -616,7 +616,13 @@ namespace keepass2android
- var moveElement = new MoveElements(elementsToMove.ToList(), Group, this, App.Kp2a, new ActionOnFinish((success, message) => { StopMovingElements(); if (!String.IsNullOrEmpty(message)) Toast.MakeText(this, message, ToastLength.Long).Show(); }));
+ var moveElement = new MoveElements(elementsToMove.ToList(), Group, this, App.Kp2a, new ActionOnFinish(this,
+ (success, message, activity) =>
+ {
+ ((GroupBaseActivity)activity)?.StopMovingElements();
+ if (!String.IsNullOrEmpty(message))
+ Toast.MakeText(activity, message, ToastLength.Long).Show();
+ }));
var progressTask = new ProgressTask(App.Kp2a, this, moveElement);
progressTask.Run();
@@ -867,8 +873,8 @@ namespace keepass2android
{
private readonly IOConnectionInfo _ioc;
- public SyncOtpAuxFile(IOConnectionInfo ioc)
- : base(null)
+ public SyncOtpAuxFile(Activity activity, IOConnectionInfo ioc)
+ : base(activity,null)
{
_ioc = ioc;
}
@@ -900,19 +906,19 @@ namespace keepass2android
{
var filestorage = App.Kp2a.GetFileStorage(App.Kp2a.GetDb().Ioc);
RunnableOnFinish task;
- OnFinish onFinish = new ActionOnFinish((success, message) =>
+ OnFinish onFinish = new ActionOnFinish(this, (success, message, activity) =>
{
if (!String.IsNullOrEmpty(message))
- Toast.MakeText(this, message, ToastLength.Long).Show();
+ Toast.MakeText(activity, message, ToastLength.Long).Show();
// Tell the adapter to refresh it's list
- BaseAdapter adapter = (BaseAdapter)ListAdapter;
- adapter.NotifyDataSetChanged();
+ BaseAdapter adapter = (BaseAdapter)((GroupBaseActivity)activity)?.ListAdapter;
+ adapter?.NotifyDataSetChanged();
if (App.Kp2a.GetDb().OtpAuxFileIoc != null)
{
- var task2 = new SyncOtpAuxFile(App.Kp2a.GetDb().OtpAuxFileIoc);
- new ProgressTask(App.Kp2a, this, task2).Run();
+ var task2 = new SyncOtpAuxFile(this, App.Kp2a.GetDb().OtpAuxFileIoc);
+ new ProgressTask(App.Kp2a, activity, task2).Run(true);
}
});
@@ -982,33 +988,28 @@ namespace keepass2android
public class RefreshTask : OnFinish
{
- readonly GroupBaseActivity _act;
public RefreshTask(Handler handler, GroupBaseActivity act)
- : base(handler)
+ : base(act, handler)
{
- _act = act;
}
public override void Run()
{
if (Success)
{
- _act.RefreshIfDirty();
+ ((GroupBaseActivity)ActiveActivity)?.RefreshIfDirty();
}
else
{
- DisplayMessage(_act);
+ DisplayMessage(ActiveActivity);
}
}
}
public class AfterDeleteGroup : OnFinish
{
- readonly GroupBaseActivity _act;
-
public AfterDeleteGroup(Handler handler, GroupBaseActivity act)
- : base(handler)
+ : base(act, handler)
{
- _act = act;
}
@@ -1016,13 +1017,13 @@ namespace keepass2android
{
if (Success)
{
- _act.RefreshIfDirty();
+ ((GroupBaseActivity)ActiveActivity)?.RefreshIfDirty();
}
else
{
Handler.Post(() =>
{
- Toast.MakeText(_act, "Unrecoverable error: " + Message, ToastLength.Long).Show();
+ Toast.MakeText(ActiveActivity, "Unrecoverable error: " + Message, ToastLength.Long).Show();
});
App.Kp2a.LockDatabase(false);
diff --git a/src/keepass2android/GroupEditActivity.cs b/src/keepass2android/GroupEditActivity.cs
index 051d4ad0..f486fd65 100644
--- a/src/keepass2android/GroupEditActivity.cs
+++ b/src/keepass2android/GroupEditActivity.cs
@@ -27,7 +27,7 @@ using KeePassLib.Utility;
namespace keepass2android
{
[Activity(Label = "@string/app_name", Theme = "@style/Dialog")]
- public class GroupEditActivity : LifecycleDebugActivity
+ public class GroupEditActivity : LifecycleAwareActivity
{
public const String KeyParent = "parent";
public const String KeyName = "name";
diff --git a/src/keepass2android/KeePass.cs b/src/keepass2android/KeePass.cs
index 99f36105..5d718433 100644
--- a/src/keepass2android/KeePass.cs
+++ b/src/keepass2android/KeePass.cs
@@ -74,7 +74,7 @@ namespace keepass2android
///
[Activity(Label = AppNames.AppName, MainLauncher = false, Theme = "@style/MyTheme_Blue")]
[IntentFilter(new[] { Intent.ActionMain }, Categories = new[] { "android.intent.category.LAUNCHER", "android.intent.category.MULTIWINDOW_LAUNCHER" })]
- public class KeePass : LifecycleDebugActivity, IDialogInterfaceOnDismissListener
+ public class KeePass : LifecycleAwareActivity, IDialogInterfaceOnDismissListener
{
public const Result ExitNormal = Result.FirstUser;
public const Result ExitLock = Result.FirstUser+1;
diff --git a/src/keepass2android/LifecycleDebugActivity.cs b/src/keepass2android/LifecycleAwareActivity.cs
similarity index 88%
rename from src/keepass2android/LifecycleDebugActivity.cs
rename to src/keepass2android/LifecycleAwareActivity.cs
index 5e066163..114c3f02 100644
--- a/src/keepass2android/LifecycleDebugActivity.cs
+++ b/src/keepass2android/LifecycleAwareActivity.cs
@@ -24,15 +24,15 @@ using Android.Support.V7.App;
namespace keepass2android
{
- public abstract class LifecycleDebugActivity : AppCompatActivity
+ public abstract class LifecycleAwareActivity : AppCompatActivity
{
- protected LifecycleDebugActivity (IntPtr javaReference, JniHandleOwnership transfer)
+ protected LifecycleAwareActivity (IntPtr javaReference, JniHandleOwnership transfer)
: base(javaReference, transfer)
{
}
- protected LifecycleDebugActivity()
+ protected LifecycleAwareActivity()
{
}
@@ -63,6 +63,7 @@ namespace keepass2android
protected override void OnStart()
{
+ ProgressTask.SetNewActiveActivity(this);
base.OnStart();
Kp2aLog.Log(ClassName+".OnStart");
}
@@ -90,7 +91,8 @@ namespace keepass2android
{
base.OnStop();
Kp2aLog.Log(ClassName+".OnStop");
- }
+ ProgressTask.RemoveActiveActivity(this);
+ }
}
}
diff --git a/src/keepass2android/LockingActivity.cs b/src/keepass2android/LockingActivity.cs
index 1992978b..d063f46c 100644
--- a/src/keepass2android/LockingActivity.cs
+++ b/src/keepass2android/LockingActivity.cs
@@ -27,7 +27,7 @@ namespace keepass2android
///
/// Base class for activities. Notifies the TimeoutHelper whether the app is active or not.
///
- public class LockingActivity : LifecycleDebugActivity {
+ public class LockingActivity : LifecycleAwareActivity {
public LockingActivity (IntPtr javaReference, JniHandleOwnership transfer)
: base(javaReference, transfer)
diff --git a/src/keepass2android/PasswordActivity.cs b/src/keepass2android/PasswordActivity.cs
index 734d00c5..f188fd74 100644
--- a/src/keepass2android/PasswordActivity.cs
+++ b/src/keepass2android/PasswordActivity.cs
@@ -310,7 +310,7 @@ namespace keepass2android
Handler handler = new Handler();
OnFinish onFinish = new AfterLoad(handler, this, _ioConnection);
_performingLoad = true;
- LoadDb task = new LoadDb(App.Kp2a, _ioConnection, _loadDbFileTask, compositeKey, _keyFileOrProvider, onFinish);
+ LoadDb task = new LoadDb(this, App.Kp2a, _ioConnection, _loadDbFileTask, compositeKey, _keyFileOrProvider, onFinish);
_loadDbFileTask = null; // prevent accidental re-use
new ProgressTask(App.Kp2a, this, task).Run();
}
@@ -1453,7 +1453,7 @@ namespace keepass2android
LoadDb task = (KeyProviderType == KeyProviders.Otp)
? new SaveOtpAuxFileAndLoadDb(App.Kp2a, _ioConnection, _loadDbFileTask, compositeKey, _keyFileOrProvider,
onFinish, this)
- : new LoadDb(App.Kp2a, _ioConnection, _loadDbFileTask, compositeKey, _keyFileOrProvider, onFinish);
+ : new LoadDb(this, App.Kp2a, _ioConnection, _loadDbFileTask, compositeKey, _keyFileOrProvider, onFinish);
_loadDbFileTask = null; // prevent accidental re-use
SetNewDefaultFile();
@@ -2028,7 +2028,7 @@ namespace keepass2android
readonly PasswordActivity _act;
private readonly IOConnectionInfo _ioConnection;
- public AfterLoad(Handler handler, PasswordActivity act, IOConnectionInfo ioConnection):base(handler)
+ public AfterLoad(Handler handler, PasswordActivity act, IOConnectionInfo ioConnection):base(act, handler)
{
_act = act;
_ioConnection = ioConnection;
@@ -2172,7 +2172,7 @@ namespace keepass2android
private readonly PasswordActivity _act;
- public SaveOtpAuxFileAndLoadDb(IKp2aApp app, IOConnectionInfo ioc, Task databaseData, CompositeKey compositeKey, string keyfileOrProvider, OnFinish finish, PasswordActivity act) : base(app, ioc, databaseData, compositeKey, keyfileOrProvider, finish)
+ public SaveOtpAuxFileAndLoadDb(IKp2aApp app, IOConnectionInfo ioc, Task databaseData, CompositeKey compositeKey, string keyfileOrProvider, OnFinish finish, PasswordActivity act) : base(act, app, ioc, databaseData, compositeKey, keyfileOrProvider, finish)
{
_act = act;
}
diff --git a/src/keepass2android/QuickUnlock.cs b/src/keepass2android/QuickUnlock.cs
index a04543d6..f7b29346 100644
--- a/src/keepass2android/QuickUnlock.cs
+++ b/src/keepass2android/QuickUnlock.cs
@@ -37,7 +37,7 @@ namespace keepass2android
WindowSoftInputMode = SoftInput.AdjustResize,
MainLauncher = false,
Theme = "@style/MyTheme_Blue")]
- public class QuickUnlock : LifecycleDebugActivity, IFingerprintAuthCallback
+ public class QuickUnlock : LifecycleAwareActivity, IFingerprintAuthCallback
{
private IOConnectionInfo _ioc;
private QuickUnlockBroadcastReceiver _intentReceiver;
diff --git a/src/keepass2android/SetPasswordDialog.cs b/src/keepass2android/SetPasswordDialog.cs
index 5ebaba3d..3615a31f 100644
--- a/src/keepass2android/SetPasswordDialog.cs
+++ b/src/keepass2android/SetPasswordDialog.cs
@@ -15,6 +15,7 @@ This file is part of Keepass2Android, Copyright 2013 Philipp Crocoll. This file
along with Keepass2Android. If not, see .
*/
using System;
+using Android.App;
using Android.Content;
using Android.OS;
using Android.Preferences;
@@ -25,10 +26,13 @@ namespace keepass2android
public class SetPasswordDialog : CancelDialog
{
+
+
+ internal String Keyfile;
- internal String Keyfile;
-
- public SetPasswordDialog(Context context):base(context) {
+ public SetPasswordDialog(Activity activity):base(activity)
+ {
+
}
@@ -67,8 +71,8 @@ namespace keepass2android
}
- SetPassword sp = new SetPassword(Context, App.Kp2a, pass, keyfile, new AfterSave(this, null, new Handler()));
- ProgressTask pt = new ProgressTask(App.Kp2a, Context, sp);
+ SetPassword sp = new SetPassword(_activity, App.Kp2a, pass, keyfile, new AfterSave(_activity, this, null, new Handler()));
+ ProgressTask pt = new ProgressTask(App.Kp2a, _activity, sp);
pt.Run();
};
@@ -88,7 +92,7 @@ namespace keepass2android
readonly SetPasswordDialog _dlg;
- public AfterSave(SetPasswordDialog dlg, FileOnFinish finish, Handler handler): base(finish, handler) {
+ public AfterSave(Activity activity, SetPasswordDialog dlg, FileOnFinish finish, Handler handler): base(activity, finish, handler) {
_finish = finish;
_dlg = dlg;
}
diff --git a/src/keepass2android/app/AppTask.cs b/src/keepass2android/app/AppTask.cs
index 95ed520d..45329ae7 100644
--- a/src/keepass2android/app/AppTask.cs
+++ b/src/keepass2android/app/AppTask.cs
@@ -489,6 +489,10 @@ namespace keepass2android
public override void CompleteOnCreateEntryActivity(EntryActivity activity)
{
+ Context ctx = activity;
+ if (ctx == null)
+ ctx = Application.Context;
+
if (ShowUserNotifications)
{
//show the notifications
@@ -579,7 +583,7 @@ namespace keepass2android
builder.SetPositiveButton(activity.GetString(Resource.String.yes), (dlgSender, dlgEvt) =>
{
- activity.AddUrlToEntry(url, () => base.CompleteOnCreateEntryActivity(activity));
+ activity.AddUrlToEntry(url, (EntryActivity thenActiveActivity) => base.CompleteOnCreateEntryActivity(thenActiveActivity));
});
builder.SetNegativeButton(activity.GetString(Resource.String.no), (dlgSender, dlgEvt) =>
diff --git a/src/keepass2android/keepass2android.csproj b/src/keepass2android/keepass2android.csproj
index ce8cfbc3..260deb5c 100644
--- a/src/keepass2android/keepass2android.csproj
+++ b/src/keepass2android/keepass2android.csproj
@@ -303,7 +303,7 @@
-
+
diff --git a/src/keepass2android/settings/DatabaseSettingsActivity.cs b/src/keepass2android/settings/DatabaseSettingsActivity.cs
index 5b7f4094..45646f8b 100644
--- a/src/keepass2android/settings/DatabaseSettingsActivity.cs
+++ b/src/keepass2android/settings/DatabaseSettingsActivity.cs
@@ -561,12 +561,12 @@ namespace keepass2android
var previousCipher = db.KpDatabase.DataCipherUuid;
db.KpDatabase.DataCipherUuid = new PwUuid(MemUtil.HexStringToByteArray((string)preferenceChangeEventArgs.NewValue));
- SaveDb save = new SaveDb(Activity, App.Kp2a, new ActionOnFinish((success, message) =>
+ SaveDb save = new SaveDb(Activity, App.Kp2a, new ActionOnFinish(Activity, (success, message, activity) =>
{
if (!success)
{
db.KpDatabase.DataCipherUuid = previousCipher;
- Toast.MakeText(Activity, message, ToastLength.Long).Show();
+ Toast.MakeText(activity, message, ToastLength.Long).Show();
return;
}
preferenceChangeEventArgs.Preference.Summary =
@@ -626,12 +626,12 @@ namespace keepass2android
Kp2aLog.Log("--new kdf: " + KdfPool.Get(db.KpDatabase.KdfParameters.KdfUuid) + " " + db.KpDatabase.KdfParameters.KdfUuid.ToHexString());
- SaveDb save = new SaveDb(Activity, App.Kp2a, new ActionOnFinish((success, message) =>
+ SaveDb save = new SaveDb(Activity, App.Kp2a, new ActionOnFinish(Activity, (success, message, activity) =>
{
if (!success)
{
db.KpDatabase.KdfParameters = previousKdfParams;
- Toast.MakeText(Activity, message, ToastLength.Long).Show();
+ Toast.MakeText(activity, message, ToastLength.Long).Show();
return;
}
UpdateKdfScreen();
@@ -670,7 +670,7 @@ namespace keepass2android
pref.PreferenceClick += (sender, args) =>
{
ProgressTask pt = new ProgressTask(App.Kp2a, Activity,
- new AddTemplateEntries(Activity, App.Kp2a, new ActionOnFinish(
+ new AddTemplateEntries(Activity, App.Kp2a, new ActionOnFinish(Activity,
delegate
{
pref.Enabled = false;
@@ -709,13 +709,13 @@ namespace keepass2android
String previousName = db.KpDatabase.Name;
db.KpDatabase.Name = e.NewValue.ToString();
- SaveDb save = new SaveDb(Activity, App.Kp2a, new ActionOnFinish((success, message) =>
+ SaveDb save = new SaveDb(Activity, App.Kp2a, new ActionOnFinish(Activity, (success, message, activity) =>
{
if (!success)
{
db.KpDatabase.Name = previousName;
db.KpDatabase.NameChanged = previousNameChanged;
- Toast.MakeText(Activity, message, ToastLength.Long).Show();
+ Toast.MakeText(activity, message, ToastLength.Long).Show();
}
else
{
@@ -747,13 +747,13 @@ namespace keepass2android
String previousUsername = db.KpDatabase.DefaultUserName;
db.KpDatabase.DefaultUserName = e.NewValue.ToString();
- SaveDb save = new SaveDb(Activity, App.Kp2a, new ActionOnFinish((success, message) =>
+ SaveDb save = new SaveDb(Activity, App.Kp2a, new ActionOnFinish(Activity, (success, message, activity) =>
{
if (!success)
{
db.KpDatabase.DefaultUserName = previousUsername;
db.KpDatabase.DefaultUserNameChanged = previousUsernameChanged;
- Toast.MakeText(Activity, message, ToastLength.Long).Show();
+ Toast.MakeText(activity, message, ToastLength.Long).Show();
}
}));
ProgressTask pt = new ProgressTask(App.Kp2a, Activity, save);
diff --git a/src/keepass2android/settings/RoundsPreference.cs b/src/keepass2android/settings/RoundsPreference.cs
index 2536c30a..8056de8f 100644
--- a/src/keepass2android/settings/RoundsPreference.cs
+++ b/src/keepass2android/settings/RoundsPreference.cs
@@ -16,6 +16,7 @@ This file is part of Keepass2Android, Copyright 2013 Philipp Crocoll. This file
*/
using System;
using System.Globalization;
+using Android.App;
using Android.Content;
using Android.OS;
using Android.Views;
@@ -88,8 +89,8 @@ namespace keepass2android.settings
ParamValue = paramValue;
Handler handler = new Handler();
- SaveDb save = new SaveDb(Context, App.Kp2a, new KdfNumberParamPreference.AfterSave(Context, handler, oldValue, this));
- ProgressTask pt = new ProgressTask(App.Kp2a, Context, save);
+ SaveDb save = new SaveDb((Activity)Context, App.Kp2a, new KdfNumberParamPreference.AfterSave((Activity)Context, handler, oldValue, this));
+ ProgressTask pt = new ProgressTask(App.Kp2a, (Activity)Context, save);
pt.Run();
}
@@ -101,7 +102,7 @@ namespace keepass2android.settings
private readonly Context _ctx;
private readonly KdfNumberParamPreference _pref;
- public AfterSave(Context ctx, Handler handler, ulong oldRounds, KdfNumberParamPreference pref):base(handler) {
+ public AfterSave(Activity ctx, Handler handler, ulong oldRounds, KdfNumberParamPreference pref):base(ctx, handler) {
_pref = pref;
_ctx = ctx;