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

Commit 2fdaf81c authored by Winson Chiu's avatar Winson Chiu Committed by Winson
Browse files

Revert "Revert "Overlay, actor, and target app visibility handling""

This reverts commit 637138dd.

Exempt-From-Owner-Approval: Revert of revert, all necessary review will be in follow up

Reason for revert: Revert of revert for re-merge, follow up will fix test conflict

Change-Id: I6c5c3209d1fdb62cb6f733961ee8737dea4ca89b
parent b03866ee
Loading
Loading
Loading
Loading
+5 −0
Original line number Original line Diff line number Diff line
@@ -229,6 +229,11 @@ public interface AndroidPackage extends Parcelable {


    String getOverlayTargetName();
    String getOverlayTargetName();


    /**
     * Map of overlayable name to actor name.
     */
    Map<String, String> getOverlayables();

    // TODO(b/135203078): Does this and getAppInfoPackageName have to be separate methods?
    // TODO(b/135203078): Does this and getAppInfoPackageName have to be separate methods?
    //  The refactor makes them the same value with no known consequences, so should be redundant.
    //  The refactor makes them the same value with no known consequences, so should be redundant.
    String getPackageName();
    String getPackageName();
+19 −2
Original line number Original line Diff line number Diff line
@@ -52,6 +52,7 @@ import android.content.pm.permission.SplitPermissionInfoParcelable;
import android.content.pm.split.DefaultSplitAssetLoader;
import android.content.pm.split.DefaultSplitAssetLoader;
import android.content.pm.split.SplitAssetDependencyLoader;
import android.content.pm.split.SplitAssetDependencyLoader;
import android.content.pm.split.SplitAssetLoader;
import android.content.pm.split.SplitAssetLoader;
import android.content.res.ApkAssets;
import android.content.res.AssetManager;
import android.content.res.AssetManager;
import android.content.res.Configuration;
import android.content.res.Configuration;
import android.content.res.Resources;
import android.content.res.Resources;
@@ -92,6 +93,7 @@ import java.security.PublicKey;
import java.util.ArrayList;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.Arrays;
import java.util.List;
import java.util.List;
import java.util.Map;
import java.util.Set;
import java.util.Set;


/** @hide */
/** @hide */
@@ -287,8 +289,23 @@ public class ApkParseUtils {
                                + result.getErrorMessage());
                                + result.getErrorMessage());
            }
            }


            return result.getResultAndNull()
            ParsingPackage pkg = result.getResultAndNull();
                    .setVolumeUuid(volumeUuid)
            ApkAssets apkAssets = assets.getApkAssets()[0];
            if (apkAssets.definesOverlayable()) {
                SparseArray<String> packageNames = assets.getAssignedPackageIdentifiers();
                int size = packageNames.size();
                for (int index = 0; index < size; index++) {
                    String packageName = packageNames.get(index);
                    Map<String, String> overlayableToActor = assets.getOverlayableMap(packageName);
                    if (overlayableToActor != null && !overlayableToActor.isEmpty()) {
                        for (String overlayable : overlayableToActor.keySet()) {
                            pkg.addOverlayable(overlayable, overlayableToActor.get(overlayable));
                        }
                    }
                }
            }

            return pkg.setVolumeUuid(volumeUuid)
                    .setApplicationVolumeUuid(volumeUuid)
                    .setApplicationVolumeUuid(volumeUuid)
                    .setSigningDetails(SigningDetails.UNKNOWN);
                    .setSigningDetails(SigningDetails.UNKNOWN);
        } catch (PackageParserException e) {
        } catch (PackageParserException e) {
+22 −2
Original line number Original line Diff line number Diff line
@@ -18,6 +18,8 @@ package android.content.pm.parsing;


import static android.os.Build.VERSION_CODES.DONUT;
import static android.os.Build.VERSION_CODES.DONUT;


import static java.util.Collections.emptyMap;

import android.annotation.NonNull;
import android.annotation.NonNull;
import android.annotation.Nullable;
import android.annotation.Nullable;
import android.content.Intent;
import android.content.Intent;
@@ -55,11 +57,13 @@ import android.util.SparseArray;
import com.android.internal.R;
import com.android.internal.R;
import com.android.internal.annotations.VisibleForTesting;
import com.android.internal.annotations.VisibleForTesting;
import com.android.internal.util.ArrayUtils;
import com.android.internal.util.ArrayUtils;
import com.android.internal.util.CollectionUtils;
import com.android.server.SystemConfig;
import com.android.server.SystemConfig;


import java.security.PublicKey;
import java.security.PublicKey;
import java.util.ArrayList;
import java.util.ArrayList;
import java.util.Collections;
import java.util.Collections;
import java.util.HashMap;
import java.util.List;
import java.util.List;
import java.util.Map;
import java.util.Map;
import java.util.Objects;
import java.util.Objects;
@@ -126,6 +130,7 @@ public final class PackageImpl implements ParsingPackage, ParsedPackage, Android
    private String overlayCategory;
    private String overlayCategory;
    private int overlayPriority;
    private int overlayPriority;
    private boolean overlayIsStatic;
    private boolean overlayIsStatic;
    private Map<String, String> overlayables = emptyMap();


    private String staticSharedLibName;
    private String staticSharedLibName;
    private long staticSharedLibVersion;
    private long staticSharedLibVersion;
@@ -475,7 +480,7 @@ public final class PackageImpl implements ParsingPackage, ParsedPackage, Android


    @Override
    @Override
    public Map<String, ArraySet<PublicKey>> getKeySetMapping() {
    public Map<String, ArraySet<PublicKey>> getKeySetMapping() {
        return keySetMapping == null ? Collections.emptyMap() : keySetMapping;
        return keySetMapping == null ? emptyMap() : keySetMapping;
    }
    }


    @Override
    @Override
@@ -772,6 +777,13 @@ public final class PackageImpl implements ParsingPackage, ParsedPackage, Android
        return this;
        return this;
    }
    }


    @Override
    public ParsingPackage addOverlayable(String overlayableName, String actorName) {
        this.overlayables = CollectionUtils.add(this.overlayables,
                TextUtils.safeIntern(overlayableName), TextUtils.safeIntern(actorName));
        return this;
    }

    @Override
    @Override
    public PackageImpl addAdoptPermission(String adoptPermission) {
    public PackageImpl addAdoptPermission(String adoptPermission) {
        this.adoptPermissions = ArrayUtils.add(this.adoptPermissions, adoptPermission);
        this.adoptPermissions = ArrayUtils.add(this.adoptPermissions, adoptPermission);
@@ -2124,6 +2136,11 @@ public final class PackageImpl implements ParsingPackage, ParsedPackage, Android
        return overlayTargetName;
        return overlayTargetName;
    }
    }


    @Override
    public Map<String, String> getOverlayables() {
        return overlayables;
    }

    @Override
    @Override
    public boolean isOverlayIsStatic() {
    public boolean isOverlayIsStatic() {
        return overlayIsStatic;
        return overlayIsStatic;
@@ -2291,7 +2308,7 @@ public final class PackageImpl implements ParsingPackage, ParsedPackage, Android
        appInfo.metaData = appMetaData;
        appInfo.metaData = appMetaData;
        appInfo.minAspectRatio = minAspectRatio;
        appInfo.minAspectRatio = minAspectRatio;
        appInfo.minSdkVersion = minSdkVersion;
        appInfo.minSdkVersion = minSdkVersion;
        appInfo.name = name;
        appInfo.name = className;
        if (appInfo.name != null) {
        if (appInfo.name != null) {
            appInfo.name = appInfo.name.trim();
            appInfo.name = appInfo.name.trim();
        }
        }
@@ -2957,6 +2974,7 @@ public final class PackageImpl implements ParsingPackage, ParsedPackage, Android
        dest.writeString(this.overlayCategory);
        dest.writeString(this.overlayCategory);
        dest.writeInt(this.overlayPriority);
        dest.writeInt(this.overlayPriority);
        dest.writeBoolean(this.overlayIsStatic);
        dest.writeBoolean(this.overlayIsStatic);
        dest.writeMap(this.overlayables);
        dest.writeString(this.staticSharedLibName);
        dest.writeString(this.staticSharedLibName);
        dest.writeLong(this.staticSharedLibVersion);
        dest.writeLong(this.staticSharedLibVersion);
        dest.writeStringList(this.libraryNames);
        dest.writeStringList(this.libraryNames);
@@ -3100,6 +3118,8 @@ public final class PackageImpl implements ParsingPackage, ParsedPackage, Android
        this.overlayCategory = in.readString();
        this.overlayCategory = in.readString();
        this.overlayPriority = in.readInt();
        this.overlayPriority = in.readInt();
        this.overlayIsStatic = in.readBoolean();
        this.overlayIsStatic = in.readBoolean();
        this.overlayables = new HashMap<>();
        in.readMap(overlayables, boot);
        this.staticSharedLibName = TextUtils.safeIntern(in.readString());
        this.staticSharedLibName = TextUtils.safeIntern(in.readString());
        this.staticSharedLibVersion = in.readLong();
        this.staticSharedLibVersion = in.readLong();
        this.libraryNames = in.createStringArrayList();
        this.libraryNames = in.createStringArrayList();
+2 −0
Original line number Original line Diff line number Diff line
@@ -62,6 +62,8 @@ public interface ParsingPackage extends AndroidPackage {


    ParsingPackage addOriginalPackage(String originalPackage);
    ParsingPackage addOriginalPackage(String originalPackage);


    ParsingPackage addOverlayable(String overlayableName, String actorName);

    ParsingPackage addPermission(ParsedPermission permission);
    ParsingPackage addPermission(ParsedPermission permission);


    ParsingPackage addPermissionGroup(ParsedPermissionGroup permissionGroup);
    ParsingPackage addPermissionGroup(ParsedPermissionGroup permissionGroup);
+11 −0
Original line number Original line Diff line number Diff line
@@ -307,6 +307,17 @@ public class CollectionUtils {
        return cur;
        return cur;
    }
    }


    /**
     * @see #add(List, Object)
     */
    public static @NonNull <K, V> Map<K, V> add(@Nullable Map<K, V> map, K key, V value) {
        if (map == null || map == Collections.emptyMap()) {
            map = new ArrayMap<>();
        }
        map.put(key, value);
        return map;
    }

    /**
    /**
     * Similar to {@link List#remove}, but with support for list values of {@code null} and
     * Similar to {@link List#remove}, but with support for list values of {@code null} and
     * {@link Collections#emptyList}
     * {@link Collections#emptyList}
Loading