109 lines
3.6 KiB
Kotlin
109 lines
3.6 KiB
Kotlin
package cash.z.ecc.android.ui.send
|
|
|
|
import android.content.ClipboardManager
|
|
import android.content.Context
|
|
import android.os.Bundle
|
|
import android.view.LayoutInflater
|
|
import android.view.View
|
|
import android.view.inputmethod.EditorInfo
|
|
import cash.z.ecc.android.R
|
|
import cash.z.ecc.android.databinding.FragmentSendAddressBinding
|
|
import cash.z.ecc.android.di.annotation.FragmentScope
|
|
import cash.z.ecc.android.di.viewmodel.viewModel
|
|
import cash.z.ecc.android.ext.goneIf
|
|
import cash.z.ecc.android.ext.onClickNavBack
|
|
import cash.z.ecc.android.ui.base.BaseFragment
|
|
import cash.z.wallet.sdk.ext.convertZatoshiToZecString
|
|
import cash.z.wallet.sdk.ext.twig
|
|
import dagger.Module
|
|
import dagger.android.ContributesAndroidInjector
|
|
import javax.inject.Inject
|
|
|
|
class SendAddressFragment : BaseFragment<FragmentSendAddressBinding>(),
|
|
ClipboardManager.OnPrimaryClipChangedListener {
|
|
|
|
val sendViewModel: SendViewModel by viewModel()
|
|
|
|
override fun inflate(inflater: LayoutInflater): FragmentSendAddressBinding =
|
|
FragmentSendAddressBinding.inflate(inflater)
|
|
|
|
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
|
|
super.onViewCreated(view, savedInstanceState)
|
|
binding.buttonNext.setOnClickListener {
|
|
onAddAddress()
|
|
}
|
|
binding.backButtonHitArea.onClickNavBack()
|
|
binding.textBannerAction.setOnClickListener {
|
|
onPaste()
|
|
}
|
|
binding.textBannerMessage.setOnClickListener {
|
|
onPaste()
|
|
}
|
|
binding.textAmount.text = "Sending ${sendViewModel.zatoshiAmount.convertZatoshiToZecString(8)} ZEC"
|
|
binding.inputZcashAddress.setOnEditorActionListener { v, actionId, event ->
|
|
if (actionId == EditorInfo.IME_ACTION_DONE) {
|
|
onAddAddress()
|
|
true
|
|
} else {
|
|
false
|
|
}
|
|
}
|
|
}
|
|
|
|
private fun onAddAddress() {
|
|
sendViewModel.toAddress = binding.inputZcashAddress.text.toString()
|
|
mainActivity?.navController?.navigate(R.id.action_nav_send_address_to_send_memo)
|
|
}
|
|
|
|
override fun onAttach(context: Context) {
|
|
super.onAttach(context)
|
|
mainActivity?.clipboard?.addPrimaryClipChangedListener(this)
|
|
}
|
|
|
|
override fun onDetach() {
|
|
super.onDetach()
|
|
mainActivity?.clipboard?.removePrimaryClipChangedListener(this)
|
|
}
|
|
|
|
override fun onResume() {
|
|
super.onResume()
|
|
updateClipboardBanner()
|
|
}
|
|
|
|
override fun onPrimaryClipChanged() {
|
|
twig("clipboard changed!")
|
|
updateClipboardBanner()
|
|
}
|
|
|
|
private fun updateClipboardBanner() {
|
|
binding.groupBanner.goneIf(loadAddressFromClipboard() == null)
|
|
}
|
|
|
|
private fun onPaste() {
|
|
mainActivity?.clipboard?.let { clipboard ->
|
|
if (clipboard.hasPrimaryClip()) {
|
|
binding.inputZcashAddress.setText(clipboard.text())
|
|
}
|
|
}
|
|
}
|
|
|
|
private fun loadAddressFromClipboard(): String? {
|
|
mainActivity?.clipboard?.apply {
|
|
if (hasPrimaryClip()) {
|
|
text()?.let { text ->
|
|
if (text.startsWith("zs") && text.length > 70) {
|
|
return@loadAddressFromClipboard text.toString()
|
|
}
|
|
// treat t-addrs differently in the future
|
|
if (text.startsWith("t1") && text.length > 32) {
|
|
return@loadAddressFromClipboard text.toString()
|
|
}
|
|
}
|
|
}
|
|
}
|
|
return null
|
|
}
|
|
|
|
private fun ClipboardManager.text(): CharSequence =
|
|
primaryClip!!.getItemAt(0).coerceToText(mainActivity)
|
|
} |