diff options
| author | 2016-11-08 19:54:24 +0000 | |
|---|---|---|
| committer | 2016-11-08 19:54:27 +0000 | |
| commit | bbe6f49147e7a7c60b4a51f37415f1bfe13a7d9c (patch) | |
| tree | 7a559cde192467ae9ad5e71cf690a085bba926df | |
| parent | 3799c85248983c849fabdc3e81899f83f3b99fed (diff) | |
| parent | 2dc804be11444565e3d1d151c2a693db3ade94c0 (diff) | |
Merge "Allow persistent changes to the vendor overlay theme"
| -rw-r--r-- | core/jni/android_util_AssetManager.cpp | 6 | ||||
| -rw-r--r-- | core/jni/fd_utils-inl.h | 6 | ||||
| -rw-r--r-- | libs/androidfw/AssetManager.cpp | 1 | ||||
| -rw-r--r-- | libs/androidfw/include/androidfw/AssetManager.h | 5 | ||||
| -rw-r--r-- | services/core/java/com/android/server/pm/PackageManagerService.java | 11 |
5 files changed, 24 insertions, 5 deletions
diff --git a/core/jni/android_util_AssetManager.cpp b/core/jni/android_util_AssetManager.cpp index a58bc9039881..d70fbb9d3915 100644 --- a/core/jni/android_util_AssetManager.cpp +++ b/core/jni/android_util_AssetManager.cpp @@ -178,7 +178,11 @@ static void verifySystemIdmaps() // Directories to scan for overlays: if OVERLAY_THEME_DIR_PROPERTY is defined, // use OVERLAY_DIR/<value of OVERLAY_THEME_DIR_PROPERTY> in addition to OVERLAY_DIR. char subdir[PROP_VALUE_MAX]; - int len = __system_property_get(AssetManager::OVERLAY_THEME_DIR_PROPERTY, subdir); + int len = __system_property_get(AssetManager::OVERLAY_THEME_DIR_PERSIST_PROPERTY, + subdir); + if (len == 0) { + len = __system_property_get(AssetManager::OVERLAY_THEME_DIR_PROPERTY, subdir); + } if (len > 0) { String8 overlayPath = String8(AssetManager::OVERLAY_DIR) + "/" + subdir; if (stat(overlayPath.string(), &st) == 0) { diff --git a/core/jni/fd_utils-inl.h b/core/jni/fd_utils-inl.h index b78b8ffa2d5d..2babe441a56d 100644 --- a/core/jni/fd_utils-inl.h +++ b/core/jni/fd_utils-inl.h @@ -260,11 +260,11 @@ class FileDescriptorInfo { } // Whitelist files needed for Runtime Resource Overlay, like these: - // /system/vendor/overlay/framework-res.apk - // /system/vendor/overlay/PG/android-framework-runtime-resource-overlay.apk + // /vendor/overlay/framework-res.apk + // /vendor/overlay/PG/android-framework-runtime-resource-overlay.apk // /data/resource-cache/system@vendor@overlay@framework-res.apk@idmap // /data/resource-cache/system@vendor@overlay@PG@framework-res.apk@idmap - static const char* kOverlayDir = "/system/vendor/overlay/"; + static const char* kOverlayDir = "/vendor/overlay/"; static const char* kApkSuffix = ".apk"; if (android::base::StartsWith(path, kOverlayDir) diff --git a/libs/androidfw/AssetManager.cpp b/libs/androidfw/AssetManager.cpp index ae789d649e72..e0689006d5dd 100644 --- a/libs/androidfw/AssetManager.cpp +++ b/libs/androidfw/AssetManager.cpp @@ -74,6 +74,7 @@ const char* AssetManager::RESOURCES_FILENAME = "resources.arsc"; const char* AssetManager::IDMAP_BIN = "/system/bin/idmap"; const char* AssetManager::OVERLAY_DIR = "/vendor/overlay"; const char* AssetManager::OVERLAY_THEME_DIR_PROPERTY = "ro.boot.vendor.overlay.theme"; +const char* AssetManager::OVERLAY_THEME_DIR_PERSIST_PROPERTY = "persist.vendor.overlay.theme"; const char* AssetManager::TARGET_PACKAGE_NAME = "android"; const char* AssetManager::TARGET_APK_PATH = "/system/framework/framework-res.apk"; const char* AssetManager::IDMAP_DIR = "/data/resource-cache"; diff --git a/libs/androidfw/include/androidfw/AssetManager.h b/libs/androidfw/include/androidfw/AssetManager.h index 0441b9d789e2..becd307d114d 100644 --- a/libs/androidfw/include/androidfw/AssetManager.h +++ b/libs/androidfw/include/androidfw/AssetManager.h @@ -66,6 +66,11 @@ public: * OVERLAY_DIR. */ static const char* OVERLAY_THEME_DIR_PROPERTY; + /** + * If OVERLAY_THEME_DIR_PERSIST_PROPERTY, use it to override + * OVERLAY_THEME_DIR_PROPERTY. + */ + static const char* OVERLAY_THEME_DIR_PERSIST_PROPERTY; static const char* TARGET_PACKAGE_NAME; static const char* TARGET_APK_PATH; static const char* IDMAP_DIR; diff --git a/services/core/java/com/android/server/pm/PackageManagerService.java b/services/core/java/com/android/server/pm/PackageManagerService.java index ca773357c772..b1f2a246fe1c 100644 --- a/services/core/java/com/android/server/pm/PackageManagerService.java +++ b/services/core/java/com/android/server/pm/PackageManagerService.java @@ -471,6 +471,12 @@ public class PackageManagerService extends IPackageManager.Stub { * VENDOR_OVERLAY_DIR. */ private static final String VENDOR_OVERLAY_THEME_PROPERTY = "ro.boot.vendor.overlay.theme"; + /** + * Same as VENDOR_OVERLAY_THEME_PROPERTY, except persistent. If set will override whatever + * is in VENDOR_OVERLAY_THEME_PROPERTY. + */ + private static final String VENDOR_OVERLAY_THEME_PERSIST_PROPERTY + = "persist.vendor.overlay.theme"; private static int DEFAULT_EPHEMERAL_HASH_PREFIX_MASK = 0xFFFFF000; private static int DEFAULT_EPHEMERAL_HASH_PREFIX_COUNT = 5; @@ -2289,7 +2295,10 @@ public class PackageManagerService extends IPackageManager.Stub { // Collect vendor overlay packages. (Do this before scanning any apps.) // For security and version matching reason, only consider // overlay packages if they reside in the right directory. - String overlayThemeDir = SystemProperties.get(VENDOR_OVERLAY_THEME_PROPERTY); + String overlayThemeDir = SystemProperties.get(VENDOR_OVERLAY_THEME_PERSIST_PROPERTY); + if (overlayThemeDir.isEmpty()) { + overlayThemeDir = SystemProperties.get(VENDOR_OVERLAY_THEME_PROPERTY); + } if (!overlayThemeDir.isEmpty()) { scanDirTracedLI(new File(VENDOR_OVERLAY_DIR, overlayThemeDir), mDefParseFlags | PackageParser.PARSE_IS_SYSTEM |