Hide the dialpad fragment onResume after dialing.

- Before, the dialpad fragment was being hidden immediately after
the user dialed a number. This caused the view in the lists fragment
to flash for a second between pressing dial and launching InCallUI.
- Now, don't clear/hide the dialpad fragment once the dialpad
button is pressed.
- Instead, in DialtactsActivity, stash an instance variable to hide
and clear the dialpad fragment the next time onResume() is called...
that is, the next time the Dialer is opened.

Bug: 15829164
Change-Id: I1e7d253b914c049f49bc8c1230f7110d6e98ec08
diff --git a/src/com/android/dialer/DialtactsActivity.java b/src/com/android/dialer/DialtactsActivity.java
index 8e873c8..2b2be2d 100644
--- a/src/com/android/dialer/DialtactsActivity.java
+++ b/src/com/android/dialer/DialtactsActivity.java
@@ -131,6 +131,7 @@
     private static final String KEY_IN_DIALPAD_SEARCH_UI = "in_dialpad_search_ui";
     private static final String KEY_SEARCH_QUERY = "search_query";
     private static final String KEY_FIRST_LAUNCH = "first_launch";
+    private static final String KEY_HIDE_DIALPAD = "hide_dialpad";
     private static final String KEY_IS_DIALPAD_SHOWN = "is_dialpad_shown";
 
     private static final String TAG_DIALPAD_FRAGMENT = "dialpad";
@@ -192,6 +193,7 @@
     private boolean mClearSearchOnPause;
     private boolean mIsDialpadShown;
     private boolean mShowDialpadOnResume;
+    private boolean mHideDialpadOnResume;
 
     /**
      * Whether or not the device is in landscape orientation.
@@ -423,6 +425,7 @@
             mInRegularSearch = savedInstanceState.getBoolean(KEY_IN_REGULAR_SEARCH_UI);
             mInDialpadSearch = savedInstanceState.getBoolean(KEY_IN_DIALPAD_SEARCH_UI);
             mFirstLaunch = savedInstanceState.getBoolean(KEY_FIRST_LAUNCH);
+            mHideDialpadOnResume = savedInstanceState.getBoolean(KEY_HIDE_DIALPAD);
             mShowDialpadOnResume = savedInstanceState.getBoolean(KEY_IS_DIALPAD_SHOWN);
             mActionBarController.restoreInstanceState(savedInstanceState);
         }
@@ -480,6 +483,8 @@
         } else if (!phoneIsInUse() && mInCallDialpadUp) {
             hideDialpadFragment(false, true);
             mInCallDialpadUp = false;
+        } else if (mHideDialpadOnResume) {
+            hideDialpadFragment(false, true);
         } else if (mShowDialpadOnResume) {
             showDialpadFragment(false);
             mShowDialpadOnResume = false;
@@ -506,6 +511,7 @@
         outState.putBoolean(KEY_IN_REGULAR_SEARCH_UI, mInRegularSearch);
         outState.putBoolean(KEY_IN_DIALPAD_SEARCH_UI, mInDialpadSearch);
         outState.putBoolean(KEY_FIRST_LAUNCH, mFirstLaunch);
+        outState.putBoolean(KEY_HIDE_DIALPAD, mHideDialpadOnResume);
         outState.putBoolean(KEY_IS_DIALPAD_SHOWN, mIsDialpadShown);
         mActionBarController.saveInstanceState(outState);
     }
@@ -550,6 +556,7 @@
                 } else {
                     // Dial button was pressed; tell the Dialpad fragment
                     mDialpadFragment.dialButtonPressed();
+                    mHideDialpadOnResume = true;
                 }
                 break;
             case R.id.voice_search_button:
diff --git a/src/com/android/dialer/dialpad/DialpadFragment.java b/src/com/android/dialer/dialpad/DialpadFragment.java
index f54aa6c..ddf6ba9 100644
--- a/src/com/android/dialer/dialpad/DialpadFragment.java
+++ b/src/com/android/dialer/dialpad/DialpadFragment.java
@@ -1076,7 +1076,6 @@
                         (getActivity() instanceof DialtactsActivity ?
                                 ((DialtactsActivity) getActivity()).getCallOrigin() : null));
                 DialerUtils.startActivityWithErrorToast(getActivity(), intent);
-                hideAndClearDialpad(false);
             }
         }
     }