diff options
author | Dianne Hackborn <hackbod@google.com> | 2009-07-21 17:46:02 -0700 |
---|---|---|
committer | Dianne Hackborn <hackbod@google.com> | 2009-07-21 18:28:42 -0700 |
commit | c4db95c077f826585d20be2f3db4043c53d30cf5 (patch) | |
tree | 9176baa673f97b27150f862485fd492cb3ec7e88 /core/java/android/content/res | |
parent | fe6f45c81463d2d28e11ac6083f2653e1286c5ef (diff) | |
download | frameworks_base-c4db95c077f826585d20be2f3db4043c53d30cf5.zip frameworks_base-c4db95c077f826585d20be2f3db4043c53d30cf5.tar.gz frameworks_base-c4db95c077f826585d20be2f3db4043c53d30cf5.tar.bz2 |
First pass at reworking screen density/size APIs.
This changes the names of the directories in aapt, to what you see
in the list of DpiTest resources. Also adds a new "long" configuration
for wide screens, which the platform sets appropriate, and introduces
a new kind of resizeability for not large but significantly larger
than normal screens which may have compatibility issues.
Diffstat (limited to 'core/java/android/content/res')
-rw-r--r-- | core/java/android/content/res/CompatibilityInfo.java | 58 | ||||
-rw-r--r-- | core/java/android/content/res/Configuration.java | 51 |
2 files changed, 85 insertions, 24 deletions
diff --git a/core/java/android/content/res/CompatibilityInfo.java b/core/java/android/content/res/CompatibilityInfo.java index 2805bd5..517551e 100644 --- a/core/java/android/content/res/CompatibilityInfo.java +++ b/core/java/android/content/res/CompatibilityInfo.java @@ -69,8 +69,8 @@ public class CompatibilityInfo { /** * A flag mask to indicates that the application can expand over the original size. * The flag is set to true if - * 1) Application declares its expandable in manifest file using <expandable /> or - * 2) The screen size is same as (320 x 480) * density. + * 1) Application declares its expandable in manifest file using <supports-screens> or + * 2) Configuration.SCREENLAYOUT_COMPAT_NEEDED is not set * {@see compatibilityFlag} */ private static final int EXPANDABLE = 2; @@ -78,11 +78,28 @@ public class CompatibilityInfo { /** * A flag mask to tell if the application is configured to be expandable. This differs * from EXPANDABLE in that the application that is not expandable will be - * marked as expandable if it runs in (320x 480) * density screen size. + * marked as expandable if Configuration.SCREENLAYOUT_COMPAT_NEEDED is not set. */ private static final int CONFIGURED_EXPANDABLE = 4; - private static final int SCALING_EXPANDABLE_MASK = SCALING_REQUIRED | EXPANDABLE; + /** + * A flag mask to indicates that the application supports large screens. + * The flag is set to true if + * 1) Application declares it supports large screens in manifest file using <supports-screens> or + * 2) The screen size is not large + * {@see compatibilityFlag} + */ + private static final int LARGE_SCREENS = 8; + + /** + * A flag mask to tell if the application supports large screens. This differs + * from LARGE_SCREENS in that the application that does not support large + * screens will be marked as supporting them if the current screen is not + * large. + */ + private static final int CONFIGURED_LARGE_SCREENS = 16; + + private static final int SCALING_EXPANDABLE_MASK = SCALING_REQUIRED | EXPANDABLE | LARGE_SCREENS; /** * The effective screen density we have selected for this application. @@ -108,7 +125,10 @@ public class CompatibilityInfo { appFlags = appInfo.flags; if ((appInfo.flags & ApplicationInfo.FLAG_SUPPORTS_LARGE_SCREENS) != 0) { - mCompatibilityFlags = EXPANDABLE | CONFIGURED_EXPANDABLE; + mCompatibilityFlags |= LARGE_SCREENS | CONFIGURED_LARGE_SCREENS; + } + if ((appInfo.flags & ApplicationInfo.FLAG_RESIZEABLE_FOR_SCREENS) != 0) { + mCompatibilityFlags |= EXPANDABLE | CONFIGURED_EXPANDABLE; } float packageDensityScale = -1.0f; @@ -162,7 +182,8 @@ public class CompatibilityInfo { private CompatibilityInfo() { this(ApplicationInfo.FLAG_SUPPORTS_SMALL_SCREENS | ApplicationInfo.FLAG_SUPPORTS_NORMAL_SCREENS - | ApplicationInfo.FLAG_SUPPORTS_LARGE_SCREENS, + | ApplicationInfo.FLAG_SUPPORTS_LARGE_SCREENS + | ApplicationInfo.FLAG_RESIZEABLE_FOR_SCREENS, EXPANDABLE | CONFIGURED_EXPANDABLE, DisplayMetrics.DENSITY_DEVICE, 1.0f, @@ -190,6 +211,17 @@ public class CompatibilityInfo { } /** + * Sets large screen bit in the compatibility flag. + */ + public void setLargeScreens(boolean expandable) { + if (expandable) { + mCompatibilityFlags |= CompatibilityInfo.LARGE_SCREENS; + } else { + mCompatibilityFlags &= ~CompatibilityInfo.LARGE_SCREENS; + } + } + + /** * @return true if the application is configured to be expandable. */ public boolean isConfiguredExpandable() { @@ -197,6 +229,13 @@ public class CompatibilityInfo { } /** + * @return true if the application is configured to be expandable. + */ + public boolean isConfiguredLargeScreens() { + return (mCompatibilityFlags & CompatibilityInfo.CONFIGURED_LARGE_SCREENS) != 0; + } + + /** * @return true if the scaling is required */ public boolean isScalingRequired() { @@ -204,7 +243,8 @@ public class CompatibilityInfo { } public boolean supportsScreen() { - return (mCompatibilityFlags & CompatibilityInfo.EXPANDABLE) != 0; + return (mCompatibilityFlags & (EXPANDABLE|LARGE_SCREENS)) + == (EXPANDABLE|LARGE_SCREENS); } @Override @@ -219,8 +259,8 @@ public class CompatibilityInfo { * @param params the window's parameter */ public Translator getTranslator(WindowManager.LayoutParams params) { - if ( (mCompatibilityFlags & CompatibilityInfo.SCALING_EXPANDABLE_MASK) - == CompatibilityInfo.EXPANDABLE) { + if ( (mCompatibilityFlags & SCALING_EXPANDABLE_MASK) + == (EXPANDABLE|LARGE_SCREENS)) { if (DBG) Log.d(TAG, "no translation required"); return null; } diff --git a/core/java/android/content/res/Configuration.java b/core/java/android/content/res/Configuration.java index 577aa60..5f44cc9 100644 --- a/core/java/android/content/res/Configuration.java +++ b/core/java/android/content/res/Configuration.java @@ -41,6 +41,39 @@ public final class Configuration implements Parcelable, Comparable<Configuration */ public boolean userSetLocale; + public static final int SCREENLAYOUT_SIZE_MASK = 0x0f; + public static final int SCREENLAYOUT_SIZE_UNDEFINED = 0x00; + public static final int SCREENLAYOUT_SIZE_SMALL = 0x01; + public static final int SCREENLAYOUT_SIZE_NORMAL = 0x02; + public static final int SCREENLAYOUT_SIZE_LARGE = 0x03; + + public static final int SCREENLAYOUT_LONG_MASK = 0x30; + public static final int SCREENLAYOUT_LONG_UNDEFINED = 0x00; + public static final int SCREENLAYOUT_LONG_NO = 0x10; + public static final int SCREENLAYOUT_LONG_YES = 0x20; + + /** + * Special flag we generate to indicate that the screen layout requires + * us to use a compatibility mode for apps that are not modern layout + * aware. + * @hide + */ + public static final int SCREENLAYOUT_COMPAT_NEEDED = 0x10000000; + + /** + * Bit mask of overall layout of the screen. Currently there are two + * fields: + * <p>The {@link #SCREENLAYOUT_SIZE_MASK} bits define the overall size + * of the screen. They may be one of + * {@link #SCREENLAYOUT_SIZE_SMALL}, {@link #SCREENLAYOUT_SIZE_NORMAL}, + * or {@link #SCREENLAYOUT_SIZE_LARGE}. + * + * <p>The {@link #SCREENLAYOUT_LONG_MASK} defines whether the screen + * is wider/taller than normal. They may be one of + * {@link #SCREENLAYOUT_LONG_NO} or {@link #SCREENLAYOUT_LONG_YES}. + */ + public int screenLayout; + public static final int TOUCHSCREEN_UNDEFINED = 0; public static final int TOUCHSCREEN_NOTOUCH = 1; public static final int TOUCHSCREEN_STYLUS = 2; @@ -116,18 +149,6 @@ public final class Configuration implements Parcelable, Comparable<Configuration */ public int orientation; - public static final int SCREENLAYOUT_UNDEFINED = 0; - public static final int SCREENLAYOUT_SMALL = 1; - public static final int SCREENLAYOUT_NORMAL = 2; - public static final int SCREENLAYOUT_LARGE = 3; - - /** - * Overall layout of the screen. May be one of - * {@link #SCREENLAYOUT_SMALL}, {@link #SCREENLAYOUT_NORMAL}, - * or {@link #SCREENLAYOUT_LARGE}. - */ - public int screenLayout; - /** * Construct an invalid Configuration. You must call {@link #setToDefaults} * for this object to be valid. {@more} @@ -198,7 +219,7 @@ public final class Configuration implements Parcelable, Comparable<Configuration hardKeyboardHidden = HARDKEYBOARDHIDDEN_UNDEFINED; navigation = NAVIGATION_UNDEFINED; orientation = ORIENTATION_UNDEFINED; - screenLayout = SCREENLAYOUT_UNDEFINED; + screenLayout = SCREENLAYOUT_SIZE_UNDEFINED; } /** {@hide} */ @@ -269,7 +290,7 @@ public final class Configuration implements Parcelable, Comparable<Configuration changed |= ActivityInfo.CONFIG_ORIENTATION; orientation = delta.orientation; } - if (delta.screenLayout != SCREENLAYOUT_UNDEFINED + if (delta.screenLayout != SCREENLAYOUT_SIZE_UNDEFINED && screenLayout != delta.screenLayout) { changed |= ActivityInfo.CONFIG_SCREEN_LAYOUT; screenLayout = delta.screenLayout; @@ -342,7 +363,7 @@ public final class Configuration implements Parcelable, Comparable<Configuration && orientation != delta.orientation) { changed |= ActivityInfo.CONFIG_ORIENTATION; } - if (delta.screenLayout != SCREENLAYOUT_UNDEFINED + if (delta.screenLayout != SCREENLAYOUT_SIZE_UNDEFINED && screenLayout != delta.screenLayout) { changed |= ActivityInfo.CONFIG_SCREEN_LAYOUT; } |