Implement ViewDragHelper to pull down history.

Bug: 31623549
Change-Id: Ie5c9bc0afef59f0922bd87bee709d04d294f24b9
diff --git a/src/com/android/calculator2/Calculator.java b/src/com/android/calculator2/Calculator.java
index 53232a5..7f1661f 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.FragmentTransaction;
 import android.content.ClipData;
 import android.content.DialogInterface;
 import android.content.Intent;
@@ -180,6 +181,7 @@
     private CalculatorText mFormulaText;
     private CalculatorResult mResultText;
     private HorizontalScrollView mFormulaContainer;
+    private DragLayout mDragLayout;
 
     private ViewPager mPadViewPager;
     private View mDeleteButton;
@@ -206,10 +208,12 @@
     // Whether the display is one line.
     private boolean mOneLine;
 
+    private HistoryFragment mHistoryFragment = new HistoryFragment();
+
     @Override
     protected void onCreate(Bundle savedInstanceState) {
         super.onCreate(savedInstanceState);
-        setContentView(R.layout.activity_calculator);
+        setContentView(R.layout.activity_calculator_main);
         setActionBar((Toolbar) findViewById(R.id.toolbar));
 
         // Hide all default options in the ActionBar.
@@ -263,6 +267,19 @@
         mResultText.setEvaluator(mEvaluator);
         KeyMaps.setActivity(this);
 
+        mDragLayout = (DragLayout) findViewById(R.id.drag_layout);
+        mDragLayout.setOnDragCallback(new DragLayout.OnDragCallback() {
+            @Override
+            public void onStartDragging() {
+                showHistoryFragment(FragmentTransaction.TRANSIT_NONE);
+            }
+
+            @Override
+            public void onDragToClose() {
+                getFragmentManager().popBackStack();
+            }
+        });
+
         if (savedInstanceState != null) {
             setState(CalculatorState.values()[
                 savedInstanceState.getInt(KEY_DISPLAY_STATE,
@@ -436,6 +453,12 @@
     @Override
     public void onBackPressed() {
         if (!stopActionModeOrContextMenu()) {
+            if (mDragLayout.isOpen()) {
+                // Close the layout and remove the fragment.
+                mDragLayout.setClosed();
+                getFragmentManager().popBackStack();
+                return;
+            }
             if (mPadViewPager != null && mPadViewPager.getCurrentItem() != 0) {
                 // Select the previous pad.
                 mPadViewPager.setCurrentItem(mPadViewPager.getCurrentItem() - 1);
@@ -1045,11 +1068,8 @@
     public boolean onOptionsItemSelected(MenuItem item) {
         switch (item.getItemId()) {
             case R.id.menu_history:
-                getFragmentManager().beginTransaction()
-                        .replace(android.R.id.content, new HistoryFragment(), HistoryFragment.TAG)
-                        .addToBackStack(HistoryFragment.TAG)
-                        .commit();
-
+                showHistoryFragment(FragmentTransaction.TRANSIT_FRAGMENT_OPEN);
+                mDragLayout.setOpen();
                 return true;
             case R.id.menu_leading:
                 displayFull();
@@ -1065,6 +1085,14 @@
         }
     }
 
+    private void showHistoryFragment(int transit) {
+        getFragmentManager().beginTransaction()
+                .replace(R.id.history_frame, mHistoryFragment, HistoryFragment.TAG)
+                .setTransition(transit)
+                .addToBackStack(HistoryFragment.TAG)
+                .commit();
+    }
+
     private void displayMessage(String s) {
         AlertDialogFragment.showMessageDialog(this, s, null);
     }