Added startup workflows.

- added home screen banner and logic to show/hide messages
- added no balance banner and behavior
- added landing and backup screens
- fixed and finished receive screen
- added back buttons
- switched from rounded to cut corners
- added sound and vibration
- added ability to detect dev environment and adjust behavior
This commit is contained in:
Kevin Gorham 2019-11-27 09:24:00 -05:00
parent 343b7c4cf3
commit a36fa8b4d4
No known key found for this signature in database
GPG Key ID: CCA55602DF49FC38
31 changed files with 1237 additions and 370 deletions

View File

@ -2,6 +2,8 @@
xmlns:android="http://schemas.android.com/apk/res/android"
package="cash.z.ecc.android">
<uses-permission android:name="android.permission.VIBRATE"/>
<application
android:name="cash.z.ecc.android.ZcashWalletApp"
android:allowBackup="false"

Binary file not shown.

View File

@ -1,6 +1,7 @@
package cash.z.ecc.android
import android.content.Context
import android.os.Build
import cash.z.ecc.android.di.DaggerAppComponent
import dagger.android.AndroidInjector
import dagger.android.DaggerApplication
@ -40,4 +41,12 @@ class ZcashWalletApp : DaggerApplication() {
ogHandler.uncaughtException(t, e)
}
}
}
}
fun ZcashWalletApp.isEmulator(): Boolean {
val goldfish = Build.HARDWARE.contains("goldfish");
val emu = (System.getProperty("ro.kernel.qemu", "")?.length ?: 0) > 0;
val sdk = Build.MODEL.toLowerCase().contains("sdk")
return goldfish || emu || sdk;
}

View File

@ -6,6 +6,8 @@ import cash.z.ecc.android.ui.detail.WalletDetailFragmentModule
import cash.z.ecc.android.ui.home.HomeFragmentModule
import cash.z.ecc.android.ui.receive.ReceiveFragmentModule
import cash.z.ecc.android.ui.send.SendFragmentModule
import cash.z.ecc.android.ui.setup.BackupFragmentModule
import cash.z.ecc.android.ui.setup.LandingFragmentModule
import dagger.Component
import dagger.android.AndroidInjector
import dagger.android.support.AndroidSupportInjectionModule
@ -23,7 +25,9 @@ import javax.inject.Singleton
HomeFragmentModule::class,
ReceiveFragmentModule::class,
SendFragmentModule::class,
WalletDetailFragmentModule::class
WalletDetailFragmentModule::class,
LandingFragmentModule::class,
BackupFragmentModule::class
]
)
interface AppComponent : AndroidInjector<ZcashWalletApp> {

View File

@ -0,0 +1,31 @@
package cash.z.ecc.android.ext
import android.view.View
import android.view.View.*
import cash.z.ecc.android.ui.MainActivity
fun View.goneIf(isGone: Boolean) {
visibility = if (isGone) GONE else VISIBLE
}
fun View.invisibleIf(isInvisible: Boolean) {
visibility = if (isInvisible) INVISIBLE else VISIBLE
}
fun View.onClickNavTo(navResId: Int) {
setOnClickListener {
(context as? MainActivity)?.navController?.navigate(navResId)
?: throw IllegalStateException("Cannot navigate from this activity. " +
"Expected MainActivity but found ${context.javaClass.simpleName}")
}
}
fun View.onClickNavUp() {
setOnClickListener {
(context as? MainActivity)?.navController?.navigateUp()
?: throw IllegalStateException(
"Cannot navigate from this activity. " +
"Expected MainActivity but found ${context.javaClass.simpleName}"
)
}
}

View File

@ -4,7 +4,10 @@ import android.content.ClipData
import android.content.ClipboardManager
import android.content.Context
import android.graphics.Color
import android.media.MediaPlayer
import android.os.Bundle
import android.os.Vibrator
import android.util.Log
import android.view.View
import android.view.WindowManager
import android.view.inputmethod.InputMethodManager
@ -14,7 +17,6 @@ import androidx.navigation.NavController
import androidx.navigation.findNavController
import cash.z.ecc.android.R
import cash.z.ecc.android.di.annotation.ActivityScope
import com.google.android.material.snackbar.Snackbar
import dagger.Module
import dagger.android.ContributesAndroidInjector
import dagger.android.support.DaggerAppCompatActivity
@ -22,7 +24,7 @@ import dagger.android.support.DaggerAppCompatActivity
class MainActivity : DaggerAppCompatActivity() {
lateinit var navController: NavController
private var snackbar: Snackbar? = null
private val mediaPlayer: MediaPlayer = MediaPlayer()
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
@ -34,7 +36,10 @@ class MainActivity : DaggerAppCompatActivity() {
WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS,
WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS
)
setWindowFlag(WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS, false)// | WindowManager.LayoutParams.FLAG_TRANSLUCENT_NAVIGATION, false)
setWindowFlag(
WindowManager.LayoutParams.FLAG_TRANSLUCENT_STATUS,
false
)// | WindowManager.LayoutParams.FLAG_TRANSLUCENT_NAVIGATION, false)
}
private fun setWindowFlag(bits: Int, on: Boolean) {
@ -47,6 +52,7 @@ class MainActivity : DaggerAppCompatActivity() {
}
win.attributes = winParams
}
private fun initNavigation() {
navController = findNavController(R.id.nav_host_fragment)
navController.addOnDestinationChangedListener { _, _, _ ->
@ -58,9 +64,34 @@ class MainActivity : DaggerAppCompatActivity() {
}
}
fun playSound(fileName: String) {
mediaPlayer.apply {
if (isPlaying) stop()
try {
reset()
assets.openFd(fileName).let { afd ->
setDataSource(afd.fileDescriptor, afd.startOffset, afd.length)
}
prepare()
start()
} catch (t: Throwable) {
Log.e("SDK_ERROR", "ERROR: unable to play sound due to $t")
}
}
}
// TODO: spruce this up with API 26 stuff
fun vibrateSuccess() {
val vibrator = getSystemService(Context.VIBRATOR_SERVICE) as Vibrator
if (vibrator.hasVibrator()) {
vibrator.vibrate(longArrayOf(0, 200, 200, 100, 100, 800), -1)
}
}
fun copyAddress(view: View) {
// TODO: get address from synchronizer
val address = "zs1qduvdyuv83pyygjvc4cfcuc2wj5flnqn730iigf0tjct8k5ccs9y30p96j2gvn9gzyxm6q0vj12c4"
val address =
"zs1qduvdyuv83pyygjvc4cfcuc2wj5flnqn730iigf0tjct8k5ccs9y30p96j2gvn9gzyxm6q0vj12c4"
val clipboard: ClipboardManager =
getSystemService(Context.CLIPBOARD_SERVICE) as ClipboardManager
clipboard.setPrimaryClip(
@ -74,14 +105,6 @@ class MainActivity : DaggerAppCompatActivity() {
private fun showMessage(message: String, action: String) {
Toast.makeText(this, message, Toast.LENGTH_SHORT).show()
// val view = findViewById<View>(android.R.id.content)
// if (snackbar == null) {
// snackbar = Snackbar.make(view, "$message", Snackbar.LENGTH_INDEFINITE)
// .setAction(action) { /*auto-close*/ }
// } else {
// snackbar?.setText(message)
// }
// if (snackbar?.isShownOrQueued == false) snackbar?.show()
}
}
@ -89,5 +112,5 @@ class MainActivity : DaggerAppCompatActivity() {
abstract class MainActivityModule {
@ActivityScope
@ContributesAndroidInjector
abstract fun contributeMainActivity(): MainActivity
abstract fun contributeActivity(): MainActivity
}

View File

@ -1,8 +1,11 @@
package cash.z.ecc.android.ui.detail
import android.os.Bundle
import android.view.LayoutInflater
import android.view.View
import cash.z.ecc.android.databinding.FragmentDetailBinding
import cash.z.ecc.android.di.annotation.FragmentScope
import cash.z.ecc.android.ext.onClickNavUp
import cash.z.ecc.android.ui.base.BaseFragment
import dagger.Module
import dagger.android.ContributesAndroidInjector
@ -10,6 +13,11 @@ import dagger.android.ContributesAndroidInjector
class WalletDetailFragment : BaseFragment<FragmentDetailBinding>() {
override fun inflate(inflater: LayoutInflater): FragmentDetailBinding =
FragmentDetailBinding.inflate(inflater)
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
binding.backButton.onClickNavUp()
}
}
@ -17,5 +25,5 @@ class WalletDetailFragment : BaseFragment<FragmentDetailBinding>() {
abstract class WalletDetailFragmentModule {
@FragmentScope
@ContributesAndroidInjector
abstract fun contributeWalletDetailFragment(): WalletDetailFragment
abstract fun contributeFragment(): WalletDetailFragment
}

View File

@ -3,10 +3,15 @@ package cash.z.ecc.android.ui.home
import android.os.Bundle
import android.view.LayoutInflater
import android.view.View
import android.widget.TextView
import cash.z.ecc.android.R
import cash.z.ecc.android.databinding.FragmentHomeBinding
import cash.z.ecc.android.di.annotation.FragmentScope
import cash.z.ecc.android.ext.goneIf
import cash.z.ecc.android.ext.onClickNavTo
import cash.z.ecc.android.ui.base.BaseFragment
import cash.z.ecc.android.ui.home.HomeFragment.BannerAction.*
import com.google.android.material.dialog.MaterialAlertDialogBuilder
import dagger.Module
import dagger.android.ContributesAndroidInjector
@ -16,14 +21,74 @@ class HomeFragment : BaseFragment<FragmentHomeBinding>() {
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
binding.hitAreaReceive.setOnClickListener {
mainActivity?.navController?.navigate(R.id.action_nav_home_to_nav_receive)
// TODO: trigger this from presenter
onNoFunds()
}
override fun onActivityCreated(savedInstanceState: Bundle?) {
super.onActivityCreated(savedInstanceState)
binding.hitAreaReceive.onClickNavTo(R.id.action_nav_home_to_nav_receive)
binding.iconDetail.onClickNavTo(R.id.action_nav_home_to_nav_detail)
binding.textDetail.onClickNavTo(R.id.action_nav_home_to_nav_detail)
binding.hitAreaScan.onClickNavTo(R.id.action_nav_home_to_nav_send)
binding.textBannerAction.setOnClickListener {
onBannerAction(BannerAction.from((it as? TextView)?.text?.toString()))
}
binding.iconDetail.setOnClickListener {
mainActivity?.navController?.navigate(R.id.action_nav_home_to_nav_detail)
}
private fun onBannerAction(action: BannerAction) {
when (action) {
LEARN_MORE -> {
MaterialAlertDialogBuilder(activity)
.setMessage("To make full use of this wallet, deposit funds to your address or tap the faucet to trigger a tiny automatic deposit.\n\nFaucet funds are made available for the community by the community for testing. So please be kind enough to return what you borrow!")
.setTitle("No Balance")
.setCancelable(true)
.setPositiveButton("Tap Faucet") { dialog, _ ->
dialog.dismiss()
setBanner("Tapping faucet...", CANCEL)
}
.setNegativeButton("View Address") { dialog, _ ->
dialog.dismiss()
mainActivity?.navController?.navigate(R.id.action_nav_home_to_nav_receive)
}
.show()
}
CANCEL -> {
// TODO: trigger banner / balance update
onNoFunds()
}
}
binding.hitAreaScan.setOnClickListener {
mainActivity?.navController?.navigate(R.id.action_nav_home_to_nav_send)
}
private fun onNoFunds() {
setBanner("No Balance", LEARN_MORE)
}
private fun setBanner(message: String = "", action: BannerAction = CLEAR) {
with(binding) {
val hasMessage = !message.isEmpty() || action != CLEAR
groupBalance.goneIf(hasMessage)
groupBanner.goneIf(!hasMessage)
layerLock.goneIf(!hasMessage)
textBannerMessage.text = message
textBannerAction.text = action.action
}
}
enum class BannerAction(val action: String) {
LEARN_MORE("Learn More"),
CANCEL("Cancel"),
CLEAR("");
companion object {
fun from(action: String?): BannerAction {
values().forEach {
if (it.action == action) return it
}
throw IllegalArgumentException("Invalid BannerAction: $action")
}
}
}
}
@ -33,5 +98,5 @@ class HomeFragment : BaseFragment<FragmentHomeBinding>() {
abstract class HomeFragmentModule {
@FragmentScope
@ContributesAndroidInjector
abstract fun contributeHomeFragment(): HomeFragment
abstract fun contributeFragment(): HomeFragment
}

View File

@ -12,6 +12,8 @@ import androidx.lifecycle.lifecycleScope
import cash.z.android.qrecycler.QRecycler
import cash.z.ecc.android.databinding.FragmentReceiveBinding
import cash.z.ecc.android.di.annotation.FragmentScope
import cash.z.ecc.android.ext.onClickNavTo
import cash.z.ecc.android.ext.onClickNavUp
import cash.z.ecc.android.ui.base.BaseFragment
import cash.z.ecc.android.ui.util.AddressPartNumberSpan
import dagger.Module
@ -39,6 +41,7 @@ class ReceiveFragment : BaseFragment<FragmentReceiveBinding>() {
text_address_part_7,
text_address_part_8
)
binding.backButton.onClickNavUp()
}
override fun onAttach(context: Context) {
@ -81,5 +84,5 @@ class ReceiveFragment : BaseFragment<FragmentReceiveBinding>() {
abstract class ReceiveFragmentModule {
@FragmentScope
@ContributesAndroidInjector
abstract fun contributeReceiveFragment(): ReceiveFragment
abstract fun contributeFragment(): ReceiveFragment
}

View File

@ -1,8 +1,11 @@
package cash.z.ecc.android.ui.send
import android.os.Bundle
import android.view.LayoutInflater
import android.view.View
import cash.z.ecc.android.databinding.FragmentSendBinding
import cash.z.ecc.android.di.annotation.FragmentScope
import cash.z.ecc.android.ext.onClickNavUp
import cash.z.ecc.android.ui.base.BaseFragment
import dagger.Module
import dagger.android.ContributesAndroidInjector
@ -10,6 +13,11 @@ import dagger.android.ContributesAndroidInjector
class SendFragment : BaseFragment<FragmentSendBinding>() {
override fun inflate(inflater: LayoutInflater): FragmentSendBinding =
FragmentSendBinding.inflate(inflater)
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
binding.backButton.onClickNavUp()
}
}
@ -17,5 +25,5 @@ class SendFragment : BaseFragment<FragmentSendBinding>() {
abstract class SendFragmentModule {
@FragmentScope
@ContributesAndroidInjector
abstract fun contributeSendFragment(): SendFragment
abstract fun contributeFragment(): SendFragment
}

View File

@ -0,0 +1,63 @@
package cash.z.ecc.android.ui.setup
import android.os.Bundle
import android.text.SpannableString
import android.text.Spanned
import android.view.LayoutInflater
import android.view.View
import android.widget.TextView
import android.widget.Toast
import cash.z.ecc.android.R
import cash.z.ecc.android.databinding.FragmentBackupBinding
import cash.z.ecc.android.di.annotation.FragmentScope
import cash.z.ecc.android.ui.base.BaseFragment
import cash.z.ecc.android.ui.util.AddressPartNumberSpan
import dagger.Module
import dagger.android.ContributesAndroidInjector
class BackupFragment : BaseFragment<FragmentBackupBinding>() {
override fun inflate(inflater: LayoutInflater): FragmentBackupBinding =
FragmentBackupBinding.inflate(inflater)
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
with(binding) {
applySpan(
textAddressPart1,
textAddressPart2,
textAddressPart3,
textAddressPart4,
textAddressPart5,
textAddressPart6,
textAddressPart7,
textAddressPart8
)
}
binding.buttonPositive.setOnClickListener {
onEnterWallet()
}
}
private fun onEnterWallet() {
Toast.makeText(activity, "Backup verification coming soon! For now, enjoy your new wallet!", Toast.LENGTH_LONG).show()
mainActivity?.navController?.navigate(R.id.action_nav_backup_to_nav_home)
}
private fun applySpan(vararg textViews: TextView) {
val thinSpace = "\u2005" // 0.25 em space
textViews.forEachIndexed { index, textView ->
textView.text = SpannableString("${index + 1}$thinSpace${textView.text}").apply {
setSpan(AddressPartNumberSpan(), 0, 2, Spanned.SPAN_EXCLUSIVE_EXCLUSIVE)
}
}
}
}
@Module
abstract class BackupFragmentModule {
@FragmentScope
@ContributesAndroidInjector
abstract fun contributeFragment(): BackupFragment
}

View File

@ -0,0 +1,89 @@
package cash.z.ecc.android.ui.setup
import android.os.Bundle
import android.view.LayoutInflater
import android.view.View
import android.widget.Toast
import cash.z.ecc.android.R
import cash.z.ecc.android.ZcashWalletApp
import cash.z.ecc.android.databinding.FragmentLandingBinding
import cash.z.ecc.android.di.annotation.FragmentScope
import cash.z.ecc.android.isEmulator
import cash.z.ecc.android.ui.base.BaseFragment
import dagger.Module
import dagger.android.ContributesAndroidInjector
class LandingFragment : BaseFragment<FragmentLandingBinding>() {
private var skipCount: Int = 0
override fun inflate(inflater: LayoutInflater): FragmentLandingBinding =
FragmentLandingBinding.inflate(inflater)
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
super.onViewCreated(view, savedInstanceState)
binding.buttonPositive.setOnClickListener {
when (binding.buttonPositive.text.toString().toLowerCase()) {
"new" -> onNewWallet()
"backup" -> onBackupWallet()
}
}
binding.buttonNegative.setOnClickListener {
when (binding.buttonNegative.text.toString().toLowerCase()) {
"restore" -> onRestoreWallet()
else -> onSkip(++skipCount)
}
}
}
private fun onSkip(count: Int) {
when (count) {
1 -> {
binding.textMessage.text =
"Are you sure? Without a backup, funds can be lost FOREVER!"
binding.buttonNegative.text = "Later"
}
2 -> {
binding.textMessage.text =
"You can't backup later. You're probably going to lose your funds!"
binding.buttonNegative.text = "I've been warned"
}
else -> {
onEnterWallet()
}
}
}
private fun onRestoreWallet() {
if (ZcashWalletApp.instance.isEmulator()) {
onEnterWallet()
} else {
Toast.makeText(activity, "Coming soon!", Toast.LENGTH_SHORT).show()
}
}
private fun onNewWallet() {
binding.textMessage.text = "Wallet created! Congratulations!"
binding.buttonNegative.text = "Skip"
binding.buttonPositive.text = "Backup"
mainActivity?.playSound("sound_receive_small.mp3")
mainActivity?.vibrateSuccess()
}
private fun onBackupWallet() {
skipCount = 0
mainActivity?.navController?.navigate(R.id.action_nav_landing_to_nav_backup)
}
private fun onEnterWallet() {
skipCount = 0
mainActivity?.navController?.navigate(R.id.action_nav_landing_to_nav_home)
}
}
@Module
abstract class LandingFragmentModule {
@FragmentScope
@ContributesAndroidInjector
abstract fun contributeFragment(): LandingFragment
}

View File

@ -0,0 +1,7 @@
<?xml version="1.0" encoding="utf-8"?>
<shape
xmlns:android="http://schemas.android.com/apk/res/android">
<corners android:radius="10dp" />
<stroke android:width="1dp" android:color="#282828"/>
<solid android:color="#171717"/>
</shape>

View File

@ -0,0 +1,7 @@
<?xml version="1.0" encoding="utf-8"?>
<shape
xmlns:android="http://schemas.android.com/apk/res/android">
<corners android:radius="10dp" />
<stroke android:width="1dp" android:color="#282828"/>
<solid android:color="#171717"/>
</shape>

View File

@ -0,0 +1,9 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="24dp"
android:height="24dp"
android:viewportWidth="24.0"
android:viewportHeight="24.0">
<path
android:fillColor="#FF000000"
android:pathData="M20,11H7.83l5.59,-5.59L12,4l-8,8 8,8 1.41,-1.41L7.83,13H20v-2z"/>
</vector>

View File

@ -0,0 +1,55 @@
<vector xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:aapt="http://schemas.android.com/aapt"
android:width="175dp"
android:height="175dp"
android:viewportWidth="175"
android:viewportHeight="175">
<path
android:pathData="M87.502,2C41.457,2 4,39.457 4,85.498C4,131.539 41.457,169 87.502,169C133.546,169 171,131.543 171,85.498C171,39.454 133.543,2 87.502,2ZM87.502,155.215C49.059,155.215 17.785,123.941 17.785,85.498C17.785,47.055 49.059,15.785 87.502,15.785C125.945,15.785 157.215,47.059 157.215,85.498C157.215,123.937 125.941,155.215 87.502,155.215Z"
android:strokeWidth="1"
android:fillColor="#000000"
android:fillAlpha="1"
android:fillType="nonZero"
android:strokeColor="#00000000"/>
<path
android:pathData="M87.502,2C41.457,2 4,39.457 4,85.498C4,131.539 41.457,169 87.502,169C133.546,169 171,131.543 171,85.498C171,39.454 133.543,2 87.502,2ZM87.502,155.215C49.059,155.215 17.785,123.941 17.785,85.498C17.785,47.055 49.059,15.785 87.502,15.785C125.945,15.785 157.215,47.059 157.215,85.498C157.215,123.937 125.941,155.215 87.502,155.215Z"
android:strokeWidth="1"
android:fillType="nonZero"
android:strokeColor="#00000000">
<aapt:attr name="android:fillColor">
<gradient
android:startY="2"
android:startX="87.5"
android:endY="169"
android:endX="87.5"
android:type="linear">
<item android:offset="0" android:color="#FFFFA200"/>
<item android:offset="1" android:color="#FFFFBC00"/>
</gradient>
</aapt:attr>
</path>
<path
android:pathData="M117,59.586l0,-12.676l-22.571,0l0,-13.911l-13.862,0l0,13.911l-22.567,0l0,16.79l34.987,0l-28.612,39.557l-6.375,8.141l0,12.676l22.567,0l0,13.867l1.663,0l0,0.059l10.537,0l0,-0.059l1.663,0l0,-13.867l22.571,0l0,-16.79l-34.99,0l28.612,-39.557z"
android:strokeWidth="1"
android:fillColor="#000000"
android:fillAlpha="1"
android:fillType="nonZero"
android:strokeColor="#00000000"/>
<path
android:pathData="M117,59.586l0,-12.676l-22.571,0l0,-13.911l-13.862,0l0,13.911l-22.567,0l0,16.79l34.987,0l-28.612,39.557l-6.375,8.141l0,12.676l22.567,0l0,13.867l1.663,0l0,0.059l10.537,0l0,-0.059l1.663,0l0,-13.867l22.571,0l0,-16.79l-34.99,0l28.612,-39.557z"
android:strokeWidth="1"
android:fillType="nonZero"
android:strokeColor="#00000000">
<aapt:attr name="android:fillColor">
<gradient
android:startY="32.999"
android:startX="87.5005"
android:endY="138.00002"
android:endX="87.5005"
android:type="linear">
<item android:offset="0" android:color="#FFFFA200"/>
<item android:offset="1" android:color="#FFFFBC00"/>
</gradient>
</aapt:attr>
</path>
</vector>

View File

@ -0,0 +1,19 @@
<?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"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@drawable/background_home"
xmlns:tools="http://schemas.android.com/tools">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textColor="@color/text_light"
android:text="send address"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintEnd_toEndOf="parent"/>
</androidx.constraintlayout.widget.ConstraintLayout>

View File

@ -0,0 +1,187 @@
<?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"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@drawable/background_home">
<androidx.constraintlayout.widget.Guideline
android:id="@+id/guideline_buttons"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="horizontal"
app:layout_constraintGuide_percent="0.667" />
<!-- Address parts -->
<!-- Someday, there will be an advanced VirtualLayout that helps us do this without nesting but for now, this seems to be the only clean way to center all the fields -->
<androidx.constraintlayout.widget.ConstraintLayout
android:id="@+id/receive_address_parts"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:foregroundGravity="center"
android:padding="16dp"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintBottom_toTopOf="@id/text_message"
>
<TextView
android:id="@+id/text_address_part_1"
style="@style/Zcash.TextAppearance.AddressPart"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="drum"
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"
style="@style/Zcash.TextAppearance.AddressPart"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="4dp"
android:text="inject"
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"
style="@style/Zcash.TextAppearance.AddressPart"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="4dp"
android:text="plate"
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"
style="@style/Zcash.TextAppearance.AddressPart"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="4dp"
android:text="talk"
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"
style="@style/Zcash.TextAppearance.AddressPart"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="8dp"
android:layout_marginLeft="8dp"
android:text="fitness"
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"
style="@style/Zcash.TextAppearance.AddressPart"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="4dp"
android:text="pool"
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"
style="@style/Zcash.TextAppearance.AddressPart"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="4dp"
android:text="inform"
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"
style="@style/Zcash.TextAppearance.AddressPart"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="4dp"
android:text="helmet"
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>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
style="@style/TextAppearance.MaterialComponents.Body1"
android:gravity="center"
android:text="empowering\neveryone\nwith\neconomic\nfreedom"
android:textColor="@color/zcashWhite_50"
android:textSize="56dp"
android:alpha="0.03"
app:layout_constraintBottom_toBottomOf="@id/icon_logo"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="@id/icon_logo" />
<ImageView
android:id="@+id/icon_logo"
android:layout_width="0dp"
android:layout_height="0dp"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintDimensionRatio="W,1:1"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintVertical_bias="0.33333"
app:layout_constraintWidth_percent="0.4053398058"
android:visibility="invisible"
app:srcCompat="@drawable/ic_logo_landing" />
<!-- Choose release names from here https://en.wikipedia.org/wiki/List_of_woods -->
<TextView
android:id="@+id/text_message"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
style="@style/TextAppearance.MaterialComponents.Headline6"
android:gravity="center"
android:paddingStart="32dp"
android:paddingEnd="32dp"
android:text="Store these backup words securely."
android:textColor="@color/zcashWhite"
app:layout_constraintBottom_toTopOf="@id/guideline_buttons"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@id/icon_logo" />
<com.google.android.material.button.MaterialButton
android:id="@+id/button_positive"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="Verify"
android:textColor="@color/text_dark"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="@id/guideline_buttons" />
</androidx.constraintlayout.widget.ConstraintLayout>

View File

@ -0,0 +1,19 @@
<?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"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@drawable/background_home"
xmlns:tools="http://schemas.android.com/tools">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textColor="@color/text_light"
android:text="send confirm"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintEnd_toEndOf="parent"/>
</androidx.constraintlayout.widget.ConstraintLayout>

View File

@ -7,6 +7,20 @@
android:background="@drawable/background_home"
xmlns:tools="http://schemas.android.com/tools">
<!-- 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"/>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"

View File

@ -6,117 +6,6 @@
android:layout_height="match_parent"
android:background="@drawable/background_home">
<ImageView
android:id="@+id/icon_scan"
android:layout_width="0dp"
android:layout_height="0dp"
android:tint="@color/colorAccent"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHorizontal_bias="0.108"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintVertical_bias="0.0574"
app:layout_constraintHeight_percent="0.052"
app:layout_constraintWidth_percent="0.0887"
app:srcCompat="@drawable/ic_qrcode_24dp" />
<ImageView
android:id="@+id/icon_receive"
android:layout_width="0dp"
android:layout_height="0dp"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHorizontal_bias="0.8883"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintVertical_bias="0.06420765027"
app:layout_constraintHeight_percent="0.03825136612"
app:layout_constraintWidth_percent="0.05582524272"
app:srcCompat="@drawable/ic_receive_funds" />
<ImageView
android:id="@+id/icon_detail"
android:layout_width="0dp"
android:layout_height="0dp"
android:tint="@color/colorAccent"
app:layout_constraintTop_toTopOf="@id/text_detail"
app:layout_constraintBottom_toBottomOf="@id/text_detail"
app:layout_constraintEnd_toStartOf="@id/text_detail"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintHeight_percent="0.044"
app:layout_constraintWidth_percent="0.0887"
app:srcCompat="@drawable/ic_receipt_24dp"
app:layout_constraintHorizontal_chainStyle="packed"/>
<TextView
android:id="@+id/text_detail"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="12dp"
android:textAppearance="@style/TextAppearance.MaterialComponents.Body1"
android:tint="@color/colorAccent"
android:text="Wallet Details"
android:textColor="@color/colorAccent"
app:layout_constraintTop_toBottomOf="@id/button_send"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintVertical_bias="@dimen/ratio_golden_small"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toEndOf="@id/icon_detail"/>
<TextView
android:id="@+id/text_amount"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:gravity="center"
android:includeFontPadding="false"
android:text="12.345"
android:textSize="72dp"
android:textAppearance="@style/TextAppearance.MaterialComponents.Body2"
android:textColor="@color/text_light"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintBottom_toTopOf="@id/guide_keys"/>
<TextView
android:id="@+id/text_balance_available"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="12.34581242 ZEC"
android:textAppearance="@style/TextAppearance.MaterialComponents.Body1"
android:textColor="@color/text_light"
app:layout_constraintTop_toBottomOf="@id/text_amount"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintEnd_toStartOf="@id/label_available"
app:layout_constraintHorizontal_chainStyle="packed"/>
<TextView
android:id="@+id/label_available"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginLeft="4dp"
android:text="Available"
android:textAppearance="@style/TextAppearance.MaterialComponents.Body1"
android:textColor="@color/colorPrimary"
app:layout_constraintBaseline_toBaselineOf="@id/text_balance_available"
app:layout_constraintStart_toEndOf="@id/text_balance_available"
app:layout_constraintEnd_toEndOf="parent"/>
<ImageView
android:id="@+id/icon_zec_symbol"
android:layout_width="0dp"
android:layout_height="0dp"
android:tint="@color/colorAccent"
app:layout_constraintWidth_percent="0.060"
app:layout_constraintHeight_percent="0.052"
app:layout_constraintTop_toTopOf="@id/text_amount"
app:layout_constraintBottom_toBottomOf="@id/text_amount"
app:layout_constraintEnd_toStartOf="@id/text_amount"
app:layout_constraintVertical_bias="0.2"
app:srcCompat="@drawable/ic_zec_symbol" />
<View
android:id="@+id/guide_keys"
android:layout_width="0dp"
@ -131,159 +20,197 @@
app:layout_constraintVertical_bias="0.58"
app:layout_constraintWidth_percent="0.7475728155" />
<androidx.constraintlayout.widget.Guideline
android:id="@+id/guideline_hit_area_top"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="horizontal"
app:layout_constraintGuide_percent="0.04" />
<TextView
android:id="@+id/text_balance_available"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="12.34581242 ZEC"
android:textAppearance="@style/TextAppearance.MaterialComponents.Body1"
android:textColor="@color/text_light"
android:visibility="gone"
app:layout_constraintEnd_toStartOf="@id/label_balance"
app:layout_constraintHorizontal_chainStyle="packed"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@id/text_send_amount" />
<TextView
android:id="@+id/label_balance"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginLeft="4dp"
android:text="Available"
android:textAppearance="@style/TextAppearance.MaterialComponents.Body1"
android:textColor="@color/colorPrimary"
android:visibility="gone"
app:layout_constraintBaseline_toBaselineOf="@id/text_balance_available"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toEndOf="@id/text_balance_available" />
<!-- -->
<!-- Calculator -->
<!-- -->
<androidx.appcompat.widget.AppCompatButton
android:id="@+id/button_calculator_1"
android:layout_width="0dp"
android:layout_height="0dp"
android:text="1"
style="@style/Zcash.TextView.Calculator"
android:text="1"
app:layout_constraintBottom_toTopOf="@id/button_calculator_4"
app:layout_constraintDimensionRatio="H,1:1"
app:layout_constraintStart_toStartOf="@id/guide_keys"
app:layout_constraintTop_toTopOf="@id/guide_keys"
app:layout_constraintBottom_toTopOf="@id/button_calculator_4"
app:layout_constraintWidth_percent="@dimen/calculator_button_width_percent"
app:layout_constraintVertical_chainStyle="spread_inside"/>
app:layout_constraintVertical_chainStyle="spread_inside"
app:layout_constraintWidth_percent="@dimen/calculator_button_width_percent" />
<androidx.appcompat.widget.AppCompatButton
android:id="@+id/button_calculator_2"
android:layout_width="0dp"
android:layout_height="0dp"
android:text="2"
style="@style/Zcash.TextView.Calculator"
app:layout_constraintDimensionRatio="H,1:1"
app:layout_constraintStart_toStartOf="@id/guide_keys"
app:layout_constraintEnd_toEndOf="@id/guide_keys"
app:layout_constraintTop_toTopOf="@id/guide_keys"
android:text="2"
app:layout_constraintBottom_toTopOf="@id/button_calculator_5"
app:layout_constraintWidth_percent="@dimen/calculator_button_width_percent"
app:layout_constraintVertical_chainStyle="spread_inside"/>
app:layout_constraintDimensionRatio="H,1:1"
app:layout_constraintEnd_toEndOf="@id/guide_keys"
app:layout_constraintStart_toStartOf="@id/guide_keys"
app:layout_constraintTop_toTopOf="@id/guide_keys"
app:layout_constraintVertical_chainStyle="spread_inside"
app:layout_constraintWidth_percent="@dimen/calculator_button_width_percent" />
<androidx.appcompat.widget.AppCompatButton
android:id="@+id/button_calculator_3"
android:layout_width="0dp"
android:layout_height="0dp"
android:text="3"
style="@style/Zcash.TextView.Calculator"
android:text="3"
app:layout_constraintBottom_toTopOf="@id/button_calculator_6"
app:layout_constraintDimensionRatio="H,1:1"
app:layout_constraintEnd_toEndOf="@id/guide_keys"
app:layout_constraintTop_toTopOf="@id/guide_keys"
app:layout_constraintBottom_toTopOf="@id/button_calculator_6"
app:layout_constraintWidth_percent="@dimen/calculator_button_width_percent"
app:layout_constraintVertical_chainStyle="spread_inside"/>
app:layout_constraintVertical_chainStyle="spread_inside"
app:layout_constraintWidth_percent="@dimen/calculator_button_width_percent" />
<androidx.appcompat.widget.AppCompatButton
android:id="@+id/button_calculator_4"
android:layout_width="0dp"
android:layout_height="0dp"
android:text="4"
style="@style/Zcash.TextView.Calculator"
android:text="4"
app:layout_constraintBottom_toTopOf="@id/button_calculator_7"
app:layout_constraintDimensionRatio="H,1:1"
app:layout_constraintHorizontal_chainStyle="packed"
app:layout_constraintStart_toStartOf="@id/guide_keys"
app:layout_constraintTop_toBottomOf="@id/button_calculator_1"
app:layout_constraintBottom_toTopOf="@id/button_calculator_7"
app:layout_constraintWidth_percent="@dimen/calculator_button_width_percent"
app:layout_constraintHorizontal_chainStyle="packed"/>
app:layout_constraintWidth_percent="@dimen/calculator_button_width_percent" />
<androidx.appcompat.widget.AppCompatButton
android:id="@+id/button_calculator_5"
android:layout_width="0dp"
android:layout_height="0dp"
android:text="5"
style="@style/Zcash.TextView.Calculator"
app:layout_constraintDimensionRatio="H,1:1"
app:layout_constraintStart_toStartOf="@id/guide_keys"
app:layout_constraintEnd_toEndOf="@id/guide_keys"
app:layout_constraintTop_toBottomOf="@id/button_calculator_2"
android:text="5"
app:layout_constraintBottom_toTopOf="@id/button_calculator_8"
app:layout_constraintDimensionRatio="H,1:1"
app:layout_constraintEnd_toEndOf="@id/guide_keys"
app:layout_constraintStart_toStartOf="@id/guide_keys"
app:layout_constraintTop_toBottomOf="@id/button_calculator_2"
app:layout_constraintWidth_percent="@dimen/calculator_button_width_percent" />
<androidx.appcompat.widget.AppCompatButton
android:id="@+id/button_calculator_6"
android:layout_width="0dp"
android:layout_height="0dp"
android:text="6"
style="@style/Zcash.TextView.Calculator"
android:text="6"
app:layout_constraintBottom_toTopOf="@id/button_calculator_9"
app:layout_constraintDimensionRatio="H,1:1"
app:layout_constraintEnd_toEndOf="@id/guide_keys"
app:layout_constraintTop_toBottomOf="@id/button_calculator_3"
app:layout_constraintBottom_toTopOf="@id/button_calculator_9"
app:layout_constraintWidth_percent="@dimen/calculator_button_width_percent" />
<androidx.appcompat.widget.AppCompatButton
android:id="@+id/button_calculator_7"
android:layout_width="0dp"
android:layout_height="0dp"
android:text="7"
style="@style/Zcash.TextView.Calculator"
android:text="7"
app:layout_constraintBottom_toTopOf="@id/button_calculator_decimal"
app:layout_constraintDimensionRatio="H,1:1"
app:layout_constraintHorizontal_chainStyle="packed"
app:layout_constraintStart_toStartOf="@id/guide_keys"
app:layout_constraintTop_toBottomOf="@id/button_calculator_4"
app:layout_constraintBottom_toTopOf="@id/button_calculator_decimal"
app:layout_constraintWidth_percent="@dimen/calculator_button_width_percent"
app:layout_constraintHorizontal_chainStyle="packed"/>
app:layout_constraintWidth_percent="@dimen/calculator_button_width_percent" />
<androidx.appcompat.widget.AppCompatButton
android:id="@+id/button_calculator_8"
android:layout_width="0dp"
android:layout_height="0dp"
android:text="8"
style="@style/Zcash.TextView.Calculator"
app:layout_constraintDimensionRatio="H,1:1"
app:layout_constraintStart_toStartOf="@id/guide_keys"
app:layout_constraintEnd_toEndOf="@id/guide_keys"
app:layout_constraintTop_toBottomOf="@id/button_calculator_5"
android:text="8"
app:layout_constraintBottom_toTopOf="@id/button_calculator_0"
app:layout_constraintDimensionRatio="H,1:1"
app:layout_constraintEnd_toEndOf="@id/guide_keys"
app:layout_constraintStart_toStartOf="@id/guide_keys"
app:layout_constraintTop_toBottomOf="@id/button_calculator_5"
app:layout_constraintWidth_percent="@dimen/calculator_button_width_percent" />
<androidx.appcompat.widget.AppCompatButton
android:id="@+id/button_calculator_9"
android:layout_width="0dp"
android:layout_height="0dp"
android:text="9"
style="@style/Zcash.TextView.Calculator"
android:text="9"
app:layout_constraintBottom_toTopOf="@id/button_calculator_back"
app:layout_constraintDimensionRatio="H,1:1"
app:layout_constraintEnd_toEndOf="@id/guide_keys"
app:layout_constraintTop_toBottomOf="@id/button_calculator_6"
app:layout_constraintBottom_toTopOf="@id/button_calculator_back"
app:layout_constraintWidth_percent="@dimen/calculator_button_width_percent" />
<androidx.appcompat.widget.AppCompatButton
android:id="@+id/button_calculator_decimal"
android:layout_width="0dp"
android:layout_height="0dp"
android:text="."
android:paddingBottom="2dp"
style="@style/Zcash.TextView.Calculator"
android:paddingBottom="2dp"
android:text="."
app:layout_constraintBottom_toBottomOf="@id/guide_keys"
app:layout_constraintDimensionRatio="H,1:1"
app:layout_constraintHorizontal_chainStyle="packed"
app:layout_constraintStart_toStartOf="@id/guide_keys"
app:layout_constraintTop_toBottomOf="@id/button_calculator_7"
app:layout_constraintBottom_toBottomOf="@id/guide_keys"
app:layout_constraintWidth_percent="@dimen/calculator_button_width_percent"
app:layout_constraintHorizontal_chainStyle="packed"/>
app:layout_constraintWidth_percent="@dimen/calculator_button_width_percent" />
<androidx.appcompat.widget.AppCompatButton
android:id="@+id/button_calculator_0"
android:layout_width="0dp"
android:layout_height="0dp"
android:text="0"
style="@style/Zcash.TextView.Calculator"
app:layout_constraintDimensionRatio="H,1:1"
app:layout_constraintStart_toStartOf="@id/guide_keys"
app:layout_constraintEnd_toEndOf="@id/guide_keys"
app:layout_constraintTop_toBottomOf="@id/button_calculator_8"
android:text="0"
app:layout_constraintBottom_toBottomOf="@id/guide_keys"
app:layout_constraintDimensionRatio="H,1:1"
app:layout_constraintEnd_toEndOf="@id/guide_keys"
app:layout_constraintStart_toStartOf="@id/guide_keys"
app:layout_constraintTop_toBottomOf="@id/button_calculator_8"
app:layout_constraintWidth_percent="@dimen/calculator_button_width_percent" />
<androidx.appcompat.widget.AppCompatButton
android:id="@+id/button_calculator_back"
android:layout_width="0dp"
android:layout_height="0dp"
android:text="&lt;"
style="@style/Zcash.TextView.Calculator"
android:text="&lt;"
app:layout_constraintBottom_toBottomOf="@id/guide_keys"
app:layout_constraintDimensionRatio="H,1:1"
app:layout_constraintEnd_toEndOf="@id/guide_keys"
app:layout_constraintTop_toBottomOf="@id/button_calculator_9"
app:layout_constraintBottom_toBottomOf="@id/guide_keys"
app:layout_constraintWidth_percent="@dimen/calculator_button_width_percent" />
<!-- TODO: properly style this as a button with ripples -->
@ -295,20 +222,67 @@
android:background="@drawable/background_button_rounded"
android:gravity="center"
android:text="Send Amount"
android:textColor="#000000"
android:textAppearance="@style/TextAppearance.MaterialComponents.Body1"
android:textColor="#000000"
app:layout_constraintEnd_toEndOf="@id/guide_keys"
app:layout_constraintStart_toStartOf="@id/guide_keys"
app:layout_constraintTop_toBottomOf="@id/guide_keys" />
<!-- Hit Areas -->
<View
android:id="@+id/layer_lock"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="#D0000000"
android:elevation="5dp" />
<androidx.constraintlayout.widget.Guideline
android:id="@+id/guideline_hit_area_top"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="horizontal"
app:layout_constraintGuide_percent="0.04" />
<!-- -->
<!-- Upper Layer -->
<!-- -->
<ImageView
android:id="@+id/icon_scan"
android:layout_width="0dp"
android:layout_height="0dp"
android:elevation="6dp"
android:tint="@color/colorAccent"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHeight_percent="0.052"
app:layout_constraintHorizontal_bias="0.108"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintVertical_bias="0.0574"
app:layout_constraintWidth_percent="0.0887"
app:srcCompat="@drawable/ic_qrcode_24dp" />
<ImageView
android:id="@+id/icon_logo"
android:layout_width="0dp"
android:layout_height="0dp"
android:elevation="6dp"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintHeight_percent="0.03825136612"
app:layout_constraintHorizontal_bias="0.8883"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintVertical_bias="0.06420765027"
app:layout_constraintWidth_percent="0.05582524272"
app:srcCompat="@drawable/ic_receive_funds" />
<ImageView
android:id="@+id/icon_detail"
android:layout_width="0dp"
android:layout_height="0dp"
android:elevation="6dp"
android:tint="@color/colorAccent"
app:layout_constraintBottom_toBottomOf="@id/text_detail"
app:layout_constraintEnd_toStartOf="@id/text_detail"
app:layout_constraintHeight_percent="0.044"
app:layout_constraintHorizontal_chainStyle="packed"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="@id/text_detail"
app:layout_constraintWidth_percent="0.0887"
app:srcCompat="@drawable/ic_receipt_24dp" />
<View
android:id="@+id/hit_area_scan"
@ -317,6 +291,7 @@
android:layout_marginStart="24dp"
android:alpha="0.3"
android:background="@android:color/transparent"
android:elevation="6dp"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="@id/guideline_hit_area_top" />
@ -326,7 +301,99 @@
android:layout_height="68dp"
android:layout_marginEnd="24dp"
android:background="@android:color/transparent"
android:elevation="6dp"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintTop_toTopOf="@id/guideline_hit_area_top" />
<TextView
android:id="@+id/text_detail"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:padding="12dp"
android:elevation="6dp"
android:text="Wallet Details"
android:textAppearance="@style/TextAppearance.MaterialComponents.Body1"
android:textColor="@color/colorAccent"
android:tint="@color/colorAccent"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toEndOf="@id/icon_detail"
app:layout_constraintTop_toBottomOf="@id/button_send"
app:layout_constraintVertical_bias="@dimen/ratio_golden_small" />
<ImageView
android:id="@+id/icon_zec_symbol"
android:elevation="6dp"
android:layout_width="0dp"
android:layout_height="0dp"
android:tint="@color/colorAccent"
app:layout_constraintBottom_toBottomOf="@id/text_send_amount"
app:layout_constraintEnd_toStartOf="@id/text_send_amount"
app:layout_constraintHeight_percent="0.052"
app:layout_constraintTop_toTopOf="@id/text_send_amount"
app:layout_constraintVertical_bias="0.2"
app:layout_constraintWidth_percent="0.060"
app:srcCompat="@drawable/ic_zec_symbol" />
<TextView
android:id="@+id/text_send_amount"
android:elevation="6dp"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:gravity="center"
android:includeFontPadding="false"
android:text="0"
android:textAppearance="@style/TextAppearance.MaterialComponents.Body2"
android:textColor="@color/text_light"
android:textSize="72dp"
app:layout_constraintBottom_toTopOf="@id/guide_keys"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent" />
<!-- -->
<!-- Banner -->
<!-- -->
<TextView
android:id="@+id/text_banner_message"
android:elevation="6dp"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:background="@drawable/background_banner"
android:paddingBottom="8dp"
android:paddingStart="16dp"
android:paddingTop="8dp"
android:text="No Balance"
android:textAppearance="@style/TextAppearance.MaterialComponents.Body1"
android:textColor="@color/text_light"
app:layout_constraintEnd_toEndOf="@id/icon_logo"
app:layout_constraintStart_toStartOf="@id/icon_scan"
app:layout_constraintTop_toBottomOf="@id/text_send_amount" />
<TextView
android:id="@+id/text_banner_action"
android:elevation="6dp"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginEnd="16dp"
android:text="Learn More"
android:textAppearance="@style/TextAppearance.MaterialComponents.Body1"
android:textColor="@color/colorPrimary"
app:layout_constraintBaseline_toBaselineOf="@id/text_banner_message"
app:layout_constraintEnd_toEndOf="@id/text_banner_message" />
<androidx.constraintlayout.widget.Group
android:id="@+id/group_balance"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
app:constraint_referenced_ids="text_balance_available,label_balance" />
<androidx.constraintlayout.widget.Group
android:id="@+id/group_banner"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
app:constraint_referenced_ids="text_banner_message, text_banner_action" />
</androidx.constraintlayout.widget.ConstraintLayout>

View File

@ -0,0 +1,83 @@
<?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"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@drawable/background_home">
<androidx.constraintlayout.widget.Guideline
android:id="@+id/guideline_buttons"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:orientation="horizontal"
app:layout_constraintGuide_percent="0.667" />
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
style="@style/TextAppearance.MaterialComponents.Body1"
android:gravity="center"
android:text="empowering\neveryone\nwith\neconomic\nfreedom"
android:textColor="@color/zcashWhite_50"
android:textSize="56dp"
android:alpha="0.05"
app:layout_constraintBottom_toBottomOf="@id/icon_logo"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="@id/icon_logo" />
<ImageView
android:id="@+id/icon_logo"
android:layout_width="0dp"
android:layout_height="0dp"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintDimensionRatio="W,1:1"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintVertical_bias="0.33333"
app:layout_constraintWidth_percent="0.4053398058"
app:srcCompat="@drawable/ic_logo_landing" />
<!-- Choose release names from here https://en.wikipedia.org/wiki/List_of_woods -->
<TextView
android:id="@+id/text_message"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
style="@style/TextAppearance.MaterialComponents.Headline6"
android:gravity="center"
android:paddingStart="32dp"
android:paddingEnd="32dp"
android:text="Welcome to the Birch Wallet!"
android:textColor="@color/zcashWhite"
app:layout_constraintBottom_toTopOf="@id/guideline_buttons"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toBottomOf="@id/icon_logo" />
<com.google.android.material.button.MaterialButton
android:id="@+id/button_negative"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
style="@style/Zcash.Button.OutlinedButton"
android:text="Restore"
android:textColor="@color/text_light"
app:layout_constraintEnd_toStartOf="@id/button_positive"
app:layout_constraintHorizontal_chainStyle="packed"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="@id/guideline_buttons" />
<com.google.android.material.button.MaterialButton
android:id="@+id/button_positive"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="16dp"
android:text="New"
android:textColor="@color/text_dark"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintStart_toEndOf="@id/button_negative"
app:layout_constraintTop_toTopOf="@id/guideline_buttons" />
</androidx.constraintlayout.widget.ConstraintLayout>

View File

@ -0,0 +1,19 @@
<?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"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@drawable/background_home"
xmlns:tools="http://schemas.android.com/tools">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textColor="@color/text_light"
android:text="send memo"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintEnd_toEndOf="parent"/>
</androidx.constraintlayout.widget.ConstraintLayout>

View File

@ -1,35 +0,0 @@
<?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"
android:layout_width="match_parent"
android:layout_height="match_parent"
xmlns:tools="http://schemas.android.com/tools">
<ImageView
android:id="@+id/icon_scan"
android:layout_width="48dp"
android:layout_height="48dp"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:srcCompat="@drawable/ic_qrcode_24dp" />
<ImageView
android:id="@+id/icon_receive"
android:layout_width="48dp"
android:layout_height="48dp"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintTop_toTopOf="parent"
app:srcCompat="@drawable/ic_zcashlogo" />
<ImageView
android:id="@+id/icon_detail"
android:layout_width="48dp"
android:layout_height="48dp"
android:layout_marginBottom="56dp"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintEnd_toEndOf="parent"
app:layout_constraintBottom_toBottomOf="parent"
app:srcCompat="@drawable/ic_receipt_24dp" />
</androidx.constraintlayout.widget.ConstraintLayout>

View File

@ -1,5 +1,6 @@
<?xml version="1.0" encoding="utf-8"?>
<ScrollView xmlns:android="http://schemas.android.com/apk/res/android"
<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"
@ -11,14 +12,21 @@
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="@drawable/background_home"
android:onClick="copyAddress"
tools:context=".ui.fragment.ReceiveFragment">
<!-- <include-->
<!-- android:id="@+id/main_app_bar"-->
<!-- layout="@layout/include_main_app_bar"-->
<!-- android:visibility="invisible"-->
<!-- tools:ignore="MissingConstraints" />-->
<!-- 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"/>
<!-- Shield Background -->
<ImageView
@ -26,21 +34,22 @@
android:layout_width="0dp"
android:layout_height="0dp"
android:scaleType="fitXY"
app:srcCompat="@drawable/ic_shield"
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="parent"
app:layout_constraintDimensionRatio="H,1:1.1676"
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: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"
@ -54,155 +63,166 @@
<ImageView
android:layout_width="0dp"
android:layout_height="0dp"
app:srcCompat="@drawable/ic_zcash_white"
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:layout_constraintStart_toStartOf="@id/receive_qr_code"
app:layout_constraintEnd_toEndOf="@id/receive_qr_code"
app:layout_constraintTop_toTopOf="@id/receive_qr_code"
app:layout_constraintBottom_toBottomOf="@id/receive_qr_code"
/>
app:srcCompat="@drawable/ic_zcash_white" />
<View
android:id="@+id/receive_address_background"
android:layout_width="0dp"
android:layout_height="0dp"
android:background="#c0171717"
app:layout_constraintBottom_toBottomOf="@id/receive_address_parts"
app:layout_constraintEnd_toEndOf="@id/image_shield"
app:layout_constraintStart_toStartOf="@id/image_shield"
app:layout_constraintTop_toTopOf="@id/receive_address_parts" />
<TextView
<com.google.android.material.card.MaterialCardView
android:id="@+id/receive_title"
style="@style/Zcash.TextAppearance.Headline6"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:layout_marginTop="24dp"
android:background="#D8FFB727"
android:gravity="center"
android:padding="16dp"
android:text="@string/receive_address_title"
android:textColor="@color/zcashWhite"
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="parent"
app:layout_constraintBottom_toBottomOf="parent"/>
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 -->
<!-- Someday, there will be an advanced VirtualLayout that helps us do this without nesting but for now, this seems to be the only clean way to center all the fields -->
<androidx.constraintlayout.widget.ConstraintLayout
android:id="@+id/receive_address_parts"
android:layout_width="wrap_content"
<com.google.android.material.card.MaterialCardView
android:id="@+id/receive_address_background"
android:layout_width="0dp"
android:layout_height="wrap_content"
android:foregroundGravity="center"
android:padding="16dp"
app:layout_constraintEnd_toEndOf="@id/receive_title"
app:layout_constraintStart_toStartOf="@id/receive_title"
app:layout_constraintTop_toBottomOf="@id/receive_title">
<TextView
android:id="@+id/text_address_part_1"
style="@style/Zcash.TextAppearance.AddressPart"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
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" />
android:backgroundTint="#282828"
app:layout_constraintEnd_toEndOf="@id/image_shield"
app:layout_constraintStart_toStartOf="@id/image_shield"
app:layout_constraintTop_toBottomOf="@id/image_shield">
<TextView
android:id="@+id/text_address_part_3"
style="@style/Zcash.TextAppearance.AddressPart"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="4dp"
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" />
<com.google.android.material.card.MaterialCardView
android:layout_width="match_parent"
android:layout_height="match_parent"
android:backgroundTint="#171717"
android:elevation="0dp">
<TextView
android:id="@+id/text_address_part_5"
style="@style/Zcash.TextAppearance.AddressPart"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="4dp"
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" />
<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_7"
style="@style/Zcash.TextAppearance.AddressPart"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="4dp"
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_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_2"
style="@style/Zcash.TextAppearance.AddressPart"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginStart="8dp"
android:layout_marginLeft="8dp"
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_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_4"
style="@style/Zcash.TextAppearance.AddressPart"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="4dp"
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_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_6"
style="@style/Zcash.TextAppearance.AddressPart"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="4dp"
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_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_8"
style="@style/Zcash.TextAppearance.AddressPart"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginTop="4dp"
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" />
<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" />
<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>
<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

@ -7,6 +7,20 @@
android:background="@drawable/background_home"
xmlns:tools="http://schemas.android.com/tools">
<!-- 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"/>
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"

View File

@ -0,0 +1,19 @@
<?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"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@drawable/background_home"
xmlns:tools="http://schemas.android.com/tools">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textColor="@color/text_light"
android:text="send memo"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintEnd_toEndOf="parent"/>
</androidx.constraintlayout.widget.ConstraintLayout>

View File

@ -0,0 +1,19 @@
<?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"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@drawable/background_home"
xmlns:tools="http://schemas.android.com/tools">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:textColor="@color/text_light"
android:text="send memo"
app:layout_constraintTop_toTopOf="parent"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintEnd_toEndOf="parent"/>
</androidx.constraintlayout.widget.ConstraintLayout>

View File

@ -4,7 +4,28 @@
xmlns:app="http://schemas.android.com/apk/res-auto"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/mobile_navigation"
app:startDestination="@+id/nav_home">
app:startDestination="@+id/nav_landing">
<fragment
android:id="@+id/nav_landing"
android:name="cash.z.ecc.android.ui.setup.LandingFragment"
tools:layout="@layout/fragment_landing" >
<action
android:id="@+id/action_nav_landing_to_nav_home"
app:destination="@id/nav_home" />
<action
android:id="@+id/action_nav_landing_to_nav_backup"
app:destination="@id/nav_backup" />
</fragment>
<fragment
android:id="@+id/nav_backup"
android:name="cash.z.ecc.android.ui.setup.BackupFragment"
tools:layout="@layout/fragment_backup" >
<action
android:id="@+id/action_nav_backup_to_nav_home"
app:destination="@id/nav_home" />
</fragment>
<fragment
android:id="@+id/nav_home"

View File

@ -1,4 +1,4 @@
<resources>
<string name="app_name">Zcash Wallet</string>
<string name="receive_address_title">Your Zcash shielded address</string>
<string name="receive_address_title">Your Shielded Address</string>
</resources>

View File

@ -1,11 +1,15 @@
<resources>
<!-- Base application theme -->
<style name="ZcashBaseTheme" parent="Theme.MaterialComponents.DayNight.NoActionBar">
<!-- Application theme -->
<style name="ZcashBaseTheme" parent="Theme.MaterialComponents.NoActionBar">
<!-- Customize your theme here. -->
<item name="colorPrimary">@color/colorPrimary</item>
<item name="colorPrimaryDark">@color/colorPrimaryDark</item>
<item name="colorAccent">@color/colorAccent</item>
<item name="shapeAppearanceSmallComponent">@style/Zcash.ShapeAppearance.SmallComponent</item>
<item name="shapeAppearanceMediumComponent">@style/Zcash.ShapeAppearance.MediumComponent</item>
</style>
<style name="ZcashTheme" parent="ZcashBaseTheme"/>
@ -22,6 +26,10 @@
<item name="android:background">@drawable/selector_pressed_ripple_circle</item>
</style>
<style name="Zcash.Button.OutlinedButton" parent="Widget.MaterialComponents.Button.OutlinedButton">
<item name="strokeColor">@color/zcashWhite_87</item>
</style>
<!-- Text Appearances -->
<style name="Zcash.TextAppearance.Calculator" parent="TextAppearance.MaterialComponents.Body1">
@ -41,4 +49,14 @@
<item name="android:fontFamily">sans-serif</item>
</style>
<!-- Shape Appearances -->
<style name="Zcash.ShapeAppearance.SmallComponent" parent="ShapeAppearance.MaterialComponents.SmallComponent">
<item name="cornerFamily">cut</item>
<item name="cornerSize">8dp</item>
</style>
<style name="Zcash.ShapeAppearance.MediumComponent" parent="ShapeAppearance.MaterialComponents.MediumComponent">
<item name="cornerFamily">cut</item>
<item name="cornerSize">12dp</item>
</style>
</resources>