diff --git a/app/src/main/kotlin/com/jeeldobariya/passcodes/ui/LoadPasswordAction.kt b/app/src/main/kotlin/com/jeeldobariya/passcodes/ui/LoadPasswordAction.kt new file mode 100644 index 00000000..5259e82a --- /dev/null +++ b/app/src/main/kotlin/com/jeeldobariya/passcodes/ui/LoadPasswordAction.kt @@ -0,0 +1,5 @@ +package com.jeeldobariya.passcodes.ui + +sealed interface LoadPasswordAction { + data object RefreshPassswordData: LoadPasswordAction +} diff --git a/app/src/main/kotlin/com/jeeldobariya/passcodes/ui/LoadPasswordActivity.kt b/app/src/main/kotlin/com/jeeldobariya/passcodes/ui/LoadPasswordActivity.kt index 39491487..70ee5a51 100644 --- a/app/src/main/kotlin/com/jeeldobariya/passcodes/ui/LoadPasswordActivity.kt +++ b/app/src/main/kotlin/com/jeeldobariya/passcodes/ui/LoadPasswordActivity.kt @@ -26,21 +26,19 @@ class LoadPasswordActivity : AppCompatActivity() { binding = ActivityLoadPasswordBinding.inflate(layoutInflater) setContentView(binding.root) - collectLatestLifecycleFlow(viewModel.passwordsListState) { passwordList -> + collectLatestLifecycleFlow(viewModel.state) { state -> if (!this@LoadPasswordActivity::passwordAdapter.isInitialized) { passwordAdapter = - PasswordAdapter(this@LoadPasswordActivity, passwordList) + PasswordAdapter(this@LoadPasswordActivity, state.passwordEntityList) binding.passwordList.adapter = passwordAdapter } else { - passwordAdapter.updateData(passwordList) + passwordAdapter.updateData(state.passwordEntityList) } - } - collectLatestLifecycleFlow(viewModel.isErrorState) { error -> - if (error) { + if (state.isError) { Toast.makeText( this@LoadPasswordActivity, - "${getString(R.string.something_went_wrong_msg)}", + getString(R.string.something_went_wrong_msg), Toast.LENGTH_LONG ).show() } @@ -56,7 +54,7 @@ class LoadPasswordActivity : AppCompatActivity() { override fun onResume() { super.onResume() - viewModel.loadInitialData() + viewModel.onAction(LoadPasswordAction.RefreshPassswordData) } // Added all the onclick event listeners diff --git a/app/src/main/kotlin/com/jeeldobariya/passcodes/ui/LoadPasswordState.kt b/app/src/main/kotlin/com/jeeldobariya/passcodes/ui/LoadPasswordState.kt new file mode 100644 index 00000000..d46aee81 --- /dev/null +++ b/app/src/main/kotlin/com/jeeldobariya/passcodes/ui/LoadPasswordState.kt @@ -0,0 +1,8 @@ +package com.jeeldobariya.passcodes.ui + +import com.jeeldobariya.passcodes.database.Password + +data class LoadPasswordState( + val passwordEntityList: List = emptyList(), + val isError: Boolean = false +) diff --git a/app/src/main/kotlin/com/jeeldobariya/passcodes/ui/LoadPasswordViewModel.kt b/app/src/main/kotlin/com/jeeldobariya/passcodes/ui/LoadPasswordViewModel.kt index e682e89b..5e66a5b2 100644 --- a/app/src/main/kotlin/com/jeeldobariya/passcodes/ui/LoadPasswordViewModel.kt +++ b/app/src/main/kotlin/com/jeeldobariya/passcodes/ui/LoadPasswordViewModel.kt @@ -2,7 +2,6 @@ package com.jeeldobariya.passcodes.ui import androidx.lifecycle.ViewModel import androidx.lifecycle.viewModelScope -import com.jeeldobariya.passcodes.database.Password import com.jeeldobariya.passcodes.utils.Controller import kotlinx.coroutines.flow.MutableStateFlow import kotlinx.coroutines.flow.asStateFlow @@ -15,20 +14,23 @@ class LoadPasswordViewModel( var controller: Controller ) : ViewModel() { - private val _passwordsListState = MutableStateFlow(emptyList()) - val passwordsListState = _passwordsListState.asStateFlow() + private val _state = MutableStateFlow(LoadPasswordState()) + val state = _state.asStateFlow() - private val _isErrorState = MutableStateFlow(false) - val isErrorState = _isErrorState.asStateFlow() + fun onAction(action: LoadPasswordAction) { + when (action) { + LoadPasswordAction.RefreshPassswordData -> { refreshData() } + } + } - fun loadInitialData() { + private fun refreshData() { viewModelScope.launch { - _passwordsListState.update { - controller.getAllPasswords().catch { - _isErrorState.update { - true - } - }.first() + _state.update { + LoadPasswordState( + passwordEntityList = controller.getAllPasswords().catch { + _state.update { it.copy(isError = true) } + }.first() + ) } } } diff --git a/app/src/main/kotlin/com/jeeldobariya/passcodes/ui/SavePasswordAction.kt b/app/src/main/kotlin/com/jeeldobariya/passcodes/ui/SavePasswordAction.kt new file mode 100644 index 00000000..7bf6105d --- /dev/null +++ b/app/src/main/kotlin/com/jeeldobariya/passcodes/ui/SavePasswordAction.kt @@ -0,0 +1,9 @@ +package com.jeeldobariya.passcodes.ui + +sealed interface SavePasswordAction { + data class OnChangeDomain(val newDomain: String): SavePasswordAction + data class OnChangeUsername(val newUsername: String): SavePasswordAction + data class OnChangePassword(val newPassword: String): SavePasswordAction + data class OnChangeNotes(val newNotes: String): SavePasswordAction + data object OnSavePasswordButtonClick: SavePasswordAction +} diff --git a/app/src/main/kotlin/com/jeeldobariya/passcodes/ui/SavePasswordActivity.kt b/app/src/main/kotlin/com/jeeldobariya/passcodes/ui/SavePasswordActivity.kt index 7b9c85fb..a17990c8 100644 --- a/app/src/main/kotlin/com/jeeldobariya/passcodes/ui/SavePasswordActivity.kt +++ b/app/src/main/kotlin/com/jeeldobariya/passcodes/ui/SavePasswordActivity.kt @@ -54,13 +54,14 @@ class SavePasswordActivity : AppCompatActivity() { // Added all the onclick event listeners private fun addOnClickListenerOnButton() { binding.savePasswordBtn.setOnClickListener { - viewModel.onChangeDomainText(binding.inputDomain.text.toString()) - viewModel.onChangeUsernameText(binding.inputUsername.text.toString()) - viewModel.onChangePasswordText(binding.inputPassword.text.toString()) - viewModel.onChangeNotesText(binding.inputNotes.text.toString()) + viewModel.onAction(SavePasswordAction.OnChangeDomain(binding.inputDomain.text.toString())) + viewModel.onAction(SavePasswordAction.OnChangeUsername(binding.inputUsername.text.toString())) + viewModel.onAction(SavePasswordAction.OnChangePassword(binding.inputPassword.text.toString())) + viewModel.onAction(SavePasswordAction.OnChangeNotes(binding.inputNotes.text.toString())) - viewModel.onSavePasswordButtonClick() - if (!viewModel.isErrorState.value) { + viewModel.onAction(SavePasswordAction.OnSavePasswordButtonClick) + + if (!viewModel.state.value.isError) { finish() } } diff --git a/app/src/main/kotlin/com/jeeldobariya/passcodes/ui/SavePasswordState.kt b/app/src/main/kotlin/com/jeeldobariya/passcodes/ui/SavePasswordState.kt new file mode 100644 index 00000000..01d1274c --- /dev/null +++ b/app/src/main/kotlin/com/jeeldobariya/passcodes/ui/SavePasswordState.kt @@ -0,0 +1,9 @@ +package com.jeeldobariya.passcodes.ui + +data class SavePasswordState( + val domain: String = "", + val username: String = "", + val password: String = "", + val notes: String = "", + val isError: Boolean = false +) diff --git a/app/src/main/kotlin/com/jeeldobariya/passcodes/ui/SavePasswordViewModel.kt b/app/src/main/kotlin/com/jeeldobariya/passcodes/ui/SavePasswordViewModel.kt index 793d648a..0fb9759e 100644 --- a/app/src/main/kotlin/com/jeeldobariya/passcodes/ui/SavePasswordViewModel.kt +++ b/app/src/main/kotlin/com/jeeldobariya/passcodes/ui/SavePasswordViewModel.kt @@ -11,58 +11,47 @@ import kotlinx.coroutines.launch class SavePasswordViewModel( val controller: Controller ) : ViewModel() { - private val _domainState = MutableStateFlow("") - // val domainState = _domainState.asStateFlow() - private val _usernameState = MutableStateFlow("") - // val usernameState = _usernameState.asStateFlow() + private val _state = MutableStateFlow(SavePasswordState()) + val state = _state.asStateFlow() - private val _passwordState = MutableStateFlow("") - // val passwordState = _passwordState.asStateFlow() - - private val _notesState = MutableStateFlow("") - // val notesState = _notesState.asStateFlow() - - private val _isErrorState = MutableStateFlow(false) - val isErrorState = _isErrorState.asStateFlow() - - fun onChangeDomainText(text: String) { - _domainState.update { - text + fun onAction(action: SavePasswordAction) { + when (action) { + is SavePasswordAction.OnChangeDomain -> { onChangeDomainText(action.newDomain) } + is SavePasswordAction.OnChangeUsername -> { onChangeUsernameText(action.newUsername) } + is SavePasswordAction.OnChangePassword -> { onChangePasswordText(action.newPassword) } + is SavePasswordAction.OnChangeNotes -> { onChangeNotesText(action.newNotes) } + SavePasswordAction.OnSavePasswordButtonClick -> { savePasswordEntity() } } } - fun onChangeUsernameText(text: String) { - _usernameState.update { - text - } + private fun onChangeDomainText(newDomain: String) { + _state.update { it.copy(domain = newDomain) } } - fun onChangePasswordText(text: String) { - _passwordState.update { - text - } + private fun onChangeUsernameText(newUsername: String) { + _state.update { it.copy(username = newUsername) } } - fun onChangeNotesText(text: String) { - _notesState.update { - text - } + private fun onChangePasswordText(newPassword: String) { + _state.update { it.copy(password = newPassword) } + } + + private fun onChangeNotesText(newNotes: String) { + _state.update { it.copy(notes = newNotes) } } - fun onSavePasswordButtonClick() { + private fun savePasswordEntity() { viewModelScope.launch { try { controller.savePasswordEntity( - _domainState.value, - _usernameState.value, - _passwordState.value, - _notesState.value + _state.value.domain, + _state.value.username, + _state.value.password, + _state.value.notes ) } catch (e: Exception) { - _isErrorState.update { - true - } + _state.update { it.copy(isError = true) } } } } diff --git a/app/src/main/kotlin/com/jeeldobariya/passcodes/ui/UpdatePasswordAction.kt b/app/src/main/kotlin/com/jeeldobariya/passcodes/ui/UpdatePasswordAction.kt new file mode 100644 index 00000000..98fd3742 --- /dev/null +++ b/app/src/main/kotlin/com/jeeldobariya/passcodes/ui/UpdatePasswordAction.kt @@ -0,0 +1,9 @@ +package com.jeeldobariya.passcodes.ui + +sealed interface UpdatePasswordAction { + data class OnChangeDomain(val newDomain: String): UpdatePasswordAction + data class OnChangeUsername(val newUsername: String): UpdatePasswordAction + data class OnChangePassword(val newPassword: String): UpdatePasswordAction + data class OnChangeNotes(val newNotes: String): UpdatePasswordAction + data object OnUpdatePasswordButtonClick: UpdatePasswordAction +} diff --git a/app/src/main/kotlin/com/jeeldobariya/passcodes/ui/UpdatePasswordActivity.kt b/app/src/main/kotlin/com/jeeldobariya/passcodes/ui/UpdatePasswordActivity.kt index 287139ee..172b5559 100644 --- a/app/src/main/kotlin/com/jeeldobariya/passcodes/ui/UpdatePasswordActivity.kt +++ b/app/src/main/kotlin/com/jeeldobariya/passcodes/ui/UpdatePasswordActivity.kt @@ -42,17 +42,11 @@ class UpdatePasswordActivity : AppCompatActivity() { binding.tvId.text = "${getString(R.string.id_prefix)} ${viewModel.passwordEntityId}" - collectLatestLifecycleFlow(viewModel.domainState) { domain -> - binding.inputDomain.setText(domain) - } - collectLatestLifecycleFlow(viewModel.usernameState) { username -> - binding.inputUsername.setText(username) - } - collectLatestLifecycleFlow(viewModel.passwordState) { password -> - binding.inputPassword.setText(password) - } - collectLatestLifecycleFlow(viewModel.notesState) { notes -> - binding.inputNotes.setText(notes) + collectLatestLifecycleFlow(viewModel.state) { state -> + binding.inputDomain.setText(state.domain) + binding.inputUsername.setText(state.username) + binding.inputPassword.setText(state.password) + binding.inputNotes.setText(state.notes) } // Add event onclick listener @@ -65,17 +59,17 @@ class UpdatePasswordActivity : AppCompatActivity() { // Added all the onclick event listeners private fun addOnClickListenerOnButton() { binding.updatePasswordBtn.setOnClickListener { - viewModel.onChangeDomainText(binding.inputDomain.text.toString()) - viewModel.onChangeUsernameText(binding.inputUsername.text.toString()) - viewModel.onChangePasswordText(binding.inputPassword.text.toString()) - viewModel.onChangeNotesText(binding.inputNotes.text.toString()) + viewModel.onAction(UpdatePasswordAction.OnChangeDomain(binding.inputDomain.text.toString())) + viewModel.onAction(UpdatePasswordAction.OnChangeUsername(binding.inputUsername.text.toString())) + viewModel.onAction(UpdatePasswordAction.OnChangePassword(binding.inputPassword.text.toString())) + viewModel.onAction(UpdatePasswordAction.OnChangeNotes(binding.inputNotes.text.toString())) val confirmDialog = AlertDialog.Builder(this@UpdatePasswordActivity) .setTitle(R.string.update_password_dialog_title) .setMessage(R.string.irreversible_dialog_desc) .setPositiveButton(R.string.confirm_dialog_button_text) { dialog, which -> - viewModel.onUpdatePasswordButtonClick() - if (!viewModel.isErrorState.value) { + viewModel.onAction(UpdatePasswordAction.OnUpdatePasswordButtonClick) + if (!viewModel.state.value.isError) { finish() } } diff --git a/app/src/main/kotlin/com/jeeldobariya/passcodes/ui/UpdatePasswordState.kt b/app/src/main/kotlin/com/jeeldobariya/passcodes/ui/UpdatePasswordState.kt new file mode 100644 index 00000000..1b4cefaa --- /dev/null +++ b/app/src/main/kotlin/com/jeeldobariya/passcodes/ui/UpdatePasswordState.kt @@ -0,0 +1,9 @@ +package com.jeeldobariya.passcodes.ui + +data class UpdatePasswordState( + val domain: String = "", + val username: String = "", + val password: String = "", + val notes: String = "", + val isError: Boolean = false +) diff --git a/app/src/main/kotlin/com/jeeldobariya/passcodes/ui/UpdatePasswordViewModel.kt b/app/src/main/kotlin/com/jeeldobariya/passcodes/ui/UpdatePasswordViewModel.kt index 94800511..050d75ba 100644 --- a/app/src/main/kotlin/com/jeeldobariya/passcodes/ui/UpdatePasswordViewModel.kt +++ b/app/src/main/kotlin/com/jeeldobariya/passcodes/ui/UpdatePasswordViewModel.kt @@ -15,20 +15,8 @@ class UpdatePasswordViewModel( var passwordEntityId: Int = -1 - private val _domainState = MutableStateFlow("") - val domainState = _domainState.asStateFlow() - - private val _usernameState = MutableStateFlow("") - val usernameState = _usernameState.asStateFlow() - - private val _passwordState = MutableStateFlow("") - val passwordState = _passwordState.asStateFlow() - - private val _notesState = MutableStateFlow("") - val notesState = _notesState.asStateFlow() - - private val _isErrorState = MutableStateFlow(false) - val isErrorState = _isErrorState.asStateFlow() + private val _state = MutableStateFlow(UpdatePasswordState()) + val state = _state.asStateFlow() fun loadInitialData(passwordId: Int) { passwordEntityId = passwordId @@ -37,56 +25,58 @@ class UpdatePasswordViewModel( try { val password: Password = controller.getPasswordById(passwordId) - _domainState.update { password.domain } - _usernameState.update { password.username } - _passwordState.update { password.password } - _notesState.update { password.notes } - } catch (e: Exception) { - _isErrorState.update { - true + _state.update { + it.copy( + domain = password.domain, + username = password.username, + password = password.password, + notes = password.notes + ) } + } catch (e: Exception) { + _state.update { it.copy(isError = false) } } } } - fun onChangeDomainText(text: String) { - _domainState.update { - text + fun onAction(action: UpdatePasswordAction) { + when (action) { + is UpdatePasswordAction.OnChangeDomain -> { onChangeDomainText(action.newDomain) } + is UpdatePasswordAction.OnChangeUsername -> { onChangeUsernameText(action.newUsername) } + is UpdatePasswordAction.OnChangePassword -> { onChangePasswordText(action.newPassword) } + is UpdatePasswordAction.OnChangeNotes -> { onChangeNotesText(action.newNotes) } + UpdatePasswordAction.OnUpdatePasswordButtonClick -> { updatePasswordEntity() } } } - fun onChangeUsernameText(text: String) { - _usernameState.update { - text - } + private fun onChangeDomainText(newDomain: String) { + _state.update { it.copy(domain = newDomain) } } - fun onChangePasswordText(text: String) { - _passwordState.update { - text - } + private fun onChangeUsernameText(newUsername: String) { + _state.update { it.copy(username = newUsername) } } - fun onChangeNotesText(text: String) { - _notesState.update { - text - } + private fun onChangePasswordText(newPassword: String) { + _state.update { it.copy(password = newPassword) } } - fun onUpdatePasswordButtonClick() { + private fun onChangeNotesText(newNotes: String) { + _state.update { it.copy(notes = newNotes) } + } + + private fun updatePasswordEntity() { viewModelScope.launch { try { controller.updatePassword( passwordEntityId, - _domainState.value, - _usernameState.value, - _passwordState.value, - _notesState.value + _state.value.domain, + _state.value.username, + _state.value.password, + _state.value.notes ) } catch (e: Exception) { - _isErrorState.update { - true - } + _state.update { it.copy(isError = false) } } } } diff --git a/app/src/main/kotlin/com/jeeldobariya/passcodes/ui/ViewPasswordAction.kt b/app/src/main/kotlin/com/jeeldobariya/passcodes/ui/ViewPasswordAction.kt new file mode 100644 index 00000000..741dd1ec --- /dev/null +++ b/app/src/main/kotlin/com/jeeldobariya/passcodes/ui/ViewPasswordAction.kt @@ -0,0 +1,8 @@ +package com.jeeldobariya.passcodes.ui + +sealed interface ViewPasswordAction { + data class LoadPassswordData(val passwordId: Int): ViewPasswordAction + data object RefreshPassswordData: ViewPasswordAction + // data object NavigateUpdatePasswordAction: ViewPasswordAction + data object DeletePasswordAction: ViewPasswordAction +} diff --git a/app/src/main/kotlin/com/jeeldobariya/passcodes/ui/ViewPasswordActivity.kt b/app/src/main/kotlin/com/jeeldobariya/passcodes/ui/ViewPasswordActivity.kt index 54138ccd..5e786816 100644 --- a/app/src/main/kotlin/com/jeeldobariya/passcodes/ui/ViewPasswordActivity.kt +++ b/app/src/main/kotlin/com/jeeldobariya/passcodes/ui/ViewPasswordActivity.kt @@ -43,30 +43,21 @@ class ViewPasswordActivity : AppCompatActivity() { return // Exit onCreate if ID is invalid } - viewModel.loadInitialData(passwordEntityId) + viewModel.onAction(ViewPasswordAction.LoadPassswordData(passwordEntityId)) - collectLatestLifecycleFlow(viewModel.domainState) { domain -> + collectLatestLifecycleFlow(viewModel.state) { state -> binding.tvDomain.text = - "${getString(R.string.domain_prefix)} $domain" - } - collectLatestLifecycleFlow(viewModel.usernameState) { username -> + "${getString(R.string.domain_prefix)} ${state.domain}" binding.tvUsername.text = - "${getString(R.string.username_prefix)} $username" - } - collectLatestLifecycleFlow(viewModel.passwordState) { password -> + "${getString(R.string.username_prefix)} ${state.username}" binding.tvPassword.text = - "${getString(R.string.password_prefix)} $password" - } - collectLatestLifecycleFlow(viewModel.notesState) { notes -> + "${getString(R.string.password_prefix)} ${state.password}" binding.tvNotes.text = - "${getString(R.string.notes_prefix)} $notes" - } - collectLatestLifecycleFlow(viewModel.lastUpdatedAtState) { lastUpdatedAt -> + "${getString(R.string.notes_prefix)} ${state.notes}" binding.tvUpdatedAt.text = - "${getString(R.string.updatedat_prefix)} $lastUpdatedAt" - } - collectLatestLifecycleFlow(viewModel.isErrorState) { error -> - if (error) { + "${getString(R.string.updatedat_prefix)} ${state.lastUpdatedAt}" + + if (state.isError) { Toast.makeText( this@ViewPasswordActivity, getString(R.string.something_went_wrong_msg), @@ -85,6 +76,11 @@ class ViewPasswordActivity : AppCompatActivity() { WindowCompat.setDecorFitsSystemWindows(window, false) } + override fun onResume() { + super.onResume() + viewModel.onAction(ViewPasswordAction.RefreshPassswordData) + } + // Added all the onclick event listeners private fun addOnClickListenerOnButton() { binding.copyPasswordBtn.setOnClickListener { @@ -97,8 +93,8 @@ class ViewPasswordActivity : AppCompatActivity() { val clipboard = getSystemService(CLIPBOARD_SERVICE) as? ClipboardManager val clip: ClipData = ClipData.newPlainText( - viewModel.usernameState.value, - viewModel.passwordState.value + viewModel.state.value.username, + viewModel.state.value.password ) // Set the ClipData to the clipboard @@ -131,7 +127,7 @@ class ViewPasswordActivity : AppCompatActivity() { .setTitle(R.string.delete_password_dialog_title) .setMessage(R.string.irreversible_dialog_desc) .setPositiveButton(R.string.confirm_dialog_button_text) { dialog, which -> - runBlocking { viewModel.onDeletePasswordButtonClick() } + runBlocking { viewModel.onAction(ViewPasswordAction.DeletePasswordAction) } finish() } .setNegativeButton(R.string.discard_dialog_button_text) { dialog, which -> diff --git a/app/src/main/kotlin/com/jeeldobariya/passcodes/ui/ViewPasswordState.kt b/app/src/main/kotlin/com/jeeldobariya/passcodes/ui/ViewPasswordState.kt new file mode 100644 index 00000000..e5e7b099 --- /dev/null +++ b/app/src/main/kotlin/com/jeeldobariya/passcodes/ui/ViewPasswordState.kt @@ -0,0 +1,10 @@ +package com.jeeldobariya.passcodes.ui + +data class ViewPasswordState( + val domain: String = "", + val username: String = "", + val password: String = "", + val notes: String = "", + val lastUpdatedAt: String = "", + val isError: Boolean = false +) diff --git a/app/src/main/kotlin/com/jeeldobariya/passcodes/ui/ViewPasswordViewModel.kt b/app/src/main/kotlin/com/jeeldobariya/passcodes/ui/ViewPasswordViewModel.kt index 425c82e0..c0eec635 100644 --- a/app/src/main/kotlin/com/jeeldobariya/passcodes/ui/ViewPasswordViewModel.kt +++ b/app/src/main/kotlin/com/jeeldobariya/passcodes/ui/ViewPasswordViewModel.kt @@ -15,54 +15,45 @@ class ViewPasswordViewModel( ) : ViewModel() { var passwordEntityId: Int = -1 - private val _domainState = MutableStateFlow("") - val domainState = _domainState.asStateFlow() - - private val _usernameState = MutableStateFlow("") - val usernameState = _usernameState.asStateFlow() - - private val _passwordState = MutableStateFlow("") - val passwordState = _passwordState.asStateFlow() - - private val _notesState = MutableStateFlow("") - val notesState = _notesState.asStateFlow() - - private val _lastUpdatedAtState = MutableStateFlow("") - val lastUpdatedAtState = _lastUpdatedAtState.asStateFlow() - - private val _isErrorState = MutableStateFlow(false) - val isErrorState = _isErrorState.asStateFlow() + private val _state = MutableStateFlow(ViewPasswordState()) + val state = _state.asStateFlow() + + fun onAction(action: ViewPasswordAction) { + when (action) { + is ViewPasswordAction.LoadPassswordData -> { refreshData(action.passwordId) } + ViewPasswordAction.RefreshPassswordData -> { refreshData(passwordEntityId) } + ViewPasswordAction.DeletePasswordAction -> { deletePasswordEntity() } + } + } - fun loadInitialData(passwordId: Int) { + private fun refreshData(passwordId: Int) { passwordEntityId = passwordId viewModelScope.launch { try { val password: Password = controller.getPasswordById(passwordId) - _domainState.update { password.domain } - _usernameState.update { password.username } - _passwordState.update { password.password } - _notesState.update { password.notes } - _lastUpdatedAtState.update { - DateTimeUtils.getRelativeDays(password.updatedAt.orEmpty()) + _state.update { + it.copy( + domain = password.domain, + username = password.username, + password = password.password, + notes = password.notes, + lastUpdatedAt = DateTimeUtils.getRelativeDays(password.updatedAt.orEmpty()) + ) } } catch (_: Exception) { - _isErrorState.update { - true - } + _state.update { it.copy(isError = true) } } } } - fun onDeletePasswordButtonClick() { + private fun deletePasswordEntity() { viewModelScope.launch { try { controller.deletePassword(passwordEntityId) } catch (_: Exception) { - _isErrorState.update { - true - } + _state.update { it.copy(isError = true) } } } } diff --git a/app/src/main/res/layout/activity_load_password.xml b/app/src/main/res/layout/activity_load_password.xml index e86a016c..f1205acc 100644 --- a/app/src/main/res/layout/activity_load_password.xml +++ b/app/src/main/res/layout/activity_load_password.xml @@ -4,23 +4,23 @@ android:layout_width="match_parent" android:layout_height="match_parent" android:gravity="center" - android:orientation="vertical" + android:orientation="vertical" tools:context=".ui.LoadPasswordActivity" - android:padding="4sp" > + android:padding="4sp" > - + - + diff --git a/app/src/main/res/layout/activity_view_password.xml b/app/src/main/res/layout/activity_view_password.xml index 17f7650e..acab5923 100644 --- a/app/src/main/res/layout/activity_view_password.xml +++ b/app/src/main/res/layout/activity_view_password.xml @@ -91,7 +91,7 @@