Loading core/java/android/view/WindowManagerGlobal.java +2 −10 Original line number Diff line number Diff line Loading @@ -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; Loading Loading @@ -165,6 +164,7 @@ public final class WindowManagerGlobal { } } @Nullable @UnsupportedAppUsage public static IWindowManager getWindowManagerService() { synchronized (WindowManagerGlobal.class) { Loading @@ -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()); Loading @@ -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) { Loading core/java/android/window/WindowContextController.java +11 −3 Original line number Diff line number Diff line Loading @@ -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; } Loading @@ -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) { Loading Loading @@ -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(); } } core/java/android/window/WindowTokenClientController.java +10 −1 Original line number Diff line number Diff line Loading @@ -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; Loading @@ -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; Loading @@ -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) { Loading @@ -75,6 +76,7 @@ public class WindowTokenClientController { /** Creates a new instance for test only. */ @VisibleForTesting @NonNull public static WindowTokenClientController createInstanceForTesting() { return new WindowTokenClientController(); } Loading Loading @@ -203,4 +205,11 @@ public class WindowTokenClientController { } return windowTokenClient; } /** Gets the {@link IWindowManager}. */ @VisibleForTesting @Nullable public IWindowManager getWindowManagerService() { return WindowManagerGlobal.getWindowManagerService(); } } core/tests/coretests/src/android/window/WindowContextControllerTest.java +3 −11 Original line number Diff line number Diff line Loading @@ -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; Loading @@ -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; Loading @@ -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, Loading core/tests/coretests/src/android/window/WindowTokenClientControllerTest.java +4 −14 Original line number Diff line number Diff line Loading @@ -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; Loading @@ -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 Loading Loading @@ -125,7 +115,7 @@ public class WindowTokenClientControllerTest { DEFAULT_DISPLAY, null /* options */); mController.detachIfNeeded(mWindowTokenClient); verify(mWindowManagerService).detachWindowContext(any()); verify(mWindowManagerService).detachWindowContext(mWindowTokenClient); } @Test Loading Loading @@ -165,7 +155,7 @@ public class WindowTokenClientControllerTest { mController.attachToDisplayContent(mWindowTokenClient, DEFAULT_DISPLAY); mController.detachIfNeeded(mWindowTokenClient); verify(mWindowManagerService).detachWindowContext(any()); verify(mWindowManagerService).detachWindowContext(mWindowTokenClient); } @Test Loading @@ -186,7 +176,7 @@ public class WindowTokenClientControllerTest { mController.attachToWindowToken(mWindowTokenClient, mWindowToken); mController.detachIfNeeded(mWindowTokenClient); verify(mWindowManagerService).detachWindowContext(any()); verify(mWindowManagerService).detachWindowContext(mWindowTokenClient); } @Test Loading Loading
core/java/android/view/WindowManagerGlobal.java +2 −10 Original line number Diff line number Diff line Loading @@ -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; Loading Loading @@ -165,6 +164,7 @@ public final class WindowManagerGlobal { } } @Nullable @UnsupportedAppUsage public static IWindowManager getWindowManagerService() { synchronized (WindowManagerGlobal.class) { Loading @@ -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()); Loading @@ -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) { Loading
core/java/android/window/WindowContextController.java +11 −3 Original line number Diff line number Diff line Loading @@ -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; } Loading @@ -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) { Loading Loading @@ -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(); } }
core/java/android/window/WindowTokenClientController.java +10 −1 Original line number Diff line number Diff line Loading @@ -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; Loading @@ -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; Loading @@ -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) { Loading @@ -75,6 +76,7 @@ public class WindowTokenClientController { /** Creates a new instance for test only. */ @VisibleForTesting @NonNull public static WindowTokenClientController createInstanceForTesting() { return new WindowTokenClientController(); } Loading Loading @@ -203,4 +205,11 @@ public class WindowTokenClientController { } return windowTokenClient; } /** Gets the {@link IWindowManager}. */ @VisibleForTesting @Nullable public IWindowManager getWindowManagerService() { return WindowManagerGlobal.getWindowManagerService(); } }
core/tests/coretests/src/android/window/WindowContextControllerTest.java +3 −11 Original line number Diff line number Diff line Loading @@ -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; Loading @@ -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; Loading @@ -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, Loading
core/tests/coretests/src/android/window/WindowTokenClientControllerTest.java +4 −14 Original line number Diff line number Diff line Loading @@ -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; Loading @@ -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 Loading Loading @@ -125,7 +115,7 @@ public class WindowTokenClientControllerTest { DEFAULT_DISPLAY, null /* options */); mController.detachIfNeeded(mWindowTokenClient); verify(mWindowManagerService).detachWindowContext(any()); verify(mWindowManagerService).detachWindowContext(mWindowTokenClient); } @Test Loading Loading @@ -165,7 +155,7 @@ public class WindowTokenClientControllerTest { mController.attachToDisplayContent(mWindowTokenClient, DEFAULT_DISPLAY); mController.detachIfNeeded(mWindowTokenClient); verify(mWindowManagerService).detachWindowContext(any()); verify(mWindowManagerService).detachWindowContext(mWindowTokenClient); } @Test Loading @@ -186,7 +176,7 @@ public class WindowTokenClientControllerTest { mController.attachToWindowToken(mWindowTokenClient, mWindowToken); mController.detachIfNeeded(mWindowTokenClient); verify(mWindowManagerService).detachWindowContext(any()); verify(mWindowManagerService).detachWindowContext(mWindowTokenClient); } @Test Loading