mirror of
https://github.com/Kunzisoft/KeePassDX.git
synced 2025-12-04 15:49:33 +01:00
feat: Add UV behind database merge #2283
This commit is contained in:
@@ -361,12 +361,12 @@ class EntryActivity : DatabaseLockActivity() {
|
|||||||
repeatOnLifecycle(Lifecycle.State.RESUMED) {
|
repeatOnLifecycle(Lifecycle.State.RESUMED) {
|
||||||
mUserVerificationViewModel.userVerificationState.collect { uVState ->
|
mUserVerificationViewModel.userVerificationState.collect { uVState ->
|
||||||
when (uVState) {
|
when (uVState) {
|
||||||
is UserVerificationViewModel.UIState.Loading -> {}
|
is UserVerificationViewModel.UVState.Loading -> {}
|
||||||
is UserVerificationViewModel.UIState.OnUserVerificationCanceled -> {
|
is UserVerificationViewModel.UVState.OnUserVerificationCanceled -> {
|
||||||
coordinatorLayout?.showError(uVState.error)
|
coordinatorLayout?.showError(uVState.error)
|
||||||
mUserVerificationViewModel.onUserVerificationReceived()
|
mUserVerificationViewModel.onUserVerificationReceived()
|
||||||
}
|
}
|
||||||
is UserVerificationViewModel.UIState.OnUserVerificationSucceeded -> {
|
is UserVerificationViewModel.UVState.OnUserVerificationSucceeded -> {
|
||||||
val data = uVState.dataToVerify
|
val data = uVState.dataToVerify
|
||||||
when (data.actionType) {
|
when (data.actionType) {
|
||||||
UserVerificationActionType.SHOW_PROTECTED_FIELD -> {
|
UserVerificationActionType.SHOW_PROTECTED_FIELD -> {
|
||||||
|
|||||||
@@ -421,12 +421,12 @@ class EntryEditActivity : DatabaseLockActivity(),
|
|||||||
repeatOnLifecycle(Lifecycle.State.STARTED) {
|
repeatOnLifecycle(Lifecycle.State.STARTED) {
|
||||||
mUserVerificationViewModel.userVerificationState.collect { uVState ->
|
mUserVerificationViewModel.userVerificationState.collect { uVState ->
|
||||||
when (uVState) {
|
when (uVState) {
|
||||||
is UserVerificationViewModel.UIState.Loading -> {}
|
is UserVerificationViewModel.UVState.Loading -> {}
|
||||||
is UserVerificationViewModel.UIState.OnUserVerificationCanceled -> {
|
is UserVerificationViewModel.UVState.OnUserVerificationCanceled -> {
|
||||||
coordinatorLayout?.showError(uVState.error)
|
coordinatorLayout?.showError(uVState.error)
|
||||||
mUserVerificationViewModel.onUserVerificationReceived()
|
mUserVerificationViewModel.onUserVerificationReceived()
|
||||||
}
|
}
|
||||||
is UserVerificationViewModel.UIState.OnUserVerificationSucceeded -> {
|
is UserVerificationViewModel.UVState.OnUserVerificationSucceeded -> {
|
||||||
when (uVState.dataToVerify.actionType) {
|
when (uVState.dataToVerify.actionType) {
|
||||||
UserVerificationActionType.SHOW_PROTECTED_FIELD -> {
|
UserVerificationActionType.SHOW_PROTECTED_FIELD -> {
|
||||||
uVState.dataToVerify.protectedFieldView?.unprotect()
|
uVState.dataToVerify.protectedFieldView?.unprotect()
|
||||||
|
|||||||
@@ -367,14 +367,22 @@ class GroupActivity : DatabaseLockActivity(),
|
|||||||
SettingsActivity.launch(this@GroupActivity, true)
|
SettingsActivity.launch(this@GroupActivity, true)
|
||||||
}
|
}
|
||||||
R.id.menu_merge_from -> {
|
R.id.menu_merge_from -> {
|
||||||
mExternalFileHelper?.openDocument()
|
checkUserVerification(
|
||||||
|
userVerificationViewModel = mUserVerificationViewModel,
|
||||||
|
dataToVerify = UserVerificationData(
|
||||||
|
actionType = UserVerificationActionType.MERGE_FROM_DATABASE,
|
||||||
|
database = mDatabase
|
||||||
|
)
|
||||||
|
)
|
||||||
}
|
}
|
||||||
R.id.menu_save_copy_to -> {
|
R.id.menu_save_copy_to -> {
|
||||||
mExternalFileHelper?.createDocument(
|
checkUserVerification(
|
||||||
getString(R.string.database_file_name_default) +
|
userVerificationViewModel = mUserVerificationViewModel,
|
||||||
"_" +
|
dataToVerify = UserVerificationData(
|
||||||
LocalDateTime.now().toString() +
|
actionType = UserVerificationActionType.SAVE_DATABASE_COPY_TO,
|
||||||
mDatabase?.defaultFileExtension)
|
database = mDatabase
|
||||||
|
)
|
||||||
|
)
|
||||||
}
|
}
|
||||||
R.id.menu_lock_all -> {
|
R.id.menu_lock_all -> {
|
||||||
lockAndExit()
|
lockAndExit()
|
||||||
@@ -581,19 +589,28 @@ class GroupActivity : DatabaseLockActivity(),
|
|||||||
repeatOnLifecycle(Lifecycle.State.RESUMED) {
|
repeatOnLifecycle(Lifecycle.State.RESUMED) {
|
||||||
mUserVerificationViewModel.userVerificationState.collect { uVState ->
|
mUserVerificationViewModel.userVerificationState.collect { uVState ->
|
||||||
when (uVState) {
|
when (uVState) {
|
||||||
is UserVerificationViewModel.UIState.Loading -> {}
|
is UserVerificationViewModel.UVState.Loading -> {}
|
||||||
is UserVerificationViewModel.UIState.OnUserVerificationCanceled -> {
|
is UserVerificationViewModel.UVState.OnUserVerificationCanceled -> {
|
||||||
coordinatorLayout?.showError(uVState.error)
|
coordinatorLayout?.showError(uVState.error)
|
||||||
mUserVerificationViewModel.onUserVerificationReceived()
|
mUserVerificationViewModel.onUserVerificationReceived()
|
||||||
}
|
}
|
||||||
is UserVerificationViewModel.UIState.OnUserVerificationSucceeded -> {
|
is UserVerificationViewModel.UVState.OnUserVerificationSucceeded -> {
|
||||||
val data = uVState.dataToVerify
|
val data = uVState.dataToVerify
|
||||||
when (data.actionType) {
|
when (data.actionType) {
|
||||||
UserVerificationActionType.EDIT_ENTRY -> {
|
UserVerificationActionType.EDIT_ENTRY -> {
|
||||||
editEntry(uVState.dataToVerify.database, uVState.dataToVerify.entryId)
|
editEntry(uVState.dataToVerify.database, uVState.dataToVerify.entryId)
|
||||||
}
|
}
|
||||||
UserVerificationActionType.MERGE_FROM_DATABASE -> {}
|
UserVerificationActionType.MERGE_FROM_DATABASE -> {
|
||||||
UserVerificationActionType.SAVE_TO_DATABASE -> {}
|
mExternalFileHelper?.openDocument()
|
||||||
|
}
|
||||||
|
UserVerificationActionType.SAVE_DATABASE_COPY_TO -> {
|
||||||
|
mExternalFileHelper?.createDocument(
|
||||||
|
getString(R.string.database_file_name_default) +
|
||||||
|
"_" +
|
||||||
|
LocalDateTime.now().toString() +
|
||||||
|
uVState.dataToVerify.database?.defaultFileExtension
|
||||||
|
)
|
||||||
|
}
|
||||||
else -> {}
|
else -> {}
|
||||||
}
|
}
|
||||||
mUserVerificationViewModel.onUserVerificationReceived()
|
mUserVerificationViewModel.onUserVerificationReceived()
|
||||||
|
|||||||
@@ -21,5 +21,5 @@ enum class UserVerificationActionType {
|
|||||||
EDIT_ENTRY,
|
EDIT_ENTRY,
|
||||||
EDIT_DATABASE_SETTING,
|
EDIT_DATABASE_SETTING,
|
||||||
MERGE_FROM_DATABASE,
|
MERGE_FROM_DATABASE,
|
||||||
SAVE_TO_DATABASE
|
SAVE_DATABASE_COPY_TO
|
||||||
}
|
}
|
||||||
@@ -178,8 +178,8 @@ class PasskeyLauncherActivity : DatabaseLockActivity() {
|
|||||||
repeatOnLifecycle(Lifecycle.State.RESUMED) {
|
repeatOnLifecycle(Lifecycle.State.RESUMED) {
|
||||||
userVerificationViewModel.userVerificationState.collect { uiState ->
|
userVerificationViewModel.userVerificationState.collect { uiState ->
|
||||||
when (uiState) {
|
when (uiState) {
|
||||||
is UserVerificationViewModel.UIState.Loading -> {}
|
is UserVerificationViewModel.UVState.Loading -> {}
|
||||||
is UserVerificationViewModel.UIState.OnUserVerificationSucceeded -> {
|
is UserVerificationViewModel.UVState.OnUserVerificationSucceeded -> {
|
||||||
val data = uiState.dataToVerify
|
val data = uiState.dataToVerify
|
||||||
when (data.actionType) {
|
when (data.actionType) {
|
||||||
UserVerificationActionType.LAUNCH_PASSKEY_CEREMONY -> {
|
UserVerificationActionType.LAUNCH_PASSKEY_CEREMONY -> {
|
||||||
@@ -194,7 +194,7 @@ class PasskeyLauncherActivity : DatabaseLockActivity() {
|
|||||||
}
|
}
|
||||||
userVerificationViewModel.onUserVerificationReceived()
|
userVerificationViewModel.onUserVerificationReceived()
|
||||||
}
|
}
|
||||||
is UserVerificationViewModel.UIState.OnUserVerificationCanceled -> {
|
is UserVerificationViewModel.UVState.OnUserVerificationCanceled -> {
|
||||||
toastError(uiState.error)
|
toastError(uiState.error)
|
||||||
passkeyLauncherViewModel.cancelResult()
|
passkeyLauncherViewModel.cancelResult()
|
||||||
userVerificationViewModel.onUserVerificationReceived()
|
userVerificationViewModel.onUserVerificationReceived()
|
||||||
|
|||||||
@@ -183,12 +183,12 @@ class NestedDatabaseSettingsFragment : NestedSettingsFragment(), DatabaseRetriev
|
|||||||
repeatOnLifecycle(Lifecycle.State.RESUMED) {
|
repeatOnLifecycle(Lifecycle.State.RESUMED) {
|
||||||
mUserVerificationViewModel.userVerificationState.collect { state ->
|
mUserVerificationViewModel.userVerificationState.collect { state ->
|
||||||
when (state) {
|
when (state) {
|
||||||
is UserVerificationViewModel.UIState.Loading -> {}
|
is UserVerificationViewModel.UVState.Loading -> {}
|
||||||
is UserVerificationViewModel.UIState.OnUserVerificationCanceled -> {
|
is UserVerificationViewModel.UVState.OnUserVerificationCanceled -> {
|
||||||
mSettingsViewModel.showError(state.error)
|
mSettingsViewModel.showError(state.error)
|
||||||
mUserVerificationViewModel.onUserVerificationReceived()
|
mUserVerificationViewModel.onUserVerificationReceived()
|
||||||
}
|
}
|
||||||
is UserVerificationViewModel.UIState.OnUserVerificationSucceeded -> {
|
is UserVerificationViewModel.UVState.OnUserVerificationSucceeded -> {
|
||||||
val data = state.dataToVerify
|
val data = state.dataToVerify
|
||||||
when (data.actionType) {
|
when (data.actionType) {
|
||||||
UserVerificationActionType.EDIT_DATABASE_SETTING -> {
|
UserVerificationActionType.EDIT_DATABASE_SETTING -> {
|
||||||
|
|||||||
@@ -12,8 +12,8 @@ import kotlinx.coroutines.flow.StateFlow
|
|||||||
*/
|
*/
|
||||||
class UserVerificationViewModel: ViewModel() {
|
class UserVerificationViewModel: ViewModel() {
|
||||||
|
|
||||||
private val mUiState = MutableStateFlow<UIState>(UIState.Loading)
|
private val mUVState = MutableStateFlow<UVState>(UVState.Loading)
|
||||||
val userVerificationState: StateFlow<UIState> = mUiState
|
val userVerificationState: StateFlow<UVState> = mUVState
|
||||||
|
|
||||||
var dataToVerify: UserVerificationData? = null
|
var dataToVerify: UserVerificationData? = null
|
||||||
|
|
||||||
@@ -29,7 +29,7 @@ class UserVerificationViewModel: ViewModel() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
fun onUserVerificationSucceeded(dataToVerify: UserVerificationData) {
|
fun onUserVerificationSucceeded(dataToVerify: UserVerificationData) {
|
||||||
mUiState.value = UIState.OnUserVerificationSucceeded(dataToVerify)
|
mUVState.value = UVState.OnUserVerificationSucceeded(dataToVerify)
|
||||||
}
|
}
|
||||||
|
|
||||||
fun onUserVerificationFailed(
|
fun onUserVerificationFailed(
|
||||||
@@ -37,22 +37,22 @@ class UserVerificationViewModel: ViewModel() {
|
|||||||
error: Throwable? = null
|
error: Throwable? = null
|
||||||
) {
|
) {
|
||||||
this.dataToVerify = dataToVerify
|
this.dataToVerify = dataToVerify
|
||||||
mUiState.value = UIState.OnUserVerificationCanceled(dataToVerify, error)
|
mUVState.value = UVState.OnUserVerificationCanceled(dataToVerify, error)
|
||||||
}
|
}
|
||||||
|
|
||||||
fun onUserVerificationReceived() {
|
fun onUserVerificationReceived() {
|
||||||
mUiState.value = UIState.Loading
|
mUVState.value = UVState.Loading
|
||||||
}
|
}
|
||||||
|
|
||||||
sealed class UIState {
|
sealed class UVState {
|
||||||
object Loading: UIState()
|
object Loading: UVState()
|
||||||
data class OnUserVerificationSucceeded(
|
data class OnUserVerificationSucceeded(
|
||||||
val dataToVerify: UserVerificationData
|
val dataToVerify: UserVerificationData
|
||||||
): UIState()
|
): UVState()
|
||||||
data class OnUserVerificationCanceled(
|
data class OnUserVerificationCanceled(
|
||||||
val dataToVerify: UserVerificationData?,
|
val dataToVerify: UserVerificationData?,
|
||||||
val error: Throwable?
|
val error: Throwable?
|
||||||
): UIState()
|
): UVState()
|
||||||
}
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
Reference in New Issue
Block a user