mirror of
https://github.com/Kunzisoft/KeePassDX.git
synced 2025-12-04 15:49:33 +01:00
Fix binding service #1028
This commit is contained in:
@@ -23,7 +23,6 @@ import android.content.*
|
||||
import android.content.Context.BIND_ABOVE_CLIENT
|
||||
import android.content.Context.BIND_NOT_FOREGROUND
|
||||
import android.net.Uri
|
||||
import android.os.Build
|
||||
import android.os.Bundle
|
||||
import android.os.IBinder
|
||||
import android.util.Log
|
||||
@@ -286,11 +285,6 @@ class ProgressDatabaseTaskProvider(private val activity: FragmentActivity) {
|
||||
readOnly: Boolean,
|
||||
cipherEntity: CipherDatabaseEntity?,
|
||||
fixDuplicateUuid: Boolean) {
|
||||
try {
|
||||
activity.stopService(intentDatabaseTask)
|
||||
} catch (e: Exception) {
|
||||
Log.e(TAG, "Unable to stop the service", e)
|
||||
}
|
||||
start(Bundle().apply {
|
||||
putParcelable(DatabaseTaskNotificationService.DATABASE_URI_KEY, databaseUri)
|
||||
putParcelable(DatabaseTaskNotificationService.MAIN_CREDENTIAL_KEY, mainCredential)
|
||||
|
||||
@@ -19,9 +19,7 @@
|
||||
*/
|
||||
package com.kunzisoft.keepass.services
|
||||
|
||||
import android.app.ActivityManager
|
||||
import android.app.PendingIntent
|
||||
import android.content.Context
|
||||
import android.content.Intent
|
||||
import android.net.Uri
|
||||
import android.os.*
|
||||
@@ -50,7 +48,6 @@ import com.kunzisoft.keepass.utils.*
|
||||
import com.kunzisoft.keepass.viewmodels.FileDatabaseInfo
|
||||
import kotlinx.coroutines.*
|
||||
import java.util.*
|
||||
import java.util.concurrent.atomic.AtomicBoolean
|
||||
import kotlin.collections.ArrayList
|
||||
|
||||
open class DatabaseTaskNotificationService : LockNotificationService(), ProgressTaskUpdater {
|
||||
@@ -63,7 +60,6 @@ open class DatabaseTaskNotificationService : LockNotificationService(), Progress
|
||||
|
||||
private var mActionTaskBinder = ActionTaskBinder()
|
||||
private var mActionTaskListeners = LinkedList<ActionTaskListener>()
|
||||
private var mAllowFinishAction = AtomicBoolean()
|
||||
private var mActionRunning = false
|
||||
|
||||
private var mDatabaseInfoListeners = LinkedList<DatabaseInfoListener>()
|
||||
@@ -86,19 +82,17 @@ open class DatabaseTaskNotificationService : LockNotificationService(), Progress
|
||||
fun getService(): DatabaseTaskNotificationService = this@DatabaseTaskNotificationService
|
||||
|
||||
fun addActionTaskListener(actionTaskListener: ActionTaskListener) {
|
||||
mAllowFinishAction.set(true)
|
||||
mActionTaskListeners.add(actionTaskListener)
|
||||
if (!mActionTaskListeners.contains(actionTaskListener))
|
||||
mActionTaskListeners.add(actionTaskListener)
|
||||
}
|
||||
|
||||
fun removeActionTaskListener(actionTaskListener: ActionTaskListener) {
|
||||
mActionTaskListeners.remove(actionTaskListener)
|
||||
if (mActionTaskListeners.size == 0) {
|
||||
mAllowFinishAction.set(false)
|
||||
}
|
||||
}
|
||||
|
||||
fun addDatabaseFileInfoListener(databaseInfoListener: DatabaseInfoListener) {
|
||||
mDatabaseInfoListeners.add(databaseInfoListener)
|
||||
if (!mDatabaseInfoListeners.contains(databaseInfoListener))
|
||||
mDatabaseInfoListeners.add(databaseInfoListener)
|
||||
}
|
||||
|
||||
fun removeDatabaseFileInfoListener(databaseInfoListener: DatabaseInfoListener) {
|
||||
@@ -236,6 +230,8 @@ open class DatabaseTaskNotificationService : LockNotificationService(), Progress
|
||||
mainScope.launch {
|
||||
executeAction(this@DatabaseTaskNotificationService,
|
||||
{
|
||||
TimeoutHelper.temporarilyDisableTimeout()
|
||||
|
||||
mActionRunning = true
|
||||
|
||||
sendBroadcast(Intent(DATABASE_START_TASK_ACTION).apply {
|
||||
@@ -427,23 +423,12 @@ open class DatabaseTaskNotificationService : LockNotificationService(), Progress
|
||||
onPreExecute: () -> Unit,
|
||||
onExecute: (ProgressTaskUpdater?) -> ActionRunnable?,
|
||||
onPostExecute: (result: ActionRunnable.Result) -> Unit) {
|
||||
mAllowFinishAction.set(false)
|
||||
|
||||
TimeoutHelper.temporarilyDisableTimeout()
|
||||
onPreExecute.invoke()
|
||||
withContext(Dispatchers.IO) {
|
||||
onExecute.invoke(progressTaskUpdater)?.apply {
|
||||
val asyncResult: Deferred<ActionRunnable.Result> = async {
|
||||
val startTime = System.currentTimeMillis()
|
||||
var timeIsUp = false
|
||||
// Run the actionRunnable
|
||||
run()
|
||||
// Wait onBind or 4 seconds max
|
||||
while (!mAllowFinishAction.get() && !timeIsUp) {
|
||||
delay(100)
|
||||
if (startTime + 4000 < System.currentTimeMillis())
|
||||
timeIsUp = true
|
||||
}
|
||||
result
|
||||
}
|
||||
withContext(Dispatchers.Main) {
|
||||
|
||||
Reference in New Issue
Block a user