am 2a30547a: Merge "Work on issue #6949468: android.dpi.cts.ConfigurationScreenLayoutTest..." into jb-mr1-dev
* commit '2a30547af44536f6b0e2f7020ac1a435c72afc84': Work on issue #6949468: android.dpi.cts.ConfigurationScreenLayoutTest...
This commit is contained in:
@@ -3871,14 +3871,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;
|
||||
|
||||
@@ -172,7 +172,77 @@ public final class Configuration implements Parcelable, Comparable<Configuration
|
||||
* Multiple Screens</a> for more information.
|
||||
*/
|
||||
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.
|
||||
|
||||
@@ -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) {
|
||||
@@ -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,
|
||||
@@ -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,
|
||||
|
||||
Reference in New Issue
Block a user