summaryrefslogtreecommitdiffstats
path: root/core/java/android/content/res
diff options
context:
space:
mode:
authorDianne Hackborn <hackbod@google.com>2009-07-21 17:46:02 -0700
committerDianne Hackborn <hackbod@google.com>2009-07-21 18:28:42 -0700
commitc4db95c077f826585d20be2f3db4043c53d30cf5 (patch)
tree9176baa673f97b27150f862485fd492cb3ec7e88 /core/java/android/content/res
parentfe6f45c81463d2d28e11ac6083f2653e1286c5ef (diff)
downloadframeworks_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.java58
-rw-r--r--core/java/android/content/res/Configuration.java51
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;
}