diff --git a/app/src/main/java/com/kunzisoft/keepass/activities/FileDatabaseSelectActivity.kt b/app/src/main/java/com/kunzisoft/keepass/activities/FileDatabaseSelectActivity.kt index 02500c8ce..327f9542a 100644 --- a/app/src/main/java/com/kunzisoft/keepass/activities/FileDatabaseSelectActivity.kt +++ b/app/src/main/java/com/kunzisoft/keepass/activities/FileDatabaseSelectActivity.kt @@ -90,6 +90,10 @@ class FileDatabaseSelectActivity : SpecialModeActivity(), override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) + // TODO To move after refactoring + if (DatabaseTaskNotificationService.isRunning(this)) + Database.getInstance().clearAndClose(this) + mFileDatabaseHistoryAction = FileDatabaseHistoryAction.getInstance(applicationContext) setContentView(R.layout.activity_file_selection) diff --git a/app/src/main/java/com/kunzisoft/keepass/activities/PasswordActivity.kt b/app/src/main/java/com/kunzisoft/keepass/activities/PasswordActivity.kt index e39089485..566238563 100644 --- a/app/src/main/java/com/kunzisoft/keepass/activities/PasswordActivity.kt +++ b/app/src/main/java/com/kunzisoft/keepass/activities/PasswordActivity.kt @@ -708,7 +708,7 @@ open class PasswordActivity : SpecialModeActivity(), AdvancedUnlockFragment.Buil when (resultCode) { LockingActivity.RESULT_EXIT_LOCK -> { clearCredentialsViews() - Database.getInstance().clearAndClose(UriUtil.getBinaryDir(this)) + Database.getInstance().clearAndClose(this) } Activity.RESULT_CANCELED -> { clearCredentialsViews() diff --git a/app/src/main/java/com/kunzisoft/keepass/app/App.kt b/app/src/main/java/com/kunzisoft/keepass/app/App.kt index ccfa97abd..dc906c04c 100644 --- a/app/src/main/java/com/kunzisoft/keepass/app/App.kt +++ b/app/src/main/java/com/kunzisoft/keepass/app/App.kt @@ -22,7 +22,6 @@ package com.kunzisoft.keepass.app import androidx.multidex.MultiDexApplication import com.kunzisoft.keepass.activities.stylish.Stylish import com.kunzisoft.keepass.database.element.Database -import com.kunzisoft.keepass.utils.UriUtil class App : MultiDexApplication() { @@ -34,7 +33,7 @@ class App : MultiDexApplication() { } override fun onTerminate() { - Database.getInstance().clearAndClose(UriUtil.getBinaryDir(this)) + Database.getInstance().clearAndClose(this) super.onTerminate() } } diff --git a/app/src/main/java/com/kunzisoft/keepass/database/action/CreateDatabaseRunnable.kt b/app/src/main/java/com/kunzisoft/keepass/database/action/CreateDatabaseRunnable.kt index 0b55a1bb7..449cc87ad 100644 --- a/app/src/main/java/com/kunzisoft/keepass/database/action/CreateDatabaseRunnable.kt +++ b/app/src/main/java/com/kunzisoft/keepass/database/action/CreateDatabaseRunnable.kt @@ -26,7 +26,6 @@ import com.kunzisoft.keepass.app.database.FileDatabaseHistoryAction import com.kunzisoft.keepass.database.element.Database import com.kunzisoft.keepass.model.MainCredential import com.kunzisoft.keepass.settings.PreferencesUtil -import com.kunzisoft.keepass.utils.UriUtil class CreateDatabaseRunnable(context: Context, private val mDatabase: Database, @@ -44,7 +43,7 @@ class CreateDatabaseRunnable(context: Context, createData(mDatabaseUri, databaseName, rootName) } } catch (e: Exception) { - mDatabase.clearAndClose(UriUtil.getBinaryDir(context)) + mDatabase.clearAndClose(context) setError(e) } diff --git a/app/src/main/java/com/kunzisoft/keepass/database/action/LoadDatabaseRunnable.kt b/app/src/main/java/com/kunzisoft/keepass/database/action/LoadDatabaseRunnable.kt index 3b082822a..a5b2408ca 100644 --- a/app/src/main/java/com/kunzisoft/keepass/database/action/LoadDatabaseRunnable.kt +++ b/app/src/main/java/com/kunzisoft/keepass/database/action/LoadDatabaseRunnable.kt @@ -25,8 +25,8 @@ import com.kunzisoft.keepass.app.database.CipherDatabaseAction import com.kunzisoft.keepass.app.database.CipherDatabaseEntity import com.kunzisoft.keepass.app.database.FileDatabaseHistoryAction import com.kunzisoft.keepass.database.element.Database -import com.kunzisoft.keepass.database.element.binary.LoadedKey import com.kunzisoft.keepass.database.element.binary.BinaryData +import com.kunzisoft.keepass.database.element.binary.LoadedKey import com.kunzisoft.keepass.database.exception.LoadDatabaseException import com.kunzisoft.keepass.model.MainCredential import com.kunzisoft.keepass.settings.PreferencesUtil @@ -47,7 +47,7 @@ class LoadDatabaseRunnable(private val context: Context, override fun onStartRun() { // Clear before we load - mDatabase.clearAndClose(UriUtil.getBinaryDir(context)) + mDatabase.clearAndClose(context) } override fun onActionRun() { @@ -85,7 +85,7 @@ class LoadDatabaseRunnable(private val context: Context, // Register the current time to init the lock timer PreferencesUtil.saveCurrentTime(context) } else { - mDatabase.clearAndClose(UriUtil.getBinaryDir(context)) + mDatabase.clearAndClose(context) } } diff --git a/app/src/main/java/com/kunzisoft/keepass/database/action/ProgressDatabaseTaskProvider.kt b/app/src/main/java/com/kunzisoft/keepass/database/action/ProgressDatabaseTaskProvider.kt index 61caf5494..9cda9832f 100644 --- a/app/src/main/java/com/kunzisoft/keepass/database/action/ProgressDatabaseTaskProvider.kt +++ b/app/src/main/java/com/kunzisoft/keepass/database/action/ProgressDatabaseTaskProvider.kt @@ -23,6 +23,7 @@ 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 diff --git a/app/src/main/java/com/kunzisoft/keepass/database/action/ReloadDatabaseRunnable.kt b/app/src/main/java/com/kunzisoft/keepass/database/action/ReloadDatabaseRunnable.kt index 6075c9b78..7ee45188c 100644 --- a/app/src/main/java/com/kunzisoft/keepass/database/action/ReloadDatabaseRunnable.kt +++ b/app/src/main/java/com/kunzisoft/keepass/database/action/ReloadDatabaseRunnable.kt @@ -21,8 +21,8 @@ package com.kunzisoft.keepass.database.action import android.content.Context import com.kunzisoft.keepass.database.element.Database -import com.kunzisoft.keepass.database.element.binary.LoadedKey import com.kunzisoft.keepass.database.element.binary.BinaryData +import com.kunzisoft.keepass.database.element.binary.LoadedKey import com.kunzisoft.keepass.database.exception.LoadDatabaseException import com.kunzisoft.keepass.settings.PreferencesUtil import com.kunzisoft.keepass.tasks.ActionRunnable @@ -62,7 +62,7 @@ class ReloadDatabaseRunnable(private val context: Context, PreferencesUtil.saveCurrentTime(context) } else { tempCipherKey = null - mDatabase.clearAndClose(UriUtil.getBinaryDir(context)) + mDatabase.clearAndClose(context) } } diff --git a/app/src/main/java/com/kunzisoft/keepass/database/element/Database.kt b/app/src/main/java/com/kunzisoft/keepass/database/element/Database.kt index c9069bd40..843a0b017 100644 --- a/app/src/main/java/com/kunzisoft/keepass/database/element/Database.kt +++ b/app/src/main/java/com/kunzisoft/keepass/database/element/Database.kt @@ -20,6 +20,7 @@ package com.kunzisoft.keepass.database.element import android.content.ContentResolver +import android.content.Context import android.content.res.Resources import android.net.Uri import android.util.Log @@ -668,8 +669,8 @@ class Database { } } - fun clearAndClose(filesDirectory: File? = null) { - clear(filesDirectory) + fun clearAndClose(context: Context? = null) { + clear(context?.let { UriUtil.getBinaryDir(context) }) this.mDatabaseKDB = null this.mDatabaseKDBX = null this.fileUri = null diff --git a/app/src/main/java/com/kunzisoft/keepass/services/DatabaseTaskNotificationService.kt b/app/src/main/java/com/kunzisoft/keepass/services/DatabaseTaskNotificationService.kt index cf1bfb179..aba934e89 100644 --- a/app/src/main/java/com/kunzisoft/keepass/services/DatabaseTaskNotificationService.kt +++ b/app/src/main/java/com/kunzisoft/keepass/services/DatabaseTaskNotificationService.kt @@ -19,7 +19,9 @@ */ 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.* @@ -44,10 +46,7 @@ import com.kunzisoft.keepass.model.SnapFileDatabaseInfo import com.kunzisoft.keepass.tasks.ActionRunnable import com.kunzisoft.keepass.tasks.ProgressTaskUpdater import com.kunzisoft.keepass.timeout.TimeoutHelper -import com.kunzisoft.keepass.utils.DATABASE_START_TASK_ACTION -import com.kunzisoft.keepass.utils.DATABASE_STOP_TASK_ACTION -import com.kunzisoft.keepass.utils.LOCK_ACTION -import com.kunzisoft.keepass.utils.closeDatabase +import com.kunzisoft.keepass.utils.* import com.kunzisoft.keepass.viewmodels.FileDatabaseInfo import kotlinx.coroutines.* import java.util.* @@ -840,6 +839,12 @@ open class DatabaseTaskNotificationService : LockNotificationService(), Progress } } + override fun onDestroy() { + super.onDestroy() + if (mDatabase.loaded) + actionOnLock() + } + companion object { private val TAG = DatabaseTaskNotificationService::class.java.name @@ -935,6 +940,18 @@ open class DatabaseTaskNotificationService : LockNotificationService(), Progress putParcelableArrayList(ENTRIES_ID_KEY, entriesId) } } + + fun isRunning(context: Context): Boolean { + // TODO remove by moving database instance in service + (context.getSystemService(ACTIVITY_SERVICE) as? ActivityManager?)?.let { manager -> + for (service in manager.getRunningServices(Int.MAX_VALUE)) { + if (DatabaseTaskNotificationService::class.java.name == service.service.className) { + return true + } + } + } + return false + } } } \ No newline at end of file diff --git a/app/src/main/java/com/kunzisoft/keepass/utils/BroadcastAction.kt b/app/src/main/java/com/kunzisoft/keepass/utils/BroadcastAction.kt index c12fb0838..88587dc33 100644 --- a/app/src/main/java/com/kunzisoft/keepass/utils/BroadcastAction.kt +++ b/app/src/main/java/com/kunzisoft/keepass/utils/BroadcastAction.kt @@ -138,5 +138,5 @@ fun Context.closeDatabase() { cancelAll() } // Clear data - Database.getInstance().clearAndClose(UriUtil.getBinaryDir(this)) + Database.getInstance().clearAndClose(this) } \ No newline at end of file