Add listeners to refresh unlocking state

This commit is contained in:
J-Jamet
2020-12-07 19:07:10 +01:00
parent c75d99030c
commit 2e7088310a
2 changed files with 34 additions and 1 deletions

View File

@@ -28,6 +28,7 @@ import android.os.IBinder
import com.kunzisoft.keepass.notifications.AdvancedUnlockNotificationService import com.kunzisoft.keepass.notifications.AdvancedUnlockNotificationService
import com.kunzisoft.keepass.settings.PreferencesUtil import com.kunzisoft.keepass.settings.PreferencesUtil
import com.kunzisoft.keepass.utils.SingletonHolderParameter import com.kunzisoft.keepass.utils.SingletonHolderParameter
import java.util.*
class CipherDatabaseAction(context: Context) { class CipherDatabaseAction(context: Context) {
@@ -38,13 +39,19 @@ class CipherDatabaseAction(context: Context) {
.cipherDatabaseDao() .cipherDatabaseDao()
// Temp DAO to easily remove content if object no longer in memory // Temp DAO to easily remove content if object no longer in memory
private val useTempDao = PreferencesUtil.isTempAdvancedUnlockEnable(applicationContext) private var useTempDao = PreferencesUtil.isTempAdvancedUnlockEnable(applicationContext)
private val mIntentAdvancedUnlockService = Intent(applicationContext, private val mIntentAdvancedUnlockService = Intent(applicationContext,
AdvancedUnlockNotificationService::class.java) AdvancedUnlockNotificationService::class.java)
private var mBinder: AdvancedUnlockNotificationService.AdvancedUnlockBinder? = null private var mBinder: AdvancedUnlockNotificationService.AdvancedUnlockBinder? = null
private var mServiceConnection: ServiceConnection? = null private var mServiceConnection: ServiceConnection? = null
private var mDatabaseListeners = LinkedList<DatabaseListener>()
fun reloadPreferences() {
useTempDao = PreferencesUtil.isTempAdvancedUnlockEnable(applicationContext)
}
@Synchronized @Synchronized
private fun attachService(performedAction: () -> Unit) { private fun attachService(performedAction: () -> Unit) {
// Check if a service is currently running else do nothing // Check if a service is currently running else do nothing
@@ -60,6 +67,9 @@ class CipherDatabaseAction(context: Context) {
override fun onServiceDisconnected(name: ComponentName?) { override fun onServiceDisconnected(name: ComponentName?) {
mBinder = null mBinder = null
mServiceConnection = null mServiceConnection = null
mDatabaseListeners.forEach {
it.onDatabaseCleared()
}
} }
} }
applicationContext.bindService(mIntentAdvancedUnlockService, applicationContext.bindService(mIntentAdvancedUnlockService,
@@ -71,6 +81,18 @@ class CipherDatabaseAction(context: Context) {
} }
} }
fun registerDatabaseListener(listener: DatabaseListener) {
mDatabaseListeners.add(listener)
}
fun unregisterDatabaseListener(listener: DatabaseListener) {
mDatabaseListeners.remove(listener)
}
interface DatabaseListener {
fun onDatabaseCleared()
}
fun getCipherDatabase(databaseUri: Uri, fun getCipherDatabase(databaseUri: Uri,
cipherDatabaseResultListener: (CipherDatabaseEntity?) -> Unit) { cipherDatabaseResultListener: (CipherDatabaseEntity?) -> Unit) {
if (useTempDao) { if (useTempDao) {

View File

@@ -71,6 +71,12 @@ class AdvancedUnlockedManager(var context: FragmentActivity,
private var cipherDatabaseAction = CipherDatabaseAction.getInstance(context.applicationContext) private var cipherDatabaseAction = CipherDatabaseAction.getInstance(context.applicationContext)
private val cipherDatabaseListener = object: CipherDatabaseAction.DatabaseListener {
override fun onDatabaseCleared() {
deleteEncryptedDatabaseKey()
}
}
init { init {
// Add a check listener to change fingerprint mode // Add a check listener to change fingerprint mode
checkboxPasswordView?.setOnCheckedChangeListener { compoundButton, checked -> checkboxPasswordView?.setOnCheckedChangeListener { compoundButton, checked ->
@@ -78,6 +84,10 @@ class AdvancedUnlockedManager(var context: FragmentActivity,
// Add old listener to enable the button, only be call here because of onCheckedChange bug // Add old listener to enable the button, only be call here because of onCheckedChange bug
onCheckedPasswordChangeListener?.onCheckedChanged(compoundButton, checked) onCheckedPasswordChangeListener?.onCheckedChanged(compoundButton, checked)
} }
cipherDatabaseAction.apply {
reloadPreferences()
registerDatabaseListener(cipherDatabaseListener)
}
} }
/** /**
@@ -334,6 +344,7 @@ class AdvancedUnlockedManager(var context: FragmentActivity,
biometricUnlockDatabaseHelper?.closeBiometricPrompt() biometricUnlockDatabaseHelper?.closeBiometricPrompt()
// Restore the checked listener // Restore the checked listener
checkboxPasswordView?.setOnCheckedChangeListener(onCheckedPasswordChangeListener) checkboxPasswordView?.setOnCheckedChangeListener(onCheckedPasswordChangeListener)
cipherDatabaseAction.unregisterDatabaseListener(cipherDatabaseListener)
} }
fun inflateOptionsMenu(menuInflater: MenuInflater, menu: Menu) { fun inflateOptionsMenu(menuInflater: MenuInflater, menu: Menu) {