Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 8013720a authored by Chris Li's avatar Chris Li
Browse files

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
parent f5f9c51c
Loading
Loading
Loading
Loading
+1 −0
Original line number Diff line number Diff line
@@ -2821,6 +2821,7 @@ public class DisplayPolicy {

    void release() {
        mHandler.post(mGestureNavigationSettingsObserver::unregister);
        mImmersiveModeConfirmation.release();
    }

    @VisibleForTesting
+16 −2
Original line number Diff line number Diff line
@@ -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.
            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();
        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() {