Fix isResultLayout()

Bug: 33105525
Bug: 33106867

Also reinitialize the dragController so it can keep up on rotation
or background display changes.

Change-Id: Ic1846bc4495196c35ebd4d4ac78f61078dca7573
diff --git a/src/com/android/calculator2/Calculator.java b/src/com/android/calculator2/Calculator.java
index 2c19468..70c7986 100644
--- a/src/com/android/calculator2/Calculator.java
+++ b/src/com/android/calculator2/Calculator.java
@@ -508,8 +508,10 @@
         }
     }
 
-    public boolean isResultState() {
-        return mCurrentState == CalculatorState.RESULT;
+    public boolean isResultLayout() {
+        return mCurrentState == CalculatorState.INIT
+                || mCurrentState == CalculatorState.RESULT
+                || mCurrentState == CalculatorState.ANIMATE;
     }
 
     @Override
diff --git a/src/com/android/calculator2/DragController.java b/src/com/android/calculator2/DragController.java
index 6fb1837..9b40ecc 100644
--- a/src/com/android/calculator2/DragController.java
+++ b/src/com/android/calculator2/DragController.java
@@ -50,25 +50,20 @@
 
     public void setEvaluator(Evaluator evaluator) {
         mEvaluator = evaluator;
-
-        if (evaluator != null) {
-            // Initialize controller
-            if (EvaluatorStateUtils.isDisplayEmpty(mEvaluator)) {
-                // Empty display
-                mAnimationController = new EmptyAnimationController();
-            } else if (isResultState()) {
-                // Result
-                mAnimationController = new ResultAnimationController();
-            } else {
-                // There is something in the formula field. There may or may not be
-                // a quick result.
-                mAnimationController = new AnimationController();
-            }
-        }
     }
 
-    private boolean isResultState() {
-        return mDisplayResult.getTranslationY() != 0;
+    public void initializeController(boolean isResult) {
+        if (EvaluatorStateUtils.isDisplayEmpty(mEvaluator)) {
+            // Empty display
+            mAnimationController = new EmptyAnimationController();
+        } else if (isResult) {
+            // Result
+            mAnimationController = new ResultAnimationController();
+        } else {
+            // There is something in the formula field. There may or may not be
+            // a quick result.
+            mAnimationController = new AnimationController();
+        }
     }
 
     public void setDisplayFormula(CalculatorFormula formula) {
@@ -159,9 +154,10 @@
     /**
      * Reset all initialized values and set recyclerview to INVISIBLE to avoid flickering.
      */
-    public void initializeAnimation(RecyclerView recyclerView) {
+    public void initializeAnimation(RecyclerView recyclerView, boolean isResult) {
         recyclerView.setVisibility(View.INVISIBLE);
         mAnimationInitialized = false;
+        initializeController(isResult);
     }
 
     public interface AnimateTextInterface {
diff --git a/src/com/android/calculator2/HistoryAdapter.java b/src/com/android/calculator2/HistoryAdapter.java
index e8c6eb7..cc2f7e1 100644
--- a/src/com/android/calculator2/HistoryAdapter.java
+++ b/src/com/android/calculator2/HistoryAdapter.java
@@ -39,7 +39,7 @@
 
     private List<HistoryItem> mDataSet;
 
-    private boolean mIsResultState;
+    private boolean mIsResultLayout;
 
     public HistoryAdapter(Calculator calculator, ArrayList<HistoryItem> dataSet,
             String currentExpressionDescription) {
@@ -125,7 +125,7 @@
     }
 
     private int getEvaluatorIndex(int position) {
-        if (EvaluatorStateUtils.isDisplayEmpty(mEvaluator) || mIsResultState) {
+        if (EvaluatorStateUtils.isDisplayEmpty(mEvaluator) || mIsResultLayout) {
             return (int) mEvaluator.getMaxIndex() - position;
         } else {
             // Account for the additional "Current Expression" with the +1.
@@ -133,8 +133,8 @@
         }
     }
 
-    public void setIsResultState(boolean isResult) {
-        mIsResultState = isResult;
+    public void setIsResultLayout(boolean isResult) {
+        mIsResultLayout = isResult;
     }
 
     public static class ViewHolder extends RecyclerView.ViewHolder {
diff --git a/src/com/android/calculator2/HistoryFragment.java b/src/com/android/calculator2/HistoryFragment.java
index b8682ce..6eed1c2 100644
--- a/src/com/android/calculator2/HistoryFragment.java
+++ b/src/com/android/calculator2/HistoryFragment.java
@@ -134,18 +134,18 @@
         dragLayout.addDragCallback(mDragCallback);
 
         final Calculator activity = (Calculator) getActivity();
-        final boolean isResultState = activity.isResultState();
+        final boolean isResultLayout = activity.isResultLayout();
 
         mEvaluator = Evaluator.getInstance(activity);
 
         if (mEvaluator != null) {
-            initializeController();
+            initializeController(isResultLayout);
 
             final long maxIndex = mEvaluator.getMaxIndex();
 
             final ArrayList<HistoryItem> newDataSet = new ArrayList<>();
 
-            if (!EvaluatorStateUtils.isDisplayEmpty(mEvaluator) && !isResultState) {
+            if (!EvaluatorStateUtils.isDisplayEmpty(mEvaluator) && !isResultLayout) {
                 // Add the current expression as the first element in the list (the layout is
                 // reversed and we want the current expression to be the last one in the
                 // recyclerview).
@@ -162,7 +162,7 @@
             }
             mDataSet = newDataSet;
             mAdapter.setDataSet(mDataSet);
-            mAdapter.setIsResultState(isResultState);
+            mAdapter.setIsResultLayout(isResultLayout);
         }
 
         mAdapter.notifyDataSetChanged();
@@ -173,7 +173,8 @@
         super.onStart();
 
         // The orientation may have changed.
-        mDragController.initializeAnimation(mRecyclerView);
+        mDragController.initializeAnimation(mRecyclerView,
+                ((Calculator) getActivity()).isResultLayout());
     }
 
     @Override
@@ -205,7 +206,7 @@
         ((Calculator)(getActivity())).evaluateInstantIfNecessary();
     }
 
-    private void initializeController() {
+    private void initializeController(boolean isResult) {
         mDragController.setDisplayFormula(
                 (CalculatorFormula) getActivity().findViewById(R.id.formula));
 
@@ -215,6 +216,8 @@
         mDragController.setToolbar(getActivity().findViewById(R.id.toolbar));
 
         mDragController.setEvaluator(mEvaluator);
+
+        mDragController.initializeController(isResult);
     }
 
     private void clearHistory() {