124 lines
3.9 KiB
Kotlin
124 lines
3.9 KiB
Kotlin
package co.electriccoin.zcash.ui.screen.backup
|
|
|
|
import android.content.ClipData
|
|
import android.content.ClipboardManager
|
|
import android.content.Context
|
|
import androidx.activity.ComponentActivity
|
|
import androidx.compose.runtime.Composable
|
|
import androidx.compose.runtime.getValue
|
|
import androidx.compose.runtime.mutableStateOf
|
|
import androidx.compose.runtime.saveable.rememberSaveable
|
|
import cash.z.ecc.android.sdk.model.PersistableWallet
|
|
import co.electriccoin.zcash.ui.MainActivity
|
|
import co.electriccoin.zcash.ui.R
|
|
import co.electriccoin.zcash.ui.configuration.ConfigurationEntries
|
|
import co.electriccoin.zcash.ui.configuration.RemoteConfig
|
|
import co.electriccoin.zcash.ui.screen.backup.ext.Saver
|
|
import co.electriccoin.zcash.ui.screen.backup.state.BackupState
|
|
import co.electriccoin.zcash.ui.screen.backup.state.TestChoices
|
|
import co.electriccoin.zcash.ui.screen.backup.view.LongNewWalletBackup
|
|
import co.electriccoin.zcash.ui.screen.backup.view.ShortNewWalletBackup
|
|
|
|
@Composable
|
|
internal fun MainActivity.WrapNewWallet(
|
|
persistableWallet: PersistableWallet,
|
|
onBackupComplete: () -> Unit
|
|
) {
|
|
if (ConfigurationEntries.IS_SHORT_NEW_WALLET_BACKUP_UX.getValue(RemoteConfig.current)) {
|
|
WrapShortNewWallet(
|
|
persistableWallet,
|
|
onBackupComplete = onBackupComplete
|
|
)
|
|
} else {
|
|
WrapLongNewWallet(
|
|
persistableWallet,
|
|
onBackupComplete = onBackupComplete
|
|
)
|
|
}
|
|
}
|
|
|
|
@Composable
|
|
internal fun MainActivity.WrapLongNewWallet(
|
|
persistableWallet: PersistableWallet,
|
|
onBackupComplete: () -> Unit
|
|
) {
|
|
WrapLongNewWallet(this, persistableWallet, onBackupComplete)
|
|
}
|
|
|
|
// This layer of indirection allows for activity re-creation tests
|
|
@Composable
|
|
internal fun WrapLongNewWallet(
|
|
activity: ComponentActivity,
|
|
persistableWallet: PersistableWallet,
|
|
onBackupComplete: () -> Unit
|
|
) {
|
|
WrapLongNewWallet(
|
|
persistableWallet,
|
|
onCopyToClipboard = { copyToClipboard(activity.applicationContext, persistableWallet) },
|
|
onBackupComplete = onBackupComplete
|
|
)
|
|
}
|
|
|
|
// This extra layer of indirection allows unit tests to validate the screen state retention.
|
|
@Composable
|
|
internal fun WrapLongNewWallet(
|
|
persistableWallet: PersistableWallet,
|
|
onCopyToClipboard: () -> Unit,
|
|
onBackupComplete: () -> Unit
|
|
) {
|
|
val testChoices by rememberSaveable(stateSaver = TestChoices.Saver) { mutableStateOf(TestChoices()) }
|
|
val backupState by rememberSaveable(stateSaver = BackupState.Saver) { mutableStateOf(BackupState()) }
|
|
|
|
LongNewWalletBackup(
|
|
persistableWallet,
|
|
backupState,
|
|
testChoices,
|
|
onCopyToClipboard = onCopyToClipboard,
|
|
onComplete = onBackupComplete,
|
|
null
|
|
)
|
|
}
|
|
|
|
@Composable
|
|
private fun MainActivity.WrapShortNewWallet(
|
|
persistableWallet: PersistableWallet,
|
|
onBackupComplete: () -> Unit
|
|
) {
|
|
WrapShortNewWallet(this, persistableWallet, onBackupComplete)
|
|
}
|
|
|
|
@Composable
|
|
private fun WrapShortNewWallet(
|
|
activity: ComponentActivity,
|
|
persistableWallet: PersistableWallet,
|
|
onBackupComplete: () -> Unit
|
|
) {
|
|
WrapShortNewWallet(
|
|
persistableWallet,
|
|
onCopyToClipboard = { copyToClipboard(activity.applicationContext, persistableWallet) },
|
|
onNewWalletComplete = onBackupComplete
|
|
)
|
|
}
|
|
|
|
@Composable
|
|
private fun WrapShortNewWallet(
|
|
persistableWallet: PersistableWallet,
|
|
onCopyToClipboard: () -> Unit,
|
|
onNewWalletComplete: () -> Unit
|
|
) {
|
|
ShortNewWalletBackup(
|
|
persistableWallet,
|
|
onCopyToClipboard = onCopyToClipboard,
|
|
onComplete = onNewWalletComplete,
|
|
)
|
|
}
|
|
|
|
internal fun copyToClipboard(context: Context, persistableWallet: PersistableWallet) {
|
|
val clipboardManager = context.getSystemService(ClipboardManager::class.java)
|
|
val data = ClipData.newPlainText(
|
|
context.getString(R.string.new_wallet_clipboard_tag),
|
|
persistableWallet.seedPhrase.joinToString()
|
|
)
|
|
clipboardManager.setPrimaryClip(data)
|
|
}
|