diff --git a/services/core/java/com/android/server/wm/DisplayPolicy.java b/services/core/java/com/android/server/wm/DisplayPolicy.java index 203214d536ddf..30f69dd79f5e2 100644 --- a/services/core/java/com/android/server/wm/DisplayPolicy.java +++ b/services/core/java/com/android/server/wm/DisplayPolicy.java @@ -2861,6 +2861,10 @@ public class DisplayPolicy { mImmersiveModeConfirmation.onLockTaskModeChangedLw(lockTaskState); } + boolean onSystemUiSettingsChanged() { + return mImmersiveModeConfirmation.onSettingChanged(mService.mCurrentUserId); + } + /** * Request a screenshot be taken. * diff --git a/services/core/java/com/android/server/wm/ImmersiveModeConfirmation.java b/services/core/java/com/android/server/wm/ImmersiveModeConfirmation.java index b94bc5b2c61d8..747d3652e1503 100644 --- a/services/core/java/com/android/server/wm/ImmersiveModeConfirmation.java +++ b/services/core/java/com/android/server/wm/ImmersiveModeConfirmation.java @@ -148,6 +148,15 @@ public class ImmersiveModeConfirmation { } } + boolean onSettingChanged(int currentUserId) { + final boolean changed = loadSetting(currentUserId, mContext); + // Remove the window if the setting changes to be confirmed. + if (changed && sConfirmed) { + mHandler.sendEmptyMessage(H.HIDE); + } + return changed; + } + void immersiveModeChangedLw(int rootDisplayAreaId, boolean isImmersiveMode, boolean userSetupComplete, boolean navBarEmpty) { mHandler.removeMessages(H.SHOW); diff --git a/services/core/java/com/android/server/wm/WindowManagerService.java b/services/core/java/com/android/server/wm/WindowManagerService.java index 1657a136d61d3..d43a76315502a 100644 --- a/services/core/java/com/android/server/wm/WindowManagerService.java +++ b/services/core/java/com/android/server/wm/WindowManagerService.java @@ -818,7 +818,7 @@ public class WindowManagerService extends IWindowManager.Stub } if (mImmersiveModeConfirmationsUri.equals(uri) || mPolicyControlUri.equals(uri)) { - updateSystemUiSettings(); + updateSystemUiSettings(true /* handleChange */); return; } @@ -874,17 +874,22 @@ public class WindowManagerService extends IWindowManager.Stub } void loadSettings() { - updateSystemUiSettings(); + updateSystemUiSettings(false /* handleChange */); updatePointerLocation(); } - void updateSystemUiSettings() { - boolean changed; + void updateSystemUiSettings(boolean handleChange) { synchronized (mGlobalLock) { - changed = ImmersiveModeConfirmation.loadSetting(mCurrentUserId, mContext); - } - if (changed) { - updateRotation(false /* alwaysSendConfiguration */, false /* forceRelayout */); + boolean changed = false; + if (handleChange) { + changed = getDefaultDisplayContentLocked().getDisplayPolicy() + .onSystemUiSettingsChanged(); + } else { + ImmersiveModeConfirmation.loadSetting(mCurrentUserId, mContext); + } + if (changed) { + mWindowPlacerLocked.requestTraversal(); + } } } @@ -2990,7 +2995,7 @@ public class WindowManagerService extends IWindowManager.Stub @Override public void onUserSwitched() { - mSettingsObserver.updateSystemUiSettings(); + mSettingsObserver.updateSystemUiSettings(true /* handleChange */); synchronized (mGlobalLock) { // force a re-application of focused window sysui visibility on each display. mRoot.forAllDisplayPolicies(DisplayPolicy::resetSystemUiVisibilityLw);