diff options
| author | 2024-11-20 14:04:41 -0800 | |
|---|---|---|
| committer | 2024-12-02 11:25:03 -0800 | |
| commit | 1af65ef7ba362ba9ed1f60914e522913d16da940 (patch) | |
| tree | eccf8d3fbf902c0ac9194f8b065f364c779d991b | |
| parent | 4ec596d66375938c462563a0580c641a55ecdc38 (diff) | |
Update API to only modify specified inset types
When there are multiple controllers that update the visible insets,
explicitly setting all the requested visibilities may cause conflicts
with what is set elsewhere when each controller only cares about a
subset of the inset types. This API change will allow controllers to
only modify the visibility of a specific subset of insets while leaving
the rest as they previously were.
Bug: 376131165
Test: manual
Flag: NONE bugfix
Change-Id: Ia12f8b68ad132cc1e40094ba0680ea53fc7b5c65
4 files changed, 11 insertions, 11 deletions
diff --git a/core/java/android/view/IWindowManager.aidl b/core/java/android/view/IWindowManager.aidl index 6d85e7589c48..5da49857dda5 100644 --- a/core/java/android/view/IWindowManager.aidl +++ b/core/java/android/view/IWindowManager.aidl @@ -766,7 +766,7 @@ interface IWindowManager * container. */ @EnforcePermission("MANAGE_APP_TOKENS") - void updateDisplayWindowRequestedVisibleTypes(int displayId, int requestedVisibleTypes, + void updateDisplayWindowRequestedVisibleTypes(int displayId, int visibleTypes, int mask, in @nullable ImeTracker.Token statsToken); /** diff --git a/libs/WindowManager/Shell/src/com/android/wm/shell/common/DisplayImeController.java b/libs/WindowManager/Shell/src/com/android/wm/shell/common/DisplayImeController.java index 38b859220256..ec3c0b83fe2d 100644 --- a/libs/WindowManager/Shell/src/com/android/wm/shell/common/DisplayImeController.java +++ b/libs/WindowManager/Shell/src/com/android/wm/shell/common/DisplayImeController.java @@ -228,7 +228,6 @@ public class DisplayImeController implements DisplayController.OnDisplaysChanged public class PerDisplay implements DisplayInsetsController.OnInsetsChangedListener { final int mDisplayId; final InsetsState mInsetsState = new InsetsState(); - @InsetsType int mRequestedVisibleTypes = WindowInsets.Type.defaultVisible(); boolean mImeRequestedVisible = (WindowInsets.Type.defaultVisible() & WindowInsets.Type.ime()) != 0; InsetsSourceControl mImeSourceControl = null; @@ -426,12 +425,10 @@ public class DisplayImeController implements DisplayController.OnDisplaysChanged */ private void setVisibleDirectly(boolean visible, @Nullable ImeTracker.Token statsToken) { mInsetsState.setSourceVisible(InsetsSource.ID_IME, visible); - mRequestedVisibleTypes = visible - ? mRequestedVisibleTypes | WindowInsets.Type.ime() - : mRequestedVisibleTypes & ~WindowInsets.Type.ime(); + int visibleTypes = visible ? WindowInsets.Type.ime() : 0; try { mWmService.updateDisplayWindowRequestedVisibleTypes(mDisplayId, - mRequestedVisibleTypes, statsToken); + visibleTypes, WindowInsets.Type.ime(), statsToken); } catch (RemoteException e) { } } diff --git a/services/core/java/com/android/server/wm/DisplayContent.java b/services/core/java/com/android/server/wm/DisplayContent.java index e19096354d64..faeda5fbe428 100644 --- a/services/core/java/com/android/server/wm/DisplayContent.java +++ b/services/core/java/com/android/server/wm/DisplayContent.java @@ -7109,9 +7109,11 @@ class DisplayContent extends RootDisplayArea implements WindowManagerPolicy.Disp /** * @see #getRequestedVisibleTypes() */ - void setRequestedVisibleTypes(@InsetsType int requestedVisibleTypes) { - if (mRequestedVisibleTypes != requestedVisibleTypes) { - mRequestedVisibleTypes = requestedVisibleTypes; + void updateRequestedVisibleTypes(@InsetsType int visibleTypes, @InsetsType int mask) { + int newRequestedVisibleTypes = + (mRequestedVisibleTypes & ~mask) | (visibleTypes & mask); + if (mRequestedVisibleTypes != newRequestedVisibleTypes) { + mRequestedVisibleTypes = newRequestedVisibleTypes; } } } diff --git a/services/core/java/com/android/server/wm/WindowManagerService.java b/services/core/java/com/android/server/wm/WindowManagerService.java index 7e70e75820a3..591d19f3bfdc 100644 --- a/services/core/java/com/android/server/wm/WindowManagerService.java +++ b/services/core/java/com/android/server/wm/WindowManagerService.java @@ -4671,7 +4671,8 @@ public class WindowManagerService extends IWindowManager.Stub @EnforcePermission(android.Manifest.permission.MANAGE_APP_TOKENS) @Override public void updateDisplayWindowRequestedVisibleTypes(int displayId, - @InsetsType int requestedVisibleTypes, @Nullable ImeTracker.Token statsToken) { + @InsetsType int visibleTypes, @InsetsType int mask, + @Nullable ImeTracker.Token statsToken) { updateDisplayWindowRequestedVisibleTypes_enforcePermission(); final long origId = Binder.clearCallingIdentity(); try { @@ -4684,7 +4685,7 @@ public class WindowManagerService extends IWindowManager.Stub } ImeTracker.forLogging().onProgress(statsToken, ImeTracker.PHASE_WM_UPDATE_DISPLAY_WINDOW_REQUESTED_VISIBLE_TYPES); - dc.mRemoteInsetsControlTarget.setRequestedVisibleTypes(requestedVisibleTypes); + dc.mRemoteInsetsControlTarget.updateRequestedVisibleTypes(visibleTypes, mask); // TODO(b/353463205) the statsToken shouldn't be null as it is used later in the // IME provider. Check if we have to create a new request here, if null. dc.getInsetsStateController().onRequestedVisibleTypesChanged( |