From 6f878ea609a5abff28a8dafe4039effdcdefe69c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Honza=20Rychnovsk=C3=BD?= Date: Wed, 5 Jun 2024 12:52:43 +0200 Subject: [PATCH] [#1463] Display Disconnected app state - Closes #1463 - Disconnected dialog text update - Changelog updated --- CHANGELOG.md | 2 + .../zcash/ui/design/component/TopAppBar.kt | 16 ++++---- .../screen/scan/view/ScanViewTestSetup.kt | 4 +- .../screen/about/view/AboutViewTestSetup.kt | 4 +- .../ui/screen/account/AccountTestSetup.kt | 4 +- .../ui/screen/balances/BalancesTestSetup.kt | 2 + .../view/ExportPrivateDataViewTestSetup.kt | 4 +- .../receive/view/ReceiveViewTestSetup.kt | 4 +- .../scan/view/ScanViewBasicTestSetup.kt | 8 ++-- ...dRecoveryRecoveryViewsSecuredScreenTest.kt | 4 +- .../view/SeedRecoveryTestSetup.kt | 4 +- .../zcash/ui/screen/send/SendViewTestSetup.kt | 4 +- .../integration/SendViewIntegrationTest.kt | 4 +- .../screen/settings/SettingsViewTestSetup.kt | 4 +- .../support/view/SupportViewTestSetup.kt | 4 +- .../ui/common/model/TopAppBarSubTitleState.kt | 9 +++++ .../ui/common/viewmodel/WalletViewModel.kt | 27 ++++++++++++++ .../zcash/ui/screen/about/AndroidAboutView.kt | 10 ++--- .../zcash/ui/screen/about/view/AboutView.kt | 20 +++++----- .../zcash/ui/screen/account/AndroidAccount.kt | 6 +++ .../ui/screen/account/view/AccountView.kt | 26 +++++++------ .../AndroidAdvancedSettings.kt | 10 ++--- .../view/AdvancedSettingsView.kt | 20 +++++----- .../ui/screen/balances/AndroidBalances.kt | 6 +++ .../ui/screen/balances/view/BalancesView.kt | 20 ++++++---- .../chooseserver/AndroidChooseServer.kt | 10 ++--- .../chooseserver/view/ChooseServerView.kt | 20 +++++----- .../deletewallet/AndroidDeleteWallet.kt | 10 ++--- .../deletewallet/view/DeleteWalletView.kt | 20 +++++----- .../exportdata/AndroidExportPrivateData.kt | 10 ++--- .../exportdata/view/ExportPrivateDataView.kt | 20 +++++----- .../zcash/ui/screen/receive/AndroidReceive.kt | 4 +- .../ui/screen/receive/view/ReceiveView.kt | 20 +++++----- .../zcash/ui/screen/scan/AndroidScan.kt | 10 ++--- .../zcash/ui/screen/scan/view/ScanView.kt | 20 +++++----- .../seedrecovery/AndroidSeedRecovery.kt | 10 ++--- .../seedrecovery/view/SeedRecoveryView.kt | 20 +++++----- .../zcash/ui/screen/send/AndroidSend.kt | 18 ++++----- .../zcash/ui/screen/send/view/SendView.kt | 20 +++++----- .../AndroidSendConfirmation.kt | 10 ++--- .../view/SendConfirmationView.kt | 37 +++++++------------ .../ui/screen/settings/AndroidSettings.kt | 10 ++--- .../ui/screen/settings/view/SettingsView.kt | 22 +++++------ .../zcash/ui/screen/support/AndroidSupport.kt | 10 ++--- .../ui/screen/support/view/SupportView.kt | 20 +++++----- .../src/main/res/ui/common/values/strings.xml | 10 +++-- 46 files changed, 306 insertions(+), 251 deletions(-) create mode 100644 ui-lib/src/main/java/co/electriccoin/zcash/ui/common/model/TopAppBarSubTitleState.kt diff --git a/CHANGELOG.md b/CHANGELOG.md index d2728188..53056939 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -12,6 +12,8 @@ directly impact users rather than highlighting other key architectural updates.* ### Added - Grid pattern background has been added to several screens - A new disconnected dialog reminder has been added to inform users about possible server issues +- When the app is experiencing such server connection issues, a new DISCONNECTED label will be displayed below the + screen title - The transaction history list will be displayed when the app has server connection issues. Such a list might have a slightly different order. diff --git a/ui-design-lib/src/main/java/co/electriccoin/zcash/ui/design/component/TopAppBar.kt b/ui-design-lib/src/main/java/co/electriccoin/zcash/ui/design/component/TopAppBar.kt index 95418592..f381a6b1 100644 --- a/ui-design-lib/src/main/java/co/electriccoin/zcash/ui/design/component/TopAppBar.kt +++ b/ui-design-lib/src/main/java/co/electriccoin/zcash/ui/design/component/TopAppBar.kt @@ -64,7 +64,7 @@ private fun TopAppBarTextRestoringComposablePreview() { SmallTopAppBar( titleText = "Screen A", backText = "Back", - restoringLabel = "[RESTORING YOUR WALLET…]" + subTitle = "[RESTORING YOUR WALLET…]" ) } } @@ -78,7 +78,7 @@ private fun TopAppBarTextRestoringLongComposablePreview() { SmallTopAppBar( titleText = "Screen A", backText = "Back", - restoringLabel = "[RESTORING YOUR WALLET LONG TEXT…]" + subTitle = "[RESTORING YOUR WALLET LONG TEXT…]" ) } } @@ -102,7 +102,7 @@ private fun TopAppBarLogoRestoringComposablePreview() { SmallTopAppBar( showTitleLogo = true, backText = "Back", - restoringLabel = "[RESTORING YOUR WALLET…]" + subTitle = "[RESTORING YOUR WALLET…]" ) } } @@ -271,7 +271,7 @@ fun GridBgSmallTopAppBar( hamburgerMenuActions: (@Composable RowScope.() -> Unit)? = null, onBack: (() -> Unit)? = null, regularActions: (@Composable RowScope.() -> Unit)? = null, - restoringLabel: String? = null, + subTitle: String? = null, showTitleLogo: Boolean = false, titleText: String? = null, ) { @@ -291,7 +291,7 @@ fun GridBgSmallTopAppBar( hamburgerMenuActions = hamburgerMenuActions, onBack = onBack, regularActions = regularActions, - restoringLabel = restoringLabel, + subTitle = subTitle, showTitleLogo = showTitleLogo, titleText = titleText ) @@ -308,7 +308,7 @@ fun SmallTopAppBar( hamburgerMenuActions: (@Composable RowScope.() -> Unit)? = null, onBack: (() -> Unit)? = null, regularActions: (@Composable RowScope.() -> Unit)? = null, - restoringLabel: String? = null, + subTitle: String? = null, showTitleLogo: Boolean = false, titleText: String? = null, ) { @@ -336,12 +336,12 @@ fun SmallTopAppBar( restoringSpacerHeight = ZcashTheme.dimens.spacingSmall } - if (restoringLabel != null) { + if (subTitle != null) { Spacer(modifier = Modifier.height(restoringSpacerHeight)) @Suppress("MagicNumber") Text( - text = restoringLabel.uppercase(), + text = subTitle.uppercase(), style = ZcashTheme.extendedTypography.restoringTopAppBarStyle, color = colors.subTitleColor, modifier = Modifier.fillMaxWidth(0.75f), diff --git a/ui-integration-test/src/main/java/co/electriccoin/zcash/ui/integration/test/screen/scan/view/ScanViewTestSetup.kt b/ui-integration-test/src/main/java/co/electriccoin/zcash/ui/integration/test/screen/scan/view/ScanViewTestSetup.kt index f375ff3b..d5bc0ff4 100644 --- a/ui-integration-test/src/main/java/co/electriccoin/zcash/ui/integration/test/screen/scan/view/ScanViewTestSetup.kt +++ b/ui-integration-test/src/main/java/co/electriccoin/zcash/ui/integration/test/screen/scan/view/ScanViewTestSetup.kt @@ -4,7 +4,7 @@ import androidx.compose.material3.SnackbarHostState import androidx.compose.runtime.Composable import androidx.compose.ui.test.junit4.ComposeContentTestRule import cash.z.ecc.android.sdk.type.AddressType -import co.electriccoin.zcash.ui.common.model.WalletRestoringState +import co.electriccoin.zcash.ui.common.model.TopAppBarSubTitleState import co.electriccoin.zcash.ui.design.theme.ZcashTheme import co.electriccoin.zcash.ui.integration.test.common.getPermissionNegativeButtonUiObject import co.electriccoin.zcash.ui.integration.test.common.getPermissionPositiveButtonUiObject @@ -59,7 +59,7 @@ class ScanViewTestSetup( onScanStateChanged = { scanState.set(it) }, - walletRestoringState = WalletRestoringState.NONE, + topAppBarSubTitleState = TopAppBarSubTitleState.None, addressValidationResult = AddressType.Unified ) } diff --git a/ui-lib/src/androidTest/java/co/electriccoin/zcash/ui/screen/about/view/AboutViewTestSetup.kt b/ui-lib/src/androidTest/java/co/electriccoin/zcash/ui/screen/about/view/AboutViewTestSetup.kt index fcdd0d3f..18a74d0f 100644 --- a/ui-lib/src/androidTest/java/co/electriccoin/zcash/ui/screen/about/view/AboutViewTestSetup.kt +++ b/ui-lib/src/androidTest/java/co/electriccoin/zcash/ui/screen/about/view/AboutViewTestSetup.kt @@ -2,8 +2,8 @@ package co.electriccoin.zcash.ui.screen.about.view import androidx.compose.material3.SnackbarHostState import androidx.compose.ui.test.junit4.ComposeContentTestRule +import co.electriccoin.zcash.ui.common.model.TopAppBarSubTitleState import co.electriccoin.zcash.ui.common.model.VersionInfo -import co.electriccoin.zcash.ui.common.model.WalletRestoringState import co.electriccoin.zcash.ui.design.theme.ZcashTheme import co.electriccoin.zcash.ui.screen.support.model.ConfigInfo import java.util.concurrent.atomic.AtomicInteger @@ -28,8 +28,8 @@ class AboutViewTestSetup( configInfo = configInfo, onPrivacyPolicy = {}, snackbarHostState = SnackbarHostState(), + topAppBarSubTitleState = TopAppBarSubTitleState.None, versionInfo = versionInfo, - walletRestoringState = WalletRestoringState.NONE ) } } diff --git a/ui-lib/src/androidTest/java/co/electriccoin/zcash/ui/screen/account/AccountTestSetup.kt b/ui-lib/src/androidTest/java/co/electriccoin/zcash/ui/screen/account/AccountTestSetup.kt index 2c0d731a..e41a8250 100644 --- a/ui-lib/src/androidTest/java/co/electriccoin/zcash/ui/screen/account/AccountTestSetup.kt +++ b/ui-lib/src/androidTest/java/co/electriccoin/zcash/ui/screen/account/AccountTestSetup.kt @@ -3,6 +3,7 @@ package co.electriccoin.zcash.ui.screen.account import androidx.compose.material3.SnackbarHostState import androidx.compose.runtime.Composable import androidx.compose.ui.test.junit4.ComposeContentTestRule +import co.electriccoin.zcash.ui.common.model.TopAppBarSubTitleState import co.electriccoin.zcash.ui.common.model.WalletRestoringState import co.electriccoin.zcash.ui.common.model.WalletSnapshot import co.electriccoin.zcash.ui.design.theme.ZcashTheme @@ -75,8 +76,9 @@ class AccountTestSetup( showStatusDialog = null, onStatusClick = {}, snackbarHostState = SnackbarHostState(), + topAppBarSubTitleState = TopAppBarSubTitleState.None, walletRestoringState = WalletRestoringState.NONE, - walletSnapshot = WalletSnapshotFixture.new() + walletSnapshot = WalletSnapshotFixture.new(), ) } diff --git a/ui-lib/src/androidTest/java/co/electriccoin/zcash/ui/screen/balances/BalancesTestSetup.kt b/ui-lib/src/androidTest/java/co/electriccoin/zcash/ui/screen/balances/BalancesTestSetup.kt index 911259af..97099c90 100644 --- a/ui-lib/src/androidTest/java/co/electriccoin/zcash/ui/screen/balances/BalancesTestSetup.kt +++ b/ui-lib/src/androidTest/java/co/electriccoin/zcash/ui/screen/balances/BalancesTestSetup.kt @@ -3,6 +3,7 @@ package co.electriccoin.zcash.ui.screen.balances import androidx.compose.material3.SnackbarHostState import androidx.compose.runtime.Composable import androidx.compose.ui.test.junit4.ComposeContentTestRule +import co.electriccoin.zcash.ui.common.model.TopAppBarSubTitleState import co.electriccoin.zcash.ui.common.model.WalletRestoringState import co.electriccoin.zcash.ui.common.model.WalletSnapshot import co.electriccoin.zcash.ui.design.theme.ZcashTheme @@ -46,6 +47,7 @@ class BalancesTestSetup( setShowErrorDialog = {}, onShielding = {}, shieldState = ShieldState.Available, + topAppBarSubTitleState = TopAppBarSubTitleState.None, walletSnapshot = walletSnapshot, walletRestoringState = WalletRestoringState.NONE, ) diff --git a/ui-lib/src/androidTest/java/co/electriccoin/zcash/ui/screen/exportdata/view/ExportPrivateDataViewTestSetup.kt b/ui-lib/src/androidTest/java/co/electriccoin/zcash/ui/screen/exportdata/view/ExportPrivateDataViewTestSetup.kt index c449594f..e0befdf5 100644 --- a/ui-lib/src/androidTest/java/co/electriccoin/zcash/ui/screen/exportdata/view/ExportPrivateDataViewTestSetup.kt +++ b/ui-lib/src/androidTest/java/co/electriccoin/zcash/ui/screen/exportdata/view/ExportPrivateDataViewTestSetup.kt @@ -3,7 +3,7 @@ package co.electriccoin.zcash.ui.screen.exportdata.view import androidx.compose.material3.SnackbarHostState import androidx.compose.runtime.Composable import androidx.compose.ui.test.junit4.ComposeContentTestRule -import co.electriccoin.zcash.ui.common.model.WalletRestoringState +import co.electriccoin.zcash.ui.common.model.TopAppBarSubTitleState import co.electriccoin.zcash.ui.design.theme.ZcashTheme import java.util.concurrent.atomic.AtomicBoolean import java.util.concurrent.atomic.AtomicInteger @@ -44,7 +44,7 @@ class ExportPrivateDataViewTestSetup(private val composeTestRule: ComposeContent onConfirm = { onConfirmCount.incrementAndGet() }, - walletRestoringState = WalletRestoringState.NONE + topAppBarSubTitleState = TopAppBarSubTitleState.None, ) } diff --git a/ui-lib/src/androidTest/java/co/electriccoin/zcash/ui/screen/receive/view/ReceiveViewTestSetup.kt b/ui-lib/src/androidTest/java/co/electriccoin/zcash/ui/screen/receive/view/ReceiveViewTestSetup.kt index 1db6c9a3..4617699e 100644 --- a/ui-lib/src/androidTest/java/co/electriccoin/zcash/ui/screen/receive/view/ReceiveViewTestSetup.kt +++ b/ui-lib/src/androidTest/java/co/electriccoin/zcash/ui/screen/receive/view/ReceiveViewTestSetup.kt @@ -12,8 +12,8 @@ import co.electriccoin.zcash.ui.common.compose.LocalScreenTimeout import co.electriccoin.zcash.ui.common.compose.ScreenBrightness import co.electriccoin.zcash.ui.common.compose.ScreenBrightnessState import co.electriccoin.zcash.ui.common.compose.ScreenTimeout +import co.electriccoin.zcash.ui.common.model.TopAppBarSubTitleState import co.electriccoin.zcash.ui.common.model.VersionInfo -import co.electriccoin.zcash.ui.common.model.WalletRestoringState import co.electriccoin.zcash.ui.design.theme.ZcashTheme import co.electriccoin.zcash.ui.fixture.VersionInfoFixture import co.electriccoin.zcash.ui.test.getStringResource @@ -70,8 +70,8 @@ class ReceiveViewTestSetup( onAddrCopyToClipboard = {}, onQrImageShare = {}, screenBrightnessState = ScreenBrightnessState.NORMAL, + topAppBarSubTitleState = TopAppBarSubTitleState.None, versionInfo = versionInfo, - walletRestoringState = WalletRestoringState.NONE ) } } diff --git a/ui-lib/src/androidTest/java/co/electriccoin/zcash/ui/screen/scan/view/ScanViewBasicTestSetup.kt b/ui-lib/src/androidTest/java/co/electriccoin/zcash/ui/screen/scan/view/ScanViewBasicTestSetup.kt index 9138b3e6..c66738df 100644 --- a/ui-lib/src/androidTest/java/co/electriccoin/zcash/ui/screen/scan/view/ScanViewBasicTestSetup.kt +++ b/ui-lib/src/androidTest/java/co/electriccoin/zcash/ui/screen/scan/view/ScanViewBasicTestSetup.kt @@ -4,7 +4,7 @@ import androidx.compose.material3.SnackbarHostState import androidx.compose.runtime.Composable import androidx.compose.ui.test.junit4.ComposeContentTestRule import cash.z.ecc.android.sdk.type.AddressType -import co.electriccoin.zcash.ui.common.model.WalletRestoringState +import co.electriccoin.zcash.ui.common.model.TopAppBarSubTitleState import co.electriccoin.zcash.ui.design.theme.ZcashTheme import co.electriccoin.zcash.ui.screen.scan.model.ScanState import java.util.concurrent.atomic.AtomicInteger @@ -30,7 +30,7 @@ class ScanViewBasicTestSetup( @Suppress("TestFunctionName") fun DefaultContent() { Scan( - snackbarHostState = SnackbarHostState(), + addressValidationResult = AddressType.Shielded, onBack = { onBackCount.incrementAndGet() }, @@ -39,8 +39,8 @@ class ScanViewBasicTestSetup( onScanStateChanged = { scanState.set(it) }, - walletRestoringState = WalletRestoringState.NONE, - addressValidationResult = AddressType.Shielded + snackbarHostState = SnackbarHostState(), + topAppBarSubTitleState = TopAppBarSubTitleState.None, ) } diff --git a/ui-lib/src/androidTest/java/co/electriccoin/zcash/ui/screen/seedrecovery/view/SeedRecoveryRecoveryViewsSecuredScreenTest.kt b/ui-lib/src/androidTest/java/co/electriccoin/zcash/ui/screen/seedrecovery/view/SeedRecoveryRecoveryViewsSecuredScreenTest.kt index 3c9791c1..ae94e9d5 100644 --- a/ui-lib/src/androidTest/java/co/electriccoin/zcash/ui/screen/seedrecovery/view/SeedRecoveryRecoveryViewsSecuredScreenTest.kt +++ b/ui-lib/src/androidTest/java/co/electriccoin/zcash/ui/screen/seedrecovery/view/SeedRecoveryRecoveryViewsSecuredScreenTest.kt @@ -8,7 +8,7 @@ import cash.z.ecc.sdk.fixture.PersistableWalletFixture import co.electriccoin.zcash.test.UiTestPrerequisites import co.electriccoin.zcash.ui.common.compose.LocalScreenSecurity import co.electriccoin.zcash.ui.common.compose.ScreenSecurity -import co.electriccoin.zcash.ui.common.model.WalletRestoringState +import co.electriccoin.zcash.ui.common.model.TopAppBarSubTitleState import co.electriccoin.zcash.ui.design.theme.ZcashTheme import co.electriccoin.zcash.ui.fixture.VersionInfoFixture import kotlinx.coroutines.test.runTest @@ -49,8 +49,8 @@ class SeedRecoveryRecoveryViewsSecuredScreenTest : UiTestPrerequisites() { onBirthdayCopy = {}, onDone = {}, onSeedCopy = {}, + topAppBarSubTitleState = TopAppBarSubTitleState.None, versionInfo = VersionInfoFixture.new(), - walletRestoringState = WalletRestoringState.NONE ) } } diff --git a/ui-lib/src/androidTest/java/co/electriccoin/zcash/ui/screen/seedrecovery/view/SeedRecoveryTestSetup.kt b/ui-lib/src/androidTest/java/co/electriccoin/zcash/ui/screen/seedrecovery/view/SeedRecoveryTestSetup.kt index d36e27c4..b7517dc4 100644 --- a/ui-lib/src/androidTest/java/co/electriccoin/zcash/ui/screen/seedrecovery/view/SeedRecoveryTestSetup.kt +++ b/ui-lib/src/androidTest/java/co/electriccoin/zcash/ui/screen/seedrecovery/view/SeedRecoveryTestSetup.kt @@ -3,8 +3,8 @@ package co.electriccoin.zcash.ui.screen.seedrecovery.view import androidx.compose.runtime.Composable import androidx.compose.ui.test.junit4.ComposeContentTestRule import cash.z.ecc.sdk.fixture.PersistableWalletFixture +import co.electriccoin.zcash.ui.common.model.TopAppBarSubTitleState import co.electriccoin.zcash.ui.common.model.VersionInfo -import co.electriccoin.zcash.ui.common.model.WalletRestoringState import co.electriccoin.zcash.ui.design.theme.ZcashTheme import java.util.concurrent.atomic.AtomicInteger @@ -43,8 +43,8 @@ class SeedRecoveryTestSetup( onBirthdayCopy = { onBirthdayCopyCount.incrementAndGet() }, onDone = { onCompleteCallbackCount.incrementAndGet() }, onSeedCopy = { /* Not tested - debug mode feature only */ }, + topAppBarSubTitleState = TopAppBarSubTitleState.None, versionInfo = versionInfo, - walletRestoringState = WalletRestoringState.NONE, ) } } diff --git a/ui-lib/src/androidTest/java/co/electriccoin/zcash/ui/screen/send/SendViewTestSetup.kt b/ui-lib/src/androidTest/java/co/electriccoin/zcash/ui/screen/send/SendViewTestSetup.kt index e7207977..36b44eb2 100644 --- a/ui-lib/src/androidTest/java/co/electriccoin/zcash/ui/screen/send/SendViewTestSetup.kt +++ b/ui-lib/src/androidTest/java/co/electriccoin/zcash/ui/screen/send/SendViewTestSetup.kt @@ -12,7 +12,7 @@ import cash.z.ecc.android.sdk.model.MonetarySeparators import cash.z.ecc.android.sdk.model.Zatoshi import cash.z.ecc.android.sdk.model.ZecSend import cash.z.ecc.android.sdk.type.AddressType -import co.electriccoin.zcash.ui.common.model.WalletRestoringState +import co.electriccoin.zcash.ui.common.model.TopAppBarSubTitleState import co.electriccoin.zcash.ui.design.theme.ZcashTheme import co.electriccoin.zcash.ui.fixture.BalanceStateFixture import co.electriccoin.zcash.ui.fixture.WalletSnapshotFixture @@ -131,7 +131,7 @@ class SendViewTestSetup( amountState = AmountState.new(context, monetarySeparators, "", false), setMemoState = {}, memoState = MemoState.new(""), - walletRestoringState = WalletRestoringState.NONE, + topAppBarSubTitleState = TopAppBarSubTitleState.None, walletSnapshot = WalletSnapshotFixture.new( saplingBalance = diff --git a/ui-lib/src/androidTest/java/co/electriccoin/zcash/ui/screen/send/integration/SendViewIntegrationTest.kt b/ui-lib/src/androidTest/java/co/electriccoin/zcash/ui/screen/send/integration/SendViewIntegrationTest.kt index 57874c17..4eb644cd 100644 --- a/ui-lib/src/androidTest/java/co/electriccoin/zcash/ui/screen/send/integration/SendViewIntegrationTest.kt +++ b/ui-lib/src/androidTest/java/co/electriccoin/zcash/ui/screen/send/integration/SendViewIntegrationTest.kt @@ -11,7 +11,7 @@ import cash.z.ecc.android.sdk.model.MonetarySeparators import cash.z.ecc.android.sdk.model.Zatoshi import cash.z.ecc.android.sdk.model.ZcashNetwork import cash.z.ecc.sdk.fixture.ZecSendFixture -import co.electriccoin.zcash.ui.common.model.WalletRestoringState +import co.electriccoin.zcash.ui.common.model.TopAppBarSubTitleState import co.electriccoin.zcash.ui.fixture.BalanceStateFixture import co.electriccoin.zcash.ui.fixture.MockSynchronizer import co.electriccoin.zcash.ui.fixture.WalletSnapshotFixture @@ -79,7 +79,7 @@ class SendViewIntegrationTest { goSendConfirmation = {}, hasCameraFeature = true, monetarySeparators = monetarySeparators, - walletRestoringState = WalletRestoringState.NONE, + topAppBarSubTitleState = TopAppBarSubTitleState.None, ) } diff --git a/ui-lib/src/androidTest/java/co/electriccoin/zcash/ui/screen/settings/SettingsViewTestSetup.kt b/ui-lib/src/androidTest/java/co/electriccoin/zcash/ui/screen/settings/SettingsViewTestSetup.kt index 221d0171..b6259bc8 100644 --- a/ui-lib/src/androidTest/java/co/electriccoin/zcash/ui/screen/settings/SettingsViewTestSetup.kt +++ b/ui-lib/src/androidTest/java/co/electriccoin/zcash/ui/screen/settings/SettingsViewTestSetup.kt @@ -1,7 +1,7 @@ package co.electriccoin.zcash.ui.screen.settings import androidx.compose.ui.test.junit4.ComposeContentTestRule -import co.electriccoin.zcash.ui.common.model.WalletRestoringState +import co.electriccoin.zcash.ui.common.model.TopAppBarSubTitleState import co.electriccoin.zcash.ui.design.theme.ZcashTheme import co.electriccoin.zcash.ui.screen.settings.model.TroubleshootingParameters import co.electriccoin.zcash.ui.screen.settings.view.Settings @@ -89,7 +89,7 @@ class SettingsViewTestSetup( onAnalyticsSettingsChanged = { onAnalyticsChangedCount.incrementAndGet() }, - walletRestoringState = WalletRestoringState.NONE + topAppBarSubTitleState = TopAppBarSubTitleState.None, ) } } diff --git a/ui-lib/src/androidTest/java/co/electriccoin/zcash/ui/screen/support/view/SupportViewTestSetup.kt b/ui-lib/src/androidTest/java/co/electriccoin/zcash/ui/screen/support/view/SupportViewTestSetup.kt index ef75943f..deb2a4da 100644 --- a/ui-lib/src/androidTest/java/co/electriccoin/zcash/ui/screen/support/view/SupportViewTestSetup.kt +++ b/ui-lib/src/androidTest/java/co/electriccoin/zcash/ui/screen/support/view/SupportViewTestSetup.kt @@ -3,7 +3,7 @@ package co.electriccoin.zcash.ui.screen.support.view import androidx.compose.material3.SnackbarHostState import androidx.compose.runtime.Composable import androidx.compose.ui.test.junit4.ComposeContentTestRule -import co.electriccoin.zcash.ui.common.model.WalletRestoringState +import co.electriccoin.zcash.ui.common.model.TopAppBarSubTitleState import co.electriccoin.zcash.ui.design.theme.ZcashTheme import java.util.concurrent.atomic.AtomicInteger import java.util.concurrent.atomic.AtomicReference @@ -47,7 +47,7 @@ class SupportViewTestSetup(private val composeTestRule: ComposeContentTestRule) onSendMessage.set(it) }, snackbarHostState = SnackbarHostState(), - walletRestoringState = WalletRestoringState.NONE + topAppBarSubTitleState = TopAppBarSubTitleState.None, ) } diff --git a/ui-lib/src/main/java/co/electriccoin/zcash/ui/common/model/TopAppBarSubTitleState.kt b/ui-lib/src/main/java/co/electriccoin/zcash/ui/common/model/TopAppBarSubTitleState.kt new file mode 100644 index 00000000..d5ac30d7 --- /dev/null +++ b/ui-lib/src/main/java/co/electriccoin/zcash/ui/common/model/TopAppBarSubTitleState.kt @@ -0,0 +1,9 @@ +package co.electriccoin.zcash.ui.common.model + +sealed class TopAppBarSubTitleState { + data object None : TopAppBarSubTitleState() + + data object Disconnected : TopAppBarSubTitleState() + + data object Restoring : TopAppBarSubTitleState() +} diff --git a/ui-lib/src/main/java/co/electriccoin/zcash/ui/common/viewmodel/WalletViewModel.kt b/ui-lib/src/main/java/co/electriccoin/zcash/ui/common/viewmodel/WalletViewModel.kt index 34d48afb..d1ef6551 100644 --- a/ui-lib/src/main/java/co/electriccoin/zcash/ui/common/viewmodel/WalletViewModel.kt +++ b/ui-lib/src/main/java/co/electriccoin/zcash/ui/common/viewmodel/WalletViewModel.kt @@ -32,6 +32,7 @@ import co.electriccoin.zcash.ui.common.ANDROID_STATE_FLOW_TIMEOUT import co.electriccoin.zcash.ui.common.compose.BalanceState import co.electriccoin.zcash.ui.common.extension.throttle import co.electriccoin.zcash.ui.common.model.OnboardingState +import co.electriccoin.zcash.ui.common.model.TopAppBarSubTitleState import co.electriccoin.zcash.ui.common.model.WalletRestoringState import co.electriccoin.zcash.ui.common.model.WalletSnapshot import co.electriccoin.zcash.ui.common.model.hasChangePending @@ -124,6 +125,32 @@ class WalletViewModel(application: Application) : AndroidViewModel(application) WalletRestoringState.NONE ) + /** + * A flow of the wallet current state information that should be displayed in screens top app bar. + */ + @OptIn(ExperimentalCoroutinesApi::class) + val walletStateInformation: StateFlow = + synchronizer + .filterNotNull() + .flatMapLatest { synchronizer -> + combine( + synchronizer.status, + walletRestoringState + ) { status: Synchronizer.Status?, walletRestoringState: WalletRestoringState -> + if (Synchronizer.Status.DISCONNECTED == status) { + TopAppBarSubTitleState.Disconnected + } else if (WalletRestoringState.RESTORING == walletRestoringState) { + TopAppBarSubTitleState.Restoring + } else { + TopAppBarSubTitleState.None + } + } + }.stateIn( + viewModelScope, + SharingStarted.WhileSubscribed(ANDROID_STATE_FLOW_TIMEOUT), + TopAppBarSubTitleState.None + ) + /** * A flow of the wallet onboarding state. */ diff --git a/ui-lib/src/main/java/co/electriccoin/zcash/ui/screen/about/AndroidAboutView.kt b/ui-lib/src/main/java/co/electriccoin/zcash/ui/screen/about/AndroidAboutView.kt index cb1b504c..a5ad0bd7 100644 --- a/ui-lib/src/main/java/co/electriccoin/zcash/ui/screen/about/AndroidAboutView.kt +++ b/ui-lib/src/main/java/co/electriccoin/zcash/ui/screen/about/AndroidAboutView.kt @@ -14,8 +14,8 @@ import androidx.lifecycle.compose.collectAsStateWithLifecycle import co.electriccoin.zcash.configuration.AndroidConfigurationFactory import co.electriccoin.zcash.ui.MainActivity import co.electriccoin.zcash.ui.R +import co.electriccoin.zcash.ui.common.model.TopAppBarSubTitleState import co.electriccoin.zcash.ui.common.model.VersionInfo -import co.electriccoin.zcash.ui.common.model.WalletRestoringState import co.electriccoin.zcash.ui.common.viewmodel.WalletViewModel import co.electriccoin.zcash.ui.screen.about.util.WebBrowserUtil import co.electriccoin.zcash.ui.screen.about.view.About @@ -27,12 +27,12 @@ import kotlinx.coroutines.launch internal fun MainActivity.WrapAbout(goBack: () -> Unit) { val walletViewModel by viewModels() - val walletRestoringState = walletViewModel.walletRestoringState.collectAsStateWithLifecycle().value + val walletState = walletViewModel.walletStateInformation.collectAsStateWithLifecycle().value WrapAbout( activity = this, goBack = goBack, - walletRestoringState = walletRestoringState + topAppBarSubTitleState = walletState ) } @@ -40,7 +40,7 @@ internal fun MainActivity.WrapAbout(goBack: () -> Unit) { internal fun WrapAbout( activity: ComponentActivity, goBack: () -> Unit, - walletRestoringState: WalletRestoringState, + topAppBarSubTitleState: TopAppBarSubTitleState, ) { val configInfo = ConfigInfo.new(AndroidConfigurationFactory.getInstance(activity.applicationContext)) val versionInfo = VersionInfo.new(activity.applicationContext) @@ -66,7 +66,7 @@ internal fun WrapAbout( ) }, snackbarHostState = snackbarHostState, - walletRestoringState = walletRestoringState, + topAppBarSubTitleState = topAppBarSubTitleState, ) } diff --git a/ui-lib/src/main/java/co/electriccoin/zcash/ui/screen/about/view/AboutView.kt b/ui-lib/src/main/java/co/electriccoin/zcash/ui/screen/about/view/AboutView.kt index ae844b14..2f516ff3 100644 --- a/ui-lib/src/main/java/co/electriccoin/zcash/ui/screen/about/view/AboutView.kt +++ b/ui-lib/src/main/java/co/electriccoin/zcash/ui/screen/about/view/AboutView.kt @@ -39,8 +39,8 @@ import androidx.compose.ui.text.style.TextDecoration import androidx.compose.ui.text.withStyle import androidx.compose.ui.tooling.preview.Preview import co.electriccoin.zcash.ui.R +import co.electriccoin.zcash.ui.common.model.TopAppBarSubTitleState import co.electriccoin.zcash.ui.common.model.VersionInfo -import co.electriccoin.zcash.ui.common.model.WalletRestoringState import co.electriccoin.zcash.ui.design.component.BlankBgScaffold import co.electriccoin.zcash.ui.design.component.SmallTopAppBar import co.electriccoin.zcash.ui.design.theme.ZcashTheme @@ -57,8 +57,8 @@ private fun AboutPreview() { configInfo = ConfigInfoFixture.new(), onPrivacyPolicy = {}, snackbarHostState = SnackbarHostState(), + topAppBarSubTitleState = TopAppBarSubTitleState.None, versionInfo = VersionInfoFixture.new(), - walletRestoringState = WalletRestoringState.NONE ) } } @@ -70,8 +70,8 @@ fun About( configInfo: ConfigInfo, onPrivacyPolicy: () -> Unit, snackbarHostState: SnackbarHostState, + topAppBarSubTitleState: TopAppBarSubTitleState, versionInfo: VersionInfo, - walletRestoringState: WalletRestoringState, ) { BlankBgScaffold( topBar = { @@ -79,7 +79,7 @@ fun About( onBack = onBack, versionInfo = versionInfo, configInfo = configInfo, - showRestoring = walletRestoringState == WalletRestoringState.RESTORING, + subTitleState = topAppBarSubTitleState, ) }, snackbarHost = { SnackbarHost(snackbarHostState) }, @@ -108,14 +108,14 @@ private fun AboutTopAppBar( onBack: () -> Unit, versionInfo: VersionInfo, configInfo: ConfigInfo, - showRestoring: Boolean + subTitleState: TopAppBarSubTitleState ) { SmallTopAppBar( - restoringLabel = - if (showRestoring) { - stringResource(id = R.string.restoring_wallet_label) - } else { - null + subTitle = + when (subTitleState) { + TopAppBarSubTitleState.Disconnected -> stringResource(id = R.string.disconnected_label) + TopAppBarSubTitleState.Restoring -> stringResource(id = R.string.restoring_wallet_label) + TopAppBarSubTitleState.None -> null }, titleText = stringResource(id = R.string.about_title).uppercase(), backText = stringResource(id = R.string.about_back).uppercase(), diff --git a/ui-lib/src/main/java/co/electriccoin/zcash/ui/screen/account/AndroidAccount.kt b/ui-lib/src/main/java/co/electriccoin/zcash/ui/screen/account/AndroidAccount.kt index 5aff9689..ea6a60fd 100644 --- a/ui-lib/src/main/java/co/electriccoin/zcash/ui/screen/account/AndroidAccount.kt +++ b/ui-lib/src/main/java/co/electriccoin/zcash/ui/screen/account/AndroidAccount.kt @@ -16,6 +16,7 @@ import cash.z.ecc.android.sdk.internal.Twig import co.electriccoin.zcash.spackle.ClipboardManagerUtil import co.electriccoin.zcash.ui.R import co.electriccoin.zcash.ui.common.compose.BalanceState +import co.electriccoin.zcash.ui.common.model.TopAppBarSubTitleState import co.electriccoin.zcash.ui.common.model.WalletRestoringState import co.electriccoin.zcash.ui.common.model.WalletSnapshot import co.electriccoin.zcash.ui.common.viewmodel.WalletViewModel @@ -50,6 +51,8 @@ internal fun WrapAccount( val walletRestoringState = walletViewModel.walletRestoringState.collectAsStateWithLifecycle().value + val walletState = walletViewModel.walletStateInformation.collectAsStateWithLifecycle().value + val balanceState = walletViewModel.balanceState.collectAsStateWithLifecycle().value val walletSnapshot = walletViewModel.walletSnapshot.collectAsStateWithLifecycle().value @@ -60,6 +63,7 @@ internal fun WrapAccount( goBalances = goBalances, goSettings = goSettings, synchronizer = synchronizer, + topAppBarSubTitleState = walletState, transactionHistoryViewModel = transactionHistoryViewModel, transactionsUiState = transactionsUiState, walletRestoringState = walletRestoringState, @@ -80,6 +84,7 @@ internal fun WrapAccount( goSettings: () -> Unit, transactionsUiState: TransactionUiState, synchronizer: Synchronizer?, + topAppBarSubTitleState: TopAppBarSubTitleState, transactionHistoryViewModel: TransactionHistoryViewModel, walletRestoringState: WalletRestoringState, walletSnapshot: WalletSnapshot? @@ -159,6 +164,7 @@ internal fun WrapAccount( goBalances = goBalances, goSettings = goSettings, snackbarHostState = snackbarHostState, + topAppBarSubTitleState = topAppBarSubTitleState, walletRestoringState = walletRestoringState, walletSnapshot = walletSnapshot ) diff --git a/ui-lib/src/main/java/co/electriccoin/zcash/ui/screen/account/view/AccountView.kt b/ui-lib/src/main/java/co/electriccoin/zcash/ui/screen/account/view/AccountView.kt index 9d75f0ac..9d267afe 100644 --- a/ui-lib/src/main/java/co/electriccoin/zcash/ui/screen/account/view/AccountView.kt +++ b/ui-lib/src/main/java/co/electriccoin/zcash/ui/screen/account/view/AccountView.kt @@ -21,6 +21,7 @@ import co.electriccoin.zcash.ui.R import co.electriccoin.zcash.ui.common.compose.BalanceState import co.electriccoin.zcash.ui.common.compose.BalanceWidget import co.electriccoin.zcash.ui.common.compose.StatusDialog +import co.electriccoin.zcash.ui.common.model.TopAppBarSubTitleState import co.electriccoin.zcash.ui.common.model.WalletRestoringState import co.electriccoin.zcash.ui.common.model.WalletSnapshot import co.electriccoin.zcash.ui.common.test.CommonTag @@ -47,6 +48,7 @@ private fun HistoryLoadingComposablePreview() { onStatusClick = {}, onTransactionItemAction = {}, snackbarHostState = SnackbarHostState(), + topAppBarSubTitleState = TopAppBarSubTitleState.None, transactionsUiState = TransactionUiState.Loading, walletRestoringState = WalletRestoringState.SYNCING, walletSnapshot = WalletSnapshotFixture.new(), @@ -72,6 +74,7 @@ private fun HistoryListComposablePreview() { onStatusClick = {}, onTransactionItemAction = {}, snackbarHostState = SnackbarHostState(), + topAppBarSubTitleState = TopAppBarSubTitleState.None, transactionsUiState = TransactionUiState.Done(transactions = TransactionsFixture.new()), walletRestoringState = WalletRestoringState.NONE, walletSnapshot = WalletSnapshotFixture.new(), @@ -90,6 +93,7 @@ internal fun Account( onStatusClick: (StatusAction) -> Unit, onTransactionItemAction: (TrxItemAction) -> Unit, snackbarHostState: SnackbarHostState, + topAppBarSubTitleState: TopAppBarSubTitleState, transactionsUiState: TransactionUiState, walletRestoringState: WalletRestoringState, walletSnapshot: WalletSnapshot, @@ -97,8 +101,8 @@ internal fun Account( BlankBgScaffold( topBar = { AccountTopAppBar( - showRestoring = walletRestoringState == WalletRestoringState.RESTORING, - onSettings = goSettings + onSettings = goSettings, + subTitleState = topAppBarSubTitleState, ) }, snackbarHost = { @@ -111,7 +115,7 @@ internal fun Account( onStatusClick = onStatusClick, onTransactionItemAction = onTransactionItemAction, transactionState = transactionsUiState, - walletRestoringState = walletRestoringState, + isWalletRestoringState = walletRestoringState, walletSnapshot = walletSnapshot, modifier = Modifier.padding( @@ -134,14 +138,14 @@ internal fun Account( @Composable private fun AccountTopAppBar( onSettings: () -> Unit, - showRestoring: Boolean + subTitleState: TopAppBarSubTitleState ) { SmallTopAppBar( - restoringLabel = - if (showRestoring) { - stringResource(id = R.string.restoring_wallet_label) - } else { - null + subTitle = + when (subTitleState) { + TopAppBarSubTitleState.Disconnected -> stringResource(id = R.string.disconnected_label) + TopAppBarSubTitleState.Restoring -> stringResource(id = R.string.restoring_wallet_label) + TopAppBarSubTitleState.None -> null }, showTitleLogo = true, hamburgerMenuActions = { @@ -166,7 +170,7 @@ private fun AccountMainContent( onTransactionItemAction: (TrxItemAction) -> Unit, onStatusClick: (StatusAction) -> Unit, transactionState: TransactionUiState, - walletRestoringState: WalletRestoringState, + isWalletRestoringState: WalletRestoringState, walletSnapshot: WalletSnapshot, modifier: Modifier = Modifier, ) { @@ -190,7 +194,7 @@ private fun AccountMainContent( onStatusClick = onStatusClick, onTransactionItemAction = onTransactionItemAction, transactionState = transactionState, - walletRestoringState = walletRestoringState, + walletRestoringState = isWalletRestoringState, walletSnapshot = walletSnapshot, ) } diff --git a/ui-lib/src/main/java/co/electriccoin/zcash/ui/screen/advancedsettings/AndroidAdvancedSettings.kt b/ui-lib/src/main/java/co/electriccoin/zcash/ui/screen/advancedsettings/AndroidAdvancedSettings.kt index 2a596609..f944ce4b 100644 --- a/ui-lib/src/main/java/co/electriccoin/zcash/ui/screen/advancedsettings/AndroidAdvancedSettings.kt +++ b/ui-lib/src/main/java/co/electriccoin/zcash/ui/screen/advancedsettings/AndroidAdvancedSettings.kt @@ -7,7 +7,7 @@ import androidx.activity.viewModels import androidx.compose.runtime.Composable import androidx.lifecycle.compose.collectAsStateWithLifecycle import co.electriccoin.zcash.ui.MainActivity -import co.electriccoin.zcash.ui.common.model.WalletRestoringState +import co.electriccoin.zcash.ui.common.model.TopAppBarSubTitleState import co.electriccoin.zcash.ui.common.viewmodel.WalletViewModel import co.electriccoin.zcash.ui.screen.advancedsettings.view.AdvancedSettings @@ -21,7 +21,7 @@ internal fun MainActivity.WrapAdvancedSettings( ) { val walletViewModel by viewModels() - val walletRestoringState = walletViewModel.walletRestoringState.collectAsStateWithLifecycle().value + val walletState = walletViewModel.walletStateInformation.collectAsStateWithLifecycle().value WrapAdvancedSettings( goBack = goBack, @@ -29,7 +29,7 @@ internal fun MainActivity.WrapAdvancedSettings( goExportPrivateData = goExportPrivateData, goChooseServer = goChooseServer, goSeedRecovery = goSeedRecovery, - walletRestoringState = walletRestoringState, + topAppBarSubTitleState = walletState ) } @@ -41,7 +41,7 @@ private fun WrapAdvancedSettings( goChooseServer: () -> Unit, goSeedRecovery: () -> Unit, goDeleteWallet: () -> Unit, - walletRestoringState: WalletRestoringState, + topAppBarSubTitleState: TopAppBarSubTitleState, ) { BackHandler { goBack() @@ -53,6 +53,6 @@ private fun WrapAdvancedSettings( onExportPrivateData = goExportPrivateData, onChooseServer = goChooseServer, onSeedRecovery = goSeedRecovery, - walletRestoringState = walletRestoringState, + topAppBarSubTitleState = topAppBarSubTitleState, ) } diff --git a/ui-lib/src/main/java/co/electriccoin/zcash/ui/screen/advancedsettings/view/AdvancedSettingsView.kt b/ui-lib/src/main/java/co/electriccoin/zcash/ui/screen/advancedsettings/view/AdvancedSettingsView.kt index dcc65a7e..4058ad38 100644 --- a/ui-lib/src/main/java/co/electriccoin/zcash/ui/screen/advancedsettings/view/AdvancedSettingsView.kt +++ b/ui-lib/src/main/java/co/electriccoin/zcash/ui/screen/advancedsettings/view/AdvancedSettingsView.kt @@ -18,7 +18,7 @@ import androidx.compose.ui.res.stringResource import androidx.compose.ui.text.style.TextAlign import androidx.compose.ui.tooling.preview.Preview import co.electriccoin.zcash.ui.R -import co.electriccoin.zcash.ui.common.model.WalletRestoringState +import co.electriccoin.zcash.ui.common.model.TopAppBarSubTitleState import co.electriccoin.zcash.ui.design.MINIMAL_WEIGHT import co.electriccoin.zcash.ui.design.component.BlankBgScaffold import co.electriccoin.zcash.ui.design.component.PrimaryButton @@ -40,7 +40,7 @@ private fun PreviewAdvancedSettings() { onExportPrivateData = {}, onChooseServer = {}, onSeedRecovery = {}, - walletRestoringState = WalletRestoringState.NONE + topAppBarSubTitleState = TopAppBarSubTitleState.None ) } } @@ -53,13 +53,13 @@ fun AdvancedSettings( onExportPrivateData: () -> Unit, onChooseServer: () -> Unit, onSeedRecovery: () -> Unit, - walletRestoringState: WalletRestoringState, + topAppBarSubTitleState: TopAppBarSubTitleState, ) { BlankBgScaffold( topBar = { AdvancedSettingsTopAppBar( onBack = onBack, - showRestoring = walletRestoringState == WalletRestoringState.RESTORING, + subTitleState = topAppBarSubTitleState, ) } ) { paddingValues -> @@ -86,14 +86,14 @@ fun AdvancedSettings( @Composable private fun AdvancedSettingsTopAppBar( onBack: () -> Unit, - showRestoring: Boolean + subTitleState: TopAppBarSubTitleState ) { SmallTopAppBar( - restoringLabel = - if (showRestoring) { - stringResource(id = R.string.restoring_wallet_label) - } else { - null + subTitle = + when (subTitleState) { + TopAppBarSubTitleState.Disconnected -> stringResource(id = R.string.disconnected_label) + TopAppBarSubTitleState.Restoring -> stringResource(id = R.string.restoring_wallet_label) + TopAppBarSubTitleState.None -> null }, modifier = Modifier.testTag(AdvancedSettingsTag.ADVANCED_SETTINGS_TOP_APP_BAR), showTitleLogo = true, diff --git a/ui-lib/src/main/java/co/electriccoin/zcash/ui/screen/balances/AndroidBalances.kt b/ui-lib/src/main/java/co/electriccoin/zcash/ui/screen/balances/AndroidBalances.kt index 82574ba0..294e017f 100644 --- a/ui-lib/src/main/java/co/electriccoin/zcash/ui/screen/balances/AndroidBalances.kt +++ b/ui-lib/src/main/java/co/electriccoin/zcash/ui/screen/balances/AndroidBalances.kt @@ -22,6 +22,7 @@ import co.electriccoin.zcash.spackle.Twig import co.electriccoin.zcash.ui.MainActivity import co.electriccoin.zcash.ui.R import co.electriccoin.zcash.ui.common.compose.BalanceState +import co.electriccoin.zcash.ui.common.model.TopAppBarSubTitleState import co.electriccoin.zcash.ui.common.model.WalletRestoringState import co.electriccoin.zcash.ui.common.model.WalletSnapshot import co.electriccoin.zcash.ui.common.viewmodel.CheckUpdateViewModel @@ -60,6 +61,8 @@ internal fun WrapBalances( val walletRestoringState = walletViewModel.walletRestoringState.collectAsStateWithLifecycle().value + val walletState = walletViewModel.walletStateInformation.collectAsStateWithLifecycle().value + val checkUpdateViewModel by activity.viewModels { CheckUpdateViewModel.CheckUpdateViewModelFactory( activity.application, @@ -78,6 +81,7 @@ internal fun WrapBalances( lifecycleScope = activity.lifecycleScope, spendingKey = spendingKey, synchronizer = synchronizer, + topAppBarSubTitleState = walletState, walletSnapshot = walletSnapshot, walletRestoringState = walletRestoringState, ) @@ -98,6 +102,7 @@ internal fun WrapBalances( lifecycleScope: CoroutineScope, spendingKey: UnifiedSpendingKey?, synchronizer: Synchronizer?, + topAppBarSubTitleState: TopAppBarSubTitleState, walletSnapshot: WalletSnapshot?, walletRestoringState: WalletRestoringState, ) { @@ -232,6 +237,7 @@ internal fun WrapBalances( } }, shieldState = shieldState, + topAppBarSubTitleState = topAppBarSubTitleState, walletSnapshot = walletSnapshot, walletRestoringState = walletRestoringState, ) diff --git a/ui-lib/src/main/java/co/electriccoin/zcash/ui/screen/balances/view/BalancesView.kt b/ui-lib/src/main/java/co/electriccoin/zcash/ui/screen/balances/view/BalancesView.kt index 48a1f499..b6414fb2 100644 --- a/ui-lib/src/main/java/co/electriccoin/zcash/ui/screen/balances/view/BalancesView.kt +++ b/ui-lib/src/main/java/co/electriccoin/zcash/ui/screen/balances/view/BalancesView.kt @@ -58,6 +58,7 @@ import co.electriccoin.zcash.ui.common.compose.BalanceState import co.electriccoin.zcash.ui.common.compose.BalanceWidget import co.electriccoin.zcash.ui.common.compose.StatusDialog import co.electriccoin.zcash.ui.common.compose.SynchronizationStatus +import co.electriccoin.zcash.ui.common.model.TopAppBarSubTitleState import co.electriccoin.zcash.ui.common.model.WalletRestoringState import co.electriccoin.zcash.ui.common.model.WalletSnapshot import co.electriccoin.zcash.ui.common.model.changePendingBalance @@ -104,6 +105,7 @@ private fun ComposableBalancesPreview() { onStatusClick = {}, shieldState = ShieldState.Available, snackbarHostState = SnackbarHostState(), + topAppBarSubTitleState = TopAppBarSubTitleState.None, walletSnapshot = WalletSnapshotFixture.new(), walletRestoringState = WalletRestoringState.NONE, ) @@ -127,6 +129,7 @@ private fun ComposableBalancesShieldFailurePreview() { onStatusClick = {}, shieldState = ShieldState.Available, snackbarHostState = SnackbarHostState(), + topAppBarSubTitleState = TopAppBarSubTitleState.None, walletSnapshot = WalletSnapshotFixture.new(), walletRestoringState = WalletRestoringState.NONE, ) @@ -161,14 +164,15 @@ fun Balances( onStatusClick: (StatusAction) -> Unit, shieldState: ShieldState, snackbarHostState: SnackbarHostState, + topAppBarSubTitleState: TopAppBarSubTitleState, walletSnapshot: WalletSnapshot?, walletRestoringState: WalletRestoringState, ) { BlankBgScaffold( topBar = { BalancesTopAppBar( - showRestoring = walletRestoringState == WalletRestoringState.RESTORING, - onSettings = onSettings + onSettings = onSettings, + subTitleState = topAppBarSubTitleState, ) }, snackbarHost = { @@ -250,14 +254,14 @@ fun ShieldingErrorDialog( @Composable private fun BalancesTopAppBar( onSettings: () -> Unit, - showRestoring: Boolean + subTitleState: TopAppBarSubTitleState ) { SmallTopAppBar( - restoringLabel = - if (showRestoring) { - stringResource(id = R.string.restoring_wallet_label) - } else { - null + subTitle = + when (subTitleState) { + TopAppBarSubTitleState.Disconnected -> stringResource(id = R.string.disconnected_label) + TopAppBarSubTitleState.Restoring -> stringResource(id = R.string.restoring_wallet_label) + TopAppBarSubTitleState.None -> null }, titleText = stringResource(id = R.string.balances_title), showTitleLogo = false, diff --git a/ui-lib/src/main/java/co/electriccoin/zcash/ui/screen/chooseserver/AndroidChooseServer.kt b/ui-lib/src/main/java/co/electriccoin/zcash/ui/screen/chooseserver/AndroidChooseServer.kt index 90db57e9..d1757eec 100644 --- a/ui-lib/src/main/java/co/electriccoin/zcash/ui/screen/chooseserver/AndroidChooseServer.kt +++ b/ui-lib/src/main/java/co/electriccoin/zcash/ui/screen/chooseserver/AndroidChooseServer.kt @@ -19,7 +19,7 @@ import cash.z.ecc.android.sdk.model.ZcashNetwork import cash.z.ecc.android.sdk.type.ServerValidation import cash.z.ecc.sdk.type.fromResources import co.electriccoin.zcash.ui.MainActivity -import co.electriccoin.zcash.ui.common.model.WalletRestoringState +import co.electriccoin.zcash.ui.common.model.TopAppBarSubTitleState import co.electriccoin.zcash.ui.common.viewmodel.SecretState import co.electriccoin.zcash.ui.common.viewmodel.WalletViewModel import co.electriccoin.zcash.ui.design.component.CircularScreenProgressIndicator @@ -34,7 +34,7 @@ internal fun MainActivity.WrapChooseServer(goBack: () -> Unit) { val synchronizer = walletViewModel.synchronizer.collectAsStateWithLifecycle().value - val walletRestoringState = walletViewModel.walletRestoringState.collectAsStateWithLifecycle().value + val walletState = walletViewModel.walletStateInformation.collectAsStateWithLifecycle().value WrapChooseServer( activity = this, @@ -47,7 +47,7 @@ internal fun MainActivity.WrapChooseServer(goBack: () -> Unit) { onWalletPersist = { walletViewModel.persistExistingWallet(it) }, - walletRestoringState = walletRestoringState + topAppBarSubTitleState = walletState ) } @@ -60,7 +60,7 @@ private fun WrapChooseServer( onWalletPersist: (PersistableWallet) -> Unit, secretState: SecretState, synchronizer: Synchronizer?, - walletRestoringState: WalletRestoringState, + topAppBarSubTitleState: TopAppBarSubTitleState, ) { if (synchronizer == null || secretState !is SecretState.Ready) { // TODO [#1146]: Consider moving CircularScreenProgressIndicator from Android layer to View layer @@ -128,7 +128,7 @@ private fun WrapChooseServer( setShowErrorDialog = setShowErrorDialog, isShowingSuccessDialog = isShowingSuccessDialog, setShowSuccessDialog = setShowSuccessDialog, - walletRestoringState = walletRestoringState + topAppBarSubTitleState = topAppBarSubTitleState, ) } } diff --git a/ui-lib/src/main/java/co/electriccoin/zcash/ui/screen/chooseserver/view/ChooseServerView.kt b/ui-lib/src/main/java/co/electriccoin/zcash/ui/screen/chooseserver/view/ChooseServerView.kt index d336eb8d..c2d7e78d 100644 --- a/ui-lib/src/main/java/co/electriccoin/zcash/ui/screen/chooseserver/view/ChooseServerView.kt +++ b/ui-lib/src/main/java/co/electriccoin/zcash/ui/screen/chooseserver/view/ChooseServerView.kt @@ -38,7 +38,7 @@ import cash.z.ecc.sdk.extension.isValid import cash.z.ecc.sdk.fixture.PersistableWalletFixture import co.electriccoin.lightwallet.client.model.LightWalletEndpoint import co.electriccoin.zcash.ui.R -import co.electriccoin.zcash.ui.common.model.WalletRestoringState +import co.electriccoin.zcash.ui.common.model.TopAppBarSubTitleState import co.electriccoin.zcash.ui.design.component.AppAlertDialog import co.electriccoin.zcash.ui.design.component.BlankBgScaffold import co.electriccoin.zcash.ui.design.component.FormTextField @@ -65,7 +65,7 @@ private fun PreviewChooseServer() { setShowErrorDialog = {}, isShowingSuccessDialog = false, setShowSuccessDialog = {}, - walletRestoringState = WalletRestoringState.NONE, + topAppBarSubTitleState = TopAppBarSubTitleState.None, ) } } @@ -82,7 +82,7 @@ fun ChooseServer( setShowErrorDialog: (Boolean) -> Unit, isShowingSuccessDialog: Boolean, setShowSuccessDialog: (Boolean) -> Unit, - walletRestoringState: WalletRestoringState, + topAppBarSubTitleState: TopAppBarSubTitleState, ) { val options = availableServers.toMutableList().apply { @@ -124,7 +124,7 @@ fun ChooseServer( topBar = { ChooseServerTopAppBar( onBack = onBack, - showRestoring = walletRestoringState == WalletRestoringState.RESTORING, + subTitleState = topAppBarSubTitleState, ) }, bottomBar = { @@ -221,15 +221,15 @@ fun ChooseServerBottomBar( @Composable private fun ChooseServerTopAppBar( onBack: () -> Unit, - showRestoring: Boolean + subTitleState: TopAppBarSubTitleState ) { SmallTopAppBar( titleText = stringResource(id = R.string.choose_server_title), - restoringLabel = - if (showRestoring) { - stringResource(id = R.string.restoring_wallet_label) - } else { - null + subTitle = + when (subTitleState) { + TopAppBarSubTitleState.Disconnected -> stringResource(id = R.string.disconnected_label) + TopAppBarSubTitleState.Restoring -> stringResource(id = R.string.restoring_wallet_label) + TopAppBarSubTitleState.None -> null }, modifier = Modifier.testTag(ChooseServerTag.CHOOSE_SERVER_TOP_APP_BAR), showTitleLogo = true, diff --git a/ui-lib/src/main/java/co/electriccoin/zcash/ui/screen/deletewallet/AndroidDeleteWallet.kt b/ui-lib/src/main/java/co/electriccoin/zcash/ui/screen/deletewallet/AndroidDeleteWallet.kt index e32140c4..29a95726 100644 --- a/ui-lib/src/main/java/co/electriccoin/zcash/ui/screen/deletewallet/AndroidDeleteWallet.kt +++ b/ui-lib/src/main/java/co/electriccoin/zcash/ui/screen/deletewallet/AndroidDeleteWallet.kt @@ -11,7 +11,7 @@ import androidx.lifecycle.compose.collectAsStateWithLifecycle import co.electriccoin.zcash.spackle.Twig import co.electriccoin.zcash.ui.MainActivity import co.electriccoin.zcash.ui.R -import co.electriccoin.zcash.ui.common.model.WalletRestoringState +import co.electriccoin.zcash.ui.common.model.TopAppBarSubTitleState import co.electriccoin.zcash.ui.common.viewmodel.WalletViewModel import co.electriccoin.zcash.ui.screen.deletewallet.view.DeleteWallet import kotlinx.coroutines.launch @@ -20,12 +20,12 @@ import kotlinx.coroutines.launch internal fun MainActivity.WrapDeleteWallet(goBack: () -> Unit) { val walletViewModel by viewModels() - val walletRestoringState = walletViewModel.walletRestoringState.collectAsStateWithLifecycle().value + val walletState = walletViewModel.walletStateInformation.collectAsStateWithLifecycle().value WrapDeleteWallet( activity = this, goBack = goBack, - walletRestoringState = walletRestoringState, + topAppBarSubTitleState = walletState, walletViewModel = walletViewModel, ) } @@ -34,7 +34,7 @@ internal fun MainActivity.WrapDeleteWallet(goBack: () -> Unit) { internal fun WrapDeleteWallet( activity: Activity, goBack: () -> Unit, - walletRestoringState: WalletRestoringState, + topAppBarSubTitleState: TopAppBarSubTitleState, walletViewModel: WalletViewModel, ) { val scope = rememberCoroutineScope() @@ -63,6 +63,6 @@ internal fun WrapDeleteWallet( } } }, - walletRestoringState = walletRestoringState + topAppBarSubTitleState = topAppBarSubTitleState, ) } diff --git a/ui-lib/src/main/java/co/electriccoin/zcash/ui/screen/deletewallet/view/DeleteWalletView.kt b/ui-lib/src/main/java/co/electriccoin/zcash/ui/screen/deletewallet/view/DeleteWalletView.kt index 0bd11c9e..d37fa65a 100644 --- a/ui-lib/src/main/java/co/electriccoin/zcash/ui/screen/deletewallet/view/DeleteWalletView.kt +++ b/ui-lib/src/main/java/co/electriccoin/zcash/ui/screen/deletewallet/view/DeleteWalletView.kt @@ -20,7 +20,7 @@ import androidx.compose.ui.Modifier import androidx.compose.ui.res.stringResource import androidx.compose.ui.tooling.preview.Preview import co.electriccoin.zcash.ui.R -import co.electriccoin.zcash.ui.common.model.WalletRestoringState +import co.electriccoin.zcash.ui.common.model.TopAppBarSubTitleState import co.electriccoin.zcash.ui.design.MINIMAL_WEIGHT import co.electriccoin.zcash.ui.design.component.Body import co.electriccoin.zcash.ui.design.component.CheckBox @@ -38,7 +38,7 @@ private fun ExportPrivateDataPreview() { snackbarHostState = SnackbarHostState(), onBack = {}, onConfirm = {}, - walletRestoringState = WalletRestoringState.NONE, + topAppBarSubTitleState = TopAppBarSubTitleState.None, ) } } @@ -48,13 +48,13 @@ fun DeleteWallet( snackbarHostState: SnackbarHostState, onBack: () -> Unit, onConfirm: () -> Unit, - walletRestoringState: WalletRestoringState, + topAppBarSubTitleState: TopAppBarSubTitleState, ) { GridBgScaffold( topBar = { DeleteWalletDataTopAppBar( onBack = onBack, - showRestoring = walletRestoringState == WalletRestoringState.RESTORING, + subTitleState = topAppBarSubTitleState, ) }, snackbarHost = { SnackbarHost(snackbarHostState) }, @@ -78,14 +78,14 @@ fun DeleteWallet( @Composable private fun DeleteWalletDataTopAppBar( onBack: () -> Unit, - showRestoring: Boolean + subTitleState: TopAppBarSubTitleState ) { GridBgSmallTopAppBar( - restoringLabel = - if (showRestoring) { - stringResource(id = R.string.restoring_wallet_label) - } else { - null + subTitle = + when (subTitleState) { + TopAppBarSubTitleState.Disconnected -> stringResource(id = R.string.disconnected_label) + TopAppBarSubTitleState.Restoring -> stringResource(id = R.string.restoring_wallet_label) + TopAppBarSubTitleState.None -> null }, backText = stringResource(R.string.delete_wallet_back).uppercase(), backContentDescriptionText = stringResource(R.string.delete_wallet_back_content_description), diff --git a/ui-lib/src/main/java/co/electriccoin/zcash/ui/screen/exportdata/AndroidExportPrivateData.kt b/ui-lib/src/main/java/co/electriccoin/zcash/ui/screen/exportdata/AndroidExportPrivateData.kt index 33242adc..cf2bc816 100644 --- a/ui-lib/src/main/java/co/electriccoin/zcash/ui/screen/exportdata/AndroidExportPrivateData.kt +++ b/ui-lib/src/main/java/co/electriccoin/zcash/ui/screen/exportdata/AndroidExportPrivateData.kt @@ -15,8 +15,8 @@ import cash.z.ecc.android.sdk.model.ZcashNetwork import cash.z.ecc.sdk.type.fromResources import co.electriccoin.zcash.ui.MainActivity import co.electriccoin.zcash.ui.R +import co.electriccoin.zcash.ui.common.model.TopAppBarSubTitleState import co.electriccoin.zcash.ui.common.model.VersionInfo -import co.electriccoin.zcash.ui.common.model.WalletRestoringState import co.electriccoin.zcash.ui.common.viewmodel.WalletViewModel import co.electriccoin.zcash.ui.design.component.CircularScreenProgressIndicator import co.electriccoin.zcash.ui.screen.exportdata.view.ExportPrivateData @@ -35,14 +35,14 @@ internal fun MainActivity.WrapExportPrivateData( val synchronizer = walletViewModel.synchronizer.collectAsStateWithLifecycle().value - val walletRestoringState = walletViewModel.walletRestoringState.collectAsStateWithLifecycle().value + val walletState = walletViewModel.walletStateInformation.collectAsStateWithLifecycle().value WrapExportPrivateData( this, goBack = goBack, onShare = onConfirm, synchronizer = synchronizer, - walletRestoringState = walletRestoringState, + topAppBarSubTitleState = walletState, ) } @@ -52,7 +52,7 @@ internal fun WrapExportPrivateData( goBack: () -> Unit, onShare: () -> Unit, synchronizer: Synchronizer?, - walletRestoringState: WalletRestoringState, + topAppBarSubTitleState: TopAppBarSubTitleState, ) { BackHandler { goBack() @@ -86,7 +86,7 @@ internal fun WrapExportPrivateData( } } }, - walletRestoringState = walletRestoringState + topAppBarSubTitleState = topAppBarSubTitleState, ) } } diff --git a/ui-lib/src/main/java/co/electriccoin/zcash/ui/screen/exportdata/view/ExportPrivateDataView.kt b/ui-lib/src/main/java/co/electriccoin/zcash/ui/screen/exportdata/view/ExportPrivateDataView.kt index c830d8d7..cdb5394e 100644 --- a/ui-lib/src/main/java/co/electriccoin/zcash/ui/screen/exportdata/view/ExportPrivateDataView.kt +++ b/ui-lib/src/main/java/co/electriccoin/zcash/ui/screen/exportdata/view/ExportPrivateDataView.kt @@ -22,7 +22,7 @@ import androidx.compose.ui.res.stringResource import androidx.compose.ui.tooling.preview.Preview import androidx.compose.ui.unit.sp import co.electriccoin.zcash.ui.R -import co.electriccoin.zcash.ui.common.model.WalletRestoringState +import co.electriccoin.zcash.ui.common.model.TopAppBarSubTitleState import co.electriccoin.zcash.ui.design.MINIMAL_WEIGHT import co.electriccoin.zcash.ui.design.component.Body import co.electriccoin.zcash.ui.design.component.CheckBox @@ -41,7 +41,7 @@ private fun ExportPrivateDataPreview() { onBack = {}, onAgree = {}, onConfirm = {}, - walletRestoringState = WalletRestoringState.NONE, + topAppBarSubTitleState = TopAppBarSubTitleState.None, ) } } @@ -55,13 +55,13 @@ fun ExportPrivateData( onBack: () -> Unit, onAgree: (Boolean) -> Unit, onConfirm: () -> Unit, - walletRestoringState: WalletRestoringState, + topAppBarSubTitleState: TopAppBarSubTitleState, ) { GridBgScaffold( topBar = { ExportPrivateDataTopAppBar( onBack = onBack, - showRestoring = walletRestoringState == WalletRestoringState.RESTORING, + subTitleState = topAppBarSubTitleState, ) }, snackbarHost = { SnackbarHost(snackbarHostState) }, @@ -86,14 +86,14 @@ fun ExportPrivateData( @Composable private fun ExportPrivateDataTopAppBar( onBack: () -> Unit, - showRestoring: Boolean + subTitleState: TopAppBarSubTitleState ) { GridBgSmallTopAppBar( - restoringLabel = - if (showRestoring) { - stringResource(id = R.string.restoring_wallet_label) - } else { - null + subTitle = + when (subTitleState) { + TopAppBarSubTitleState.Disconnected -> stringResource(id = R.string.disconnected_label) + TopAppBarSubTitleState.Restoring -> stringResource(id = R.string.restoring_wallet_label) + TopAppBarSubTitleState.None -> null }, backText = stringResource(R.string.export_data_back).uppercase(), backContentDescriptionText = stringResource(R.string.export_data_back_content_description), diff --git a/ui-lib/src/main/java/co/electriccoin/zcash/ui/screen/receive/AndroidReceive.kt b/ui-lib/src/main/java/co/electriccoin/zcash/ui/screen/receive/AndroidReceive.kt index ff99090f..485d5813 100644 --- a/ui-lib/src/main/java/co/electriccoin/zcash/ui/screen/receive/AndroidReceive.kt +++ b/ui-lib/src/main/java/co/electriccoin/zcash/ui/screen/receive/AndroidReceive.kt @@ -43,7 +43,7 @@ internal fun WrapReceive( val walletAddresses = walletViewModel.addresses.collectAsStateWithLifecycle().value - val walletRestoringState = walletViewModel.walletRestoringState.collectAsStateWithLifecycle().value + val walletState = walletViewModel.walletStateInformation.collectAsStateWithLifecycle().value val snackbarHostState = remember { SnackbarHostState() } val scope = rememberCoroutineScope() @@ -86,9 +86,9 @@ internal fun WrapReceive( }, onSettings = onSettings, snackbarHostState = snackbarHostState, + topAppBarSubTitleState = walletState, versionInfo = versionInfo, walletAddress = walletAddresses, - walletRestoringState = walletRestoringState, ) } diff --git a/ui-lib/src/main/java/co/electriccoin/zcash/ui/screen/receive/view/ReceiveView.kt b/ui-lib/src/main/java/co/electriccoin/zcash/ui/screen/receive/view/ReceiveView.kt index 208a08e5..74fc0bce 100644 --- a/ui-lib/src/main/java/co/electriccoin/zcash/ui/screen/receive/view/ReceiveView.kt +++ b/ui-lib/src/main/java/co/electriccoin/zcash/ui/screen/receive/view/ReceiveView.kt @@ -39,8 +39,8 @@ import co.electriccoin.zcash.ui.R import co.electriccoin.zcash.ui.common.compose.BrightenScreen import co.electriccoin.zcash.ui.common.compose.DisableScreenTimeout import co.electriccoin.zcash.ui.common.compose.ScreenBrightnessState +import co.electriccoin.zcash.ui.common.model.TopAppBarSubTitleState import co.electriccoin.zcash.ui.common.model.VersionInfo -import co.electriccoin.zcash.ui.common.model.WalletRestoringState import co.electriccoin.zcash.ui.common.test.CommonTag import co.electriccoin.zcash.ui.design.component.BlankBgScaffold import co.electriccoin.zcash.ui.design.component.CircularScreenProgressIndicator @@ -66,8 +66,8 @@ private fun ComposablePreview() { onAdjustBrightness = {}, onAddrCopyToClipboard = {}, onQrImageShare = {}, + topAppBarSubTitleState = TopAppBarSubTitleState.None, versionInfo = VersionInfoFixture.new(), - walletRestoringState = WalletRestoringState.NONE ) } } @@ -82,8 +82,8 @@ fun Receive( onAdjustBrightness: (ScreenBrightnessState) -> Unit, onAddrCopyToClipboard: (String) -> Unit, onQrImageShare: (ImageBitmap) -> Unit, + topAppBarSubTitleState: TopAppBarSubTitleState, versionInfo: VersionInfo, - walletRestoringState: WalletRestoringState, ) { BlankBgScaffold( topBar = { @@ -92,7 +92,7 @@ fun Receive( onBrightness = { onAdjustBrightness(screenBrightnessState.getChange()) }, - showRestoring = walletRestoringState == WalletRestoringState.RESTORING, + subTitleState = topAppBarSubTitleState, versionInfo = versionInfo, ) }, @@ -123,15 +123,15 @@ fun Receive( private fun ReceiveTopAppBar( onSettings: () -> Unit, onBrightness: () -> Unit, + subTitleState: TopAppBarSubTitleState, versionInfo: VersionInfo, - showRestoring: Boolean ) { SmallTopAppBar( - restoringLabel = - if (showRestoring) { - stringResource(id = R.string.restoring_wallet_label) - } else { - null + subTitle = + when (subTitleState) { + TopAppBarSubTitleState.Disconnected -> stringResource(id = R.string.disconnected_label) + TopAppBarSubTitleState.Restoring -> stringResource(id = R.string.restoring_wallet_label) + TopAppBarSubTitleState.None -> null }, titleText = stringResource(id = R.string.receive_title), hamburgerMenuActions = { diff --git a/ui-lib/src/main/java/co/electriccoin/zcash/ui/screen/scan/AndroidScan.kt b/ui-lib/src/main/java/co/electriccoin/zcash/ui/screen/scan/AndroidScan.kt index 45e9011a..c4262db6 100644 --- a/ui-lib/src/main/java/co/electriccoin/zcash/ui/screen/scan/AndroidScan.kt +++ b/ui-lib/src/main/java/co/electriccoin/zcash/ui/screen/scan/AndroidScan.kt @@ -15,7 +15,7 @@ import cash.z.ecc.android.sdk.type.AddressType import co.electriccoin.zcash.ui.MainActivity import co.electriccoin.zcash.ui.R import co.electriccoin.zcash.ui.common.model.SerializableAddress -import co.electriccoin.zcash.ui.common.model.WalletRestoringState +import co.electriccoin.zcash.ui.common.model.TopAppBarSubTitleState import co.electriccoin.zcash.ui.common.viewmodel.WalletViewModel import co.electriccoin.zcash.ui.design.component.CircularScreenProgressIndicator import co.electriccoin.zcash.ui.screen.scan.util.SettingsUtil @@ -31,14 +31,14 @@ internal fun MainActivity.WrapScanValidator( val synchronizer = walletViewModel.synchronizer.collectAsStateWithLifecycle().value - val walletRestoringState = walletViewModel.walletRestoringState.collectAsStateWithLifecycle().value + val walletState = walletViewModel.walletStateInformation.collectAsStateWithLifecycle().value WrapScan( context = this, onScanValid = onScanValid, goBack = goBack, synchronizer = synchronizer, - walletRestoringState = walletRestoringState + topAppBarSubTitleState = walletState, ) } @@ -48,7 +48,7 @@ fun WrapScan( goBack: () -> Unit, onScanValid: (address: SerializableAddress) -> Unit, synchronizer: Synchronizer?, - walletRestoringState: WalletRestoringState, + topAppBarSubTitleState: TopAppBarSubTitleState, ) { val scope = rememberCoroutineScope() @@ -89,7 +89,7 @@ fun WrapScan( } }, onScanStateChanged = {}, - walletRestoringState = walletRestoringState, + topAppBarSubTitleState = topAppBarSubTitleState, ) } } diff --git a/ui-lib/src/main/java/co/electriccoin/zcash/ui/screen/scan/view/ScanView.kt b/ui-lib/src/main/java/co/electriccoin/zcash/ui/screen/scan/view/ScanView.kt index a85cc2ca..912ff793 100644 --- a/ui-lib/src/main/java/co/electriccoin/zcash/ui/screen/scan/view/ScanView.kt +++ b/ui-lib/src/main/java/co/electriccoin/zcash/ui/screen/scan/view/ScanView.kt @@ -59,7 +59,7 @@ import androidx.core.content.ContextCompat import cash.z.ecc.android.sdk.type.AddressType import co.electriccoin.zcash.spackle.Twig import co.electriccoin.zcash.ui.R -import co.electriccoin.zcash.ui.common.model.WalletRestoringState +import co.electriccoin.zcash.ui.common.model.TopAppBarSubTitleState import co.electriccoin.zcash.ui.design.component.BlankSurface import co.electriccoin.zcash.ui.design.component.SecondaryButton import co.electriccoin.zcash.ui.design.component.Small @@ -91,7 +91,7 @@ private fun PreviewScan() { onScanned = {}, onOpenSettings = {}, onScanStateChanged = {}, - walletRestoringState = WalletRestoringState.NONE, + topAppBarSubTitleState = TopAppBarSubTitleState.None, addressValidationResult = AddressType.Transparent, ) } @@ -107,7 +107,7 @@ fun Scan( onScanned: (String) -> Unit, onOpenSettings: () -> Unit, onScanStateChanged: (ScanState) -> Unit, - walletRestoringState: WalletRestoringState, + topAppBarSubTitleState: TopAppBarSubTitleState, addressValidationResult: AddressType? ) { val permissionState = @@ -155,7 +155,7 @@ fun Scan( ScanTopAppBar( onBack = onBack, showBack = scanState != ScanState.Scanning, - showRestoring = walletRestoringState == WalletRestoringState.RESTORING, + subTitleState = topAppBarSubTitleState, ) } } @@ -226,14 +226,14 @@ fun ScanBottomItems( private fun ScanTopAppBar( onBack: () -> Unit, showBack: Boolean, - showRestoring: Boolean, + subTitleState: TopAppBarSubTitleState ) { SmallTopAppBar( - restoringLabel = - if (showRestoring) { - stringResource(id = R.string.restoring_wallet_label) - } else { - null + subTitle = + when (subTitleState) { + TopAppBarSubTitleState.Disconnected -> stringResource(id = R.string.disconnected_label) + TopAppBarSubTitleState.Restoring -> stringResource(id = R.string.restoring_wallet_label) + TopAppBarSubTitleState.None -> null }, backText = if (showBack) { diff --git a/ui-lib/src/main/java/co/electriccoin/zcash/ui/screen/seedrecovery/AndroidSeedRecovery.kt b/ui-lib/src/main/java/co/electriccoin/zcash/ui/screen/seedrecovery/AndroidSeedRecovery.kt index ff6c5ed9..015e7435 100644 --- a/ui-lib/src/main/java/co/electriccoin/zcash/ui/screen/seedrecovery/AndroidSeedRecovery.kt +++ b/ui-lib/src/main/java/co/electriccoin/zcash/ui/screen/seedrecovery/AndroidSeedRecovery.kt @@ -9,8 +9,8 @@ import cash.z.ecc.android.sdk.Synchronizer import co.electriccoin.zcash.spackle.ClipboardManagerUtil import co.electriccoin.zcash.ui.MainActivity import co.electriccoin.zcash.ui.R +import co.electriccoin.zcash.ui.common.model.TopAppBarSubTitleState import co.electriccoin.zcash.ui.common.model.VersionInfo -import co.electriccoin.zcash.ui.common.model.WalletRestoringState import co.electriccoin.zcash.ui.common.viewmodel.SecretState import co.electriccoin.zcash.ui.common.viewmodel.WalletViewModel import co.electriccoin.zcash.ui.design.component.CircularScreenProgressIndicator @@ -27,7 +27,7 @@ internal fun MainActivity.WrapSeedRecovery( val secretState = walletViewModel.secretState.collectAsStateWithLifecycle().value - val walletRestoringState = walletViewModel.walletRestoringState.collectAsStateWithLifecycle().value + val walletState = walletViewModel.walletStateInformation.collectAsStateWithLifecycle().value WrapSeedRecovery( activity = this, @@ -35,7 +35,7 @@ internal fun MainActivity.WrapSeedRecovery( onDone = onDone, secretState = secretState, synchronizer = synchronizer, - walletRestoringState = walletRestoringState + topAppBarSubTitleState = walletState ) } @@ -45,7 +45,7 @@ private fun WrapSeedRecovery( activity: ComponentActivity, goBack: () -> Unit, onDone: () -> Unit, - walletRestoringState: WalletRestoringState, + topAppBarSubTitleState: TopAppBarSubTitleState, synchronizer: Synchronizer?, secretState: SecretState, ) { @@ -86,8 +86,8 @@ private fun WrapSeedRecovery( ) }, onDone = onDone, + topAppBarSubTitleState = topAppBarSubTitleState, versionInfo = versionInfo, - walletRestoringState = walletRestoringState ) } } diff --git a/ui-lib/src/main/java/co/electriccoin/zcash/ui/screen/seedrecovery/view/SeedRecoveryView.kt b/ui-lib/src/main/java/co/electriccoin/zcash/ui/screen/seedrecovery/view/SeedRecoveryView.kt index 3121c8f3..d7dfd0c3 100644 --- a/ui-lib/src/main/java/co/electriccoin/zcash/ui/screen/seedrecovery/view/SeedRecoveryView.kt +++ b/ui-lib/src/main/java/co/electriccoin/zcash/ui/screen/seedrecovery/view/SeedRecoveryView.kt @@ -40,8 +40,8 @@ import cash.z.ecc.sdk.fixture.PersistableWalletFixture import co.electriccoin.zcash.ui.R import co.electriccoin.zcash.ui.common.compose.SecureScreen import co.electriccoin.zcash.ui.common.compose.shouldSecureScreen +import co.electriccoin.zcash.ui.common.model.TopAppBarSubTitleState import co.electriccoin.zcash.ui.common.model.VersionInfo -import co.electriccoin.zcash.ui.common.model.WalletRestoringState import co.electriccoin.zcash.ui.common.test.CommonTag.WALLET_BIRTHDAY import co.electriccoin.zcash.ui.design.MINIMAL_WEIGHT import co.electriccoin.zcash.ui.design.component.BodySmall @@ -65,7 +65,7 @@ private fun ComposablePreview() { onDone = {}, onSeedCopy = {}, versionInfo = VersionInfoFixture.new(), - walletRestoringState = WalletRestoringState.NONE, + topAppBarSubTitleState = TopAppBarSubTitleState.None, ) } } @@ -84,8 +84,8 @@ fun SeedRecovery( onBirthdayCopy: () -> Unit, onDone: () -> Unit, onSeedCopy: () -> Unit, + topAppBarSubTitleState: TopAppBarSubTitleState, versionInfo: VersionInfo, - walletRestoringState: WalletRestoringState, ) { GridBgScaffold( topBar = { @@ -93,7 +93,7 @@ fun SeedRecovery( onBack = onBack, onSeedCopy = onSeedCopy, versionInfo = versionInfo, - showRestoring = walletRestoringState == WalletRestoringState.RESTORING, + subTitleState = topAppBarSubTitleState, ) } ) { paddingValues -> @@ -118,16 +118,16 @@ fun SeedRecovery( private fun SeedRecoveryTopAppBar( onBack: () -> Unit, onSeedCopy: () -> Unit, + subTitleState: TopAppBarSubTitleState, versionInfo: VersionInfo, - showRestoring: Boolean, modifier: Modifier = Modifier, ) { GridBgSmallTopAppBar( - restoringLabel = - if (showRestoring) { - stringResource(id = R.string.restoring_wallet_label) - } else { - null + subTitle = + when (subTitleState) { + TopAppBarSubTitleState.Disconnected -> stringResource(id = R.string.disconnected_label) + TopAppBarSubTitleState.Restoring -> stringResource(id = R.string.restoring_wallet_label) + TopAppBarSubTitleState.None -> null }, modifier = modifier, backText = stringResource(id = R.string.seed_recovery_back).uppercase(), diff --git a/ui-lib/src/main/java/co/electriccoin/zcash/ui/screen/send/AndroidSend.kt b/ui-lib/src/main/java/co/electriccoin/zcash/ui/screen/send/AndroidSend.kt index c0a71fe1..b79ed7f6 100644 --- a/ui-lib/src/main/java/co/electriccoin/zcash/ui/screen/send/AndroidSend.kt +++ b/ui-lib/src/main/java/co/electriccoin/zcash/ui/screen/send/AndroidSend.kt @@ -25,7 +25,7 @@ import cash.z.ecc.android.sdk.model.toZecString import cash.z.ecc.android.sdk.type.AddressType import co.electriccoin.zcash.spackle.Twig import co.electriccoin.zcash.ui.common.compose.BalanceState -import co.electriccoin.zcash.ui.common.model.WalletRestoringState +import co.electriccoin.zcash.ui.common.model.TopAppBarSubTitleState import co.electriccoin.zcash.ui.common.model.WalletSnapshot import co.electriccoin.zcash.ui.common.viewmodel.HomeViewModel import co.electriccoin.zcash.ui.common.viewmodel.WalletViewModel @@ -75,7 +75,7 @@ internal fun WrapSend( // TODO [#1171]: https://github.com/Electric-Coin-Company/zashi-android/issues/1171 val monetarySeparators = MonetarySeparators.current(Locale.US) - val walletRestoringState = walletViewModel.walletRestoringState.collectAsStateWithLifecycle().value + val walletState = walletViewModel.walletStateInformation.collectAsStateWithLifecycle().value val balanceState = walletViewModel.balanceState.collectAsStateWithLifecycle().value @@ -93,7 +93,7 @@ internal fun WrapSend( goSendConfirmation = goSendConfirmation, hasCameraFeature = hasCameraFeature, monetarySeparators = monetarySeparators, - walletRestoringState = walletRestoringState + topAppBarSubTitleState = walletState, ) } @@ -102,10 +102,6 @@ internal fun WrapSend( @Composable internal fun WrapSend( balanceState: BalanceState, - sendArguments: SendArguments?, - synchronizer: Synchronizer?, - walletSnapshot: WalletSnapshot?, - spendingKey: UnifiedSpendingKey?, focusManager: FocusManager, goToQrScanner: () -> Unit, goBack: () -> Unit, @@ -114,7 +110,11 @@ internal fun WrapSend( goSendConfirmation: (ZecSend) -> Unit, hasCameraFeature: Boolean, monetarySeparators: MonetarySeparators, - walletRestoringState: WalletRestoringState, + sendArguments: SendArguments?, + spendingKey: UnifiedSpendingKey?, + synchronizer: Synchronizer?, + topAppBarSubTitleState: TopAppBarSubTitleState, + walletSnapshot: WalletSnapshot?, ) { val scope = rememberCoroutineScope() @@ -240,7 +240,7 @@ internal fun WrapSend( onQrScannerOpen = goToQrScanner, goBalances = goBalances, hasCameraFeature = hasCameraFeature, - walletRestoringState = walletRestoringState, + topAppBarSubTitleState = topAppBarSubTitleState, walletSnapshot = walletSnapshot, ) } diff --git a/ui-lib/src/main/java/co/electriccoin/zcash/ui/screen/send/view/SendView.kt b/ui-lib/src/main/java/co/electriccoin/zcash/ui/screen/send/view/SendView.kt index df9633a0..6df72b73 100644 --- a/ui-lib/src/main/java/co/electriccoin/zcash/ui/screen/send/view/SendView.kt +++ b/ui-lib/src/main/java/co/electriccoin/zcash/ui/screen/send/view/SendView.kt @@ -58,7 +58,7 @@ import co.electriccoin.zcash.spackle.Twig import co.electriccoin.zcash.ui.R import co.electriccoin.zcash.ui.common.compose.BalanceState import co.electriccoin.zcash.ui.common.compose.BalanceWidget -import co.electriccoin.zcash.ui.common.model.WalletRestoringState +import co.electriccoin.zcash.ui.common.model.TopAppBarSubTitleState import co.electriccoin.zcash.ui.common.model.WalletSnapshot import co.electriccoin.zcash.ui.common.model.canSpend import co.electriccoin.zcash.ui.common.model.spendableBalance @@ -103,7 +103,7 @@ private fun PreviewSendForm() { amountState = AmountState.Valid(ZatoshiFixture.ZATOSHI_LONG.toString(), ZatoshiFixture.new()), setMemoState = {}, memoState = MemoState.new("Test message"), - walletRestoringState = WalletRestoringState.NONE, + topAppBarSubTitleState = TopAppBarSubTitleState.None, walletSnapshot = WalletSnapshotFixture.new(), balanceState = BalanceStateFixture.new() ) @@ -131,12 +131,12 @@ fun Send( amountState: AmountState, setMemoState: (MemoState) -> Unit, memoState: MemoState, - walletRestoringState: WalletRestoringState, + topAppBarSubTitleState: TopAppBarSubTitleState, walletSnapshot: WalletSnapshot, ) { BlankBgScaffold(topBar = { SendTopAppBar( - showRestoring = walletRestoringState == WalletRestoringState.RESTORING, + subTitleState = topAppBarSubTitleState, onSettings = onSettings ) }) { paddingValues -> @@ -171,14 +171,14 @@ fun Send( @Composable private fun SendTopAppBar( onSettings: () -> Unit, - showRestoring: Boolean + subTitleState: TopAppBarSubTitleState ) { SmallTopAppBar( - restoringLabel = - if (showRestoring) { - stringResource(id = R.string.restoring_wallet_label) - } else { - null + subTitle = + when (subTitleState) { + TopAppBarSubTitleState.Disconnected -> stringResource(id = R.string.disconnected_label) + TopAppBarSubTitleState.Restoring -> stringResource(id = R.string.restoring_wallet_label) + TopAppBarSubTitleState.None -> null }, titleText = stringResource(id = R.string.send_stage_send_title), hamburgerMenuActions = { diff --git a/ui-lib/src/main/java/co/electriccoin/zcash/ui/screen/sendconfirmation/AndroidSendConfirmation.kt b/ui-lib/src/main/java/co/electriccoin/zcash/ui/screen/sendconfirmation/AndroidSendConfirmation.kt index e3546a97..ebfa4162 100644 --- a/ui-lib/src/main/java/co/electriccoin/zcash/ui/screen/sendconfirmation/AndroidSendConfirmation.kt +++ b/ui-lib/src/main/java/co/electriccoin/zcash/ui/screen/sendconfirmation/AndroidSendConfirmation.kt @@ -26,7 +26,7 @@ import cash.z.ecc.android.sdk.model.ZecSend import co.electriccoin.zcash.spackle.Twig import co.electriccoin.zcash.ui.MainActivity import co.electriccoin.zcash.ui.R -import co.electriccoin.zcash.ui.common.model.WalletRestoringState +import co.electriccoin.zcash.ui.common.model.TopAppBarSubTitleState import co.electriccoin.zcash.ui.common.viewmodel.AuthenticationViewModel import co.electriccoin.zcash.ui.common.viewmodel.WalletViewModel import co.electriccoin.zcash.ui.design.component.CircularScreenProgressIndicator @@ -72,7 +72,7 @@ internal fun MainActivity.WrapSendConfirmation( val supportMessage = supportViewModel.supportInfo.collectAsStateWithLifecycle().value - val walletRestoringState = walletViewModel.walletRestoringState.collectAsStateWithLifecycle().value + val walletState = walletViewModel.walletStateInformation.collectAsStateWithLifecycle().value WrapSendConfirmation( activity = this, @@ -86,7 +86,7 @@ internal fun MainActivity.WrapSendConfirmation( spendingKey = spendingKey, supportMessage = supportMessage, synchronizer = synchronizer, - walletRestoringState = walletRestoringState, + topAppBarSubTitleState = walletState, ) } @@ -105,7 +105,7 @@ internal fun WrapSendConfirmation( spendingKey: UnifiedSpendingKey?, supportMessage: SupportInfo?, synchronizer: Synchronizer?, - walletRestoringState: WalletRestoringState + topAppBarSubTitleState: TopAppBarSubTitleState, ) { val scope = rememberCoroutineScope() @@ -205,7 +205,7 @@ internal fun WrapSendConfirmation( } } }, - walletRestoringState = walletRestoringState + topAppBarSubTitleState = topAppBarSubTitleState, ) if (sendFundsAuthentication.value) { diff --git a/ui-lib/src/main/java/co/electriccoin/zcash/ui/screen/sendconfirmation/view/SendConfirmationView.kt b/ui-lib/src/main/java/co/electriccoin/zcash/ui/screen/sendconfirmation/view/SendConfirmationView.kt index 30452edc..40d08d36 100644 --- a/ui-lib/src/main/java/co/electriccoin/zcash/ui/screen/sendconfirmation/view/SendConfirmationView.kt +++ b/ui-lib/src/main/java/co/electriccoin/zcash/ui/screen/sendconfirmation/view/SendConfirmationView.kt @@ -42,7 +42,7 @@ import cash.z.ecc.sdk.fixture.MemoFixture import cash.z.ecc.sdk.fixture.ZatoshiFixture import co.electriccoin.zcash.ui.R import co.electriccoin.zcash.ui.common.compose.BalanceWidgetBigLineOnly -import co.electriccoin.zcash.ui.common.model.WalletRestoringState +import co.electriccoin.zcash.ui.common.model.TopAppBarSubTitleState import co.electriccoin.zcash.ui.design.MINIMAL_WEIGHT import co.electriccoin.zcash.ui.design.component.AppAlertDialog import co.electriccoin.zcash.ui.design.component.BlankBgScaffold @@ -113,20 +113,20 @@ private fun PreviewSendMultipleTransactionFailure() { @Suppress("LongParameterList") fun SendConfirmation( onBack: () -> Unit, - onContactSupport: () -> Unit, onConfirmation: () -> Unit, + onContactSupport: () -> Unit, snackbarHostState: SnackbarHostState, stage: SendConfirmationStage, submissionResults: ImmutableList, + topAppBarSubTitleState: TopAppBarSubTitleState, zecSend: ZecSend, - walletRestoringState: WalletRestoringState, ) { BlankBgScaffold( topBar = { SendConfirmationTopAppBar( onBack = onBack, stage = stage, - showRestoring = walletRestoringState == WalletRestoringState.RESTORING, + subTitleState = topAppBarSubTitleState, ) }, snackbarHost = { SnackbarHost(snackbarHostState) }, @@ -154,41 +154,32 @@ fun SendConfirmation( private fun SendConfirmationTopAppBar( onBack: () -> Unit, stage: SendConfirmationStage, - showRestoring: Boolean + subTitleState: TopAppBarSubTitleState ) { + val subTitle = + when (subTitleState) { + TopAppBarSubTitleState.Disconnected -> stringResource(id = R.string.disconnected_label) + TopAppBarSubTitleState.Restoring -> stringResource(id = R.string.restoring_wallet_label) + TopAppBarSubTitleState.None -> null + } when (stage) { SendConfirmationStage.Confirmation, SendConfirmationStage.Sending, is SendConfirmationStage.Failure -> { SmallTopAppBar( - restoringLabel = - if (showRestoring) { - stringResource(id = R.string.restoring_wallet_label) - } else { - null - }, + subTitle = subTitle, titleText = stringResource(id = R.string.send_stage_confirmation_title), ) } SendConfirmationStage.MultipleTrxFailure -> { SmallTopAppBar( - restoringLabel = - if (showRestoring) { - stringResource(id = R.string.restoring_wallet_label) - } else { - null - }, + subTitle = subTitle, titleText = stringResource(id = R.string.send_confirmation_multiple_error_title), ) } SendConfirmationStage.MultipleTrxFailureReported -> { SmallTopAppBar( - restoringLabel = - if (showRestoring) { - stringResource(id = R.string.restoring_wallet_label) - } else { - null - }, + subTitle = subTitle, titleText = stringResource(id = R.string.send_confirmation_multiple_error_title), backText = stringResource(id = R.string.send_confirmation_multiple_error_back), backContentDescriptionText = diff --git a/ui-lib/src/main/java/co/electriccoin/zcash/ui/screen/settings/AndroidSettings.kt b/ui-lib/src/main/java/co/electriccoin/zcash/ui/screen/settings/AndroidSettings.kt index f539a631..1935dd01 100644 --- a/ui-lib/src/main/java/co/electriccoin/zcash/ui/screen/settings/AndroidSettings.kt +++ b/ui-lib/src/main/java/co/electriccoin/zcash/ui/screen/settings/AndroidSettings.kt @@ -6,8 +6,8 @@ import androidx.activity.viewModels import androidx.compose.runtime.Composable import androidx.lifecycle.compose.collectAsStateWithLifecycle import co.electriccoin.zcash.ui.MainActivity +import co.electriccoin.zcash.ui.common.model.TopAppBarSubTitleState import co.electriccoin.zcash.ui.common.model.VersionInfo -import co.electriccoin.zcash.ui.common.model.WalletRestoringState import co.electriccoin.zcash.ui.common.viewmodel.WalletViewModel import co.electriccoin.zcash.ui.configuration.ConfigurationEntries import co.electriccoin.zcash.ui.configuration.RemoteConfig @@ -27,7 +27,7 @@ internal fun MainActivity.WrapSettings( val settingsViewModel by viewModels() - val walletRestoringState = walletViewModel.walletRestoringState.collectAsStateWithLifecycle().value + val walletState = walletViewModel.walletStateInformation.collectAsStateWithLifecycle().value WrapSettings( activity = this, @@ -36,8 +36,8 @@ internal fun MainActivity.WrapSettings( goBack = goBack, goFeedback = goFeedback, settingsViewModel = settingsViewModel, + topAppBarSubTitleState = walletState, walletViewModel = walletViewModel, - walletRestoringState = walletRestoringState ) } @@ -50,8 +50,8 @@ private fun WrapSettings( goBack: () -> Unit, goFeedback: () -> Unit, settingsViewModel: SettingsViewModel, + topAppBarSubTitleState: TopAppBarSubTitleState, walletViewModel: WalletViewModel, - walletRestoringState: WalletRestoringState, ) { val isBackgroundSyncEnabled = settingsViewModel.isBackgroundSync.collectAsStateWithLifecycle().value val isKeepScreenOnWhileSyncing = settingsViewModel.isKeepScreenOnWhileSyncing.collectAsStateWithLifecycle().value @@ -97,7 +97,7 @@ private fun WrapSettings( onAnalyticsSettingsChanged = { settingsViewModel.setAnalyticsEnabled(it) }, - walletRestoringState = walletRestoringState + topAppBarSubTitleState = topAppBarSubTitleState, ) } } diff --git a/ui-lib/src/main/java/co/electriccoin/zcash/ui/screen/settings/view/SettingsView.kt b/ui-lib/src/main/java/co/electriccoin/zcash/ui/screen/settings/view/SettingsView.kt index 000cb587..49541a54 100644 --- a/ui-lib/src/main/java/co/electriccoin/zcash/ui/screen/settings/view/SettingsView.kt +++ b/ui-lib/src/main/java/co/electriccoin/zcash/ui/screen/settings/view/SettingsView.kt @@ -28,7 +28,7 @@ import androidx.compose.ui.platform.testTag import androidx.compose.ui.res.stringResource import androidx.compose.ui.tooling.preview.Preview import co.electriccoin.zcash.ui.R -import co.electriccoin.zcash.ui.common.model.WalletRestoringState +import co.electriccoin.zcash.ui.common.model.TopAppBarSubTitleState import co.electriccoin.zcash.ui.design.MINIMAL_WEIGHT import co.electriccoin.zcash.ui.design.component.BlankBgScaffold import co.electriccoin.zcash.ui.design.component.PrimaryButton @@ -59,7 +59,7 @@ private fun PreviewSettings() { isAnalyticsEnabled = false, isRescanEnabled = false ), - walletRestoringState = WalletRestoringState.NONE, + topAppBarSubTitleState = TopAppBarSubTitleState.None, ) } } @@ -76,7 +76,7 @@ fun Settings( onKeepScreenOnDuringSyncSettingsChanged: (Boolean) -> Unit, onAnalyticsSettingsChanged: (Boolean) -> Unit, troubleshootingParameters: TroubleshootingParameters, - walletRestoringState: WalletRestoringState, + topAppBarSubTitleState: TopAppBarSubTitleState, ) { BlankBgScaffold(topBar = { SettingsTopAppBar( @@ -86,7 +86,7 @@ fun Settings( onAnalyticsSettingsChanged = onAnalyticsSettingsChanged, onRescanWallet = onRescanWallet, onBack = onBack, - showRestoring = walletRestoringState == WalletRestoringState.RESTORING, + subTitleState = topAppBarSubTitleState, ) }) { paddingValues -> SettingsMainContent( @@ -111,20 +111,20 @@ fun Settings( @Composable @Suppress("LongParameterList") private fun SettingsTopAppBar( - troubleshootingParameters: TroubleshootingParameters, onBackgroundSyncSettingsChanged: (Boolean) -> Unit, onKeepScreenOnDuringSyncSettingsChanged: (Boolean) -> Unit, onAnalyticsSettingsChanged: (Boolean) -> Unit, onRescanWallet: () -> Unit, onBack: () -> Unit, - showRestoring: Boolean + subTitleState: TopAppBarSubTitleState, + troubleshootingParameters: TroubleshootingParameters, ) { SmallTopAppBar( - restoringLabel = - if (showRestoring) { - stringResource(id = R.string.restoring_wallet_label) - } else { - null + subTitle = + when (subTitleState) { + TopAppBarSubTitleState.Disconnected -> stringResource(id = R.string.disconnected_label) + TopAppBarSubTitleState.Restoring -> stringResource(id = R.string.restoring_wallet_label) + TopAppBarSubTitleState.None -> null }, modifier = Modifier.testTag(SettingsTag.SETTINGS_TOP_APP_BAR), showTitleLogo = true, diff --git a/ui-lib/src/main/java/co/electriccoin/zcash/ui/screen/support/AndroidSupport.kt b/ui-lib/src/main/java/co/electriccoin/zcash/ui/screen/support/AndroidSupport.kt index 6f01b586..776c4a7c 100644 --- a/ui-lib/src/main/java/co/electriccoin/zcash/ui/screen/support/AndroidSupport.kt +++ b/ui-lib/src/main/java/co/electriccoin/zcash/ui/screen/support/AndroidSupport.kt @@ -14,7 +14,7 @@ import androidx.compose.runtime.saveable.rememberSaveable import androidx.lifecycle.compose.collectAsStateWithLifecycle import co.electriccoin.zcash.ui.MainActivity import co.electriccoin.zcash.ui.R -import co.electriccoin.zcash.ui.common.model.WalletRestoringState +import co.electriccoin.zcash.ui.common.model.TopAppBarSubTitleState import co.electriccoin.zcash.ui.common.viewmodel.WalletViewModel import co.electriccoin.zcash.ui.screen.support.model.SupportInfo import co.electriccoin.zcash.ui.screen.support.model.SupportInfoType @@ -31,13 +31,13 @@ internal fun MainActivity.WrapSupport(goBack: () -> Unit) { val supportInfo = supportViewModel.supportInfo.collectAsStateWithLifecycle().value - val walletRestoringState = walletViewModel.walletRestoringState.collectAsStateWithLifecycle().value + val walletState = walletViewModel.walletStateInformation.collectAsStateWithLifecycle().value WrapSupport( activity = this, goBack = goBack, supportInfo = supportInfo, - walletRestoringState = walletRestoringState + topAppBarSubTitleState = walletState ) } @@ -46,7 +46,7 @@ internal fun WrapSupport( activity: ComponentActivity, goBack: () -> Unit, supportInfo: SupportInfo?, - walletRestoringState: WalletRestoringState, + topAppBarSubTitleState: TopAppBarSubTitleState, ) { val snackbarHostState = remember { SnackbarHostState() } @@ -84,7 +84,7 @@ internal fun WrapSupport( } } }, - walletRestoringState = walletRestoringState + topAppBarSubTitleState = topAppBarSubTitleState, ) } diff --git a/ui-lib/src/main/java/co/electriccoin/zcash/ui/screen/support/view/SupportView.kt b/ui-lib/src/main/java/co/electriccoin/zcash/ui/screen/support/view/SupportView.kt index 919fe8cc..6eabaeab 100644 --- a/ui-lib/src/main/java/co/electriccoin/zcash/ui/screen/support/view/SupportView.kt +++ b/ui-lib/src/main/java/co/electriccoin/zcash/ui/screen/support/view/SupportView.kt @@ -28,7 +28,7 @@ import androidx.compose.ui.res.vectorResource import androidx.compose.ui.text.style.TextAlign import androidx.compose.ui.tooling.preview.Preview import co.electriccoin.zcash.ui.R -import co.electriccoin.zcash.ui.common.model.WalletRestoringState +import co.electriccoin.zcash.ui.common.model.TopAppBarSubTitleState import co.electriccoin.zcash.ui.design.MINIMAL_WEIGHT import co.electriccoin.zcash.ui.design.component.AppAlertDialog import co.electriccoin.zcash.ui.design.component.BlankSurface @@ -50,7 +50,7 @@ private fun PreviewSupport() { onBack = {}, onSend = {}, snackbarHostState = SnackbarHostState(), - walletRestoringState = WalletRestoringState.NONE + topAppBarSubTitleState = TopAppBarSubTitleState.None, ) } } @@ -75,7 +75,7 @@ fun Support( onBack: () -> Unit, onSend: (String) -> Unit, snackbarHostState: SnackbarHostState, - walletRestoringState: WalletRestoringState, + topAppBarSubTitleState: TopAppBarSubTitleState, ) { val (message, setMessage) = rememberSaveable { mutableStateOf("") } @@ -83,7 +83,7 @@ fun Support( topBar = { SupportTopAppBar( onBack = onBack, - showRestoring = walletRestoringState == WalletRestoringState.RESTORING, + subTitleState = topAppBarSubTitleState, ) }, snackbarHost = { SnackbarHost(snackbarHostState) } @@ -113,14 +113,14 @@ fun Support( @Composable private fun SupportTopAppBar( onBack: () -> Unit, - showRestoring: Boolean + subTitleState: TopAppBarSubTitleState ) { GridBgSmallTopAppBar( - restoringLabel = - if (showRestoring) { - stringResource(id = R.string.restoring_wallet_label) - } else { - null + subTitle = + when (subTitleState) { + TopAppBarSubTitleState.Disconnected -> stringResource(id = R.string.disconnected_label) + TopAppBarSubTitleState.Restoring -> stringResource(id = R.string.restoring_wallet_label) + TopAppBarSubTitleState.None -> null }, titleText = stringResource(id = R.string.support_header), backText = stringResource(id = R.string.support_back).uppercase(), diff --git a/ui-lib/src/main/res/ui/common/values/strings.xml b/ui-lib/src/main/res/ui/common/values/strings.xml index e273eaa1..ceda5e9e 100644 --- a/ui-lib/src/main/res/ui/common/values/strings.xml +++ b/ui-lib/src/main/res/ui/common/values/strings.xml @@ -4,15 +4,17 @@ Zcash logo Open Settings Available Balance: + + [Restoring Your Wallet…] + [Disconnected…] Unable to launch Google Play store app… - Caution - The server you\'re presently connected to is experiencing - difficulties. For better performance, navigate to Advanced Settings and choose a different server. Please - also check your device connection. + Heads up + Your current server is experiencing difficulties. Check your + device connection, and/or navigate to Advanced Settings to choose a different server. Switch Server Ignore