diff options
author | 2022-06-29 18:13:35 +0000 | |
---|---|---|
committer | 2022-07-06 18:10:49 +0000 | |
commit | 7281f4f923e052dba7e973c93dc01bc92374d95d (patch) | |
tree | d7adf7f889c65244283b5ee8786bee9a4dca551d /WifiDialog/src | |
parent | 6a411a6ff421581e0494e1c974ded65da453a243 (diff) |
Cancel all dialogs in onStop() if not a configuration change
When the configuration changes, we do not cancel any dialogs so that we
can recreate them when the Activity is restarted. However, if onStop()
is called without a configuration change (different Activity coming to
the foreground), then we should cancel all dialogs.
Bug: 237482092
Test: Launch dialog with `adb shell cmd wifi launch-dialog-simple -t
Title -m Message -c 0`, then run `adb shell am start -n
com.google.android.setupwizard/.SetupWizardTestActivity` to launch
SetupWizard, and verify the dialog was cancelled. Verify launching
dialog and toggling dark mode does not cancel the dialog.
Change-Id: I1eff91d5d81098ddaa00fe3712987eadc808e00d
Diffstat (limited to 'WifiDialog/src')
-rw-r--r-- | WifiDialog/src/com/android/wifi/dialog/WifiDialogActivity.java | 29 |
1 files changed, 21 insertions, 8 deletions
diff --git a/WifiDialog/src/com/android/wifi/dialog/WifiDialogActivity.java b/WifiDialog/src/com/android/wifi/dialog/WifiDialogActivity.java index 5fa0177296..01de19e200 100644 --- a/WifiDialog/src/com/android/wifi/dialog/WifiDialogActivity.java +++ b/WifiDialog/src/com/android/wifi/dialog/WifiDialogActivity.java @@ -237,13 +237,26 @@ public class WifiDialogActivity extends Activity { protected void onStop() { super.onStop(); unregisterReceiver(mCloseSystemDialogsReceiver); - // Dismiss and remove any active Dialogs to prevent window leaking. - for (int i = 0; i < mActiveDialogsPerId.size(); i++) { - Dialog dialog = mActiveDialogsPerId.valueAt(i); - dialog.setOnDismissListener(null); - dialog.dismiss(); + + if (isChangingConfigurations()) { + // If we're stopping due to a configuration change, dismiss all the dialogs without + // removing it from mLaunchIntentsPerId to prevent window leaking. The dialogs will be + // recreated from mLaunchIntentsPerId in onStart(). + for (int i = 0; i < mActiveDialogsPerId.size(); i++) { + Dialog dialog = mActiveDialogsPerId.valueAt(i); + // Set the dismiss listener to null to prevent removing the Intent from + // mLaunchIntentsPerId. + dialog.setOnDismissListener(null); + dialog.dismiss(); + } + mActiveDialogsPerId.clear(); + } else { + // If we're stopping because we're switching to a new Activity, remove and cancel all + // the dialogs. + while (mActiveDialogsPerId.size() > 0) { + removeIntentAndPossiblyFinish(mActiveDialogsPerId.keyAt(0)); + } } - mActiveDialogsPerId.clear(); } @Override @@ -257,7 +270,7 @@ public class WifiDialogActivity extends Activity { } /** - * Remove the Intent and corresponding dialog of the given dialogId (dismissing it if it is + * Remove the Intent and corresponding dialog of the given dialogId (cancelling it if it is * showing) and finish the Activity if there are no dialogs left to show. */ private void removeIntentAndPossiblyFinish(int dialogId) { @@ -265,7 +278,7 @@ public class WifiDialogActivity extends Activity { Dialog dialog = mActiveDialogsPerId.get(dialogId); mActiveDialogsPerId.remove(dialogId); if (dialog != null && dialog.isShowing()) { - dialog.dismiss(); + dialog.cancel(); } if (mIsVerboseLoggingEnabled) { Log.v(TAG, "Dialog id " + dialogId + " removed."); |