From 96d7d2247bd36938133d4b9cd540f75ddfb31184 Mon Sep 17 00:00:00 2001 From: wangqi Date: Tue, 20 Mar 2018 10:37:13 -0700 Subject: Fix animation of first time showing dialpad FAB. In order to correctly show animation, we have to ensure: 1. fab.scaleIn() is not called before dialpad is slide up. 2. fab is invisible before scaleIn is called. Caveat: This change is not tested on old UI (DialtactsActivity) since it's deprecated. Test: manual PiperOrigin-RevId: 189765153 Change-Id: Iada96b2789f96ca1612ae2048020a649f8b57b6b --- .../dialer/dialpadview/DialpadFragment.java | 52 +++++++++++----------- 1 file changed, 25 insertions(+), 27 deletions(-) (limited to 'java/com/android/dialer/dialpadview/DialpadFragment.java') diff --git a/java/com/android/dialer/dialpadview/DialpadFragment.java b/java/com/android/dialer/dialpadview/DialpadFragment.java index 578f35e09..833b91f59 100644 --- a/java/com/android/dialer/dialpadview/DialpadFragment.java +++ b/java/com/android/dialer/dialpadview/DialpadFragment.java @@ -83,7 +83,6 @@ import com.android.dialer.common.LogUtil; import com.android.dialer.common.concurrent.DialerExecutor; import com.android.dialer.common.concurrent.DialerExecutor.Worker; import com.android.dialer.common.concurrent.DialerExecutorComponent; -import com.android.dialer.common.concurrent.ThreadUtil; import com.android.dialer.location.GeoUtil; import com.android.dialer.logging.UiAction; import com.android.dialer.oem.MotorolaUtils; @@ -648,6 +647,14 @@ public class DialpadFragment extends Fragment LogUtil.i("DialpadFragment.onStart", "first launch: %b", firstLaunch); Trace.beginSection(TAG + " onStart"); super.onStart(); + Resources res = getResources(); + int iconId = R.drawable.quantum_ic_call_vd_theme_24; + if (MotorolaUtils.isWifiCallingAvailable(getContext())) { + iconId = R.drawable.ic_wifi_calling; + } + floatingActionButtonController.changeIcon( + getContext(), iconId, res.getString(R.string.description_dial_button)); + // if the mToneGenerator creation fails, just continue without it. It is // a local audio signal, and is not as important as the dtmf tone itself. final long start = System.currentTimeMillis(); @@ -676,14 +683,6 @@ public class DialpadFragment extends Fragment Trace.beginSection(TAG + " onResume"); super.onResume(); - Resources res = getResources(); - int iconId = R.drawable.quantum_ic_call_vd_theme_24; - if (MotorolaUtils.isWifiCallingAvailable(getContext())) { - iconId = R.drawable.ic_wifi_calling; - } - floatingActionButtonController.changeIcon( - getContext(), iconId, res.getString(R.string.description_dial_button)); - dialpadQueryListener = FragmentUtils.getParentUnsafe(this, OnDialpadQueryChangedListener.class); final StopWatch stopWatch = StopWatch.start("Dialpad.onResume"); @@ -1247,19 +1246,14 @@ public class DialpadFragment extends Fragment if (dialpadView != null) { LogUtil.i("DialpadFragment.showDialpadChooser", "mDialpadView not null"); dialpadView.setVisibility(View.VISIBLE); - floatingActionButtonController.scaleIn(); + if (isDialpadSlideUp()) { + floatingActionButtonController.scaleIn(); + } } else { LogUtil.i("DialpadFragment.showDialpadChooser", "mDialpadView null"); digits.setVisibility(View.VISIBLE); } - // mFloatingActionButtonController must also be 'scaled in', in order to be visible after - // 'scaleOut()' hidden method. - if (!floatingActionButtonController.isVisible()) { - // Just call 'scaleIn()' method if the mFloatingActionButtonController was not already - // previously visible. - floatingActionButtonController.scaleIn(); - } dialpadChooser.setVisibility(View.GONE); } } @@ -1475,18 +1469,8 @@ public class DialpadFragment extends Fragment if (animate) { dialpadView.animateShow(); } - ThreadUtil.getUiThreadHandler() - .postDelayed( - () -> { - if (!isDialpadChooserVisible()) { - floatingActionButtonController.scaleIn(); - } - }, - animate ? dialpadSlideInDuration : 0); FragmentUtils.getParentUnsafe(this, DialpadListener.class).onDialpadShown(); digits.requestFocus(); - } else if (hidden) { - floatingActionButtonController.scaleOut(); } } @@ -1549,6 +1533,7 @@ public class DialpadFragment extends Fragment slideDown.setAnimationListener(listener); slideDown.setDuration(animate ? dialpadSlideInDuration : 0); getView().startAnimation(slideDown); + floatingActionButtonController.scaleOut(); } /** Animate the dialpad up onto the screen. */ @@ -1564,6 +1549,19 @@ public class DialpadFragment extends Fragment Animation slideUp = AnimationUtils.loadAnimation(getContext(), animation); slideUp.setInterpolator(AnimUtils.EASE_IN); slideUp.setDuration(animate ? dialpadSlideInDuration : 0); + slideUp.setAnimationListener( + new AnimationListener() { + @Override + public void onAnimationStart(Animation animation) {} + + @Override + public void onAnimationEnd(Animation animation) { + floatingActionButtonController.scaleIn(); + } + + @Override + public void onAnimationRepeat(Animation animation) {} + }); getView().startAnimation(slideUp); } -- cgit v1.2.3