package co.electriccoin.zcash.ui.screen.seed.view import androidx.compose.foundation.layout.Column import androidx.compose.foundation.layout.PaddingValues import androidx.compose.foundation.layout.Spacer import androidx.compose.foundation.layout.fillMaxHeight import androidx.compose.foundation.layout.height import androidx.compose.foundation.layout.padding import androidx.compose.foundation.rememberScrollState import androidx.compose.foundation.verticalScroll import androidx.compose.material.icons.Icons import androidx.compose.material.icons.filled.ArrowBack import androidx.compose.material3.ExperimentalMaterial3Api import androidx.compose.material3.Icon import androidx.compose.material3.IconButton import androidx.compose.material3.Scaffold import androidx.compose.material3.Text import androidx.compose.material3.TopAppBar import androidx.compose.runtime.Composable import androidx.compose.ui.Modifier import androidx.compose.ui.res.stringResource import androidx.compose.ui.tooling.preview.Preview import cash.z.ecc.android.sdk.model.PersistableWallet import cash.z.ecc.sdk.fixture.PersistableWalletFixture import co.electriccoin.zcash.ui.BuildConfig import co.electriccoin.zcash.ui.R import co.electriccoin.zcash.ui.common.SecureScreen import co.electriccoin.zcash.ui.design.component.Body import co.electriccoin.zcash.ui.design.component.ChipGrid import co.electriccoin.zcash.ui.design.component.GradientSurface import co.electriccoin.zcash.ui.design.component.TertiaryButton import co.electriccoin.zcash.ui.design.theme.ZcashTheme import kotlinx.collections.immutable.toPersistentList @Preview("Seed") @Composable private fun PreviewSeed() { ZcashTheme(darkTheme = false) { GradientSurface { Seed( persistableWallet = PersistableWalletFixture.new(), onBack = {}, onCopyToClipboard = {} ) } } } /* * Note we have some things to determine regarding locking of the secrets for persistableWallet * (e.g. seed phrase and spending keys) which should require additional authorization to view. */ @Composable fun Seed( persistableWallet: PersistableWallet, onBack: () -> Unit, onCopyToClipboard: () -> Unit ) { if (BuildConfig.IS_SECURE_SCREEN_ENABLED) { SecureScreen() } Scaffold(topBar = { SeedTopAppBar(onBack = onBack) }) { paddingValues -> SeedMainContent( persistableWallet = persistableWallet, onCopyToClipboard = onCopyToClipboard, modifier = Modifier.padding( top = paddingValues.calculateTopPadding() + ZcashTheme.dimens.spacingDefault, bottom = paddingValues.calculateBottomPadding() + ZcashTheme.dimens.spacingDefault, start = ZcashTheme.dimens.spacingDefault, end = ZcashTheme.dimens.spacingDefault ) ) } } @Composable @OptIn(ExperimentalMaterial3Api::class) private fun SeedTopAppBar(onBack: () -> Unit) { TopAppBar( title = { Text(text = stringResource(id = R.string.seed_title)) }, navigationIcon = { IconButton( onClick = onBack ) { Icon( imageVector = Icons.Filled.ArrowBack, contentDescription = stringResource(R.string.seed_back_content_description) ) } } ) } @Composable private fun SeedMainContent( persistableWallet: PersistableWallet, onCopyToClipboard: () -> Unit, modifier: Modifier = Modifier ) { Column( Modifier .fillMaxHeight() .verticalScroll( rememberScrollState() ) .then(modifier) ) { Body(stringResource(R.string.seed_body)) Spacer(modifier = Modifier.height(ZcashTheme.dimens.spacingDefault)) ChipGrid(persistableWallet.seedPhrase.split.toPersistentList()) TertiaryButton( onClick = onCopyToClipboard, text = stringResource(R.string.seed_copy), outerPaddingValues = PaddingValues( horizontal = ZcashTheme.dimens.spacingNone, vertical = ZcashTheme.dimens.spacingSmall ) ) } }