Loading core/java/android/app/ActivityThread.java +10 −4 Original line number Diff line number Diff line Loading @@ -3872,14 +3872,20 @@ public final class ActivityThread { final void applyNonDefaultDisplayMetricsToConfigurationLocked( DisplayMetrics dm, Configuration config) { config.screenLayout = Configuration.SCREENLAYOUT_SIZE_XLARGE | Configuration.SCREENLAYOUT_LONG_NO; config.touchscreen = Configuration.TOUCHSCREEN_NOTOUCH; config.orientation = (dm.widthPixels >= dm.heightPixels) ? Configuration.ORIENTATION_LANDSCAPE : Configuration.ORIENTATION_PORTRAIT; config.densityDpi = dm.densityDpi; config.screenWidthDp = (int)(dm.widthPixels / dm.density); config.screenHeightDp = (int)(dm.heightPixels / dm.density); int sl = Configuration.resetScreenLayout(config.screenLayout); if (dm.widthPixels > dm.heightPixels) { config.orientation = Configuration.ORIENTATION_LANDSCAPE; config.screenLayout = Configuration.reduceScreenLayout(sl, config.screenWidthDp, config.screenHeightDp); } else { config.orientation = Configuration.ORIENTATION_PORTRAIT; config.screenLayout = Configuration.reduceScreenLayout(sl, config.screenHeightDp, config.screenWidthDp); } config.smallestScreenWidthDp = config.screenWidthDp; // assume screen does not rotate config.compatScreenWidthDp = config.screenWidthDp; config.compatScreenHeightDp = config.screenHeightDp; Loading core/java/android/content/res/Configuration.java +71 −1 Original line number Diff line number Diff line Loading @@ -173,6 +173,76 @@ public final class Configuration implements Parcelable, Comparable<Configuration */ public int screenLayout; /** @hide */ static public int resetScreenLayout(int curLayout) { return (curLayout&~(SCREENLAYOUT_LONG_MASK | SCREENLAYOUT_SIZE_MASK | SCREENLAYOUT_COMPAT_NEEDED)) | (SCREENLAYOUT_LONG_YES | SCREENLAYOUT_SIZE_XLARGE); } /** @hide */ static public int reduceScreenLayout(int curLayout, int longSizeDp, int shortSizeDp) { int screenLayoutSize; boolean screenLayoutLong; boolean screenLayoutCompatNeeded; // These semi-magic numbers define our compatibility modes for // applications with different screens. These are guarantees to // app developers about the space they can expect for a particular // configuration. DO NOT CHANGE! if (longSizeDp < 470) { // This is shorter than an HVGA normal density screen (which // is 480 pixels on its long side). screenLayoutSize = SCREENLAYOUT_SIZE_SMALL; screenLayoutLong = false; screenLayoutCompatNeeded = false; } else { // What size is this screen screen? if (longSizeDp >= 960 && shortSizeDp >= 720) { // 1.5xVGA or larger screens at medium density are the point // at which we consider it to be an extra large screen. screenLayoutSize = SCREENLAYOUT_SIZE_XLARGE; } else if (longSizeDp >= 640 && shortSizeDp >= 480) { // VGA or larger screens at medium density are the point // at which we consider it to be a large screen. screenLayoutSize = SCREENLAYOUT_SIZE_LARGE; } else { screenLayoutSize = SCREENLAYOUT_SIZE_NORMAL; } // If this screen is wider than normal HVGA, or taller // than FWVGA, then for old apps we want to run in size // compatibility mode. if (shortSizeDp > 321 || longSizeDp > 570) { screenLayoutCompatNeeded = true; } else { screenLayoutCompatNeeded = false; } // Is this a long screen? if (((longSizeDp*3)/5) >= (shortSizeDp-1)) { // Anything wider than WVGA (5:3) is considering to be long. screenLayoutLong = true; } else { screenLayoutLong = false; } } // Now reduce the last screenLayout to not be better than what we // have found. if (!screenLayoutLong) { curLayout = (curLayout&~SCREENLAYOUT_LONG_MASK) | SCREENLAYOUT_LONG_NO; } if (screenLayoutCompatNeeded) { curLayout |= Configuration.SCREENLAYOUT_COMPAT_NEEDED; } int curSize = curLayout&SCREENLAYOUT_SIZE_MASK; if (screenLayoutSize < curSize) { curLayout = (curLayout&~SCREENLAYOUT_SIZE_MASK) | screenLayoutSize; } return curLayout; } /** * Check if the Configuration's current {@link #screenLayout} is at * least the given size. Loading services/java/com/android/server/wm/WindowManagerService.java +3 −65 Original line number Diff line number Diff line Loading @@ -6676,9 +6676,6 @@ public class WindowManagerService extends IWindowManager.Stub int h = mPolicy.getNonDecorDisplayHeight(dw, dh, rotation); // Compute the screen layout size class for this rotation. int screenLayoutSize; boolean screenLayoutLong; boolean screenLayoutCompatNeeded; int longSize = w; int shortSize = h; if (longSize < shortSize) { Loading @@ -6688,64 +6685,7 @@ public class WindowManagerService extends IWindowManager.Stub } longSize = (int)(longSize/density); shortSize = (int)(shortSize/density); // These semi-magic numbers define our compatibility modes for // applications with different screens. These are guarantees to // app developers about the space they can expect for a particular // configuration. DO NOT CHANGE! if (longSize < 470) { // This is shorter than an HVGA normal density screen (which // is 480 pixels on its long side). screenLayoutSize = Configuration.SCREENLAYOUT_SIZE_SMALL; screenLayoutLong = false; screenLayoutCompatNeeded = false; } else { // What size is this screen screen? if (longSize >= 960 && shortSize >= 720) { // 1.5xVGA or larger screens at medium density are the point // at which we consider it to be an extra large screen. screenLayoutSize = Configuration.SCREENLAYOUT_SIZE_XLARGE; } else if (longSize >= 640 && shortSize >= 480) { // VGA or larger screens at medium density are the point // at which we consider it to be a large screen. screenLayoutSize = Configuration.SCREENLAYOUT_SIZE_LARGE; } else { screenLayoutSize = Configuration.SCREENLAYOUT_SIZE_NORMAL; } // If this screen is wider than normal HVGA, or taller // than FWVGA, then for old apps we want to run in size // compatibility mode. if (shortSize > 321 || longSize > 570) { screenLayoutCompatNeeded = true; } else { screenLayoutCompatNeeded = false; } // Is this a long screen? if (((longSize*3)/5) >= (shortSize-1)) { // Anything wider than WVGA (5:3) is considering to be long. screenLayoutLong = true; } else { screenLayoutLong = false; } } // Now reduce the last screenLayout to not be better than what we // have found. if (!screenLayoutLong) { curLayout = (curLayout&~Configuration.SCREENLAYOUT_LONG_MASK) | Configuration.SCREENLAYOUT_LONG_NO; } if (screenLayoutCompatNeeded) { curLayout |= Configuration.SCREENLAYOUT_COMPAT_NEEDED; } int curSize = curLayout&Configuration.SCREENLAYOUT_SIZE_MASK; if (screenLayoutSize < curSize) { curLayout = (curLayout&~Configuration.SCREENLAYOUT_SIZE_MASK) | screenLayoutSize; } return curLayout; return Configuration.reduceScreenLayout(curLayout, longSize, shortSize); } private void computeSizeRangesAndScreenLayout(DisplayInfo displayInfo, boolean rotated, Loading @@ -6772,15 +6712,13 @@ public class WindowManagerService extends IWindowManager.Stub adjustDisplaySizeRanges(displayInfo, Surface.ROTATION_90, unrotDh, unrotDw); adjustDisplaySizeRanges(displayInfo, Surface.ROTATION_180, unrotDw, unrotDh); adjustDisplaySizeRanges(displayInfo, Surface.ROTATION_270, unrotDh, unrotDw); int sl = Configuration.SCREENLAYOUT_SIZE_XLARGE | Configuration.SCREENLAYOUT_LONG_YES; int sl = Configuration.resetScreenLayout(outConfig.screenLayout); sl = reduceConfigLayout(sl, Surface.ROTATION_0, density, unrotDw, unrotDh); sl = reduceConfigLayout(sl, Surface.ROTATION_90, density, unrotDh, unrotDw); sl = reduceConfigLayout(sl, Surface.ROTATION_180, density, unrotDw, unrotDh); sl = reduceConfigLayout(sl, Surface.ROTATION_270, density, unrotDh, unrotDw); outConfig.smallestScreenWidthDp = (int)(displayInfo.smallestNominalAppWidth / density); outConfig.screenLayout = sl|(outConfig.screenLayout&Configuration.SCREENLAYOUT_LAYOUTDIR_MASK); outConfig.screenLayout = sl; } private int reduceCompatConfigWidthSize(int curSize, int rotation, DisplayMetrics dm, Loading Loading
core/java/android/app/ActivityThread.java +10 −4 Original line number Diff line number Diff line Loading @@ -3872,14 +3872,20 @@ public final class ActivityThread { final void applyNonDefaultDisplayMetricsToConfigurationLocked( DisplayMetrics dm, Configuration config) { config.screenLayout = Configuration.SCREENLAYOUT_SIZE_XLARGE | Configuration.SCREENLAYOUT_LONG_NO; config.touchscreen = Configuration.TOUCHSCREEN_NOTOUCH; config.orientation = (dm.widthPixels >= dm.heightPixels) ? Configuration.ORIENTATION_LANDSCAPE : Configuration.ORIENTATION_PORTRAIT; config.densityDpi = dm.densityDpi; config.screenWidthDp = (int)(dm.widthPixels / dm.density); config.screenHeightDp = (int)(dm.heightPixels / dm.density); int sl = Configuration.resetScreenLayout(config.screenLayout); if (dm.widthPixels > dm.heightPixels) { config.orientation = Configuration.ORIENTATION_LANDSCAPE; config.screenLayout = Configuration.reduceScreenLayout(sl, config.screenWidthDp, config.screenHeightDp); } else { config.orientation = Configuration.ORIENTATION_PORTRAIT; config.screenLayout = Configuration.reduceScreenLayout(sl, config.screenHeightDp, config.screenWidthDp); } config.smallestScreenWidthDp = config.screenWidthDp; // assume screen does not rotate config.compatScreenWidthDp = config.screenWidthDp; config.compatScreenHeightDp = config.screenHeightDp; Loading
core/java/android/content/res/Configuration.java +71 −1 Original line number Diff line number Diff line Loading @@ -173,6 +173,76 @@ public final class Configuration implements Parcelable, Comparable<Configuration */ public int screenLayout; /** @hide */ static public int resetScreenLayout(int curLayout) { return (curLayout&~(SCREENLAYOUT_LONG_MASK | SCREENLAYOUT_SIZE_MASK | SCREENLAYOUT_COMPAT_NEEDED)) | (SCREENLAYOUT_LONG_YES | SCREENLAYOUT_SIZE_XLARGE); } /** @hide */ static public int reduceScreenLayout(int curLayout, int longSizeDp, int shortSizeDp) { int screenLayoutSize; boolean screenLayoutLong; boolean screenLayoutCompatNeeded; // These semi-magic numbers define our compatibility modes for // applications with different screens. These are guarantees to // app developers about the space they can expect for a particular // configuration. DO NOT CHANGE! if (longSizeDp < 470) { // This is shorter than an HVGA normal density screen (which // is 480 pixels on its long side). screenLayoutSize = SCREENLAYOUT_SIZE_SMALL; screenLayoutLong = false; screenLayoutCompatNeeded = false; } else { // What size is this screen screen? if (longSizeDp >= 960 && shortSizeDp >= 720) { // 1.5xVGA or larger screens at medium density are the point // at which we consider it to be an extra large screen. screenLayoutSize = SCREENLAYOUT_SIZE_XLARGE; } else if (longSizeDp >= 640 && shortSizeDp >= 480) { // VGA or larger screens at medium density are the point // at which we consider it to be a large screen. screenLayoutSize = SCREENLAYOUT_SIZE_LARGE; } else { screenLayoutSize = SCREENLAYOUT_SIZE_NORMAL; } // If this screen is wider than normal HVGA, or taller // than FWVGA, then for old apps we want to run in size // compatibility mode. if (shortSizeDp > 321 || longSizeDp > 570) { screenLayoutCompatNeeded = true; } else { screenLayoutCompatNeeded = false; } // Is this a long screen? if (((longSizeDp*3)/5) >= (shortSizeDp-1)) { // Anything wider than WVGA (5:3) is considering to be long. screenLayoutLong = true; } else { screenLayoutLong = false; } } // Now reduce the last screenLayout to not be better than what we // have found. if (!screenLayoutLong) { curLayout = (curLayout&~SCREENLAYOUT_LONG_MASK) | SCREENLAYOUT_LONG_NO; } if (screenLayoutCompatNeeded) { curLayout |= Configuration.SCREENLAYOUT_COMPAT_NEEDED; } int curSize = curLayout&SCREENLAYOUT_SIZE_MASK; if (screenLayoutSize < curSize) { curLayout = (curLayout&~SCREENLAYOUT_SIZE_MASK) | screenLayoutSize; } return curLayout; } /** * Check if the Configuration's current {@link #screenLayout} is at * least the given size. Loading
services/java/com/android/server/wm/WindowManagerService.java +3 −65 Original line number Diff line number Diff line Loading @@ -6676,9 +6676,6 @@ public class WindowManagerService extends IWindowManager.Stub int h = mPolicy.getNonDecorDisplayHeight(dw, dh, rotation); // Compute the screen layout size class for this rotation. int screenLayoutSize; boolean screenLayoutLong; boolean screenLayoutCompatNeeded; int longSize = w; int shortSize = h; if (longSize < shortSize) { Loading @@ -6688,64 +6685,7 @@ public class WindowManagerService extends IWindowManager.Stub } longSize = (int)(longSize/density); shortSize = (int)(shortSize/density); // These semi-magic numbers define our compatibility modes for // applications with different screens. These are guarantees to // app developers about the space they can expect for a particular // configuration. DO NOT CHANGE! if (longSize < 470) { // This is shorter than an HVGA normal density screen (which // is 480 pixels on its long side). screenLayoutSize = Configuration.SCREENLAYOUT_SIZE_SMALL; screenLayoutLong = false; screenLayoutCompatNeeded = false; } else { // What size is this screen screen? if (longSize >= 960 && shortSize >= 720) { // 1.5xVGA or larger screens at medium density are the point // at which we consider it to be an extra large screen. screenLayoutSize = Configuration.SCREENLAYOUT_SIZE_XLARGE; } else if (longSize >= 640 && shortSize >= 480) { // VGA or larger screens at medium density are the point // at which we consider it to be a large screen. screenLayoutSize = Configuration.SCREENLAYOUT_SIZE_LARGE; } else { screenLayoutSize = Configuration.SCREENLAYOUT_SIZE_NORMAL; } // If this screen is wider than normal HVGA, or taller // than FWVGA, then for old apps we want to run in size // compatibility mode. if (shortSize > 321 || longSize > 570) { screenLayoutCompatNeeded = true; } else { screenLayoutCompatNeeded = false; } // Is this a long screen? if (((longSize*3)/5) >= (shortSize-1)) { // Anything wider than WVGA (5:3) is considering to be long. screenLayoutLong = true; } else { screenLayoutLong = false; } } // Now reduce the last screenLayout to not be better than what we // have found. if (!screenLayoutLong) { curLayout = (curLayout&~Configuration.SCREENLAYOUT_LONG_MASK) | Configuration.SCREENLAYOUT_LONG_NO; } if (screenLayoutCompatNeeded) { curLayout |= Configuration.SCREENLAYOUT_COMPAT_NEEDED; } int curSize = curLayout&Configuration.SCREENLAYOUT_SIZE_MASK; if (screenLayoutSize < curSize) { curLayout = (curLayout&~Configuration.SCREENLAYOUT_SIZE_MASK) | screenLayoutSize; } return curLayout; return Configuration.reduceScreenLayout(curLayout, longSize, shortSize); } private void computeSizeRangesAndScreenLayout(DisplayInfo displayInfo, boolean rotated, Loading @@ -6772,15 +6712,13 @@ public class WindowManagerService extends IWindowManager.Stub adjustDisplaySizeRanges(displayInfo, Surface.ROTATION_90, unrotDh, unrotDw); adjustDisplaySizeRanges(displayInfo, Surface.ROTATION_180, unrotDw, unrotDh); adjustDisplaySizeRanges(displayInfo, Surface.ROTATION_270, unrotDh, unrotDw); int sl = Configuration.SCREENLAYOUT_SIZE_XLARGE | Configuration.SCREENLAYOUT_LONG_YES; int sl = Configuration.resetScreenLayout(outConfig.screenLayout); sl = reduceConfigLayout(sl, Surface.ROTATION_0, density, unrotDw, unrotDh); sl = reduceConfigLayout(sl, Surface.ROTATION_90, density, unrotDh, unrotDw); sl = reduceConfigLayout(sl, Surface.ROTATION_180, density, unrotDw, unrotDh); sl = reduceConfigLayout(sl, Surface.ROTATION_270, density, unrotDh, unrotDw); outConfig.smallestScreenWidthDp = (int)(displayInfo.smallestNominalAppWidth / density); outConfig.screenLayout = sl|(outConfig.screenLayout&Configuration.SCREENLAYOUT_LAYOUTDIR_MASK); outConfig.screenLayout = sl; } private int reduceCompatConfigWidthSize(int curSize, int rotation, DisplayMetrics dm, Loading