diff options
author | d34d <clark@cyngn.com> | 2015-05-11 11:43:41 -0700 |
---|---|---|
committer | Clark Scheff <clark@cyngn.com> | 2015-10-27 18:17:06 -0700 |
commit | 733da72412bb7b8cc10a9312e15f7d49caecf190 (patch) | |
tree | 20f43d0a60917ac57afe176eaf9533b498e9d23e | |
parent | 7739ab7e7848c29309c691dd7e73b92671bf99a1 (diff) | |
download | frameworks_base-733da72412bb7b8cc10a9312e15f7d49caecf190.zip frameworks_base-733da72412bb7b8cc10a9312e15f7d49caecf190.tar.gz frameworks_base-733da72412bb7b8cc10a9312e15f7d49caecf190.tar.bz2 |
Remove resources.apk from ZipSet when removing overlay
When a theme that is currently applied is updated, the resources.apk
prior to the update remains in the AssetManager ZipSet and is still
used when loading themed assets. This patch removes the resources.apk
from the ZipSet so that the new one can be correctly loaded in.
Change-Id: Ia0b415a3598779825090f365581d374bf51c812d
REF: THEMES-639
-rw-r--r-- | include/androidfw/AssetManager.h | 2 | ||||
-rw-r--r-- | libs/androidfw/AssetManager.cpp | 7 |
2 files changed, 9 insertions, 0 deletions
diff --git a/include/androidfw/AssetManager.h b/include/androidfw/AssetManager.h index 0fbf766..13f7951 100644 --- a/include/androidfw/AssetManager.h +++ b/include/androidfw/AssetManager.h @@ -379,6 +379,8 @@ private: void addOverlay(const String8& path, const asset_path& overlay); bool getOverlay(const String8& path, size_t idx, asset_path* out) const; + + void closeZip(const String8& zip); private: void closeZip(int idx); diff --git a/libs/androidfw/AssetManager.cpp b/libs/androidfw/AssetManager.cpp index f4ac254..635aa5b 100644 --- a/libs/androidfw/AssetManager.cpp +++ b/libs/androidfw/AssetManager.cpp @@ -1018,6 +1018,9 @@ bool AssetManager::removeOverlayPath(const String8& packageName, int32_t cookie) return false; } + const asset_path& oap = mAssetPaths.itemAt(which); + mZipSet.closeZip(oap.resApkPath); + mAssetPaths.removeAt(which); ResTable* rt = mResources; @@ -2291,6 +2294,10 @@ ZipFileRO* AssetManager::ZipSet::getZip(const String8& path) return zip->getZip(); } +void AssetManager::ZipSet::closeZip(const String8& zip) { + closeZip(getIndex(zip)); +} + Asset* AssetManager::ZipSet::getZipResourceTableAsset(const String8& path) { int idx = getIndex(path); |