Added the ability to display seed words at any time.

Closes: #13
This commit is contained in:
Kevin Gorham 2019-12-18 12:20:56 -05:00
parent 93916a45f7
commit cf797b80a2
No known key found for this signature in database
GPG Key ID: CCA55602DF49FC38
6 changed files with 83 additions and 9 deletions

View File

@ -0,0 +1,14 @@
package cash.z.ecc.android.ext
import android.view.View
import androidx.lifecycle.LifecycleOwner
import androidx.lifecycle.lifecycleScope
import kotlinx.coroutines.flow.debounce
import kotlinx.coroutines.flow.launchIn
import kotlinx.coroutines.flow.onEach
fun <T: View> LifecycleOwner.onClick(view: T, throttle: Long = 250L, block: (T) -> Unit) {
view.clicks().debounce(throttle).onEach {
block(view)
}.launchIn(this.lifecycleScope)
}

View File

@ -5,9 +5,11 @@ import android.os.Bundle
import android.view.LayoutInflater
import android.view.View
import androidx.lifecycle.lifecycleScope
import cash.z.ecc.android.R
import cash.z.ecc.android.databinding.FragmentDetailBinding
import cash.z.ecc.android.di.annotation.FragmentScope
import cash.z.ecc.android.ext.clicks
import cash.z.ecc.android.ext.onClick
import cash.z.ecc.android.ext.onClickNavUp
import cash.z.ecc.android.feedback.FeedbackFile
import cash.z.ecc.android.ui.base.BaseFragment
@ -27,9 +29,16 @@ class WalletDetailFragment : BaseFragment<FragmentDetailBinding>() {
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
binding.backButtonHitArea.onClickNavUp()
binding.buttonLogs.clicks().debounce(250L).onEach {
onClick(binding.buttonLogs) {
onViewFeedback()
}.launchIn(lifecycleScope)
}
onClick(binding.buttonBackup, 1L) {
onBackupWallet()
}
}
private fun onBackupWallet() {
mainActivity?.navController?.navigate(R.id.action_nav_detail_to_backup_wallet)
}
private fun onViewFeedback() {

View File

@ -1,5 +1,6 @@
package cash.z.ecc.android.ui.setup
import android.content.Context
import android.os.Bundle
import android.text.SpannableString
import android.text.Spanned
@ -7,19 +8,34 @@ import android.view.LayoutInflater
import android.view.View
import android.widget.TextView
import android.widget.Toast
import androidx.fragment.app.activityViewModels
import androidx.lifecycle.ViewModelProvider
import androidx.lifecycle.lifecycleScope
import cash.z.ecc.android.R
import cash.z.ecc.android.ZcashWalletApp
import cash.z.ecc.android.databinding.FragmentBackupBinding
import cash.z.ecc.android.di.annotation.FragmentScope
import cash.z.ecc.android.ext.onClick
import cash.z.ecc.android.lockbox.LockBox
import cash.z.ecc.android.ui.base.BaseFragment
import cash.z.ecc.android.ui.setup.WalletSetupViewModel.LockBoxKey
import cash.z.ecc.android.ui.setup.WalletSetupViewModel.WalletSetupState.SEED_WITHOUT_BACKUP
import cash.z.ecc.android.ui.setup.WalletSetupViewModel.WalletSetupState.SEED_WITH_BACKUP
import cash.z.ecc.android.ui.util.AddressPartNumberSpan
import cash.z.ecc.kotlin.mnemonic.Mnemonics
import dagger.Module
import dagger.android.ContributesAndroidInjector
import kotlinx.coroutines.flow.launchIn
import kotlinx.coroutines.flow.onEach
import javax.inject.Inject
class BackupFragment : BaseFragment<FragmentBackupBinding>() {
@Inject
lateinit var viewModelFactory: ViewModelProvider.Factory
private val walletSetup: WalletSetupViewModel by activityViewModels { viewModelFactory }
private var hasBackUp: Boolean? = null
override fun inflate(inflater: LayoutInflater): FragmentBackupBinding =
FragmentBackupBinding.inflate(inflater)
@ -41,10 +57,25 @@ class BackupFragment : BaseFragment<FragmentBackupBinding>() {
binding.buttonPositive.setOnClickListener {
onEnterWallet()
}
if (hasBackUp == true) {
binding.buttonPositive.text = "Done"
}
}
override fun onAttach(context: Context) {
super.onAttach(context)
walletSetup.checkSeed().onEach {
when(it) {
SEED_WITH_BACKUP -> {
hasBackUp = true
}
}
}.launchIn(lifecycleScope)
}
private fun onEnterWallet() {
Toast.makeText(activity, "Backup verification coming soon! For now, enjoy your new wallet!", Toast.LENGTH_LONG).show()
if (hasBackUp != true) {
Toast.makeText(activity, "Backup verification coming soon!", Toast.LENGTH_LONG).show()
}
mainActivity?.navController?.popBackStack(R.id.wallet_setup_navigation, true)
}

View File

@ -1,11 +1,13 @@
package cash.z.ecc.android.ui.setup
import android.content.Context
import android.os.Bundle
import android.view.LayoutInflater
import android.view.View
import android.widget.Toast
import androidx.fragment.app.activityViewModels
import androidx.lifecycle.ViewModelProvider
import androidx.lifecycle.lifecycleScope
import cash.z.ecc.android.R
import cash.z.ecc.android.ZcashWalletApp
import cash.z.ecc.android.databinding.FragmentLandingBinding
@ -16,9 +18,13 @@ import cash.z.ecc.android.isEmulator
import cash.z.ecc.android.lockbox.LockBox
import cash.z.ecc.android.ui.base.BaseFragment
import cash.z.ecc.android.ui.setup.WalletSetupViewModel.LockBoxKey
import cash.z.ecc.android.ui.setup.WalletSetupViewModel.WalletSetupState.SEED_WITHOUT_BACKUP
import cash.z.ecc.android.ui.setup.WalletSetupViewModel.WalletSetupState.SEED_WITH_BACKUP
import cash.z.ecc.kotlin.mnemonic.Mnemonics
import dagger.Module
import dagger.android.ContributesAndroidInjector
import kotlinx.coroutines.flow.launchIn
import kotlinx.coroutines.flow.onEach
import javax.inject.Inject
class LandingFragment : BaseFragment<FragmentLandingBinding>() {
@ -47,6 +53,17 @@ class LandingFragment : BaseFragment<FragmentLandingBinding>() {
}
}
}
override fun onAttach(context: Context) {
super.onAttach(context)
walletSetup.checkSeed().onEach {
when(it) {
SEED_WITHOUT_BACKUP, SEED_WITH_BACKUP -> {
mainActivity?.navController?.navigate(R.id.nav_backup)
}
}
}.launchIn(lifecycleScope)
}
private fun onSkip(count: Int) {
when (count) {

View File

@ -68,14 +68,13 @@
app:layout_constraintVertical_bias="0.045" />
<TextView
android:id="@+id/button_backup"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="WALLET DETAIL"
android:text="Backup\nWallet"
android:textColor="@color/text_light"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
app:layout_constraintEnd_toEndOf="@id/guieline_keyline_end"
app:layout_constraintTop_toTopOf="@id/back_button" />
<View
android:id="@+id/text_banner_message"

View File

@ -37,7 +37,11 @@
<fragment
android:id="@+id/nav_detail"
android:name="cash.z.ecc.android.ui.detail.WalletDetailFragment"
tools:layout="@layout/fragment_detail" />
tools:layout="@layout/fragment_detail" >
<action
android:id="@+id/action_nav_detail_to_backup_wallet"
app:destination="@id/wallet_setup_navigation" />
</fragment>
<include app:graph="@navigation/wallet_setup_navigation" />