mirror of
https://github.com/Kunzisoft/KeePassDX.git
synced 2025-12-04 15:49:33 +01:00
fix: Loading ViewModel
This commit is contained in:
@@ -43,6 +43,7 @@ import androidx.biometric.BiometricManager
|
|||||||
import androidx.coordinatorlayout.widget.CoordinatorLayout
|
import androidx.coordinatorlayout.widget.CoordinatorLayout
|
||||||
import androidx.fragment.app.commit
|
import androidx.fragment.app.commit
|
||||||
import androidx.lifecycle.Lifecycle
|
import androidx.lifecycle.Lifecycle
|
||||||
|
import androidx.lifecycle.ViewModelProvider
|
||||||
import androidx.lifecycle.lifecycleScope
|
import androidx.lifecycle.lifecycleScope
|
||||||
import androidx.lifecycle.repeatOnLifecycle
|
import androidx.lifecycle.repeatOnLifecycle
|
||||||
import com.google.android.material.snackbar.Snackbar
|
import com.google.android.material.snackbar.Snackbar
|
||||||
@@ -75,8 +76,8 @@ import com.kunzisoft.keepass.services.DatabaseTaskNotificationService.Companion.
|
|||||||
import com.kunzisoft.keepass.services.DatabaseTaskNotificationService.Companion.DATABASE_URI_KEY
|
import com.kunzisoft.keepass.services.DatabaseTaskNotificationService.Companion.DATABASE_URI_KEY
|
||||||
import com.kunzisoft.keepass.services.DatabaseTaskNotificationService.Companion.MAIN_CREDENTIAL_KEY
|
import com.kunzisoft.keepass.services.DatabaseTaskNotificationService.Companion.MAIN_CREDENTIAL_KEY
|
||||||
import com.kunzisoft.keepass.services.DatabaseTaskNotificationService.Companion.READ_ONLY_KEY
|
import com.kunzisoft.keepass.services.DatabaseTaskNotificationService.Companion.READ_ONLY_KEY
|
||||||
import com.kunzisoft.keepass.settings.DeviceUnlockSettingsActivity
|
|
||||||
import com.kunzisoft.keepass.settings.AppearanceSettingsActivity
|
import com.kunzisoft.keepass.settings.AppearanceSettingsActivity
|
||||||
|
import com.kunzisoft.keepass.settings.DeviceUnlockSettingsActivity
|
||||||
import com.kunzisoft.keepass.settings.PreferencesUtil
|
import com.kunzisoft.keepass.settings.PreferencesUtil
|
||||||
import com.kunzisoft.keepass.tasks.ActionRunnable
|
import com.kunzisoft.keepass.tasks.ActionRunnable
|
||||||
import com.kunzisoft.keepass.utils.BACK_PREVIOUS_KEYBOARD_ACTION
|
import com.kunzisoft.keepass.utils.BACK_PREVIOUS_KEYBOARD_ACTION
|
||||||
@@ -107,7 +108,11 @@ class MainCredentialActivity : DatabaseModeActivity() {
|
|||||||
private var deviceUnlockFragment: DeviceUnlockFragment? = null
|
private var deviceUnlockFragment: DeviceUnlockFragment? = null
|
||||||
|
|
||||||
private val mDatabaseFileViewModel: DatabaseFileViewModel by viewModels()
|
private val mDatabaseFileViewModel: DatabaseFileViewModel by viewModels()
|
||||||
private val mDeviceUnlockViewModel: DeviceUnlockViewModel by viewModels()
|
private val mDeviceUnlockViewModel: DeviceUnlockViewModel? by lazy {
|
||||||
|
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
|
||||||
|
ViewModelProvider(this)[DeviceUnlockViewModel::class.java]
|
||||||
|
} else null
|
||||||
|
}
|
||||||
|
|
||||||
private val mPasswordActivityEducation = PasswordActivityEducation(this)
|
private val mPasswordActivityEducation = PasswordActivityEducation(this)
|
||||||
|
|
||||||
@@ -177,7 +182,7 @@ class MainCredentialActivity : DatabaseModeActivity() {
|
|||||||
// Listen password checkbox to init advanced unlock and confirmation button
|
// Listen password checkbox to init advanced unlock and confirmation button
|
||||||
mainCredentialView?.onConditionToStoreCredentialChanged = { _, verified ->
|
mainCredentialView?.onConditionToStoreCredentialChanged = { _, verified ->
|
||||||
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
|
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
|
||||||
mDeviceUnlockViewModel.checkConditionToStoreCredential(
|
mDeviceUnlockViewModel?.checkConditionToStoreCredential(
|
||||||
condition = verified
|
condition = verified
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
@@ -242,29 +247,31 @@ class MainCredentialActivity : DatabaseModeActivity() {
|
|||||||
lifecycleScope.launch {
|
lifecycleScope.launch {
|
||||||
repeatOnLifecycle(Lifecycle.State.STARTED) {
|
repeatOnLifecycle(Lifecycle.State.STARTED) {
|
||||||
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
|
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
|
||||||
mDeviceUnlockViewModel.uiState.collect { uiState ->
|
mDeviceUnlockViewModel?.let { deviceUnlockViewModel ->
|
||||||
// New value received
|
deviceUnlockViewModel.uiState.collect { uiState ->
|
||||||
uiState.credentialRequiredCipher?.let { cipher ->
|
// New value received
|
||||||
mDeviceUnlockViewModel.encryptCredential(
|
uiState.credentialRequiredCipher?.let { cipher ->
|
||||||
credential = getCredentialForEncryption(),
|
deviceUnlockViewModel.encryptCredential(
|
||||||
cipher = cipher
|
credential = getCredentialForEncryption(),
|
||||||
)
|
cipher = cipher
|
||||||
}
|
)
|
||||||
uiState.cipherEncryptDatabase?.let { cipherEncryptDatabase ->
|
}
|
||||||
onCredentialEncrypted(cipherEncryptDatabase)
|
uiState.cipherEncryptDatabase?.let { cipherEncryptDatabase ->
|
||||||
mDeviceUnlockViewModel.consumeCredentialEncrypted()
|
onCredentialEncrypted(cipherEncryptDatabase)
|
||||||
}
|
deviceUnlockViewModel.consumeCredentialEncrypted()
|
||||||
uiState.cipherDecryptDatabase?.let { cipherDecryptDatabase ->
|
}
|
||||||
onCredentialDecrypted(cipherDecryptDatabase)
|
uiState.cipherDecryptDatabase?.let { cipherDecryptDatabase ->
|
||||||
mDeviceUnlockViewModel.consumeCredentialDecrypted()
|
onCredentialDecrypted(cipherDecryptDatabase)
|
||||||
}
|
deviceUnlockViewModel.consumeCredentialDecrypted()
|
||||||
uiState.exception?.let { error ->
|
}
|
||||||
Snackbar.make(
|
uiState.exception?.let { error ->
|
||||||
coordinatorLayout,
|
Snackbar.make(
|
||||||
deviceUnlockError(error, this@MainCredentialActivity),
|
coordinatorLayout,
|
||||||
Snackbar.LENGTH_LONG
|
deviceUnlockError(error, this@MainCredentialActivity),
|
||||||
).asError().show()
|
Snackbar.LENGTH_LONG
|
||||||
mDeviceUnlockViewModel.exceptionShown()
|
).asError().show()
|
||||||
|
deviceUnlockViewModel.exceptionShown()
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -517,7 +524,7 @@ class MainCredentialActivity : DatabaseModeActivity() {
|
|||||||
} else {
|
} else {
|
||||||
// Init Biometric elements
|
// Init Biometric elements
|
||||||
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
|
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
|
||||||
mDeviceUnlockViewModel.connect(databaseFileUri)
|
mDeviceUnlockViewModel?.connect(databaseFileUri)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -661,7 +668,7 @@ class MainCredentialActivity : DatabaseModeActivity() {
|
|||||||
try {
|
try {
|
||||||
menu.findItem(R.id.menu_open_file_read_mode_key)
|
menu.findItem(R.id.menu_open_file_read_mode_key)
|
||||||
} catch (e: Exception) {
|
} catch (e: Exception) {
|
||||||
Log.e(TAG, "Unable to find read mode menu")
|
Log.e(TAG, "Unable to find read mode menu", e)
|
||||||
}
|
}
|
||||||
performedNextEducation(menu)
|
performedNextEducation(menu)
|
||||||
},
|
},
|
||||||
@@ -690,7 +697,7 @@ class MainCredentialActivity : DatabaseModeActivity() {
|
|||||||
})
|
})
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
} catch (ignored: Exception) {}
|
} catch (_: Exception) {}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -727,7 +734,7 @@ class MainCredentialActivity : DatabaseModeActivity() {
|
|||||||
override fun onDestroy() {
|
override fun onDestroy() {
|
||||||
super.onDestroy()
|
super.onDestroy()
|
||||||
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
|
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
|
||||||
mDeviceUnlockViewModel.disconnect()
|
mDeviceUnlockViewModel?.disconnect()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user