checkpoint: transition animation is acceptable. barely.

This commit is contained in:
Kevin Gorham 2019-02-02 17:47:08 -05:00 committed by Kevin Gorham
parent 969af030db
commit 12c7c162f2
7 changed files with 103 additions and 36 deletions

View File

@ -38,7 +38,7 @@ class MainActivity : BaseActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
synchronizer.start(this)
if(!DEV_MODE)synchronizer.start(this)
}
override fun onDestroy() {
@ -54,6 +54,11 @@ class MainActivity : BaseActivity() {
}
}
override fun onResume() {
super.onResume()
if(DEV_MODE) navController.navigate(R.id.nav_send_fragment)
}
/**
* Let the navController override the default behavior when the drawer icon or back arrow are clicked. This
* automatically takes care of the drawer toggle behavior. Note that without overriding this method, the up/drawer
@ -85,6 +90,12 @@ class MainActivity : BaseActivity() {
}
companion object {
/**
* A simple flag that helps with removing shortcuts in the code used during development.
* TODO: either elevate this to a real thing (based off a system property or some such) or delete it!
*/
const val DEV_MODE = true
// TODO: placeholder until we have a network service for this
const val USD_PER_ZEC = 49.07
init {

View File

@ -1,5 +1,6 @@
package cash.z.android.wallet.ui.fragment
import android.animation.Animator
import android.app.Activity
import android.os.Bundle
import android.text.SpannableString
@ -8,6 +9,8 @@ import android.util.Log
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import android.view.animation.AccelerateDecelerateInterpolator
import android.view.animation.AccelerateInterpolator
import androidx.annotation.ColorRes
import androidx.annotation.DrawableRes
import androidx.annotation.IdRes
@ -55,32 +58,37 @@ class HomeFragment : BaseFragment(), HomePresenter.HomeView {
savedInstanceState: Bundle?
): View? {
viewsInitialized = false
val enterTransitionSet = TransitionInflater.from(mainActivity).inflateTransition(R.transition.transition_zec_sent).apply {
duration = 350L
}.addListener(object : Transition.TransitionListener {
override fun onTransitionEnd(transition: Transition) {
// fixes a bug where the translation gets lost, during animation. As a nice side effect, visually, it makes the view appear to settle in to position
header_active_transaction.translationZ = 10.0f
}
setupSharedElementTransitions()
override fun onTransitionResume(transition: Transition) {
}
return inflater.inflate(R.layout.fragment_home, container, false)
}
override fun onTransitionPause(transition: Transition) {
}
private fun setupSharedElementTransitions() {
val enterTransitionSet =
TransitionInflater.from(mainActivity).inflateTransition(R.transition.transition_zec_sent).apply {
duration = 300L
}.addListener(object : Transition.TransitionListener {
override fun onTransitionEnd(transition: Transition) {
// fixes a bug where the translation gets lost, during animation. As a nice side effect, visually, it makes the view appear to settle in to position
header_active_transaction.translationZ = 10.0f
}
override fun onTransitionCancel(transition: Transition) {
}
override fun onTransitionResume(transition: Transition) {
}
override fun onTransitionStart(transition: Transition) {
}
override fun onTransitionPause(transition: Transition) {
}
})
override fun onTransitionCancel(transition: Transition) {
}
override fun onTransitionStart(transition: Transition) {
}
})
this.sharedElementEnterTransition = enterTransitionSet
this.sharedElementReturnTransition = enterTransitionSet
return inflater.inflate(R.layout.fragment_home, container, false)
}
override fun onViewCreated(view: View, savedInstanceState: Bundle?) {
@ -90,7 +98,6 @@ class HomeFragment : BaseFragment(), HomePresenter.HomeView {
mainActivity.setupNavigation()
mainActivity.supportActionBar?.setTitle(R.string.destination_title_home)
}
header_active_transaction.isActivated = true
headerFullViews = arrayOf(text_balance_usd, text_balance_includes_info, text_balance_zec, image_zec_symbol_balance_shadow, image_zec_symbol_balance)
headerEmptyViews = arrayOf(text_balance_zec_info, text_balance_zec_empty, image_zec_symbol_balance_shadow_empty, image_zec_symbol_balance_empty)
@ -100,10 +107,13 @@ class HomeFragment : BaseFragment(), HomePresenter.HomeView {
group_empty_view_items.visibility = View.GONE
group_full_view_items.visibility = View.GONE
image_logo.setOnClickListener {
// forceRedraw()
// toggleViews(false)
header_active_transaction.isActivated = !header_active_transaction.isActivated
if (MainActivity.DEV_MODE) {
image_logo.setOnClickListener {
mainActivity.navController.navigate(R.id.nav_send_fragment)
// forceRedraw()
// toggleViews(false)
}
}
button_active_transaction_cancel.setOnClickListener {
@ -258,7 +268,27 @@ class HomeFragment : BaseFragment(), HomePresenter.HomeView {
private fun onCancelActiveTransaction() {
button_active_transaction_cancel.isEnabled = false
button_active_transaction_cancel.text = "canceled"
header_active_transaction.isActivated = false
header_active_transaction.animate().apply {
translationZ(0f)
duration = 200L
interpolator = AccelerateInterpolator()
setListener(object : Animator.AnimatorListener {
override fun onAnimationRepeat(animation: Animator?) {
}
override fun onAnimationEnd(animation: Animator?) {
header_active_transaction.setBackgroundResource(0)
}
override fun onAnimationCancel(animation: Animator?) {
}
override fun onAnimationStart(animation: Animator?) {
}
} )
}
homePresenter.onCancelActiveTransaction()
}

View File

@ -11,6 +11,9 @@ import android.view.ViewGroup
import androidx.core.text.toSpannable
import androidx.databinding.DataBindingUtil
import androidx.navigation.fragment.FragmentNavigatorExtras
import androidx.transition.Fade
import androidx.transition.Transition
import androidx.transition.TransitionInflater
import cash.z.android.wallet.R
import cash.z.android.wallet.databinding.FragmentSendBinding
import cash.z.android.wallet.extention.afterTextChanged
@ -20,6 +23,7 @@ import cash.z.android.wallet.ui.activity.MainActivity
import cash.z.android.wallet.ui.presenter.SendPresenter
import dagger.Module
import dagger.android.ContributesAndroidInjector
import kotlinx.android.synthetic.main.include_home_content.*
import kotlinx.coroutines.launch
import java.text.DecimalFormat
@ -41,6 +45,16 @@ class SendFragment : BaseFragment(), SendPresenter.SendView {
inflater: LayoutInflater, container: ViewGroup?,
savedInstanceState: Bundle?
): View? {
val enterTransitionSet = TransitionInflater.from(mainActivity).inflateTransition(R.transition.transition_zec_sent).apply {
duration = 3500L
}
this.sharedElementReturnTransition = enterTransitionSet
this.sharedElementEnterTransition = enterTransitionSet
this.allowReturnTransitionOverlap = false
allowEnterTransitionOverlap = false
0
return DataBindingUtil.inflate<FragmentSendBinding>(
inflater, R.layout.fragment_send, container, false
).let {
@ -107,6 +121,7 @@ class SendFragment : BaseFragment(), SendPresenter.SendView {
launch {
sendPresenter.start()
}
if(MainActivity.DEV_MODE) showSendDialog()
}
override fun onPause() {
@ -115,11 +130,17 @@ class SendFragment : BaseFragment(), SendPresenter.SendView {
}
override fun submit(){
val extras = FragmentNavigatorExtras(
binding.dialogSendContents to getString(R.string.transition_active_transaction_background),
binding.dialogTextTitle to getString(R.string.transition_active_transaction_title),
binding.dialogTextAddress to getString(R.string.transition_active_transaction_address)
)
var extras = with(binding) {
listOf(dialogSendBackground, dialogSendContents, dialogTextTitle, dialogTextAddress)
.map{ it to it.transitionName }
.let { FragmentNavigatorExtras(*it.toTypedArray()) }
}
// val extras = FragmentNavigatorExtras(
// binding.dialogSendContents to binding.dialogSendContents.transitionName,
// binding.dialogTextTitle to getString(R.string.transition_active_transaction_title),
// binding.dialogTextAddress to getString(R.string.transition_active_transaction_address),
// binding.dialogSendBackground to getString(R.string.transition_active_transaction_background)
// )
mainActivity.navController.navigate(R.id.nav_home_fragment,
null,

View File

@ -278,6 +278,7 @@
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@color/zcashBlack_54"
android:transitionName="@string/transition_active_transaction_background"
android:visibility="gone"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent"
@ -291,7 +292,7 @@
android:backgroundTint="@color/zcashWhite"
android:clickable="true"
android:focusable="true"
android:transitionName="@string/transition_active_transaction_background"
android:transitionName="@string/transition_active_transaction_card"
android:visibility="gone"
app:layout_constraintBottom_toBottomOf="parent"
app:layout_constraintEnd_toEndOf="parent"

View File

@ -10,23 +10,24 @@
app:layout_behavior="@string/appbar_scrolling_view_behavior">
<androidx.constraintlayout.widget.ConstraintLayout
android:id="@+id/content_home"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:paddingStart="16dp"
android:paddingTop="30dp"
android:paddingEnd="16dp"
android:paddingBottom="16dp">
android:paddingBottom="16dp"
android:transitionName="@string/transition_active_transaction_background">
<!-- Active Transaction - primary -->
<androidx.constraintlayout.widget.ConstraintLayout
android:id="@+id/header_active_transaction"
android:layout_width="match_parent"
android:layout_height="70dp"
android:background="@drawable/background_rounded_corners"
android:background="@drawable/background_rounded_corners_opaque"
android:clipToPadding="false"
android:padding="16dp"
android:stateListAnimator="@animator/selector_active_raise"
android:transitionName="@string/transition_active_transaction_background"
android:transitionName="@string/transition_active_transaction_card"
app:layout_constraintStart_toStartOf="parent"
app:layout_constraintTop_toTopOf="parent">

View File

@ -3,7 +3,9 @@
xmlns:android="http://schemas.android.com/apk/res/android"
android:transitionOrdering="together">
<changeBounds/>
<changeBounds>
<arcMotion/>
</changeBounds>
<changeTransform/>
<changeClipBounds/>
<changeImageTransform/>

View File

@ -30,6 +30,7 @@
<string name="transition_active_transaction_background">transition_active_transaction_background</string>
<string name="transition_active_transaction_title">transition_active_transaction_title</string>
<string name="transition_active_transaction_address">transition_active_transaction_address</string>
<string name="transition_active_transaction_card">transition_active_transaction_card</string>
<!-- Screen copy -->
<string name="receive_address_title">Your Zcash shielded address</string>