Loading quickstep/tests/src/com/android/quickstep/OrientationTouchTransformerTest.java +24 −42 Original line number Diff line number Diff line Loading @@ -17,8 +17,6 @@ package com.android.quickstep; import static android.view.Display.DEFAULT_DISPLAY; import static androidx.test.core.app.ApplicationProvider.getApplicationContext; import static com.android.launcher3.util.DisplayController.NavigationMode.NO_BUTTON; Loading @@ -27,17 +25,16 @@ import static org.junit.Assert.assertFalse; import static org.junit.Assert.assertTrue; import static org.mockito.ArgumentMatchers.any; import static org.mockito.ArgumentMatchers.anyInt; import static org.mockito.Mockito.doAnswer; import static org.mockito.Mockito.doReturn; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.spy; import static org.mockito.Mockito.when; import android.content.Context; import android.content.res.Resources; import android.graphics.Point; import android.hardware.display.DisplayManager; import android.graphics.Rect; import android.util.ArrayMap; import android.util.DisplayMetrics; import android.util.Size; import android.view.Display; import android.view.MotionEvent; import android.view.Surface; Loading @@ -47,6 +44,10 @@ import androidx.test.filters.SmallTest; import com.android.launcher3.ResourceUtils; import com.android.launcher3.util.DisplayController; import com.android.launcher3.util.RotationUtils; import com.android.launcher3.util.WindowBounds; import com.android.launcher3.util.window.CachedDisplayInfo; import com.android.launcher3.util.window.WindowManagerProxy; import org.junit.Before; import org.junit.Test; Loading @@ -56,18 +57,9 @@ import org.mockito.MockitoAnnotations; @SmallTest @RunWith(AndroidJUnit4.class) public class OrientationTouchTransformerTest { static class ScreenSize { int mHeight; int mWidth; ScreenSize(int height, int width) { mHeight = height; mWidth = width; } } private static final ScreenSize NORMAL_SCREEN_SIZE = new ScreenSize(2280, 1080); private static final ScreenSize LARGE_SCREEN_SIZE = new ScreenSize(3280, 1080); private static final Size NORMAL_SCREEN_SIZE = new Size(1080, 2280); private static final Size LARGE_SCREEN_SIZE = new Size(1080, 3280); private static final float DENSITY_DISPLAY_METRICS = 3.0f; private OrientationTouchTransformer mTouchTransformer; Loading @@ -75,7 +67,6 @@ public class OrientationTouchTransformerTest { Resources mResources; private DisplayController.Info mInfo; @Before public void setup() { MockitoAnnotations.initMocks(this); Loading Loading @@ -296,33 +287,24 @@ public class OrientationTouchTransformerTest { assertTrue(mTouchTransformer.touchInValidSwipeRegions(inRegion2.getX(), inRegion2.getY())); } private DisplayController.Info createDisplayInfo(ScreenSize screenSize, int rotation) { Context context = getApplicationContext(); Display display = spy(context.getSystemService(DisplayManager.class) .getDisplay(DEFAULT_DISPLAY)); Point p = new Point(screenSize.mWidth, screenSize.mHeight); if (rotation == Surface.ROTATION_90 || rotation == Surface.ROTATION_270) { p.set(screenSize.mHeight, screenSize.mWidth); } doReturn(rotation).when(display).getRotation(); doAnswer(i -> { ((Point) i.getArgument(0)).set(p.x, p.y); return null; }).when(display).getRealSize(any(Point.class)); doAnswer(i -> { ((Point) i.getArgument(0)).set(p.x, p.y); ((Point) i.getArgument(1)).set(p.x, p.y); return null; }).when(display).getCurrentSizeRange(any(Point.class), any(Point.class)); return new DisplayController.Info(context, display); private DisplayController.Info createDisplayInfo(Size screenSize, int rotation) { Point displaySize = new Point(screenSize.getWidth(), screenSize.getHeight()); RotationUtils.rotateSize(displaySize, rotation); CachedDisplayInfo cdi = new CachedDisplayInfo(displaySize, rotation); WindowBounds wm = new WindowBounds( new Rect(0, 0, displaySize.x, displaySize.y), new Rect()); WindowManagerProxy wmProxy = mock(WindowManagerProxy.class); doReturn(cdi).when(wmProxy).getDisplayInfo(any(), any()); doReturn(wm).when(wmProxy).getRealBounds(any(), any(), any()); return new DisplayController.Info( getApplicationContext(), mock(Display.class), wmProxy, new ArrayMap<>()); } private float generateTouchRegionHeight(ScreenSize screenSize, int rotation) { float height = screenSize.mHeight; private float generateTouchRegionHeight(Size screenSize, int rotation) { float height = screenSize.getHeight(); if (rotation == Surface.ROTATION_90 || rotation == Surface.ROTATION_270) { height = screenSize.mWidth; height = screenSize.getWidth(); } return height - ResourceUtils.DEFAULT_NAVBAR_VALUE * DENSITY_DISPLAY_METRICS; } Loading quickstep/tests/src/com/android/quickstep/util/TaskViewSimulatorTest.java +1 −1 Original line number Diff line number Diff line Loading @@ -164,7 +164,7 @@ public class TaskViewSimulatorTest { } WindowManagerProxy wmProxy = mock(WindowManagerProxy.class); doReturn(cdi).when(wmProxy).getDisplayInfo(any()); doReturn(cdi).when(wmProxy).getDisplayInfo(any(), any()); doReturn(wm).when(wmProxy).getRealBounds(any(), any(), any()); ArrayMap<String, Pair<CachedDisplayInfo, WindowBounds[]>> perDisplayBoundsCache = Loading src/com/android/launcher3/util/DisplayController.java +2 −2 Original line number Diff line number Diff line Loading @@ -305,7 +305,7 @@ public class DisplayController implements ComponentCallbacks, SafeCloseable { public Info(Context context, Display display, WindowManagerProxy wmProxy, ArrayMap<String, Pair<CachedDisplayInfo, WindowBounds[]>> perDisplayBoundsCache) { CachedDisplayInfo displayInfo = wmProxy.getDisplayInfo(display); CachedDisplayInfo displayInfo = wmProxy.getDisplayInfo(context, display); rotation = displayInfo.rotation; currentSize = displayInfo.size; displayId = displayInfo.id; Loading Loading @@ -364,7 +364,7 @@ public class DisplayController implements ComponentCallbacks, SafeCloseable { pw.println(" id=" + info.displayId); pw.println(" rotation=" + info.rotation); pw.println(" fontScale=" + info.fontScale); pw.println(" densityDpi=" + info.displayId); pw.println(" densityDpi=" + info.densityDpi); pw.println(" navigationMode=" + info.navigationMode.name()); pw.println(" currentSize=" + info.currentSize); pw.println(" supportedBounds=" + info.supportedBounds); Loading src/com/android/launcher3/util/window/WindowManagerProxy.java +22 −13 Original line number Diff line number Diff line Loading @@ -15,6 +15,9 @@ */ package com.android.launcher3.util.window; import static android.view.Display.DEFAULT_DISPLAY; import static android.view.WindowManager.LayoutParams.TYPE_APPLICATION; import static com.android.launcher3.ResourceUtils.INVALID_RESOURCE_HANDLE; import static com.android.launcher3.ResourceUtils.NAVBAR_HEIGHT; import static com.android.launcher3.ResourceUtils.NAVBAR_HEIGHT_LANDSCAPE; Loading Loading @@ -47,7 +50,6 @@ import android.view.WindowMetrics; import com.android.launcher3.R; import com.android.launcher3.ResourceUtils; import com.android.launcher3.Utilities; import com.android.launcher3.util.DisplayController; import com.android.launcher3.util.MainThreadInitializedObject; import com.android.launcher3.util.ResourceBasedOverride; import com.android.launcher3.util.WindowBounds; Loading Loading @@ -90,7 +92,10 @@ public class WindowManagerProxy implements ResourceBasedOverride { ArrayMap<String, Pair<CachedDisplayInfo, WindowBounds[]>> result = new ArrayMap<>(); for (Display display : displays) { if (isInternalDisplay(display)) { CachedDisplayInfo info = getDisplayInfo(display).normalize(); Context displayContext = Utilities.ATLEAST_S ? context.createWindowContext(display, TYPE_APPLICATION, null) : context.createDisplayContext(display); CachedDisplayInfo info = getDisplayInfo(displayContext, display).normalize(); WindowBounds[] bounds = estimateWindowBounds(context, info); result.put(info.id, Pair.create(info, bounds)); } Loading Loading @@ -121,7 +126,7 @@ public class WindowManagerProxy implements ResourceBasedOverride { } WindowMetrics wm = windowContext.getSystemService(WindowManager.class) .getCurrentWindowMetrics(); .getMaximumWindowMetrics(); Rect insets = new Rect(); normalizeWindowInsets(windowContext, wm.getWindowInsets(), insets); Loading Loading @@ -267,21 +272,23 @@ public class WindowManagerProxy implements ResourceBasedOverride { * Returns a CachedDisplayInfo initialized for the current display */ @TargetApi(Build.VERSION_CODES.S) public CachedDisplayInfo getDisplayInfo(Display display) { int rotation = display.getRotation(); Point size = new Point(); display.getRealSize(size); public CachedDisplayInfo getDisplayInfo(Context displayContext, Display display) { int rotation = getRotation(displayContext); Rect cutoutRect = new Rect(); Point size = new Point(); if (Utilities.ATLEAST_S) { DisplayCutout cutout = display.getCutout(); WindowMetrics wm = displayContext.getSystemService(WindowManager.class) .getMaximumWindowMetrics(); DisplayCutout cutout = wm.getWindowInsets().getDisplayCutout(); if (cutout != null) { cutoutRect.set(cutout.getSafeInsetLeft(), cutout.getSafeInsetTop(), cutout.getSafeInsetRight(), cutout.getSafeInsetBottom()); } } size.set(wm.getBounds().right, wm.getBounds().bottom); } else { display.getRealSize(size); } return new CachedDisplayInfo(getDisplayId(display), size, rotation, cutoutRect); } Loading @@ -304,7 +311,9 @@ public class WindowManagerProxy implements ResourceBasedOverride { // Ignore } } return d == null ? DisplayController.INSTANCE.get(context).getInfo().rotation : d.getRotation(); if (d == null) { d = context.getSystemService(DisplayManager.class).getDisplay(DEFAULT_DISPLAY); } return d.getRotation(); } } Loading
quickstep/tests/src/com/android/quickstep/OrientationTouchTransformerTest.java +24 −42 Original line number Diff line number Diff line Loading @@ -17,8 +17,6 @@ package com.android.quickstep; import static android.view.Display.DEFAULT_DISPLAY; import static androidx.test.core.app.ApplicationProvider.getApplicationContext; import static com.android.launcher3.util.DisplayController.NavigationMode.NO_BUTTON; Loading @@ -27,17 +25,16 @@ import static org.junit.Assert.assertFalse; import static org.junit.Assert.assertTrue; import static org.mockito.ArgumentMatchers.any; import static org.mockito.ArgumentMatchers.anyInt; import static org.mockito.Mockito.doAnswer; import static org.mockito.Mockito.doReturn; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.spy; import static org.mockito.Mockito.when; import android.content.Context; import android.content.res.Resources; import android.graphics.Point; import android.hardware.display.DisplayManager; import android.graphics.Rect; import android.util.ArrayMap; import android.util.DisplayMetrics; import android.util.Size; import android.view.Display; import android.view.MotionEvent; import android.view.Surface; Loading @@ -47,6 +44,10 @@ import androidx.test.filters.SmallTest; import com.android.launcher3.ResourceUtils; import com.android.launcher3.util.DisplayController; import com.android.launcher3.util.RotationUtils; import com.android.launcher3.util.WindowBounds; import com.android.launcher3.util.window.CachedDisplayInfo; import com.android.launcher3.util.window.WindowManagerProxy; import org.junit.Before; import org.junit.Test; Loading @@ -56,18 +57,9 @@ import org.mockito.MockitoAnnotations; @SmallTest @RunWith(AndroidJUnit4.class) public class OrientationTouchTransformerTest { static class ScreenSize { int mHeight; int mWidth; ScreenSize(int height, int width) { mHeight = height; mWidth = width; } } private static final ScreenSize NORMAL_SCREEN_SIZE = new ScreenSize(2280, 1080); private static final ScreenSize LARGE_SCREEN_SIZE = new ScreenSize(3280, 1080); private static final Size NORMAL_SCREEN_SIZE = new Size(1080, 2280); private static final Size LARGE_SCREEN_SIZE = new Size(1080, 3280); private static final float DENSITY_DISPLAY_METRICS = 3.0f; private OrientationTouchTransformer mTouchTransformer; Loading @@ -75,7 +67,6 @@ public class OrientationTouchTransformerTest { Resources mResources; private DisplayController.Info mInfo; @Before public void setup() { MockitoAnnotations.initMocks(this); Loading Loading @@ -296,33 +287,24 @@ public class OrientationTouchTransformerTest { assertTrue(mTouchTransformer.touchInValidSwipeRegions(inRegion2.getX(), inRegion2.getY())); } private DisplayController.Info createDisplayInfo(ScreenSize screenSize, int rotation) { Context context = getApplicationContext(); Display display = spy(context.getSystemService(DisplayManager.class) .getDisplay(DEFAULT_DISPLAY)); Point p = new Point(screenSize.mWidth, screenSize.mHeight); if (rotation == Surface.ROTATION_90 || rotation == Surface.ROTATION_270) { p.set(screenSize.mHeight, screenSize.mWidth); } doReturn(rotation).when(display).getRotation(); doAnswer(i -> { ((Point) i.getArgument(0)).set(p.x, p.y); return null; }).when(display).getRealSize(any(Point.class)); doAnswer(i -> { ((Point) i.getArgument(0)).set(p.x, p.y); ((Point) i.getArgument(1)).set(p.x, p.y); return null; }).when(display).getCurrentSizeRange(any(Point.class), any(Point.class)); return new DisplayController.Info(context, display); private DisplayController.Info createDisplayInfo(Size screenSize, int rotation) { Point displaySize = new Point(screenSize.getWidth(), screenSize.getHeight()); RotationUtils.rotateSize(displaySize, rotation); CachedDisplayInfo cdi = new CachedDisplayInfo(displaySize, rotation); WindowBounds wm = new WindowBounds( new Rect(0, 0, displaySize.x, displaySize.y), new Rect()); WindowManagerProxy wmProxy = mock(WindowManagerProxy.class); doReturn(cdi).when(wmProxy).getDisplayInfo(any(), any()); doReturn(wm).when(wmProxy).getRealBounds(any(), any(), any()); return new DisplayController.Info( getApplicationContext(), mock(Display.class), wmProxy, new ArrayMap<>()); } private float generateTouchRegionHeight(ScreenSize screenSize, int rotation) { float height = screenSize.mHeight; private float generateTouchRegionHeight(Size screenSize, int rotation) { float height = screenSize.getHeight(); if (rotation == Surface.ROTATION_90 || rotation == Surface.ROTATION_270) { height = screenSize.mWidth; height = screenSize.getWidth(); } return height - ResourceUtils.DEFAULT_NAVBAR_VALUE * DENSITY_DISPLAY_METRICS; } Loading
quickstep/tests/src/com/android/quickstep/util/TaskViewSimulatorTest.java +1 −1 Original line number Diff line number Diff line Loading @@ -164,7 +164,7 @@ public class TaskViewSimulatorTest { } WindowManagerProxy wmProxy = mock(WindowManagerProxy.class); doReturn(cdi).when(wmProxy).getDisplayInfo(any()); doReturn(cdi).when(wmProxy).getDisplayInfo(any(), any()); doReturn(wm).when(wmProxy).getRealBounds(any(), any(), any()); ArrayMap<String, Pair<CachedDisplayInfo, WindowBounds[]>> perDisplayBoundsCache = Loading
src/com/android/launcher3/util/DisplayController.java +2 −2 Original line number Diff line number Diff line Loading @@ -305,7 +305,7 @@ public class DisplayController implements ComponentCallbacks, SafeCloseable { public Info(Context context, Display display, WindowManagerProxy wmProxy, ArrayMap<String, Pair<CachedDisplayInfo, WindowBounds[]>> perDisplayBoundsCache) { CachedDisplayInfo displayInfo = wmProxy.getDisplayInfo(display); CachedDisplayInfo displayInfo = wmProxy.getDisplayInfo(context, display); rotation = displayInfo.rotation; currentSize = displayInfo.size; displayId = displayInfo.id; Loading Loading @@ -364,7 +364,7 @@ public class DisplayController implements ComponentCallbacks, SafeCloseable { pw.println(" id=" + info.displayId); pw.println(" rotation=" + info.rotation); pw.println(" fontScale=" + info.fontScale); pw.println(" densityDpi=" + info.displayId); pw.println(" densityDpi=" + info.densityDpi); pw.println(" navigationMode=" + info.navigationMode.name()); pw.println(" currentSize=" + info.currentSize); pw.println(" supportedBounds=" + info.supportedBounds); Loading
src/com/android/launcher3/util/window/WindowManagerProxy.java +22 −13 Original line number Diff line number Diff line Loading @@ -15,6 +15,9 @@ */ package com.android.launcher3.util.window; import static android.view.Display.DEFAULT_DISPLAY; import static android.view.WindowManager.LayoutParams.TYPE_APPLICATION; import static com.android.launcher3.ResourceUtils.INVALID_RESOURCE_HANDLE; import static com.android.launcher3.ResourceUtils.NAVBAR_HEIGHT; import static com.android.launcher3.ResourceUtils.NAVBAR_HEIGHT_LANDSCAPE; Loading Loading @@ -47,7 +50,6 @@ import android.view.WindowMetrics; import com.android.launcher3.R; import com.android.launcher3.ResourceUtils; import com.android.launcher3.Utilities; import com.android.launcher3.util.DisplayController; import com.android.launcher3.util.MainThreadInitializedObject; import com.android.launcher3.util.ResourceBasedOverride; import com.android.launcher3.util.WindowBounds; Loading Loading @@ -90,7 +92,10 @@ public class WindowManagerProxy implements ResourceBasedOverride { ArrayMap<String, Pair<CachedDisplayInfo, WindowBounds[]>> result = new ArrayMap<>(); for (Display display : displays) { if (isInternalDisplay(display)) { CachedDisplayInfo info = getDisplayInfo(display).normalize(); Context displayContext = Utilities.ATLEAST_S ? context.createWindowContext(display, TYPE_APPLICATION, null) : context.createDisplayContext(display); CachedDisplayInfo info = getDisplayInfo(displayContext, display).normalize(); WindowBounds[] bounds = estimateWindowBounds(context, info); result.put(info.id, Pair.create(info, bounds)); } Loading Loading @@ -121,7 +126,7 @@ public class WindowManagerProxy implements ResourceBasedOverride { } WindowMetrics wm = windowContext.getSystemService(WindowManager.class) .getCurrentWindowMetrics(); .getMaximumWindowMetrics(); Rect insets = new Rect(); normalizeWindowInsets(windowContext, wm.getWindowInsets(), insets); Loading Loading @@ -267,21 +272,23 @@ public class WindowManagerProxy implements ResourceBasedOverride { * Returns a CachedDisplayInfo initialized for the current display */ @TargetApi(Build.VERSION_CODES.S) public CachedDisplayInfo getDisplayInfo(Display display) { int rotation = display.getRotation(); Point size = new Point(); display.getRealSize(size); public CachedDisplayInfo getDisplayInfo(Context displayContext, Display display) { int rotation = getRotation(displayContext); Rect cutoutRect = new Rect(); Point size = new Point(); if (Utilities.ATLEAST_S) { DisplayCutout cutout = display.getCutout(); WindowMetrics wm = displayContext.getSystemService(WindowManager.class) .getMaximumWindowMetrics(); DisplayCutout cutout = wm.getWindowInsets().getDisplayCutout(); if (cutout != null) { cutoutRect.set(cutout.getSafeInsetLeft(), cutout.getSafeInsetTop(), cutout.getSafeInsetRight(), cutout.getSafeInsetBottom()); } } size.set(wm.getBounds().right, wm.getBounds().bottom); } else { display.getRealSize(size); } return new CachedDisplayInfo(getDisplayId(display), size, rotation, cutoutRect); } Loading @@ -304,7 +311,9 @@ public class WindowManagerProxy implements ResourceBasedOverride { // Ignore } } return d == null ? DisplayController.INSTANCE.get(context).getInfo().rotation : d.getRotation(); if (d == null) { d = context.getSystemService(DisplayManager.class).getDisplay(DEFAULT_DISPLAY); } return d.getRotation(); } }