109 lines
3.7 KiB
Kotlin
109 lines
3.7 KiB
Kotlin
package cash.z.ecc.android.sdk.demoapp.demos.home
|
|
|
|
import android.content.res.ColorStateList
|
|
import android.graphics.Color
|
|
import android.os.Bundle
|
|
import android.view.LayoutInflater
|
|
import android.view.View
|
|
import androidx.lifecycle.lifecycleScope
|
|
import cash.z.ecc.android.sdk.demoapp.BaseDemoFragment
|
|
import cash.z.ecc.android.sdk.demoapp.databinding.FragmentHomeBinding
|
|
import cash.z.ecc.android.sdk.demoapp.util.mainActivity
|
|
import kotlinx.coroutines.launch
|
|
|
|
/**
|
|
* The landing page for the demo. Every time the app returns to this screen, it clears all demo
|
|
* data just for sanity. The goal is for each demo to be self-contained so that the behavior is
|
|
* repeatable and independent of pre-existing state.
|
|
*/
|
|
@Suppress("TooManyFunctions")
|
|
class HomeFragment : BaseDemoFragment<FragmentHomeBinding>() {
|
|
override fun inflateBinding(layoutInflater: LayoutInflater) = FragmentHomeBinding.inflate(layoutInflater)
|
|
|
|
override fun onViewCreated(
|
|
view: View,
|
|
savedInstanceState: Bundle?
|
|
) {
|
|
super.onViewCreated(view, savedInstanceState)
|
|
binding.textSeedPhrase.setOnClickListener(::onEditSeedPhrase)
|
|
binding.buttonPaste.setOnClickListener(::onPasteSeedPhrase)
|
|
binding.buttonAccept.setOnClickListener(::onAcceptSeedPhrase)
|
|
binding.buttonCancel.setOnClickListener(::onCancelSeedPhrase)
|
|
}
|
|
|
|
override fun onResume() {
|
|
super.onResume()
|
|
|
|
lifecycleScope.launch {
|
|
sharedViewModel.seedPhrase.collect {
|
|
binding.textSeedPhrase.text = "Seed Phrase: ${it.toAbbreviatedPhrase()}"
|
|
}
|
|
}
|
|
}
|
|
|
|
override fun onPause() {
|
|
super.onPause()
|
|
}
|
|
|
|
@Suppress("UNUSED_PARAMETER")
|
|
private fun onEditSeedPhrase(unused: View) {
|
|
setEditShown(true)
|
|
binding.inputSeedPhrase.setText(sharedViewModel.seedPhrase.value)
|
|
binding.textLayoutSeedPhrase.helperText = ""
|
|
}
|
|
|
|
@Suppress("UNUSED_PARAMETER")
|
|
private fun onAcceptSeedPhrase(unused: View) {
|
|
if (applySeedPhrase()) {
|
|
setEditShown(false)
|
|
binding.inputSeedPhrase.setText("")
|
|
}
|
|
}
|
|
|
|
@Suppress("UNUSED_PARAMETER")
|
|
private fun onCancelSeedPhrase(unused: View) {
|
|
setEditShown(false)
|
|
}
|
|
|
|
@Suppress("UNUSED_PARAMETER")
|
|
private fun onPasteSeedPhrase(unused: View) {
|
|
mainActivity()?.getClipboardText().let { clipboardText ->
|
|
binding.inputSeedPhrase.setText(clipboardText)
|
|
applySeedPhrase()
|
|
}
|
|
}
|
|
|
|
private fun applySeedPhrase(): Boolean {
|
|
val newPhrase = binding.inputSeedPhrase.text.toString()
|
|
return if (!sharedViewModel.updateSeedPhrase(newPhrase)) {
|
|
binding.textLayoutSeedPhrase.helperText = "Invalid seed phrase"
|
|
binding.textLayoutSeedPhrase.setHelperTextColor(ColorStateList.valueOf(Color.RED))
|
|
false
|
|
} else {
|
|
binding.textLayoutSeedPhrase.helperText = "valid seed phrase"
|
|
binding.textLayoutSeedPhrase.setHelperTextColor(ColorStateList.valueOf(Color.GREEN))
|
|
true
|
|
}
|
|
}
|
|
|
|
private fun setEditShown(isShown: Boolean) {
|
|
with(binding) {
|
|
textSeedPhrase.visibility = if (isShown) View.GONE else View.VISIBLE
|
|
textInstructions.visibility = if (isShown) View.GONE else View.VISIBLE
|
|
groupEdit.visibility = if (isShown) View.VISIBLE else View.GONE
|
|
}
|
|
}
|
|
|
|
private fun String.toAbbreviatedPhrase(): String {
|
|
this.trim().apply {
|
|
val firstSpace = indexOf(' ')
|
|
val lastSpace = lastIndexOf(' ')
|
|
return if (firstSpace != -1 && lastSpace >= firstSpace) {
|
|
"${take(firstSpace)}...${takeLast(length - 1 - lastSpace)}"
|
|
} else {
|
|
this
|
|
}
|
|
}
|
|
}
|
|
}
|