Loading core/java/android/view/IWindowSession.aidl +1 −1 Original line number Diff line number Diff line Loading @@ -298,7 +298,7 @@ interface IWindowSession { */ void grantInputChannel(int displayId, in SurfaceControl surface, in IWindow window, in IBinder hostInputToken, int flags, int privateFlags, int type, in IBinder focusGrantToken, out InputChannel outInputChannel); out InputChannel outInputChannel); /** * Update the flags on an input channel associated with a particular surface. Loading core/java/android/view/SurfaceControlViewHost.java +1 −1 Original line number Diff line number Diff line Loading @@ -274,7 +274,7 @@ public class SurfaceControlViewHost { public @Nullable SurfacePackage getSurfacePackage() { if (mSurfaceControl != null && mAccessibilityEmbeddedConnection != null) { return new SurfacePackage(mSurfaceControl, mAccessibilityEmbeddedConnection, mWm.getFocusGrantToken(), mRemoteInterface); mViewRoot.getInputToken(), mRemoteInterface); } else { return null; } Loading core/java/android/view/WindowlessWindowManager.java +3 −9 Original line number Diff line number Diff line Loading @@ -21,7 +21,6 @@ import android.content.res.Configuration; import android.graphics.PixelFormat; import android.graphics.Rect; import android.graphics.Region; import android.os.Binder; import android.os.IBinder; import android.os.RemoteCallback; import android.os.RemoteException; Loading Loading @@ -76,7 +75,6 @@ public class WindowlessWindowManager implements IWindowSession { private final Configuration mConfiguration; private final IWindowSession mRealWm; private final IBinder mHostInputToken; private final IBinder mFocusGrantToken = new Binder(); private int mForceHeight = -1; private int mForceWidth = -1; Loading @@ -93,10 +91,6 @@ public class WindowlessWindowManager implements IWindowSession { mConfiguration.setTo(configuration); } IBinder getFocusGrantToken() { return mFocusGrantToken; } /** * Utility API. */ Loading Loading @@ -159,10 +153,10 @@ public class WindowlessWindowManager implements IWindowSession { mRealWm.grantInputChannel(displayId, new SurfaceControl(sc, "WindowlessWindowManager.addToDisplay"), window, mHostInputToken, attrs.flags, attrs.privateFlags, attrs.type, mFocusGrantToken, outInputChannel); outInputChannel); } else { mRealWm.grantInputChannel(displayId, sc, window, mHostInputToken, attrs.flags, attrs.privateFlags, attrs.type, mFocusGrantToken, outInputChannel); attrs.privateFlags, attrs.type, outInputChannel); } } catch (RemoteException e) { Log.e(TAG, "Failed to grant input to surface: ", e); Loading Loading @@ -475,7 +469,7 @@ public class WindowlessWindowManager implements IWindowSession { @Override public void grantInputChannel(int displayId, SurfaceControl surface, IWindow window, IBinder hostInputToken, int flags, int privateFlags, int type, IBinder focusGrantToken, IBinder hostInputToken, int flags, int privateFlags, int type, InputChannel outInputChannel) { } Loading services/core/java/com/android/server/wm/EmbeddedWindowController.java +4 −31 Original line number Diff line number Diff line Loading @@ -41,8 +41,6 @@ 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 final Object mGlobalLock; private final ActivityTaskManagerService mAtmService; Loading @@ -61,13 +59,10 @@ class EmbeddedWindowController { void add(IBinder inputToken, EmbeddedWindow window) { try { mWindows.put(inputToken, window); final IBinder focusToken = window.getFocusGrantToken(); mWindowsByFocusToken.put(focusToken, window); updateProcessController(window); window.mClient.asBinder().linkToDeath(()-> { synchronized (mGlobalLock) { mWindows.remove(inputToken); mWindowsByFocusToken.remove(focusToken); } }, 0); } catch (RemoteException e) { Loading Loading @@ -112,10 +107,8 @@ class EmbeddedWindowController { void remove(IWindow client) { for (int i = mWindows.size() - 1; i >= 0; i--) { EmbeddedWindow ew = mWindows.valueAt(i); if (ew.mClient.asBinder() == client.asBinder()) { if (mWindows.valueAt(i).mClient.asBinder() == client.asBinder()) { mWindows.removeAt(i).onRemoved(); mWindowsByFocusToken.remove(ew.getFocusGrantToken()); return; } } Loading @@ -123,10 +116,8 @@ class EmbeddedWindowController { void onWindowRemoved(WindowState host) { for (int i = mWindows.size() - 1; i >= 0; i--) { EmbeddedWindow ew = mWindows.valueAt(i); if (ew.mHostWindowState == host) { if (mWindows.valueAt(i).mHostWindowState == host) { mWindows.removeAt(i).onRemoved(); mWindowsByFocusToken.remove(ew.getFocusGrantToken()); } } } Loading @@ -135,10 +126,6 @@ class EmbeddedWindowController { return mWindows.get(inputToken); } EmbeddedWindow getByFocusToken(IBinder focusGrantToken) { return mWindowsByFocusToken.get(focusGrantToken); } void onActivityRemoved(ActivityRecord activityRecord) { for (int i = mWindows.size() - 1; i >= 0; i--) { final EmbeddedWindow window = mWindows.valueAt(i); Loading Loading @@ -170,8 +157,6 @@ class EmbeddedWindowController { // and this variable is mostly used for tracking that. boolean mIsOverlay = false; private IBinder mFocusGrantToken; /** * @param session calling session to check ownership of the window * @param clientToken client token used to clean up the map if the embedding process dies Loading @@ -186,7 +171,7 @@ class EmbeddedWindowController { */ EmbeddedWindow(Session session, WindowManagerService service, IWindow clientToken, WindowState hostWindowState, int ownerUid, int ownerPid, int windowType, int displayId, IBinder focusGrantToken) { int displayId) { mSession = session; mWmService = service; mClient = clientToken; Loading @@ -197,7 +182,6 @@ class EmbeddedWindowController { mOwnerPid = ownerPid; mWindowType = windowType; mDisplayId = displayId; mFocusGrantToken = focusGrantToken; } @Override Loading Loading @@ -258,17 +242,6 @@ class EmbeddedWindowController { return mIsOverlay; } IBinder getFocusGrantToken() { return mFocusGrantToken; } IBinder getInputChannelToken() { if (mInputChannel != null) { return mInputChannel.getToken(); } return null; } /** * System hosted overlays need the WM to invoke grantEmbeddedWindowFocus and * so we need to participate inside handlePointerDownOutsideFocus logic Loading @@ -282,7 +255,7 @@ class EmbeddedWindowController { private void handleTap(boolean grantFocus) { if (mInputChannel != null) { mWmService.grantEmbeddedWindowFocus(mSession, mFocusGrantToken, grantFocus); mWmService.grantEmbeddedWindowFocus(mSession, mInputChannel.getToken(), grantFocus); } } Loading services/core/java/com/android/server/wm/Session.java +2 −2 Original line number Diff line number Diff line Loading @@ -813,7 +813,7 @@ 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, IBinder focusGrantToken, InputChannel outInputChannel) { 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 Loading @@ -829,7 +829,7 @@ class Session extends IWindowSession.Stub implements IBinder.DeathRecipient { try { mService.grantInputChannel(this, mUid, mPid, displayId, surface, window, hostInputToken, flags, mCanAddInternalSystemWindow ? privateFlags : 0, mCanAddInternalSystemWindow ? type : 0, focusGrantToken, outInputChannel); mCanAddInternalSystemWindow ? type : 0, outInputChannel); } finally { Binder.restoreCallingIdentity(identity); } Loading Loading
core/java/android/view/IWindowSession.aidl +1 −1 Original line number Diff line number Diff line Loading @@ -298,7 +298,7 @@ interface IWindowSession { */ void grantInputChannel(int displayId, in SurfaceControl surface, in IWindow window, in IBinder hostInputToken, int flags, int privateFlags, int type, in IBinder focusGrantToken, out InputChannel outInputChannel); out InputChannel outInputChannel); /** * Update the flags on an input channel associated with a particular surface. Loading
core/java/android/view/SurfaceControlViewHost.java +1 −1 Original line number Diff line number Diff line Loading @@ -274,7 +274,7 @@ public class SurfaceControlViewHost { public @Nullable SurfacePackage getSurfacePackage() { if (mSurfaceControl != null && mAccessibilityEmbeddedConnection != null) { return new SurfacePackage(mSurfaceControl, mAccessibilityEmbeddedConnection, mWm.getFocusGrantToken(), mRemoteInterface); mViewRoot.getInputToken(), mRemoteInterface); } else { return null; } Loading
core/java/android/view/WindowlessWindowManager.java +3 −9 Original line number Diff line number Diff line Loading @@ -21,7 +21,6 @@ import android.content.res.Configuration; import android.graphics.PixelFormat; import android.graphics.Rect; import android.graphics.Region; import android.os.Binder; import android.os.IBinder; import android.os.RemoteCallback; import android.os.RemoteException; Loading Loading @@ -76,7 +75,6 @@ public class WindowlessWindowManager implements IWindowSession { private final Configuration mConfiguration; private final IWindowSession mRealWm; private final IBinder mHostInputToken; private final IBinder mFocusGrantToken = new Binder(); private int mForceHeight = -1; private int mForceWidth = -1; Loading @@ -93,10 +91,6 @@ public class WindowlessWindowManager implements IWindowSession { mConfiguration.setTo(configuration); } IBinder getFocusGrantToken() { return mFocusGrantToken; } /** * Utility API. */ Loading Loading @@ -159,10 +153,10 @@ public class WindowlessWindowManager implements IWindowSession { mRealWm.grantInputChannel(displayId, new SurfaceControl(sc, "WindowlessWindowManager.addToDisplay"), window, mHostInputToken, attrs.flags, attrs.privateFlags, attrs.type, mFocusGrantToken, outInputChannel); outInputChannel); } else { mRealWm.grantInputChannel(displayId, sc, window, mHostInputToken, attrs.flags, attrs.privateFlags, attrs.type, mFocusGrantToken, outInputChannel); attrs.privateFlags, attrs.type, outInputChannel); } } catch (RemoteException e) { Log.e(TAG, "Failed to grant input to surface: ", e); Loading Loading @@ -475,7 +469,7 @@ public class WindowlessWindowManager implements IWindowSession { @Override public void grantInputChannel(int displayId, SurfaceControl surface, IWindow window, IBinder hostInputToken, int flags, int privateFlags, int type, IBinder focusGrantToken, IBinder hostInputToken, int flags, int privateFlags, int type, InputChannel outInputChannel) { } Loading
services/core/java/com/android/server/wm/EmbeddedWindowController.java +4 −31 Original line number Diff line number Diff line Loading @@ -41,8 +41,6 @@ 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 final Object mGlobalLock; private final ActivityTaskManagerService mAtmService; Loading @@ -61,13 +59,10 @@ class EmbeddedWindowController { void add(IBinder inputToken, EmbeddedWindow window) { try { mWindows.put(inputToken, window); final IBinder focusToken = window.getFocusGrantToken(); mWindowsByFocusToken.put(focusToken, window); updateProcessController(window); window.mClient.asBinder().linkToDeath(()-> { synchronized (mGlobalLock) { mWindows.remove(inputToken); mWindowsByFocusToken.remove(focusToken); } }, 0); } catch (RemoteException e) { Loading Loading @@ -112,10 +107,8 @@ class EmbeddedWindowController { void remove(IWindow client) { for (int i = mWindows.size() - 1; i >= 0; i--) { EmbeddedWindow ew = mWindows.valueAt(i); if (ew.mClient.asBinder() == client.asBinder()) { if (mWindows.valueAt(i).mClient.asBinder() == client.asBinder()) { mWindows.removeAt(i).onRemoved(); mWindowsByFocusToken.remove(ew.getFocusGrantToken()); return; } } Loading @@ -123,10 +116,8 @@ class EmbeddedWindowController { void onWindowRemoved(WindowState host) { for (int i = mWindows.size() - 1; i >= 0; i--) { EmbeddedWindow ew = mWindows.valueAt(i); if (ew.mHostWindowState == host) { if (mWindows.valueAt(i).mHostWindowState == host) { mWindows.removeAt(i).onRemoved(); mWindowsByFocusToken.remove(ew.getFocusGrantToken()); } } } Loading @@ -135,10 +126,6 @@ class EmbeddedWindowController { return mWindows.get(inputToken); } EmbeddedWindow getByFocusToken(IBinder focusGrantToken) { return mWindowsByFocusToken.get(focusGrantToken); } void onActivityRemoved(ActivityRecord activityRecord) { for (int i = mWindows.size() - 1; i >= 0; i--) { final EmbeddedWindow window = mWindows.valueAt(i); Loading Loading @@ -170,8 +157,6 @@ class EmbeddedWindowController { // and this variable is mostly used for tracking that. boolean mIsOverlay = false; private IBinder mFocusGrantToken; /** * @param session calling session to check ownership of the window * @param clientToken client token used to clean up the map if the embedding process dies Loading @@ -186,7 +171,7 @@ class EmbeddedWindowController { */ EmbeddedWindow(Session session, WindowManagerService service, IWindow clientToken, WindowState hostWindowState, int ownerUid, int ownerPid, int windowType, int displayId, IBinder focusGrantToken) { int displayId) { mSession = session; mWmService = service; mClient = clientToken; Loading @@ -197,7 +182,6 @@ class EmbeddedWindowController { mOwnerPid = ownerPid; mWindowType = windowType; mDisplayId = displayId; mFocusGrantToken = focusGrantToken; } @Override Loading Loading @@ -258,17 +242,6 @@ class EmbeddedWindowController { return mIsOverlay; } IBinder getFocusGrantToken() { return mFocusGrantToken; } IBinder getInputChannelToken() { if (mInputChannel != null) { return mInputChannel.getToken(); } return null; } /** * System hosted overlays need the WM to invoke grantEmbeddedWindowFocus and * so we need to participate inside handlePointerDownOutsideFocus logic Loading @@ -282,7 +255,7 @@ class EmbeddedWindowController { private void handleTap(boolean grantFocus) { if (mInputChannel != null) { mWmService.grantEmbeddedWindowFocus(mSession, mFocusGrantToken, grantFocus); mWmService.grantEmbeddedWindowFocus(mSession, mInputChannel.getToken(), grantFocus); } } Loading
services/core/java/com/android/server/wm/Session.java +2 −2 Original line number Diff line number Diff line Loading @@ -813,7 +813,7 @@ 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, IBinder focusGrantToken, InputChannel outInputChannel) { 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 Loading @@ -829,7 +829,7 @@ class Session extends IWindowSession.Stub implements IBinder.DeathRecipient { try { mService.grantInputChannel(this, mUid, mPid, displayId, surface, window, hostInputToken, flags, mCanAddInternalSystemWindow ? privateFlags : 0, mCanAddInternalSystemWindow ? type : 0, focusGrantToken, outInputChannel); mCanAddInternalSystemWindow ? type : 0, outInputChannel); } finally { Binder.restoreCallingIdentity(identity); } Loading