diff options
author | d34d <clark@cyngn.com> | 2015-07-01 16:32:12 -0700 |
---|---|---|
committer | Clark Scheff <clark@cyngn.com> | 2015-10-27 18:22:07 -0700 |
commit | 360067409495aff9843fd3ed86f9de5c71af0688 (patch) | |
tree | fc18bfda6ae23d1eb4e01f2e3ec93e9f238a659d /core/java/android/content/pm | |
parent | a7a7c5ac24e5bb78e247c7f61105c4c9e892dc59 (diff) | |
download | frameworks_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.java | 2 | ||||
-rw-r--r-- | core/java/android/content/pm/ThemeUtils.java | 18 |
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; + } } |