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

Commit 1af65ef7 authored by Alex Stetson's avatar Alex Stetson
Browse files

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
parent 4ec596d6
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -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);

    /**
+2 −5
Original line number Diff line number Diff line
@@ -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) {
            }
        }
+5 −3
Original line number Diff line number Diff line
@@ -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;
            }
        }
    }
+3 −2
Original line number Diff line number Diff line
@@ -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(