diff --git a/feature-account-impl/src/main/java/io/novafoundation/nova/feature_account_impl/presentation/manualBackup/secrets/advanced/ManualBackupAdvancedSecretsFragment.kt b/feature-account-impl/src/main/java/io/novafoundation/nova/feature_account_impl/presentation/manualBackup/secrets/advanced/ManualBackupAdvancedSecretsFragment.kt index 73a1c32..9a2efdc 100644 --- a/feature-account-impl/src/main/java/io/novafoundation/nova/feature_account_impl/presentation/manualBackup/secrets/advanced/ManualBackupAdvancedSecretsFragment.kt +++ b/feature-account-impl/src/main/java/io/novafoundation/nova/feature_account_impl/presentation/manualBackup/secrets/advanced/ManualBackupAdvancedSecretsFragment.kt @@ -61,4 +61,8 @@ class ManualBackupAdvancedSecretsFragment : override fun onTapToRevealClicked(item: ManualBackupSecretsVisibilityRvItem) { viewModel.onTapToRevealClicked(item) } + + override fun onMnemonicCopyClicked(mnemonicString: String) { + viewModel.copyMnemonic(mnemonicString) + } } diff --git a/feature-account-impl/src/main/java/io/novafoundation/nova/feature_account_impl/presentation/manualBackup/secrets/advanced/ManualBackupAdvancedSecretsViewModel.kt b/feature-account-impl/src/main/java/io/novafoundation/nova/feature_account_impl/presentation/manualBackup/secrets/advanced/ManualBackupAdvancedSecretsViewModel.kt index 64d9b1a..57f4bce 100644 --- a/feature-account-impl/src/main/java/io/novafoundation/nova/feature_account_impl/presentation/manualBackup/secrets/advanced/ManualBackupAdvancedSecretsViewModel.kt +++ b/feature-account-impl/src/main/java/io/novafoundation/nova/feature_account_impl/presentation/manualBackup/secrets/advanced/ManualBackupAdvancedSecretsViewModel.kt @@ -1,6 +1,7 @@ package io.novafoundation.nova.feature_account_impl.presentation.manualBackup.secrets.advanced import io.novafoundation.nova.common.base.BaseViewModel +import io.novafoundation.nova.common.resources.ClipboardManager import io.novafoundation.nova.common.resources.ResourceManager import io.novafoundation.nova.common.utils.flowOf import io.novafoundation.nova.feature_account_impl.R @@ -16,7 +17,8 @@ class ManualBackupAdvancedSecretsViewModel( private val resourceManager: ResourceManager, private val router: AccountRouter, private val payload: ManualBackupCommonPayload, - private val secretsAdapterItemFactory: ManualBackupSecretsAdapterItemFactory + private val secretsAdapterItemFactory: ManualBackupSecretsAdapterItemFactory, + private val clipboardManager: ClipboardManager ) : BaseViewModel() { val exportList = flowOf { buildSecrets() } @@ -31,6 +33,11 @@ class ManualBackupAdvancedSecretsViewModel( router.exportJsonAction(payload.toExportPayload()) } + fun copyMnemonic(mnemonicString: String) { + clipboardManager.addToClipboard(mnemonicString) + showToast(resourceManager.getString(R.string.common_copied)) + } + fun backClicked() { router.back() } diff --git a/feature-account-impl/src/main/java/io/novafoundation/nova/feature_account_impl/presentation/manualBackup/secrets/advanced/di/ManualBackupAdvancedSecretsModule.kt b/feature-account-impl/src/main/java/io/novafoundation/nova/feature_account_impl/presentation/manualBackup/secrets/advanced/di/ManualBackupAdvancedSecretsModule.kt index 98fb0d5..c11d5fd 100644 --- a/feature-account-impl/src/main/java/io/novafoundation/nova/feature_account_impl/presentation/manualBackup/secrets/advanced/di/ManualBackupAdvancedSecretsModule.kt +++ b/feature-account-impl/src/main/java/io/novafoundation/nova/feature_account_impl/presentation/manualBackup/secrets/advanced/di/ManualBackupAdvancedSecretsModule.kt @@ -8,6 +8,7 @@ import dagger.Provides import dagger.multibindings.IntoMap import io.novafoundation.nova.common.di.viewmodel.ViewModelKey import io.novafoundation.nova.common.di.viewmodel.ViewModelModule +import io.novafoundation.nova.common.resources.ClipboardManager import io.novafoundation.nova.common.resources.ResourceManager import io.novafoundation.nova.feature_account_impl.presentation.AccountRouter import io.novafoundation.nova.feature_account_impl.presentation.manualBackup.secrets.advanced.ManualBackupAdvancedSecretsViewModel @@ -24,13 +25,15 @@ class ManualBackupAdvancedSecretsModule { resourceManager: ResourceManager, router: AccountRouter, payload: ManualBackupCommonPayload, - secretsAdapterItemFactory: ManualBackupSecretsAdapterItemFactory + secretsAdapterItemFactory: ManualBackupSecretsAdapterItemFactory, + clipboardManager: ClipboardManager ): ViewModel { return ManualBackupAdvancedSecretsViewModel( resourceManager, router, payload, - secretsAdapterItemFactory + secretsAdapterItemFactory, + clipboardManager ) } diff --git a/feature-account-impl/src/main/java/io/novafoundation/nova/feature_account_impl/presentation/manualBackup/secrets/common/adapter/ManualBackupItemHandler.kt b/feature-account-impl/src/main/java/io/novafoundation/nova/feature_account_impl/presentation/manualBackup/secrets/common/adapter/ManualBackupItemHandler.kt index bed35b4..d64c1a4 100644 --- a/feature-account-impl/src/main/java/io/novafoundation/nova/feature_account_impl/presentation/manualBackup/secrets/common/adapter/ManualBackupItemHandler.kt +++ b/feature-account-impl/src/main/java/io/novafoundation/nova/feature_account_impl/presentation/manualBackup/secrets/common/adapter/ManualBackupItemHandler.kt @@ -8,4 +8,6 @@ interface ManualBackupItemHandler { fun onExportJsonClick(item: ManualBackupJsonRvItem) fun onTapToRevealClicked(item: ManualBackupSecretsVisibilityRvItem) + + fun onMnemonicCopyClicked(mnemonicString: String) } diff --git a/feature-account-impl/src/main/java/io/novafoundation/nova/feature_account_impl/presentation/manualBackup/secrets/common/adapter/viewHolders/ManualBackupMnemonicItem.kt b/feature-account-impl/src/main/java/io/novafoundation/nova/feature_account_impl/presentation/manualBackup/secrets/common/adapter/viewHolders/ManualBackupMnemonicItem.kt index 36a84e3..37d5a85 100644 --- a/feature-account-impl/src/main/java/io/novafoundation/nova/feature_account_impl/presentation/manualBackup/secrets/common/adapter/viewHolders/ManualBackupMnemonicItem.kt +++ b/feature-account-impl/src/main/java/io/novafoundation/nova/feature_account_impl/presentation/manualBackup/secrets/common/adapter/viewHolders/ManualBackupMnemonicItem.kt @@ -25,5 +25,6 @@ class ManualBackupMnemonicViewHolder(private val binder: ItemManualBackupMnemoni binder.manualBackupSecretsMnemonic.setWordsString(item.mnemonic) binder.manualBackupSecretsMnemonic.showContent(item.isShown) binder.manualBackupSecretsMnemonic.onContentShownListener { itemHandler.onTapToRevealClicked(item) } + binder.manualBackupSecretsMnemonic.setOnCopyClickListener { itemHandler.onMnemonicCopyClicked(it) } } } diff --git a/feature-account-impl/src/main/java/io/novafoundation/nova/feature_account_impl/presentation/manualBackup/secrets/main/ManualBackupSecretsFragment.kt b/feature-account-impl/src/main/java/io/novafoundation/nova/feature_account_impl/presentation/manualBackup/secrets/main/ManualBackupSecretsFragment.kt index 7668f25..320a103 100644 --- a/feature-account-impl/src/main/java/io/novafoundation/nova/feature_account_impl/presentation/manualBackup/secrets/main/ManualBackupSecretsFragment.kt +++ b/feature-account-impl/src/main/java/io/novafoundation/nova/feature_account_impl/presentation/manualBackup/secrets/main/ManualBackupSecretsFragment.kt @@ -74,4 +74,8 @@ class ManualBackupSecretsFragment : BaseFragment Unit)? = null + private var currentWords: List = emptyList() private val binder = ViewMnemonicCardViewBinding.inflate(inflater(), this) @@ -38,6 +40,12 @@ class MnemonicCardView @JvmOverloads constructor( binder.mnemonicCardPhrase.setItemPadding(4.dp) binder.mnemonicCardPhrase.adapter = adapter + binder.mnemonicCardCopy.setOnClickListener { + if (currentWords.isNotEmpty()) { + onCopyClickListener?.invoke(currentWords.joinToString(" ")) + } + } + binder.mnemonicCardTitle.text = SpannableFormatter.format( context.getString(R.string.mnemonic_card_title), context.getString(R.string.mnemonic_card_title_highlight) @@ -52,10 +60,12 @@ class MnemonicCardView @JvmOverloads constructor( } fun setWords(words: List) { + currentWords = words.map { it.content } adapter.submitList(words) } fun setWordsString(list: List) { + currentWords = list val words = list.mapIndexed { index, item -> MnemonicWord( id = index, @@ -64,7 +74,11 @@ class MnemonicCardView @JvmOverloads constructor( removed = false ) } - setWords(words) + adapter.submitList(words) + } + + fun setOnCopyClickListener(listener: ((String) -> Unit)?) { + onCopyClickListener = listener } fun setWordClickedListener(listener: BackupMnemonicAdapter.ItemHandler?) { diff --git a/feature-account-impl/src/main/res/layout/view_mnemonic_card_view.xml b/feature-account-impl/src/main/res/layout/view_mnemonic_card_view.xml index 6d702a0..a4fbad2 100644 --- a/feature-account-impl/src/main/res/layout/view_mnemonic_card_view.xml +++ b/feature-account-impl/src/main/res/layout/view_mnemonic_card_view.xml @@ -15,13 +15,32 @@ android:orientation="vertical" android:padding="12dp"> - + android:orientation="horizontal" + android:gravity="center_vertical"> + + + + + +