summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--core/java/android/view/WindowManagerGlobal.java12
-rw-r--r--core/java/android/window/WindowContextController.java14
-rw-r--r--core/java/android/window/WindowTokenClientController.java11
-rw-r--r--core/tests/coretests/src/android/window/WindowContextControllerTest.java14
-rw-r--r--core/tests/coretests/src/android/window/WindowTokenClientControllerTest.java18
5 files changed, 30 insertions, 39 deletions
diff --git a/core/java/android/view/WindowManagerGlobal.java b/core/java/android/view/WindowManagerGlobal.java
index 6aa85062562c..d20d95d50d61 100644
--- a/core/java/android/view/WindowManagerGlobal.java
+++ b/core/java/android/view/WindowManagerGlobal.java
@@ -34,7 +34,6 @@ import android.util.ArraySet;
import android.util.Log;
import android.view.inputmethod.InputMethodManager;
-import com.android.internal.annotations.VisibleForTesting;
import com.android.internal.util.FastPrintWriter;
import java.io.FileDescriptor;
@@ -165,6 +164,7 @@ public final class WindowManagerGlobal {
}
}
+ @Nullable
@UnsupportedAppUsage
public static IWindowManager getWindowManagerService() {
synchronized (WindowManagerGlobal.class) {
@@ -172,6 +172,7 @@ public final class WindowManagerGlobal {
sWindowManagerService = IWindowManager.Stub.asInterface(
ServiceManager.getService("window"));
try {
+ // Can be null if this is called before WindowManagerService is initialized.
if (sWindowManagerService != null) {
ValueAnimator.setDurationScale(
sWindowManagerService.getCurrentAnimatorScale());
@@ -185,15 +186,6 @@ public final class WindowManagerGlobal {
}
}
- /** Overrides the {@link #getWindowManagerService()} for test only. */
- @VisibleForTesting
- public static void overrideWindowManagerServiceForTesting(
- @NonNull IWindowManager windowManager) {
- synchronized (WindowManagerGlobal.class) {
- sWindowManagerService = windowManager;
- }
- }
-
@UnsupportedAppUsage
public static IWindowSession getWindowSession() {
synchronized (WindowManagerGlobal.class) {
diff --git a/core/java/android/window/WindowContextController.java b/core/java/android/window/WindowContextController.java
index 99e63ec7fe02..36eef5375391 100644
--- a/core/java/android/window/WindowContextController.java
+++ b/core/java/android/window/WindowContextController.java
@@ -86,6 +86,7 @@ public class WindowContextController {
* @param token The token used to attach to a window manager node. It is usually from
* {@link Context#getWindowContextToken()}.
*/
+ @VisibleForTesting
public WindowContextController(@NonNull WindowTokenClient token) {
mToken = token;
}
@@ -104,7 +105,7 @@ public class WindowContextController {
throw new IllegalStateException("A Window Context can be only attached to "
+ "a DisplayArea once.");
}
- mAttachedToDisplayArea = WindowTokenClientController.getInstance().attachToDisplayArea(
+ mAttachedToDisplayArea = getWindowTokenClientController().attachToDisplayArea(
mToken, type, displayId, options)
? AttachStatus.STATUS_ATTACHED : AttachStatus.STATUS_FAILED;
if (mAttachedToDisplayArea == AttachStatus.STATUS_FAILED) {
@@ -141,17 +142,24 @@ public class WindowContextController {
throw new IllegalStateException("The Window Context should have been attached"
+ " to a DisplayArea. AttachToDisplayArea:" + mAttachedToDisplayArea);
}
- WindowTokenClientController.getInstance().attachToWindowToken(mToken, windowToken);
+ getWindowTokenClientController().attachToWindowToken(mToken, windowToken);
}
/** Detaches the window context from the node it's currently associated with. */
public void detachIfNeeded() {
if (mAttachedToDisplayArea == AttachStatus.STATUS_ATTACHED) {
- WindowTokenClientController.getInstance().detachIfNeeded(mToken);
+ getWindowTokenClientController().detachIfNeeded(mToken);
mAttachedToDisplayArea = AttachStatus.STATUS_DETACHED;
if (DEBUG_ATTACH) {
Log.d(TAG, "Detach Window Context.");
}
}
}
+
+ /** Gets the {@link WindowTokenClientController}. */
+ @VisibleForTesting
+ @NonNull
+ public WindowTokenClientController getWindowTokenClientController() {
+ return WindowTokenClientController.getInstance();
+ }
}
diff --git a/core/java/android/window/WindowTokenClientController.java b/core/java/android/window/WindowTokenClientController.java
index 44847073646d..14b9df65aa69 100644
--- a/core/java/android/window/WindowTokenClientController.java
+++ b/core/java/android/window/WindowTokenClientController.java
@@ -17,7 +17,6 @@
package android.window;
import static android.view.WindowManager.LayoutParams.WindowType;
-import static android.view.WindowManagerGlobal.getWindowManagerService;
import android.annotation.NonNull;
import android.annotation.Nullable;
@@ -33,6 +32,7 @@ import android.os.RemoteException;
import android.util.ArrayMap;
import android.util.Log;
import android.view.IWindowManager;
+import android.view.WindowManagerGlobal;
import com.android.internal.annotations.GuardedBy;
import com.android.internal.annotations.VisibleForTesting;
@@ -56,6 +56,7 @@ public class WindowTokenClientController {
private final ArrayMap<IBinder, WindowTokenClient> mWindowTokenClientMap = new ArrayMap<>();
/** Gets the singleton controller. */
+ @NonNull
public static WindowTokenClientController getInstance() {
synchronized (WindowTokenClientController.class) {
if (sController == null) {
@@ -75,6 +76,7 @@ public class WindowTokenClientController {
/** Creates a new instance for test only. */
@VisibleForTesting
+ @NonNull
public static WindowTokenClientController createInstanceForTesting() {
return new WindowTokenClientController();
}
@@ -203,4 +205,11 @@ public class WindowTokenClientController {
}
return windowTokenClient;
}
+
+ /** Gets the {@link IWindowManager}. */
+ @VisibleForTesting
+ @Nullable
+ public IWindowManager getWindowManagerService() {
+ return WindowManagerGlobal.getWindowManagerService();
+ }
}
diff --git a/core/tests/coretests/src/android/window/WindowContextControllerTest.java b/core/tests/coretests/src/android/window/WindowContextControllerTest.java
index 940c06794b43..30c0f2b682db 100644
--- a/core/tests/coretests/src/android/window/WindowContextControllerTest.java
+++ b/core/tests/coretests/src/android/window/WindowContextControllerTest.java
@@ -28,6 +28,7 @@ import static org.mockito.ArgumentMatchers.eq;
import static org.mockito.Mockito.doNothing;
import static org.mockito.Mockito.doReturn;
import static org.mockito.Mockito.never;
+import static org.mockito.Mockito.spy;
import static org.mockito.Mockito.verify;
import android.os.Binder;
@@ -36,7 +37,6 @@ import android.platform.test.annotations.Presubmit;
import androidx.test.filters.SmallTest;
import androidx.test.runner.AndroidJUnit4;
-import org.junit.After;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
@@ -62,24 +62,16 @@ public class WindowContextControllerTest {
@Mock
private WindowTokenClient mMockToken;
- private WindowTokenClientController mOriginalController;
-
@Before
public void setUp() throws Exception {
MockitoAnnotations.initMocks(this);
- mController = new WindowContextController(mMockToken);
+ mController = spy(new WindowContextController(mMockToken));
+ doReturn(mWindowTokenClientController).when(mController).getWindowTokenClientController();
doNothing().when(mMockToken).onConfigurationChanged(any(), anyInt(), anyBoolean());
- mOriginalController = WindowTokenClientController.getInstance();
- WindowTokenClientController.overrideForTesting(mWindowTokenClientController);
doReturn(true).when(mWindowTokenClientController).attachToDisplayArea(
eq(mMockToken), anyInt(), anyInt(), any());
}
- @After
- public void tearDown() {
- WindowTokenClientController.overrideForTesting(mOriginalController);
- }
-
@Test(expected = IllegalStateException.class)
public void testAttachToDisplayAreaTwiceThrowException() {
mController.attachToDisplayArea(TYPE_APPLICATION_OVERLAY, DEFAULT_DISPLAY,
diff --git a/core/tests/coretests/src/android/window/WindowTokenClientControllerTest.java b/core/tests/coretests/src/android/window/WindowTokenClientControllerTest.java
index 767dd8c20b77..c4f7b3b5cd59 100644
--- a/core/tests/coretests/src/android/window/WindowTokenClientControllerTest.java
+++ b/core/tests/coretests/src/android/window/WindowTokenClientControllerTest.java
@@ -35,11 +35,9 @@ import android.os.IBinder;
import android.os.RemoteException;
import android.platform.test.annotations.Presubmit;
import android.view.IWindowManager;
-import android.view.WindowManagerGlobal;
import androidx.test.filters.SmallTest;
-import org.junit.After;
import org.junit.Before;
import org.junit.Test;
import org.mockito.Mock;
@@ -66,22 +64,14 @@ public class WindowTokenClientControllerTest {
// Can't mock final class.
private final Configuration mConfiguration = new Configuration();
- private IWindowManager mOriginalWindowManagerService;
-
private WindowTokenClientController mController;
@Before
public void setup() {
MockitoAnnotations.initMocks(this);
- mOriginalWindowManagerService = WindowManagerGlobal.getWindowManagerService();
- WindowManagerGlobal.overrideWindowManagerServiceForTesting(mWindowManagerService);
doReturn(mClientToken).when(mWindowTokenClient).asBinder();
mController = spy(WindowTokenClientController.createInstanceForTesting());
- }
-
- @After
- public void tearDown() {
- WindowManagerGlobal.overrideWindowManagerServiceForTesting(mOriginalWindowManagerService);
+ doReturn(mWindowManagerService).when(mController).getWindowManagerService();
}
@Test
@@ -125,7 +115,7 @@ public class WindowTokenClientControllerTest {
DEFAULT_DISPLAY, null /* options */);
mController.detachIfNeeded(mWindowTokenClient);
- verify(mWindowManagerService).detachWindowContext(any());
+ verify(mWindowManagerService).detachWindowContext(mWindowTokenClient);
}
@Test
@@ -165,7 +155,7 @@ public class WindowTokenClientControllerTest {
mController.attachToDisplayContent(mWindowTokenClient, DEFAULT_DISPLAY);
mController.detachIfNeeded(mWindowTokenClient);
- verify(mWindowManagerService).detachWindowContext(any());
+ verify(mWindowManagerService).detachWindowContext(mWindowTokenClient);
}
@Test
@@ -186,7 +176,7 @@ public class WindowTokenClientControllerTest {
mController.attachToWindowToken(mWindowTokenClient, mWindowToken);
mController.detachIfNeeded(mWindowTokenClient);
- verify(mWindowManagerService).detachWindowContext(any());
+ verify(mWindowManagerService).detachWindowContext(mWindowTokenClient);
}
@Test