Loading core/java/android/view/SurfaceControlViewHost.java +5 −3 Original line number Diff line number Diff line Loading @@ -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; } Loading Loading @@ -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) { Loading core/java/android/view/WindowlessWindowManager.java +10 −9 Original line number Diff line number Diff line Loading @@ -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) { Loading Loading @@ -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(); Loading @@ -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; } } Loading Loading @@ -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); Loading @@ -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; Loading libs/WindowManager/Shell/src/com/android/wm/shell/common/SystemWindows.java +1 −1 Original line number Diff line number Diff line Loading @@ -203,7 +203,7 @@ public class SystemWindows { + "SystemWindow:" + view); return null; } return root.getFocusGrantToken(); return root.getInputTransferToken(); } private class PerDisplay { Loading services/core/java/com/android/server/wm/BackNavigationController.java +2 −1 Original line number Diff line number Diff line Loading @@ -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."); Loading services/core/java/com/android/server/wm/EmbeddedWindowController.java +16 −16 Original line number Diff line number Diff line Loading @@ -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; Loading @@ -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) { Loading Loading @@ -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; } Loading @@ -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()); } } Loading @@ -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) { Loading @@ -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; Loading @@ -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; Loading @@ -183,7 +183,7 @@ class EmbeddedWindowController { mOwnerPid = ownerPid; mWindowType = windowType; mDisplayId = displayId; mFocusGrantToken = focusGrantToken; mInputTransferToken = inputTransferToken; final String hostWindowName = (mHostWindowState != null) ? "-" + mHostWindowState.getWindowTag().toString() : ""; Loading Loading @@ -260,8 +260,8 @@ class EmbeddedWindowController { return mOwnerUid; } IBinder getFocusGrantToken() { return mFocusGrantToken; IBinder getInputTransferToken() { return mInputTransferToken; } IBinder getInputChannelToken() { Loading Loading @@ -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 Loading @@ -298,7 +298,7 @@ class EmbeddedWindowController { mHostWindowState.handleTapOutsideFocusInsideSelf(); } } else { mWmService.grantEmbeddedWindowFocus(mSession, mFocusGrantToken, grantFocus); mWmService.grantEmbeddedWindowFocus(mSession, mInputTransferToken, grantFocus); } } } Loading Loading
core/java/android/view/SurfaceControlViewHost.java +5 −3 Original line number Diff line number Diff line Loading @@ -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; } Loading Loading @@ -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) { Loading
core/java/android/view/WindowlessWindowManager.java +10 −9 Original line number Diff line number Diff line Loading @@ -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) { Loading Loading @@ -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(); Loading @@ -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; } } Loading Loading @@ -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); Loading @@ -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; Loading
libs/WindowManager/Shell/src/com/android/wm/shell/common/SystemWindows.java +1 −1 Original line number Diff line number Diff line Loading @@ -203,7 +203,7 @@ public class SystemWindows { + "SystemWindow:" + view); return null; } return root.getFocusGrantToken(); return root.getInputTransferToken(); } private class PerDisplay { Loading
services/core/java/com/android/server/wm/BackNavigationController.java +2 −1 Original line number Diff line number Diff line Loading @@ -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."); Loading
services/core/java/com/android/server/wm/EmbeddedWindowController.java +16 −16 Original line number Diff line number Diff line Loading @@ -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; Loading @@ -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) { Loading Loading @@ -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; } Loading @@ -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()); } } Loading @@ -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) { Loading @@ -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; Loading @@ -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; Loading @@ -183,7 +183,7 @@ class EmbeddedWindowController { mOwnerPid = ownerPid; mWindowType = windowType; mDisplayId = displayId; mFocusGrantToken = focusGrantToken; mInputTransferToken = inputTransferToken; final String hostWindowName = (mHostWindowState != null) ? "-" + mHostWindowState.getWindowTag().toString() : ""; Loading Loading @@ -260,8 +260,8 @@ class EmbeddedWindowController { return mOwnerUid; } IBinder getFocusGrantToken() { return mFocusGrantToken; IBinder getInputTransferToken() { return mInputTransferToken; } IBinder getInputChannelToken() { Loading Loading @@ -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 Loading @@ -298,7 +298,7 @@ class EmbeddedWindowController { mHostWindowState.handleTapOutsideFocusInsideSelf(); } } else { mWmService.grantEmbeddedWindowFocus(mSession, mFocusGrantToken, grantFocus); mWmService.grantEmbeddedWindowFocus(mSession, mInputTransferToken, grantFocus); } } } Loading