diff options
author | Mitsuru Oshima <> | 2009-04-27 12:01:23 -0700 |
---|---|---|
committer | The Android Open Source Project <initial-contribution@android.com> | 2009-04-27 12:01:23 -0700 |
commit | 8d112675879a2b83197d3b4ae4fb623abd1a1ec3 (patch) | |
tree | a89e77bc71077b5ccc042386fc342b4c7ddc5789 /core/java/android | |
parent | 4369397d0697810241f7a7ab22891930067166dd (diff) | |
download | frameworks_base-8d112675879a2b83197d3b4ae4fb623abd1a1ec3.zip frameworks_base-8d112675879a2b83197d3b4ae4fb623abd1a1ec3.tar.gz frameworks_base-8d112675879a2b83197d3b4ae4fb623abd1a1ec3.tar.bz2 |
AI 147845: Compatibility mode support. Part 1
Adding supports-density tag to manifest file/ApplicationInfo.
BUG=1752478
Automated import of CL 147845
Diffstat (limited to 'core/java/android')
-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 |
4 files changed, 69 insertions, 4 deletions
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 = ""; } } |