From 8e681829e3e9e145d22fab2700085d6104f05f2e Mon Sep 17 00:00:00 2001 From: kukabi Date: Mon, 27 Jul 2020 09:08:03 +0300 Subject: [PATCH] Create backup password copy fix tari-project/wallet-android#429. Wallet restore password entry CTA button enabled/disabled fix tari-project/wallet-android#474. Settings and backup settings screen backup state display fix tari-project/wallet-android#509. --- .../infrastructure/backup/BackupManager.kt | 14 ++++++++++---- .../fragment/debug/BaseNodeConfigFragment.kt | 19 +++++++++++++------ .../restore/ChooseRestoreOptionFragment.kt | 4 ++-- .../EnterRestorationPasswordFragment.kt | 16 ++++++++++++++-- app/src/main/res/values/strings.xml | 2 +- build.gradle | 2 +- 6 files changed, 41 insertions(+), 16 deletions(-) diff --git a/app/src/main/java/com/tari/android/wallet/infrastructure/backup/BackupManager.kt b/app/src/main/java/com/tari/android/wallet/infrastructure/backup/BackupManager.kt index 6050871ea..99eff9301 100644 --- a/app/src/main/java/com/tari/android/wallet/infrastructure/backup/BackupManager.kt +++ b/app/src/main/java/com/tari/android/wallet/infrastructure/backup/BackupManager.kt @@ -120,10 +120,16 @@ internal class BackupManager( if (!backupStorage.hasBackupForDate(backupDate)) { throw BackupStorageTamperedException("Backup storage is tampered.") } - if (sharedPrefs.scheduledBackupDate?.isAfterNow == true) { - EventBus.postBackupState(BackupScheduled) - } else { - EventBus.postBackupState(BackupUpToDate) + when { + sharedPrefs.backupFailureDate != null -> { + EventBus.postBackupState(BackupOutOfDate()) + } + sharedPrefs.scheduledBackupDate?.isAfterNow == true -> { + EventBus.postBackupState(BackupScheduled) + } + else -> { + EventBus.postBackupState(BackupUpToDate) + } } } catch (e: BackupStorageAuthRevokedException) { sharedPrefs.lastSuccessfulBackupDate = null diff --git a/app/src/main/java/com/tari/android/wallet/ui/fragment/debug/BaseNodeConfigFragment.kt b/app/src/main/java/com/tari/android/wallet/ui/fragment/debug/BaseNodeConfigFragment.kt index 2f7e9e378..070627d4c 100644 --- a/app/src/main/java/com/tari/android/wallet/ui/fragment/debug/BaseNodeConfigFragment.kt +++ b/app/src/main/java/com/tari/android/wallet/ui/fragment/debug/BaseNodeConfigFragment.kt @@ -34,7 +34,6 @@ package com.tari.android.wallet.ui.fragment.debug import android.content.ClipboardManager import android.content.Context.CLIPBOARD_SERVICE -import android.os.AsyncTask import android.os.Bundle import android.view.LayoutInflater import android.view.View @@ -42,6 +41,7 @@ import android.view.ViewGroup import android.widget.Toast import androidx.core.widget.addTextChangedListener import androidx.fragment.app.Fragment +import androidx.lifecycle.lifecycleScope import com.tari.android.wallet.R import com.tari.android.wallet.R.color.white import com.tari.android.wallet.R.drawable.base_node_config_edit_text_bg @@ -53,6 +53,9 @@ import com.tari.android.wallet.ffi.HexString import com.tari.android.wallet.ui.extension.* import com.tari.android.wallet.ui.util.UiUtil import com.tari.android.wallet.util.SharedPrefsWrapper +import kotlinx.coroutines.Dispatchers +import kotlinx.coroutines.launch +import kotlinx.coroutines.withContext import javax.inject.Inject /** @@ -180,19 +183,23 @@ internal class BaseNodeConfigFragment : Fragment() { val address = ui.addressEditText.editableText.toString() ui.saveButton.invisible() ui.progressBar.visible() - AsyncTask.execute { + lifecycleScope.launch(Dispatchers.IO) { addBaseNodePeer(publicKeyHex, address) } } - private fun addBaseNodePeer(publicKeyHex: String, address: String) { + private suspend fun addBaseNodePeer(publicKeyHex: String, address: String) { val baseNodeKeyFFI = FFIPublicKey(HexString(publicKeyHex)) - val success = FFIWallet.instance!!.addBaseNodePeer(baseNodeKeyFFI, address) + val success = try { + FFIWallet.instance!!.addBaseNodePeer(baseNodeKeyFFI, address) + true + } catch (exception: Exception) { + false + } baseNodeKeyFFI.destroy() - ui.rootView.post { + withContext(Dispatchers.Main) { if (success) { addBaseNodePeerSuccessful(publicKeyHex, address) - // show toast } else { addBaseNodePeerFailed() } diff --git a/app/src/main/java/com/tari/android/wallet/ui/fragment/restore/ChooseRestoreOptionFragment.kt b/app/src/main/java/com/tari/android/wallet/ui/fragment/restore/ChooseRestoreOptionFragment.kt index ff0f0c2cf..275787daa 100644 --- a/app/src/main/java/com/tari/android/wallet/ui/fragment/restore/ChooseRestoreOptionFragment.kt +++ b/app/src/main/java/com/tari/android/wallet/ui/fragment/restore/ChooseRestoreOptionFragment.kt @@ -194,7 +194,7 @@ framework for UI tree rebuild on configuration changes""" private fun showAuthFailedDialog() { ErrorDialog( requireContext(), - title = string(back_up_wallet_storage_setup_error_title), + title = string(restore_wallet_error_title), description = string(back_up_wallet_storage_setup_error_desc) ).show() } @@ -202,7 +202,7 @@ framework for UI tree rebuild on configuration changes""" private fun showBackupFileNotFoundDialog() { ErrorDialog( requireContext(), - title = string(back_up_wallet_storage_setup_error_title), + title = string(restore_wallet_error_title), description = string(restore_wallet_error_file_not_found), onClose = { requireActivity().onBackPressed() diff --git a/app/src/main/java/com/tari/android/wallet/ui/fragment/restore/EnterRestorationPasswordFragment.kt b/app/src/main/java/com/tari/android/wallet/ui/fragment/restore/EnterRestorationPasswordFragment.kt index 85378d2e8..ce5ab6b9d 100644 --- a/app/src/main/java/com/tari/android/wallet/ui/fragment/restore/EnterRestorationPasswordFragment.kt +++ b/app/src/main/java/com/tari/android/wallet/ui/fragment/restore/EnterRestorationPasswordFragment.kt @@ -33,6 +33,7 @@ package com.tari.android.wallet.ui.fragment.restore import android.content.Context +import android.graphics.Color import android.os.Bundle import android.text.SpannableString import android.text.SpannableStringBuilder @@ -90,10 +91,10 @@ UI tree rebuild on configuration changes""" override fun onViewCreated(view: View, savedInstanceState: Bundle?) { super.onViewCreated(view, savedInstanceState) - setupUi() + setupUI() } - private fun setupUi() { + private fun setupUI() { requireActivity().onBackPressedDispatcher .addCallback(viewLifecycleOwner, blockingBackPressDispatcher) setPageDescription() @@ -108,12 +109,14 @@ UI tree rebuild on configuration changes""" } } ) + setRestoreWalletCTAState(isEnabled = false) ui.restoreWalletCtaView.setOnClickListener { showRestoringUI() performRestoration(ui.passwordEditText.text!!.toString()) } ui.passwordEditText.addTextChangedListener( afterTextChanged = { + setRestoreWalletCTAState(it?.length ?: 0 != 0) ui.enterPasswordLabelTextView.setTextColor(color(black)) ui.passwordEditText.setTextColor(color(black)) ui.wrongPasswordLabelView.gone() @@ -121,6 +124,15 @@ UI tree rebuild on configuration changes""" ) } + private fun setRestoreWalletCTAState(isEnabled: Boolean) { + if (ui.restoreWalletCtaView.isEnabled == isEnabled) return + ui.restoreWalletCtaView.isEnabled = isEnabled + ui.restoreWalletTextView.setTextColor( + if (isEnabled) Color.WHITE + else color(seed_phrase_button_disabled_text_color) + ) + } + private fun showRestoringUI() { blockingBackPressDispatcher.isEnabled = true ui.passwordEditText.isEnabled = false diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index b847f9dab..526455c5d 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -346,7 +346,7 @@ Enter your backup password - Create Password + Create a Password Make it a strong one! Confirm Password Let’s see it again diff --git a/build.gradle b/build.gradle index fd51f270a..2fc3eba4b 100644 --- a/build.gradle +++ b/build.gradle @@ -4,7 +4,7 @@ buildscript { ext.kotlin_version = '1.3.72' // build & version - ext.buildNumber = 128 + ext.buildNumber = 129 ext.versionNumber = "0.3.0" // JNI libs