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

Unverified Commit 1ea56efa authored by LuK1337's avatar LuK1337 Committed by Michael Bestas
Browse files

Allow lineage resources package to be overlayed by RRO packages

Change-Id: I152ef9a87b16338e14af508e0f1f42830688c5ea
parent 5db8d3d8
Loading
Loading
Loading
Loading
+27 −20
Original line number Diff line number Diff line
@@ -489,13 +489,14 @@ public class OverlayConfig {
     * precedence.
     */
    @VisibleForTesting
    public ArrayList<IdmapInvocation> getImmutableFrameworkOverlayIdmapInvocations() {
    public ArrayList<IdmapInvocation> getImmutableFrameworkOverlayIdmapInvocations(
            String packageName) {
        final ArrayList<IdmapInvocation> idmapInvocations = new ArrayList<>();
        final ArrayList<Configuration> sortedConfigs = getSortedOverlays();
        for (int i = 0, n = sortedConfigs.size(); i < n; i++) {
            final Configuration overlay = sortedConfigs.get(i);
            if (overlay.parsedConfig.mutable || !overlay.parsedConfig.enabled
                    || !"android".equals(overlay.parsedConfig.parsedInfo.targetPackageName)) {
                    || !packageName.equals(overlay.parsedConfig.parsedInfo.targetPackageName)) {
                continue;
            }

@@ -534,11 +535,16 @@ public class OverlayConfig {
     */
    @NonNull
    public String[] createImmutableFrameworkIdmapsInZygote() {
        final String targetPath = AssetManager.FRAMEWORK_APK_PATH;
        final ArrayList<String> idmapPaths = new ArrayList<>();
        final ArrayList<IdmapInvocation> idmapInvocations =
                getImmutableFrameworkOverlayIdmapInvocations();

        for (Map.Entry<String, String> target : new HashMap<String, String>() {{
                put(AssetManager.FRAMEWORK_APK_PATH, "android");
                put("/system/framework/org.lineageos.platform-res.apk", "lineageos.platform");
        }}.entrySet()) {
            final String targetPath = target.getKey();
            final String targetPackageName = target.getValue();
            final ArrayList<IdmapInvocation> idmapInvocations =
                    getImmutableFrameworkOverlayIdmapInvocations(targetPackageName);
            for (int i = 0, n = idmapInvocations.size(); i < n; i++) {
                final IdmapInvocation invocation = idmapInvocations.get(i);
                final String[] idmaps = createIdmap(targetPath,
@@ -555,6 +561,7 @@ public class OverlayConfig {

                idmapPaths.addAll(Arrays.asList(idmaps));
            }
        }

        return idmapPaths.toArray(new String[0]);
    }
+2 −2
Original line number Diff line number Diff line
@@ -471,7 +471,7 @@ public class OverlayConfigTest {
        final OverlayConfig overlayConfig = createConfigImpl();
        if (mScannerRule.getIteration() == OverlayConfigIterationRule.Iteration.ZYGOTE) {
            final ArrayList<IdmapInvocation> idmapInvocations =
                    overlayConfig.getImmutableFrameworkOverlayIdmapInvocations();
                    overlayConfig.getImmutableFrameworkOverlayIdmapInvocations("android");
            assertEquals(2, idmapInvocations.size());

            final IdmapInvocation i0 = idmapInvocations.get(0);
@@ -508,7 +508,7 @@ public class OverlayConfigTest {

        if (mScannerRule.getIteration() == OverlayConfigIterationRule.Iteration.ZYGOTE) {
            final ArrayList<IdmapInvocation> idmapInvocations =
                    overlayConfig.getImmutableFrameworkOverlayIdmapInvocations();
                    overlayConfig.getImmutableFrameworkOverlayIdmapInvocations("android");
            assertEquals(3, idmapInvocations.size());

            final IdmapInvocation i0 = idmapInvocations.get(0);
+2 −1
Original line number Diff line number Diff line
@@ -822,7 +822,8 @@ final class OverlayManagerServiceImpl {

        // Idmaps for immutable RROs targeting "android", i.e. framework-res.apk, are created at
        // boot time in OverlayConfig.createImmutableFrameworkIdmapsInZygote().
        if (targetPackage != null && !("android".equals(info.getTargetPackageName())
        if (targetPackage != null && !(("android".equals(info.getTargetPackageName()) ||
                                        "lineageos.platform".equals(info.getTargetPackageName()))
                && !isPackageConfiguredMutable(overlayPackage))) {
            idmapStatus = mIdmapManager.createIdmap(targetPackage, overlayPackageState,
                    overlayPackage, updatedOverlayInfo.baseCodePath, overlay.getOverlayName(),