summaryrefslogtreecommitdiffstats
path: root/src/com
diff options
context:
space:
mode:
authorAnnie Chin <afchin@google.com>2017-02-09 08:11:22 -0800
committerJustin Klaassen <justinklaassen@google.com>2017-02-09 10:48:23 -0800
commita8b31db9656c2af194c8ff1e3062aa9667ae5da4 (patch)
tree147d6336463a413236a3325d35bbda6216e4d165 /src/com
parentcd744f7a2b0373019175195703c50cac81201169 (diff)
downloadandroid_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.java12
-rw-r--r--src/com/android/calculator2/DragLayout.java28
-rw-r--r--src/com/android/calculator2/HistoryFragment.java10
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