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

Commit 98058cbd authored by Chavi Weingarten's avatar Chavi Weingarten
Browse files

Rename focusGrantToken to inputTransferToken

Hosts can get a token for the embedded window to make focus request call
in system server. The token is just a Binder object that is used to look
up the embedded window in system server. Rename to inputTransferToken
since we can reuse this token for other input transfer requests.

Bug: 303254234
Test: SurfaceControlViewHostTests
Change-Id: Ibf7712a54629e8c5cf9095a08c1cfd501aa4ef78
parent c3ed83e7
Loading
Loading
Loading
Loading
+5 −3
Original line number Diff line number Diff line
@@ -407,7 +407,7 @@ public class SurfaceControlViewHost {
    public @Nullable SurfacePackage getSurfacePackage() {
        if (mSurfaceControl != null && mAccessibilityEmbeddedConnection != null) {
            return new SurfacePackage(new SurfaceControl(mSurfaceControl, "getSurfacePackage"),
                mAccessibilityEmbeddedConnection, getFocusGrantToken(), mRemoteInterface);
                mAccessibilityEmbeddedConnection, getInputTransferToken(), mRemoteInterface);
        } else {
            return null;
        }
@@ -526,10 +526,12 @@ public class SurfaceControlViewHost {
    }

    /**
     * Returns an input token used which can be used to request focus on the embedded surface.
     *
     * @hide
     */
    public IBinder getFocusGrantToken() {
        return mWm.getFocusGrantToken(getWindowToken().asBinder());
    public IBinder getInputTransferToken() {
        return mWm.getInputTransferToken(getWindowToken().asBinder());
    }

    private void addWindowToken(WindowManager.LayoutParams attrs) {
+10 −9
Original line number Diff line number Diff line
@@ -58,7 +58,7 @@ public class WindowlessWindowManager implements IWindowSession {
        SurfaceControl mLeash;
        Rect mFrame;
        Rect mAttachedFrame;
        IBinder mFocusGrantToken;
        IBinder mInputTransferToken;

        State(SurfaceControl sc, WindowManager.LayoutParams p, int displayId, IWindow client,
                SurfaceControl leash, Rect frame) {
@@ -89,7 +89,7 @@ public class WindowlessWindowManager implements IWindowSession {
    private final Configuration mConfiguration;
    private final IWindowSession mRealWm;
    private final IBinder mHostInputToken;
    private final IBinder mFocusGrantToken = new Binder();
    private final IBinder mInputTransferToken = new Binder();
    private InsetsState mInsetsState;
    private final ClientWindowFrames mTmpFrames = new ClientWindowFrames();
    private final MergedConfiguration mTmpConfig = new MergedConfiguration();
@@ -109,17 +109,17 @@ public class WindowlessWindowManager implements IWindowSession {
        mConfiguration.setTo(configuration);
    }

    IBinder getFocusGrantToken(IBinder window) {
    IBinder getInputTransferToken(IBinder window) {
        synchronized (this) {
            // This can only happen if someone requested the focusGrantToken before setView was
            // called for the SCVH. In that case, use the root focusGrantToken since this will be
            // the same token sent to WMS for the root window once setView is called.
            if (mStateForWindow.isEmpty()) {
                return mFocusGrantToken;
                return mInputTransferToken;
            }
            State state = mStateForWindow.get(window);
            if (state != null) {
                return state.mFocusGrantToken;
                return state.mInputTransferToken;
            }
        }

@@ -207,9 +207,9 @@ public class WindowlessWindowManager implements IWindowSession {
            // Give the first window the mFocusGrantToken since that's the token the host can use
            // to give focus to the embedded.
            if (mStateForWindow.isEmpty()) {
                state.mFocusGrantToken = mFocusGrantToken;
                state.mInputTransferToken = mInputTransferToken;
            } else {
                state.mFocusGrantToken = new Binder();
                state.mInputTransferToken = new Binder();
            }

            mStateForWindow.put(window.asBinder(), state);
@@ -230,12 +230,13 @@ public class WindowlessWindowManager implements IWindowSession {
                            new SurfaceControl(sc, "WindowlessWindowManager.addToDisplay"),
                            window, mHostInputToken, attrs.flags, attrs.privateFlags,
                            attrs.inputFeatures, attrs.type,
                            attrs.token, state.mFocusGrantToken, attrs.getTitle().toString(),
                            attrs.token, state.mInputTransferToken, attrs.getTitle().toString(),
                            outInputChannel);
                } else {
                    mRealWm.grantInputChannel(displayId, sc, window, mHostInputToken, attrs.flags,
                            attrs.privateFlags, attrs.inputFeatures, attrs.type, attrs.token,
                            state.mFocusGrantToken, attrs.getTitle().toString(), outInputChannel);
                            state.mInputTransferToken, attrs.getTitle().toString(),
                            outInputChannel);
                }
                state.mInputChannelToken =
                        outInputChannel != null ? outInputChannel.getToken() : null;
+1 −1
Original line number Diff line number Diff line
@@ -203,7 +203,7 @@ public class SystemWindows {
                    + "SystemWindow:" + view);
            return null;
        }
        return root.getFocusGrantToken();
        return root.getInputTransferToken();
    }

    private class PerDisplay {
+2 −1
Original line number Diff line number Diff line
@@ -163,7 +163,8 @@ class BackNavigationController {

            if (window == null) {
                EmbeddedWindowController.EmbeddedWindow embeddedWindow =
                        wmService.mEmbeddedWindowController.getByFocusToken(focusedWindowToken);
                        wmService.mEmbeddedWindowController.getByInputTransferToken(
                                focusedWindowToken);
                if (embeddedWindow != null) {
                    ProtoLog.d(WM_DEBUG_BACK_PREVIEW,
                            "Current focused window is embeddedWindow. Dispatch KEYCODE_BACK.");
+16 −16
Original line number Diff line number Diff line
@@ -45,8 +45,8 @@ class EmbeddedWindowController {
    private static final String TAG = TAG_WITH_CLASS_NAME ? "EmbeddedWindowController" : TAG_WM;
    /* maps input token to an embedded window */
    private ArrayMap<IBinder /*input token */, EmbeddedWindow> mWindows = new ArrayMap<>();
    private ArrayMap<IBinder /*focus grant token */, EmbeddedWindow> mWindowsByFocusToken =
        new ArrayMap<>();
    private ArrayMap<IBinder /*input transfer token */, EmbeddedWindow>
            mWindowsByInputTransferToken = new ArrayMap<>();
    private ArrayMap<IBinder /*window token*/, EmbeddedWindow> mWindowsByWindowToken =
        new ArrayMap<>();
    private final Object mGlobalLock;
@@ -67,14 +67,14 @@ class EmbeddedWindowController {
    void add(IBinder inputToken, EmbeddedWindow window) {
        try {
            mWindows.put(inputToken, window);
            final IBinder focusToken = window.getFocusGrantToken();
            mWindowsByFocusToken.put(focusToken, window);
            final IBinder inputTransferToken = window.getInputTransferToken();
            mWindowsByInputTransferToken.put(inputTransferToken, window);
            mWindowsByWindowToken.put(window.getWindowToken(), window);
            updateProcessController(window);
            window.mClient.asBinder().linkToDeath(()-> {
                synchronized (mGlobalLock) {
                    mWindows.remove(inputToken);
                    mWindowsByFocusToken.remove(focusToken);
                    mWindowsByInputTransferToken.remove(inputTransferToken);
                }
            }, 0);
        } catch (RemoteException e) {
@@ -105,7 +105,7 @@ class EmbeddedWindowController {
            EmbeddedWindow ew = mWindows.valueAt(i);
            if (ew.mClient.asBinder() == client.asBinder()) {
                mWindows.removeAt(i).onRemoved();
                mWindowsByFocusToken.remove(ew.getFocusGrantToken());
                mWindowsByInputTransferToken.remove(ew.getInputTransferToken());
                mWindowsByWindowToken.remove(ew.getWindowToken());
                return;
            }
@@ -117,7 +117,7 @@ class EmbeddedWindowController {
            EmbeddedWindow ew = mWindows.valueAt(i);
            if (ew.mHostWindowState == host) {
                mWindows.removeAt(i).onRemoved();
                mWindowsByFocusToken.remove(ew.getFocusGrantToken());
                mWindowsByInputTransferToken.remove(ew.getInputTransferToken());
                mWindowsByWindowToken.remove(ew.getWindowToken());
            }
        }
@@ -127,8 +127,8 @@ class EmbeddedWindowController {
        return mWindows.get(inputToken);
    }

    EmbeddedWindow getByFocusToken(IBinder focusGrantToken) {
        return mWindowsByFocusToken.get(focusGrantToken);
    EmbeddedWindow getByInputTransferToken(IBinder inputTransferToken) {
        return mWindowsByInputTransferToken.get(inputTransferToken);
    }

    EmbeddedWindow getByWindowToken(IBinder windowToken) {
@@ -153,7 +153,7 @@ class EmbeddedWindowController {
         * to request focus transfer to the embedded. This is not the input token since we don't
         * want to give clients access to each others input token.
         */
        private final IBinder mFocusGrantToken;
        private final IBinder mInputTransferToken;

        private boolean mIsFocusable;

@@ -171,7 +171,7 @@ class EmbeddedWindowController {
         */
        EmbeddedWindow(Session session, WindowManagerService service, IWindow clientToken,
                       WindowState hostWindowState, int ownerUid, int ownerPid, int windowType,
                       int displayId, IBinder focusGrantToken, String inputHandleName,
                       int displayId, IBinder inputTransferToken, String inputHandleName,
                       boolean isFocusable) {
            mSession = session;
            mWmService = service;
@@ -183,7 +183,7 @@ class EmbeddedWindowController {
            mOwnerPid = ownerPid;
            mWindowType = windowType;
            mDisplayId = displayId;
            mFocusGrantToken = focusGrantToken;
            mInputTransferToken = inputTransferToken;
            final String hostWindowName =
                    (mHostWindowState != null) ? "-" + mHostWindowState.getWindowTag().toString()
                            : "";
@@ -260,8 +260,8 @@ class EmbeddedWindowController {
            return mOwnerUid;
        }

        IBinder getFocusGrantToken() {
            return mFocusGrantToken;
        IBinder getInputTransferToken() {
            return mInputTransferToken;
        }

        IBinder getInputChannelToken() {
@@ -290,7 +290,7 @@ class EmbeddedWindowController {
                    // Use null session since this is being granted by system server and doesn't
                    // require the host session to be passed in
                    mWmService.grantEmbeddedWindowFocus(null, mHostWindowState.mClient,
                            mFocusGrantToken, grantFocus);
                            mInputTransferToken, grantFocus);
                    if (grantFocus) {
                        // If granting focus to the embedded when tapped, we need to ensure the host
                        // gains focus as well or the transfer won't take effect since it requires
@@ -298,7 +298,7 @@ class EmbeddedWindowController {
                        mHostWindowState.handleTapOutsideFocusInsideSelf();
                    }
                } else {
                    mWmService.grantEmbeddedWindowFocus(mSession, mFocusGrantToken, grantFocus);
                    mWmService.grantEmbeddedWindowFocus(mSession, mInputTransferToken, grantFocus);
                }
            }
        }
Loading