use ActionInContextInstanceOnOperationFinished where appropriate

This commit is contained in:
Philipp Crocoll
2025-05-27 15:52:58 +02:00
parent 8a1890bc10
commit 35367bb28b
9 changed files with 48 additions and 68 deletions

View File

@@ -54,6 +54,10 @@ namespace keepass2android
}
}
//Action which runs when the contextInstanceId is the active context
// otherwise it is registered as pending action for the context instance.
public class ActionInContextInstanceOnOperationFinished : ActionOnOperationFinished
{
private readonly int _contextInstanceId;

View File

@@ -228,7 +228,7 @@ 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( App.Kp2a.CurrentDb, App.Kp2a, newEntry,item.Entry.ParentGroup,new ActionOnOperationFinished(App.Kp2a, (success, message, context) => (context as ConfigureChildDatabasesActivity)?.Update()));
var addTask = new AddEntry( App.Kp2a.CurrentDb, App.Kp2a, newEntry,item.Entry.ParentGroup,new ActionInContextInstanceOnOperationFinished(ContextInstanceId, App.Kp2a, (success, message, context) => (context as ConfigureChildDatabasesActivity)?.Update()));
BlockingOperationRunner pt = new BlockingOperationRunner(App.Kp2a, addTask);
pt.Run();
@@ -260,7 +260,7 @@ namespace keepass2android
private void Save(AutoExecItem item)
{
var addTask = new SaveDb(App.Kp2a, App.Kp2a.FindDatabaseForElement(item.Entry), new ActionOnOperationFinished(App.Kp2a, (success, message, context) => (context as ConfigureChildDatabasesActivity)?.Update()));
var addTask = new SaveDb(App.Kp2a, App.Kp2a.FindDatabaseForElement(item.Entry), new ActionInContextInstanceOnOperationFinished(ContextInstanceId, App.Kp2a, (success, message, context) => (context as ConfigureChildDatabasesActivity)?.Update()));
BlockingOperationRunner pt = new BlockingOperationRunner(App.Kp2a, addTask);
pt.Run();
@@ -367,7 +367,7 @@ namespace keepass2android
{KeeAutoExecExt.ThisDeviceId, true}
})));
var addTask = new AddEntry( db, App.Kp2a, newEntry, autoOpenGroup, new ActionOnOperationFinished(App.Kp2a, (success, message, context) => (context as ConfigureChildDatabasesActivity)?.Update()));
var addTask = new AddEntry( db, App.Kp2a, newEntry, autoOpenGroup, new ActionInContextInstanceOnOperationFinished(ContextInstanceId, App.Kp2a, (success, message, context) => (context as ConfigureChildDatabasesActivity)?.Update()));
BlockingOperationRunner pt = new BlockingOperationRunner(App.Kp2a, addTask);
pt.Run();

View File

@@ -64,7 +64,7 @@ namespace keepass2android
{
private readonly string _binaryToSave;
public ExportBinaryProcessManager(int requestCode, Activity activity, string key) : base(requestCode, activity)
public ExportBinaryProcessManager(int requestCode, LifecycleAwareActivity activity, string key) : base(requestCode, activity)
{
_binaryToSave = key;
}
@@ -572,7 +572,7 @@ namespace keepass2android
App.Kp2a.DirtyGroups.Add(parent);
}
var saveTask = new SaveDb( App.Kp2a, App.Kp2a.FindDatabaseForElement(Entry), new ActionOnOperationFinished(App.Kp2a, (success, message, context) =>
var saveTask = new SaveDb( App.Kp2a, App.Kp2a.FindDatabaseForElement(Entry), new ActionInContextInstanceOnOperationFinished(ContextInstanceId, App.Kp2a, (success, message, context) =>
{
if (context is Activity activity)
{
@@ -1558,7 +1558,7 @@ namespace keepass2android
//save the entry:
ActionOnOperationFinished closeOrShowError = new ActionOnOperationFinished(App.Kp2a, (success, message, context) =>
ActionOnOperationFinished closeOrShowError = new ActionInContextInstanceOnOperationFinished(ContextInstanceId, App.Kp2a, (success, message, context) =>
{
OnOperationFinishedHandler.DisplayMessage(this, message, true);
finishAction(context as EntryActivity);

View File

@@ -19,14 +19,14 @@ namespace keepass2android
{
private readonly FileFormatProvider _ffp;
public ExportDbProcessManager(int requestCode, Activity activity, FileFormatProvider ffp) : base(requestCode, activity)
public ExportDbProcessManager(int requestCode, LifecycleAwareActivity activity, FileFormatProvider ffp) : base(requestCode, activity)
{
_ffp = ffp;
}
protected override void SaveFile(IOConnectionInfo ioc)
{
var exportDb = new ExportDatabaseActivity.ExportDb(App.Kp2a, new ActionOnOperationFinished(App.Kp2a, (success, message, context) =>
var exportDb = new ExportDatabaseActivity.ExportDb(App.Kp2a, new ActionInContextInstanceOnOperationFinished(_activity.ContextInstanceId, App.Kp2a, (success, message, context) =>
{
if (!success)
App.Kp2a.ShowMessage(context, message, MessageSeverity.Error);

View File

@@ -12,9 +12,9 @@ namespace keepass2android
{
protected readonly int _requestCode;
protected readonly Activity _activity;
protected readonly LifecycleAwareActivity _activity;
public FileSaveProcessManager(int requestCode, Activity activity)
public FileSaveProcessManager(int requestCode, LifecycleAwareActivity activity)
{
_requestCode = requestCode;
_activity = activity;

View File

@@ -224,7 +224,7 @@ namespace keepass2android
{
//yes
BlockingOperationRunner pt = new BlockingOperationRunner(App.Kp2a,
new AddTemplateEntries(App.Kp2a, new ActionOnOperationFinished(App.Kp2a,
new AddTemplateEntries(App.Kp2a, new ActionInContextInstanceOnOperationFinished(ContextInstanceId, App.Kp2a,
(success, message, context) => (context as GroupActivity)?.StartAddEntry())));
pt.Run();
},

View File

@@ -203,17 +203,16 @@ namespace keepass2android
new PwUuid(MemUtil.HexStringToByteArray(data.Extras.GetString(GroupEditActivity.KeyCustomIconId)));
String strGroupUuid = data.Extras.GetString(GroupEditActivity.KeyGroupUuid);
GroupBaseActivity act = this;
Handler handler = new Handler();
OperationWithFinishHandler task;
if (strGroupUuid == null)
{
task = AddGroup.GetInstance(App.Kp2a, groupName, groupIconId, groupCustomIconId, Group, new RefreshTask(handler, this), false);
task = AddGroup.GetInstance(App.Kp2a, groupName, groupIconId, groupCustomIconId, Group, CreateRefreshAction(), false);
}
else
{
PwUuid groupUuid = new PwUuid(MemUtil.HexStringToByteArray(strGroupUuid));
task = new EditGroup(App.Kp2a, groupName, (PwIcon)groupIconId, groupCustomIconId, App.Kp2a.FindGroup(groupUuid),
new RefreshTask(handler, this));
CreateRefreshAction());
}
BlockingOperationRunner pt = new BlockingOperationRunner(App.Kp2a, task);
pt.Run();
@@ -928,7 +927,7 @@ namespace keepass2android
var moveElement = new MoveElements(elementsToMove.ToList(), Group, App.Kp2a, new ActionOnOperationFinished(App.Kp2a,
var moveElement = new MoveElements(elementsToMove.ToList(), Group, App.Kp2a, new ActionInContextInstanceOnOperationFinished(ContextInstanceId, App.Kp2a,
(success, message, context) =>
{
(context as GroupBaseActivity)?.StopMovingElements();
@@ -1304,51 +1303,7 @@ namespace keepass2android
}
public class RefreshTask : OnOperationFinishedHandler
{
public RefreshTask(Handler handler, GroupBaseActivity act)
: base(App.Kp2a, handler)
{
}
public override void Run()
{
if (Success)
{
(ActiveContext as GroupBaseActivity)?.RefreshIfDirty();
}
else
{
DisplayMessage(ActiveContext);
}
}
}
public class AfterDeleteGroup : OnOperationFinishedHandler
{
public AfterDeleteGroup(Handler handler, GroupBaseActivity act)
: base(App.Kp2a, handler)
{
}
public override void Run()
{
if (Success)
{
(ActiveContext as GroupBaseActivity)?.RefreshIfDirty();
}
else
{
Handler.Post(() =>
{
App.Kp2a.ShowMessage(ActiveContext ?? LocaleManager.LocalizedAppContext, "Unrecoverable error: " + Message, MessageSeverity.Error);
});
App.Kp2a.Lock(false);
}
}
}
public bool IsBeingMoved(PwUuid uuid)
{
@@ -1453,6 +1408,27 @@ namespace keepass2android
ListAdapter?.NotifyDataSetChanged();
}
public OnOperationFinishedHandler CreateRefreshAction()
{
return new ActionInContextInstanceOnOperationFinished(
ContextInstanceId, App.Kp2a,
(success, message, context) =>
{
if (success)
{
RunOnUiThread(() =>
{
(context as GroupBaseActivity)?.RefreshIfDirty();
});
}
else
{
App.Kp2a.ShowMessage(context, message, MessageSeverity.Error);
}
}
);
}
}
public class UpdateGroupBaseActivityBroadcastReceiver : BroadcastReceiver
@@ -1533,12 +1509,12 @@ namespace keepass2android
{
return false;
}
Handler handler = new Handler();
switch (item.ItemId)
{
case Resource.Id.menu_delete:
DeleteMultipleItems((GroupBaseActivity)Activity, checkedItems, new GroupBaseActivity.RefreshTask(handler, ((GroupBaseActivity)Activity)), App.Kp2a);
DeleteMultipleItems((GroupBaseActivity)Activity, checkedItems, ((GroupBaseActivity)Activity).CreateRefreshAction(), App.Kp2a);
break;
case Resource.Id.menu_move:
var navMove = new NavigateToFolderAndLaunchMoveElementTask(App.Kp2a.CurrentDb, checkedItems.First().ParentGroup, checkedItems.Select(i => i.Uuid).ToList(), ((GroupBaseActivity)Activity).IsSearchResult);
@@ -1547,7 +1523,7 @@ namespace keepass2android
case Resource.Id.menu_copy:
var copyTask = new CopyEntry(App.Kp2a, (PwEntry)checkedItems.First(),
new GroupBaseActivity.RefreshTask(handler, ((GroupBaseActivity)Activity)), App.Kp2a.CurrentDb);
((GroupBaseActivity)Activity).CreateRefreshAction(), App.Kp2a.CurrentDb);
BlockingOperationRunner pt = new BlockingOperationRunner(App.Kp2a, copyTask);
pt.Run();

View File

@@ -9,9 +9,9 @@ namespace keepass2android
{
public class SyncUtil
{
private Activity _activity;
private LifecycleAwareActivity _activity;
public SyncUtil(Activity activity)
public SyncUtil(LifecycleAwareActivity activity)
{
_activity = activity;
}
@@ -54,7 +54,7 @@ namespace keepass2android
{
var filestorage = App.Kp2a.GetFileStorage(App.Kp2a.CurrentDb.Ioc);
OperationWithFinishHandler task;
OnOperationFinishedHandler onOperationFinishedHandler = new ActionOnOperationFinished(App.Kp2a, (success, message, context) =>
OnOperationFinishedHandler onOperationFinishedHandler = new ActionInContextInstanceOnOperationFinished(_activity.ContextInstanceId, App.Kp2a, (success, message, context) =>
{
new Handler(Looper.MainLooper).Post(() =>
{

View File

@@ -63,14 +63,14 @@ namespace keepass2android
public class ExportKeyfileProcessManager : FileSaveProcessManager
{
public ExportKeyfileProcessManager(int requestCode, Activity activity) : base(requestCode, activity)
public ExportKeyfileProcessManager(int requestCode, LifecycleAwareActivity activity) : base(requestCode, activity)
{
}
protected override void SaveFile(IOConnectionInfo ioc)
{
var exportKeyfile = new ExportKeyfile(App.Kp2a, new ActionOnOperationFinished(App.Kp2a,
var exportKeyfile = new ExportKeyfile(App.Kp2a, new ActionInContextInstanceOnOperationFinished(_activity.ContextInstanceId, App.Kp2a,
(success, message, context) =>
{
if (!success)