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

Commit 14610721 authored by Winson Chiu's avatar Winson Chiu Committed by Android (Google) Code Review
Browse files

Merge changes from topic "overlay-vis-remerge"

* changes:
  Move MockitoUtils to server om package
  Revert "Revert "Overlay, actor, and target app visibility handling""
parents 9d4f6c0c ebac5056
Loading
Loading
Loading
Loading
+5 −0
Original line number Diff line number Diff line
@@ -229,6 +229,11 @@ public interface AndroidPackage extends Parcelable {

    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?
    //  The refactor makes them the same value with no known consequences, so should be redundant.
    String getPackageName();
+19 −2
Original line number 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.SplitAssetDependencyLoader;
import android.content.pm.split.SplitAssetLoader;
import android.content.res.ApkAssets;
import android.content.res.AssetManager;
import android.content.res.Configuration;
import android.content.res.Resources;
@@ -92,6 +93,7 @@ import java.security.PublicKey;
import java.util.ArrayList;
import java.util.Arrays;
import java.util.List;
import java.util.Map;
import java.util.Set;

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

            return result.getResultAndNull()
                    .setVolumeUuid(volumeUuid)
            ParsingPackage pkg = result.getResultAndNull();
            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)
                    .setSigningDetails(SigningDetails.UNKNOWN);
        } catch (PackageParserException e) {
+22 −2
Original line number Diff line number Diff line
@@ -18,6 +18,8 @@ package android.content.pm.parsing;

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

import static java.util.Collections.emptyMap;

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

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

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

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

    @Override
@@ -772,6 +777,13 @@ public final class PackageImpl implements ParsingPackage, ParsedPackage, Android
        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
    public PackageImpl addAdoptPermission(String adoptPermission) {
        this.adoptPermissions = ArrayUtils.add(this.adoptPermissions, adoptPermission);
@@ -2124,6 +2136,11 @@ public final class PackageImpl implements ParsingPackage, ParsedPackage, Android
        return overlayTargetName;
    }

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

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

    ParsingPackage addOriginalPackage(String originalPackage);

    ParsingPackage addOverlayable(String overlayableName, String actorName);

    ParsingPackage addPermission(ParsedPermission permission);

    ParsingPackage addPermissionGroup(ParsedPermissionGroup permissionGroup);
+11 −0
Original line number Diff line number Diff line
@@ -307,6 +307,17 @@ public class CollectionUtils {
        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
     * {@link Collections#emptyList}
Loading