Dismiss both the soft keyboard and the search dialog on back if there is no text entered and no shortcuts are being obscured by the soft keyboard.

Fixes bug 2039508.  This makes backing out of the search dialog easier when dismissing the soft keyboard doesn't really
add any value.
diff --git a/core/java/android/app/SearchDialog.java b/core/java/android/app/SearchDialog.java
index 70aceeb..9c20a4b 100644
--- a/core/java/android/app/SearchDialog.java
+++ b/core/java/android/app/SearchDialog.java
@@ -1743,7 +1743,14 @@
                 }
                 // If the drop-down obscures the keyboard, the user wouldn't see anything
                 // happening when pressing back, so we dismiss the entire dialog instead.
-                if (isInputMethodNotNeeded()) {
+                //
+                // also: if there is no text entered, we also want to dismiss the whole dialog,
+                // not just the soft keyboard.  the exception to this is if there are shortcuts
+                // that aren't displayed (e.g are being obscured by the soft keyboard); in that
+                // case we want to dismiss the soft keyboard so the user can see the rest of the
+                // shortcuts.
+                if (isInputMethodNotNeeded() ||
+                        (isEmpty() && getDropDownChildCount() >= getAdapter().getCount())) {
                     mSearchDialog.cancel();
                     return true;
                 }
diff --git a/core/java/android/widget/AutoCompleteTextView.java b/core/java/android/widget/AutoCompleteTextView.java
index 456f8ed..02d77d1 100644
--- a/core/java/android/widget/AutoCompleteTextView.java
+++ b/core/java/android/widget/AutoCompleteTextView.java
@@ -862,6 +862,16 @@
         return ListView.INVALID_POSITION;
     }
 
+
+    /**
+     * @hide
+     * @return {@link android.widget.ListView#getChildCount()} of the drop down if it is showing,
+     *         otherwise 0.
+     */
+    protected int getDropDownChildCount() {
+        return mDropDownList == null ? 0 : mDropDownList.getChildCount();
+    }
+
     /**
      * <p>Starts filtering the content of the drop down list. The filtering
      * pattern is the content of the edit box. Subclasses should override this