Merge "Fix "disappearing history fragment" issue." into ub-calculator-euler
diff --git a/src/com/android/calculator2/Calculator.java b/src/com/android/calculator2/Calculator.java
index d184344..b3d79eb 100644
--- a/src/com/android/calculator2/Calculator.java
+++ b/src/com/android/calculator2/Calculator.java
@@ -33,6 +33,7 @@
 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;
@@ -1279,7 +1280,7 @@
     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();
@@ -1308,7 +1309,7 @@
 
     public void onStartDraggingOpen() {
         mDisplayView.hideToolbar();
-        showHistoryFragment(FragmentTransaction.TRANSIT_NONE);
+        showHistoryFragment();
     }
 
     @Override
@@ -1360,10 +1361,11 @@
         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;
@@ -1376,7 +1378,7 @@
         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 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 @@
 
 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 @@
 
     @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