diff --git a/core/java/android/app/Activity.java b/core/java/android/app/Activity.java index 3c5a1c7cfb456..a9623917f757d 100644 --- a/core/java/android/app/Activity.java +++ b/core/java/android/app/Activity.java @@ -1320,6 +1320,11 @@ public class Activity extends ContextThemeWrapper } mManagedCursors.clear(); } + + // Close any open search dialog + if (mSearchManager != null) { + mSearchManager.stopSearch(); + } } /** diff --git a/core/java/android/app/SearchDialog.java b/core/java/android/app/SearchDialog.java index add99d78eda2e..0ebe3ac09cadb 100644 --- a/core/java/android/app/SearchDialog.java +++ b/core/java/android/app/SearchDialog.java @@ -132,6 +132,15 @@ public class SearchDialog extends Dialog implements OnItemClickListener, OnItemS // Last known IME options value for the search edit text. private int mSearchAutoCompleteImeOptions; + private BroadcastReceiver mConfChangeListener = new BroadcastReceiver() { + @Override + public void onReceive(Context context, Intent intent) { + if (intent.getAction().equals(Intent.ACTION_CONFIGURATION_CHANGED)) { + onConfigurationChanged(); + } + } + }; + /** * Constructor - fires it up and makes it look like the search UI. * @@ -149,16 +158,6 @@ public class SearchDialog extends Dialog implements OnItemClickListener, OnItemS mVoiceAppSearchIntent = new Intent(RecognizerIntent.ACTION_RECOGNIZE_SPEECH); mVoiceAppSearchIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); mSearchManager = searchManager; - IntentFilter filter = new IntentFilter(); - filter.addAction(Intent.ACTION_CONFIGURATION_CHANGED); - context.registerReceiver(new BroadcastReceiver() { - @Override - public void onReceive(Context context, Intent intent) { - if (intent.getAction().equals(Intent.ACTION_CONFIGURATION_CHANGED)) { - onConfigurationChanged(); - } - } - }, filter); } /** @@ -297,10 +296,20 @@ public class SearchDialog extends Dialog implements OnItemClickListener, OnItemS show(); } updateUI(); - + return true; } + @Override + public void onStart() { + super.onStart(); + + // Register a listener for configuration change events. + IntentFilter filter = new IntentFilter(); + filter.addAction(Intent.ACTION_CONFIGURATION_CHANGED); + getContext().registerReceiver(mConfChangeListener, filter); + } + /** * The search dialog is being dismissed, so handle all of the local shutdown operations. * @@ -311,6 +320,8 @@ public class SearchDialog extends Dialog implements OnItemClickListener, OnItemS public void onStop() { super.onStop(); + getContext().unregisterReceiver(mConfChangeListener); + closeSuggestionsAdapter(); // dump extra memory we're hanging on to