fix implementation for BackgroundSyncService for blocking operations
This commit is contained in:
@@ -91,11 +91,12 @@ public class BackgroundOperationRunner
|
||||
public void SetNewActiveContext(IKp2aApp app)
|
||||
{
|
||||
Context? context = app.ActiveContext;
|
||||
bool isAppContext = context == null || (context.ApplicationContext == context);
|
||||
lock (_taskQueueLock)
|
||||
{
|
||||
if (context == null && _thread != null)
|
||||
if (isAppContext && (_thread != null || BlockingOperationRunner.HasActiveTask))
|
||||
{
|
||||
//this will register the service as new active context
|
||||
//this will register the service as new active context (see BackgroundSyncService.OnStartCommand())
|
||||
app.StartBackgroundSyncService();
|
||||
return;
|
||||
}
|
||||
|
||||
@@ -1630,8 +1630,9 @@ namespace keepass2android
|
||||
{
|
||||
Kp2aLog.Log("Going to background");
|
||||
Kp2a.ActiveContext = null;
|
||||
BackgroundOperationRunner.Instance.SetNewActiveContext( Kp2a);
|
||||
|
||||
// notify background operation runner that there is currently no active context, i.e. no UI where status can be displayed.
|
||||
// The BackgroundOperationRunner will launch the background sync service if a task (even a blocking one) is running currently.
|
||||
BackgroundOperationRunner.Instance.SetNewActiveContext(Kp2a);
|
||||
|
||||
}
|
||||
|
||||
|
||||
@@ -53,6 +53,7 @@ namespace keepass2android.services
|
||||
StartForeground(NotificationId, BuildNotification());
|
||||
App.Kp2a.ActiveContext = this;
|
||||
BackgroundOperationRunner.Instance.SetNewActiveContext(App.Kp2a);
|
||||
BlockingOperationRunner.SetNewActiveContext(this);
|
||||
return StartCommandResult.Sticky;
|
||||
}
|
||||
catch (Exception ex)
|
||||
@@ -123,6 +124,7 @@ namespace keepass2android.services
|
||||
_cts.Cancel();
|
||||
_cts.Dispose();
|
||||
}
|
||||
BlockingOperationRunner.RemoveActiveContext(this);
|
||||
}
|
||||
|
||||
public IProgressUi? ProgressUi
|
||||
|
||||
Reference in New Issue
Block a user