Merge "Fix bug in SwipeHelper" into klp-dev
diff --git a/src/com/android/dialer/DialtactsActivity.java b/src/com/android/dialer/DialtactsActivity.java
index 499ff31..5826afd 100644
--- a/src/com/android/dialer/DialtactsActivity.java
+++ b/src/com/android/dialer/DialtactsActivity.java
@@ -181,12 +181,14 @@
                     // CallLog screen (search UI will be automatically exited).
                     PhoneNumberInteraction.startInteractionForPhoneCall(
                         DialtactsActivity.this, dataUri, getCallOrigin());
+                    hideDialpadAndSearchUi();
                 }
 
                 @Override
                 public void onCallNumberDirectly(String phoneNumber) {
                     Intent intent = CallUtil.getCallIntent(phoneNumber, getCallOrigin());
                     startActivity(intent);
+                    hideDialpadAndSearchUi();
                 }
 
                 @Override
@@ -430,7 +432,12 @@
         ft.commit();
     }
 
-    private void hideDialpadFragment(boolean animate) {
+    private void hideDialpadFragment(boolean animate, boolean clearDialpad) {
+        if (mDialpadFragment == null) return;
+        if (clearDialpad) {
+            mDialpadFragment.clearDialpad();
+        }
+        if (!mDialpadFragment.isVisible()) return;
         mDialpadFragment.setAdjustTranslationForAnimation(animate);
         final FragmentTransaction ft = getFragmentManager().beginTransaction();
         if (animate) {
@@ -459,12 +466,6 @@
         });
     }
 
-    private void hideDialpadFragmentIfNecessary() {
-        if (mDialpadFragment != null && mDialpadFragment.isVisible()) {
-            hideDialpadFragment(true);
-        }
-    }
-
     final AnimatorListener mHideListener = new AnimatorListenerAdapter() {
         @Override
         public void onAnimationEnd(Animator animation) {
@@ -793,9 +794,10 @@
     @Override
     public void onBackPressed() {
         if (mDialpadFragment != null && mDialpadFragment.isVisible()) {
-            hideDialpadFragment(true);
+            hideDialpadFragment(true, false);
         } else if (mInSearchUi) {
             mSearchView.setText(null);
+            mDialpadFragment.clearDialpad();
         } else if (isTaskRoot()) {
             // Instead of stopping, simply push this to the back of the stack.
             // This is only done when running at the top of the stack;
@@ -830,7 +832,7 @@
     @Override
     public void onListFragmentScrollStateChange(int scrollState) {
         if (scrollState == OnScrollListener.SCROLL_STATE_TOUCH_SCROLL) {
-            hideDialpadFragmentIfNecessary();
+            hideDialpadFragment(true, false);
             hideInputMethod(getCurrentFocus());
         }
     }
diff --git a/src/com/android/dialer/dialpad/DialpadFragment.java b/src/com/android/dialer/dialpad/DialpadFragment.java
index 82f5377..79e8307 100644
--- a/src/com/android/dialer/dialpad/DialpadFragment.java
+++ b/src/com/android/dialer/dialpad/DialpadFragment.java
@@ -745,7 +745,7 @@
 
         if (mClearDigitsOnStop) {
             mClearDigitsOnStop = false;
-            mDigits.getText().clear();
+            clearDialpad();
         }
     }
 
@@ -1157,6 +1157,10 @@
         }
     }
 
+    public void clearDialpad() {
+        mDigits.getText().clear();
+    }
+
     private String getCallOrigin() {
         return (getActivity() instanceof DialtactsActivity) ?
                 ((DialtactsActivity) getActivity()).getCallOrigin() : null;