parent
db652d6a39
commit
95ac835b9c
|
@ -27,7 +27,6 @@ import androidx.compose.runtime.setValue
|
|||
import androidx.compose.ui.Alignment
|
||||
import androidx.compose.ui.Modifier
|
||||
import androidx.compose.ui.draw.clip
|
||||
import androidx.compose.ui.graphics.Color
|
||||
import androidx.compose.ui.platform.testTag
|
||||
import androidx.compose.ui.res.painterResource
|
||||
import androidx.compose.ui.semantics.Role
|
||||
|
@ -161,7 +160,8 @@ data class RadioButtonState(
|
|||
@Suppress("UnusedPrivateMember")
|
||||
@PreviewScreens
|
||||
@Composable
|
||||
private fun RadioButtonPreview() = ZcashTheme {
|
||||
private fun RadioButtonPreview() =
|
||||
ZcashTheme {
|
||||
BlankBgColumn {
|
||||
var isChecked by remember { mutableStateOf(false) }
|
||||
|
||||
|
@ -186,4 +186,4 @@ private fun RadioButtonPreview() = ZcashTheme {
|
|||
),
|
||||
)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -193,8 +193,11 @@ class WalletRepositoryImpl(
|
|||
// complete quickly, it isn't guaranteed to complete before persistExistingWallet()
|
||||
// unless a mutex is used here.
|
||||
persistWalletMutex.withLock {
|
||||
StandardPreferenceKeys.ONBOARDING_STATE.putValue(standardPreferenceProvider(), onboardingState
|
||||
.toNumber())
|
||||
StandardPreferenceKeys.ONBOARDING_STATE.putValue(
|
||||
standardPreferenceProvider(),
|
||||
onboardingState
|
||||
.toNumber()
|
||||
)
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -100,7 +100,6 @@ class WalletViewModel(
|
|||
private val standardPreferenceProvider: StandardPreferenceProvider,
|
||||
private val getAvailableServers: GetDefaultServersProvider
|
||||
) : AndroidViewModel(application) {
|
||||
|
||||
/*
|
||||
* Using the Mutex may be overkill, but it ensures that if multiple calls are accidentally made
|
||||
* that they have a consistent ordering.
|
||||
|
@ -111,7 +110,6 @@ class WalletViewModel(
|
|||
|
||||
val backNavigationCommand = MutableSharedFlow<Unit>()
|
||||
|
||||
|
||||
/**
|
||||
* Synchronizer that is retained long enough to survive configuration changes.
|
||||
*/
|
||||
|
@ -419,7 +417,6 @@ class WalletViewModel(
|
|||
)
|
||||
}
|
||||
|
||||
|
||||
else -> {
|
||||
BalanceState.Available(
|
||||
totalBalance = snapshot.totalBalance(),
|
||||
|
|
|
@ -41,6 +41,7 @@ import co.electriccoin.zcash.ui.common.wallet.ExchangeRateState
|
|||
import co.electriccoin.zcash.ui.design.component.BlankBgScaffold
|
||||
import co.electriccoin.zcash.ui.design.component.SmallTopAppBar
|
||||
import co.electriccoin.zcash.ui.design.component.TopAppBarHideBalancesNavigation
|
||||
import co.electriccoin.zcash.ui.design.newcomponent.PreviewScreens
|
||||
import co.electriccoin.zcash.ui.design.theme.ZcashTheme
|
||||
import co.electriccoin.zcash.ui.fixture.BalanceStateFixture
|
||||
import co.electriccoin.zcash.ui.fixture.WalletSnapshotFixture
|
||||
|
@ -49,7 +50,6 @@ import co.electriccoin.zcash.ui.screen.account.fixture.TransactionsFixture
|
|||
import co.electriccoin.zcash.ui.screen.account.model.TransactionUiState
|
||||
import co.electriccoin.zcash.ui.screen.balances.model.StatusAction
|
||||
import co.electriccoin.zcash.ui.screen.exchangerate.widget.StyledExchangeOptIn
|
||||
import co.electriccoin.zcash.ui.design.newcomponent.PreviewScreens
|
||||
import kotlinx.datetime.Clock
|
||||
|
||||
@Suppress("UnusedPrivateMember")
|
||||
|
|
|
@ -35,7 +35,6 @@ import androidx.compose.runtime.setValue
|
|||
import androidx.compose.ui.Alignment
|
||||
import androidx.compose.ui.Modifier
|
||||
import androidx.compose.ui.draw.rotate
|
||||
import androidx.compose.ui.graphics.Color
|
||||
import androidx.compose.ui.platform.LocalFocusManager
|
||||
import androidx.compose.ui.platform.testTag
|
||||
import androidx.compose.ui.res.painterResource
|
||||
|
@ -271,8 +270,10 @@ private fun LazyListScope.serverListItems(state: ServerListState) {
|
|||
RadioButtonCheckedContent(item.radioButtonState)
|
||||
} else {
|
||||
Image(
|
||||
painter = painterResource(
|
||||
id = if (isSystemInDarkTheme()) {
|
||||
painter =
|
||||
painterResource(
|
||||
id =
|
||||
if (isSystemInDarkTheme()) {
|
||||
drawable.ic_radio_button_checked_variant_dark
|
||||
} else {
|
||||
drawable.ic_radio_button_checked_variant
|
||||
|
|
|
@ -15,9 +15,9 @@ import androidx.compose.runtime.Composable
|
|||
import androidx.compose.ui.Modifier
|
||||
import androidx.compose.ui.unit.dp
|
||||
import co.electriccoin.zcash.ui.design.component.ButtonState
|
||||
import co.electriccoin.zcash.ui.design.newcomponent.PreviewScreens
|
||||
import co.electriccoin.zcash.ui.design.theme.ZcashTheme
|
||||
import co.electriccoin.zcash.ui.design.util.stringRes
|
||||
import co.electriccoin.zcash.ui.design.newcomponent.PreviewScreens
|
||||
|
||||
@Composable
|
||||
fun BottomBar(
|
||||
|
|
|
@ -48,7 +48,8 @@ internal fun ZashiButton(
|
|||
colors: ButtonColors = ZashiButtonDefaults.primaryButtonColors(),
|
||||
content: @Composable RowScope.(ZashiButtonScope) -> Unit = ZashiButtonDefaults.content
|
||||
) {
|
||||
val scope = object : ZashiButtonScope {
|
||||
val scope =
|
||||
object : ZashiButtonScope {
|
||||
@Composable
|
||||
override fun Text() {
|
||||
Text(text = text)
|
||||
|
@ -58,7 +59,8 @@ internal fun ZashiButton(
|
|||
override fun Loading() {
|
||||
if (enabled && isLoading) {
|
||||
LottieProgress(
|
||||
loadingRes = if (isSystemInDarkTheme()) {
|
||||
loadingRes =
|
||||
if (isSystemInDarkTheme()) {
|
||||
R.raw.lottie_loading
|
||||
} else {
|
||||
R.raw.lottie_loading_white
|
||||
|
@ -89,7 +91,6 @@ interface ZashiButtonScope {
|
|||
}
|
||||
|
||||
object ZashiButtonDefaults {
|
||||
|
||||
val content: @Composable RowScope.(ZashiButtonScope) -> Unit
|
||||
get() = { scope ->
|
||||
scope.Text()
|
||||
|
|
|
@ -64,7 +64,9 @@ fun ZashiTextField(
|
|||
TextFieldInternal(
|
||||
value = state.value.getValue(),
|
||||
onValueChange = state.onValueChange,
|
||||
modifier = modifier then Modifier.border(
|
||||
modifier =
|
||||
modifier then
|
||||
Modifier.border(
|
||||
width = 1.dp,
|
||||
color = ZcashTheme.zashiColors.stroke,
|
||||
shape = ZashiTextFieldDefaults.shape
|
||||
|
@ -121,7 +123,8 @@ private fun TextFieldInternal(
|
|||
modifier: Modifier = Modifier,
|
||||
) {
|
||||
// If color is not provided via the text style, use content color as a default
|
||||
val textColor = textStyle.color.takeOrElse {
|
||||
val textColor =
|
||||
textStyle.color.takeOrElse {
|
||||
colors.textColor(enabled, isError, interactionSource).value
|
||||
}
|
||||
val mergedTextStyle = textStyle.merge(TextStyle(color = textColor))
|
||||
|
@ -129,7 +132,8 @@ private fun TextFieldInternal(
|
|||
CompositionLocalProvider(LocalTextSelectionColors provides colors.selectionColors) {
|
||||
BasicTextField(
|
||||
value = value,
|
||||
modifier = modifier
|
||||
modifier =
|
||||
modifier
|
||||
.defaultMinSize(minWidth = TextFieldDefaults.MinWidth),
|
||||
onValueChange = onValueChange,
|
||||
enabled = enabled,
|
||||
|
@ -177,7 +181,8 @@ private fun TextFieldColors.textColor(
|
|||
): State<Color> {
|
||||
val focused by interactionSource.collectIsFocusedAsState()
|
||||
|
||||
val targetValue = when {
|
||||
val targetValue =
|
||||
when {
|
||||
!enabled -> disabledTextColor
|
||||
isError -> errorTextColor
|
||||
focused -> focusedTextColor
|
||||
|
@ -195,7 +200,6 @@ internal fun TextFieldColors.cursorColor(isError: Boolean): State<Color> {
|
|||
}
|
||||
|
||||
object ZashiTextFieldDefaults {
|
||||
|
||||
val shape: Shape
|
||||
get() = RoundedCornerShape(8.dp)
|
||||
|
||||
|
@ -206,17 +210,20 @@ object ZashiTextFieldDefaults {
|
|||
unfocusedTextColor: Color = ZcashTheme.zashiColors.textPrimary,
|
||||
disabledTextColor: Color = ZcashTheme.zashiColors.textPrimary,
|
||||
errorTextColor: Color = Color.Unspecified,
|
||||
focusedContainerColor: Color = if (isSystemInDarkTheme()) {
|
||||
focusedContainerColor: Color =
|
||||
if (isSystemInDarkTheme()) {
|
||||
ZcashTheme.zashiColors.bgSecondary
|
||||
} else {
|
||||
ZcashTheme.zashiColors.bgPrimary
|
||||
},
|
||||
unfocusedContainerColor: Color = if (isSystemInDarkTheme()) {
|
||||
unfocusedContainerColor: Color =
|
||||
if (isSystemInDarkTheme()) {
|
||||
ZcashTheme.zashiColors.bgSecondary
|
||||
} else {
|
||||
ZcashTheme.zashiColors.bgPrimary
|
||||
},
|
||||
disabledContainerColor: Color = if (isSystemInDarkTheme()) {
|
||||
disabledContainerColor: Color =
|
||||
if (isSystemInDarkTheme()) {
|
||||
ZcashTheme.zashiColors.bgSecondary
|
||||
} else {
|
||||
ZcashTheme.zashiColors.bgPrimary
|
||||
|
@ -257,7 +264,8 @@ object ZashiTextFieldDefaults {
|
|||
unfocusedSuffixColor: Color = Color.Unspecified,
|
||||
disabledSuffixColor: Color = Color.Unspecified,
|
||||
errorSuffixColor: Color = Color.Unspecified,
|
||||
): TextFieldColors = TextFieldDefaults.colors(
|
||||
): TextFieldColors =
|
||||
TextFieldDefaults.colors(
|
||||
focusedTextColor = focusedTextColor,
|
||||
unfocusedTextColor = unfocusedTextColor,
|
||||
disabledTextColor = disabledTextColor,
|
||||
|
@ -307,10 +315,12 @@ object ZashiTextFieldDefaults {
|
|||
@Suppress("UnusedPrivateMember")
|
||||
@PreviewScreens
|
||||
@Composable
|
||||
private fun ZashiTextFieldPreview() = ZcashTheme {
|
||||
private fun ZashiTextFieldPreview() =
|
||||
ZcashTheme {
|
||||
ZashiTextField(
|
||||
state = TextFieldState(
|
||||
state =
|
||||
TextFieldState(
|
||||
value = stringRes("Text")
|
||||
) {}
|
||||
)
|
||||
}
|
||||
}
|
||||
|
|
|
@ -18,12 +18,12 @@ import androidx.compose.ui.unit.dp
|
|||
import androidx.compose.ui.unit.sp
|
||||
import co.electriccoin.zcash.ui.R
|
||||
import co.electriccoin.zcash.ui.design.component.BlankSurface
|
||||
import co.electriccoin.zcash.ui.design.newcomponent.PreviewScreens
|
||||
import co.electriccoin.zcash.ui.design.theme.ZcashTheme
|
||||
import co.electriccoin.zcash.ui.screen.exchangerate.BaseExchangeRateOptIn
|
||||
import co.electriccoin.zcash.ui.screen.exchangerate.ZashiButton
|
||||
import co.electriccoin.zcash.ui.screen.exchangerate.ZashiButtonDefaults
|
||||
import co.electriccoin.zcash.ui.screen.exchangerate.ZashiTextButton
|
||||
import co.electriccoin.zcash.ui.design.newcomponent.PreviewScreens
|
||||
|
||||
@Composable
|
||||
fun ExchangeRateOptIn(
|
||||
|
|
|
@ -27,12 +27,12 @@ import androidx.compose.ui.unit.dp
|
|||
import androidx.compose.ui.unit.sp
|
||||
import co.electriccoin.zcash.ui.R
|
||||
import co.electriccoin.zcash.ui.design.component.BlankSurface
|
||||
import co.electriccoin.zcash.ui.design.newcomponent.PreviewScreens
|
||||
import co.electriccoin.zcash.ui.design.theme.ZcashTheme
|
||||
import co.electriccoin.zcash.ui.screen.exchangerate.BaseExchangeRateOptIn
|
||||
import co.electriccoin.zcash.ui.screen.exchangerate.SecondaryCard
|
||||
import co.electriccoin.zcash.ui.screen.exchangerate.ZashiButton
|
||||
import co.electriccoin.zcash.ui.screen.exchangerate.ZashiButtonDefaults
|
||||
import co.electriccoin.zcash.ui.design.newcomponent.PreviewScreens
|
||||
|
||||
@Composable
|
||||
fun SettingsExchangeRateOptIn(
|
||||
|
|
|
@ -42,12 +42,12 @@ import co.electriccoin.zcash.ui.common.extension.toKotlinLocale
|
|||
import co.electriccoin.zcash.ui.common.wallet.ExchangeRateState
|
||||
import co.electriccoin.zcash.ui.design.component.BlankSurface
|
||||
import co.electriccoin.zcash.ui.design.component.LottieProgress
|
||||
import co.electriccoin.zcash.ui.design.newcomponent.PreviewScreens
|
||||
import co.electriccoin.zcash.ui.design.theme.ZcashTheme
|
||||
import co.electriccoin.zcash.ui.design.util.StringResource
|
||||
import co.electriccoin.zcash.ui.design.util.getValue
|
||||
import co.electriccoin.zcash.ui.design.util.stringRes
|
||||
import co.electriccoin.zcash.ui.fixture.ObserveFiatCurrencyResultFixture
|
||||
import co.electriccoin.zcash.ui.design.newcomponent.PreviewScreens
|
||||
import kotlinx.datetime.Clock
|
||||
|
||||
@Suppress("LongParameterList", "ComplexCondition")
|
||||
|
|
|
@ -9,10 +9,10 @@ import cash.z.ecc.android.sdk.model.FiatCurrencyConversion
|
|||
import cash.z.ecc.android.sdk.model.Zatoshi
|
||||
import co.electriccoin.zcash.ui.common.wallet.ExchangeRateState
|
||||
import co.electriccoin.zcash.ui.design.component.BlankSurface
|
||||
import co.electriccoin.zcash.ui.design.newcomponent.PreviewScreens
|
||||
import co.electriccoin.zcash.ui.design.theme.ZcashTheme
|
||||
import co.electriccoin.zcash.ui.design.util.StringResource
|
||||
import co.electriccoin.zcash.ui.design.util.stringRes
|
||||
import co.electriccoin.zcash.ui.design.newcomponent.PreviewScreens
|
||||
import kotlinx.datetime.Clock
|
||||
|
||||
@Suppress("LongParameterList", "ComplexCondition")
|
||||
|
|
|
@ -24,11 +24,11 @@ import androidx.compose.ui.unit.sp
|
|||
import co.electriccoin.zcash.ui.R
|
||||
import co.electriccoin.zcash.ui.common.wallet.ExchangeRateState
|
||||
import co.electriccoin.zcash.ui.design.component.BlankSurface
|
||||
import co.electriccoin.zcash.ui.design.newcomponent.PreviewScreens
|
||||
import co.electriccoin.zcash.ui.design.theme.ZcashTheme
|
||||
import co.electriccoin.zcash.ui.screen.exchangerate.SecondaryCard
|
||||
import co.electriccoin.zcash.ui.screen.exchangerate.ZashiButton
|
||||
import co.electriccoin.zcash.ui.screen.exchangerate.ZashiButtonDefaults
|
||||
import co.electriccoin.zcash.ui.design.newcomponent.PreviewScreens
|
||||
|
||||
@Suppress("LongMethod")
|
||||
@Composable
|
||||
|
|
|
@ -35,8 +35,8 @@ import androidx.compose.ui.unit.dp
|
|||
import androidx.compose.ui.unit.sp
|
||||
import androidx.compose.ui.window.Popup
|
||||
import co.electriccoin.zcash.ui.R
|
||||
import co.electriccoin.zcash.ui.design.theme.ZcashTheme
|
||||
import co.electriccoin.zcash.ui.design.newcomponent.PreviewScreens
|
||||
import co.electriccoin.zcash.ui.design.theme.ZcashTheme
|
||||
|
||||
@Composable
|
||||
internal fun StyledExchangeUnavailablePopup(
|
||||
|
|
|
@ -3,6 +3,7 @@ package co.electroniccoin.zcash.ui.screenshot
|
|||
import android.app.Application
|
||||
import android.content.Context
|
||||
import co.electriccoin.zcash.di.coreModule
|
||||
import co.electriccoin.zcash.di.providerModule
|
||||
import co.electriccoin.zcash.di.repositoryModule
|
||||
import co.electriccoin.zcash.di.useCaseModule
|
||||
import co.electriccoin.zcash.di.viewModelModule
|
||||
|
@ -29,6 +30,7 @@ class ZcashUiTestApplication : Application() {
|
|||
androidContext(this@ZcashUiTestApplication)
|
||||
modules(
|
||||
coreModule,
|
||||
providerModule,
|
||||
repositoryModule,
|
||||
useCaseModule,
|
||||
viewModelModule
|
||||
|
|
Loading…
Reference in New Issue