From 8d112675879a2b83197d3b4ae4fb623abd1a1ec3 Mon Sep 17 00:00:00 2001
From: Mitsuru Oshima <>
Date: Mon, 27 Apr 2009 12:01:23 -0700
Subject: [PATCH] AI 147845: Compatibility mode support. Part 1 Adding
supports-density tag to manifest file/ApplicationInfo. BUG=1752478
Automated import of CL 147845
---
api/current.xml | 33 ++++++++++++++++++
.../android/content/pm/ApplicationInfo.java | 18 ++++++++--
.../android/content/pm/PackageManager.java | 6 ++++
.../android/content/pm/PackageParser.java | 34 +++++++++++++++++++
core/java/android/view/WindowManager.java | 15 +++++++-
core/res/res/values/attrs_manifest.xml | 9 +++++
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 26a416db456f9..2b508a6ba5642 100644
--- a/api/current.xml
+++ b/api/current.xml
@@ -2594,6 +2594,17 @@
visibility="public"
>
+
+
+
+
+
+
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 3e9473472dcb3..9e0666685e261 100644
--- a/core/java/android/content/pm/PackageManager.java
+++ b/core/java/android/content/pm/PackageManager.java
@@ -165,6 +165,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 2dcb4830bf484..7a873f8210fff 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 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 supportsDensityList = new ArrayList();
+ 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 b87cc42f0e058..34e65ad3cc0ca 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 093ddd33f3d67..54da32678d7e7 100644
--- a/core/res/res/values/attrs_manifest.xml
+++ b/core/res/res/values/attrs_manifest.xml
@@ -769,6 +769,15 @@
+
+
+
+
+
+