Catch exception when add immersive confirmation

Before, when the display is removed before the immersive window is
added, there can be an InvalidDisplayException.

Bug: 188107066
Test: pass existing
Change-Id: Ic4988b56c0ff739d9866b142bc26160e9499d2b6
This commit is contained in:
Chris Li
2022-01-04 16:25:04 +08:00
parent f5f9c51c88
commit 8013720af9
2 changed files with 17 additions and 2 deletions

View File

@@ -2821,6 +2821,7 @@ public class DisplayPolicy {
void release() {
mHandler.post(mGestureNavigationSettingsObserver::unregister);
mImmersiveModeConfirmation.release();
}
@VisibleForTesting

View File

@@ -149,6 +149,11 @@ public class ImmersiveModeConfirmation {
}
}
void release() {
mHandler.removeMessages(H.SHOW);
mHandler.removeMessages(H.HIDE);
}
boolean onSettingChanged(int currentUserId) {
final boolean changed = loadSetting(currentUserId, mContext);
// Remove the window if the setting changes to be confirmed.
@@ -204,7 +209,12 @@ public class ImmersiveModeConfirmation {
if (mClingWindow != null) {
if (DEBUG) Slog.d(TAG, "Hiding immersive mode confirmation");
// We don't care which root display area the window manager is specifying for removal.
getWindowManager(FEATURE_UNDEFINED).removeView(mClingWindow);
try {
getWindowManager(FEATURE_UNDEFINED).removeView(mClingWindow);
} catch (WindowManager.InvalidDisplayException e) {
Slog.w(TAG, "Fail to hide the immersive confirmation window because of " + e);
return;
}
mClingWindow = null;
}
}
@@ -432,7 +442,11 @@ public class ImmersiveModeConfirmation {
// show the confirmation
WindowManager.LayoutParams lp = getClingWindowLayoutParams();
getWindowManager(rootDisplayAreaId).addView(mClingWindow, lp);
try {
getWindowManager(rootDisplayAreaId).addView(mClingWindow, lp);
} catch (WindowManager.InvalidDisplayException e) {
Slog.w(TAG, "Fail to show the immersive confirmation window because of " + e);
}
}
private final Runnable mConfirm = new Runnable() {