diff options
author | Andrii Kulian <akulian@google.com> | 2020-01-26 20:59:07 -0800 |
---|---|---|
committer | Andrii Kulian <akulian@google.com> | 2020-01-31 01:15:21 +0000 |
commit | e57f2dc246532d54229046d319d7b907b23288b3 (patch) | |
tree | dbb2b0b84814f0fffaf7b80f4c94c4820dfbf2bf | |
parent | ea325634d3c465817c48f31ad2d5b047661128a6 (diff) |
Exempt-From-Owner-Approval: Fix usages of WindowManager.getDefaultDisplay() in f/b
Replace the existing usages of now-deprecated API
WindowManager.getDefaultDisplay() with WindowMetrics or
Context.getDisplay() in frameworks/base.
Bug: 128338354
Test: Build, auto test
Change-Id: I02d38a022c5e0e6e9d699f03d35b65d6c8126da9
42 files changed, 166 insertions, 171 deletions
diff --git a/core/java/android/app/TaskEmbedder.java b/core/java/android/app/TaskEmbedder.java index 93b1ea84adf7..761b225a7cdc 100644 --- a/core/java/android/app/TaskEmbedder.java +++ b/core/java/android/app/TaskEmbedder.java @@ -48,7 +48,6 @@ import android.view.InputDevice; import android.view.KeyCharacterMap; import android.view.KeyEvent; import android.view.SurfaceControl; -import android.view.WindowManager; import android.view.WindowManagerGlobal; import android.view.inputmethod.InputMethodManager; @@ -131,6 +130,7 @@ public class TaskEmbedder { private TaskStackListener mTaskStackListener; private Listener mListener; private boolean mOpened; // Protected by mGuard. + private DisplayMetrics mTmpDisplayMetrics; private final CloseGuard mGuard = CloseGuard.get(); @@ -594,10 +594,11 @@ public class TaskEmbedder { /** Get density of the hosting display. */ private int getBaseDisplayDensity() { - final WindowManager wm = mContext.getSystemService(WindowManager.class); - final DisplayMetrics metrics = new DisplayMetrics(); - wm.getDefaultDisplay().getMetrics(metrics); - return metrics.densityDpi; + if (mTmpDisplayMetrics == null) { + mTmpDisplayMetrics = new DisplayMetrics(); + } + mContext.getDisplay().getMetrics(mTmpDisplayMetrics); + return mTmpDisplayMetrics.densityDpi; } /** diff --git a/core/java/android/app/WindowContext.java b/core/java/android/app/WindowContext.java index a0d1c8c1d562..36ae450d342b 100644 --- a/core/java/android/app/WindowContext.java +++ b/core/java/android/app/WindowContext.java @@ -32,7 +32,7 @@ import android.view.WindowManagerImpl; * windows. Its resources and configuration are adjusted to the area of the display that will be * used when a new window is added via {@link android.view.WindowManager.addView}. * - * @see Context#createWindowContext(int) + * @see Context#createWindowContext(int, Bundle) * @hide */ // TODO(b/128338354): Handle config/display changes from server side. diff --git a/core/java/android/content/Context.java b/core/java/android/content/Context.java index 3208c00dad2e..4c5faf784d51 100644 --- a/core/java/android/content/Context.java +++ b/core/java/android/content/Context.java @@ -5732,14 +5732,13 @@ public abstract class Context { * shared, however common state (ClassLoader, other Resources for the * same configuration) may be so the Context itself can be fairly lightweight. * - * The returned display Context provides a {@link WindowManager} - * (see {@link #getSystemService(String)}) that is configured to show windows - * on the given display. The WindowManager's {@link WindowManager#getDefaultDisplay} - * method can be used to retrieve the Display from the returned Context. - * - * @param display A {@link Display} object specifying the display - * for whose metrics the Context's resources should be tailored and upon which - * new windows should be shown. + * To obtain an instance of a {@link WindowManager} (see {@link #getSystemService(String)}) that + * is configured to show windows on the given display call + * {@link #createWindowContext(int, Bundle)} on the returned display Context or use an + * {@link android.app.Activity}. + * + * @param display A {@link Display} object specifying the display for whose metrics the + * Context's resources should be tailored. * * @return A {@link Context} for the display. */ diff --git a/core/java/android/hardware/camera2/CameraManager.java b/core/java/android/hardware/camera2/CameraManager.java index 9ee56a928d81..c5b9a43fb523 100644 --- a/core/java/android/hardware/camera2/CameraManager.java +++ b/core/java/android/hardware/camera2/CameraManager.java @@ -316,6 +316,7 @@ public final class CameraManager { CameraManagerGlobal.get().unregisterTorchCallback(callback); } + // TODO(b/147726300): Investigate how to support foldables/multi-display devices. private Size getDisplaySize() { Size ret = new Size(0, 0); diff --git a/core/java/android/inputmethodservice/InputMethodService.java b/core/java/android/inputmethodservice/InputMethodService.java index 92047dcad09e..da9cc8a47a39 100644 --- a/core/java/android/inputmethodservice/InputMethodService.java +++ b/core/java/android/inputmethodservice/InputMethodService.java @@ -16,7 +16,6 @@ package android.inputmethodservice; -import static android.view.Display.DEFAULT_DISPLAY; import static android.view.ViewGroup.LayoutParams.MATCH_PARENT; import static android.view.ViewGroup.LayoutParams.WRAP_CONTENT; import static android.view.ViewRootImpl.NEW_INSETS_MODE_NONE; @@ -52,7 +51,6 @@ import android.os.Bundle; import android.os.Handler; import android.os.IBinder; import android.os.Looper; -import android.os.Process; import android.os.RemoteException; import android.os.ResultReceiver; import android.os.SystemClock; @@ -64,6 +62,7 @@ import android.text.method.MovementMethod; import android.util.Log; import android.util.PrintWriterPrinter; import android.util.Printer; +import android.util.Size; import android.view.Gravity; import android.view.KeyCharacterMap; import android.view.KeyEvent; @@ -560,12 +559,10 @@ public class InputMethodService extends AbstractInputMethodService { @Override public void updateInputMethodDisplay(int displayId) { // Update display for adding IME window to the right display. - if (displayId != DEFAULT_DISPLAY) { - // TODO(b/111364446) Need to address context lifecycle issue if need to re-create - // for update resources & configuration correctly when show soft input - // in non-default display. - updateDisplay(displayId); - } + // TODO(b/111364446) Need to address context lifecycle issue if need to re-create + // for update resources & configuration correctly when show soft input + // in non-default display. + updateDisplay(displayId); } /** @@ -1466,8 +1463,9 @@ public class InputMethodService extends AbstractInputMethodService { * screen orientation changes. */ public int getMaxWidth() { - WindowManager wm = (WindowManager) getSystemService(Context.WINDOW_SERVICE); - return wm.getDefaultDisplay().getWidth(); + final WindowManager windowManager = getSystemService(WindowManager.class); + final Size windowSize = windowManager.getCurrentWindowMetrics().getSize(); + return windowSize.getWidth(); } /** diff --git a/core/java/android/os/RecoverySystem.java b/core/java/android/os/RecoverySystem.java index cdcb3ff94264..be2245820bb6 100644 --- a/core/java/android/os/RecoverySystem.java +++ b/core/java/android/os/RecoverySystem.java @@ -41,7 +41,6 @@ import android.text.TextUtils; import android.text.format.DateFormat; import android.util.Log; import android.view.Display; -import android.view.WindowManager; import libcore.io.Streams; @@ -615,8 +614,7 @@ public class RecoverySystem { // On TV, reboot quiescently if the screen is off if (context.getPackageManager().hasSystemFeature(PackageManager.FEATURE_LEANBACK)) { - WindowManager wm = (WindowManager) context.getSystemService(Context.WINDOW_SERVICE); - if (wm.getDefaultDisplay().getState() != Display.STATE_ON) { + if (context.getDisplay().getState() != Display.STATE_ON) { reason += ",quiescent"; } } diff --git a/core/java/android/view/ViewConfiguration.java b/core/java/android/view/ViewConfiguration.java index 774a2dea6311..f2f0d114653d 100644 --- a/core/java/android/view/ViewConfiguration.java +++ b/core/java/android/view/ViewConfiguration.java @@ -28,6 +28,7 @@ import android.os.Build; import android.os.RemoteException; import android.provider.Settings; import android.util.DisplayMetrics; +import android.util.Size; import android.util.SparseArray; /** @@ -398,11 +399,9 @@ public class ViewConfiguration { mWindowTouchSlop = (int) (sizeAndDensity * WINDOW_TOUCH_SLOP + 0.5f); // Size of the screen in bytes, in ARGB_8888 format - final WindowManager win = (WindowManager)context.getSystemService(Context.WINDOW_SERVICE); - final Display display = win.getDefaultDisplay(); - final Point size = new Point(); - display.getRealSize(size); - mMaximumDrawingCacheSize = 4 * size.x * size.y; + final WindowManager windowManager = context.getSystemService(WindowManager.class); + final Size maxWindowSize = windowManager.getMaximumWindowMetrics().getSize(); + mMaximumDrawingCacheSize = 4 * maxWindowSize.getWidth() * maxWindowSize.getHeight(); mOverscrollDistance = (int) (sizeAndDensity * OVERSCROLL_DISTANCE + 0.5f); mOverflingDistance = (int) (sizeAndDensity * OVERFLING_DISTANCE + 0.5f); diff --git a/core/java/android/view/autofill/AutofillPopupWindow.java b/core/java/android/view/autofill/AutofillPopupWindow.java index 826620710b18..8d3dc83bca0c 100644 --- a/core/java/android/view/autofill/AutofillPopupWindow.java +++ b/core/java/android/view/autofill/AutofillPopupWindow.java @@ -19,13 +19,13 @@ package android.view.autofill; import static android.view.autofill.Helper.sVerbose; import android.annotation.NonNull; -import android.graphics.Point; import android.graphics.Rect; import android.graphics.drawable.Drawable; import android.os.IBinder; import android.os.RemoteException; import android.transition.Transition; import android.util.Log; +import android.util.Size; import android.view.View; import android.view.View.OnTouchListener; import android.view.ViewTreeObserver; @@ -127,11 +127,12 @@ public class AutofillPopupWindow extends PopupWindow { // If it is not fullscreen height, put window at bottom. Computes absolute position. // Note that we cannot easily change default gravity from Gravity.TOP to // Gravity.BOTTOM because PopupWindow base class does not expose computeGravity(). - final Point outPoint = new Point(); - anchor.getContext().getDisplay().getSize(outPoint); - width = outPoint.x; + final WindowManager windowManager = anchor.getContext() + .getSystemService(WindowManager.class); + final Size windowSize = windowManager.getCurrentWindowMetrics().getSize(); + width = windowSize.getWidth(); if (height != LayoutParams.MATCH_PARENT) { - offsetY = outPoint.y - height; + offsetY = windowSize.getHeight() - height; } actualAnchor = anchor; } else if (virtualBounds != null) { diff --git a/core/java/com/android/internal/view/FloatingActionMode.java b/core/java/com/android/internal/view/FloatingActionMode.java index f9e98e7eb473..69b1609377b7 100644 --- a/core/java/com/android/internal/view/FloatingActionMode.java +++ b/core/java/com/android/internal/view/FloatingActionMode.java @@ -29,7 +29,6 @@ import android.view.View; import android.view.ViewConfiguration; import android.view.ViewGroup; import android.view.ViewParent; -import android.view.WindowManager; import android.widget.PopupWindow; import com.android.internal.R; @@ -211,8 +210,7 @@ public final class FloatingActionMode extends ActionMode { } private boolean isContentRectWithinBounds() { - mContext.getSystemService(WindowManager.class) - .getDefaultDisplay().getRealSize(mDisplaySize); + mContext.getDisplay().getRealSize(mDisplaySize); mScreenRect.set(0, 0, mDisplaySize.x, mDisplaySize.y); return intersectsClosed(mContentRectOnScreen, mScreenRect) diff --git a/core/java/com/android/internal/view/menu/MenuPopupHelper.java b/core/java/com/android/internal/view/menu/MenuPopupHelper.java index bac602509148..0aeaa47ba3d8 100644 --- a/core/java/com/android/internal/view/menu/MenuPopupHelper.java +++ b/core/java/com/android/internal/view/menu/MenuPopupHelper.java @@ -24,10 +24,12 @@ import android.compat.annotation.UnsupportedAppUsage; import android.content.Context; import android.graphics.Point; import android.graphics.Rect; +import android.util.Size; import android.view.Display; import android.view.Gravity; import android.view.View; import android.view.WindowManager; +import android.view.WindowMetrics; import android.widget.PopupWindow.OnDismissListener; import com.android.internal.view.menu.MenuPresenter.Callback; @@ -224,13 +226,10 @@ public class MenuPopupHelper implements MenuHelper { */ @NonNull private MenuPopup createPopup() { - final WindowManager windowManager = (WindowManager) mContext.getSystemService( - Context.WINDOW_SERVICE); - final Display display = windowManager.getDefaultDisplay(); - final Point displaySize = new Point(); - display.getRealSize(displaySize); + final WindowManager windowManager = mContext.getSystemService(WindowManager.class); + final Size maxWindowSize = windowManager.getMaximumWindowMetrics().getSize(); - final int smallestWidth = Math.min(displaySize.x, displaySize.y); + final int smallestWidth = Math.min(maxWindowSize.getWidth(), maxWindowSize.getHeight()); final int minSmallestWidthCascading = mContext.getResources().getDimensionPixelSize( com.android.internal.R.dimen.cascading_menus_min_smallest_width); final boolean enableCascadingSubmenus = smallestWidth >= minSmallestWidthCascading; diff --git a/core/tests/coretests/BstatsTestApp/src/com/android/coretests/apps/bstatstestapp/TestService.java b/core/tests/coretests/BstatsTestApp/src/com/android/coretests/apps/bstatstestapp/TestService.java index 8a22aca6464d..a027f9eb3a4e 100644 --- a/core/tests/coretests/BstatsTestApp/src/com/android/coretests/apps/bstatstestapp/TestService.java +++ b/core/tests/coretests/BstatsTestApp/src/com/android/coretests/apps/bstatstestapp/TestService.java @@ -22,12 +22,12 @@ import android.app.NotificationManager; import android.app.Service; import android.content.Intent; import android.graphics.Color; -import android.graphics.Point; import android.os.Handler; import android.os.IBinder; import android.os.Process; import android.os.RemoteException; import android.util.Log; +import android.util.Size; import android.view.Gravity; import android.view.View; import android.view.ViewGroup; @@ -108,16 +108,15 @@ public class TestService extends Service { @Override public void showApplicationOverlay() throws RemoteException { final WindowManager wm = TestService.this.getSystemService(WindowManager.class); - final Point size = new Point(); - wm.getDefaultDisplay().getSize(size); + final Size size = wm.getCurrentWindowMetrics().getSize(); final WindowManager.LayoutParams wmlp = new WindowManager.LayoutParams( WindowManager.LayoutParams.TYPE_APPLICATION_OVERLAY, WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE | WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON | WindowManager.LayoutParams.FLAG_NOT_TOUCHABLE); - wmlp.width = size.x / 2; - wmlp.height = size.y / 2; + wmlp.width = size.getWidth() / 2; + wmlp.height = size.getHeight() / 2; wmlp.gravity = Gravity.CENTER | Gravity.LEFT; wmlp.setTitle(TAG); diff --git a/core/tests/coretests/src/android/content/ContextTest.java b/core/tests/coretests/src/android/content/ContextTest.java index b1a54dcced46..f074233070d1 100644 --- a/core/tests/coretests/src/android/content/ContextTest.java +++ b/core/tests/coretests/src/android/content/ContextTest.java @@ -48,6 +48,7 @@ public class ContextTest { assertEquals(testContext.getDisplay().getDisplayId(), testContext.getDisplayId()); } + // TODO(b/128338354): Re-visit this test after introducing WindowContext @Test public void testDisplayIdForDefaultDisplayContext() { final Context testContext = diff --git a/core/tests/coretests/src/android/util/GridScenario.java b/core/tests/coretests/src/android/util/GridScenario.java index 0f1730e207d5..4809a213ab48 100644 --- a/core/tests/coretests/src/android/util/GridScenario.java +++ b/core/tests/coretests/src/android/util/GridScenario.java @@ -233,7 +233,7 @@ public abstract class GridScenario extends Activity { // turn off title bar requestWindowFeature(Window.FEATURE_NO_TITLE); - mScreenHeight = getWindowManager().getDefaultDisplay().getHeight(); + mScreenHeight = getWindowManager().getCurrentWindowMetrics().getSize().getHeight(); final Params params = new Params(); init(params); diff --git a/core/tests/coretests/src/android/util/ListScenario.java b/core/tests/coretests/src/android/util/ListScenario.java index 129484af75de..d4e5a438d855 100644 --- a/core/tests/coretests/src/android/util/ListScenario.java +++ b/core/tests/coretests/src/android/util/ListScenario.java @@ -306,7 +306,7 @@ public abstract class ListScenario extends Activity { requestWindowFeature(Window.FEATURE_NO_TITLE); - mScreenHeight = getWindowManager().getDefaultDisplay().getHeight(); + mScreenHeight = getWindowManager().getCurrentWindowMetrics().getSize().getHeight(); final Params params = createParams(); init(params); diff --git a/core/tests/coretests/src/android/util/ScrollViewScenario.java b/core/tests/coretests/src/android/util/ScrollViewScenario.java index e9eb978805bf..2c0aa7362dfa 100644 --- a/core/tests/coretests/src/android/util/ScrollViewScenario.java +++ b/core/tests/coretests/src/android/util/ScrollViewScenario.java @@ -239,7 +239,7 @@ public abstract class ScrollViewScenario extends Activity { // for test stability, turn off title bar requestWindowFeature(Window.FEATURE_NO_TITLE); - int screenHeight = getWindowManager().getDefaultDisplay().getHeight() + int screenHeight = getWindowManager().getCurrentWindowMetrics().getSize().getHeight() - 25; mLinearLayout = new LinearLayout(this); mLinearLayout.setOrientation(LinearLayout.VERTICAL); diff --git a/core/tests/coretests/src/android/view/BigCache.java b/core/tests/coretests/src/android/view/BigCache.java index 6a1bcaaf2d00..e465a859218a 100644 --- a/core/tests/coretests/src/android/view/BigCache.java +++ b/core/tests/coretests/src/android/view/BigCache.java @@ -18,6 +18,7 @@ package android.view; import android.app.Activity; import android.os.Bundle; +import android.util.Size; import android.widget.LinearLayout; import android.widget.ScrollView; @@ -38,9 +39,9 @@ public class BigCache extends Activity { ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.WRAP_CONTENT)); final int cacheSize = ViewConfiguration.getMaximumDrawingCacheSize(); - final Display display = getWindowManager().getDefaultDisplay(); - final int screenWidth = display.getWidth(); - final int screenHeight = display.getHeight(); + final Size windowSize = getWindowManager().getCurrentWindowMetrics().getSize(); + final int screenWidth = windowSize.getWidth(); + final int screenHeight = windowSize.getHeight(); final View tiny = new View(this); tiny.setId(R.id.a); diff --git a/core/tests/coretests/src/android/view/ScaleGestureDetectorTest.java b/core/tests/coretests/src/android/view/ScaleGestureDetectorTest.java index f63a4548b478..039387c85b11 100644 --- a/core/tests/coretests/src/android/view/ScaleGestureDetectorTest.java +++ b/core/tests/coretests/src/android/view/ScaleGestureDetectorTest.java @@ -22,8 +22,7 @@ import static androidx.test.espresso.matcher.ViewMatchers.withId; import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertTrue; -import android.content.Context; -import android.util.DisplayMetrics; +import android.util.Size; import android.widget.TextView; import androidx.test.filters.LargeTest; @@ -54,25 +53,23 @@ public class ScaleGestureDetectorTest { final float initialScaleFactor = 1.0f; assertEquals(initialScaleFactor, mScaleGestureActivity.getScaleFactor(), 0f); - // Specify start and end coordinates, irrespective of device display size. - final DisplayMetrics dm = new DisplayMetrics(); - final WindowManager wm = (WindowManager) (mScaleGestureActivity.getApplicationContext()) - .getSystemService(Context.WINDOW_SERVICE); - wm.getDefaultDisplay().getMetrics(dm); - final int displayWidth = dm.widthPixels; - final int displayHeight = dm.heightPixels; + // Specify start and end coordinates with respect to the window size. + final WindowManager wm = mScaleGestureActivity.getSystemService(WindowManager.class); + final Size windowSize = wm.getCurrentWindowMetrics().getSize(); + final int windowWidth = windowSize.getWidth(); + final int windowHeight = windowSize.getHeight(); // Obtain coordinates to perform pinch and zoom from the center, to 75% of the display. - final int centerX = displayWidth / 2; - final int centerY = displayHeight / 2; + final int centerX = windowWidth / 2; + final int centerY = windowHeight / 2; // Offset center coordinates by one, so that the two starting points are different. final float[] firstFingerStartCoords = new float[] {centerX + 1.0f, centerY - 1.0f}; final float[] firstFingerEndCoords = - new float[] {0.75f * displayWidth, 0.25f * displayHeight}; + new float[] {0.75f * windowWidth, 0.25f * windowHeight}; final float[] secondFingerStartCoords = new float[] {centerX - 1.0f, centerY + 1.0f}; final float[] secondFingerEndCoords = - new float[] {0.25f * displayWidth, 0.75f * displayHeight}; + new float[] {0.25f * windowWidth, 0.75f * windowHeight}; onView(withId(R.id.article)).perform(new PinchZoomAction(firstFingerStartCoords, firstFingerEndCoords, secondFingerStartCoords, secondFingerEndCoords, diff --git a/core/tests/coretests/src/android/view/inputmethod/InputMethodManagerTest.java b/core/tests/coretests/src/android/view/inputmethod/InputMethodManagerTest.java index 9f259a841319..d70572444128 100644 --- a/core/tests/coretests/src/android/view/inputmethod/InputMethodManagerTest.java +++ b/core/tests/coretests/src/android/view/inputmethod/InputMethodManagerTest.java @@ -16,11 +16,13 @@ package android.view.inputmethod; +import static android.view.Display.DEFAULT_DISPLAY; + import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertNotNull; import android.content.Context; -import android.view.WindowManager; +import android.hardware.display.DisplayManager; import androidx.test.InstrumentationRegistry; import androidx.test.filters.SmallTest; @@ -43,9 +45,9 @@ public class InputMethodManagerTest { final Context testContext = InstrumentationRegistry.getInstrumentation() .getTargetContext(); - final WindowManager wm = testContext.getSystemService(WindowManager.class); + final DisplayManager dm = testContext.getSystemService(DisplayManager.class); final Context defaultDisplayContext = - testContext.createDisplayContext(wm.getDefaultDisplay()); + testContext.createDisplayContext(dm.getDisplay(DEFAULT_DISPLAY)); final InputMethodManager imm = defaultDisplayContext.getSystemService(InputMethodManager.class); assertEquals("InputMethodManager.getInstance() always returns the instance for the default" diff --git a/core/tests/coretests/src/android/view/menu/ContextMenuTest.java b/core/tests/coretests/src/android/view/menu/ContextMenuTest.java index ba85d765ceda..d5825e20163c 100644 --- a/core/tests/coretests/src/android/view/menu/ContextMenuTest.java +++ b/core/tests/coretests/src/android/view/menu/ContextMenuTest.java @@ -16,11 +16,9 @@ package android.view.menu; -import android.content.Context; -import android.graphics.Point; import android.test.ActivityInstrumentationTestCase; import android.util.PollingCheck; -import android.view.Display; +import android.util.Size; import android.view.View; import android.view.WindowManager; import android.widget.espresso.ContextMenuUtils; @@ -82,12 +80,9 @@ public class ContextMenuTest extends ActivityInstrumentationTestCase<ContextMenu * Returns the minimum of the default display's width and height. */ private int getMinScreenDimension() { - final WindowManager windowManager = (WindowManager) getActivity().getSystemService( - Context.WINDOW_SERVICE); - final Display display = windowManager.getDefaultDisplay(); - final Point displaySize = new Point(); - display.getRealSize(displaySize); - return Math.min(displaySize.x, displaySize.y); + final WindowManager windowManager = getActivity().getSystemService(WindowManager.class); + final Size maxWindowSize = windowManager.getMaximumWindowMetrics().getSize(); + return Math.min(maxWindowSize.getWidth(), maxWindowSize.getHeight()); } /** diff --git a/core/tests/coretests/src/android/widget/focus/ListOfInternalSelectionViews.java b/core/tests/coretests/src/android/widget/focus/ListOfInternalSelectionViews.java index 73e4ea8f718d..8e90a824c873 100644 --- a/core/tests/coretests/src/android/widget/focus/ListOfInternalSelectionViews.java +++ b/core/tests/coretests/src/android/widget/focus/ListOfInternalSelectionViews.java @@ -17,7 +17,6 @@ package android.widget.focus; import android.app.Activity; -import android.graphics.Point; import android.os.Bundle; import android.util.InternalSelectionView; import android.view.View; @@ -112,9 +111,7 @@ public class ListOfInternalSelectionViews extends Activity { protected void onCreate(Bundle icicle) { super.onCreate(icicle); - Point size = new Point(); - getWindowManager().getDefaultDisplay().getSize(size); - mScreenHeight = size.y; + mScreenHeight = getWindowManager().getCurrentWindowMetrics().getSize().getHeight(); Bundle extras = getIntent().getExtras(); if (extras != null) { diff --git a/core/tests/coretests/src/android/widget/gridview/touch/GridTouchVerticalSpacingStackFromBottomTest.java b/core/tests/coretests/src/android/widget/gridview/touch/GridTouchVerticalSpacingStackFromBottomTest.java index 0d3092cbc2f3..fd1dbfc63708 100644 --- a/core/tests/coretests/src/android/widget/gridview/touch/GridTouchVerticalSpacingStackFromBottomTest.java +++ b/core/tests/coretests/src/android/widget/gridview/touch/GridTouchVerticalSpacingStackFromBottomTest.java @@ -106,9 +106,10 @@ public class GridTouchVerticalSpacingStackFromBottomTest extends ActivityInstrum int firstTop = firstChild.getTop(); + int windowHeight = mActivity.getWindowManager().getCurrentWindowMetrics().getSize() + .getHeight(); int distance = TouchUtils.dragViewBy(this, firstChild, - Gravity.BOTTOM | Gravity.CENTER_HORIZONTAL, 0, - (int) (mActivity.getWindowManager().getDefaultDisplay().getHeight() * 0.75f)); + Gravity.BOTTOM | Gravity.CENTER_HORIZONTAL, 0, (int) (windowHeight * 0.75f)); assertEquals("View scrolled to wrong position", firstTop + (distance - mViewConfig.getScaledTouchSlop() - 1), firstChild.getTop()); diff --git a/core/tests/coretests/src/android/widget/listview/AdjacentListsWithAdjacentISVsInside.java b/core/tests/coretests/src/android/widget/listview/AdjacentListsWithAdjacentISVsInside.java index 9e49719c6527..e6195b147045 100644 --- a/core/tests/coretests/src/android/widget/listview/AdjacentListsWithAdjacentISVsInside.java +++ b/core/tests/coretests/src/android/widget/listview/AdjacentListsWithAdjacentISVsInside.java @@ -65,7 +65,8 @@ public class AdjacentListsWithAdjacentISVsInside extends Activity { protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); - final int desiredHeight = (int) (0.8 * getWindowManager().getDefaultDisplay().getHeight()); + final int desiredHeight = + (int) (0.8 * getWindowManager().getCurrentWindowMetrics().getSize().getHeight()); mLeftListView = new ListView(this); mLeftListView.setAdapter(new AdjacentISVAdapter(desiredHeight)); diff --git a/core/tests/coretests/src/com/android/internal/policy/DecorContextTest.java b/core/tests/coretests/src/com/android/internal/policy/DecorContextTest.java index cd706089929e..cdcf23fc10bb 100644 --- a/core/tests/coretests/src/com/android/internal/policy/DecorContextTest.java +++ b/core/tests/coretests/src/com/android/internal/policy/DecorContextTest.java @@ -26,7 +26,6 @@ import android.platform.test.annotations.Presubmit; import android.view.Display; import android.view.DisplayAdjustments; import android.view.DisplayInfo; -import android.view.WindowManager; import androidx.test.InstrumentationRegistry; import androidx.test.filters.SmallTest; @@ -71,8 +70,7 @@ public final class DecorContextTest { private static void assertDecorContextDisplay(int expectedDisplayId, DecorContext decorContext) { - WindowManager wm = (WindowManager) decorContext.getSystemService(Context.WINDOW_SERVICE); - Display associatedDisplay = wm.getDefaultDisplay(); + Display associatedDisplay = decorContext.getDisplay(); assertEquals(expectedDisplayId, associatedDisplay.getDisplayId()); } } diff --git a/media/java/android/mtp/MtpDatabase.java b/media/java/android/mtp/MtpDatabase.java index f3c071a06eba..a828e2d04347 100755 --- a/media/java/android/mtp/MtpDatabase.java +++ b/media/java/android/mtp/MtpDatabase.java @@ -722,6 +722,7 @@ public class MtpDatabase implements AutoCloseable { return MtpConstants.RESPONSE_OK; case MtpConstants.DEVICE_PROPERTY_IMAGE_SIZE: // use screen size as max image size + // TODO(b/147721765): Add support for foldables/multi-display devices. Display display = ((WindowManager) mContext.getSystemService( Context.WINDOW_SERVICE)).getDefaultDisplay(); int width = display.getMaximumSizeDimension(); diff --git a/media/tests/MediaFrameworkTest/src/com/android/mediaframeworktest/helpers/CameraTestUtils.java b/media/tests/MediaFrameworkTest/src/com/android/mediaframeworktest/helpers/CameraTestUtils.java index 0ae640dd7910..25220951dd7b 100644 --- a/media/tests/MediaFrameworkTest/src/com/android/mediaframeworktest/helpers/CameraTestUtils.java +++ b/media/tests/MediaFrameworkTest/src/com/android/mediaframeworktest/helpers/CameraTestUtils.java @@ -58,7 +58,6 @@ import android.os.Handler; import android.util.Log; import android.util.Pair; import android.util.Size; -import android.view.Display; import android.view.Surface; import android.view.WindowManager; @@ -2211,14 +2210,14 @@ public class CameraTestUtils extends Assert { } public static Size getPreviewSizeBound(WindowManager windowManager, Size bound) { - Display display = windowManager.getDefaultDisplay(); + Size windowSize = windowManager.getCurrentWindowMetrics().getSize(); - int width = display.getWidth(); - int height = display.getHeight(); + int width = windowSize.getWidth(); + int height = windowSize.getHeight(); if (height > width) { height = width; - width = display.getHeight(); + width = windowSize.getHeight(); } if (bound.getWidth() <= width && diff --git a/packages/FakeOemFeatures/src/com/android/fakeoemfeatures/FakeApp.java b/packages/FakeOemFeatures/src/com/android/fakeoemfeatures/FakeApp.java index c9e0d0ab351d..d4eb2a9c75d0 100644 --- a/packages/FakeOemFeatures/src/com/android/fakeoemfeatures/FakeApp.java +++ b/packages/FakeOemFeatures/src/com/android/fakeoemfeatures/FakeApp.java @@ -16,6 +16,9 @@ package com.android.fakeoemfeatures; +import static android.view.Display.DEFAULT_DISPLAY; +import static android.view.WindowManager.LayoutParams.TYPE_APPLICATION_OVERLAY; + import android.app.ActivityManager; import android.app.ActivityThread; import android.app.AlertDialog; @@ -25,9 +28,11 @@ import android.content.ComponentName; import android.content.Context; import android.content.Intent; import android.content.ServiceConnection; +import android.hardware.display.DisplayManager; import android.os.Handler; import android.os.IBinder; import android.os.Message; +import android.util.Size; import android.util.Slog; import android.view.Display; import android.view.ViewGroup; @@ -94,8 +99,13 @@ public class FakeApp extends Application { return; } - final WindowManager wm = (WindowManager)getSystemService(Context.WINDOW_SERVICE); - final Display display = wm.getDefaultDisplay(); + // Construct an instance of WindowManager to add the window of TYPE_APPLICATION_OVERLAY to + // the default display. + final DisplayManager dm = getSystemService(DisplayManager.class); + final Display defaultDisplay = dm.getDisplay(DEFAULT_DISPLAY); + final Context windowContext = createDisplayContext(defaultDisplay) + .createWindowContext(TYPE_APPLICATION_OVERLAY, null /* options */); + final WindowManager wm = windowContext.getSystemService(WindowManager.class); // Check to make sure we are not running on a user build. If this // is a user build, WARN! Do not want! @@ -108,14 +118,14 @@ public class FakeApp extends Application { builder.setCancelable(false); builder.setPositiveButton("I understand", null); Dialog dialog = builder.create(); - dialog.getWindow().setType(WindowManager.LayoutParams.TYPE_APPLICATION_OVERLAY); + dialog.getWindow().setType(TYPE_APPLICATION_OVERLAY); dialog.show(); } // Make a fake window that is always around eating graphics resources. FakeView view = new FakeView(this); WindowManager.LayoutParams lp = new WindowManager.LayoutParams( - WindowManager.LayoutParams.TYPE_APPLICATION_OVERLAY, + TYPE_APPLICATION_OVERLAY, WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE | WindowManager.LayoutParams.FLAG_NOT_TOUCHABLE | WindowManager.LayoutParams.FLAG_LAYOUT_NO_LIMITS); @@ -124,7 +134,8 @@ public class FakeApp extends Application { } lp.width = ViewGroup.LayoutParams.MATCH_PARENT; lp.height = ViewGroup.LayoutParams.MATCH_PARENT; - int maxSize = display.getMaximumSizeDimension(); + Size maxWindowSize = wm.getMaximumWindowMetrics().getSize(); + int maxSize = Math.max(maxWindowSize.getWidth(), maxWindowSize.getHeight()); maxSize *= 2; lp.x = maxSize; lp.y = maxSize; diff --git a/packages/FakeOemFeatures/src/com/android/fakeoemfeatures/FakeBackgroundService.java b/packages/FakeOemFeatures/src/com/android/fakeoemfeatures/FakeBackgroundService.java index ff09000b7bbd..df00eee63b50 100644 --- a/packages/FakeOemFeatures/src/com/android/fakeoemfeatures/FakeBackgroundService.java +++ b/packages/FakeOemFeatures/src/com/android/fakeoemfeatures/FakeBackgroundService.java @@ -16,6 +16,9 @@ package com.android.fakeoemfeatures; +import static android.view.Display.DEFAULT_DISPLAY; +import static android.view.WindowManager.LayoutParams.TYPE_APPLICATION_OVERLAY; + import java.util.ArrayList; import java.util.Random; @@ -23,9 +26,11 @@ import android.app.Dialog; import android.app.Service; import android.content.Context; import android.content.Intent; +import android.hardware.display.DisplayManager; import android.os.Handler; import android.os.IBinder; import android.os.Message; +import android.util.Size; import android.view.Display; import android.view.ViewGroup; import android.view.WindowManager; @@ -68,13 +73,15 @@ public class FakeBackgroundService extends Service { super.onCreate(); mHandler.sendEmptyMessageDelayed(MSG_TICK, TICK_DELAY); - final WindowManager wm = (WindowManager)getSystemService(Context.WINDOW_SERVICE); - final Display display = wm.getDefaultDisplay(); + final DisplayManager dm = getSystemService(DisplayManager.class); + final Display display = dm.getDisplay(DEFAULT_DISPLAY); + final Context windowContext = createDisplayContext(display) + .createWindowContext(TYPE_APPLICATION_OVERLAY, null /* options */); // Make a fake window that is always around eating graphics resources. - FakeView view = new FakeView(this); - Dialog dialog = new Dialog(this, android.R.style.Theme_Holo_Dialog); - dialog.getWindow().setType(WindowManager.LayoutParams.TYPE_APPLICATION_OVERLAY); + FakeView view = new FakeView(windowContext); + Dialog dialog = new Dialog(windowContext, android.R.style.Theme_Holo_Dialog); + dialog.getWindow().setType(TYPE_APPLICATION_OVERLAY); dialog.getWindow().setFlags( WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE | WindowManager.LayoutParams.FLAG_NOT_TOUCHABLE @@ -89,7 +96,11 @@ public class FakeBackgroundService extends Service { dialog.getWindow().setLayout(ViewGroup.LayoutParams.MATCH_PARENT, ViewGroup.LayoutParams.MATCH_PARENT); WindowManager.LayoutParams lp = dialog.getWindow().getAttributes(); - int maxSize = display.getMaximumSizeDimension(); + // Create an instance of WindowManager that is adjusted to the area of the display dedicated + // for windows with type TYPE_APPLICATION_OVERLAY. + final WindowManager wm = windowContext.getSystemService(WindowManager.class); + Size maxWindowSize = wm.getMaximumWindowMetrics().getSize(); + int maxSize = Math.max(maxWindowSize.getWidth(), maxWindowSize.getHeight()); maxSize *= 2; lp.x = maxSize; lp.y = maxSize; diff --git a/packages/WallpaperCropper/src/com/android/photos/views/TiledImageRenderer.java b/packages/WallpaperCropper/src/com/android/photos/views/TiledImageRenderer.java index 950107301af3..fcb113e90720 100644 --- a/packages/WallpaperCropper/src/com/android/photos/views/TiledImageRenderer.java +++ b/packages/WallpaperCropper/src/com/android/photos/views/TiledImageRenderer.java @@ -26,7 +26,6 @@ import android.util.Log; import android.util.Pools.Pool; import android.util.Pools.SynchronizedPool; import android.view.View; -import android.view.WindowManager; import com.android.gallery3d.common.Utils; import com.android.gallery3d.glrenderer.BasicTexture; @@ -164,9 +163,7 @@ public class TiledImageRenderer { private static boolean isHighResolution(Context context) { DisplayMetrics metrics = new DisplayMetrics(); - WindowManager wm = (WindowManager) - context.getSystemService(Context.WINDOW_SERVICE); - wm.getDefaultDisplay().getMetrics(metrics); + context.getDisplay().getMetrics(metrics); return metrics.heightPixels > 2048 || metrics.widthPixels > 2048; } diff --git a/packages/WallpaperCropper/src/com/android/wallpapercropper/WallpaperCropActivity.java b/packages/WallpaperCropper/src/com/android/wallpapercropper/WallpaperCropActivity.java index f878b4d11f72..6112da5cd13b 100644 --- a/packages/WallpaperCropper/src/com/android/wallpapercropper/WallpaperCropActivity.java +++ b/packages/WallpaperCropper/src/com/android/wallpapercropper/WallpaperCropActivity.java @@ -37,9 +37,9 @@ import android.net.Uri; import android.os.AsyncTask; import android.os.Bundle; import android.util.Log; +import android.util.Size; import android.view.Display; import android.view.View; -import android.view.WindowManager; import android.widget.Toast; import com.android.gallery3d.common.Utils; @@ -231,18 +231,18 @@ public class WallpaperCropActivity extends Activity { return x * aspectRatio + y; } - static protected Point getDefaultWallpaperSize(Resources res, WindowManager windowManager) { + static protected Point getDefaultWallpaperSize(Resources res, Display display) { if (sDefaultWallpaperSize == null) { Point minDims = new Point(); Point maxDims = new Point(); - windowManager.getDefaultDisplay().getCurrentSizeRange(minDims, maxDims); + display.getCurrentSizeRange(minDims, maxDims); int maxDim = Math.max(maxDims.x, maxDims.y); int minDim = Math.max(minDims.x, minDims.y); if (android.os.Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.JELLY_BEAN_MR1) { Point realSize = new Point(); - windowManager.getDefaultDisplay().getRealSize(realSize); + display.getRealSize(realSize); maxDim = Math.max(realSize.x, realSize.y); minDim = Math.min(realSize.x, realSize.y); } @@ -331,8 +331,7 @@ public class WallpaperCropActivity extends Activity { // this device int rotation = getRotationFromExif(res, resId); Point inSize = mCropView.getSourceDimensions(); - Point outSize = getDefaultWallpaperSize(getResources(), - getWindowManager()); + Point outSize = getDefaultWallpaperSize(getResources(), getDisplay()); RectF crop = getMaxCropRect( inSize.x, inSize.y, outSize.x, outSize.y, false); Runnable onEndCrop = new Runnable() { @@ -359,14 +358,11 @@ public class WallpaperCropActivity extends Activity { // Get the crop boolean ltr = mCropView.getLayoutDirection() == View.LAYOUT_DIRECTION_LTR; - Display d = getWindowManager().getDefaultDisplay(); - - Point displaySize = new Point(); - d.getSize(displaySize); - boolean isPortrait = displaySize.x < displaySize.y; + Size windowSize = getWindowManager().getCurrentWindowMetrics().getSize(); + boolean isPortrait = windowSize.getWidth() < windowSize.getHeight(); Point defaultWallpaperSize = getDefaultWallpaperSize(getResources(), - getWindowManager()); + getDisplay()); // Get the crop RectF cropRect = mCropView.getCrop(); diff --git a/services/appwidget/java/com/android/server/appwidget/AppWidgetServiceImpl.java b/services/appwidget/java/com/android/server/appwidget/AppWidgetServiceImpl.java index 97f27caaad48..7151d2b86e83 100644 --- a/services/appwidget/java/com/android/server/appwidget/AppWidgetServiceImpl.java +++ b/services/appwidget/java/com/android/server/appwidget/AppWidgetServiceImpl.java @@ -98,7 +98,6 @@ import android.util.Xml; import android.util.proto.ProtoOutputStream; import android.view.Display; import android.view.View; -import android.view.WindowManager; import android.widget.RemoteViews; import com.android.internal.R; @@ -282,8 +281,7 @@ class AppWidgetServiceImpl extends IAppWidgetService.Stub implements WidgetBacku } private void computeMaximumWidgetBitmapMemory() { - WindowManager wm = (WindowManager) mContext.getSystemService(Context.WINDOW_SERVICE); - Display display = wm.getDefaultDisplay(); + Display display = mContext.getDisplay(); Point size = new Point(); display.getRealSize(size); // Cap memory usage at 1.5 times the size of the display diff --git a/services/core/java/com/android/server/audio/RotationHelper.java b/services/core/java/com/android/server/audio/RotationHelper.java index ad20ed895805..ad7216600e61 100644 --- a/services/core/java/com/android/server/audio/RotationHelper.java +++ b/services/core/java/com/android/server/audio/RotationHelper.java @@ -80,6 +80,7 @@ class RotationHelper { static void updateOrientation() { // Even though we're responding to device orientation events, // use display rotation so audio stays in sync with video/dialogs + // TODO(b/148458001): Support multi-display int newRotation = ((WindowManager) sContext.getSystemService( Context.WINDOW_SERVICE)).getDefaultDisplay().getRotation(); synchronized(sRotationLock) { diff --git a/services/core/java/com/android/server/backup/SystemBackupAgent.java b/services/core/java/com/android/server/backup/SystemBackupAgent.java index 1f4563b801fe..0a30b763b8f4 100644 --- a/services/core/java/com/android/server/backup/SystemBackupAgent.java +++ b/services/core/java/com/android/server/backup/SystemBackupAgent.java @@ -113,6 +113,7 @@ public class SystemBackupAgent extends BackupAgentHelper { throws IOException { // Slot in a restore helper for the older wallpaper backup schema to support restore // from devices still generating data in that format. + //TODO(b/147732386): Add multi-display support for wallpaper backup. addHelper(WALLPAPER_HELPER, new WallpaperBackupHelper(this, new String[] { WALLPAPER_IMAGE_KEY})); diff --git a/services/core/java/com/android/server/display/OverlayDisplayWindow.java b/services/core/java/com/android/server/display/OverlayDisplayWindow.java index 0fdf2daf1c8d..49f0d35d2e78 100644 --- a/services/core/java/com/android/server/display/OverlayDisplayWindow.java +++ b/services/core/java/com/android/server/display/OverlayDisplayWindow.java @@ -109,7 +109,8 @@ final class OverlayDisplayWindow implements DumpUtils.Dump { mWindowManager = (WindowManager)context.getSystemService( Context.WINDOW_SERVICE); - mDefaultDisplay = mWindowManager.getDefaultDisplay(); + // TODO(b/148458868): Support multi-display + mDefaultDisplay = mContext.getDisplay(); updateDefaultDisplayInfo(); resize(width, height, densityDpi, false /* doLayout */); diff --git a/services/core/java/com/android/server/wm/AccessibilityController.java b/services/core/java/com/android/server/wm/AccessibilityController.java index d746691b4773..61a33b4fb781 100644 --- a/services/core/java/com/android/server/wm/AccessibilityController.java +++ b/services/core/java/com/android/server/wm/AccessibilityController.java @@ -361,7 +361,7 @@ final class AccessibilityController { private final Region mTempRegion3 = new Region(); private final Region mTempRegion4 = new Region(); - private final Context mContext; + private final Context mDisplayContext; private final WindowManagerService mService; private final MagnifiedViewport mMagnifedViewport; private final Handler mHandler; @@ -378,14 +378,14 @@ final class AccessibilityController { DisplayContent displayContent, Display display, MagnificationCallbacks callbacks) { - mContext = windowManagerService.mContext; + mDisplayContext = windowManagerService.mContext.createDisplayContext(display); mService = windowManagerService; mCallbacks = callbacks; mDisplayContent = displayContent; mDisplay = display; mHandler = new MyHandler(mService.mH.getLooper()); mMagnifedViewport = new MagnifiedViewport(); - mLongAnimationDuration = mContext.getResources().getInteger( + mLongAnimationDuration = mDisplayContext.getResources().getInteger( com.android.internal.R.integer.config_longAnimTime); } @@ -568,8 +568,6 @@ final class AccessibilityController { private final MagnificationSpec mMagnificationSpec = MagnificationSpec.obtain(); - private final WindowManager mWindowManager; - private final float mBorderWidth; private final int mHalfBorderWidth; private final int mDrawBorderInset; @@ -580,14 +578,13 @@ final class AccessibilityController { private int mTempLayer = 0; public MagnifiedViewport() { - mWindowManager = (WindowManager) mContext.getSystemService(Service.WINDOW_SERVICE); - mBorderWidth = mContext.getResources().getDimension( + mBorderWidth = mDisplayContext.getResources().getDimension( com.android.internal.R.dimen.accessibility_magnification_indicator_width); mHalfBorderWidth = (int) Math.ceil(mBorderWidth / 2); mDrawBorderInset = (int) mBorderWidth / 2; - mWindow = new ViewportWindow(mContext); + mWindow = new ViewportWindow(mDisplayContext); - if (mContext.getResources().getConfiguration().isScreenRound()) { + if (mDisplayContext.getResources().getConfiguration().isScreenRound()) { mCircularPath = new Path(); mDisplay.getRealSize(mTempPoint); final int centerXY = mTempPoint.x / 2; @@ -916,7 +913,7 @@ final class AccessibilityController { public void updateSize(SurfaceControl.Transaction t) { synchronized (mService.mGlobalLock) { - mWindowManager.getDefaultDisplay().getRealSize(mTempPoint); + mDisplay.getRealSize(mTempPoint); t.setBufferSize(mSurfaceControl, mTempPoint.x, mTempPoint.y); invalidate(mDirtyRect); } diff --git a/services/core/java/com/android/server/wm/ImmersiveModeConfirmation.java b/services/core/java/com/android/server/wm/ImmersiveModeConfirmation.java index ef6f84703723..2f02ffb17d3a 100644 --- a/services/core/java/com/android/server/wm/ImmersiveModeConfirmation.java +++ b/services/core/java/com/android/server/wm/ImmersiveModeConfirmation.java @@ -275,7 +275,7 @@ public class ImmersiveModeConfirmation { super.onAttachedToWindow(); DisplayMetrics metrics = new DisplayMetrics(); - getWindowManager().getDefaultDisplay().getMetrics(metrics); + mContext.getDisplay().getMetrics(metrics); float density = metrics.density; getViewTreeObserver().addOnComputeInternalInsetsListener(mInsetsListener); diff --git a/services/java/com/android/server/SystemServer.java b/services/java/com/android/server/SystemServer.java index df2b9e932fbc..57b94058b317 100644 --- a/services/java/com/android/server/SystemServer.java +++ b/services/java/com/android/server/SystemServer.java @@ -72,7 +72,6 @@ import android.util.DisplayMetrics; import android.util.EventLog; import android.util.Slog; import android.util.StatsLog; -import android.view.WindowManager; import android.view.contentcapture.ContentCaptureManager; import com.android.internal.R; @@ -2083,8 +2082,7 @@ public final class SystemServer { // propagate to it. final Configuration config = wm.computeNewConfiguration(DEFAULT_DISPLAY); DisplayMetrics metrics = new DisplayMetrics(); - WindowManager w = (WindowManager) context.getSystemService(Context.WINDOW_SERVICE); - w.getDefaultDisplay().getMetrics(metrics); + context.getDisplay().getMetrics(metrics); context.getResources().updateConfiguration(config, metrics); // The system context's theme may be configuration-dependent. diff --git a/test-runner/src/android/test/TouchUtils.java b/test-runner/src/android/test/TouchUtils.java index 28dc7b2f900c..bb4e00ba1ef9 100644 --- a/test-runner/src/android/test/TouchUtils.java +++ b/test-runner/src/android/test/TouchUtils.java @@ -222,7 +222,8 @@ public class TouchUtils { */ public static void dragViewToBottom(InstrumentationTestCase test, Activity activity, View v, int stepCount) { - int screenHeight = activity.getWindowManager().getDefaultDisplay().getHeight(); + int screenHeight = + activity.getWindowManager().getCurrentWindowMetrics().getSize().getHeight(); int[] xy = new int[2]; v.getLocationOnScreen(xy); diff --git a/tests/GamePerformance/src/android/gameperformance/BaseTest.java b/tests/GamePerformance/src/android/gameperformance/BaseTest.java index b0640b444914..e7057565499c 100644 --- a/tests/GamePerformance/src/android/gameperformance/BaseTest.java +++ b/tests/GamePerformance/src/android/gameperformance/BaseTest.java @@ -21,7 +21,6 @@ import java.util.concurrent.TimeUnit; import android.annotation.NonNull; import android.content.Context; import android.util.Log; -import android.view.WindowManager; /** * Base class for a test that performs bisection to determine maximum @@ -55,9 +54,7 @@ public abstract class BaseTest { public BaseTest(@NonNull GamePerformanceActivity activity) { mActivity = activity; - final WindowManager windowManager = - (WindowManager)getContext().getSystemService(Context.WINDOW_SERVICE); - mRefreshRate = windowManager.getDefaultDisplay().getRefreshRate(); + mRefreshRate = activity.getDisplay().getRefreshRate(); } @NonNull diff --git a/tests/GamePerformance/src/android/gameperformance/CustomControlView.java b/tests/GamePerformance/src/android/gameperformance/CustomControlView.java index 219085a83b2c..e63736b9ee61 100644 --- a/tests/GamePerformance/src/android/gameperformance/CustomControlView.java +++ b/tests/GamePerformance/src/android/gameperformance/CustomControlView.java @@ -25,18 +25,16 @@ import android.annotation.WorkerThread; import android.app.Activity; import android.content.Context; import android.graphics.Canvas; +import android.graphics.Point; import android.graphics.drawable.AnimationDrawable; -import android.util.Log; -import android.view.WindowManager; import android.widget.AbsoluteLayout; import android.widget.ImageView; -import android.widget.RelativeLayout; /** * View that holds requested number of UI controls as ImageView with an infinite animation. */ public class CustomControlView extends AbsoluteLayout { - private final static int CONTROL_DIMENTION = 48; + private final static int CONTROL_DIMENSION = 48; private final int mPerRowControlCount; private List<Long> mFrameTimes = new ArrayList<>(); @@ -44,8 +42,9 @@ public class CustomControlView extends AbsoluteLayout { public CustomControlView(@NonNull Context context) { super(context); - final WindowManager windowManager = (WindowManager)context.getSystemService(Context.WINDOW_SERVICE); - mPerRowControlCount = windowManager.getDefaultDisplay().getWidth() / CONTROL_DIMENTION; + final Point size = new Point(); + context.getDisplay().getSize(size); + mPerRowControlCount = size.x / CONTROL_DIMENSION; } /** @@ -76,11 +75,11 @@ public class CustomControlView extends AbsoluteLayout { for (int i = 0; i < controlCount; ++i) { final ImageView image = (i == 0) ? new ReferenceImageView(activity) : new ImageView(activity); - final int x = (i % mPerRowControlCount) * CONTROL_DIMENTION; - final int y = (i / mPerRowControlCount) * CONTROL_DIMENTION; + final int x = (i % mPerRowControlCount) * CONTROL_DIMENSION; + final int y = (i / mPerRowControlCount) * CONTROL_DIMENSION; final AbsoluteLayout.LayoutParams layoutParams = new AbsoluteLayout.LayoutParams( - CONTROL_DIMENTION, CONTROL_DIMENTION, x, y); + CONTROL_DIMENSION, CONTROL_DIMENSION, x, y); image.setLayoutParams(layoutParams); image.setBackgroundResource(R.drawable.animation); final AnimationDrawable animation = diff --git a/tests/HwAccelerationTest/src/com/android/test/hwui/TextureViewActivity.java b/tests/HwAccelerationTest/src/com/android/test/hwui/TextureViewActivity.java index 0f4c66817a05..6d8c43c00acf 100644 --- a/tests/HwAccelerationTest/src/com/android/test/hwui/TextureViewActivity.java +++ b/tests/HwAccelerationTest/src/com/android/test/hwui/TextureViewActivity.java @@ -122,7 +122,7 @@ public class TextureViewActivity extends Activity implements TextureView.Surface if (info.facing == Camera.CameraInfo.CAMERA_FACING_BACK) break; } - int rotation = getWindowManager().getDefaultDisplay().getRotation(); + int rotation = getDisplay().getRotation(); int degrees = 0; switch (rotation) { diff --git a/tests/MirrorSurfaceTest/src/com/google/android/test/mirrorsurface/MirrorSurfaceActivity.java b/tests/MirrorSurfaceTest/src/com/google/android/test/mirrorsurface/MirrorSurfaceActivity.java index b863713df15b..e255ce234c65 100644 --- a/tests/MirrorSurfaceTest/src/com/google/android/test/mirrorsurface/MirrorSurfaceActivity.java +++ b/tests/MirrorSurfaceTest/src/com/google/android/test/mirrorsurface/MirrorSurfaceActivity.java @@ -16,6 +16,7 @@ package com.google.android.test.mirrorsurface; +import static android.view.WindowManager.LayoutParams.TYPE_APPLICATION_OVERLAY; import android.app.Activity; import android.graphics.Canvas; @@ -26,7 +27,7 @@ import android.graphics.Rect; import android.os.Bundle; import android.os.Handler; import android.os.RemoteException; -import android.util.DisplayMetrics; +import android.util.Size; import android.view.Gravity; import android.view.IWindowManager; import android.view.MotionEvent; @@ -48,6 +49,8 @@ public class MirrorSurfaceActivity extends Activity implements View.OnClickListe private static final int MOVE_FRAME_AMOUNT = 20; private IWindowManager mIWm; + // An instance of WindowManager that is adjusted for adding windows with type + // TYPE_APPLICATION_OVERLAY. private WindowManager mWm; private SurfaceControl mSurfaceControl = new SurfaceControl(); @@ -57,7 +60,7 @@ public class MirrorSurfaceActivity extends Activity implements View.OnClickListe private View mOverlayView; private View mArrowOverlay; - private Rect mDisplayBounds = new Rect(); + private Rect mWindowBounds = new Rect(); private EditText mScaleText; private EditText mDisplayFrameText; @@ -83,21 +86,21 @@ public class MirrorSurfaceActivity extends Activity implements View.OnClickListe super.onCreate(savedInstanceState); setContentView(R.layout.activity_mirror_surface); - mWm = (WindowManager) getSystemService(WINDOW_SERVICE); + mWm = createWindowContext(TYPE_APPLICATION_OVERLAY, null /* options */) + .getSystemService(WindowManager.class); mIWm = WindowManagerGlobal.getWindowManagerService(); - DisplayMetrics displayMetrics = new DisplayMetrics(); - getWindowManager().getDefaultDisplay().getMetrics(displayMetrics); - mDisplayBounds.set(0, 0, displayMetrics.widthPixels, displayMetrics.heightPixels); + Size windowSize = mWm.getCurrentWindowMetrics().getSize(); + mWindowBounds.set(0, 0, windowSize.getWidth(), windowSize.getHeight()); mScaleText = findViewById(R.id.scale); mDisplayFrameText = findViewById(R.id.displayFrame); mSourcePositionText = findViewById(R.id.sourcePosition); - mCurrFrame.set(0, 0, mDisplayBounds.width() / 2, mDisplayBounds.height() / 2); + mCurrFrame.set(0, 0, mWindowBounds.width() / 2, mWindowBounds.height() / 2); mCurrScale = DEFAULT_SCALE; - mDisplayId = getWindowManager().getDefaultDisplay().getDisplayId(); + mDisplayId = getDisplay().getDisplayId(); updateEditTexts(); findViewById(R.id.mirror_button).setOnClickListener(view -> { @@ -194,8 +197,8 @@ public class MirrorSurfaceActivity extends Activity implements View.OnClickListe private void createMirrorOverlay() { mOverlayView = new LinearLayout(this); - WindowManager.LayoutParams params = new WindowManager.LayoutParams(mDisplayBounds.width(), - mDisplayBounds.height(), + WindowManager.LayoutParams params = new WindowManager.LayoutParams(mWindowBounds.width(), + mWindowBounds.height(), WindowManager.LayoutParams.TYPE_APPLICATION_OVERLAY, WindowManager.LayoutParams.FLAG_NOT_TOUCHABLE | WindowManager.LayoutParams.FLAG_NOT_FOCUSABLE, @@ -290,7 +293,7 @@ public class MirrorSurfaceActivity extends Activity implements View.OnClickListe private void updateMirror(Rect displayFrame, float scale) { if (displayFrame.isEmpty()) { - Rect bounds = mDisplayBounds; + Rect bounds = mWindowBounds; int defaultCropW = Math.round(bounds.width() / 2); int defaultCropH = Math.round(bounds.height() / 2); displayFrame.set(0, 0, defaultCropW, defaultCropH); diff --git a/tests/SurfaceComposition/src/android/surfacecomposition/SurfaceCompositionMeasuringActivity.java b/tests/SurfaceComposition/src/android/surfacecomposition/SurfaceCompositionMeasuringActivity.java index 4771b6cfc750..e0a96689c191 100644 --- a/tests/SurfaceComposition/src/android/surfacecomposition/SurfaceCompositionMeasuringActivity.java +++ b/tests/SurfaceComposition/src/android/surfacecomposition/SurfaceCompositionMeasuringActivity.java @@ -23,7 +23,6 @@ import android.app.ActionBar; import android.app.Activity; import android.app.ActivityManager; import android.app.ActivityManager.MemoryInfo; -import android.content.Context; import android.content.pm.PackageManager; import android.graphics.Color; import android.graphics.PixelFormat; @@ -531,8 +530,7 @@ public class SurfaceCompositionMeasuringActivity extends Activity implements OnC } private void detectRefreshRate() { - WindowManager wm = (WindowManager)getSystemService(Context.WINDOW_SERVICE); - mRefreshRate = wm.getDefaultDisplay().getRefreshRate(); + mRefreshRate = getDisplay().getRefreshRate(); if (mRefreshRate < MIN_REFRESH_RATE_SUPPORTED) throw new RuntimeException("Unsupported display refresh rate: " + mRefreshRate); mTargetFPS = mRefreshRate - 2.0f; |