Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 2dc804be authored by Jason Monk's avatar Jason Monk
Browse files

Allow persistent changes to the vendor overlay theme

This allows the overlay being used to be changed without a new build
but still will require a reboot to take effect. Should no longer be
needed once hierarchical resources are in place, and can be removed.

Also fix check in fd_utils to point at correct location.

Test: Manual
Bug: 32721178
Change-Id: I2a63aea0c87791c8eb845d735cb1182716c8174d
parent a7fcb2bc
Loading
Loading
Loading
Loading
+5 −1
Original line number Diff line number Diff line
@@ -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) {
+3 −3
Original line number Diff line number Diff line
@@ -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)
+1 −0
Original line number Diff line number Diff line
@@ -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";
+5 −0
Original line number Diff line number Diff line
@@ -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;
+10 −1
Original line number Diff line number Diff line
@@ -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