diff options
-rw-r--r-- | api/current.xml | 33 | ||||
-rw-r--r-- | core/java/android/content/pm/ApplicationInfo.java | 18 | ||||
-rw-r--r-- | core/java/android/content/pm/PackageManager.java | 6 | ||||
-rw-r--r-- | core/java/android/content/pm/PackageParser.java | 34 | ||||
-rw-r--r-- | core/java/android/view/WindowManager.java | 15 | ||||
-rw-r--r-- | core/res/res/values/attrs_manifest.xml | 9 | ||||
-rw-r--r-- | core/res/res/values/public.xml | 6 |
7 files changed, 112 insertions, 9 deletions
diff --git a/api/current.xml b/api/current.xml index 26a416d..2b508a6 100644 --- a/api/current.xml +++ b/api/current.xml @@ -2594,6 +2594,17 @@ visibility="public" > </field> +<field name="density" + type="int" + transient="false" + volatile="false" + value="16843372" + static="true" + final="true" + deprecated="not deprecated" + visibility="public" +> +</field> <field name="dependency" type="int" transient="false" @@ -31607,6 +31618,17 @@ visibility="public" > </field> +<field name="supportsDensities" + type="int[]" + transient="false" + volatile="false" + value="null" + static="false" + final="false" + deprecated="not deprecated" + visibility="public" +> +</field> <field name="taskAffinity" type="java.lang.String" transient="false" @@ -33597,6 +33619,17 @@ visibility="public" > </field> +<field name="GET_SUPPORTS_DENSITIES" + type="int" + transient="false" + volatile="false" + value="32768" + static="true" + final="true" + deprecated="not deprecated" + visibility="public" +> +</field> <field name="GET_UNINSTALLED_PACKAGES" type="int" transient="false" diff --git a/core/java/android/content/pm/ApplicationInfo.java b/core/java/android/content/pm/ApplicationInfo.java index 8d727ed..173057c 100644 --- a/core/java/android/content/pm/ApplicationInfo.java +++ b/core/java/android/content/pm/ApplicationInfo.java @@ -161,6 +161,14 @@ public class ApplicationInfo extends PackageItemInfo implements Parcelable { */ public int uid; + + /** + * The list of densities in DPI that application supprots. This + * field is only set if the {@link PackageManager#GET_SUPPORTS_DENSITIES} flag was + * used when retrieving the structure. + */ + public int[] supportsDensities; + /** * When false, indicates that all components within this application are * considered disabled, regardless of their individually set enabled status. @@ -181,8 +189,9 @@ public class ApplicationInfo extends PackageItemInfo implements Parcelable { pw.println(prefix + "sharedLibraryFiles=" + sharedLibraryFiles); pw.println(prefix + "dataDir=" + dataDir); pw.println(prefix + "enabled=" + enabled); - pw.println(prefix+"manageSpaceActivityName="+manageSpaceActivityName); - pw.println(prefix+"description=0x"+Integer.toHexString(descriptionRes)); + pw.println(prefix + "manageSpaceActivityName="+manageSpaceActivityName); + pw.println(prefix + "description=0x"+Integer.toHexString(descriptionRes)); + pw.println(prefix + "supportsDensities=" + supportsDensities); super.dumpBack(pw, prefix); } @@ -228,6 +237,7 @@ public class ApplicationInfo extends PackageItemInfo implements Parcelable { enabled = orig.enabled; manageSpaceActivityName = orig.manageSpaceActivityName; descriptionRes = orig.descriptionRes; + supportsDensities = orig.supportsDensities; } @@ -257,6 +267,7 @@ public class ApplicationInfo extends PackageItemInfo implements Parcelable { dest.writeInt(enabled ? 1 : 0); dest.writeString(manageSpaceActivityName); dest.writeInt(descriptionRes); + dest.writeIntArray(supportsDensities); } public static final Parcelable.Creator<ApplicationInfo> CREATOR @@ -285,8 +296,9 @@ public class ApplicationInfo extends PackageItemInfo implements Parcelable { enabled = source.readInt() != 0; manageSpaceActivityName = source.readString(); descriptionRes = source.readInt(); + supportsDensities = source.createIntArray(); } - + /** * Retrieve the textual description of the application. This * will call back on the given PackageManager to load the description from diff --git a/core/java/android/content/pm/PackageManager.java b/core/java/android/content/pm/PackageManager.java index 3e94734..9e06666 100644 --- a/core/java/android/content/pm/PackageManager.java +++ b/core/java/android/content/pm/PackageManager.java @@ -166,6 +166,12 @@ public abstract class PackageManager { public static final int GET_CONFIGURATIONS = 0x00004000; /** + * {@link ApplicationInfo} flag: return the + * {@link ApplicationInfo#supportsDensities} that the package supports. + */ + public static final int GET_SUPPORTS_DENSITIES = 0x00008000; + + /** * Permission check result: this is returned by {@link #checkPermission} * if the permission has been granted to the given package. */ diff --git a/core/java/android/content/pm/PackageParser.java b/core/java/android/content/pm/PackageParser.java index 2dcb483..7a873f8 100644 --- a/core/java/android/content/pm/PackageParser.java +++ b/core/java/android/content/pm/PackageParser.java @@ -45,6 +45,7 @@ import java.security.cert.CertificateEncodingException; import java.util.ArrayList; import java.util.Enumeration; import java.util.Iterator; +import java.util.List; import java.util.jar.JarEntry; import java.util.jar.JarFile; @@ -726,6 +727,14 @@ public class PackageParser { pkg.usesLibraries.toArray(pkg.usesLibraryFiles); } + int size = pkg.supportsDensityList.size(); + if (size > 0) { + int densities[] = pkg.supportsDensities = new int[size]; + List<Integer> densityList = pkg.supportsDensityList; + for (int i = 0; i < size; i++) { + densities[i] = densityList.get(i); + } + } return pkg; } @@ -1173,6 +1182,21 @@ public class PackageParser { XmlUtils.skipCurrentTag(parser); + } else if (tagName.equals("supports-density")) { + sa = res.obtainAttributes(attrs, + com.android.internal.R.styleable.AndroidManifestSupportsDensity); + + int density = sa.getInteger( + com.android.internal.R.styleable.AndroidManifestSupportsDensity_density, -1); + + sa.recycle(); + + if (density != -1 && !owner.supportsDensityList.contains(density)) { + owner.supportsDensityList.add(density); + } + + XmlUtils.skipCurrentTag(parser); + } else { if (!RIGID_PARSER) { Log.w(TAG, "Problem in package " + mArchiveSourcePath + ":"); @@ -2035,6 +2059,9 @@ public class PackageParser { // We store the application meta-data independently to avoid multiple unwanted references public Bundle mAppMetaData = null; + public final ArrayList<Integer> supportsDensityList = new ArrayList<Integer>(); + public int[] supportsDensities = null; + // If this is a 3rd party app, this is the path of the zip file. public String mPath; @@ -2149,6 +2176,10 @@ public class PackageParser { && p.usesLibraryFiles != null) { return true; } + if ((flags & PackageManager.GET_SUPPORTS_DENSITIES) != 0 + && p.supportsDensities != null) { + return true; + } return false; } @@ -2166,6 +2197,9 @@ public class PackageParser { if ((flags & PackageManager.GET_SHARED_LIBRARY_FILES) != 0) { ai.sharedLibraryFiles = p.usesLibraryFiles; } + if ((flags & PackageManager.GET_SUPPORTS_DENSITIES) != 0) { + ai.supportsDensities = p.supportsDensities; + } return ai; } diff --git a/core/java/android/view/WindowManager.java b/core/java/android/view/WindowManager.java index b87cc42..34e65ad 100644 --- a/core/java/android/view/WindowManager.java +++ b/core/java/android/view/WindowManager.java @@ -953,7 +953,20 @@ public interface WindowManager extends ViewManager { sb.append('}'); return sb.toString(); } - + + void scaleUp(float scale) { + if (scale != 1.0f) { + x *= scale; + y *= scale; + if (width > 0) { + width *= scale; + } + if (height > 0) { + height *= scale; + } + } + } + private CharSequence mTitle = ""; } } diff --git a/core/res/res/values/attrs_manifest.xml b/core/res/res/values/attrs_manifest.xml index 093ddd3..54da326 100644 --- a/core/res/res/values/attrs_manifest.xml +++ b/core/res/res/values/attrs_manifest.xml @@ -769,6 +769,15 @@ <attr name="name" /> </declare-styleable> + <!-- The <code>supports-density</code> specifies a screen density that this + package supports. Application can specify multiple densities it supports. + <p>This appears as a child tag of the + {@link #AndroidManifestApplication application} tag. --> + <declare-styleable name="AndroidManifestSupportsDensity" parent="AndroidManifestApplication"> + <!-- Required value of the density in dip (device independent pixel). --> + <attr name="density" format="integer" /> + </declare-styleable> + <!-- The <code>provider</code> tag declares a {@link android.content.ContentProvider} class that is available as part of the package's application components, supplying structured diff --git a/core/res/res/values/public.xml b/core/res/res/values/public.xml index d84778e..5b5e5c2 100644 --- a/core/res/res/values/public.xml +++ b/core/res/res/values/public.xml @@ -1093,6 +1093,7 @@ <public type="attr" name="tension" id="0x0101026a" /> <public type="attr" name="extraTension" id="0x0101026b" /> + <public type="attr" name="density" id="0x0101026c" /> <public type="anim" name="anticipate_interpolator" id="0x010a0007" /> <public type="anim" name="overshoot_interpolator" id="0x010a0008" /> @@ -1103,8 +1104,3 @@ <public type="drawable" name="stat_sys_vp_phone_call_on_hold" id="0x0108022e" /> </resources> - - - - - |