fix crash when switching tasks while saving, should fix https://github.com/PhilippC/keepass2android/issues/719

This commit is contained in:
Philipp Crocoll
2020-06-14 20:14:39 +02:00
parent d30c532a88
commit e9b9d0a781
5 changed files with 39 additions and 10 deletions

View File

@@ -49,6 +49,11 @@ namespace keepass2android
get { return _activeActivity; }
private set
{
if (_activeActivity != null && _activeActivity != _previouslyActiveActivity)
{
_previouslyActiveActivity = _activeActivity;
}
_activeActivity = value;
if (_task != null)
_task.ActiveActivity = _activeActivity;
@@ -60,12 +65,18 @@ namespace keepass2android
}
}
private readonly Handler _handler;
public Activity PreviouslyActiveActivity
{
get { return _previouslyActiveActivity; }
}
private readonly Handler _handler;
private readonly RunnableOnFinish _task;
private IProgressDialog _progressDialog;
private readonly IKp2aApp _app;
private Thread _thread;
private Activity _activeActivity;
private Activity _activeActivity, _previouslyActiveActivity;
private ProgressDialogStatusLogger _progressDialogStatusLogger;
public ProgressTask(IKp2aApp app, Activity activity, RunnableOnFinish task)

View File

@@ -36,8 +36,11 @@ namespace keepass2android
{
_actionToPerform = actionToPerform;
}
public override void Run()
//if set to true, the previously active active will be passed to ActionToPerformOnFinish instead null if no activity is on foreground
public bool AllowInactiveActivity { get; set; }
public override void Run()
{
if (Message == null)
Message = "";
@@ -46,7 +49,7 @@ namespace keepass2android
Handler.Post(() => {_actionToPerform(Success, Message, ActiveActivity);});
}
else
_actionToPerform(Success, Message, ActiveActivity);
_actionToPerform(Success, Message, AllowInactiveActivity ? (ActiveActivity ?? PreviouslyActiveActivity) : ActiveActivity);
base.Run();
}
}

View File

@@ -39,7 +39,7 @@ 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;
private Activity _activeActivity, _previouslyActiveActivity;
public ProgressDialogStatusLogger StatusLogger
@@ -53,7 +53,12 @@ namespace keepass2android
get { return _activeActivity; }
set
{
_activeActivity = value;
if (_activeActivity != null && _activeActivity != _previouslyActiveActivity)
{
_previouslyActiveActivity = _activeActivity;
}
_activeActivity = value;
if (BaseOnFinish != null)
{
BaseOnFinish.ActiveActivity = value;
@@ -61,8 +66,15 @@ namespace keepass2android
}
}
public Activity PreviouslyActiveActivity
{
get { return _previouslyActiveActivity; }
protected OnFinish(Activity activeActivity, Handler handler)
}
protected OnFinish(Activity activeActivity, Handler handler)
{
ActiveActivity = activeActivity;
BaseOnFinish = null;