diff options
author | Annie Chin <afchin@google.com> | 2017-02-09 08:11:22 -0800 |
---|---|---|
committer | Justin Klaassen <justinklaassen@google.com> | 2017-02-09 10:48:23 -0800 |
commit | a8b31db9656c2af194c8ff1e3062aa9667ae5da4 (patch) | |
tree | 147d6336463a413236a3325d35bbda6216e4d165 /src/com | |
parent | cd744f7a2b0373019175195703c50cac81201169 (diff) | |
download | android_packages_apps_ExactCalculator-a8b31db9656c2af194c8ff1e3062aa9667ae5da4.tar.gz android_packages_apps_ExactCalculator-a8b31db9656c2af194c8ff1e3062aa9667ae5da4.tar.bz2 android_packages_apps_ExactCalculator-a8b31db9656c2af194c8ff1e3062aa9667ae5da4.zip |
Fix "disappearing history fragment" issue.
Swiping down too quickly after swiping up to hide history could
cause history fragment to disappear and freeze.
Fixes: 34717239
Test: manual - with history open, tap back, then immediately start drag
before fragment finishes animating.
Change-Id: I2196ba224712a66c406980f7453d5fc443a5fb5a
Diffstat (limited to 'src/com')
-rw-r--r-- | src/com/android/calculator2/Calculator.java | 12 | ||||
-rw-r--r-- | src/com/android/calculator2/DragLayout.java | 28 | ||||
-rw-r--r-- | src/com/android/calculator2/HistoryFragment.java | 10 |
3 files changed, 15 insertions, 35 deletions
diff --git a/src/com/android/calculator2/Calculator.java b/src/com/android/calculator2/Calculator.java index 1516a11..a698f64 100644 --- a/src/com/android/calculator2/Calculator.java +++ b/src/com/android/calculator2/Calculator.java @@ -33,6 +33,7 @@ import android.animation.ObjectAnimator; import android.animation.PropertyValuesHolder; import android.app.ActionBar; import android.app.Activity; +import android.app.Fragment; import android.app.FragmentManager; import android.app.FragmentTransaction; import android.content.ClipData; @@ -1278,7 +1279,7 @@ public class Calculator extends Activity public boolean onOptionsItemSelected(MenuItem item) { switch (item.getItemId()) { case R.id.menu_history: - showHistoryFragment(FragmentTransaction.TRANSIT_FRAGMENT_OPEN); + showHistoryFragment(); return true; case R.id.menu_leading: displayFull(); @@ -1307,7 +1308,7 @@ public class Calculator extends Activity public void onStartDraggingOpen() { mDisplayView.hideToolbar(); - showHistoryFragment(FragmentTransaction.TRANSIT_NONE); + showHistoryFragment(); } @Override @@ -1359,10 +1360,11 @@ public class Calculator extends Activity if (manager == null || manager.isDestroyed()) { return null; } - return (HistoryFragment) manager.findFragmentByTag(HistoryFragment.TAG); + final Fragment fragment = manager.findFragmentByTag(HistoryFragment.TAG); + return fragment == null || fragment.isRemoving() ? null : (HistoryFragment) fragment; } - private void showHistoryFragment(int transit) { + private void showHistoryFragment() { final FragmentManager manager = getFragmentManager(); if (manager == null || manager.isDestroyed()) { return; @@ -1375,7 +1377,7 @@ public class Calculator extends Activity stopActionModeOrContextMenu(); manager.beginTransaction() .replace(R.id.history_frame, new HistoryFragment(), HistoryFragment.TAG) - .setTransition(transit) + .setTransition(FragmentTransaction.TRANSIT_NONE) .addToBackStack(HistoryFragment.TAG) .commit(); diff --git a/src/com/android/calculator2/DragLayout.java b/src/com/android/calculator2/DragLayout.java index 338edf1..3264b73 100644 --- a/src/com/android/calculator2/DragLayout.java +++ b/src/com/android/calculator2/DragLayout.java @@ -222,34 +222,20 @@ public class DragLayout extends ViewGroup { public Animator createAnimator(boolean toOpen) { if (mIsOpen == toOpen) { - return null; + return ValueAnimator.ofFloat(0f, 1f).setDuration(0L); } - mIsOpen = true; + mIsOpen = toOpen; mHistoryFrame.setVisibility(VISIBLE); - final ValueAnimator animator = ValueAnimator.ofInt(mHistoryFrame.getTop(), - toOpen ? 0 : -mVerticalRange); - animator.addUpdateListener(new ValueAnimator.AnimatorUpdateListener() { + final ValueAnimator animator = ValueAnimator.ofFloat(0f, 1f); + animator.addListener(new AnimatorListenerAdapter() { @Override - public void onAnimationUpdate(ValueAnimator animator) { - final int top = (int) animator.getAnimatedValue(); - mHistoryFrame.offsetTopAndBottom(top - mHistoryFrame.getTop()); - - for (DragCallback c : mDragCallbacks) { - // Top is between [-mVerticalRange, 0]. - c.whileDragging(1f + (float) top / mVerticalRange); - } + public void onAnimationStart(Animator animation) { + mDragHelper.cancel(); + mDragHelper.smoothSlideViewTo(mHistoryFrame, 0, mIsOpen ? 0 : -mVerticalRange); } }); - if (!toOpen) { - animator.addListener(new AnimatorListenerAdapter() { - @Override - public void onAnimationEnd(Animator animator) { - setClosed(); - } - }); - } return animator; } diff --git a/src/com/android/calculator2/HistoryFragment.java b/src/com/android/calculator2/HistoryFragment.java index 109d8fc..c37241c 100644 --- a/src/com/android/calculator2/HistoryFragment.java +++ b/src/com/android/calculator2/HistoryFragment.java @@ -18,7 +18,6 @@ package com.android.calculator2; import android.animation.Animator; import android.app.Fragment; -import android.app.FragmentTransaction; import android.os.Bundle; import android.support.v4.content.ContextCompat; import android.support.v7.widget.RecyclerView; @@ -165,14 +164,7 @@ public class HistoryFragment extends Fragment implements DragLayout.DragCallback @Override public Animator onCreateAnimator(int transit, boolean enter, int nextAnim) { - if (enter) { - if (transit == FragmentTransaction.TRANSIT_FRAGMENT_OPEN) { - return mDragLayout.createAnimator(true /* toOpen */); - } else { - return null; - } - } - return mDragLayout.createAnimator(false /* toOpen */); + return mDragLayout.createAnimator(enter); } @Override |