Loading services/core/java/com/android/server/wm/DisplayContent.java +20 −38 Original line number Original line Diff line number Diff line Loading @@ -2355,15 +2355,14 @@ class DisplayContent extends RootDisplayArea implements WindowManagerPolicy.Disp final RoundedCorners roundedCorners = calculateRoundedCornersForRotation(rotation); final RoundedCorners roundedCorners = calculateRoundedCornersForRotation(rotation); final DisplayShape displayShape = calculateDisplayShapeForRotation(rotation); final DisplayShape displayShape = calculateDisplayShapeForRotation(rotation); final Rect appFrame = mDisplayPolicy.getDecorInsetsInfo(rotation, dw, dh).mNonDecorFrame; mDisplayInfo.rotation = rotation; mDisplayInfo.rotation = rotation; mDisplayInfo.logicalWidth = dw; mDisplayInfo.logicalWidth = dw; mDisplayInfo.logicalHeight = dh; mDisplayInfo.logicalHeight = dh; mDisplayInfo.logicalDensityDpi = mBaseDisplayDensity; mDisplayInfo.logicalDensityDpi = mBaseDisplayDensity; mDisplayInfo.physicalXDpi = mBaseDisplayPhysicalXDpi; mDisplayInfo.physicalXDpi = mBaseDisplayPhysicalXDpi; mDisplayInfo.physicalYDpi = mBaseDisplayPhysicalYDpi; mDisplayInfo.physicalYDpi = mBaseDisplayPhysicalYDpi; mDisplayInfo.appWidth = appFrame.width(); mDisplayInfo.appWidth = dw; mDisplayInfo.appHeight = appFrame.height(); mDisplayInfo.appHeight = dh; if (isDefaultDisplay) { if (isDefaultDisplay) { mDisplayInfo.getLogicalMetrics(mRealDisplayMetrics, mDisplayInfo.getLogicalMetrics(mRealDisplayMetrics, CompatibilityInfo.DEFAULT_COMPATIBILITY_INFO, null); CompatibilityInfo.DEFAULT_COMPATIBILITY_INFO, null); Loading Loading @@ -2523,15 +2522,13 @@ class DisplayContent extends RootDisplayArea implements WindowManagerPolicy.Disp /** Compute configuration related to application without changing current display. */ /** Compute configuration related to application without changing current display. */ private void computeScreenAppConfiguration(Configuration outConfig, int dw, int dh, private void computeScreenAppConfiguration(Configuration outConfig, int dw, int dh, int rotation) { int rotation) { final DisplayPolicy.DecorInsets.Info info = mDisplayPolicy.getDecorInsetsInfo(rotation, dw, dh); // AppBounds at the root level should mirror the app screen size. // AppBounds at the root level should mirror the app screen size. outConfig.windowConfiguration.setAppBounds(info.mNonDecorFrame); outConfig.windowConfiguration.setAppBounds(0, 0, dw, dh); outConfig.windowConfiguration.setRotation(rotation); outConfig.windowConfiguration.setRotation(rotation); final float density = mDisplayMetrics.density; final float density = mDisplayMetrics.density; outConfig.screenWidthDp = (int) (info.mConfigFrame.width() / density + 0.5f); outConfig.screenWidthDp = (int) (dw / density + 0.5f); outConfig.screenHeightDp = (int) (info.mConfigFrame.height() / density + 0.5f); outConfig.screenHeightDp = (int) (dh / density + 0.5f); outConfig.compatScreenWidthDp = (int) (outConfig.screenWidthDp / mCompatibleScreenScale); outConfig.compatScreenWidthDp = (int) (outConfig.screenWidthDp / mCompatibleScreenScale); outConfig.compatScreenHeightDp = (int) (outConfig.screenHeightDp / mCompatibleScreenScale); outConfig.compatScreenHeightDp = (int) (outConfig.screenHeightDp / mCompatibleScreenScale); outConfig.orientation = (outConfig.screenWidthDp <= outConfig.screenHeightDp) outConfig.orientation = (outConfig.screenWidthDp <= outConfig.screenHeightDp) Loading Loading @@ -2660,19 +2657,14 @@ class DisplayContent extends RootDisplayArea implements WindowManagerPolicy.Disp unrotDw = dw; unrotDw = dw; unrotDh = dh; unrotDh = dh; } } int sw = reduceCompatConfigWidthSize(0, Surface.ROTATION_0, tmpDm, unrotDw, unrotDh); int sw = reduceCompatConfigWidthSize(0, tmpDm, unrotDw, unrotDh); sw = reduceCompatConfigWidthSize(sw, Surface.ROTATION_90, tmpDm, unrotDh, unrotDw); sw = reduceCompatConfigWidthSize(sw, tmpDm, unrotDh, unrotDw); sw = reduceCompatConfigWidthSize(sw, Surface.ROTATION_180, tmpDm, unrotDw, unrotDh); sw = reduceCompatConfigWidthSize(sw, Surface.ROTATION_270, tmpDm, unrotDh, unrotDw); return sw; return sw; } } private int reduceCompatConfigWidthSize(int curSize, int rotation, private int reduceCompatConfigWidthSize(int curSize, DisplayMetrics dm, int dw, int dh) { DisplayMetrics dm, int dw, int dh) { dm.noncompatWidthPixels = dw; final Rect nonDecorSize = dm.noncompatHeightPixels = dh; mDisplayPolicy.getDecorInsetsInfo(rotation, dw, dh).mNonDecorFrame; dm.noncompatWidthPixels = nonDecorSize.width(); dm.noncompatHeightPixels = nonDecorSize.height(); float scale = CompatibilityInfo.computeCompatibleScaling(dm, null); float scale = CompatibilityInfo.computeCompatibleScaling(dm, null); int size = (int)(((dm.noncompatWidthPixels / scale) / dm.density) + .5f); int size = (int)(((dm.noncompatWidthPixels / scale) / dm.density) + .5f); if (curSize == 0 || size < curSize) { if (curSize == 0 || size < curSize) { Loading Loading @@ -2714,10 +2706,14 @@ class DisplayContent extends RootDisplayArea implements WindowManagerPolicy.Disp displayInfo.largestNominalAppHeight = 0; displayInfo.largestNominalAppHeight = 0; adjustDisplaySizeRanges(displayInfo, Surface.ROTATION_0, unrotDw, unrotDh, overrideConfig); adjustDisplaySizeRanges(displayInfo, Surface.ROTATION_0, unrotDw, unrotDh, overrideConfig); adjustDisplaySizeRanges(displayInfo, Surface.ROTATION_90, unrotDh, unrotDw, overrideConfig); adjustDisplaySizeRanges(displayInfo, Surface.ROTATION_90, unrotDh, unrotDw, overrideConfig); // Override configuration excludes decor insets, so it needs to compute all rotations. // Otherwise, only computes for portrait and landscape based on display size. if (overrideConfig) { adjustDisplaySizeRanges(displayInfo, Surface.ROTATION_180, unrotDw, unrotDh, adjustDisplaySizeRanges(displayInfo, Surface.ROTATION_180, unrotDw, unrotDh, overrideConfig); true /* overrideConfig */); adjustDisplaySizeRanges(displayInfo, Surface.ROTATION_270, unrotDh, unrotDw, adjustDisplaySizeRanges(displayInfo, Surface.ROTATION_270, unrotDh, unrotDw, overrideConfig); true /* overrideConfig */); } if (outConfig == null) { if (outConfig == null) { return; return; Loading @@ -2733,8 +2729,8 @@ class DisplayContent extends RootDisplayArea implements WindowManagerPolicy.Disp final int w; final int w; final int h; final int h; if (!overrideConfig) { if (!overrideConfig) { w = info.mConfigFrame.width(); w = dw; h = info.mConfigFrame.height(); h = dh; } else { } else { w = info.mOverrideConfigFrame.width(); w = info.mOverrideConfigFrame.width(); h = info.mOverrideConfigFrame.height(); h = info.mOverrideConfigFrame.height(); Loading Loading @@ -5247,20 +5243,6 @@ class DisplayContent extends RootDisplayArea implements WindowManagerPolicy.Disp ? ORIENTATION_PORTRAIT : ORIENTATION_LANDSCAPE; ? ORIENTATION_PORTRAIT : ORIENTATION_LANDSCAPE; } } /** * Returns the orientation which is used for app's Configuration (excluding decor insets) when * the display rotation is ROTATION_0. */ int getNaturalConfigurationOrientation() { final Configuration config = getConfiguration(); if (config.windowConfiguration.getDisplayRotation() == ROTATION_0) { return config.orientation; } final Rect frame = mDisplayPolicy.getDecorInsetsInfo( ROTATION_0, mBaseDisplayWidth, mBaseDisplayHeight).mConfigFrame; return frame.width() <= frame.height() ? ORIENTATION_PORTRAIT : ORIENTATION_LANDSCAPE; } void performLayout(boolean initial, boolean updateInputWindows) { void performLayout(boolean initial, boolean updateInputWindows) { Trace.traceBegin(TRACE_TAG_WINDOW_MANAGER, "performLayout"); Trace.traceBegin(TRACE_TAG_WINDOW_MANAGER, "performLayout"); try { try { Loading services/core/java/com/android/server/wm/DisplayPolicy.java +7 −23 Original line number Original line Diff line number Diff line Loading @@ -2045,7 +2045,6 @@ public class DisplayPolicy { static class Info { static class Info { // TODO(b/409608996): // TODO(b/409608996): // Remove mNonDecorInsets, mConfigInsets -> always empty // Remove mNonDecorInsets, mConfigInsets -> always empty // Remove mNonDecorFrame, mConfigFrame -> always the same as display frame /** /** * The insets for the areas that could never be removed, i.e. display cutout and * The insets for the areas that could never be removed, i.e. display cutout and * navigation bar. Note that its meaning is actually "decor insets". The "non" is just * navigation bar. Note that its meaning is actually "decor insets". The "non" is just Loading @@ -2069,23 +2068,16 @@ public class DisplayPolicy { */ */ final Rect mOverrideNonDecorInsets = new Rect(); final Rect mOverrideNonDecorInsets = new Rect(); /** The display frame available after excluding {@link #mNonDecorInsets}. */ final Rect mNonDecorFrame = new Rect(); /** /** * The available (stable) screen size that we should report for the configuration. * Override available (stable) screen size for app compatibility purpose. * This must be no larger than {@link #mNonDecorFrame}; it may be smaller than that * This must be no larger than {@link #mOverrideNonDecorFrame}; it may be smaller than * to account for more transient decoration like a status bar. * that to account for more transient decoration like a status bar. */ final Rect mConfigFrame = new Rect(); /** * Override value of mConfigFrame for app compatibility purpose. */ */ final Rect mOverrideConfigFrame = new Rect(); final Rect mOverrideConfigFrame = new Rect(); /** /** * Override value of mNonDecorFrame for app compatibility purpose. * Override display frame which excludes {@link #mOverrideNonDecorInsets} for app * compatibility purpose. */ */ final Rect mOverrideNonDecorFrame = new Rect(); final Rect mOverrideNonDecorFrame = new Rect(); Loading @@ -2107,8 +2099,6 @@ public class DisplayPolicy { overrideConfigInsets.right, overrideConfigInsets.bottom); overrideConfigInsets.right, overrideConfigInsets.bottom); mOverrideNonDecorInsets.set(overrideDecorInsets.left, overrideDecorInsets.top, mOverrideNonDecorInsets.set(overrideDecorInsets.left, overrideDecorInsets.top, overrideDecorInsets.right, overrideDecorInsets.bottom); overrideDecorInsets.right, overrideDecorInsets.bottom); mNonDecorFrame.set(displayFrame); mConfigFrame.set(displayFrame); mOverrideConfigFrame.set(displayFrame); mOverrideConfigFrame.set(displayFrame); mOverrideConfigFrame.inset(mOverrideConfigInsets); mOverrideConfigFrame.inset(mOverrideConfigInsets); mOverrideNonDecorFrame.set(displayFrame); mOverrideNonDecorFrame.set(displayFrame); Loading @@ -2121,8 +2111,6 @@ public class DisplayPolicy { mConfigInsets.set(other.mConfigInsets); mConfigInsets.set(other.mConfigInsets); mOverrideConfigInsets.set(other.mOverrideConfigInsets); mOverrideConfigInsets.set(other.mOverrideConfigInsets); mOverrideNonDecorInsets.set(other.mOverrideNonDecorInsets); mOverrideNonDecorInsets.set(other.mOverrideNonDecorInsets); mNonDecorFrame.set(other.mNonDecorFrame); mConfigFrame.set(other.mConfigFrame); mOverrideConfigFrame.set(other.mOverrideConfigFrame); mOverrideConfigFrame.set(other.mOverrideConfigFrame); mOverrideNonDecorFrame.set(other.mOverrideNonDecorFrame); mOverrideNonDecorFrame.set(other.mOverrideNonDecorFrame); mNeedUpdate = false; mNeedUpdate = false; Loading @@ -2135,9 +2123,7 @@ public class DisplayPolicy { + ", overrideNonDecorInsets=" + mOverrideNonDecorInsets.toShortString(tmpSb) + ", overrideNonDecorInsets=" + mOverrideNonDecorInsets.toShortString(tmpSb) + ", configInsets=" + mConfigInsets.toShortString(tmpSb) + ", configInsets=" + mConfigInsets.toShortString(tmpSb) + ", overrideConfigInsets=" + mOverrideConfigInsets.toShortString(tmpSb) + ", overrideConfigInsets=" + mOverrideConfigInsets.toShortString(tmpSb) + ", nonDecorFrame=" + mNonDecorFrame.toShortString(tmpSb) + ", overrideNonDecorFrame=" + mOverrideNonDecorFrame.toShortString(tmpSb) + ", overrideNonDecorFrame=" + mOverrideNonDecorFrame.toShortString(tmpSb) + ", configFrame=" + mConfigFrame.toShortString(tmpSb) + ", overrideConfigFrame=" + mOverrideConfigFrame.toShortString(tmpSb) + ", overrideConfigFrame=" + mOverrideConfigFrame.toShortString(tmpSb) + '}'; + '}'; } } Loading Loading @@ -2240,9 +2226,7 @@ public class DisplayPolicy { final DecorInsets.Info newInfo = mDecorInsets.mTmpInfo; final DecorInsets.Info newInfo = mDecorInsets.mTmpInfo; newInfo.update(mDisplayContent, rotation, dw, dh); newInfo.update(mDisplayContent, rotation, dw, dh); final DecorInsets.Info currentInfo = getDecorInsetsInfo(rotation, dw, dh); final DecorInsets.Info currentInfo = getDecorInsetsInfo(rotation, dw, dh); final boolean sameConfigFrame = newInfo.mConfigFrame.equals(currentInfo.mConfigFrame); if (newInfo.mOverrideConfigFrame.equals(currentInfo.mOverrideConfigFrame)) { if (sameConfigFrame && newInfo.mOverrideConfigFrame.equals(currentInfo.mOverrideConfigFrame)) { return false; return false; } } if (mCachedDecorInsets != null && !mCachedDecorInsets.canPreserve() && mScreenOnFully) { if (mCachedDecorInsets != null && !mCachedDecorInsets.canPreserve() && mScreenOnFully) { Loading @@ -2255,7 +2239,7 @@ public class DisplayPolicy { // clients receive the new states earlier. // clients receive the new states earlier. return true; return true; } } return !sameConfigFrame; return false; } } DecorInsets.Info getDecorInsetsInfo(int rotation, int w, int h) { DecorInsets.Info getDecorInsetsInfo(int rotation, int w, int h) { Loading services/core/java/com/android/server/wm/WindowContainer.java +1 −1 Original line number Original line Diff line number Diff line Loading @@ -1462,7 +1462,7 @@ class WindowContainer<E extends WindowContainer> extends ConfigurationContainer< if (requestedOrientation == ActivityInfo.SCREEN_ORIENTATION_NOSENSOR) { if (requestedOrientation == ActivityInfo.SCREEN_ORIENTATION_NOSENSOR) { // NOSENSOR means the display's "natural" orientation, so return that. // NOSENSOR means the display's "natural" orientation, so return that. if (mDisplayContent != null) { if (mDisplayContent != null) { return mDisplayContent.getNaturalConfigurationOrientation(); return mDisplayContent.getNaturalOrientation(); } } } else if (requestedOrientation == ActivityInfo.SCREEN_ORIENTATION_LOCKED) { } else if (requestedOrientation == ActivityInfo.SCREEN_ORIENTATION_LOCKED) { // LOCKED means the activity's orientation remains unchanged, so return existing value. // LOCKED means the activity's orientation remains unchanged, so return existing value. Loading services/tests/wmtests/src/com/android/server/wm/DisplayContentTests.java +2 −7 Original line number Original line Diff line number Diff line Loading @@ -990,16 +990,11 @@ public class DisplayContentTests extends WindowTestsBase { "Screen orientation must be defined by the window even on close-to-square display.", "Screen orientation must be defined by the window even on close-to-square display.", overlay.mAttrs.screenOrientation, dc.getOrientation()); overlay.mAttrs.screenOrientation, dc.getOrientation()); // Assume that a decor window occupies the display height, so the configuration orientation // should be landscape. dc.getDisplayPolicy().getDecorInsetsInfo(ROTATION_0, dc.mBaseDisplayHeight, dc.mBaseDisplayWidth).mConfigFrame.set(0, 0, 1000, 990); dc.computeScreenConfiguration(config, ROTATION_0); dc.computeScreenConfiguration(config, ROTATION_0); dc.onRequestedOverrideConfigurationChanged(config); dc.onRequestedOverrideConfigurationChanged(config); assertEquals(Configuration.ORIENTATION_LANDSCAPE, config.orientation); assertEquals(Configuration.ORIENTATION_PORTRAIT, config.orientation); assertEquals(Configuration.ORIENTATION_LANDSCAPE, dc.getNaturalConfigurationOrientation()); overlay.setOverrideOrientation(SCREEN_ORIENTATION_NOSENSOR); overlay.setOverrideOrientation(SCREEN_ORIENTATION_NOSENSOR); assertEquals(Configuration.ORIENTATION_LANDSCAPE, assertEquals(Configuration.ORIENTATION_PORTRAIT, overlay.getRequestedConfigurationOrientation()); overlay.getRequestedConfigurationOrientation()); // Note that getNaturalOrientation is based on logical display size. So it is portrait if // Note that getNaturalOrientation is based on logical display size. So it is portrait if // the display width equals to height. // the display width equals to height. Loading services/tests/wmtests/src/com/android/server/wm/DisplayPolicyInsetsTests.java +0 −17 Original line number Original line Diff line number Diff line Loading @@ -50,7 +50,6 @@ public class DisplayPolicyInsetsTests extends DisplayPolicyTestsBase { verifyStableInsets(di, 0, STATUS_BAR_HEIGHT, 0, NAV_BAR_HEIGHT); verifyStableInsets(di, 0, STATUS_BAR_HEIGHT, 0, NAV_BAR_HEIGHT); verifyNonDecorInsets(di, 0, 0, 0, NAV_BAR_HEIGHT); verifyNonDecorInsets(di, 0, 0, 0, NAV_BAR_HEIGHT); verifyConsistency(di); } } @Test @Test Loading @@ -59,7 +58,6 @@ public class DisplayPolicyInsetsTests extends DisplayPolicyTestsBase { verifyStableInsets(di, 0, STATUS_BAR_HEIGHT, 0, NAV_BAR_HEIGHT); verifyStableInsets(di, 0, STATUS_BAR_HEIGHT, 0, NAV_BAR_HEIGHT); verifyNonDecorInsets(di, 0, DISPLAY_CUTOUT_HEIGHT, 0, NAV_BAR_HEIGHT); verifyNonDecorInsets(di, 0, DISPLAY_CUTOUT_HEIGHT, 0, NAV_BAR_HEIGHT); verifyConsistency(di); } } @Test @Test Loading @@ -74,7 +72,6 @@ public class DisplayPolicyInsetsTests extends DisplayPolicyTestsBase { verifyStableInsets(di, 0, STATUS_BAR_HEIGHT, 0, NAV_BAR_HEIGHT); verifyStableInsets(di, 0, STATUS_BAR_HEIGHT, 0, NAV_BAR_HEIGHT); verifyNonDecorInsets(di, 0, 0, 0, NAV_BAR_HEIGHT); verifyNonDecorInsets(di, 0, 0, 0, NAV_BAR_HEIGHT); } } verifyConsistency(di); } } @Test @Test Loading @@ -89,7 +86,6 @@ public class DisplayPolicyInsetsTests extends DisplayPolicyTestsBase { verifyStableInsets(di, DISPLAY_CUTOUT_HEIGHT, STATUS_BAR_HEIGHT, 0, NAV_BAR_HEIGHT); verifyStableInsets(di, DISPLAY_CUTOUT_HEIGHT, STATUS_BAR_HEIGHT, 0, NAV_BAR_HEIGHT); verifyNonDecorInsets(di, DISPLAY_CUTOUT_HEIGHT, 0, 0, NAV_BAR_HEIGHT); verifyNonDecorInsets(di, DISPLAY_CUTOUT_HEIGHT, 0, 0, NAV_BAR_HEIGHT); } } verifyConsistency(di); } } @Test @Test Loading @@ -104,7 +100,6 @@ public class DisplayPolicyInsetsTests extends DisplayPolicyTestsBase { verifyStableInsets(di, 0, STATUS_BAR_HEIGHT, 0, NAV_BAR_HEIGHT); verifyStableInsets(di, 0, STATUS_BAR_HEIGHT, 0, NAV_BAR_HEIGHT); verifyNonDecorInsets(di, 0, 0, 0, NAV_BAR_HEIGHT); verifyNonDecorInsets(di, 0, 0, 0, NAV_BAR_HEIGHT); } } verifyConsistency(di); } } @Test @Test Loading @@ -119,7 +114,6 @@ public class DisplayPolicyInsetsTests extends DisplayPolicyTestsBase { verifyStableInsets(di, 0, STATUS_BAR_HEIGHT, DISPLAY_CUTOUT_HEIGHT, NAV_BAR_HEIGHT); verifyStableInsets(di, 0, STATUS_BAR_HEIGHT, DISPLAY_CUTOUT_HEIGHT, NAV_BAR_HEIGHT); verifyNonDecorInsets(di, 0, 0, DISPLAY_CUTOUT_HEIGHT, NAV_BAR_HEIGHT); verifyNonDecorInsets(di, 0, 0, DISPLAY_CUTOUT_HEIGHT, NAV_BAR_HEIGHT); } } verifyConsistency(di); } } @Test @Test Loading @@ -128,7 +122,6 @@ public class DisplayPolicyInsetsTests extends DisplayPolicyTestsBase { verifyStableInsets(di, 0, STATUS_BAR_HEIGHT, 0, NAV_BAR_HEIGHT); verifyStableInsets(di, 0, STATUS_BAR_HEIGHT, 0, NAV_BAR_HEIGHT); verifyNonDecorInsets(di, 0, 0, 0, NAV_BAR_HEIGHT); verifyNonDecorInsets(di, 0, 0, 0, NAV_BAR_HEIGHT); verifyConsistency(di); } } @Test @Test Loading @@ -137,7 +130,6 @@ public class DisplayPolicyInsetsTests extends DisplayPolicyTestsBase { verifyStableInsets(di, 0, STATUS_BAR_HEIGHT, 0, NAV_BAR_HEIGHT + DISPLAY_CUTOUT_HEIGHT); verifyStableInsets(di, 0, STATUS_BAR_HEIGHT, 0, NAV_BAR_HEIGHT + DISPLAY_CUTOUT_HEIGHT); verifyNonDecorInsets(di, 0, 0, 0, NAV_BAR_HEIGHT + DISPLAY_CUTOUT_HEIGHT); verifyNonDecorInsets(di, 0, 0, 0, NAV_BAR_HEIGHT + DISPLAY_CUTOUT_HEIGHT); verifyConsistency(di); } } private void verifyStableInsets(DisplayInfo di, int left, int top, private void verifyStableInsets(DisplayInfo di, int left, int top, Loading @@ -152,15 +144,6 @@ public class DisplayPolicyInsetsTests extends DisplayPolicyTestsBase { getOverrideNonDecorInsets(di), equalTo(new Rect(left, top, right, bottom))); getOverrideNonDecorInsets(di), equalTo(new Rect(left, top, right, bottom))); } } private void verifyConsistency(DisplayInfo di) { final DisplayPolicy.DecorInsets.Info info = mDisplayPolicy.getDecorInsetsInfo( di.rotation, di.logicalWidth, di.logicalHeight); verifyConsistency("configDisplay", di, info.mConfigInsets, info.mConfigFrame.width(), info.mConfigFrame.height()); verifyConsistency("nonDecorDisplay", di, info.mNonDecorInsets, info.mNonDecorFrame.width(), info.mNonDecorFrame.height()); } private void verifyConsistency(String what, DisplayInfo di, Rect insets, int width, private void verifyConsistency(String what, DisplayInfo di, Rect insets, int width, int height) { int height) { mErrorCollector.checkThat(what + ":width", width, mErrorCollector.checkThat(what + ":width", width, Loading Loading
services/core/java/com/android/server/wm/DisplayContent.java +20 −38 Original line number Original line Diff line number Diff line Loading @@ -2355,15 +2355,14 @@ class DisplayContent extends RootDisplayArea implements WindowManagerPolicy.Disp final RoundedCorners roundedCorners = calculateRoundedCornersForRotation(rotation); final RoundedCorners roundedCorners = calculateRoundedCornersForRotation(rotation); final DisplayShape displayShape = calculateDisplayShapeForRotation(rotation); final DisplayShape displayShape = calculateDisplayShapeForRotation(rotation); final Rect appFrame = mDisplayPolicy.getDecorInsetsInfo(rotation, dw, dh).mNonDecorFrame; mDisplayInfo.rotation = rotation; mDisplayInfo.rotation = rotation; mDisplayInfo.logicalWidth = dw; mDisplayInfo.logicalWidth = dw; mDisplayInfo.logicalHeight = dh; mDisplayInfo.logicalHeight = dh; mDisplayInfo.logicalDensityDpi = mBaseDisplayDensity; mDisplayInfo.logicalDensityDpi = mBaseDisplayDensity; mDisplayInfo.physicalXDpi = mBaseDisplayPhysicalXDpi; mDisplayInfo.physicalXDpi = mBaseDisplayPhysicalXDpi; mDisplayInfo.physicalYDpi = mBaseDisplayPhysicalYDpi; mDisplayInfo.physicalYDpi = mBaseDisplayPhysicalYDpi; mDisplayInfo.appWidth = appFrame.width(); mDisplayInfo.appWidth = dw; mDisplayInfo.appHeight = appFrame.height(); mDisplayInfo.appHeight = dh; if (isDefaultDisplay) { if (isDefaultDisplay) { mDisplayInfo.getLogicalMetrics(mRealDisplayMetrics, mDisplayInfo.getLogicalMetrics(mRealDisplayMetrics, CompatibilityInfo.DEFAULT_COMPATIBILITY_INFO, null); CompatibilityInfo.DEFAULT_COMPATIBILITY_INFO, null); Loading Loading @@ -2523,15 +2522,13 @@ class DisplayContent extends RootDisplayArea implements WindowManagerPolicy.Disp /** Compute configuration related to application without changing current display. */ /** Compute configuration related to application without changing current display. */ private void computeScreenAppConfiguration(Configuration outConfig, int dw, int dh, private void computeScreenAppConfiguration(Configuration outConfig, int dw, int dh, int rotation) { int rotation) { final DisplayPolicy.DecorInsets.Info info = mDisplayPolicy.getDecorInsetsInfo(rotation, dw, dh); // AppBounds at the root level should mirror the app screen size. // AppBounds at the root level should mirror the app screen size. outConfig.windowConfiguration.setAppBounds(info.mNonDecorFrame); outConfig.windowConfiguration.setAppBounds(0, 0, dw, dh); outConfig.windowConfiguration.setRotation(rotation); outConfig.windowConfiguration.setRotation(rotation); final float density = mDisplayMetrics.density; final float density = mDisplayMetrics.density; outConfig.screenWidthDp = (int) (info.mConfigFrame.width() / density + 0.5f); outConfig.screenWidthDp = (int) (dw / density + 0.5f); outConfig.screenHeightDp = (int) (info.mConfigFrame.height() / density + 0.5f); outConfig.screenHeightDp = (int) (dh / density + 0.5f); outConfig.compatScreenWidthDp = (int) (outConfig.screenWidthDp / mCompatibleScreenScale); outConfig.compatScreenWidthDp = (int) (outConfig.screenWidthDp / mCompatibleScreenScale); outConfig.compatScreenHeightDp = (int) (outConfig.screenHeightDp / mCompatibleScreenScale); outConfig.compatScreenHeightDp = (int) (outConfig.screenHeightDp / mCompatibleScreenScale); outConfig.orientation = (outConfig.screenWidthDp <= outConfig.screenHeightDp) outConfig.orientation = (outConfig.screenWidthDp <= outConfig.screenHeightDp) Loading Loading @@ -2660,19 +2657,14 @@ class DisplayContent extends RootDisplayArea implements WindowManagerPolicy.Disp unrotDw = dw; unrotDw = dw; unrotDh = dh; unrotDh = dh; } } int sw = reduceCompatConfigWidthSize(0, Surface.ROTATION_0, tmpDm, unrotDw, unrotDh); int sw = reduceCompatConfigWidthSize(0, tmpDm, unrotDw, unrotDh); sw = reduceCompatConfigWidthSize(sw, Surface.ROTATION_90, tmpDm, unrotDh, unrotDw); sw = reduceCompatConfigWidthSize(sw, tmpDm, unrotDh, unrotDw); sw = reduceCompatConfigWidthSize(sw, Surface.ROTATION_180, tmpDm, unrotDw, unrotDh); sw = reduceCompatConfigWidthSize(sw, Surface.ROTATION_270, tmpDm, unrotDh, unrotDw); return sw; return sw; } } private int reduceCompatConfigWidthSize(int curSize, int rotation, private int reduceCompatConfigWidthSize(int curSize, DisplayMetrics dm, int dw, int dh) { DisplayMetrics dm, int dw, int dh) { dm.noncompatWidthPixels = dw; final Rect nonDecorSize = dm.noncompatHeightPixels = dh; mDisplayPolicy.getDecorInsetsInfo(rotation, dw, dh).mNonDecorFrame; dm.noncompatWidthPixels = nonDecorSize.width(); dm.noncompatHeightPixels = nonDecorSize.height(); float scale = CompatibilityInfo.computeCompatibleScaling(dm, null); float scale = CompatibilityInfo.computeCompatibleScaling(dm, null); int size = (int)(((dm.noncompatWidthPixels / scale) / dm.density) + .5f); int size = (int)(((dm.noncompatWidthPixels / scale) / dm.density) + .5f); if (curSize == 0 || size < curSize) { if (curSize == 0 || size < curSize) { Loading Loading @@ -2714,10 +2706,14 @@ class DisplayContent extends RootDisplayArea implements WindowManagerPolicy.Disp displayInfo.largestNominalAppHeight = 0; displayInfo.largestNominalAppHeight = 0; adjustDisplaySizeRanges(displayInfo, Surface.ROTATION_0, unrotDw, unrotDh, overrideConfig); adjustDisplaySizeRanges(displayInfo, Surface.ROTATION_0, unrotDw, unrotDh, overrideConfig); adjustDisplaySizeRanges(displayInfo, Surface.ROTATION_90, unrotDh, unrotDw, overrideConfig); adjustDisplaySizeRanges(displayInfo, Surface.ROTATION_90, unrotDh, unrotDw, overrideConfig); // Override configuration excludes decor insets, so it needs to compute all rotations. // Otherwise, only computes for portrait and landscape based on display size. if (overrideConfig) { adjustDisplaySizeRanges(displayInfo, Surface.ROTATION_180, unrotDw, unrotDh, adjustDisplaySizeRanges(displayInfo, Surface.ROTATION_180, unrotDw, unrotDh, overrideConfig); true /* overrideConfig */); adjustDisplaySizeRanges(displayInfo, Surface.ROTATION_270, unrotDh, unrotDw, adjustDisplaySizeRanges(displayInfo, Surface.ROTATION_270, unrotDh, unrotDw, overrideConfig); true /* overrideConfig */); } if (outConfig == null) { if (outConfig == null) { return; return; Loading @@ -2733,8 +2729,8 @@ class DisplayContent extends RootDisplayArea implements WindowManagerPolicy.Disp final int w; final int w; final int h; final int h; if (!overrideConfig) { if (!overrideConfig) { w = info.mConfigFrame.width(); w = dw; h = info.mConfigFrame.height(); h = dh; } else { } else { w = info.mOverrideConfigFrame.width(); w = info.mOverrideConfigFrame.width(); h = info.mOverrideConfigFrame.height(); h = info.mOverrideConfigFrame.height(); Loading Loading @@ -5247,20 +5243,6 @@ class DisplayContent extends RootDisplayArea implements WindowManagerPolicy.Disp ? ORIENTATION_PORTRAIT : ORIENTATION_LANDSCAPE; ? ORIENTATION_PORTRAIT : ORIENTATION_LANDSCAPE; } } /** * Returns the orientation which is used for app's Configuration (excluding decor insets) when * the display rotation is ROTATION_0. */ int getNaturalConfigurationOrientation() { final Configuration config = getConfiguration(); if (config.windowConfiguration.getDisplayRotation() == ROTATION_0) { return config.orientation; } final Rect frame = mDisplayPolicy.getDecorInsetsInfo( ROTATION_0, mBaseDisplayWidth, mBaseDisplayHeight).mConfigFrame; return frame.width() <= frame.height() ? ORIENTATION_PORTRAIT : ORIENTATION_LANDSCAPE; } void performLayout(boolean initial, boolean updateInputWindows) { void performLayout(boolean initial, boolean updateInputWindows) { Trace.traceBegin(TRACE_TAG_WINDOW_MANAGER, "performLayout"); Trace.traceBegin(TRACE_TAG_WINDOW_MANAGER, "performLayout"); try { try { Loading
services/core/java/com/android/server/wm/DisplayPolicy.java +7 −23 Original line number Original line Diff line number Diff line Loading @@ -2045,7 +2045,6 @@ public class DisplayPolicy { static class Info { static class Info { // TODO(b/409608996): // TODO(b/409608996): // Remove mNonDecorInsets, mConfigInsets -> always empty // Remove mNonDecorInsets, mConfigInsets -> always empty // Remove mNonDecorFrame, mConfigFrame -> always the same as display frame /** /** * The insets for the areas that could never be removed, i.e. display cutout and * The insets for the areas that could never be removed, i.e. display cutout and * navigation bar. Note that its meaning is actually "decor insets". The "non" is just * navigation bar. Note that its meaning is actually "decor insets". The "non" is just Loading @@ -2069,23 +2068,16 @@ public class DisplayPolicy { */ */ final Rect mOverrideNonDecorInsets = new Rect(); final Rect mOverrideNonDecorInsets = new Rect(); /** The display frame available after excluding {@link #mNonDecorInsets}. */ final Rect mNonDecorFrame = new Rect(); /** /** * The available (stable) screen size that we should report for the configuration. * Override available (stable) screen size for app compatibility purpose. * This must be no larger than {@link #mNonDecorFrame}; it may be smaller than that * This must be no larger than {@link #mOverrideNonDecorFrame}; it may be smaller than * to account for more transient decoration like a status bar. * that to account for more transient decoration like a status bar. */ final Rect mConfigFrame = new Rect(); /** * Override value of mConfigFrame for app compatibility purpose. */ */ final Rect mOverrideConfigFrame = new Rect(); final Rect mOverrideConfigFrame = new Rect(); /** /** * Override value of mNonDecorFrame for app compatibility purpose. * Override display frame which excludes {@link #mOverrideNonDecorInsets} for app * compatibility purpose. */ */ final Rect mOverrideNonDecorFrame = new Rect(); final Rect mOverrideNonDecorFrame = new Rect(); Loading @@ -2107,8 +2099,6 @@ public class DisplayPolicy { overrideConfigInsets.right, overrideConfigInsets.bottom); overrideConfigInsets.right, overrideConfigInsets.bottom); mOverrideNonDecorInsets.set(overrideDecorInsets.left, overrideDecorInsets.top, mOverrideNonDecorInsets.set(overrideDecorInsets.left, overrideDecorInsets.top, overrideDecorInsets.right, overrideDecorInsets.bottom); overrideDecorInsets.right, overrideDecorInsets.bottom); mNonDecorFrame.set(displayFrame); mConfigFrame.set(displayFrame); mOverrideConfigFrame.set(displayFrame); mOverrideConfigFrame.set(displayFrame); mOverrideConfigFrame.inset(mOverrideConfigInsets); mOverrideConfigFrame.inset(mOverrideConfigInsets); mOverrideNonDecorFrame.set(displayFrame); mOverrideNonDecorFrame.set(displayFrame); Loading @@ -2121,8 +2111,6 @@ public class DisplayPolicy { mConfigInsets.set(other.mConfigInsets); mConfigInsets.set(other.mConfigInsets); mOverrideConfigInsets.set(other.mOverrideConfigInsets); mOverrideConfigInsets.set(other.mOverrideConfigInsets); mOverrideNonDecorInsets.set(other.mOverrideNonDecorInsets); mOverrideNonDecorInsets.set(other.mOverrideNonDecorInsets); mNonDecorFrame.set(other.mNonDecorFrame); mConfigFrame.set(other.mConfigFrame); mOverrideConfigFrame.set(other.mOverrideConfigFrame); mOverrideConfigFrame.set(other.mOverrideConfigFrame); mOverrideNonDecorFrame.set(other.mOverrideNonDecorFrame); mOverrideNonDecorFrame.set(other.mOverrideNonDecorFrame); mNeedUpdate = false; mNeedUpdate = false; Loading @@ -2135,9 +2123,7 @@ public class DisplayPolicy { + ", overrideNonDecorInsets=" + mOverrideNonDecorInsets.toShortString(tmpSb) + ", overrideNonDecorInsets=" + mOverrideNonDecorInsets.toShortString(tmpSb) + ", configInsets=" + mConfigInsets.toShortString(tmpSb) + ", configInsets=" + mConfigInsets.toShortString(tmpSb) + ", overrideConfigInsets=" + mOverrideConfigInsets.toShortString(tmpSb) + ", overrideConfigInsets=" + mOverrideConfigInsets.toShortString(tmpSb) + ", nonDecorFrame=" + mNonDecorFrame.toShortString(tmpSb) + ", overrideNonDecorFrame=" + mOverrideNonDecorFrame.toShortString(tmpSb) + ", overrideNonDecorFrame=" + mOverrideNonDecorFrame.toShortString(tmpSb) + ", configFrame=" + mConfigFrame.toShortString(tmpSb) + ", overrideConfigFrame=" + mOverrideConfigFrame.toShortString(tmpSb) + ", overrideConfigFrame=" + mOverrideConfigFrame.toShortString(tmpSb) + '}'; + '}'; } } Loading Loading @@ -2240,9 +2226,7 @@ public class DisplayPolicy { final DecorInsets.Info newInfo = mDecorInsets.mTmpInfo; final DecorInsets.Info newInfo = mDecorInsets.mTmpInfo; newInfo.update(mDisplayContent, rotation, dw, dh); newInfo.update(mDisplayContent, rotation, dw, dh); final DecorInsets.Info currentInfo = getDecorInsetsInfo(rotation, dw, dh); final DecorInsets.Info currentInfo = getDecorInsetsInfo(rotation, dw, dh); final boolean sameConfigFrame = newInfo.mConfigFrame.equals(currentInfo.mConfigFrame); if (newInfo.mOverrideConfigFrame.equals(currentInfo.mOverrideConfigFrame)) { if (sameConfigFrame && newInfo.mOverrideConfigFrame.equals(currentInfo.mOverrideConfigFrame)) { return false; return false; } } if (mCachedDecorInsets != null && !mCachedDecorInsets.canPreserve() && mScreenOnFully) { if (mCachedDecorInsets != null && !mCachedDecorInsets.canPreserve() && mScreenOnFully) { Loading @@ -2255,7 +2239,7 @@ public class DisplayPolicy { // clients receive the new states earlier. // clients receive the new states earlier. return true; return true; } } return !sameConfigFrame; return false; } } DecorInsets.Info getDecorInsetsInfo(int rotation, int w, int h) { DecorInsets.Info getDecorInsetsInfo(int rotation, int w, int h) { Loading
services/core/java/com/android/server/wm/WindowContainer.java +1 −1 Original line number Original line Diff line number Diff line Loading @@ -1462,7 +1462,7 @@ class WindowContainer<E extends WindowContainer> extends ConfigurationContainer< if (requestedOrientation == ActivityInfo.SCREEN_ORIENTATION_NOSENSOR) { if (requestedOrientation == ActivityInfo.SCREEN_ORIENTATION_NOSENSOR) { // NOSENSOR means the display's "natural" orientation, so return that. // NOSENSOR means the display's "natural" orientation, so return that. if (mDisplayContent != null) { if (mDisplayContent != null) { return mDisplayContent.getNaturalConfigurationOrientation(); return mDisplayContent.getNaturalOrientation(); } } } else if (requestedOrientation == ActivityInfo.SCREEN_ORIENTATION_LOCKED) { } else if (requestedOrientation == ActivityInfo.SCREEN_ORIENTATION_LOCKED) { // LOCKED means the activity's orientation remains unchanged, so return existing value. // LOCKED means the activity's orientation remains unchanged, so return existing value. Loading
services/tests/wmtests/src/com/android/server/wm/DisplayContentTests.java +2 −7 Original line number Original line Diff line number Diff line Loading @@ -990,16 +990,11 @@ public class DisplayContentTests extends WindowTestsBase { "Screen orientation must be defined by the window even on close-to-square display.", "Screen orientation must be defined by the window even on close-to-square display.", overlay.mAttrs.screenOrientation, dc.getOrientation()); overlay.mAttrs.screenOrientation, dc.getOrientation()); // Assume that a decor window occupies the display height, so the configuration orientation // should be landscape. dc.getDisplayPolicy().getDecorInsetsInfo(ROTATION_0, dc.mBaseDisplayHeight, dc.mBaseDisplayWidth).mConfigFrame.set(0, 0, 1000, 990); dc.computeScreenConfiguration(config, ROTATION_0); dc.computeScreenConfiguration(config, ROTATION_0); dc.onRequestedOverrideConfigurationChanged(config); dc.onRequestedOverrideConfigurationChanged(config); assertEquals(Configuration.ORIENTATION_LANDSCAPE, config.orientation); assertEquals(Configuration.ORIENTATION_PORTRAIT, config.orientation); assertEquals(Configuration.ORIENTATION_LANDSCAPE, dc.getNaturalConfigurationOrientation()); overlay.setOverrideOrientation(SCREEN_ORIENTATION_NOSENSOR); overlay.setOverrideOrientation(SCREEN_ORIENTATION_NOSENSOR); assertEquals(Configuration.ORIENTATION_LANDSCAPE, assertEquals(Configuration.ORIENTATION_PORTRAIT, overlay.getRequestedConfigurationOrientation()); overlay.getRequestedConfigurationOrientation()); // Note that getNaturalOrientation is based on logical display size. So it is portrait if // Note that getNaturalOrientation is based on logical display size. So it is portrait if // the display width equals to height. // the display width equals to height. Loading
services/tests/wmtests/src/com/android/server/wm/DisplayPolicyInsetsTests.java +0 −17 Original line number Original line Diff line number Diff line Loading @@ -50,7 +50,6 @@ public class DisplayPolicyInsetsTests extends DisplayPolicyTestsBase { verifyStableInsets(di, 0, STATUS_BAR_HEIGHT, 0, NAV_BAR_HEIGHT); verifyStableInsets(di, 0, STATUS_BAR_HEIGHT, 0, NAV_BAR_HEIGHT); verifyNonDecorInsets(di, 0, 0, 0, NAV_BAR_HEIGHT); verifyNonDecorInsets(di, 0, 0, 0, NAV_BAR_HEIGHT); verifyConsistency(di); } } @Test @Test Loading @@ -59,7 +58,6 @@ public class DisplayPolicyInsetsTests extends DisplayPolicyTestsBase { verifyStableInsets(di, 0, STATUS_BAR_HEIGHT, 0, NAV_BAR_HEIGHT); verifyStableInsets(di, 0, STATUS_BAR_HEIGHT, 0, NAV_BAR_HEIGHT); verifyNonDecorInsets(di, 0, DISPLAY_CUTOUT_HEIGHT, 0, NAV_BAR_HEIGHT); verifyNonDecorInsets(di, 0, DISPLAY_CUTOUT_HEIGHT, 0, NAV_BAR_HEIGHT); verifyConsistency(di); } } @Test @Test Loading @@ -74,7 +72,6 @@ public class DisplayPolicyInsetsTests extends DisplayPolicyTestsBase { verifyStableInsets(di, 0, STATUS_BAR_HEIGHT, 0, NAV_BAR_HEIGHT); verifyStableInsets(di, 0, STATUS_BAR_HEIGHT, 0, NAV_BAR_HEIGHT); verifyNonDecorInsets(di, 0, 0, 0, NAV_BAR_HEIGHT); verifyNonDecorInsets(di, 0, 0, 0, NAV_BAR_HEIGHT); } } verifyConsistency(di); } } @Test @Test Loading @@ -89,7 +86,6 @@ public class DisplayPolicyInsetsTests extends DisplayPolicyTestsBase { verifyStableInsets(di, DISPLAY_CUTOUT_HEIGHT, STATUS_BAR_HEIGHT, 0, NAV_BAR_HEIGHT); verifyStableInsets(di, DISPLAY_CUTOUT_HEIGHT, STATUS_BAR_HEIGHT, 0, NAV_BAR_HEIGHT); verifyNonDecorInsets(di, DISPLAY_CUTOUT_HEIGHT, 0, 0, NAV_BAR_HEIGHT); verifyNonDecorInsets(di, DISPLAY_CUTOUT_HEIGHT, 0, 0, NAV_BAR_HEIGHT); } } verifyConsistency(di); } } @Test @Test Loading @@ -104,7 +100,6 @@ public class DisplayPolicyInsetsTests extends DisplayPolicyTestsBase { verifyStableInsets(di, 0, STATUS_BAR_HEIGHT, 0, NAV_BAR_HEIGHT); verifyStableInsets(di, 0, STATUS_BAR_HEIGHT, 0, NAV_BAR_HEIGHT); verifyNonDecorInsets(di, 0, 0, 0, NAV_BAR_HEIGHT); verifyNonDecorInsets(di, 0, 0, 0, NAV_BAR_HEIGHT); } } verifyConsistency(di); } } @Test @Test Loading @@ -119,7 +114,6 @@ public class DisplayPolicyInsetsTests extends DisplayPolicyTestsBase { verifyStableInsets(di, 0, STATUS_BAR_HEIGHT, DISPLAY_CUTOUT_HEIGHT, NAV_BAR_HEIGHT); verifyStableInsets(di, 0, STATUS_BAR_HEIGHT, DISPLAY_CUTOUT_HEIGHT, NAV_BAR_HEIGHT); verifyNonDecorInsets(di, 0, 0, DISPLAY_CUTOUT_HEIGHT, NAV_BAR_HEIGHT); verifyNonDecorInsets(di, 0, 0, DISPLAY_CUTOUT_HEIGHT, NAV_BAR_HEIGHT); } } verifyConsistency(di); } } @Test @Test Loading @@ -128,7 +122,6 @@ public class DisplayPolicyInsetsTests extends DisplayPolicyTestsBase { verifyStableInsets(di, 0, STATUS_BAR_HEIGHT, 0, NAV_BAR_HEIGHT); verifyStableInsets(di, 0, STATUS_BAR_HEIGHT, 0, NAV_BAR_HEIGHT); verifyNonDecorInsets(di, 0, 0, 0, NAV_BAR_HEIGHT); verifyNonDecorInsets(di, 0, 0, 0, NAV_BAR_HEIGHT); verifyConsistency(di); } } @Test @Test Loading @@ -137,7 +130,6 @@ public class DisplayPolicyInsetsTests extends DisplayPolicyTestsBase { verifyStableInsets(di, 0, STATUS_BAR_HEIGHT, 0, NAV_BAR_HEIGHT + DISPLAY_CUTOUT_HEIGHT); verifyStableInsets(di, 0, STATUS_BAR_HEIGHT, 0, NAV_BAR_HEIGHT + DISPLAY_CUTOUT_HEIGHT); verifyNonDecorInsets(di, 0, 0, 0, NAV_BAR_HEIGHT + DISPLAY_CUTOUT_HEIGHT); verifyNonDecorInsets(di, 0, 0, 0, NAV_BAR_HEIGHT + DISPLAY_CUTOUT_HEIGHT); verifyConsistency(di); } } private void verifyStableInsets(DisplayInfo di, int left, int top, private void verifyStableInsets(DisplayInfo di, int left, int top, Loading @@ -152,15 +144,6 @@ public class DisplayPolicyInsetsTests extends DisplayPolicyTestsBase { getOverrideNonDecorInsets(di), equalTo(new Rect(left, top, right, bottom))); getOverrideNonDecorInsets(di), equalTo(new Rect(left, top, right, bottom))); } } private void verifyConsistency(DisplayInfo di) { final DisplayPolicy.DecorInsets.Info info = mDisplayPolicy.getDecorInsetsInfo( di.rotation, di.logicalWidth, di.logicalHeight); verifyConsistency("configDisplay", di, info.mConfigInsets, info.mConfigFrame.width(), info.mConfigFrame.height()); verifyConsistency("nonDecorDisplay", di, info.mNonDecorInsets, info.mNonDecorFrame.width(), info.mNonDecorFrame.height()); } private void verifyConsistency(String what, DisplayInfo di, Rect insets, int width, private void verifyConsistency(String what, DisplayInfo di, Rect insets, int width, int height) { int height) { mErrorCollector.checkThat(what + ":width", width, mErrorCollector.checkThat(what + ":width", width, Loading