summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--core/java/android/app/servertransaction/WindowTokenClientController.java15
-rw-r--r--core/java/android/view/IWindowManager.aidl16
-rw-r--r--core/java/android/window/WindowContextController.java2
-rw-r--r--core/java/android/window/WindowTokenClient.java2
-rw-r--r--core/tests/coretests/src/android/app/servertransaction/WindowTokenClientControllerTest.java51
-rw-r--r--services/core/java/com/android/server/wm/WindowContextListenerController.java4
-rw-r--r--services/core/java/com/android/server/wm/WindowManagerService.java93
-rw-r--r--services/tests/wmtests/src/com/android/server/wm/InputMethodDialogWindowContextTest.java6
-rw-r--r--services/tests/wmtests/src/com/android/server/wm/WindowManagerServiceTests.java15
9 files changed, 117 insertions, 87 deletions
diff --git a/core/java/android/app/servertransaction/WindowTokenClientController.java b/core/java/android/app/servertransaction/WindowTokenClientController.java
index 5d123a043835..3060ab8d7cb2 100644
--- a/core/java/android/app/servertransaction/WindowTokenClientController.java
+++ b/core/java/android/app/servertransaction/WindowTokenClientController.java
@@ -21,6 +21,8 @@ import static android.view.WindowManagerGlobal.getWindowManagerService;
import android.annotation.NonNull;
import android.annotation.Nullable;
+import android.app.ActivityThread;
+import android.app.IApplicationThread;
import android.content.Context;
import android.content.res.Configuration;
import android.os.Bundle;
@@ -46,6 +48,8 @@ public class WindowTokenClientController {
private static WindowTokenClientController sController;
private final Object mLock = new Object();
+ private final IApplicationThread mAppThread = ActivityThread.currentActivityThread()
+ .getApplicationThread();
/** Mapping from a client defined token to the {@link WindowTokenClient} it represents. */
@GuardedBy("mLock")
@@ -84,8 +88,8 @@ public class WindowTokenClientController {
@WindowType int type, int displayId, @Nullable Bundle options) {
final Configuration configuration;
try {
- configuration = getWindowManagerService()
- .attachWindowContextToDisplayArea(client, type, displayId, options);
+ configuration = getWindowManagerService().attachWindowContextToDisplayArea(
+ mAppThread, client, type, displayId, options);
} catch (RemoteException e) {
throw e.rethrowFromSystemServer();
}
@@ -111,7 +115,7 @@ public class WindowTokenClientController {
}
final Configuration configuration;
try {
- configuration = wms.attachToDisplayContent(client, displayId);
+ configuration = wms.attachWindowContextToDisplayContent(mAppThread, client, displayId);
} catch (RemoteException e) {
throw e.rethrowFromSystemServer();
}
@@ -131,7 +135,8 @@ public class WindowTokenClientController {
public void attachToWindowToken(@NonNull WindowTokenClient client,
@NonNull IBinder windowToken) {
try {
- getWindowManagerService().attachWindowContextToWindowToken(client, windowToken);
+ getWindowManagerService().attachWindowContextToWindowToken(
+ mAppThread, client, windowToken);
} catch (RemoteException e) {
throw e.rethrowFromSystemServer();
}
@@ -149,7 +154,7 @@ public class WindowTokenClientController {
}
}
try {
- getWindowManagerService().detachWindowContextFromWindowContainer(client);
+ getWindowManagerService().detachWindowContext(client);
} catch (RemoteException e) {
throw e.rethrowFromSystemServer();
}
diff --git a/core/java/android/view/IWindowManager.aidl b/core/java/android/view/IWindowManager.aidl
index bbd8255f4978..c1474ebad227 100644
--- a/core/java/android/view/IWindowManager.aidl
+++ b/core/java/android/view/IWindowManager.aidl
@@ -21,6 +21,7 @@ import com.android.internal.policy.IKeyguardDismissCallback;
import com.android.internal.policy.IKeyguardLockedStateListener;
import com.android.internal.policy.IShortcutService;
+import android.app.IApplicationThread;
import android.app.IAssistDataReceiver;
import android.content.ComponentName;
import android.content.res.CompatibilityInfo;
@@ -850,6 +851,7 @@ interface IWindowManager
* system server. {@link #attachWindowContextToWindowToken(IBinder, IBinder)} could be used in
* this case to attach the WindowContext to the WindowToken.</p>
*
+ * @param appThread the process that the window context is on.
* @param clientToken {@link android.window.WindowContext#getWindowContextToken()
* the WindowContext's token}
* @param type Window type of the window context
@@ -859,8 +861,8 @@ interface IWindowManager
* @return the DisplayArea's {@link android.app.res.Configuration} if the WindowContext is
* attached to the DisplayArea successfully. {@code null}, otherwise.
*/
- Configuration attachWindowContextToDisplayArea(IBinder clientToken, int type, int displayId,
- in Bundle options);
+ @nullable Configuration attachWindowContextToDisplayArea(in IApplicationThread appThread,
+ IBinder clientToken, int type, int displayId, in @nullable Bundle options);
/**
* Attaches a {@link android.window.WindowContext} to a {@code WindowToken}.
@@ -872,6 +874,7 @@ interface IWindowManager
* {@link android.window.WindowTokenClient#attachContext(Context)}
* </p>
*
+ * @param appThread the process that the window context is on.
* @param clientToken {@link android.window.WindowContext#getWindowContextToken()
* the WindowContext's token}
* @param token the WindowToken to attach
@@ -881,7 +884,8 @@ interface IWindowManager
*
* @see #attachWindowContextToDisplayArea(IBinder, int, int, Bundle)
*/
- void attachWindowContextToWindowToken(IBinder clientToken, IBinder token);
+ void attachWindowContextToWindowToken(in IApplicationThread appThread, IBinder clientToken,
+ IBinder token);
/**
* Attaches a {@code clientToken} to associate with DisplayContent.
@@ -890,6 +894,7 @@ interface IWindowManager
* {@link android.window.WindowTokenClient#attachContext(Context)}
* </p>
*
+ * @param appThread the process that the window context is on.
* @param clientToken {@link android.window.WindowContext#getWindowContextToken()
* the WindowContext's token}
* @param displayId The display associated with the window context
@@ -898,7 +903,8 @@ interface IWindowManager
* attached to the DisplayContent successfully. {@code null}, otherwise.
* @throws android.view.WindowManager.InvalidDisplayException if the display ID is invalid
*/
- Configuration attachToDisplayContent(IBinder clientToken, int displayId);
+ @nullable Configuration attachWindowContextToDisplayContent(in IApplicationThread appThread,
+ IBinder clientToken, int displayId);
/**
* Detaches {@link android.window.WindowContext} from the window manager node it's currently
@@ -906,7 +912,7 @@ interface IWindowManager
*
* @param clientToken the window context's token
*/
- void detachWindowContextFromWindowContainer(IBinder clientToken);
+ void detachWindowContext(IBinder clientToken);
/**
* Registers a listener, which is to be called whenever cross-window blur is enabled/disabled.
diff --git a/core/java/android/window/WindowContextController.java b/core/java/android/window/WindowContextController.java
index eb270e2fb2f0..e78056e93568 100644
--- a/core/java/android/window/WindowContextController.java
+++ b/core/java/android/window/WindowContextController.java
@@ -135,7 +135,7 @@ public class WindowContextController {
* {@link #attachToDisplayArea(int, int, Bundle)}.
*
* @see WindowProviderService#attachToWindowToken(IBinder))
- * @see IWindowManager#attachWindowContextToWindowToken(IBinder, IBinder)
+ * @see IWindowManager#attachWindowContextToWindowToken
*/
public void attachToWindowToken(IBinder windowToken) {
if (mAttachedToDisplayArea != AttachStatus.STATUS_ATTACHED) {
diff --git a/core/java/android/window/WindowTokenClient.java b/core/java/android/window/WindowTokenClient.java
index 47d3df870216..c7af25bf943f 100644
--- a/core/java/android/window/WindowTokenClient.java
+++ b/core/java/android/window/WindowTokenClient.java
@@ -49,7 +49,7 @@ import java.lang.ref.WeakReference;
* {@link Context#getWindowContextToken() the token of non-Activity UI Contexts}.
*
* @see WindowContext
- * @see android.view.IWindowManager#attachWindowContextToDisplayArea(IBinder, int, int, Bundle)
+ * @see android.view.IWindowManager#attachWindowContextToDisplayArea
*
* @hide
*/
diff --git a/core/tests/coretests/src/android/app/servertransaction/WindowTokenClientControllerTest.java b/core/tests/coretests/src/android/app/servertransaction/WindowTokenClientControllerTest.java
index 3b2fe583f605..59a55bbb5c5a 100644
--- a/core/tests/coretests/src/android/app/servertransaction/WindowTokenClientControllerTest.java
+++ b/core/tests/coretests/src/android/app/servertransaction/WindowTokenClientControllerTest.java
@@ -29,6 +29,7 @@ import static org.mockito.Mockito.verify;
import static org.testng.Assert.assertFalse;
import static org.testng.Assert.assertTrue;
+import android.app.ActivityThread;
import android.content.res.Configuration;
import android.os.IBinder;
import android.os.RemoteException;
@@ -87,16 +88,17 @@ public class WindowTokenClientControllerTest {
@Test
public void testAttachToDisplayArea() throws RemoteException {
doReturn(null).when(mWindowManagerService).attachWindowContextToDisplayArea(
- any(), anyInt(), anyInt(), any());
+ any(), any(), anyInt(), anyInt(), any());
assertFalse(mController.attachToDisplayArea(mWindowTokenClient, TYPE_APPLICATION_OVERLAY,
DEFAULT_DISPLAY, null /* options */));
- verify(mWindowManagerService).attachWindowContextToDisplayArea(mWindowTokenClient,
+ verify(mWindowManagerService).attachWindowContextToDisplayArea(
+ ActivityThread.currentActivityThread().getApplicationThread(), mWindowTokenClient,
TYPE_APPLICATION_OVERLAY, DEFAULT_DISPLAY, null /* options */);
verify(mWindowTokenClient, never()).onConfigurationChanged(any(), anyInt(), anyBoolean());
doReturn(mConfiguration).when(mWindowManagerService).attachWindowContextToDisplayArea(
- any(), anyInt(), anyInt(), any());
+ any(), any(), anyInt(), anyInt(), any());
assertTrue(mController.attachToDisplayArea(mWindowTokenClient, TYPE_APPLICATION_OVERLAY,
DEFAULT_DISPLAY, null /* options */));
@@ -108,36 +110,38 @@ public class WindowTokenClientControllerTest {
public void testAttachToDisplayArea_detachIfNeeded() throws RemoteException {
mController.detachIfNeeded(mWindowTokenClient);
- verify(mWindowManagerService, never()).detachWindowContextFromWindowContainer(any());
+ verify(mWindowManagerService, never()).detachWindowContext(any());
doReturn(null).when(mWindowManagerService).attachWindowContextToDisplayArea(
- any(), anyInt(), anyInt(), any());
+ any(), any(), anyInt(), anyInt(), any());
mController.attachToDisplayArea(mWindowTokenClient, TYPE_APPLICATION_OVERLAY,
DEFAULT_DISPLAY, null /* options */);
mController.detachIfNeeded(mWindowTokenClient);
- verify(mWindowManagerService, never()).detachWindowContextFromWindowContainer(any());
+ verify(mWindowManagerService, never()).detachWindowContext(any());
doReturn(mConfiguration).when(mWindowManagerService).attachWindowContextToDisplayArea(
- any(), anyInt(), anyInt(), any());
+ any(), any(), anyInt(), anyInt(), any());
mController.attachToDisplayArea(mWindowTokenClient, TYPE_APPLICATION_OVERLAY,
DEFAULT_DISPLAY, null /* options */);
mController.detachIfNeeded(mWindowTokenClient);
- verify(mWindowManagerService).detachWindowContextFromWindowContainer(any());
+ verify(mWindowManagerService).detachWindowContext(any());
}
@Test
public void testAttachToDisplayContent() throws RemoteException {
- doReturn(null).when(mWindowManagerService).attachToDisplayContent(
- any(), anyInt());
+ doReturn(null).when(mWindowManagerService).attachWindowContextToDisplayContent(
+ any(), any(), anyInt());
assertFalse(mController.attachToDisplayContent(mWindowTokenClient, DEFAULT_DISPLAY));
- verify(mWindowManagerService).attachToDisplayContent(mWindowTokenClient, DEFAULT_DISPLAY);
+ verify(mWindowManagerService).attachWindowContextToDisplayContent(
+ ActivityThread.currentActivityThread().getApplicationThread(), mWindowTokenClient,
+ DEFAULT_DISPLAY);
verify(mWindowTokenClient, never()).onConfigurationChanged(any(), anyInt(), anyBoolean());
- doReturn(mConfiguration).when(mWindowManagerService).attachToDisplayContent(
- any(), anyInt());
+ doReturn(mConfiguration).when(mWindowManagerService).attachWindowContextToDisplayContent(
+ any(), any(), anyInt());
assertTrue(mController.attachToDisplayContent(mWindowTokenClient, DEFAULT_DISPLAY));
verify(mWindowTokenClient).onConfigurationChanged(mConfiguration, DEFAULT_DISPLAY,
@@ -148,28 +152,29 @@ public class WindowTokenClientControllerTest {
public void testAttachToDisplayContent_detachIfNeeded() throws RemoteException {
mController.detachIfNeeded(mWindowTokenClient);
- verify(mWindowManagerService, never()).detachWindowContextFromWindowContainer(any());
+ verify(mWindowManagerService, never()).detachWindowContext(any());
- doReturn(null).when(mWindowManagerService).attachToDisplayContent(
- any(), anyInt());
+ doReturn(null).when(mWindowManagerService).attachWindowContextToDisplayContent(
+ any(), any(), anyInt());
mController.attachToDisplayContent(mWindowTokenClient, DEFAULT_DISPLAY);
mController.detachIfNeeded(mWindowTokenClient);
- verify(mWindowManagerService, never()).detachWindowContextFromWindowContainer(any());
+ verify(mWindowManagerService, never()).detachWindowContext(any());
- doReturn(mConfiguration).when(mWindowManagerService).attachToDisplayContent(
- any(), anyInt());
+ doReturn(mConfiguration).when(mWindowManagerService).attachWindowContextToDisplayContent(
+ any(), any(), anyInt());
mController.attachToDisplayContent(mWindowTokenClient, DEFAULT_DISPLAY);
mController.detachIfNeeded(mWindowTokenClient);
- verify(mWindowManagerService).detachWindowContextFromWindowContainer(any());
+ verify(mWindowManagerService).detachWindowContext(any());
}
@Test
public void testAttachToWindowToken() throws RemoteException {
mController.attachToWindowToken(mWindowTokenClient, mWindowToken);
- verify(mWindowManagerService).attachWindowContextToWindowToken(mWindowTokenClient,
+ verify(mWindowManagerService).attachWindowContextToWindowToken(
+ ActivityThread.currentActivityThread().getApplicationThread(), mWindowTokenClient,
mWindowToken);
}
@@ -177,12 +182,12 @@ public class WindowTokenClientControllerTest {
public void testAttachToWindowToken_detachIfNeeded() throws RemoteException {
mController.detachIfNeeded(mWindowTokenClient);
- verify(mWindowManagerService, never()).detachWindowContextFromWindowContainer(any());
+ verify(mWindowManagerService, never()).detachWindowContext(any());
mController.attachToWindowToken(mWindowTokenClient, mWindowToken);
mController.detachIfNeeded(mWindowTokenClient);
- verify(mWindowManagerService).detachWindowContextFromWindowContainer(any());
+ verify(mWindowManagerService).detachWindowContext(any());
}
@Test
diff --git a/services/core/java/com/android/server/wm/WindowContextListenerController.java b/services/core/java/com/android/server/wm/WindowContextListenerController.java
index 43dc9c8ff5d6..4025cbf77756 100644
--- a/services/core/java/com/android/server/wm/WindowContextListenerController.java
+++ b/services/core/java/com/android/server/wm/WindowContextListenerController.java
@@ -47,7 +47,7 @@ import java.util.Objects;
*
* <ul>
* <li>When a {@link WindowContext} is created, it registers the listener via
- * {@link WindowManagerService#attachWindowContextToDisplayArea(IBinder, int, int, Bundle)}
+ * {@link WindowManagerService#attachWindowContextToDisplayArea
* automatically.</li>
* <li>When the {@link WindowContext} adds the first window to the screen via
* {@link android.view.WindowManager#addView(View, android.view.ViewGroup.LayoutParams)},
@@ -55,7 +55,7 @@ import java.util.Objects;
* to corresponding {@link WindowToken} via this controller.</li>
* <li>When the {@link WindowContext} is GCed, it unregisters the previously
* registered listener via
- * {@link WindowManagerService#detachWindowContextFromWindowContainer(IBinder)}.
+ * {@link WindowManagerService#detachWindowContext(IBinder)}.
* {@link WindowManagerService} is also responsible for removing the
* {@link WindowContext} created {@link WindowToken}.</li>
* </ul>
diff --git a/services/core/java/com/android/server/wm/WindowManagerService.java b/services/core/java/com/android/server/wm/WindowManagerService.java
index db92191e542a..15b15a85a689 100644
--- a/services/core/java/com/android/server/wm/WindowManagerService.java
+++ b/services/core/java/com/android/server/wm/WindowManagerService.java
@@ -167,6 +167,7 @@ import android.app.ActivityManagerInternal;
import android.app.ActivityThread;
import android.app.AppOpsManager;
import android.app.IActivityManager;
+import android.app.IApplicationThread;
import android.app.IAssistDataReceiver;
import android.app.WindowConfiguration;
import android.content.BroadcastReceiver;
@@ -2734,12 +2735,13 @@ public class WindowManagerService extends IWindowManager.Stub
}
}
+ @Nullable
@Override
- public Configuration attachWindowContextToDisplayArea(IBinder clientToken, int
- type, int displayId, Bundle options) {
- if (clientToken == null) {
- throw new IllegalArgumentException("clientToken must not be null!");
- }
+ public Configuration attachWindowContextToDisplayArea(@NonNull IApplicationThread appThread,
+ @NonNull IBinder clientToken, @LayoutParams.WindowType int type, int displayId,
+ @Nullable Bundle options) {
+ Objects.requireNonNull(appThread);
+ Objects.requireNonNull(clientToken);
final boolean callerCanManageAppTokens = checkCallingPermission(MANAGE_APP_TOKENS,
"attachWindowContextToDisplayArea", false /* printLog */);
final int callingUid = Binder.getCallingUid();
@@ -2765,8 +2767,48 @@ public class WindowManagerService extends IWindowManager.Stub
}
}
+ @Nullable
@Override
- public void attachWindowContextToWindowToken(IBinder clientToken, IBinder token) {
+ public Configuration attachWindowContextToDisplayContent(@NonNull IApplicationThread appThread,
+ @NonNull IBinder clientToken, int displayId) {
+ Objects.requireNonNull(appThread);
+ Objects.requireNonNull(clientToken);
+ final int callingUid = Binder.getCallingUid();
+ final long origId = Binder.clearCallingIdentity();
+ try {
+ synchronized (mGlobalLock) {
+ // We use "getDisplayContent" instead of "getDisplayContentOrCreate" because
+ // this method may be called in DisplayPolicy's constructor and may cause
+ // infinite loop. In this scenario, we early return here and switch to do the
+ // registration in DisplayContent#onParentChanged at DisplayContent initialization.
+ final DisplayContent dc = mRoot.getDisplayContent(displayId);
+ if (dc == null) {
+ if (Binder.getCallingPid() != MY_PID) {
+ throw new WindowManager.InvalidDisplayException(
+ "attachWindowContextToDisplayContent: trying to attach to a"
+ + " non-existing display:" + displayId);
+ }
+ // Early return if this method is invoked from system process.
+ // See above comments for more detail.
+ return null;
+ }
+
+ mWindowContextListenerController.registerWindowContainerListener(clientToken, dc,
+ callingUid, INVALID_WINDOW_TYPE, null /* options */,
+ false /* shouDispatchConfigWhenRegistering */);
+ return dc.getConfiguration();
+ }
+ } finally {
+ Binder.restoreCallingIdentity(origId);
+ }
+ }
+
+ @Override
+ public void attachWindowContextToWindowToken(@NonNull IApplicationThread appThread,
+ @NonNull IBinder clientToken, @NonNull IBinder token) {
+ Objects.requireNonNull(appThread);
+ Objects.requireNonNull(clientToken);
+ Objects.requireNonNull(token);
final boolean callerCanManageAppTokens = checkCallingPermission(MANAGE_APP_TOKENS,
"attachWindowContextToWindowToken", false /* printLog */);
final int callingUid = Binder.getCallingUid();
@@ -2802,9 +2844,10 @@ public class WindowManagerService extends IWindowManager.Stub
}
@Override
- public void detachWindowContextFromWindowContainer(IBinder clientToken) {
+ public void detachWindowContext(@NonNull IBinder clientToken) {
+ Objects.requireNonNull(clientToken);
final boolean callerCanManageAppTokens = checkCallingPermission(MANAGE_APP_TOKENS,
- "detachWindowContextFromWindowContainer", false /* printLog */);
+ "detachWindowContext", false /* printLog */);
final int callingUid = Binder.getCallingUid();
final long origId = Binder.clearCallingIdentity();
try {
@@ -2828,40 +2871,6 @@ public class WindowManagerService extends IWindowManager.Stub
}
}
- @Override
- public Configuration attachToDisplayContent(IBinder clientToken, int displayId) {
- if (clientToken == null) {
- throw new IllegalArgumentException("clientToken must not be null!");
- }
- final int callingUid = Binder.getCallingUid();
- final long origId = Binder.clearCallingIdentity();
- try {
- synchronized (mGlobalLock) {
- // We use "getDisplayContent" instead of "getDisplayContentOrCreate" because
- // this method may be called in DisplayPolicy's constructor and may cause
- // infinite loop. In this scenario, we early return here and switch to do the
- // registration in DisplayContent#onParentChanged at DisplayContent initialization.
- final DisplayContent dc = mRoot.getDisplayContent(displayId);
- if (dc == null) {
- if (Binder.getCallingPid() != MY_PID) {
- throw new WindowManager.InvalidDisplayException("attachToDisplayContent: "
- + "trying to attach to a non-existing display:" + displayId);
- }
- // Early return if this method is invoked from system process.
- // See above comments for more detail.
- return null;
- }
-
- mWindowContextListenerController.registerWindowContainerListener(clientToken, dc,
- callingUid, INVALID_WINDOW_TYPE, null /* options */,
- false /* shouDispatchConfigWhenRegistering */);
- return dc.getConfiguration();
- }
- } finally {
- Binder.restoreCallingIdentity(origId);
- }
- }
-
/** Returns {@code true} if this binder is a registered window token. */
@Override
public boolean isWindowToken(IBinder binder) {
diff --git a/services/tests/wmtests/src/com/android/server/wm/InputMethodDialogWindowContextTest.java b/services/tests/wmtests/src/com/android/server/wm/InputMethodDialogWindowContextTest.java
index 3090590938c0..586bb0f08c1f 100644
--- a/services/tests/wmtests/src/com/android/server/wm/InputMethodDialogWindowContextTest.java
+++ b/services/tests/wmtests/src/com/android/server/wm/InputMethodDialogWindowContextTest.java
@@ -91,14 +91,14 @@ public class InputMethodDialogWindowContextTest extends WindowTestsBase {
spyOn(mIWindowManager);
doAnswer(invocation -> {
Object[] args = invocation.getArguments();
- IBinder clientToken = (IBinder) args[0];
- int displayId = (int) args[2];
+ IBinder clientToken = (IBinder) args[1];
+ int displayId = (int) args[3];
DisplayContent dc = mWm.mRoot.getDisplayContent(displayId);
mWm.mWindowContextListenerController.registerWindowContainerListener(clientToken,
dc.getImeContainer(), 1000 /* ownerUid */, TYPE_INPUT_METHOD_DIALOG,
null /* options */);
return dc.getImeContainer().getConfiguration();
- }).when(mIWindowManager).attachWindowContextToDisplayArea(any(),
+ }).when(mIWindowManager).attachWindowContextToDisplayArea(any(), any(),
eq(TYPE_INPUT_METHOD_DIALOG), anyInt(), any());
mDisplayManagerGlobal = DisplayManagerGlobal.getInstance();
spyOn(mDisplayManagerGlobal);
diff --git a/services/tests/wmtests/src/com/android/server/wm/WindowManagerServiceTests.java b/services/tests/wmtests/src/com/android/server/wm/WindowManagerServiceTests.java
index 45331f76fa4c..1fa4134eacfe 100644
--- a/services/tests/wmtests/src/com/android/server/wm/WindowManagerServiceTests.java
+++ b/services/tests/wmtests/src/com/android/server/wm/WindowManagerServiceTests.java
@@ -68,6 +68,8 @@ import static org.mockito.Mockito.times;
import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.when;
+import android.app.ActivityThread;
+import android.app.IApplicationThread;
import android.content.pm.ActivityInfo;
import android.graphics.Point;
import android.graphics.Rect;
@@ -119,6 +121,9 @@ import org.mockito.ArgumentCaptor;
@RunWith(WindowTestRunner.class)
public class WindowManagerServiceTests extends WindowTestsBase {
+ private final IApplicationThread mAppThread = ActivityThread.currentActivityThread()
+ .getApplicationThread();
+
@Rule
public AdoptShellPermissionsRule mAdoptShellPermissionsRule = new AdoptShellPermissionsRule(
InstrumentationRegistry.getInstrumentation().getUiAutomation(),
@@ -428,7 +433,7 @@ public class WindowManagerServiceTests extends WindowTestsBase {
public void testAttachWindowContextToWindowToken_InvalidToken_EarlyReturn() {
spyOn(mWm.mWindowContextListenerController);
- mWm.attachWindowContextToWindowToken(new Binder(), new Binder());
+ mWm.attachWindowContextToWindowToken(mAppThread, new Binder(), new Binder());
verify(mWm.mWindowContextListenerController, never()).getWindowType(any());
}
@@ -441,7 +446,7 @@ public class WindowManagerServiceTests extends WindowTestsBase {
doReturn(INVALID_WINDOW_TYPE).when(mWm.mWindowContextListenerController)
.getWindowType(any());
- mWm.attachWindowContextToWindowToken(new Binder(), windowToken.token);
+ mWm.attachWindowContextToWindowToken(mAppThread, new Binder(), windowToken.token);
}
@Test(expected = IllegalArgumentException.class)
@@ -452,7 +457,7 @@ public class WindowManagerServiceTests extends WindowTestsBase {
doReturn(TYPE_APPLICATION).when(mWm.mWindowContextListenerController)
.getWindowType(any());
- mWm.attachWindowContextToWindowToken(new Binder(), windowToken.token);
+ mWm.attachWindowContextToWindowToken(mAppThread, new Binder(), windowToken.token);
}
@Test
@@ -465,7 +470,7 @@ public class WindowManagerServiceTests extends WindowTestsBase {
doReturn(false).when(mWm.mWindowContextListenerController)
.assertCallerCanModifyListener(any(), anyBoolean(), anyInt());
- mWm.attachWindowContextToWindowToken(new Binder(), windowToken.token);
+ mWm.attachWindowContextToWindowToken(mAppThread, new Binder(), windowToken.token);
verify(mWm.mWindowContextListenerController, never()).registerWindowContainerListener(
any(), any(), anyInt(), anyInt(), any());
@@ -482,7 +487,7 @@ public class WindowManagerServiceTests extends WindowTestsBase {
.assertCallerCanModifyListener(any(), anyBoolean(), anyInt());
final IBinder clientToken = new Binder();
- mWm.attachWindowContextToWindowToken(clientToken, windowToken.token);
+ mWm.attachWindowContextToWindowToken(mAppThread, clientToken, windowToken.token);
verify(mWm.mWindowContextListenerController).registerWindowContainerListener(
eq(clientToken), eq(windowToken), anyInt(), eq(TYPE_INPUT_METHOD),