Loading core/java/android/view/WindowManagerPolicy.java +4 −4 Original line number Diff line number Diff line Loading @@ -672,7 +672,7 @@ public interface WindowManagerPolicy { * button bar. */ public int getNonDecorDisplayWidth(int fullWidth, int fullHeight, int rotation, int uiMode); int uiMode, int displayId); /** * Return the display height available after excluding any screen Loading @@ -680,7 +680,7 @@ public interface WindowManagerPolicy { * button bar. */ public int getNonDecorDisplayHeight(int fullWidth, int fullHeight, int rotation, int uiMode); int uiMode, int displayId); /** * Return the available screen width that we should report for the Loading @@ -689,7 +689,7 @@ public interface WindowManagerPolicy { * that to account for more transient decoration like a status bar. */ public int getConfigDisplayWidth(int fullWidth, int fullHeight, int rotation, int uiMode); int uiMode, int displayId); /** * Return the available screen height that we should report for the Loading @@ -698,7 +698,7 @@ public interface WindowManagerPolicy { * that to account for more transient decoration like a status bar. */ public int getConfigDisplayHeight(int fullWidth, int fullHeight, int rotation, int uiMode); int uiMode, int displayId); /** * Return whether the given window can become the Keyguard window. Typically returns true for Loading services/core/java/com/android/server/policy/PhoneWindowManager.java +19 −11 Original line number Diff line number Diff line Loading @@ -2677,9 +2677,10 @@ public class PhoneWindowManager implements WindowManagerPolicy { } @Override public int getNonDecorDisplayWidth(int fullWidth, int fullHeight, int rotation, int uiMode) { if (mHasNavigationBar) { public int getNonDecorDisplayWidth(int fullWidth, int fullHeight, int rotation, int uiMode, int displayId) { // TODO(multi-display): Support navigation bar on secondary displays. if (displayId == Display.DEFAULT_DISPLAY && mHasNavigationBar) { // For a basic navigation bar, when we are in landscape mode we place // the navigation bar to the side. if (mNavigationBarCanMove && fullWidth > fullHeight) { Loading @@ -2698,9 +2699,10 @@ public class PhoneWindowManager implements WindowManagerPolicy { } @Override public int getNonDecorDisplayHeight(int fullWidth, int fullHeight, int rotation, int uiMode) { if (mHasNavigationBar) { public int getNonDecorDisplayHeight(int fullWidth, int fullHeight, int rotation, int uiMode, int displayId) { // TODO(multi-display): Support navigation bar on secondary displays. if (displayId == Display.DEFAULT_DISPLAY && mHasNavigationBar) { // For a basic navigation bar, when we are in portrait mode we place // the navigation bar to the bottom. if (!mNavigationBarCanMove || fullWidth < fullHeight) { Loading @@ -2711,18 +2713,24 @@ public class PhoneWindowManager implements WindowManagerPolicy { } @Override public int getConfigDisplayWidth(int fullWidth, int fullHeight, int rotation, int uiMode) { return getNonDecorDisplayWidth(fullWidth, fullHeight, rotation, uiMode); public int getConfigDisplayWidth(int fullWidth, int fullHeight, int rotation, int uiMode, int displayId) { return getNonDecorDisplayWidth(fullWidth, fullHeight, rotation, uiMode, displayId); } @Override public int getConfigDisplayHeight(int fullWidth, int fullHeight, int rotation, int uiMode) { public int getConfigDisplayHeight(int fullWidth, int fullHeight, int rotation, int uiMode, int displayId) { // There is a separate status bar at the top of the display. We don't count that as part // of the fixed decor, since it can hide; however, for purposes of configurations, // we do want to exclude it since applications can't generally use that part // of the screen. return getNonDecorDisplayHeight( fullWidth, fullHeight, rotation, uiMode) - mStatusBarHeight; // TODO(multi-display): Support status bars on secondary displays. if (displayId == Display.DEFAULT_DISPLAY) { return getNonDecorDisplayHeight(fullWidth, fullHeight, rotation, uiMode, displayId) - mStatusBarHeight; } return fullHeight; } @Override Loading services/core/java/com/android/server/wm/DockedStackDividerController.java +4 −2 Original line number Diff line number Diff line Loading @@ -206,10 +206,12 @@ public class DockedStackDividerController implements DimLayerUser { config.unset(); config.orientation = (dw <= dh) ? ORIENTATION_PORTRAIT : ORIENTATION_LANDSCAPE; config.screenWidthDp = (int) (mService.mPolicy.getConfigDisplayWidth(dw, dh, rotation, baseConfig.uiMode) / (mService.mPolicy.getConfigDisplayWidth(dw, dh, rotation, baseConfig.uiMode, mDisplayContent.getDisplayId()) / mDisplayContent.getDisplayMetrics().density); config.screenHeightDp = (int) (mService.mPolicy.getConfigDisplayHeight(dw, dh, rotation, baseConfig.uiMode) / (mService.mPolicy.getConfigDisplayHeight(dw, dh, rotation, baseConfig.uiMode, mDisplayContent.getDisplayId()) / mDisplayContent.getDisplayMetrics().density); final Context rotationContext = mService.mContext.createConfigurationContext(config); mSnapAlgorithmForRotation[rotation] = new DividerSnapAlgorithm( Loading services/core/java/com/android/server/wm/WindowManagerService.java +47 −36 Original line number Diff line number Diff line Loading @@ -5458,17 +5458,16 @@ public class WindowManagerService extends IWindowManager.Stub return config; } private void adjustDisplaySizeRanges(DisplayInfo displayInfo, int rotation, int uiMode, int dw, int dh) { // TODO: Multidisplay: for now only use with default display. final int width = mPolicy.getConfigDisplayWidth(dw, dh, rotation, uiMode); private void adjustDisplaySizeRanges(DisplayInfo displayInfo, int displayId, int rotation, int uiMode, int dw, int dh) { final int width = mPolicy.getConfigDisplayWidth(dw, dh, rotation, uiMode, displayId); if (width < displayInfo.smallestNominalAppWidth) { displayInfo.smallestNominalAppWidth = width; } if (width > displayInfo.largestNominalAppWidth) { displayInfo.largestNominalAppWidth = width; } final int height = mPolicy.getConfigDisplayHeight(dw, dh, rotation, uiMode); final int height = mPolicy.getConfigDisplayHeight(dw, dh, rotation, uiMode, displayId); if (height < displayInfo.smallestNominalAppHeight) { displayInfo.smallestNominalAppHeight = height; } Loading @@ -5478,11 +5477,10 @@ public class WindowManagerService extends IWindowManager.Stub } private int reduceConfigLayout(int curLayout, int rotation, float density, int dw, int dh, int uiMode) { // TODO: Multidisplay: for now only use with default display. int dw, int dh, int uiMode, int displayId) { // Get the app screen size at this rotation. int w = mPolicy.getNonDecorDisplayWidth(dw, dh, rotation, uiMode); int h = mPolicy.getNonDecorDisplayHeight(dw, dh, rotation, uiMode); int w = mPolicy.getNonDecorDisplayWidth(dw, dh, rotation, uiMode, displayId); int h = mPolicy.getNonDecorDisplayHeight(dw, dh, rotation, uiMode, displayId); // Compute the screen layout size class for this rotation. int longSize = w; Loading @@ -5497,9 +5495,8 @@ public class WindowManagerService extends IWindowManager.Stub return Configuration.reduceScreenLayout(curLayout, longSize, shortSize); } private void computeSizeRangesAndScreenLayout(DisplayInfo displayInfo, boolean rotated, int uiMode, int dw, int dh, float density, Configuration outConfig) { // TODO: Multidisplay: for now only use with default display. private void computeSizeRangesAndScreenLayout(DisplayInfo displayInfo, int displayId, boolean rotated, int uiMode, int dw, int dh, float density, Configuration outConfig) { // We need to determine the smallest width that will occur under normal // operation. To this, start with the base screen size and compute the Loading @@ -5517,24 +5514,33 @@ public class WindowManagerService extends IWindowManager.Stub displayInfo.smallestNominalAppHeight = 1<<30; displayInfo.largestNominalAppWidth = 0; displayInfo.largestNominalAppHeight = 0; adjustDisplaySizeRanges(displayInfo, Surface.ROTATION_0, uiMode, unrotDw, unrotDh); adjustDisplaySizeRanges(displayInfo, Surface.ROTATION_90, uiMode, unrotDh, unrotDw); adjustDisplaySizeRanges(displayInfo, Surface.ROTATION_180, uiMode, unrotDw, unrotDh); adjustDisplaySizeRanges(displayInfo, Surface.ROTATION_270, uiMode, unrotDh, unrotDw); adjustDisplaySizeRanges(displayInfo, displayId, Surface.ROTATION_0, uiMode, unrotDw, unrotDh); adjustDisplaySizeRanges(displayInfo, displayId, Surface.ROTATION_90, uiMode, unrotDh, unrotDw); adjustDisplaySizeRanges(displayInfo, displayId, Surface.ROTATION_180, uiMode, unrotDw, unrotDh); adjustDisplaySizeRanges(displayInfo, displayId, Surface.ROTATION_270, uiMode, unrotDh, unrotDw); int sl = Configuration.resetScreenLayout(outConfig.screenLayout); sl = reduceConfigLayout(sl, Surface.ROTATION_0, density, unrotDw, unrotDh, uiMode); sl = reduceConfigLayout(sl, Surface.ROTATION_90, density, unrotDh, unrotDw, uiMode); sl = reduceConfigLayout(sl, Surface.ROTATION_180, density, unrotDw, unrotDh, uiMode); sl = reduceConfigLayout(sl, Surface.ROTATION_270, density, unrotDh, unrotDw, uiMode); sl = reduceConfigLayout(sl, Surface.ROTATION_0, density, unrotDw, unrotDh, uiMode, displayId); sl = reduceConfigLayout(sl, Surface.ROTATION_90, density, unrotDh, unrotDw, uiMode, displayId); sl = reduceConfigLayout(sl, Surface.ROTATION_180, density, unrotDw, unrotDh, uiMode, displayId); sl = reduceConfigLayout(sl, Surface.ROTATION_270, density, unrotDh, unrotDw, uiMode, displayId); outConfig.smallestScreenWidthDp = (int)(displayInfo.smallestNominalAppWidth / density); outConfig.screenLayout = sl; } private int reduceCompatConfigWidthSize(int curSize, int rotation, int uiMode, DisplayMetrics dm, int dw, int dh) { // TODO: Multidisplay: for now only use with default display. dm.noncompatWidthPixels = mPolicy.getNonDecorDisplayWidth(dw, dh, rotation, uiMode); dm.noncompatHeightPixels = mPolicy.getNonDecorDisplayHeight(dw, dh, rotation, uiMode); DisplayMetrics dm, int dw, int dh, int displayId) { dm.noncompatWidthPixels = mPolicy.getNonDecorDisplayWidth(dw, dh, rotation, uiMode, displayId); dm.noncompatHeightPixels = mPolicy.getNonDecorDisplayHeight(dw, dh, rotation, uiMode, displayId); float scale = CompatibilityInfo.computeCompatibleScaling(dm, null); int size = (int)(((dm.noncompatWidthPixels / scale) / dm.density) + .5f); if (curSize == 0 || size < curSize) { Loading @@ -5543,8 +5549,8 @@ public class WindowManagerService extends IWindowManager.Stub return curSize; } private int computeCompatSmallestWidth(boolean rotated, int uiMode, DisplayMetrics dm, int dw, int dh) { // TODO: Multidisplay: for now only use with default display. private int computeCompatSmallestWidth(boolean rotated, int uiMode, DisplayMetrics dm, int dw, int dh, int displayId) { mTmpDisplayMetrics.setTo(dm); final DisplayMetrics tmpDm = mTmpDisplayMetrics; final int unrotDw, unrotDh; Loading @@ -5555,10 +5561,14 @@ public class WindowManagerService extends IWindowManager.Stub unrotDw = dw; unrotDh = dh; } int sw = reduceCompatConfigWidthSize(0, Surface.ROTATION_0, uiMode, tmpDm, unrotDw, unrotDh); sw = reduceCompatConfigWidthSize(sw, Surface.ROTATION_90, uiMode, tmpDm, unrotDh, unrotDw); sw = reduceCompatConfigWidthSize(sw, Surface.ROTATION_180, uiMode, tmpDm, unrotDw, unrotDh); sw = reduceCompatConfigWidthSize(sw, Surface.ROTATION_270, uiMode, tmpDm, unrotDh, unrotDw); int sw = reduceCompatConfigWidthSize(0, Surface.ROTATION_0, uiMode, tmpDm, unrotDw, unrotDh, displayId); sw = reduceCompatConfigWidthSize(sw, Surface.ROTATION_90, uiMode, tmpDm, unrotDh, unrotDw, displayId); sw = reduceCompatConfigWidthSize(sw, Surface.ROTATION_180, uiMode, tmpDm, unrotDw, unrotDh, displayId); sw = reduceCompatConfigWidthSize(sw, Surface.ROTATION_270, uiMode, tmpDm, unrotDh, unrotDw, displayId); return sw; } Loading Loading @@ -5593,8 +5603,9 @@ public class WindowManagerService extends IWindowManager.Stub } // Update application display metrics. final int appWidth = mPolicy.getNonDecorDisplayWidth(dw, dh, mRotation, uiMode); final int appHeight = mPolicy.getNonDecorDisplayHeight(dw, dh, mRotation, uiMode); final int appWidth = mPolicy.getNonDecorDisplayWidth(dw, dh, mRotation, uiMode, displayId); final int appHeight = mPolicy.getNonDecorDisplayHeight(dw, dh, mRotation, uiMode, displayId); final DisplayInfo displayInfo = displayContent.getDisplayInfo(); displayInfo.rotation = mRotation; displayInfo.logicalWidth = dw; Loading Loading @@ -5633,15 +5644,15 @@ public class WindowManagerService extends IWindowManager.Stub config.orientation = (dw <= dh) ? Configuration.ORIENTATION_PORTRAIT : Configuration.ORIENTATION_LANDSCAPE; config.screenWidthDp = (int)(mPolicy.getConfigDisplayWidth(dw, dh, mRotation, config.uiMode) / (int)(mPolicy.getConfigDisplayWidth(dw, dh, mRotation, config.uiMode, displayId) / mDisplayMetrics.density); config.screenHeightDp = (int)(mPolicy.getConfigDisplayHeight(dw, dh, mRotation, config.uiMode) / (int)(mPolicy.getConfigDisplayHeight(dw, dh, mRotation, config.uiMode, displayId) / mDisplayMetrics.density); final boolean rotated = (mRotation == Surface.ROTATION_90 || mRotation == Surface.ROTATION_270); computeSizeRangesAndScreenLayout(displayInfo, rotated, config.uiMode, dw, dh, computeSizeRangesAndScreenLayout(displayInfo, displayId, rotated, config.uiMode, dw, dh, mDisplayMetrics.density, config); config.screenLayout = (config.screenLayout & ~Configuration.SCREENLAYOUT_ROUND_MASK) Loading @@ -5652,7 +5663,7 @@ public class WindowManagerService extends IWindowManager.Stub config.compatScreenWidthDp = (int)(config.screenWidthDp / mCompatibleScreenScale); config.compatScreenHeightDp = (int)(config.screenHeightDp / mCompatibleScreenScale); config.compatSmallestScreenWidthDp = computeCompatSmallestWidth(rotated, config.uiMode, mDisplayMetrics, dw, dh); mDisplayMetrics, dw, dh, displayId); config.densityDpi = displayInfo.logicalDensityDpi; // Update the configuration based on available input devices, lid switch, Loading services/tests/servicestests/src/com/android/server/wm/TestWindowManagerPolicy.java +8 −4 Original line number Diff line number Diff line Loading @@ -272,22 +272,26 @@ class TestWindowManagerPolicy implements WindowManagerPolicy { } @Override public int getNonDecorDisplayWidth(int fullWidth, int fullHeight, int rotation, int uiMode) { public int getNonDecorDisplayWidth(int fullWidth, int fullHeight, int rotation, int uiMode, int displayId) { return 0; } @Override public int getNonDecorDisplayHeight(int fullWidth, int fullHeight, int rotation, int uiMode) { public int getNonDecorDisplayHeight(int fullWidth, int fullHeight, int rotation, int uiMode, int displayId) { return 0; } @Override public int getConfigDisplayWidth(int fullWidth, int fullHeight, int rotation, int uiMode) { public int getConfigDisplayWidth(int fullWidth, int fullHeight, int rotation, int uiMode, int displayId) { return 0; } @Override public int getConfigDisplayHeight(int fullWidth, int fullHeight, int rotation, int uiMode) { public int getConfigDisplayHeight(int fullWidth, int fullHeight, int rotation, int uiMode, int displayId) { return 0; } Loading Loading
core/java/android/view/WindowManagerPolicy.java +4 −4 Original line number Diff line number Diff line Loading @@ -672,7 +672,7 @@ public interface WindowManagerPolicy { * button bar. */ public int getNonDecorDisplayWidth(int fullWidth, int fullHeight, int rotation, int uiMode); int uiMode, int displayId); /** * Return the display height available after excluding any screen Loading @@ -680,7 +680,7 @@ public interface WindowManagerPolicy { * button bar. */ public int getNonDecorDisplayHeight(int fullWidth, int fullHeight, int rotation, int uiMode); int uiMode, int displayId); /** * Return the available screen width that we should report for the Loading @@ -689,7 +689,7 @@ public interface WindowManagerPolicy { * that to account for more transient decoration like a status bar. */ public int getConfigDisplayWidth(int fullWidth, int fullHeight, int rotation, int uiMode); int uiMode, int displayId); /** * Return the available screen height that we should report for the Loading @@ -698,7 +698,7 @@ public interface WindowManagerPolicy { * that to account for more transient decoration like a status bar. */ public int getConfigDisplayHeight(int fullWidth, int fullHeight, int rotation, int uiMode); int uiMode, int displayId); /** * Return whether the given window can become the Keyguard window. Typically returns true for Loading
services/core/java/com/android/server/policy/PhoneWindowManager.java +19 −11 Original line number Diff line number Diff line Loading @@ -2677,9 +2677,10 @@ public class PhoneWindowManager implements WindowManagerPolicy { } @Override public int getNonDecorDisplayWidth(int fullWidth, int fullHeight, int rotation, int uiMode) { if (mHasNavigationBar) { public int getNonDecorDisplayWidth(int fullWidth, int fullHeight, int rotation, int uiMode, int displayId) { // TODO(multi-display): Support navigation bar on secondary displays. if (displayId == Display.DEFAULT_DISPLAY && mHasNavigationBar) { // For a basic navigation bar, when we are in landscape mode we place // the navigation bar to the side. if (mNavigationBarCanMove && fullWidth > fullHeight) { Loading @@ -2698,9 +2699,10 @@ public class PhoneWindowManager implements WindowManagerPolicy { } @Override public int getNonDecorDisplayHeight(int fullWidth, int fullHeight, int rotation, int uiMode) { if (mHasNavigationBar) { public int getNonDecorDisplayHeight(int fullWidth, int fullHeight, int rotation, int uiMode, int displayId) { // TODO(multi-display): Support navigation bar on secondary displays. if (displayId == Display.DEFAULT_DISPLAY && mHasNavigationBar) { // For a basic navigation bar, when we are in portrait mode we place // the navigation bar to the bottom. if (!mNavigationBarCanMove || fullWidth < fullHeight) { Loading @@ -2711,18 +2713,24 @@ public class PhoneWindowManager implements WindowManagerPolicy { } @Override public int getConfigDisplayWidth(int fullWidth, int fullHeight, int rotation, int uiMode) { return getNonDecorDisplayWidth(fullWidth, fullHeight, rotation, uiMode); public int getConfigDisplayWidth(int fullWidth, int fullHeight, int rotation, int uiMode, int displayId) { return getNonDecorDisplayWidth(fullWidth, fullHeight, rotation, uiMode, displayId); } @Override public int getConfigDisplayHeight(int fullWidth, int fullHeight, int rotation, int uiMode) { public int getConfigDisplayHeight(int fullWidth, int fullHeight, int rotation, int uiMode, int displayId) { // There is a separate status bar at the top of the display. We don't count that as part // of the fixed decor, since it can hide; however, for purposes of configurations, // we do want to exclude it since applications can't generally use that part // of the screen. return getNonDecorDisplayHeight( fullWidth, fullHeight, rotation, uiMode) - mStatusBarHeight; // TODO(multi-display): Support status bars on secondary displays. if (displayId == Display.DEFAULT_DISPLAY) { return getNonDecorDisplayHeight(fullWidth, fullHeight, rotation, uiMode, displayId) - mStatusBarHeight; } return fullHeight; } @Override Loading
services/core/java/com/android/server/wm/DockedStackDividerController.java +4 −2 Original line number Diff line number Diff line Loading @@ -206,10 +206,12 @@ public class DockedStackDividerController implements DimLayerUser { config.unset(); config.orientation = (dw <= dh) ? ORIENTATION_PORTRAIT : ORIENTATION_LANDSCAPE; config.screenWidthDp = (int) (mService.mPolicy.getConfigDisplayWidth(dw, dh, rotation, baseConfig.uiMode) / (mService.mPolicy.getConfigDisplayWidth(dw, dh, rotation, baseConfig.uiMode, mDisplayContent.getDisplayId()) / mDisplayContent.getDisplayMetrics().density); config.screenHeightDp = (int) (mService.mPolicy.getConfigDisplayHeight(dw, dh, rotation, baseConfig.uiMode) / (mService.mPolicy.getConfigDisplayHeight(dw, dh, rotation, baseConfig.uiMode, mDisplayContent.getDisplayId()) / mDisplayContent.getDisplayMetrics().density); final Context rotationContext = mService.mContext.createConfigurationContext(config); mSnapAlgorithmForRotation[rotation] = new DividerSnapAlgorithm( Loading
services/core/java/com/android/server/wm/WindowManagerService.java +47 −36 Original line number Diff line number Diff line Loading @@ -5458,17 +5458,16 @@ public class WindowManagerService extends IWindowManager.Stub return config; } private void adjustDisplaySizeRanges(DisplayInfo displayInfo, int rotation, int uiMode, int dw, int dh) { // TODO: Multidisplay: for now only use with default display. final int width = mPolicy.getConfigDisplayWidth(dw, dh, rotation, uiMode); private void adjustDisplaySizeRanges(DisplayInfo displayInfo, int displayId, int rotation, int uiMode, int dw, int dh) { final int width = mPolicy.getConfigDisplayWidth(dw, dh, rotation, uiMode, displayId); if (width < displayInfo.smallestNominalAppWidth) { displayInfo.smallestNominalAppWidth = width; } if (width > displayInfo.largestNominalAppWidth) { displayInfo.largestNominalAppWidth = width; } final int height = mPolicy.getConfigDisplayHeight(dw, dh, rotation, uiMode); final int height = mPolicy.getConfigDisplayHeight(dw, dh, rotation, uiMode, displayId); if (height < displayInfo.smallestNominalAppHeight) { displayInfo.smallestNominalAppHeight = height; } Loading @@ -5478,11 +5477,10 @@ public class WindowManagerService extends IWindowManager.Stub } private int reduceConfigLayout(int curLayout, int rotation, float density, int dw, int dh, int uiMode) { // TODO: Multidisplay: for now only use with default display. int dw, int dh, int uiMode, int displayId) { // Get the app screen size at this rotation. int w = mPolicy.getNonDecorDisplayWidth(dw, dh, rotation, uiMode); int h = mPolicy.getNonDecorDisplayHeight(dw, dh, rotation, uiMode); int w = mPolicy.getNonDecorDisplayWidth(dw, dh, rotation, uiMode, displayId); int h = mPolicy.getNonDecorDisplayHeight(dw, dh, rotation, uiMode, displayId); // Compute the screen layout size class for this rotation. int longSize = w; Loading @@ -5497,9 +5495,8 @@ public class WindowManagerService extends IWindowManager.Stub return Configuration.reduceScreenLayout(curLayout, longSize, shortSize); } private void computeSizeRangesAndScreenLayout(DisplayInfo displayInfo, boolean rotated, int uiMode, int dw, int dh, float density, Configuration outConfig) { // TODO: Multidisplay: for now only use with default display. private void computeSizeRangesAndScreenLayout(DisplayInfo displayInfo, int displayId, boolean rotated, int uiMode, int dw, int dh, float density, Configuration outConfig) { // We need to determine the smallest width that will occur under normal // operation. To this, start with the base screen size and compute the Loading @@ -5517,24 +5514,33 @@ public class WindowManagerService extends IWindowManager.Stub displayInfo.smallestNominalAppHeight = 1<<30; displayInfo.largestNominalAppWidth = 0; displayInfo.largestNominalAppHeight = 0; adjustDisplaySizeRanges(displayInfo, Surface.ROTATION_0, uiMode, unrotDw, unrotDh); adjustDisplaySizeRanges(displayInfo, Surface.ROTATION_90, uiMode, unrotDh, unrotDw); adjustDisplaySizeRanges(displayInfo, Surface.ROTATION_180, uiMode, unrotDw, unrotDh); adjustDisplaySizeRanges(displayInfo, Surface.ROTATION_270, uiMode, unrotDh, unrotDw); adjustDisplaySizeRanges(displayInfo, displayId, Surface.ROTATION_0, uiMode, unrotDw, unrotDh); adjustDisplaySizeRanges(displayInfo, displayId, Surface.ROTATION_90, uiMode, unrotDh, unrotDw); adjustDisplaySizeRanges(displayInfo, displayId, Surface.ROTATION_180, uiMode, unrotDw, unrotDh); adjustDisplaySizeRanges(displayInfo, displayId, Surface.ROTATION_270, uiMode, unrotDh, unrotDw); int sl = Configuration.resetScreenLayout(outConfig.screenLayout); sl = reduceConfigLayout(sl, Surface.ROTATION_0, density, unrotDw, unrotDh, uiMode); sl = reduceConfigLayout(sl, Surface.ROTATION_90, density, unrotDh, unrotDw, uiMode); sl = reduceConfigLayout(sl, Surface.ROTATION_180, density, unrotDw, unrotDh, uiMode); sl = reduceConfigLayout(sl, Surface.ROTATION_270, density, unrotDh, unrotDw, uiMode); sl = reduceConfigLayout(sl, Surface.ROTATION_0, density, unrotDw, unrotDh, uiMode, displayId); sl = reduceConfigLayout(sl, Surface.ROTATION_90, density, unrotDh, unrotDw, uiMode, displayId); sl = reduceConfigLayout(sl, Surface.ROTATION_180, density, unrotDw, unrotDh, uiMode, displayId); sl = reduceConfigLayout(sl, Surface.ROTATION_270, density, unrotDh, unrotDw, uiMode, displayId); outConfig.smallestScreenWidthDp = (int)(displayInfo.smallestNominalAppWidth / density); outConfig.screenLayout = sl; } private int reduceCompatConfigWidthSize(int curSize, int rotation, int uiMode, DisplayMetrics dm, int dw, int dh) { // TODO: Multidisplay: for now only use with default display. dm.noncompatWidthPixels = mPolicy.getNonDecorDisplayWidth(dw, dh, rotation, uiMode); dm.noncompatHeightPixels = mPolicy.getNonDecorDisplayHeight(dw, dh, rotation, uiMode); DisplayMetrics dm, int dw, int dh, int displayId) { dm.noncompatWidthPixels = mPolicy.getNonDecorDisplayWidth(dw, dh, rotation, uiMode, displayId); dm.noncompatHeightPixels = mPolicy.getNonDecorDisplayHeight(dw, dh, rotation, uiMode, displayId); float scale = CompatibilityInfo.computeCompatibleScaling(dm, null); int size = (int)(((dm.noncompatWidthPixels / scale) / dm.density) + .5f); if (curSize == 0 || size < curSize) { Loading @@ -5543,8 +5549,8 @@ public class WindowManagerService extends IWindowManager.Stub return curSize; } private int computeCompatSmallestWidth(boolean rotated, int uiMode, DisplayMetrics dm, int dw, int dh) { // TODO: Multidisplay: for now only use with default display. private int computeCompatSmallestWidth(boolean rotated, int uiMode, DisplayMetrics dm, int dw, int dh, int displayId) { mTmpDisplayMetrics.setTo(dm); final DisplayMetrics tmpDm = mTmpDisplayMetrics; final int unrotDw, unrotDh; Loading @@ -5555,10 +5561,14 @@ public class WindowManagerService extends IWindowManager.Stub unrotDw = dw; unrotDh = dh; } int sw = reduceCompatConfigWidthSize(0, Surface.ROTATION_0, uiMode, tmpDm, unrotDw, unrotDh); sw = reduceCompatConfigWidthSize(sw, Surface.ROTATION_90, uiMode, tmpDm, unrotDh, unrotDw); sw = reduceCompatConfigWidthSize(sw, Surface.ROTATION_180, uiMode, tmpDm, unrotDw, unrotDh); sw = reduceCompatConfigWidthSize(sw, Surface.ROTATION_270, uiMode, tmpDm, unrotDh, unrotDw); int sw = reduceCompatConfigWidthSize(0, Surface.ROTATION_0, uiMode, tmpDm, unrotDw, unrotDh, displayId); sw = reduceCompatConfigWidthSize(sw, Surface.ROTATION_90, uiMode, tmpDm, unrotDh, unrotDw, displayId); sw = reduceCompatConfigWidthSize(sw, Surface.ROTATION_180, uiMode, tmpDm, unrotDw, unrotDh, displayId); sw = reduceCompatConfigWidthSize(sw, Surface.ROTATION_270, uiMode, tmpDm, unrotDh, unrotDw, displayId); return sw; } Loading Loading @@ -5593,8 +5603,9 @@ public class WindowManagerService extends IWindowManager.Stub } // Update application display metrics. final int appWidth = mPolicy.getNonDecorDisplayWidth(dw, dh, mRotation, uiMode); final int appHeight = mPolicy.getNonDecorDisplayHeight(dw, dh, mRotation, uiMode); final int appWidth = mPolicy.getNonDecorDisplayWidth(dw, dh, mRotation, uiMode, displayId); final int appHeight = mPolicy.getNonDecorDisplayHeight(dw, dh, mRotation, uiMode, displayId); final DisplayInfo displayInfo = displayContent.getDisplayInfo(); displayInfo.rotation = mRotation; displayInfo.logicalWidth = dw; Loading Loading @@ -5633,15 +5644,15 @@ public class WindowManagerService extends IWindowManager.Stub config.orientation = (dw <= dh) ? Configuration.ORIENTATION_PORTRAIT : Configuration.ORIENTATION_LANDSCAPE; config.screenWidthDp = (int)(mPolicy.getConfigDisplayWidth(dw, dh, mRotation, config.uiMode) / (int)(mPolicy.getConfigDisplayWidth(dw, dh, mRotation, config.uiMode, displayId) / mDisplayMetrics.density); config.screenHeightDp = (int)(mPolicy.getConfigDisplayHeight(dw, dh, mRotation, config.uiMode) / (int)(mPolicy.getConfigDisplayHeight(dw, dh, mRotation, config.uiMode, displayId) / mDisplayMetrics.density); final boolean rotated = (mRotation == Surface.ROTATION_90 || mRotation == Surface.ROTATION_270); computeSizeRangesAndScreenLayout(displayInfo, rotated, config.uiMode, dw, dh, computeSizeRangesAndScreenLayout(displayInfo, displayId, rotated, config.uiMode, dw, dh, mDisplayMetrics.density, config); config.screenLayout = (config.screenLayout & ~Configuration.SCREENLAYOUT_ROUND_MASK) Loading @@ -5652,7 +5663,7 @@ public class WindowManagerService extends IWindowManager.Stub config.compatScreenWidthDp = (int)(config.screenWidthDp / mCompatibleScreenScale); config.compatScreenHeightDp = (int)(config.screenHeightDp / mCompatibleScreenScale); config.compatSmallestScreenWidthDp = computeCompatSmallestWidth(rotated, config.uiMode, mDisplayMetrics, dw, dh); mDisplayMetrics, dw, dh, displayId); config.densityDpi = displayInfo.logicalDensityDpi; // Update the configuration based on available input devices, lid switch, Loading
services/tests/servicestests/src/com/android/server/wm/TestWindowManagerPolicy.java +8 −4 Original line number Diff line number Diff line Loading @@ -272,22 +272,26 @@ class TestWindowManagerPolicy implements WindowManagerPolicy { } @Override public int getNonDecorDisplayWidth(int fullWidth, int fullHeight, int rotation, int uiMode) { public int getNonDecorDisplayWidth(int fullWidth, int fullHeight, int rotation, int uiMode, int displayId) { return 0; } @Override public int getNonDecorDisplayHeight(int fullWidth, int fullHeight, int rotation, int uiMode) { public int getNonDecorDisplayHeight(int fullWidth, int fullHeight, int rotation, int uiMode, int displayId) { return 0; } @Override public int getConfigDisplayWidth(int fullWidth, int fullHeight, int rotation, int uiMode) { public int getConfigDisplayWidth(int fullWidth, int fullHeight, int rotation, int uiMode, int displayId) { return 0; } @Override public int getConfigDisplayHeight(int fullWidth, int fullHeight, int rotation, int uiMode) { public int getConfigDisplayHeight(int fullWidth, int fullHeight, int rotation, int uiMode, int displayId) { return 0; } Loading