diff options
8 files changed, 46 insertions, 42 deletions
diff --git a/core/java/android/view/SurfaceControlViewHost.java b/core/java/android/view/SurfaceControlViewHost.java index effc127dabd2..57b19a8ce12f 100644 --- a/core/java/android/view/SurfaceControlViewHost.java +++ b/core/java/android/view/SurfaceControlViewHost.java @@ -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) { diff --git a/core/java/android/view/WindowlessWindowManager.java b/core/java/android/view/WindowlessWindowManager.java index 7d3d283a45f2..8fe9b7bc0ca4 100644 --- a/core/java/android/view/WindowlessWindowManager.java +++ b/core/java/android/view/WindowlessWindowManager.java @@ -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; diff --git a/libs/WindowManager/Shell/src/com/android/wm/shell/common/SystemWindows.java b/libs/WindowManager/Shell/src/com/android/wm/shell/common/SystemWindows.java index 5e42782431fd..e9344ffcce0c 100644 --- a/libs/WindowManager/Shell/src/com/android/wm/shell/common/SystemWindows.java +++ b/libs/WindowManager/Shell/src/com/android/wm/shell/common/SystemWindows.java @@ -203,7 +203,7 @@ public class SystemWindows { + "SystemWindow:" + view); return null; } - return root.getFocusGrantToken(); + return root.getInputTransferToken(); } private class PerDisplay { diff --git a/services/core/java/com/android/server/wm/BackNavigationController.java b/services/core/java/com/android/server/wm/BackNavigationController.java index c2885dab12f0..42376685498a 100644 --- a/services/core/java/com/android/server/wm/BackNavigationController.java +++ b/services/core/java/com/android/server/wm/BackNavigationController.java @@ -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."); diff --git a/services/core/java/com/android/server/wm/EmbeddedWindowController.java b/services/core/java/com/android/server/wm/EmbeddedWindowController.java index c9bae127b800..275396f459bd 100644 --- a/services/core/java/com/android/server/wm/EmbeddedWindowController.java +++ b/services/core/java/com/android/server/wm/EmbeddedWindowController.java @@ -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); } } } diff --git a/services/core/java/com/android/server/wm/Session.java b/services/core/java/com/android/server/wm/Session.java index bbe44c540c39..e6d48667ffb0 100644 --- a/services/core/java/com/android/server/wm/Session.java +++ b/services/core/java/com/android/server/wm/Session.java @@ -884,8 +884,8 @@ class Session extends IWindowSession.Stub implements IBinder.DeathRecipient { @Override public void grantInputChannel(int displayId, SurfaceControl surface, IWindow window, IBinder hostInputToken, int flags, int privateFlags, int type, - int inputFeatures, IBinder windowToken, IBinder focusGrantToken, String inputHandleName, - InputChannel outInputChannel) { + int inputFeatures, IBinder windowToken, IBinder inputTransferToken, + String inputHandleName, InputChannel outInputChannel) { if (hostInputToken == null && !mCanAddInternalSystemWindow) { // Callers without INTERNAL_SYSTEM_WINDOW permission cannot grant input channel to // embedded windows without providing a host window input token @@ -896,7 +896,7 @@ class Session extends IWindowSession.Stub implements IBinder.DeathRecipient { try { mService.grantInputChannel(this, mUid, mPid, displayId, surface, window, hostInputToken, flags, mCanAddInternalSystemWindow ? privateFlags : 0, - type, inputFeatures, windowToken, focusGrantToken, inputHandleName, + type, inputFeatures, windowToken, inputTransferToken, inputHandleName, outInputChannel); } finally { Binder.restoreCallingIdentity(identity); diff --git a/services/core/java/com/android/server/wm/WindowManagerService.java b/services/core/java/com/android/server/wm/WindowManagerService.java index a6d285a110f9..efeab8a68977 100644 --- a/services/core/java/com/android/server/wm/WindowManagerService.java +++ b/services/core/java/com/android/server/wm/WindowManagerService.java @@ -8804,7 +8804,7 @@ public class WindowManagerService extends IWindowManager.Stub void grantInputChannel(Session session, int callingUid, int callingPid, int displayId, SurfaceControl surface, IWindow window, IBinder hostInputToken, int flags, int privateFlags, int inputFeatures, int type, IBinder windowToken, - IBinder focusGrantToken, String inputHandleName, InputChannel outInputChannel) { + IBinder inputTransferToken, String inputHandleName, InputChannel outInputChannel) { final int sanitizedType = sanitizeWindowType(session, displayId, windowToken, type); final InputApplicationHandle applicationHandle; final String name; @@ -8813,7 +8813,7 @@ public class WindowManagerService extends IWindowManager.Stub EmbeddedWindowController.EmbeddedWindow win = new EmbeddedWindowController.EmbeddedWindow(session, this, window, mInputToWindowMap.get(hostInputToken), callingUid, callingPid, - sanitizedType, displayId, focusGrantToken, inputHandleName, + sanitizedType, displayId, inputTransferToken, inputHandleName, (flags & FLAG_NOT_FOCUSABLE) == 0); win.openInputChannel(outInputChannel); mEmbeddedWindowController.add(outInputChannel.getToken(), win); @@ -9140,10 +9140,10 @@ public class WindowManagerService extends IWindowManager.Stub return mPossibleDisplayInfoMapper.getPossibleDisplayInfos(displayId); } - void grantEmbeddedWindowFocus(Session session, IBinder focusToken, boolean grantFocus) { + void grantEmbeddedWindowFocus(Session session, IBinder inputTransferToken, boolean grantFocus) { synchronized (mGlobalLock) { final EmbeddedWindowController.EmbeddedWindow embeddedWindow = - mEmbeddedWindowController.getByFocusToken(focusToken); + mEmbeddedWindowController.getByInputTransferToken(inputTransferToken); if (embeddedWindow == null) { Slog.e(TAG, "Embedded window not found"); return; @@ -9188,8 +9188,8 @@ public class WindowManagerService extends IWindowManager.Stub } } - void grantEmbeddedWindowFocus(Session session, IWindow callingWindow, IBinder targetFocusToken, - boolean grantFocus) { + void grantEmbeddedWindowFocus(Session session, IWindow callingWindow, + IBinder inputTransferToken, boolean grantFocus) { synchronized (mGlobalLock) { final WindowState hostWindow = windowForClientLocked(session, callingWindow, false /* throwOnError*/); @@ -9202,7 +9202,7 @@ public class WindowManagerService extends IWindowManager.Stub return; } final EmbeddedWindowController.EmbeddedWindow embeddedWindow = - mEmbeddedWindowController.getByFocusToken(targetFocusToken); + mEmbeddedWindowController.getByInputTransferToken(inputTransferToken); if (embeddedWindow == null) { Slog.e(TAG, "Embedded window not found"); return; diff --git a/services/tests/wmtests/src/com/android/server/wm/SurfaceControlViewHostTests.java b/services/tests/wmtests/src/com/android/server/wm/SurfaceControlViewHostTests.java index c1d51474b1cd..8119fd486a87 100644 --- a/services/tests/wmtests/src/com/android/server/wm/SurfaceControlViewHostTests.java +++ b/services/tests/wmtests/src/com/android/server/wm/SurfaceControlViewHostTests.java @@ -138,11 +138,11 @@ public class SurfaceControlViewHostTests { IWindow window = IWindow.Stub.asInterface(mActivity.mSurfaceView.getWindowToken()); WindowManagerGlobal.getWindowSession().grantEmbeddedWindowFocus(window, - mScvh1.getFocusGrantToken(), true); + mScvh1.getInputTransferToken(), true); assertTrue("Failed to gain focus for view1", waitForWindowFocus(mView1, true)); WindowManagerGlobal.getWindowSession().grantEmbeddedWindowFocus(window, - mScvh2.getFocusGrantToken(), true); + mScvh2.getInputTransferToken(), true); assertTrue("Failed to gain focus for view2", waitForWindowFocus(mView2, true)); } |