Polish History multiwindow support.

Fixes: 34081054
Fixes: 34081005
Fixes: 32987283

-Hide quick result from current expression when we are in one-line
display mode.
-Adjust bottom padding for history item in one-line mode.
-Add font padding when bottom padding for items is 0 to prevent running
into the bottom edge of the display.

Change-Id: Icf3ddd4951ac0e4ab680124ecff7dd5258ccc05f
diff --git a/src/com/android/calculator2/Calculator.java b/src/com/android/calculator2/Calculator.java
index c149e84..705225b 100644
--- a/src/com/android/calculator2/Calculator.java
+++ b/src/com/android/calculator2/Calculator.java
@@ -297,7 +297,7 @@
     private ForegroundColorSpan mUnprocessedColorSpan = new ForegroundColorSpan(Color.RED);
 
     // Whether the display is one line.
-    private boolean mOneLine;
+    private boolean mIsOneLine;
 
     private HistoryFragment mHistoryFragment = new HistoryFragment();
 
@@ -415,7 +415,7 @@
         mInverseToggle = (TextView) findViewById(R.id.toggle_inv);
         mModeToggle = (TextView) findViewById(R.id.toggle_mode);
 
-        mOneLine = mResultText.getVisibility() == View.INVISIBLE;
+        mIsOneLine = mResultText.getVisibility() == View.INVISIBLE;
 
         mInvertibleButtons = new View[] {
                 findViewById(R.id.fun_sin),
@@ -519,7 +519,7 @@
                 mClearButton.setVisibility(View.GONE);
             }
 
-            if (mOneLine) {
+            if (mIsOneLine) {
                 if (mCurrentState == CalculatorState.RESULT
                         || mCurrentState == CalculatorState.EVALUATE
                         || mCurrentState == CalculatorState.ANIMATE) {
@@ -562,6 +562,10 @@
                 || mCurrentState == CalculatorState.RESULT;
     }
 
+    public boolean isOneLine() {
+        return mIsOneLine;
+    }
+
     @Override
     protected void onDestroy() {
         mDragLayout.removeDragCallback(mDragCallback);
@@ -1179,7 +1183,7 @@
         final float resultTranslationY = (mFormulaContainer.getBottom() - mResultText.getBottom())
                 - (mFormulaText.getPaddingBottom() - mResultText.getPaddingBottom());
         float formulaTranslationY = -mFormulaContainer.getBottom();
-        if (mOneLine) {
+        if (mIsOneLine) {
             // Position the result text.
             mResultText.setY(mResultText.getBottom());
             formulaTranslationY = -(findViewById(R.id.toolbar).getBottom()
diff --git a/src/com/android/calculator2/DragController.java b/src/com/android/calculator2/DragController.java
index 7642a64..e90d1b4 100644
--- a/src/com/android/calculator2/DragController.java
+++ b/src/com/android/calculator2/DragController.java
@@ -56,6 +56,8 @@
 
     private boolean mAnimationInitialized;
 
+    private boolean mOneLine;
+
     private AnimationController mAnimationController;
 
     private Evaluator mEvaluator;
@@ -64,7 +66,8 @@
         mEvaluator = evaluator;
     }
 
-    public void initializeController(boolean isResult) {
+    public void initializeController(boolean isResult, boolean oneLine) {
+        mOneLine = oneLine;
         if (EvaluatorStateUtils.isDisplayEmpty(mEvaluator)) {
             // Empty display
             mAnimationController = new EmptyAnimationController();
@@ -179,10 +182,11 @@
      * Reset all initialized values.
      * If the DragLayout is closed, set recyclerview to INVISIBLE to avoid flickering.
      */
-    public void initializeAnimation(RecyclerView recyclerView, boolean isResult, boolean isOpen) {
+    public void initializeAnimation(RecyclerView recyclerView, boolean isResult,
+            boolean oneLine, boolean isOpen) {
         recyclerView.setVisibility(isOpen ? View.VISIBLE : View.INVISIBLE);
         mAnimationInitialized = false;
-        initializeController(isResult);
+        initializeController(isResult, oneLine);
     }
 
     public interface AnimateTextInterface {
@@ -246,13 +250,19 @@
 
         public void initializeFormulaTranslationY(AlignedTextView formula,
                 CalculatorResult result) {
-            // Baseline of formula moves by the difference in formula bottom padding and the
-            // difference in result height.
-            mFormulaTranslationY =
-                    mDisplayFormula.getPaddingBottom() - formula.getPaddingBottom()
-                            + mDisplayResult.getHeight() - result.getHeight()
-                            - mBottomPaddingHeight;
-
+            if (mOneLine) {
+                // Disregard result since we set it to GONE in the one-line case.
+                mFormulaTranslationY =
+                        mDisplayFormula.getPaddingBottom() - formula.getPaddingBottom()
+                        - mBottomPaddingHeight;
+            } else {
+                // Baseline of formula moves by the difference in formula bottom padding and the
+                // difference in result height.
+                mFormulaTranslationY =
+                        mDisplayFormula.getPaddingBottom() - formula.getPaddingBottom()
+                                + mDisplayResult.getHeight() - result.getHeight()
+                                - mBottomPaddingHeight;
+            }
         }
 
         public void initializeFormulaTranslationX(AlignedTextView formula) {
diff --git a/src/com/android/calculator2/HistoryAdapter.java b/src/com/android/calculator2/HistoryAdapter.java
index 0e7ff34..fe2f2c0 100644
--- a/src/com/android/calculator2/HistoryAdapter.java
+++ b/src/com/android/calculator2/HistoryAdapter.java
@@ -43,6 +43,7 @@
     private List<HistoryItem> mDataSet;
 
     private boolean mIsResultLayout;
+    private boolean mIsOneLine;
 
     public HistoryAdapter(ArrayList<HistoryItem> dataSet) {
         mDataSet = dataSet;
@@ -75,6 +76,7 @@
         holder.mResult.setEvaluator(mEvaluator, item.getEvaluatorIndex());
         if (item.getEvaluatorIndex() == Evaluator.HISTORY_MAIN_INDEX) {
             holder.mDate.setText(R.string.title_current_expression);
+            holder.mResult.setVisibility(mIsOneLine ? View.GONE : View.VISIBLE);
         } else {
             // If the previous item occurred on the same date, the current item does not need
             // a date header.
@@ -129,6 +131,10 @@
         mIsResultLayout = isResult;
     }
 
+    public void setIsOneLine(boolean isOneLine) {
+        mIsOneLine = isOneLine;
+    }
+
     public void setEvaluator(Evaluator evaluator) {
         mEvaluator = evaluator;
     }
diff --git a/src/com/android/calculator2/HistoryFragment.java b/src/com/android/calculator2/HistoryFragment.java
index 86ab138..af06dfa 100644
--- a/src/com/android/calculator2/HistoryFragment.java
+++ b/src/com/android/calculator2/HistoryFragment.java
@@ -141,6 +141,7 @@
         mAdapter.setEvaluator(Evaluator.getInstance(activity));
 
         final boolean isResultLayout = activity.isResultLayout();
+        final boolean isOneLine = activity.isOneLine();
 
         mDragLayout = (DragLayout) activity.findViewById(R.id.drag_layout);
         mDragLayout.removeDragCallback(mDragCallback);
@@ -149,7 +150,7 @@
         mEvaluator = Evaluator.getInstance(activity);
 
         if (mEvaluator != null) {
-            initializeController(isResultLayout);
+            initializeController(isResultLayout, isOneLine);
 
             final long maxIndex = mEvaluator.getMaxIndex();
 
@@ -178,6 +179,7 @@
             mDataSet = newDataSet;
             mAdapter.setDataSet(mDataSet);
             mAdapter.setIsResultLayout(isResultLayout);
+            mAdapter.setIsOneLine(activity.isOneLine());
         }
 
         mAdapter.notifyDataSetChanged();
@@ -186,10 +188,10 @@
     @Override
     public void onStart() {
         super.onStart();
-
+        final Calculator activity = (Calculator) getActivity();
         // The orientation may have changed.
         mDragController.initializeAnimation(mRecyclerView,
-                ((Calculator) getActivity()).isResultLayout(), mDragLayout.isOpen());
+                activity.isResultLayout(), activity.isOneLine(), mDragLayout.isOpen());
     }
 
     @Override
@@ -221,7 +223,7 @@
         super.onDestroyView();
     }
 
-    private void initializeController(boolean isResult) {
+    private void initializeController(boolean isResult, boolean isOneLine) {
         mDragController.setDisplayFormula(
                 (CalculatorFormula) getActivity().findViewById(R.id.formula));
 
@@ -232,7 +234,7 @@
 
         mDragController.setEvaluator(mEvaluator);
 
-        mDragController.initializeController(isResult);
+        mDragController.initializeController(isResult, isOneLine);
     }
 
     public boolean stopActionModeOrContextMenu() {