Implemented redesigned receive screen.

This commit is contained in:
Kevin Gorham 2020-01-08 03:46:40 -05:00
parent c42a0063c2
commit df651dddad
No known key found for this signature in database
GPG Key ID: CCA55602DF49FC38
3 changed files with 217 additions and 276 deletions

View File

@ -2,47 +2,46 @@ package cash.z.ecc.android.ui.receive
import android.content.Context
import android.os.Bundle
import android.text.SpannableString
import android.text.Spanned
import android.util.Log
import android.view.LayoutInflater
import android.view.View
import android.widget.TextView
import android.widget.Toast
import cash.z.android.qrecycler.QRecycler
import cash.z.ecc.android.databinding.FragmentReceiveBinding
import cash.z.ecc.android.R
import cash.z.ecc.android.databinding.FragmentReceiveNewBinding
import cash.z.ecc.android.di.viewmodel.viewModel
import cash.z.ecc.android.ext.onClickNavUp
import cash.z.ecc.android.ext.onClickNavBack
import cash.z.ecc.android.ext.onClickNavTo
import cash.z.ecc.android.ui.base.BaseFragment
import cash.z.ecc.android.ui.util.AddressPartNumberSpan
import cash.z.wallet.sdk.ext.abbreviatedAddress
import cash.z.wallet.sdk.ext.twig
import kotlinx.android.synthetic.main.fragment_receive.*
import kotlinx.coroutines.launch
import kotlin.math.roundToInt
class ReceiveFragment : BaseFragment<FragmentReceiveBinding>() {
class ReceiveFragment : BaseFragment<FragmentReceiveNewBinding>() {
private val viewModel: ReceiveViewModel by viewModel()
lateinit var qrecycler: QRecycler
lateinit var addressParts: Array<TextView>
// lateinit var addressParts: Array<TextView>
override fun inflate(inflater: LayoutInflater): FragmentReceiveBinding =
FragmentReceiveBinding.inflate(inflater)
override fun inflate(inflater: LayoutInflater): FragmentReceiveNewBinding =
FragmentReceiveNewBinding.inflate(inflater)
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
addressParts = arrayOf(
text_address_part_1,
text_address_part_2,
text_address_part_3,
text_address_part_4,
text_address_part_5,
text_address_part_6,
text_address_part_7,
text_address_part_8
)
binding.backButtonHitArea.onClickNavUp()
// addressParts = arrayOf(
// text_address_part_1,
// text_address_part_2,
// text_address_part_3,
// text_address_part_4,
// text_address_part_5,
// text_address_part_6,
// text_address_part_7,
// text_address_part_8
// )
binding.buttonScan.onClickNavTo(R.id.action_nav_receive_to_nav_scan)
binding.backButtonHitArea.onClickNavBack()
}
override fun onAttach(context: Context) {
@ -62,11 +61,13 @@ class ReceiveFragment : BaseFragment<FragmentReceiveBinding>() {
qrecycler.load(address)
.withQuietZoneSize(3)
.withCorrectionLevel(QRecycler.CorrectionLevel.MEDIUM)
.into(receive_qr_code)
.into(binding.receiveQrCode)
address.distribute(8) { i, part ->
setAddressPart(i, part)
}
binding.receiveAddress.text = address.abbreviatedAddress(12, 12)
// address.distribute(8) { i, part ->
// setAddressPart(i, part)
// }
}
private fun <T> String.distribute(chunks: Int, block: (Int, String) -> T) {
@ -83,13 +84,13 @@ class ReceiveFragment : BaseFragment<FragmentReceiveBinding>() {
}
}
private fun setAddressPart(index: Int, addressPart: String) {
Log.e("TWIG", "setting address for part $index) $addressPart")
val thinSpace = "\u2005" // 0.25 em space
val textSpan = SpannableString("${index + 1}$thinSpace$addressPart")
textSpan.setSpan(AddressPartNumberSpan(), 0, 2, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE)
addressParts[index].text = textSpan
}
// private fun setAddressPart(index: Int, addressPart: String) {
// Log.e("TWIG", "setting address for part $index) $addressPart")
// val thinSpace = "\u2005" // 0.25 em space
// val textSpan = SpannableString("${index + 1}$thinSpace$addressPart")
//
// textSpan.setSpan(AddressPartNumberSpan(), 0, 2, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE)
//
// addressParts[index].text = textSpan
// }
}

View File

@ -1,240 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<ScrollView
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:fillViewport="true">
<androidx.constraintlayout.widget.ConstraintLayout
android:id="@+id/layout_receive_fragment"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="@drawable/background_home"
tools:context=".ui.fragment.ReceiveFragment">
<!-- Back Button -->
<ImageView
android:id="@+id/back_button"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:tint="@color/text_light"
app:srcCompat="@drawable/ic_arrow_back_black_24dp"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintVertical_bias="0.065"
app:layout_constraintHorizontal_bias="0.05"/>
<View
android:id="@+id/back_button_hit_area"
android:layout_width="56dp"
android:layout_height="56dp"
android:clickable="true"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHorizontal_bias="0.01"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintVertical_bias="0.045" />
<!-- Shield Background -->
<ImageView
android:id="@+id/image_shield"
android:layout_width="0dp"
android:layout_height="0dp"
android:scaleType="fitXY"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintDimensionRatio="H,1:1.1676"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="@id/back_button"
app:layout_constraintVertical_bias="0.08"
app:layout_constraintWidth_default="percent"
app:layout_constraintWidth_percent="0.84988"
app:srcCompat="@drawable/ic_shield" />
<!-- QR code placeholder -->
<ImageView
android:id="@+id/receive_qr_code"
android:layout_width="0dp"
android:layout_height="0dp"
android:onClick="copyAddress"
android:scaleType="fitCenter"
app:layout_constraintBottom_toBottomOf="@id/image_shield"
app:layout_constraintDimensionRatio="H,1:1"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="@id/image_shield"
app:layout_constraintVertical_bias="0.272"
app:layout_constraintWidth_default="percent"
app:layout_constraintWidth_percent="0.59" />
<ImageView
android:layout_width="0dp"
android:layout_height="0dp"
android:onClick="copyAddress"
app:layout_constraintBottom_toBottomOf="@id/receive_qr_code"
app:layout_constraintDimensionRatio="H,1:1"
app:layout_constraintEnd_toEndOf="@id/receive_qr_code"
app:layout_constraintStart_toStartOf="@id/receive_qr_code"
app:layout_constraintTop_toTopOf="@id/receive_qr_code"
app:layout_constraintWidth_default="percent"
app:layout_constraintWidth_percent="0.12"
app:srcCompat="@drawable/ic_zcash_white" />
<com.google.android.material.card.MaterialCardView
android:id="@+id/receive_title"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:backgroundTint="@color/colorPrimary"
app:layout_constraintBottom_toBottomOf="@id/image_shield"
app:layout_constraintEnd_toEndOf="@+id/image_shield"
app:layout_constraintStart_toStartOf="@+id/image_shield"
app:layout_constraintTop_toTopOf="@id/image_shield"
app:layout_constraintVertical_bias="0.924">
<TextView
android:layout_width="match_parent"
android:layout_height="wrap_content"
style="@style/Zcash.TextAppearance.Headline6"
android:gravity="center"
android:padding="16dp"
android:text="@string/receive_address_title"
android:textColor="@color/text_dark" />
</com.google.android.material.card.MaterialCardView>
<!-- Address parts -->
<com.google.android.material.card.MaterialCardView
android:id="@+id/receive_address_background"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:backgroundTint="#282828"
app:layout_constraintEnd_toEndOf="@id/image_shield"
app:layout_constraintStart_toStartOf="@id/image_shield"
app:layout_constraintTop_toBottomOf="@id/image_shield">
<com.google.android.material.card.MaterialCardView
android:layout_width="match_parent"
android:layout_height="match_parent"
android:backgroundTint="#171717"
android:elevation="0dp">
<androidx.constraintlayout.widget.ConstraintLayout
android:id="@+id/receive_address_parts"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="center"
android:foregroundGravity="center"
android:onClick="copyAddress"
android:padding="16dp">
<TextView
android:id="@+id/text_address_part_1"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
style="@style/Zcash.TextAppearance.AddressPart"
android:text=" ztestsaplin"
app:layout_constraintBottom_toTopOf="@+id/text_address_part_3"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintVertical_bias="0.0"
app:layout_constraintVertical_chainStyle="packed" />
<TextView
android:id="@+id/text_address_part_3"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="4dp"
style="@style/Zcash.TextAppearance.AddressPart"
android:text=" jceuu9s2p6t"
app:layout_constraintBottom_toTopOf="@+id/text_address_part_5"
app:layout_constraintStart_toStartOf="@id/text_address_part_1"
app:layout_constraintTop_toBottomOf="@id/text_address_part_1" />
<TextView
android:id="@+id/text_address_part_5"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="4dp"
style="@style/Zcash.TextAppearance.AddressPart"
android:text=" 7u7uarqls7d"
app:layout_constraintBottom_toTopOf="@+id/text_address_part_7"
app:layout_constraintStart_toStartOf="@id/text_address_part_1"
app:layout_constraintTop_toBottomOf="@id/text_address_part_3" />
<TextView
android:id="@+id/text_address_part_7"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="4dp"
style="@style/Zcash.TextAppearance.AddressPart"
android:text=" rzq85xggu56"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintStart_toStartOf="@id/text_address_part_1"
app:layout_constraintTop_toBottomOf="@id/text_address_part_5" />
<TextView
android:id="@+id/text_address_part_2"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginLeft="8dp"
android:layout_marginStart="8dp"
style="@style/Zcash.TextAppearance.AddressPart"
android:text=" g1mwjzlg62j"
app:layout_constraintBottom_toTopOf="@+id/text_address_part_4"
app:layout_constraintStart_toEndOf="@id/barrier_left_address_column"
app:layout_constraintTop_toTopOf="@id/text_address_part_1" />
<TextView
android:id="@+id/text_address_part_4"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="4dp"
style="@style/Zcash.TextAppearance.AddressPart"
android:text=" wns6qxwec6v"
app:layout_constraintBottom_toTopOf="@+id/text_address_part_6"
app:layout_constraintStart_toStartOf="@id/text_address_part_2"
app:layout_constraintTop_toBottomOf="@id/text_address_part_2" />
<TextView
android:id="@+id/text_address_part_6"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="4dp"
style="@style/Zcash.TextAppearance.AddressPart"
android:text=" gtg3tpgqxjd"
app:layout_constraintBottom_toTopOf="@+id/text_address_part_8"
app:layout_constraintStart_toStartOf="@id/text_address_part_2"
app:layout_constraintTop_toBottomOf="@id/text_address_part_4" />
<TextView
android:id="@+id/text_address_part_8"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="4dp"
style="@style/Zcash.TextAppearance.AddressPart"
android:text=" k904xderng6"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintStart_toStartOf="@id/text_address_part_2"
app:layout_constraintTop_toBottomOf="@id/text_address_part_6" />
<androidx.constraintlayout.widget.Barrier
android:id="@+id/barrier_left_address_column"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginLeft="150dp"
android:layout_marginRight="150dp"
android:padding="150dp"
app:barrierDirection="end"
app:constraint_referenced_ids="text_address_part_1,text_address_part_3,text_address_part_5,text_address_part_7" />
</androidx.constraintlayout.widget.ConstraintLayout>
</com.google.android.material.card.MaterialCardView>
</com.google.android.material.card.MaterialCardView>
</androidx.constraintlayout.widget.ConstraintLayout>
</ScrollView>

View File

@ -0,0 +1,180 @@
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent">
<!-- Spacers -->
<Space
android:id="@+id/spacer_bottom_left"
android:layout_width="0dp"
android:layout_height="0dp"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintDimensionRatio="H,1:1"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintWidth_percent="0.116"
tools:background="@color/zcashRed" />
<Space
android:id="@+id/spacer_bottom_right"
android:layout_width="0dp"
android:layout_height="0dp"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintDimensionRatio="H,1:1"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintWidth_percent="0.116"
tools:background="@color/zcashRed" />
<Space
android:id="@+id/spacer_title"
android:layout_width="0dp"
android:layout_height="0dp"
app:layout_constraintDimensionRatio="H,1:1"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@id/background_qr"
app:layout_constraintWidth_percent="0.116"
tools:background="@color/zcashRed" />
<!-- <ImageView-->
<!-- android:id="@+id/scan_frame"-->
<!-- android:layout_width="0dp"-->
<!-- android:layout_height="0dp"-->
<!-- android:scaleType="centerCrop"-->
<!-- android:src="@drawable/ic_scan_frame"-->
<!-- app:layout_constraintDimensionRatio="H,1:1"-->
<!-- app:layout_constraintBottom_toBottomOf="parent"-->
<!-- app:layout_constraintEnd_toStartOf="@id/spacer_bottom_right"-->
<!-- app:layout_constraintStart_toEndOf="@id/spacer_bottom_left"-->
<!-- app:layout_constraintTop_toTopOf="parent"-->
<!-- app:layout_constraintVertical_bias="0.3" />-->
<ImageView
android:id="@+id/background_qr"
android:layout_width="0dp"
android:layout_height="0dp"
android:scaleType="fitXY"
android:src="@drawable/ic_background_qr"
app:layout_constraintDimensionRatio="H,1:1"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toStartOf="@id/spacer_bottom_right"
app:layout_constraintStart_toEndOf="@id/spacer_bottom_left"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintVertical_bias="0.3" />
<!-- QR code placeholder -->
<ImageView
android:id="@+id/receive_qr_code"
android:layout_width="0dp"
android:layout_height="0dp"
android:onClick="copyAddress"
android:scaleType="fitCenter"
tools:visibility="visible"
app:layout_constraintDimensionRatio="H,1:1"
app:layout_constraintWidth_percent="0.625"
app:layout_constraintStart_toStartOf="@id/background_qr"
app:layout_constraintEnd_toEndOf="@id/background_qr"
app:layout_constraintTop_toTopOf="@id/background_qr"
app:layout_constraintBottom_toBottomOf="@id/background_qr"
tools:background="@color/zcashWhite" />
<ImageView
android:id="@+id/icon_qr_logo"
android:layout_width="0dp"
android:layout_height="0dp"
android:layout_marginStart="16dp"
android:onClick="copyAddress"
android:scaleType="fitCenter"
android:src="@drawable/ic_zcash_primary"
app:layout_constraintBottom_toBottomOf="@id/receive_qr_code"
app:layout_constraintDimensionRatio="H,1:1"
app:layout_constraintEnd_toEndOf="@id/receive_qr_code"
app:layout_constraintStart_toStartOf="@id/receive_qr_code"
app:layout_constraintTop_toTopOf="@id/receive_qr_code"
app:layout_constraintWidth_percent="0.14" />
<TextView
android:id="@+id/receive_title"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Your Address"
android:textAppearance="@style/TextAppearance.MaterialComponents.Body1"
android:textColor="@color/text_light"
android:textSize="20dp"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@id/spacer_title" />
<TextView
android:id="@+id/receive_address"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textAppearance="@style/Zcash.TextAppearance.AddressPart"
android:textColor="@color/text_light"
android:textSize="16dp"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@id/receive_title"
tools:text="ztcs23cs...zt249skf" />
<ImageView
android:id="@+id/icon_copy"
android:layout_width="24dp"
android:layout_height="24dp"
android:layout_marginStart="16dp"
android:onClick="copyAddress"
android:scaleType="fitCenter"
android:src="@drawable/ic_content_copy"
app:layout_constraintBottom_toBottomOf="@id/receive_address"
app:layout_constraintStart_toEndOf="@id/receive_address"
app:layout_constraintTop_toTopOf="@id/receive_address" />
<com.google.android.material.button.MaterialButton
android:id="@+id/button_scan"
android:layout_width="0dp"
android:layout_height="wrap_content"
style="@style/Zcash.Button"
android:gravity="center"
android:padding="12dp"
android:text="Scan Recipient Address"
android:textAppearance="@style/TextAppearance.MaterialComponents.Body1"
android:textColor="#000000"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toStartOf="@id/spacer_bottom_right"
app:layout_constraintStart_toEndOf="@id/spacer_bottom_left"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintVertical_bias="0.9226" />
<!-- Back Button -->
<ImageView
android:id="@+id/back_button"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:tint="@color/text_light"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHorizontal_bias="0.05"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintVertical_bias="0.065"
app:srcCompat="@drawable/ic_arrow_back_black_24dp" />
<View
android:id="@+id/back_button_hit_area"
android:layout_width="56dp"
android:layout_height="56dp"
android:clickable="true"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHorizontal_bias="0.01"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintVertical_bias="0.045" />
</androidx.constraintlayout.widget.ConstraintLayout>