diff --git a/src/Kp2aBusinessLogic/BlockingOperationRunner.cs b/src/Kp2aBusinessLogic/BlockingOperationRunner.cs index b8285b6d..377eec45 100644 --- a/src/Kp2aBusinessLogic/BlockingOperationRunner.cs +++ b/src/Kp2aBusinessLogic/BlockingOperationRunner.cs @@ -53,14 +53,15 @@ namespace keepass2android private readonly Queue _taskQueue = new Queue(); private readonly object _taskQueueLock = new object(); private Java.Lang.Thread? _thread = null; + private OperationWithFinishHandler? _currentlyRunningTask = null; private ProgressUiAsStatusLoggerAdapter _statusLogger = null; - public void Run(Context context, IKp2aApp app, OperationWithFinishHandler operation) + public void Run(IKp2aApp app, OperationWithFinishHandler operation) { lock (Instance._taskQueueLock) { _taskQueue.Enqueue(operation); - SetNewActiveContext(context, app); + SetNewActiveContext(app); // Start thread to run the task (unless it's already running) if (_thread == null) @@ -70,21 +71,22 @@ namespace keepass2android { while (true) { - OperationWithFinishHandler task; + lock (_taskQueueLock) { if (!_taskQueue.Any()) { _thread = null; + _currentlyRunningTask = null; _statusLogger.EndLogging(); break; } else { - task = _taskQueue.Dequeue(); + _currentlyRunningTask = _taskQueue.Dequeue(); } } - task.Run(); + _currentlyRunningTask.Run(); } }); @@ -95,8 +97,9 @@ namespace keepass2android } - public void SetNewActiveContext(Context? context, IKp2aApp app) + public void SetNewActiveContext(IKp2aApp app) { + Context? context = app.ActiveContext; lock (_taskQueueLock) { if (context == null && _thread != null) @@ -116,9 +119,11 @@ namespace keepass2android _statusLogger.SetNewProgressUi(progressUi); } - foreach (var task in _taskQueue) + foreach (var task in _taskQueue.Concat(_currentlyRunningTask == null ? + new List() : + new List() { _currentlyRunningTask }) + ) { - task.ActiveContext = context; task.SetStatusLogger(_statusLogger); } @@ -238,19 +243,19 @@ namespace keepass2android } - public Activity ActiveActivity + public Context ActiveActivity { get { return _activeActivity; } private set { - if (_activeActivity != null && _activeActivity != _previouslyActiveActivity) + if (_activeActivity != null && _activeActivity != _previouslyActiveContext) { - _previouslyActiveActivity = _activeActivity; + _previouslyActiveContext = _activeActivity; + } _activeActivity = value; - if (_task != null) - _task.ActiveContext = _activeActivity; + if (_activeActivity != null) { SetupProgressDialog(_app); @@ -259,9 +264,9 @@ namespace keepass2android } } - public Activity PreviouslyActiveActivity + public Context PreviouslyActiveContext { - get { return _previouslyActiveActivity; } + get { return _previouslyActiveContext; } } @@ -270,12 +275,12 @@ namespace keepass2android private IProgressDialog _progressDialog; private readonly IKp2aApp _app; private Java.Lang.Thread _thread; - private Activity _activeActivity, _previouslyActiveActivity; + private Context _activeActivity, _previouslyActiveContext; private ProgressDialogStatusLogger _progressDialogStatusLogger; - public BlockingOperationRunner(IKp2aApp app, Activity activity, OperationWithFinishHandler task) + public BlockingOperationRunner(IKp2aApp app, OperationWithFinishHandler task) { - _activeActivity = activity; + _activeActivity = app.ActiveContext; _task = task; _handler = app.UiThreadHandler; _app = app; @@ -283,7 +288,7 @@ namespace keepass2android SetupProgressDialog(app); // Set code to run when this is finished - _task.operationFinishedHandler = new AfterTask(activity, task.operationFinishedHandler, _handler, this); + _task.operationFinishedHandler = new AfterTask(app, task.operationFinishedHandler, _handler, this); _task.SetStatusLogger(_progressDialogStatusLogger); @@ -341,7 +346,7 @@ namespace keepass2android private class AfterTask : OnOperationFinishedHandler { readonly BlockingOperationRunner _blockingOperationRunner; - public AfterTask (Activity activity, OnOperationFinishedHandler operationFinishedHandler, Handler handler, BlockingOperationRunner pt): base(activity, operationFinishedHandler, handler) + public AfterTask (IActiveContextProvider app, OnOperationFinishedHandler operationFinishedHandler, Handler handler, BlockingOperationRunner pt): base(app, operationFinishedHandler, handler) { _blockingOperationRunner = pt; } diff --git a/src/Kp2aBusinessLogic/IKp2aApp.cs b/src/Kp2aBusinessLogic/IKp2aApp.cs index a8b1a230..a9bc0978 100644 --- a/src/Kp2aBusinessLogic/IKp2aApp.cs +++ b/src/Kp2aBusinessLogic/IKp2aApp.cs @@ -41,7 +41,7 @@ namespace keepass2android /// Interface through which Activities and the logic layer can access some app specific functionalities and Application static data /// /// This also contains methods which are UI specific and should be replacable for testing. - public interface IKp2aApp : ICertificateValidationHandler + public interface IKp2aApp : ICertificateValidationHandler, IActiveContextProvider { /// /// Locks all currently open databases, quicklocking if available (unless false is passed for allowQuickUnlock) @@ -96,7 +96,6 @@ namespace keepass2android EventHandler yesHandler, EventHandler noHandler, EventHandler cancelHandler, - Context ctx, string messageSuffix = ""); /// @@ -107,7 +106,6 @@ namespace keepass2android EventHandler yesHandler, EventHandler noHandler, EventHandler cancelHandler, - Context ctx, string messageSuffix = ""); void ShowMessage(Context ctx, int resourceId, MessageSeverity severity); diff --git a/src/Kp2aBusinessLogic/database/CheckDatabaseForChanges.cs b/src/Kp2aBusinessLogic/database/CheckDatabaseForChanges.cs index 15434933..b27a6e93 100644 --- a/src/Kp2aBusinessLogic/database/CheckDatabaseForChanges.cs +++ b/src/Kp2aBusinessLogic/database/CheckDatabaseForChanges.cs @@ -19,10 +19,9 @@ namespace keepass2android private readonly IKp2aApp _app; - public CheckDatabaseForChanges(Activity context, IKp2aApp app, OnOperationFinishedHandler operationFinishedHandler) - : base(context, operationFinishedHandler) + public CheckDatabaseForChanges(IKp2aApp app, OnOperationFinishedHandler operationFinishedHandler) + : base(app, operationFinishedHandler) { - _context = context; _app = app; } diff --git a/src/Kp2aBusinessLogic/database/SynchronizeCachedDatabase.cs b/src/Kp2aBusinessLogic/database/SynchronizeCachedDatabase.cs index b7cad8ed..1d5707fd 100644 --- a/src/Kp2aBusinessLogic/database/SynchronizeCachedDatabase.cs +++ b/src/Kp2aBusinessLogic/database/SynchronizeCachedDatabase.cs @@ -16,10 +16,9 @@ namespace keepass2android private readonly IKp2aApp _app; private SaveDb _saveDb; - public SynchronizeCachedDatabase(Context context, IKp2aApp app, OnOperationFinishedHandler operationFinishedHandler) - : base(context, operationFinishedHandler) + public SynchronizeCachedDatabase(IKp2aApp app, OnOperationFinishedHandler operationFinishedHandler) + : base(app, operationFinishedHandler) { - _context = context; _app = app; } @@ -39,6 +38,9 @@ namespace keepass2android //download file from remote location and calculate hash: StatusLogger.UpdateSubMessage(_app.GetResourceString(UiStringKey.DownloadingRemoteFile)); string hash; + + //TODO remove + Thread.Sleep(5000); MemoryStream remoteData; try @@ -58,13 +60,17 @@ namespace keepass2android //check if remote file was modified: var baseVersionHash = cachingFileStorage.GetBaseVersionHash(ioc); Kp2aLog.Log("Checking for file change. baseVersionHash = " + baseVersionHash); - if (baseVersionHash != hash) + if (baseVersionHash != hash || + true//TODO remove + ) { //remote file is modified - if (cachingFileStorage.HasLocalChanges(ioc)) + if (cachingFileStorage.HasLocalChanges(ioc) + || true //TODO remove + ) { //conflict! need to merge - _saveDb = new SaveDb(_context, _app, new ActionOnOperationFinished(ActiveContext, (success, result, activity) => + _saveDb = new SaveDb(_app, new ActionOnOperationFinished(_app, (success, result, activity) => { if (!success) { @@ -76,6 +82,7 @@ namespace keepass2android } _saveDb = null; }), _app.CurrentDb, false, remoteData); + _saveDb.SyncInBackground = false; _saveDb.Run(); _app.CurrentDb.UpdateGlobals(); diff --git a/src/Kp2aBusinessLogic/database/edit/ActionOnOperationFinished.cs b/src/Kp2aBusinessLogic/database/edit/ActionOnOperationFinished.cs index 625ba969..373d1bb8 100644 --- a/src/Kp2aBusinessLogic/database/edit/ActionOnOperationFinished.cs +++ b/src/Kp2aBusinessLogic/database/edit/ActionOnOperationFinished.cs @@ -28,12 +28,12 @@ namespace keepass2android readonly ActionToPerformOnFinsh _actionToPerform; - public ActionOnOperationFinished(Context context, ActionToPerformOnFinsh actionToPerform) : base(context, null, null) + public ActionOnOperationFinished(IKp2aApp app, ActionToPerformOnFinsh actionToPerform) : base(app, null, null) { _actionToPerform = actionToPerform; } - public ActionOnOperationFinished(Context context, ActionToPerformOnFinsh actionToPerform, OnOperationFinishedHandler operationFinishedHandler) : base(context, operationFinishedHandler) + public ActionOnOperationFinished(IKp2aApp app, ActionToPerformOnFinsh actionToPerform, OnOperationFinishedHandler operationFinishedHandler) : base(app, operationFinishedHandler) { _actionToPerform = actionToPerform; } @@ -50,7 +50,7 @@ namespace keepass2android Handler.Post(() => {_actionToPerform(Success, Message, ActiveContext);}); } else - _actionToPerform(Success, Message, AllowInactiveActivity ? (ActiveContext ?? PreviouslyActiveContext) : ActiveContext); + _actionToPerform(Success, Message, ActiveContext); base.Run(); } } diff --git a/src/Kp2aBusinessLogic/database/edit/AddEntry.cs b/src/Kp2aBusinessLogic/database/edit/AddEntry.cs index d52103c6..a65f79e6 100644 --- a/src/Kp2aBusinessLogic/database/edit/AddEntry.cs +++ b/src/Kp2aBusinessLogic/database/edit/AddEntry.cs @@ -30,22 +30,20 @@ namespace keepass2android private readonly IKp2aApp _app; private readonly PwEntry _entry; private readonly PwGroup _parentGroup; - private readonly Activity _ctx; private readonly Database _db; - public static AddEntry GetInstance(Activity ctx, IKp2aApp app, PwEntry entry, PwGroup parentGroup, OnOperationFinishedHandler operationFinishedHandler, Database db) { + public static AddEntry GetInstance(IKp2aApp app, PwEntry entry, PwGroup parentGroup, OnOperationFinishedHandler operationFinishedHandler, Database db) { - return new AddEntry(ctx, db, app, entry, parentGroup, operationFinishedHandler); + return new AddEntry(db, app, entry, parentGroup, operationFinishedHandler); } - public AddEntry(Activity ctx, Database db, IKp2aApp app, PwEntry entry, PwGroup parentGroup, OnOperationFinishedHandler operationFinishedHandler):base(ctx, operationFinishedHandler) { - _ctx = ctx; + public AddEntry(Database db, IKp2aApp app, PwEntry entry, PwGroup parentGroup, OnOperationFinishedHandler operationFinishedHandler):base(app, operationFinishedHandler) { _db = db; _parentGroup = parentGroup; _app = app; _entry = entry; - _operationFinishedHandler = new AfterAdd(ctx, app.CurrentDb, entry, app,operationFinishedHandler); + _operationFinishedHandler = new AfterAdd(app.CurrentDb, entry, app,operationFinishedHandler); } @@ -65,7 +63,7 @@ namespace keepass2android _db.Elements.Add(_entry); // Commit to disk - SaveDb save = new SaveDb(_ctx, _app, _app.CurrentDb, operationFinishedHandler); + SaveDb save = new SaveDb(_app, _app.CurrentDb, operationFinishedHandler); save.SetStatusLogger(StatusLogger); save.Run(); } @@ -75,7 +73,7 @@ namespace keepass2android private readonly PwEntry _entry; private readonly IKp2aApp _app; - public AfterAdd(Activity activity, Database db, PwEntry entry, IKp2aApp app, OnOperationFinishedHandler operationFinishedHandler):base(activity, operationFinishedHandler) { + public AfterAdd( Database db, PwEntry entry, IKp2aApp app, OnOperationFinishedHandler operationFinishedHandler):base(app, operationFinishedHandler) { _db = db; _entry = entry; _app = app; diff --git a/src/Kp2aBusinessLogic/database/edit/AddGroup.cs b/src/Kp2aBusinessLogic/database/edit/AddGroup.cs index a5b07237..bd3729d3 100644 --- a/src/Kp2aBusinessLogic/database/edit/AddGroup.cs +++ b/src/Kp2aBusinessLogic/database/edit/AddGroup.cs @@ -38,18 +38,16 @@ namespace keepass2android public PwGroup Group; internal PwGroup Parent; protected bool DontSave; - readonly Activity _ctx; - - - public static AddGroup GetInstance(Activity ctx, IKp2aApp app, string name, int iconid, PwUuid groupCustomIconId, PwGroup parent, OnOperationFinishedHandler operationFinishedHandler, bool dontSave) { - return new AddGroup(ctx, app, name, iconid, groupCustomIconId, parent, operationFinishedHandler, dontSave); + + + public static AddGroup GetInstance(IKp2aApp app, string name, int iconid, PwUuid groupCustomIconId, PwGroup parent, OnOperationFinishedHandler operationFinishedHandler, bool dontSave) { + return new AddGroup(app, name, iconid, groupCustomIconId, parent, operationFinishedHandler, dontSave); } - private AddGroup(Activity ctx, IKp2aApp app, String name, int iconid, PwUuid groupCustomIconId, PwGroup parent, OnOperationFinishedHandler operationFinishedHandler, bool dontSave) - : base(ctx, operationFinishedHandler) + private AddGroup(IKp2aApp app, String name, int iconid, PwUuid groupCustomIconId, PwGroup parent, OnOperationFinishedHandler operationFinishedHandler, bool dontSave) + : base(app, operationFinishedHandler) { - _ctx = ctx; _name = name; _iconId = iconid; _groupCustomIconId = groupCustomIconId; @@ -57,7 +55,7 @@ namespace keepass2android DontSave = dontSave; _app = app; - _operationFinishedHandler = new AfterAdd(ctx, this, operationFinishedHandler); + _operationFinishedHandler = new AfterAdd(_app, this, operationFinishedHandler); } @@ -74,7 +72,7 @@ namespace keepass2android _app.CurrentDb.Elements.Add(Group); // Commit to disk - SaveDb save = new SaveDb(_ctx, _app, _app.CurrentDb, operationFinishedHandler, DontSave); + SaveDb save = new SaveDb(_app, _app.CurrentDb, operationFinishedHandler, DontSave); save.SetStatusLogger(StatusLogger); save.Run(); } @@ -82,7 +80,7 @@ namespace keepass2android private class AfterAdd : OnOperationFinishedHandler { readonly AddGroup _addGroup; - public AfterAdd(Activity activity, AddGroup addGroup,OnOperationFinishedHandler operationFinishedHandler): base(activity, operationFinishedHandler) { + public AfterAdd(IKp2aApp app, AddGroup addGroup,OnOperationFinishedHandler operationFinishedHandler): base(app, operationFinishedHandler) { _addGroup = addGroup; } diff --git a/src/Kp2aBusinessLogic/database/edit/AddTemplateEntries.cs b/src/Kp2aBusinessLogic/database/edit/AddTemplateEntries.cs index 05e9f255..ef97bff2 100644 --- a/src/Kp2aBusinessLogic/database/edit/AddTemplateEntries.cs +++ b/src/Kp2aBusinessLogic/database/edit/AddTemplateEntries.cs @@ -130,13 +130,11 @@ namespace keepass2android } private readonly IKp2aApp _app; - private readonly Activity _ctx; - - public AddTemplateEntries(Activity ctx, IKp2aApp app, OnOperationFinishedHandler operationFinishedHandler) - : base(ctx, operationFinishedHandler) + + public AddTemplateEntries(IKp2aApp app, OnOperationFinishedHandler operationFinishedHandler) + : base(app, operationFinishedHandler) { - _ctx = ctx; - _app = app; + _app = app; //_operationFinishedHandler = new AfterAdd(this, operationFinishedHandler); } @@ -313,7 +311,7 @@ namespace keepass2android _app.DirtyGroups.Add(templateGroup); // Commit to disk - SaveDb save = new SaveDb(_ctx, _app, _app.CurrentDb, operationFinishedHandler); + SaveDb save = new SaveDb( _app, _app.CurrentDb, operationFinishedHandler); save.SetStatusLogger(StatusLogger); save.Run(); } @@ -373,7 +371,7 @@ namespace keepass2android private readonly Database _db; private readonly List _entries; - public AfterAdd(Activity activity, Database db, List entries, OnOperationFinishedHandler operationFinishedHandler):base(activity, operationFinishedHandler) { + public AfterAdd(IKp2aApp app, Database db, List entries, OnOperationFinishedHandler operationFinishedHandler):base(app, operationFinishedHandler) { _db = db; _entries = entries; diff --git a/src/Kp2aBusinessLogic/database/edit/CopyEntry.cs b/src/Kp2aBusinessLogic/database/edit/CopyEntry.cs index 7ec55db7..8defda4c 100644 --- a/src/Kp2aBusinessLogic/database/edit/CopyEntry.cs +++ b/src/Kp2aBusinessLogic/database/edit/CopyEntry.cs @@ -16,8 +16,8 @@ namespace keepass2android.database.edit { public class CopyEntry: AddEntry { - public CopyEntry(Activity ctx, IKp2aApp app, PwEntry entry, OnOperationFinishedHandler operationFinishedHandler, Database db) - : base(ctx, db, app, CreateCopy(entry, app), entry.ParentGroup, operationFinishedHandler) + public CopyEntry(IKp2aApp app, PwEntry entry, OnOperationFinishedHandler operationFinishedHandler, Database db) + : base(db, app, CreateCopy(entry, app), entry.ParentGroup, operationFinishedHandler) { } diff --git a/src/Kp2aBusinessLogic/database/edit/CreateDB.cs b/src/Kp2aBusinessLogic/database/edit/CreateDB.cs index ce20e002..f0032715 100644 --- a/src/Kp2aBusinessLogic/database/edit/CreateDB.cs +++ b/src/Kp2aBusinessLogic/database/edit/CreateDB.cs @@ -29,24 +29,21 @@ namespace keepass2android public class CreateDb : OperationWithFinishHandler { private readonly IOConnectionInfo _ioc; private readonly bool _dontSave; - private readonly Activity _ctx; private readonly IKp2aApp _app; private CompositeKey _key; private readonly bool _makeCurrent; - public CreateDb(IKp2aApp app, Activity ctx, IOConnectionInfo ioc, OnOperationFinishedHandler operationFinishedHandler, bool dontSave, bool makeCurrent): base(ctx, operationFinishedHandler) { - _ctx = ctx; - _ioc = ioc; + public CreateDb(IKp2aApp app, Activity ctx, IOConnectionInfo ioc, OnOperationFinishedHandler operationFinishedHandler, bool dontSave, bool makeCurrent): base(app, operationFinishedHandler) { + _ioc = ioc; _dontSave = dontSave; _makeCurrent = makeCurrent; _app = app; } public CreateDb(IKp2aApp app, Activity ctx, IOConnectionInfo ioc, OnOperationFinishedHandler operationFinishedHandler, bool dontSave, CompositeKey key, bool makeCurrent) - : base(ctx, operationFinishedHandler) + : base(app, operationFinishedHandler) { - _ctx = ctx; - _ioc = ioc; + _ioc = ioc; _dontSave = dontSave; _app = app; _key = key; @@ -77,17 +74,17 @@ namespace keepass2android db.SearchHelper = new SearchDbHelper(_app); // Add a couple default groups - AddGroup internet = AddGroup.GetInstance(_ctx, _app, "Internet", 1, null, db.KpDatabase.RootGroup, null, true); + AddGroup internet = AddGroup.GetInstance(_app, "Internet", 1, null, db.KpDatabase.RootGroup, null, true); internet.Run(); - AddGroup email = AddGroup.GetInstance(_ctx, _app, "eMail", 19, null, db.KpDatabase.RootGroup, null, true); + AddGroup email = AddGroup.GetInstance(_app, "eMail", 19, null, db.KpDatabase.RootGroup, null, true); email.Run(); List addedEntries; - AddTemplateEntries addTemplates = new AddTemplateEntries(_ctx, _app, null); + AddTemplateEntries addTemplates = new AddTemplateEntries(_app, null); addTemplates.AddTemplates(out addedEntries); // Commit changes - SaveDb save = new SaveDb(_ctx, _app, db, operationFinishedHandler, _dontSave); + SaveDb save = new SaveDb(_app, db, operationFinishedHandler, _dontSave); save.SetStatusLogger(StatusLogger); _operationFinishedHandler = null; save.Run(); diff --git a/src/Kp2aBusinessLogic/database/edit/DeleteEntry.cs b/src/Kp2aBusinessLogic/database/edit/DeleteEntry.cs index 247b3e0d..484ad2bf 100644 --- a/src/Kp2aBusinessLogic/database/edit/DeleteEntry.cs +++ b/src/Kp2aBusinessLogic/database/edit/DeleteEntry.cs @@ -29,8 +29,8 @@ namespace keepass2android private readonly PwEntry _entry; private UiStringKey _statusMessage; - public DeleteEntry(Activity activiy, IKp2aApp app, PwEntry entry, OnOperationFinishedHandler operationFinishedHandler):base(activiy, operationFinishedHandler, app) { - Ctx = activiy; + public DeleteEntry(IKp2aApp app, PwEntry entry, OnOperationFinishedHandler operationFinishedHandler):base(operationFinishedHandler, app) { + Db = app.FindDatabaseForElement(entry); _entry = entry; diff --git a/src/Kp2aBusinessLogic/database/edit/DeleteGroup.cs b/src/Kp2aBusinessLogic/database/edit/DeleteGroup.cs index d6858f01..45241d03 100644 --- a/src/Kp2aBusinessLogic/database/edit/DeleteGroup.cs +++ b/src/Kp2aBusinessLogic/database/edit/DeleteGroup.cs @@ -30,9 +30,9 @@ namespace keepass2android protected bool DontSave; public DeleteGroup(Activity activity, IKp2aApp app, PwGroup group, OnOperationFinishedHandler operationFinishedHandler) - : base(activity, operationFinishedHandler, app) + : base(operationFinishedHandler, app) { - SetMembers(activity, app, group, false); + SetMembers(app, group, false); } /* public DeleteGroup(Context ctx, Database db, PwGroup group, Activity act, OnOperationFinishedHandler operationFinishedHandler, bool dontSave) @@ -45,9 +45,9 @@ namespace keepass2android SetMembers(ctx, db, group, null, dontSave); } */ - private void SetMembers(Activity activity, IKp2aApp app, PwGroup group, bool dontSave) + private void SetMembers(IKp2aApp app, PwGroup group, bool dontSave) { - base.SetMembers(activity, app.FindDatabaseForElement(group)); + base.SetMembers(app.FindDatabaseForElement(group)); _group = group; DontSave = dontSave; diff --git a/src/Kp2aBusinessLogic/database/edit/DeleteMultipleItemsFromOneDatabase.cs b/src/Kp2aBusinessLogic/database/edit/DeleteMultipleItemsFromOneDatabase.cs index 588a1fef..bba3691c 100644 --- a/src/Kp2aBusinessLogic/database/edit/DeleteMultipleItemsFromOneDatabase.cs +++ b/src/Kp2aBusinessLogic/database/edit/DeleteMultipleItemsFromOneDatabase.cs @@ -13,10 +13,10 @@ namespace keepass2android private readonly bool _canRecycle; public DeleteMultipleItemsFromOneDatabase(Activity activity, Database db, List elementsToDelete, OnOperationFinishedHandler operationFinishedHandler, IKp2aApp app) - : base(activity, operationFinishedHandler, app) + : base(operationFinishedHandler, app) { _elementsToDelete = elementsToDelete; - SetMembers(activity, db); + SetMembers(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 344c4029..2d52aec5 100644 --- a/src/Kp2aBusinessLogic/database/edit/DeleteRunnable.cs +++ b/src/Kp2aBusinessLogic/database/edit/DeleteRunnable.cs @@ -8,8 +8,8 @@ namespace keepass2android { public abstract class DeleteRunnable : OperationWithFinishHandler { - protected DeleteRunnable(Activity activity, OnOperationFinishedHandler operationFinishedHandler, IKp2aApp app) - : base(activity, operationFinishedHandler) + protected DeleteRunnable(OnOperationFinishedHandler operationFinishedHandler, IKp2aApp app) + : base(app, operationFinishedHandler) { App = app; } @@ -18,11 +18,10 @@ namespace keepass2android protected Database Db; - protected Activity Ctx; + - protected void SetMembers(Activity activity, Database db) + protected void SetMembers( Database db) { - Ctx = activity; Db = db; } @@ -131,18 +130,18 @@ namespace keepass2android (dlgSender, dlgEvt) => { DeletePermanently = true; - BlockingOperationRunner pt = new BlockingOperationRunner(App, Ctx, this); + BlockingOperationRunner pt = new BlockingOperationRunner(App, this); pt.Run(); }, (dlgSender, dlgEvt) => { DeletePermanently = false; - BlockingOperationRunner pt = new BlockingOperationRunner(App, Ctx, this); + BlockingOperationRunner pt = new BlockingOperationRunner(App, this); pt.Run(); }, (dlgSender, dlgEvt) => { }, - Ctx, messageSuffix); + messageSuffix); @@ -153,12 +152,12 @@ namespace keepass2android QuestionNoRecycleResourceId, (dlgSender, dlgEvt) => { - BlockingOperationRunner pt = new BlockingOperationRunner(App, Ctx, this); + BlockingOperationRunner pt = new BlockingOperationRunner(App, this); pt.Run(); }, null, (dlgSender, dlgEvt) => { }, - Ctx, messageSuffix); + messageSuffix); } @@ -215,7 +214,7 @@ namespace keepass2android Android.Util.Log.Debug("KP2A", "Calling PerformDelete.."); PerformDelete(touchedGroups, permanentlyDeletedGroups); - _operationFinishedHandler = new ActionOnOperationFinished(ActiveContext,(success, message, activity) => + _operationFinishedHandler = new ActionOnOperationFinished(App,(success, message, activity) => { if (success) { @@ -239,7 +238,7 @@ namespace keepass2android }, operationFinishedHandler); // Commit database - SaveDb save = new SaveDb(Ctx, App, Db, operationFinishedHandler, false); + SaveDb save = new SaveDb( App, Db, operationFinishedHandler, false); save.ShowDatabaseIocInStatus = ShowDatabaseIocInStatus; save.SetStatusLogger(StatusLogger); diff --git a/src/Kp2aBusinessLogic/database/edit/EditGroup.cs b/src/Kp2aBusinessLogic/database/edit/EditGroup.cs index 622d126a..8c575980 100644 --- a/src/Kp2aBusinessLogic/database/edit/EditGroup.cs +++ b/src/Kp2aBusinessLogic/database/edit/EditGroup.cs @@ -36,19 +36,17 @@ namespace keepass2android private readonly PwIcon _iconId; private readonly PwUuid _customIconId; internal PwGroup Group; - readonly Activity _ctx; - public EditGroup(Activity ctx, IKp2aApp app, String name, PwIcon iconid, PwUuid customIconId, PwGroup group, OnOperationFinishedHandler operationFinishedHandler) - : base(ctx, operationFinishedHandler) + public EditGroup(IKp2aApp app, String name, PwIcon iconid, PwUuid customIconId, PwGroup group, OnOperationFinishedHandler operationFinishedHandler) + : base(app, operationFinishedHandler) { - _ctx = ctx; _name = name; _iconId = iconid; Group = group; _customIconId = customIconId; _app = app; - _operationFinishedHandler = new AfterEdit(ctx, this, operationFinishedHandler); + _operationFinishedHandler = new AfterEdit(app, this, operationFinishedHandler); } @@ -60,7 +58,7 @@ namespace keepass2android Group.Touch(true); // Commit to disk - SaveDb save = new SaveDb(_ctx, _app, Db, operationFinishedHandler); + SaveDb save = new SaveDb(_app, Db, operationFinishedHandler); save.SetStatusLogger(StatusLogger); save.Run(); } @@ -68,8 +66,8 @@ namespace keepass2android private class AfterEdit : OnOperationFinishedHandler { readonly EditGroup _editGroup; - public AfterEdit(Activity ctx, EditGroup editGroup, OnOperationFinishedHandler operationFinishedHandler) - : base(ctx, operationFinishedHandler) + public AfterEdit(IKp2aApp app, EditGroup editGroup, OnOperationFinishedHandler operationFinishedHandler) + : base(app, operationFinishedHandler) { _editGroup = editGroup; } diff --git a/src/Kp2aBusinessLogic/database/edit/FileOnFinish.cs b/src/Kp2aBusinessLogic/database/edit/FileOnFinish.cs index 51c838d3..eec3b5f8 100644 --- a/src/Kp2aBusinessLogic/database/edit/FileOnFinish.cs +++ b/src/Kp2aBusinessLogic/database/edit/FileOnFinish.cs @@ -24,7 +24,7 @@ namespace keepass2android public abstract class FileOnFinish : OnOperationFinishedHandler { private String _filename = ""; - protected FileOnFinish(Activity activity, FileOnFinish operationFinishedHandler):base(activity, operationFinishedHandler) { + protected FileOnFinish(IKp2aApp app, FileOnFinish operationFinishedHandler):base(app, operationFinishedHandler) { } public string Filename diff --git a/src/Kp2aBusinessLogic/database/edit/LoadDB.cs b/src/Kp2aBusinessLogic/database/edit/LoadDB.cs index e8b3c4d0..5223ce65 100644 --- a/src/Kp2aBusinessLogic/database/edit/LoadDB.cs +++ b/src/Kp2aBusinessLogic/database/edit/LoadDB.cs @@ -40,7 +40,7 @@ namespace keepass2android private readonly bool _rememberKeyfile; IDatabaseFormat _format; - public LoadDb(Activity activity, IKp2aApp app, IOConnectionInfo ioc, Task databaseData, CompositeKey compositeKey, String keyfileOrProvider, OnOperationFinishedHandler operationFinishedHandler, bool updateLastUsageTimestamp, bool makeCurrent): base(activity, operationFinishedHandler) + public LoadDb(Activity activity, IKp2aApp app, IOConnectionInfo ioc, Task databaseData, CompositeKey compositeKey, String keyfileOrProvider, OnOperationFinishedHandler operationFinishedHandler, bool updateLastUsageTimestamp, bool makeCurrent): base(app, operationFinishedHandler) { _app = app; _ioc = ioc; @@ -169,7 +169,7 @@ namespace keepass2android if (requiresSubsequentSync) { - var syncTask = new SynchronizeCachedDatabase(ActiveContext, _app, new ActionOnOperationFinished(ActiveContext, + var syncTask = new SynchronizeCachedDatabase(_app, new ActionOnOperationFinished(_app, (success, message, activeActivity) => { if (!String.IsNullOrEmpty(message)) @@ -177,7 +177,7 @@ namespace keepass2android }) ); - BackgroundOperationRunner.Instance.Run(ActiveContext, _app, syncTask); + BackgroundOperationRunner.Instance.Run(_app, syncTask); } Finish(true, _format.SuccessMessage); diff --git a/src/Kp2aBusinessLogic/database/edit/MoveElements.cs b/src/Kp2aBusinessLogic/database/edit/MoveElements.cs index 6dbc1a89..e40ebc3c 100644 --- a/src/Kp2aBusinessLogic/database/edit/MoveElements.cs +++ b/src/Kp2aBusinessLogic/database/edit/MoveElements.cs @@ -14,14 +14,12 @@ namespace keepass2android.database.edit { private readonly List _elementsToMove; private readonly PwGroup _targetGroup; - private readonly Activity _ctx; - private readonly IKp2aApp _app; + private readonly IKp2aApp _app; - public MoveElements(List elementsToMove, PwGroup targetGroup, Activity ctx, IKp2aApp app, OnOperationFinishedHandler operationFinishedHandler) : base(ctx, operationFinishedHandler) + public MoveElements(List elementsToMove, PwGroup targetGroup,IKp2aApp app, OnOperationFinishedHandler operationFinishedHandler) : base(app, operationFinishedHandler) { _elementsToMove = elementsToMove; _targetGroup = targetGroup; - _ctx = ctx; _app = app; } @@ -133,14 +131,14 @@ namespace keepass2android.database.edit operationFinishedHandler.Run(); return; } - SaveDb saveDb = new SaveDb(_ctx, _app, allDatabasesToSave[indexToSave], new ActionOnOperationFinished(activeActivity, ContinueSave), false); + SaveDb saveDb = new SaveDb( _app, allDatabasesToSave[indexToSave], new ActionOnOperationFinished(_app, ContinueSave), false); saveDb.SetStatusLogger(StatusLogger); saveDb.ShowDatabaseIocInStatus = allDatabasesToSave.Count > 1; saveDb.Run(); } - SaveDb save = new SaveDb(_ctx, _app, allDatabasesToSave[0], new ActionOnOperationFinished(ActiveContext, ContinueSave), false); + SaveDb save = new SaveDb(_app, allDatabasesToSave[0], new ActionOnOperationFinished(_app, ContinueSave), false); save.SetStatusLogger(StatusLogger); save.ShowDatabaseIocInStatus = allDatabasesToSave.Count > 1; save.Run(); diff --git a/src/Kp2aBusinessLogic/database/edit/OnOperationFinishedHandler.cs b/src/Kp2aBusinessLogic/database/edit/OnOperationFinishedHandler.cs index 5e41808b..479d2327 100644 --- a/src/Kp2aBusinessLogic/database/edit/OnOperationFinishedHandler.cs +++ b/src/Kp2aBusinessLogic/database/edit/OnOperationFinishedHandler.cs @@ -26,6 +26,11 @@ using KeePassLib.Interfaces; namespace keepass2android { + public interface IActiveContextProvider + { + Context ActiveContext { get; } + } + public abstract class OnOperationFinishedHandler { protected bool Success; @@ -38,62 +43,40 @@ namespace keepass2android set; } + protected Context ActiveContext + { + get + { + return _activeContextProvider?.ActiveContext; + } + } + protected OnOperationFinishedHandler NextOnOperationFinishedHandler; protected Handler Handler; private IKp2aStatusLogger _statusLogger = new Kp2aNullStatusLogger(); //default: no logging but not null -> can be used whenever desired - private Context _activeContext, _previouslyActiveContext; + private readonly IActiveContextProvider _activeContextProvider; - - public IKp2aStatusLogger StatusLogger + public IKp2aStatusLogger StatusLogger { get { return _statusLogger; } set { _statusLogger = value; } - } - - public Context ActiveContext - { - get { return _activeContext; } - set - { - if (_activeContext != null && _activeContext != _previouslyActiveContext) - { - _previouslyActiveContext = _activeContext; - - } - _activeContext = value; - if (NextOnOperationFinishedHandler != null) - { - NextOnOperationFinishedHandler.ActiveContext = value; - } - } - } - - public Context PreviouslyActiveContext + } protected OnOperationFinishedHandler(IActiveContextProvider activeContextProvider, Handler handler) { - get { return _previouslyActiveContext; } - - } - - - - protected OnOperationFinishedHandler(Context activeContext, Handler handler) - { - ActiveContext = activeContext; + _activeContextProvider = activeContextProvider; NextOnOperationFinishedHandler = null; Handler = handler; - } - protected OnOperationFinishedHandler(Context activeContext, OnOperationFinishedHandler operationFinishedHandler, Handler handler) + protected OnOperationFinishedHandler(IActiveContextProvider activeContextProvider, OnOperationFinishedHandler operationFinishedHandler, Handler handler) { - ActiveContext = activeContext; + _activeContextProvider = activeContextProvider; NextOnOperationFinishedHandler = operationFinishedHandler; Handler = handler; } - protected OnOperationFinishedHandler(Context activeContext, OnOperationFinishedHandler operationFinishedHandler) - { - ActiveContext = activeContext; + protected OnOperationFinishedHandler(IActiveContextProvider activeContextProvider, OnOperationFinishedHandler operationFinishedHandler) + { + _activeContextProvider = activeContextProvider; NextOnOperationFinishedHandler = operationFinishedHandler; Handler = null; } @@ -153,3 +136,4 @@ namespace keepass2android } } + diff --git a/src/Kp2aBusinessLogic/database/edit/OperationWithFinishHandler.cs b/src/Kp2aBusinessLogic/database/edit/OperationWithFinishHandler.cs index 75fd5d34..7e144acf 100644 --- a/src/Kp2aBusinessLogic/database/edit/OperationWithFinishHandler.cs +++ b/src/Kp2aBusinessLogic/database/edit/OperationWithFinishHandler.cs @@ -26,11 +26,11 @@ namespace keepass2android protected OnOperationFinishedHandler _operationFinishedHandler; public IKp2aStatusLogger StatusLogger = new Kp2aNullStatusLogger(); //default: empty but not null - private Context _activeContext; + private IActiveContextProvider _activeContextProvider; - protected OperationWithFinishHandler(Context activeContext, OnOperationFinishedHandler operationFinishedHandler) + protected OperationWithFinishHandler(IActiveContextProvider activeContextProvider, OnOperationFinishedHandler operationFinishedHandler) { - _activeContext = activeContext; + _activeContextProvider = activeContextProvider; _operationFinishedHandler = operationFinishedHandler; } @@ -40,16 +40,6 @@ namespace keepass2android set { _operationFinishedHandler = value; } } - public Context ActiveContext - { - get { return _activeContext; } - set - { - _activeContext = value; - if (_operationFinishedHandler != null) - _operationFinishedHandler.ActiveContext = _activeContext; - } - } protected void Finish(bool result, String message, bool importantMessage = false, Exception exception = null) { if ( operationFinishedHandler != null ) { diff --git a/src/Kp2aBusinessLogic/database/edit/SaveDB.cs b/src/Kp2aBusinessLogic/database/edit/SaveDB.cs index 96689c2a..b8f10d19 100644 --- a/src/Kp2aBusinessLogic/database/edit/SaveDB.cs +++ b/src/Kp2aBusinessLogic/database/edit/SaveDB.cs @@ -30,6 +30,7 @@ using keepass2android.Io; using Debug = System.Diagnostics.Debug; using Exception = System.Exception; using KeePass.Util; +using Thread = System.Threading.Thread; namespace keepass2android { @@ -44,14 +45,13 @@ namespace keepass2android /// stream for reading the data from the original file. If this is set to a non-null value, we know we need to sync /// private readonly Stream _streamForOrigFile; - private readonly Context _ctx; + private Java.Lang.Thread _workerThread; - public SaveDb(Activity ctx, IKp2aApp app, Database db, OnOperationFinishedHandler operationFinishedHandler, bool dontSave) - : base(ctx, operationFinishedHandler) + public SaveDb(IKp2aApp app, Database db, OnOperationFinishedHandler operationFinishedHandler, bool dontSave) + : base(app, operationFinishedHandler) { _db = db; - _ctx = ctx; _app = app; _dontSave = dontSave; } @@ -59,29 +59,29 @@ namespace keepass2android /// /// Constructor for sync /// - /// /// /// /// /// Stream for reading the data from the (changed) original location - public SaveDb(Context ctx, IKp2aApp app, OnOperationFinishedHandler operationFinishedHandler, Database db, bool dontSave, Stream streamForOrigFile) - : base(ctx, operationFinishedHandler) + public SaveDb(IKp2aApp app, OnOperationFinishedHandler operationFinishedHandler, Database db, bool dontSave, Stream streamForOrigFile) + : base(app, operationFinishedHandler) { _db = db; - _ctx = ctx; _app = app; _dontSave = dontSave; _streamForOrigFile = streamForOrigFile; - } + SyncInBackground = _app.SyncInBackgroundPreference; - public SaveDb(Activity ctx, IKp2aApp app, Database db, OnOperationFinishedHandler operationFinishedHandler) - : base(ctx, operationFinishedHandler) + } + + public SaveDb(IKp2aApp app, Database db, OnOperationFinishedHandler operationFinishedHandler) + : base(app, operationFinishedHandler) { - _ctx = ctx; _app = app; _db = db; _dontSave = false; - } + SyncInBackground = _app.SyncInBackgroundPreference; + } public bool ShowDatabaseIocInStatus { get; set; } @@ -109,7 +109,7 @@ namespace keepass2android IOConnectionInfo ioc = _db.Ioc; IFileStorage fileStorage = _app.GetFileStorage(ioc); - if (_app.SyncInBackgroundPreference && fileStorage is IOfflineSwitchable offlineSwitchable) + if (SyncInBackground && fileStorage is IOfflineSwitchable offlineSwitchable) { offlineSwitchable.IsOffline = true; //no warning. We'll trigger a sync later. @@ -176,8 +176,7 @@ namespace keepass2android (sender, args) => { RunInWorkerThread(() => Finish(false)); - }, - _ctx + } ); } @@ -210,11 +209,13 @@ namespace keepass2android } + public bool SyncInBackground { get; set; } + private void FinishWithSuccess() { if (requiresSubsequentSync) { - var syncTask = new SynchronizeCachedDatabase(ActiveContext, _app, new ActionOnOperationFinished(ActiveContext, + var syncTask = new SynchronizeCachedDatabase(_app, new ActionOnOperationFinished(_app, (success, message, activeActivity) => { if (!System.String.IsNullOrEmpty(message)) @@ -222,7 +223,7 @@ namespace keepass2android }) ); - BackgroundOperationRunner.Instance.Run(ActiveContext, _app, syncTask); + BackgroundOperationRunner.Instance.Run(_app, syncTask); } Finish(true); } diff --git a/src/Kp2aBusinessLogic/database/edit/SetPassword.cs b/src/Kp2aBusinessLogic/database/edit/SetPassword.cs index 044a5f18..ba2753f4 100644 --- a/src/Kp2aBusinessLogic/database/edit/SetPassword.cs +++ b/src/Kp2aBusinessLogic/database/edit/SetPassword.cs @@ -28,20 +28,18 @@ namespace keepass2android private readonly String _keyfile; private readonly IKp2aApp _app; private readonly bool _dontSave; - private readonly Activity _ctx; - public SetPassword(Activity ctx, IKp2aApp app, String password, String keyfile, OnOperationFinishedHandler operationFinishedHandler): base(ctx, operationFinishedHandler) { - _ctx = ctx; + public SetPassword(IKp2aApp app, String password, String keyfile, OnOperationFinishedHandler operationFinishedHandler): base(app, operationFinishedHandler) { + _app = app; _password = password; _keyfile = keyfile; _dontSave = false; } - public SetPassword(Activity ctx, IKp2aApp app, String password, String keyfile, OnOperationFinishedHandler operationFinishedHandler, bool dontSave) - : base(ctx, operationFinishedHandler) + public SetPassword(IKp2aApp app, String password, String keyfile, OnOperationFinishedHandler operationFinishedHandler, bool dontSave) + : base(app, operationFinishedHandler) { - _ctx = ctx; _app = app; _password = password; _keyfile = keyfile; @@ -73,8 +71,8 @@ namespace keepass2android pm.MasterKey = newKey; // Save Database - _operationFinishedHandler = new AfterSave(ActiveContext, previousKey, previousMasterKeyChanged, pm, operationFinishedHandler); - SaveDb save = new SaveDb(_ctx, _app, _app.CurrentDb, operationFinishedHandler, _dontSave); + _operationFinishedHandler = new AfterSave(_app, previousKey, previousMasterKeyChanged, pm, operationFinishedHandler); + SaveDb save = new SaveDb(_app, _app.CurrentDb, operationFinishedHandler, _dontSave); save.SetStatusLogger(StatusLogger); save.Run(); } @@ -84,7 +82,7 @@ namespace keepass2android private readonly DateTime _previousKeyChanged; private readonly PwDatabase _db; - public AfterSave(Context context, CompositeKey backup, DateTime previousKeyChanged, PwDatabase db, OnOperationFinishedHandler operationFinishedHandler): base(context, operationFinishedHandler) { + public AfterSave(IActiveContextProvider activeContextProvider, CompositeKey backup, DateTime previousKeyChanged, PwDatabase db, OnOperationFinishedHandler operationFinishedHandler): base(activeContextProvider, operationFinishedHandler) { _previousKeyChanged = previousKeyChanged; _backup = backup; _db = db; diff --git a/src/Kp2aBusinessLogic/database/edit/UpdateEntry.cs b/src/Kp2aBusinessLogic/database/edit/UpdateEntry.cs index 58dbc417..28e31966 100644 --- a/src/Kp2aBusinessLogic/database/edit/UpdateEntry.cs +++ b/src/Kp2aBusinessLogic/database/edit/UpdateEntry.cs @@ -24,19 +24,17 @@ namespace keepass2android public class UpdateEntry : OperationWithFinishHandler { private readonly IKp2aApp _app; - private readonly Activity _ctx; - - public UpdateEntry(Activity ctx, IKp2aApp app, PwEntry oldE, PwEntry newE, OnOperationFinishedHandler operationFinishedHandler):base(ctx, operationFinishedHandler) { - _ctx = ctx; - _app = app; - _operationFinishedHandler = new AfterUpdate(ctx, oldE, newE, app, operationFinishedHandler); + public UpdateEntry(IKp2aApp app, PwEntry oldE, PwEntry newE, OnOperationFinishedHandler operationFinishedHandler):base(app, operationFinishedHandler) { + _app = app; + + _operationFinishedHandler = new AfterUpdate( oldE, newE, app, operationFinishedHandler); } public override void Run() { // Commit to disk - SaveDb save = new SaveDb(_ctx, _app, _app.CurrentDb, operationFinishedHandler); + SaveDb save = new SaveDb(_app, _app.CurrentDb, operationFinishedHandler); save.SetStatusLogger(StatusLogger); save.Run(); } @@ -46,7 +44,7 @@ namespace keepass2android private readonly PwEntry _updatedEntry; private readonly IKp2aApp _app; - public AfterUpdate(Activity activity, PwEntry backup, PwEntry updatedEntry, IKp2aApp app, OnOperationFinishedHandler operationFinishedHandler):base(activity, operationFinishedHandler) { + public AfterUpdate(PwEntry backup, PwEntry updatedEntry, IKp2aApp app, OnOperationFinishedHandler operationFinishedHandler):base(app, operationFinishedHandler) { _backup = backup; _updatedEntry = updatedEntry; _app = app; diff --git a/src/keepass2android-app/ConfigureChildDatabasesActivity.cs b/src/keepass2android-app/ConfigureChildDatabasesActivity.cs index 1bdae2b4..1f5bc6a2 100644 --- a/src/keepass2android-app/ConfigureChildDatabasesActivity.cs +++ b/src/keepass2android-app/ConfigureChildDatabasesActivity.cs @@ -228,9 +228,9 @@ namespace keepass2android newEntry.SetUuid(new PwUuid(true), true); // Create new UUID string strTitle = newEntry.Strings.ReadSafe(PwDefs.TitleField); newEntry.Strings.Set(PwDefs.TitleField, new ProtectedString(false, strTitle + " (" + Android.OS.Build.Model + ")")); - var addTask = new AddEntry(this, App.Kp2a.CurrentDb, App.Kp2a, newEntry,item.Entry.ParentGroup,new ActionOnOperationFinished(this, (success, message, activity) => ((ConfigureChildDatabasesActivity)activity).Update())); + var addTask = new AddEntry( App.Kp2a.CurrentDb, App.Kp2a, newEntry,item.Entry.ParentGroup,new ActionOnOperationFinished(App.Kp2a, (success, message, activity) => ((ConfigureChildDatabasesActivity)activity).Update())); - BlockingOperationRunner pt = new BlockingOperationRunner(App.Kp2a, this, addTask); + BlockingOperationRunner pt = new BlockingOperationRunner(App.Kp2a, addTask); pt.Run(); } @@ -260,9 +260,9 @@ namespace keepass2android private void Save(AutoExecItem item) { - var addTask = new SaveDb(this, App.Kp2a, App.Kp2a.FindDatabaseForElement(item.Entry), new ActionOnOperationFinished(this, (success, message, activity) => ((ConfigureChildDatabasesActivity)activity).Update())); + var addTask = new SaveDb(App.Kp2a, App.Kp2a.FindDatabaseForElement(item.Entry), new ActionOnOperationFinished(App.Kp2a, (success, message, activity) => ((ConfigureChildDatabasesActivity)activity).Update())); - BlockingOperationRunner pt = new BlockingOperationRunner(App.Kp2a, this, addTask); + BlockingOperationRunner pt = new BlockingOperationRunner(App.Kp2a, addTask); pt.Run(); } @@ -343,7 +343,7 @@ namespace keepass2android } if (autoOpenGroup == null) { - AddGroup addGroupTask = AddGroup.GetInstance(this, App.Kp2a, "AutoOpen", 1, null, rootGroup, null, true); + AddGroup addGroupTask = AddGroup.GetInstance(App.Kp2a, "AutoOpen", 1, null, rootGroup, null, true); addGroupTask.Run(); autoOpenGroup = addGroupTask.Group; } @@ -367,9 +367,9 @@ namespace keepass2android {KeeAutoExecExt.ThisDeviceId, true} }))); - var addTask = new AddEntry(this, db, App.Kp2a, newEntry, autoOpenGroup, new ActionOnOperationFinished(this, (success, message, activity) => (activity as ConfigureChildDatabasesActivity)?.Update())); + var addTask = new AddEntry( db, App.Kp2a, newEntry, autoOpenGroup, new ActionOnOperationFinished(App.Kp2a, (success, message, activity) => (activity as ConfigureChildDatabasesActivity)?.Update())); - BlockingOperationRunner pt = new BlockingOperationRunner(App.Kp2a, this, addTask); + BlockingOperationRunner pt = new BlockingOperationRunner(App.Kp2a, addTask); pt.Run(); } diff --git a/src/keepass2android-app/CreateDatabaseActivity.cs b/src/keepass2android-app/CreateDatabaseActivity.cs index a6f61c95..d1d85df4 100644 --- a/src/keepass2android-app/CreateDatabaseActivity.cs +++ b/src/keepass2android-app/CreateDatabaseActivity.cs @@ -213,10 +213,9 @@ namespace keepass2android } // Create the new database - CreateDb create = new CreateDb(App.Kp2a, this, _ioc, new LaunchGroupActivity(_ioc, this), false, newKey, makeCurrent); + CreateDb create = new CreateDb(App.Kp2a, this, _ioc, new LaunchGroupActivity(_ioc, App.Kp2a, this), false, newKey, makeCurrent); BlockingOperationRunner createTask = new BlockingOperationRunner( - App.Kp2a, - this, create); + App.Kp2a, create); createTask.Run(); } @@ -403,14 +402,14 @@ namespace keepass2android private class LaunchGroupActivity : FileOnFinish { - readonly CreateDatabaseActivity _activity; private readonly IOConnectionInfo _ioc; + private readonly CreateDatabaseActivity _activity; - public LaunchGroupActivity(IOConnectionInfo ioc, CreateDatabaseActivity activity) - : base(activity, null) + public LaunchGroupActivity(IOConnectionInfo ioc, IKp2aApp app, CreateDatabaseActivity activity) + : base(app, null) { - _activity = activity; - _ioc = ioc; + _activity = activity; + _ioc = ioc; } public override void Run() @@ -420,7 +419,7 @@ namespace keepass2android // Update the ongoing notification App.Kp2a.UpdateOngoingNotification(); - if (PreferenceManager.GetDefaultSharedPreferences(_activity).GetBoolean(_activity.GetString(Resource.String.RememberRecentFiles_key), _activity.Resources.GetBoolean(Resource.Boolean.RememberRecentFiles_default))) + if (PreferenceManager.GetDefaultSharedPreferences(App.Context).GetBoolean(App.Context.GetString(Resource.String.RememberRecentFiles_key), App.Context.Resources.GetBoolean(Resource.Boolean.RememberRecentFiles_default))) { // Add to recent files FileDbHelper dbHelper = App.Kp2a.FileDbHelper; diff --git a/src/keepass2android-app/CreateNewFilename.cs b/src/keepass2android-app/CreateNewFilename.cs index 1700a7b2..7882f47d 100644 --- a/src/keepass2android-app/CreateNewFilename.cs +++ b/src/keepass2android-app/CreateNewFilename.cs @@ -8,8 +8,8 @@ namespace keepass2android { private readonly string _filename; - public CreateNewFilename(Activity activity, OnOperationFinishedHandler operationFinishedHandler, string filename) - : base(activity,operationFinishedHandler) + public CreateNewFilename(IKp2aApp app, OnOperationFinishedHandler operationFinishedHandler, string filename) + : base(app,operationFinishedHandler) { _filename = filename; } diff --git a/src/keepass2android-app/EntryActivity.cs b/src/keepass2android-app/EntryActivity.cs index 5f722475..fdd67d21 100644 --- a/src/keepass2android-app/EntryActivity.cs +++ b/src/keepass2android-app/EntryActivity.cs @@ -76,13 +76,13 @@ namespace keepass2android protected override void SaveFile(IOConnectionInfo ioc) { - var task = new EntryActivity.WriteBinaryTask(_activity, App.Kp2a, new ActionOnOperationFinished(_activity, (success, message, activity) => + var task = new EntryActivity.WriteBinaryTask(App.Kp2a, new ActionOnOperationFinished(App.Kp2a, (success, message, activity) => { if (!success) App.Kp2a.ShowMessage(activity, message, MessageSeverity.Error); } ), ((EntryActivity)_activity).Entry.Binaries.Get(_binaryToSave), ioc); - BlockingOperationRunner pt = new BlockingOperationRunner(App.Kp2a, _activity, task); + BlockingOperationRunner pt = new BlockingOperationRunner(App.Kp2a, task); pt.Run(); } @@ -482,8 +482,8 @@ namespace keepass2android Entry.Expires = true; Entry.Touch(true); RequiresRefresh(); - UpdateEntry update = new UpdateEntry(this, App.Kp2a, backupEntry, Entry, null); - BlockingOperationRunner pt = new BlockingOperationRunner(App.Kp2a, this, update); + UpdateEntry update = new UpdateEntry(App.Kp2a, backupEntry, Entry, null); + BlockingOperationRunner pt = new BlockingOperationRunner(App.Kp2a, update); pt.Run(); } FillData(); @@ -526,7 +526,7 @@ namespace keepass2android App.Kp2a.DirtyGroups.Add(parent); } - var saveTask = new SaveDb(this, App.Kp2a, App.Kp2a.FindDatabaseForElement(Entry), new ActionOnOperationFinished(this, (success, message, context) => + var saveTask = new SaveDb( App.Kp2a, App.Kp2a.FindDatabaseForElement(Entry), new ActionOnOperationFinished(App.Kp2a, (success, message, context) => { if (context is Activity activity) { @@ -536,7 +536,7 @@ namespace keepass2android })); - BlockingOperationRunner pt = new BlockingOperationRunner(App.Kp2a, this, saveTask); + BlockingOperationRunner pt = new BlockingOperationRunner(App.Kp2a, saveTask); pt.Run(); } @@ -1271,7 +1271,7 @@ namespace keepass2android private readonly ProtectedBinary _data; private IOConnectionInfo _targetIoc; - public WriteBinaryTask(Activity activity, IKp2aApp app, OnOperationFinishedHandler onOperationFinishedHandler, ProtectedBinary data, IOConnectionInfo targetIoc) : base(activity, onOperationFinishedHandler) + public WriteBinaryTask(IKp2aApp app, OnOperationFinishedHandler onOperationFinishedHandler, ProtectedBinary data, IOConnectionInfo targetIoc) : base(app, onOperationFinishedHandler) { _app = app; _data = data; @@ -1445,8 +1445,8 @@ namespace keepass2android Finish(); return true; case Resource.Id.menu_delete: - DeleteEntry task = new DeleteEntry(this, App.Kp2a, Entry, - new ActionOnOperationFinished(this, (success, message, activity) => { if (success) { RequiresRefresh(); Finish();}})); + DeleteEntry task = new DeleteEntry(App.Kp2a, Entry, + new ActionOnOperationFinished(App.Kp2a, (success, message, activity) => { if (success) { RequiresRefresh(); Finish();}})); task.Start(); break; case Resource.Id.menu_toggle_pass: @@ -1509,16 +1509,16 @@ namespace keepass2android //save the entry: - ActionOnOperationFinished closeOrShowError = new ActionOnOperationFinished(this, (success, message, activity) => + ActionOnOperationFinished closeOrShowError = new ActionOnOperationFinished(App.Kp2a, (success, message, activity) => { OnOperationFinishedHandler.DisplayMessage(this, message, true); finishAction((EntryActivity)activity); }); - OperationWithFinishHandler runnable = new UpdateEntry(this, App.Kp2a, initialEntry, newEntry, closeOrShowError); + OperationWithFinishHandler runnable = new UpdateEntry(App.Kp2a, initialEntry, newEntry, closeOrShowError); - BlockingOperationRunner pt = new BlockingOperationRunner(App.Kp2a, this, runnable); + BlockingOperationRunner pt = new BlockingOperationRunner(App.Kp2a, runnable); pt.Run(); } diff --git a/src/keepass2android-app/EntryEditActivity.cs b/src/keepass2android-app/EntryEditActivity.cs index d5009da7..dc1d1e05 100644 --- a/src/keepass2android-app/EntryEditActivity.cs +++ b/src/keepass2android-app/EntryEditActivity.cs @@ -521,7 +521,7 @@ namespace keepass2android OperationWithFinishHandler runnable; - ActionOnOperationFinished closeOrShowError = new ActionOnOperationFinished(this, (success, message, context) => { + ActionOnOperationFinished closeOrShowError = new ActionOnOperationFinished(App.Kp2a, (success, message, context) => { if (success) { (context as Activity)?.Finish(); @@ -536,18 +536,18 @@ namespace keepass2android closeOrShowError.AllowInactiveActivity = true; - ActionOnOperationFinished afterAddEntry = new ActionOnOperationFinished(this, (success, message, activity) => + ActionOnOperationFinished afterAddEntry = new ActionOnOperationFinished(App.Kp2a, (success, message, activity) => { if (success && activity is EntryEditActivity entryEditActivity) AppTask.AfterAddNewEntry(entryEditActivity, newEntry); },closeOrShowError); if ( State.IsNew ) { - runnable = AddEntry.GetInstance(this, App.Kp2a, newEntry, State.ParentGroup, afterAddEntry, db); + runnable = AddEntry.GetInstance(App.Kp2a, newEntry, State.ParentGroup, afterAddEntry, db); } else { - runnable = new UpdateEntry(this, App.Kp2a, initialEntry, newEntry, closeOrShowError); + runnable = new UpdateEntry(App.Kp2a, initialEntry, newEntry, closeOrShowError); } - BlockingOperationRunner pt = new BlockingOperationRunner(App.Kp2a, act, runnable); + BlockingOperationRunner pt = new BlockingOperationRunner(App.Kp2a, runnable); pt.Run(); diff --git a/src/keepass2android-app/ExportDatabaseActivity.cs b/src/keepass2android-app/ExportDatabaseActivity.cs index 99fabcdc..1013861c 100644 --- a/src/keepass2android-app/ExportDatabaseActivity.cs +++ b/src/keepass2android-app/ExportDatabaseActivity.cs @@ -26,16 +26,16 @@ namespace keepass2android protected override void SaveFile(IOConnectionInfo ioc) { - var exportDb = new ExportDatabaseActivity.ExportDb(_activity, App.Kp2a, new ActionOnOperationFinished(_activity, (success, message, context) => + var exportDb = new ExportDatabaseActivity.ExportDb(App.Kp2a, new ActionOnOperationFinished(App.Kp2a, (success, message, context) => { if (!success) - App.Kp2a.ShowMessage(context, message, MessageSeverity.Error); + App.Kp2a.ShowMessage(context, message, MessageSeverity.Error); else - App.Kp2a.ShowMessage(context, _activity.GetString(Resource.String.export_database_successful), MessageSeverity.Info); + App.Kp2a.ShowMessage(context, _activity.GetString(Resource.String.export_database_successful), MessageSeverity.Info); (context as Activity)?.Finish(); } ), _ffp, ioc); - BlockingOperationRunner pt = new BlockingOperationRunner(App.Kp2a, _activity, exportDb); + BlockingOperationRunner pt = new BlockingOperationRunner(App.Kp2a, exportDb); pt.Run(); } @@ -99,7 +99,7 @@ namespace keepass2android private readonly FileFormatProvider _fileFormat; private IOConnectionInfo _targetIoc; - public ExportDb(Activity activity, IKp2aApp app, OnOperationFinishedHandler onOperationFinishedHandler, FileFormatProvider fileFormat, IOConnectionInfo targetIoc) : base(activity, onOperationFinishedHandler) + public ExportDb(IKp2aApp app, OnOperationFinishedHandler onOperationFinishedHandler, FileFormatProvider fileFormat, IOConnectionInfo targetIoc) : base(app, onOperationFinishedHandler) { _app = app; this._fileFormat = fileFormat; diff --git a/src/keepass2android-app/FileSaveProcessManager.cs b/src/keepass2android-app/FileSaveProcessManager.cs index b99fabb7..413474fe 100644 --- a/src/keepass2android-app/FileSaveProcessManager.cs +++ b/src/keepass2android-app/FileSaveProcessManager.cs @@ -103,7 +103,7 @@ namespace keepass2android } else { - var task = new CreateNewFilename(_activity, new ActionOnOperationFinished(_activity, (success, messageOrFilename, activity) => + var task = new CreateNewFilename(App.Kp2a, new ActionOnOperationFinished(App.Kp2a, (success, messageOrFilename, activity) => { if (!success) { @@ -115,7 +115,7 @@ namespace keepass2android }), filename); - new BlockingOperationRunner(App.Kp2a, _activity, task).Run(); + new BlockingOperationRunner(App.Kp2a, task).Run(); } return true; diff --git a/src/keepass2android-app/FileSelectHelper.cs b/src/keepass2android-app/FileSelectHelper.cs index 6898f853..4f059a14 100644 --- a/src/keepass2android-app/FileSelectHelper.cs +++ b/src/keepass2android-app/FileSelectHelper.cs @@ -781,7 +781,7 @@ namespace keepass2android } else { - var task = new CreateNewFilename(activity, new ActionOnOperationFinished(activity, (success, messageOrFilename, newActivity) => + var task = new CreateNewFilename(App.Kp2a, new ActionOnOperationFinished(App.Kp2a, (success, messageOrFilename, newActivity) => { if (!success) { @@ -793,7 +793,7 @@ namespace keepass2android }), filename); - new BlockingOperationRunner(App.Kp2a, activity, task).Run(); + new BlockingOperationRunner(App.Kp2a, task).Run(); } } diff --git a/src/keepass2android-app/GroupActivity.cs b/src/keepass2android-app/GroupActivity.cs index 165323b7..d0c7d5dd 100644 --- a/src/keepass2android-app/GroupActivity.cs +++ b/src/keepass2android-app/GroupActivity.cs @@ -223,8 +223,8 @@ namespace keepass2android (o, args) => { //yes - BlockingOperationRunner pt = new BlockingOperationRunner(App.Kp2a, this, - new AddTemplateEntries(this, App.Kp2a, new ActionOnOperationFinished(this, + BlockingOperationRunner pt = new BlockingOperationRunner(App.Kp2a, + new AddTemplateEntries(App.Kp2a, new ActionOnOperationFinished(App.Kp2a, (success, message, activity) => ((GroupActivity)activity)?.StartAddEntry()))); pt.Run(); }, @@ -235,7 +235,7 @@ namespace keepass2android edit.Commit(); //no StartAddEntry(); - },null, this); + },null); } else diff --git a/src/keepass2android-app/GroupBaseActivity.cs b/src/keepass2android-app/GroupBaseActivity.cs index ce21e337..365df0d0 100644 --- a/src/keepass2android-app/GroupBaseActivity.cs +++ b/src/keepass2android-app/GroupBaseActivity.cs @@ -206,15 +206,15 @@ namespace keepass2android OperationWithFinishHandler task; if (strGroupUuid == null) { - task = AddGroup.GetInstance(this, App.Kp2a, groupName, groupIconId, groupCustomIconId, Group, new RefreshTask(handler, this), false); + task = AddGroup.GetInstance(App.Kp2a, groupName, groupIconId, groupCustomIconId, Group, new RefreshTask(handler, this), false); } else { PwUuid groupUuid = new PwUuid(MemUtil.HexStringToByteArray(strGroupUuid)); - task = new EditGroup(this, App.Kp2a, groupName, (PwIcon)groupIconId, groupCustomIconId, App.Kp2a.FindGroup(groupUuid), + task = new EditGroup(App.Kp2a, groupName, (PwIcon)groupIconId, groupCustomIconId, App.Kp2a.FindGroup(groupUuid), new RefreshTask(handler, this)); } - BlockingOperationRunner pt = new BlockingOperationRunner(App.Kp2a, act, task); + BlockingOperationRunner pt = new BlockingOperationRunner(App.Kp2a, task); pt.Run(); } @@ -925,14 +925,14 @@ namespace keepass2android - var moveElement = new MoveElements(elementsToMove.ToList(), Group, this, App.Kp2a, new ActionOnOperationFinished(this, + var moveElement = new MoveElements(elementsToMove.ToList(), Group, App.Kp2a, new ActionOnOperationFinished(App.Kp2a, (success, message, activity) => { ((GroupBaseActivity)activity)?.StopMovingElements(); if (!String.IsNullOrEmpty(message)) App.Kp2a.ShowMessage(activity, message, MessageSeverity.Error); })); - var progressTask = new BlockingOperationRunner(App.Kp2a, this, moveElement); + var progressTask = new BlockingOperationRunner(App.Kp2a, moveElement); progressTask.Run(); } @@ -1297,7 +1297,7 @@ namespace keepass2android public class RefreshTask : OnOperationFinishedHandler { public RefreshTask(Handler handler, GroupBaseActivity act) - : base(act, handler) + : base(App.Kp2a, handler) { } @@ -1316,7 +1316,7 @@ namespace keepass2android public class AfterDeleteGroup : OnOperationFinishedHandler { public AfterDeleteGroup(Handler handler, GroupBaseActivity act) - : base(act, handler) + : base(App.Kp2a, handler) { } @@ -1492,10 +1492,10 @@ namespace keepass2android break; case Resource.Id.menu_copy: - var copyTask = new CopyEntry((GroupBaseActivity)Activity, App.Kp2a, (PwEntry)checkedItems.First(), + var copyTask = new CopyEntry(App.Kp2a, (PwEntry)checkedItems.First(), new GroupBaseActivity.RefreshTask(handler, ((GroupBaseActivity)Activity)), App.Kp2a.CurrentDb); - BlockingOperationRunner pt = new BlockingOperationRunner(App.Kp2a, Activity, copyTask); + BlockingOperationRunner pt = new BlockingOperationRunner(App.Kp2a, copyTask); pt.Run(); break; @@ -1684,7 +1684,7 @@ namespace keepass2android return; } new DeleteMultipleItemsFromOneDatabase(activity, itemsForDatabases[dbIndex].Key, - itemsForDatabases[dbIndex].Value, new ActionOnOperationFinished(activeActivity, (b, s, activity1) => action(b, s, activity1)), app) + itemsForDatabases[dbIndex].Value, new ActionOnOperationFinished(App.Kp2a, (b, s, activity1) => action(b, s, activity1)), app) .Start(); } else @@ -1694,7 +1694,7 @@ namespace keepass2android }; new DeleteMultipleItemsFromOneDatabase(activity, itemsForDatabases[dbIndex].Key, - itemsForDatabases[dbIndex].Value, new ActionOnOperationFinished(activity, (b, s, activity1) => action(b, s, activity1)), app) + itemsForDatabases[dbIndex].Value, new ActionOnOperationFinished(App.Kp2a, (b, s, activity1) => action(b, s, activity1)), app) .Start(); } diff --git a/src/keepass2android-app/LifecycleAwareActivity.cs b/src/keepass2android-app/LifecycleAwareActivity.cs index 73460042..68b75b57 100644 --- a/src/keepass2android-app/LifecycleAwareActivity.cs +++ b/src/keepass2android-app/LifecycleAwareActivity.cs @@ -104,8 +104,10 @@ namespace keepass2android protected override void OnStart() { + App.Kp2a.ActiveContext = this; BlockingOperationRunner.SetNewActiveActivity(this); - BackgroundOperationRunner.Instance.SetNewActiveContext(this, App.Kp2a); + BackgroundOperationRunner.Instance.SetNewActiveContext( App.Kp2a); + base.OnStart(); Kp2aLog.Log(ClassName + ".OnStart" + " " + ID); } diff --git a/src/keepass2android-app/PasswordActivity.cs b/src/keepass2android-app/PasswordActivity.cs index 533a9dae..a9faf3c1 100644 --- a/src/keepass2android-app/PasswordActivity.cs +++ b/src/keepass2android-app/PasswordActivity.cs @@ -1447,7 +1447,7 @@ namespace keepass2android : new LoadDb(this, App.Kp2a, _ioConnection, _loadDbFileTask, compositeKey, GetKeyProviderString(), onOperationFinishedHandler,true, _makeCurrent); _loadDbFileTask = null; // prevent accidental re-use - new BlockingOperationRunner(App.Kp2a, this, task).Run(); + new BlockingOperationRunner(App.Kp2a, task).Run(); } catch (Exception e) { @@ -1889,7 +1889,7 @@ namespace keepass2android LoadDb task = new LoadDb(this, App.Kp2a, _ioConnection, _loadDbFileTask, compositeKeyForImmediateLoad, GetKeyProviderString(), onOperationFinishedHandler, false, _makeCurrent); _loadDbFileTask = null; // prevent accidental re-use - new BlockingOperationRunner(App.Kp2a, this, task).Run(); + new BlockingOperationRunner(App.Kp2a, task).Run(); compositeKeyForImmediateLoad = null; //don't reuse or keep in memory } @@ -2135,7 +2135,7 @@ namespace keepass2android readonly PasswordActivity _act; private readonly IOConnectionInfo _ioConnection; - public AfterLoad(Handler handler, PasswordActivity act, IOConnectionInfo ioConnection):base(act, handler) + public AfterLoad(Handler handler, PasswordActivity act, IOConnectionInfo ioConnection):base(App.Kp2a, handler) { _act = act; _ioConnection = ioConnection; diff --git a/src/keepass2android-app/SetPasswordDialog.cs b/src/keepass2android-app/SetPasswordDialog.cs index 8879a39d..51b9e159 100644 --- a/src/keepass2android-app/SetPasswordDialog.cs +++ b/src/keepass2android-app/SetPasswordDialog.cs @@ -72,8 +72,8 @@ namespace keepass2android } - SetPassword sp = new SetPassword(_activity, App.Kp2a, pass, keyfile, new AfterSave(_activity, this, null, new Handler())); - BlockingOperationRunner pt = new BlockingOperationRunner(App.Kp2a, _activity, sp); + SetPassword sp = new SetPassword(App.Kp2a, pass, keyfile, new AfterSave(_activity, this, null, new Handler())); + BlockingOperationRunner pt = new BlockingOperationRunner(App.Kp2a, sp); pt.Run(); }; @@ -93,7 +93,7 @@ namespace keepass2android readonly SetPasswordDialog _dlg; - public AfterSave(Activity activity, SetPasswordDialog dlg, FileOnFinish operationFinishedHandler, Handler handler): base(activity, operationFinishedHandler, handler) { + public AfterSave(Activity activity, SetPasswordDialog dlg, FileOnFinish operationFinishedHandler, Handler handler): base(App.Kp2a, operationFinishedHandler, handler) { _operationFinishedHandler = operationFinishedHandler; _dlg = dlg; } diff --git a/src/keepass2android-app/SyncUtil.cs b/src/keepass2android-app/SyncUtil.cs index 7434d114..2e30e47f 100644 --- a/src/keepass2android-app/SyncUtil.cs +++ b/src/keepass2android-app/SyncUtil.cs @@ -21,7 +21,7 @@ namespace keepass2android private readonly IOConnectionInfo _ioc; public SyncOtpAuxFile(Activity activity, IOConnectionInfo ioc) - : base(activity, null) + : base(App.Kp2a, null) { _ioc = ioc; } @@ -54,7 +54,7 @@ namespace keepass2android { var filestorage = App.Kp2a.GetFileStorage(App.Kp2a.CurrentDb.Ioc); OperationWithFinishHandler task; - OnOperationFinishedHandler onOperationFinishedHandler = new ActionOnOperationFinished(_activity, (success, message, activity) => + OnOperationFinishedHandler onOperationFinishedHandler = new ActionOnOperationFinished(App.Kp2a, (success, message, activity) => { new Handler(Looper.MainLooper).Post(() => { @@ -71,7 +71,7 @@ namespace keepass2android { var task2 = new SyncOtpAuxFile(_activity, App.Kp2a.CurrentDb.OtpAuxFileIoc); - BackgroundOperationRunner.Instance.Run(_activity, App.Kp2a, task2); + BackgroundOperationRunner.Instance.Run(App.Kp2a, task2); } }); @@ -79,15 +79,15 @@ namespace keepass2android if (filestorage is CachingFileStorage) { - task = new SynchronizeCachedDatabase(_activity, App.Kp2a, onOperationFinishedHandler); + task = new SynchronizeCachedDatabase(App.Kp2a, onOperationFinishedHandler); } else { //TODO do we want this to run in the background? - task = new CheckDatabaseForChanges(_activity, App.Kp2a, onOperationFinishedHandler); + task = new CheckDatabaseForChanges( App.Kp2a, onOperationFinishedHandler); } - BackgroundOperationRunner.Instance.Run(_activity, App.Kp2a, task); + BackgroundOperationRunner.Instance.Run(App.Kp2a, task); } } diff --git a/src/keepass2android-app/app/App.cs b/src/keepass2android-app/app/App.cs index ecf6fd10..7dc66fd7 100644 --- a/src/keepass2android-app/app/App.cs +++ b/src/keepass2android-app/app/App.cs @@ -576,20 +576,19 @@ namespace keepass2android return LocaleManager.LocalizedAppContext.Resources.GetDrawable((int)field.GetValue(null)); } - public void AskYesNoCancel(UiStringKey titleKey, UiStringKey messageKey, EventHandler yesHandler, EventHandler noHandler, EventHandler cancelHandler, Context ctx, string messageSuffix) + public void AskYesNoCancel(UiStringKey titleKey, UiStringKey messageKey, EventHandler yesHandler, EventHandler noHandler, EventHandler cancelHandler, string messageSuffix) { AskYesNoCancel(titleKey, messageKey, UiStringKey.yes, UiStringKey.no, - yesHandler, noHandler, cancelHandler, ctx, messageSuffix); + yesHandler, noHandler, cancelHandler, messageSuffix); } public void AskYesNoCancel(UiStringKey titleKey, UiStringKey messageKey, UiStringKey yesString, UiStringKey noString, EventHandler yesHandler, EventHandler noHandler, - EventHandler cancelHandler, - Context ctx, string messageSuffix = "") + EventHandler cancelHandler, string messageSuffix = "") { - AskYesNoCancel(titleKey, messageKey, yesString, noString, yesHandler, noHandler, cancelHandler, null, ctx, messageSuffix); + AskYesNoCancel(titleKey, messageKey, yesString, noString, yesHandler, noHandler, cancelHandler, null, messageSuffix); } public void AskYesNoCancel(UiStringKey titleKey, UiStringKey messageKey, @@ -597,13 +596,12 @@ namespace keepass2android EventHandler yesHandler, EventHandler noHandler, EventHandler cancelHandler, - EventHandler dismissHandler, - Context ctx, string messageSuffix = "") + EventHandler dismissHandler,string messageSuffix = "") { Handler handler = new Handler(Looper.MainLooper); handler.Post(() => { - MaterialAlertDialogBuilder builder = new MaterialAlertDialogBuilder(ctx); + MaterialAlertDialogBuilder builder = new MaterialAlertDialogBuilder(ActiveContext); builder.SetTitle(GetResourceString(titleKey)); builder.SetMessage(GetResourceString(messageKey) + (messageSuffix != "" ? " " + messageSuffix : "")); @@ -638,7 +636,7 @@ namespace keepass2android cancelHandler.Invoke(sender, args); }; - cancelText = ctx.GetString(Android.Resource.String.Cancel); + cancelText = App.Context.GetString(Android.Resource.String.Cancel); builder.SetNeutralButton(cancelText, cancelHandlerWithShow); } @@ -653,9 +651,17 @@ namespace keepass2android } OnUserInputDialogShow(); - dialog.Show(); + try + { + dialog.Show(); + } + catch (Exception e) + { + Kp2aLog.LogUnexpectedError(e); + } - if (yesText.Length + noText.Length + cancelText.Length >= 20) + + if (yesText.Length + noText.Length + cancelText.Length >= 20) { try { @@ -1362,6 +1368,8 @@ namespace keepass2android } } + + public Context ActiveContext { get; set; } } @@ -1432,7 +1440,10 @@ namespace keepass2android public void OnAppBackgrounded() { Kp2aLog.Log("Going to background"); - BackgroundOperationRunner.Instance.SetNewActiveContext(null, Kp2a); + Kp2a.ActiveContext = null; + BackgroundOperationRunner.Instance.SetNewActiveContext( Kp2a); + + } [Lifecycle.Event.OnStart] diff --git a/src/keepass2android-app/services/BackgroundSyncService.cs b/src/keepass2android-app/services/BackgroundSyncService.cs index 6c8be040..f7f1a0b5 100644 --- a/src/keepass2android-app/services/BackgroundSyncService.cs +++ b/src/keepass2android-app/services/BackgroundSyncService.cs @@ -51,7 +51,8 @@ namespace keepass2android.services _cts = new CancellationTokenSource(); CreateNotificationChannel(); StartForeground(NotificationId, BuildNotification()); - BackgroundOperationRunner.Instance.SetNewActiveContext(this, App.Kp2a); + App.Kp2a.ActiveContext = this; + BackgroundOperationRunner.Instance.SetNewActiveContext(App.Kp2a); return StartCommandResult.Sticky; } catch (Exception ex) diff --git a/src/keepass2android-app/settings/AppSettingsActivity.cs b/src/keepass2android-app/settings/AppSettingsActivity.cs index abe45690..14fa4d67 100644 --- a/src/keepass2android-app/settings/AppSettingsActivity.cs +++ b/src/keepass2android-app/settings/AppSettingsActivity.cs @@ -117,7 +117,7 @@ namespace keepass2android var previousUsername = db.KpDatabase.DefaultUserName; db.KpDatabase.DefaultUserName = e.NewValue.ToString(); - SaveDb save = new SaveDb(Activity, App.Kp2a, App.Kp2a.CurrentDb, new ActionOnOperationFinished(Activity, (success, message, activity) => + SaveDb save = new SaveDb(App.Kp2a, App.Kp2a.CurrentDb, new ActionOnOperationFinished(App.Kp2a, (success, message, activity) => { if (!success) { @@ -126,7 +126,7 @@ namespace keepass2android App.Kp2a.ShowMessage(activity, message, MessageSeverity.Error); } })); - BlockingOperationRunner pt = new BlockingOperationRunner(App.Kp2a, Activity, save); + BlockingOperationRunner pt = new BlockingOperationRunner(App.Kp2a, save); pt.Run(); }; } @@ -144,8 +144,8 @@ namespace keepass2android { pref.PreferenceClick += (sender, args) => { - BlockingOperationRunner pt = new BlockingOperationRunner(App.Kp2a, Activity, - new AddTemplateEntries(Activity, App.Kp2a, new ActionOnOperationFinished(Activity, + BlockingOperationRunner pt = new BlockingOperationRunner(App.Kp2a, + new AddTemplateEntries(App.Kp2a, new ActionOnOperationFinished(App.Kp2a, delegate { pref.Enabled = false; @@ -183,7 +183,7 @@ namespace keepass2android String previousName = db.KpDatabase.Name; db.KpDatabase.Name = e.NewValue.ToString(); - SaveDb save = new SaveDb(Activity, App.Kp2a, App.Kp2a.CurrentDb, new ActionOnOperationFinished(Activity, (success, message, activity) => + SaveDb save = new SaveDb(App.Kp2a, App.Kp2a.CurrentDb, new ActionOnOperationFinished(App.Kp2a, (success, message, activity) => { if (!success) { @@ -197,7 +197,7 @@ namespace keepass2android App.Kp2a.UpdateOngoingNotification(); } })); - BlockingOperationRunner pt = new BlockingOperationRunner(App.Kp2a, Activity, save); + BlockingOperationRunner pt = new BlockingOperationRunner(App.Kp2a, save); pt.Run(); }; } @@ -410,7 +410,7 @@ namespace keepass2android var previousCipher = db.KpDatabase.DataCipherUuid; db.KpDatabase.DataCipherUuid = new PwUuid(MemUtil.HexStringToByteArray((string)preferenceChangeEventArgs.NewValue)); - SaveDb save = new SaveDb(Activity, App.Kp2a, App.Kp2a.CurrentDb, new ActionOnOperationFinished(Activity, (success, message, activity) => + SaveDb save = new SaveDb(App.Kp2a, App.Kp2a.CurrentDb, new ActionOnOperationFinished(App.Kp2a, (success, message, activity) => { if (!success) { @@ -421,7 +421,7 @@ namespace keepass2android preferenceChangeEventArgs.Preference.Summary = CipherPool.GlobalPool.GetCipher(db.KpDatabase.DataCipherUuid).DisplayName; })); - BlockingOperationRunner pt = new BlockingOperationRunner(App.Kp2a, Activity, save); + BlockingOperationRunner pt = new BlockingOperationRunner(App.Kp2a, save); pt.Run(); } @@ -1071,7 +1071,7 @@ namespace keepass2android Kp2aLog.Log("--new kdf: " + KdfPool.Get(db.KpDatabase.KdfParameters.KdfUuid) + " " + db.KpDatabase.KdfParameters.KdfUuid.ToHexString()); - SaveDb save = new SaveDb(Activity, App.Kp2a, App.Kp2a.CurrentDb, new ActionOnOperationFinished(Activity, (success, message, activity) => + SaveDb save = new SaveDb(App.Kp2a, App.Kp2a.CurrentDb, new ActionOnOperationFinished(App.Kp2a, (success, message, activity) => { if (!success) { @@ -1082,7 +1082,7 @@ namespace keepass2android UpdateKdfScreen(); })); - BlockingOperationRunner pt = new BlockingOperationRunner(App.Kp2a, Activity, save); + BlockingOperationRunner pt = new BlockingOperationRunner(App.Kp2a, save); pt.Run(); } diff --git a/src/keepass2android-app/settings/ExportKeyfileActivity.cs b/src/keepass2android-app/settings/ExportKeyfileActivity.cs index 8f2fb000..0e3c63ad 100644 --- a/src/keepass2android-app/settings/ExportKeyfileActivity.cs +++ b/src/keepass2android-app/settings/ExportKeyfileActivity.cs @@ -18,8 +18,8 @@ namespace keepass2android private readonly IKp2aApp _app; private IOConnectionInfo _targetIoc; - public ExportKeyfile(Activity activity, IKp2aApp app, OnOperationFinishedHandler onOperationFinishedHandler, IOConnectionInfo targetIoc) : base( - activity, onOperationFinishedHandler) + public ExportKeyfile(IKp2aApp app, OnOperationFinishedHandler onOperationFinishedHandler, IOConnectionInfo targetIoc) : base( + App.Kp2a, onOperationFinishedHandler) { _app = app; _targetIoc = targetIoc; @@ -70,7 +70,7 @@ namespace keepass2android protected override void SaveFile(IOConnectionInfo ioc) { - var exportKeyfile = new ExportKeyfile(_activity, App.Kp2a, new ActionOnOperationFinished(_activity, + var exportKeyfile = new ExportKeyfile(App.Kp2a, new ActionOnOperationFinished(App.Kp2a, (success, message, context) => { if (!success) @@ -81,7 +81,7 @@ namespace keepass2android (context as Activity)?.Finish(); } ), ioc); - BlockingOperationRunner pt = new BlockingOperationRunner(App.Kp2a, _activity, exportKeyfile); + BlockingOperationRunner pt = new BlockingOperationRunner(App.Kp2a, exportKeyfile); pt.Run(); } diff --git a/src/keepass2android-app/settings/RoundsPreference.cs b/src/keepass2android-app/settings/RoundsPreference.cs index e2b2c694..efa18fa8 100644 --- a/src/keepass2android-app/settings/RoundsPreference.cs +++ b/src/keepass2android-app/settings/RoundsPreference.cs @@ -113,8 +113,8 @@ namespace keepass2android.settings ParamValue = paramValue; Handler handler = new Handler(); - SaveDb save = new SaveDb((Activity)Context, App.Kp2a, App.Kp2a.CurrentDb, new AfterSave((Activity)Context, handler, oldValue, this)); - BlockingOperationRunner pt = new BlockingOperationRunner(App.Kp2a, (Activity)Context, save); + SaveDb save = new SaveDb(App.Kp2a, App.Kp2a.CurrentDb, new AfterSave(App.Kp2a, handler, oldValue, this)); + BlockingOperationRunner pt = new BlockingOperationRunner(App.Kp2a, save); pt.Run(); }); db.SetNegativeButton(Android.Resource.String.Cancel, ((sender, args) => { })); @@ -131,13 +131,12 @@ namespace keepass2android.settings private class AfterSave : OnOperationFinishedHandler { private readonly ulong _oldParamValue; - private readonly Context _ctx; - private readonly KdfNumberDialogPreference _pref; + private readonly IKp2aApp _app; + private readonly KdfNumberDialogPreference _pref; - public AfterSave(Activity ctx, Handler handler, ulong oldParamValue, KdfNumberDialogPreference pref):base(ctx, handler) { - - _pref = pref; - _ctx = ctx; + public AfterSave(IKp2aApp app, Handler handler, ulong oldParamValue, KdfNumberDialogPreference pref):base(app, handler) { + _app = app; + _pref = pref; _oldParamValue = oldParamValue; } @@ -148,7 +147,7 @@ namespace keepass2android.settings _pref.OnPreferenceChangeListener.OnPreferenceChange(_pref, null); } } else { - DisplayMessage(_ctx); + DisplayMessage(_app.ActiveContext); _pref.ParamValue = _oldParamValue; }