[#1463] Display Disconnected app state

- Closes #1463
- Disconnected dialog text update
- Changelog updated
This commit is contained in:
Honza Rychnovský 2024-06-05 12:52:43 +02:00 committed by GitHub
parent d813c1a9da
commit 6f878ea609
No known key found for this signature in database
GPG Key ID: B5690EEEBB952194
46 changed files with 306 additions and 251 deletions

View File

@ -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.

View File

@ -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),

View File

@ -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
)
}

View File

@ -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
)
}
}

View File

@ -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(),
)
}

View File

@ -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,
)

View File

@ -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,
)
}

View File

@ -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
)
}
}

View File

@ -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,
)
}

View File

@ -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
)
}
}

View File

@ -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,
)
}
}

View File

@ -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 =

View File

@ -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,
)
}

View File

@ -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,
)
}
}

View File

@ -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,
)
}

View File

@ -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()
}

View File

@ -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<TopAppBarSubTitleState> =
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.
*/

View File

@ -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<WalletViewModel>()
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,
)
}

View File

@ -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(),

View File

@ -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
)

View File

@ -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,
)
}

View File

@ -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<WalletViewModel>()
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,
)
}

View File

@ -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,

View File

@ -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> {
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,
)

View File

@ -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,

View File

@ -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,
)
}
}

View File

@ -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,

View File

@ -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<WalletViewModel>()
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,
)
}

View File

@ -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),

View File

@ -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,
)
}
}

View File

@ -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),

View File

@ -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,
)
}

View File

@ -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 = {

View File

@ -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,
)
}
}

View File

@ -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) {

View File

@ -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
)
}
}

View File

@ -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(),

View File

@ -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,
)
}

View File

@ -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 = {

View File

@ -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) {

View File

@ -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<TransactionSubmitResult>,
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 =

View File

@ -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<SettingsViewModel>()
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,
)
}
}

View File

@ -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,

View File

@ -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,
)
}

View File

@ -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(),

View File

@ -4,15 +4,17 @@
<string name="zcash_logo_content_description">Zcash logo</string>
<string name="settings_menu_content_description">Open Settings</string>
<string name="balance_widget_available">Available Balance:</string>
<!-- This is replaced by a resource overlay via app/build.gradle.kts -->
<string name="support_email_address" />
<string name="restoring_wallet_label">[Restoring Your Wallet…]</string>
<string name="disconnected_label">[Disconnected…]</string>
<string name="unable_to_open_play_store">Unable to launch Google Play store app…</string>
<string name="server_disconnected_dialog_title">Caution</string>
<string name="server_disconnected_dialog_message">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.</string>
<string name="server_disconnected_dialog_title">Heads up</string>
<string name="server_disconnected_dialog_message">Your current server is experiencing difficulties. Check your
device connection, and/or navigate to Advanced Settings to choose a different server.</string>
<string name="server_disconnected_dialog_switch_btn">Switch Server</string>
<string name="server_disconnected_dialog_ignore_btn">Ignore</string>
</resources>