summaryrefslogtreecommitdiffstats
path: root/core/java/android/content/pm
diff options
context:
space:
mode:
authord34d <clark@cyngn.com>2015-07-01 16:32:12 -0700
committerClark Scheff <clark@cyngn.com>2015-10-27 18:22:07 -0700
commit360067409495aff9843fd3ed86f9de5c71af0688 (patch)
treefc18bfda6ae23d1eb4e01f2e3ec93e9f238a659d /core/java/android/content/pm
parenta7a7c5ac24e5bb78e247c7f61105c4c9e892dc59 (diff)
downloadframeworks_base-360067409495aff9843fd3ed86f9de5c71af0688.zip
frameworks_base-360067409495aff9843fd3ed86f9de5c71af0688.tar.gz
frameworks_base-360067409495aff9843fd3ed86f9de5c71af0688.tar.bz2
Store manifest hash code in PackageParser.Package
Optimize the way we calculate the manifest hash code and also store this value in PackageParser.Package for faster lookups. The manifest hash code value will also be updated when packages are updated. Change-Id: I111e8831c5b96d847e886071e99b1cefd075befc
Diffstat (limited to 'core/java/android/content/pm')
-rw-r--r--core/java/android/content/pm/PackageParser.java2
-rw-r--r--core/java/android/content/pm/ThemeUtils.java18
2 files changed, 20 insertions, 0 deletions
diff --git a/core/java/android/content/pm/PackageParser.java b/core/java/android/content/pm/PackageParser.java
index f4cf1e6..7653c39 100644
--- a/core/java/android/content/pm/PackageParser.java
+++ b/core/java/android/content/pm/PackageParser.java
@@ -1140,6 +1140,7 @@ public class PackageParser {
final ZipEntry je = jarFile.findEntry(ANDROID_MANIFEST_FILENAME);
if (je != null) {
pkg.manifestDigest = ManifestDigest.fromInputStream(jarFile.getInputStream(je));
+ pkg.manifestHashCode = ThemeUtils.getPackageHashCode(pkg);
}
} finally {
jarFile.close();
@@ -4594,6 +4595,7 @@ public class PackageParser {
public boolean mTrustedOverlay;
public boolean hasIconPack;
+ public int manifestHashCode;
/**
* Data used to feed the KeySetManagerService
diff --git a/core/java/android/content/pm/ThemeUtils.java b/core/java/android/content/pm/ThemeUtils.java
index d789898..ef9fca0 100644
--- a/core/java/android/content/pm/ThemeUtils.java
+++ b/core/java/android/content/pm/ThemeUtils.java
@@ -121,6 +121,13 @@ public class ThemeUtils {
"/data/data/com.android.providers.settings/databases/settings.db";
private static final String SETTINGS_SECURE_TABLE = "secure";
+ /**
+ * IDMAP hash version code used to alter the resulting hash and force recreating
+ * of the idmap. This value should be changed whenever there is a need to force
+ * an update to all idmaps.
+ */
+ private static final byte IDMAP_HASH_VERSION = 3;
+
// Actions in manifests which identify legacy icon packs
public static final String[] sSupportedActions = new String[] {
"org.adw.launcher.THEMES",
@@ -758,4 +765,15 @@ public class ThemeUtils {
|| ThemeConfig.SYSTEMUI_STATUS_BAR_PKG.equals(component)
|| ThemeConfig.SYSTEMUI_NAVBAR_PKG.equals(component));
}
+
+ /**
+ * Get a 32 bit hashcode for the given package.
+ * @param pkg
+ * @return
+ */
+ public static int getPackageHashCode(PackageParser.Package pkg) {
+ int hash = pkg.manifestDigest != null ? pkg.manifestDigest.hashCode() : 0;
+ hash = 31 * hash + IDMAP_HASH_VERSION;
+ return hash;
+ }
}