mirror of
https://github.com/Kunzisoft/KeePassDX.git
synced 2025-12-04 15:49:33 +01:00
Add listeners to refresh unlocking state
This commit is contained in:
@@ -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) {
|
||||||
|
|||||||
@@ -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) {
|
||||||
|
|||||||
Reference in New Issue
Block a user