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

Commit a5639438 authored by Oli Lan's avatar Oli Lan Committed by Automerger Merge Worker
Browse files

Merge "Add min extension versions to AndroidPackage." into rvc-dev am: 46a0a5ab am: a0660c0b

Change-Id: I623cbc27c947495655264e72304bbc1b433d81db
parents 1328280a a0660c0b
Loading
Loading
Loading
Loading
+3 −0
Original line number Original line Diff line number Diff line
@@ -34,6 +34,7 @@ import android.content.pm.parsing.component.ParsedProvider;
import android.content.pm.parsing.component.ParsedService;
import android.content.pm.parsing.component.ParsedService;
import android.os.Bundle;
import android.os.Bundle;
import android.util.SparseArray;
import android.util.SparseArray;
import android.util.SparseIntArray;


import java.security.PublicKey;
import java.security.PublicKey;
import java.util.Map;
import java.util.Map;
@@ -258,6 +259,8 @@ public interface ParsingPackage extends ParsingPackageRead {


    ParsingPackage setManageSpaceActivityName(String manageSpaceActivityName);
    ParsingPackage setManageSpaceActivityName(String manageSpaceActivityName);


    ParsingPackage setMinExtensionVersions(@Nullable SparseIntArray minExtensionVersions);

    ParsingPackage setMinSdkVersion(int minSdkVersion);
    ParsingPackage setMinSdkVersion(int minSdkVersion);


    ParsingPackage setNetworkSecurityConfigRes(int networkSecurityConfigRes);
    ParsingPackage setNetworkSecurityConfigRes(int networkSecurityConfigRes);
+17 −0
Original line number Original line Diff line number Diff line
@@ -51,6 +51,7 @@ import android.text.TextUtils;
import android.util.ArraySet;
import android.util.ArraySet;
import android.util.Pair;
import android.util.Pair;
import android.util.SparseArray;
import android.util.SparseArray;
import android.util.SparseIntArray;


import com.android.internal.R;
import com.android.internal.R;
import com.android.internal.annotations.VisibleForTesting;
import com.android.internal.annotations.VisibleForTesting;
@@ -340,6 +341,8 @@ public class ParsingPackageImpl implements ParsingPackage, Parcelable {
    private String manageSpaceActivityName;
    private String manageSpaceActivityName;
    private float maxAspectRatio;
    private float maxAspectRatio;
    private float minAspectRatio;
    private float minAspectRatio;
    @Nullable
    private SparseIntArray minExtensionVersions;
    private int minSdkVersion;
    private int minSdkVersion;
    private int networkSecurityConfigRes;
    private int networkSecurityConfigRes;
    @Nullable
    @Nullable
@@ -1100,6 +1103,7 @@ public class ParsingPackageImpl implements ParsingPackage, Parcelable {
        dest.writeBoolean(this.preserveLegacyExternalStorage);
        dest.writeBoolean(this.preserveLegacyExternalStorage);
        dest.writeArraySet(this.mimeGroups);
        dest.writeArraySet(this.mimeGroups);
        dest.writeInt(this.gwpAsanMode);
        dest.writeInt(this.gwpAsanMode);
        dest.writeSparseIntArray(this.minExtensionVersions);
    }
    }


    public ParsingPackageImpl(Parcel in) {
    public ParsingPackageImpl(Parcel in) {
@@ -1259,6 +1263,7 @@ public class ParsingPackageImpl implements ParsingPackage, Parcelable {
        this.preserveLegacyExternalStorage = in.readBoolean();
        this.preserveLegacyExternalStorage = in.readBoolean();
        this.mimeGroups = (ArraySet<String>) in.readArraySet(boot);
        this.mimeGroups = (ArraySet<String>) in.readArraySet(boot);
        this.gwpAsanMode = in.readInt();
        this.gwpAsanMode = in.readInt();
        this.minExtensionVersions = in.readSparseIntArray();
    }
    }


    public static final Parcelable.Creator<ParsingPackageImpl> CREATOR =
    public static final Parcelable.Creator<ParsingPackageImpl> CREATOR =
@@ -1767,6 +1772,12 @@ public class ParsingPackageImpl implements ParsingPackage, Parcelable {
        return minAspectRatio;
        return minAspectRatio;
    }
    }


    @Nullable
    @Override
    public SparseIntArray getMinExtensionVersions() {
        return minExtensionVersions;
    }

    @Override
    @Override
    public int getMinSdkVersion() {
    public int getMinSdkVersion() {
        return minSdkVersion;
        return minSdkVersion;
@@ -2214,6 +2225,12 @@ public class ParsingPackageImpl implements ParsingPackage, Parcelable {
        return this;
        return this;
    }
    }


    @Override
    public ParsingPackageImpl setMinExtensionVersions(@Nullable SparseIntArray value) {
        minExtensionVersions = value;
        return this;
    }

    @Override
    @Override
    public ParsingPackageImpl setMinSdkVersion(int value) {
    public ParsingPackageImpl setMinSdkVersion(int value) {
        minSdkVersion = value;
        minSdkVersion = value;
+8 −0
Original line number Original line Diff line number Diff line
@@ -41,6 +41,7 @@ import android.os.Parcelable;
import android.util.ArraySet;
import android.util.ArraySet;
import android.util.Pair;
import android.util.Pair;
import android.util.SparseArray;
import android.util.SparseArray;
import android.util.SparseIntArray;


import com.android.internal.R;
import com.android.internal.R;


@@ -608,6 +609,13 @@ public interface ParsingPackageRead extends Parcelable {
    @Nullable
    @Nullable
    String getManageSpaceActivityName();
    String getManageSpaceActivityName();


    /**
     * @see ApplicationInfo#minExtensionVersions
     * @see R.styleable#AndroidManifestExtensionSdk
     */
    @Nullable
    SparseIntArray getMinExtensionVersions();

    /**
    /**
     * @see ApplicationInfo#minSdkVersion
     * @see ApplicationInfo#minSdkVersion
     * @see R.styleable#AndroidManifestUsesSdk_minSdkVersion
     * @see R.styleable#AndroidManifestUsesSdk_minSdkVersion
+24 −4
Original line number Original line Diff line number Diff line
@@ -95,6 +95,7 @@ import android.util.DisplayMetrics;
import android.util.Pair;
import android.util.Pair;
import android.util.Slog;
import android.util.Slog;
import android.util.SparseArray;
import android.util.SparseArray;
import android.util.SparseIntArray;
import android.util.TypedValue;
import android.util.TypedValue;
import android.util.apk.ApkSignatureVerifier;
import android.util.apk.ApkSignatureVerifier;


@@ -1255,6 +1256,7 @@ public class ParsingPackageUtils {


                int type;
                int type;
                final int innerDepth = parser.getDepth();
                final int innerDepth = parser.getDepth();
                SparseIntArray minExtensionVersions = null;
                while ((type = parser.next()) != XmlPullParser.END_DOCUMENT
                while ((type = parser.next()) != XmlPullParser.END_DOCUMENT
                        && (type != XmlPullParser.END_TAG || parser.getDepth() > innerDepth)) {
                        && (type != XmlPullParser.END_TAG || parser.getDepth() > innerDepth)) {
                    if (type == XmlPullParser.END_TAG || type == XmlPullParser.TEXT) {
                    if (type == XmlPullParser.END_TAG || type == XmlPullParser.TEXT) {
@@ -1263,7 +1265,10 @@ public class ParsingPackageUtils {


                    final ParseResult result;
                    final ParseResult result;
                    if (parser.getName().equals("extension-sdk")) {
                    if (parser.getName().equals("extension-sdk")) {
                        result = parseExtensionSdk(input, pkg, res, parser);
                        if (minExtensionVersions == null) {
                            minExtensionVersions = new SparseIntArray();
                        }
                        result = parseExtensionSdk(input, res, parser, minExtensionVersions);
                        XmlUtils.skipCurrentTag(parser);
                        XmlUtils.skipCurrentTag(parser);
                    } else {
                    } else {
                        result = ParsingUtils.unknownTag("<uses-sdk>", pkg, parser, input);
                        result = ParsingUtils.unknownTag("<uses-sdk>", pkg, parser, input);
@@ -1273,6 +1278,7 @@ public class ParsingPackageUtils {
                        return input.error(result);
                        return input.error(result);
                    }
                    }
                }
                }
                pkg.setMinExtensionVersions(exactSizedCopyOfSparseArray(minExtensionVersions));
            } finally {
            } finally {
                sa.recycle();
                sa.recycle();
            }
            }
@@ -1280,8 +1286,21 @@ public class ParsingPackageUtils {
        return input.success(pkg);
        return input.success(pkg);
    }
    }


    private static ParseResult parseExtensionSdk(ParseInput input, ParsingPackage pkg,
    @Nullable
            Resources res, XmlResourceParser parser) {
    private static SparseIntArray exactSizedCopyOfSparseArray(@Nullable SparseIntArray input) {
        if (input == null) {
            return null;
        }
        SparseIntArray output = new SparseIntArray(input.size());
        for (int i = 0; i < input.size(); i++) {
            output.put(input.keyAt(i), input.valueAt(i));
        }
        return output;
    }

    private static ParseResult<SparseIntArray> parseExtensionSdk(
            ParseInput input, Resources res, XmlResourceParser parser,
            SparseIntArray minExtensionVersions) {
        int sdkVersion;
        int sdkVersion;
        int minVersion;
        int minVersion;
        TypedArray sa = res.obtainAttributes(parser, R.styleable.AndroidManifestExtensionSdk);
        TypedArray sa = res.obtainAttributes(parser, R.styleable.AndroidManifestExtensionSdk);
@@ -1316,7 +1335,8 @@ public class ParsingPackageUtils {
                    PackageManager.INSTALL_PARSE_FAILED_MANIFEST_MALFORMED,
                    PackageManager.INSTALL_PARSE_FAILED_MANIFEST_MALFORMED,
                    "Specified sdkVersion " + sdkVersion + " is not valid");
                    "Specified sdkVersion " + sdkVersion + " is not valid");
        }
        }
        return input.success(pkg);
        minExtensionVersions.put(sdkVersion, minVersion);
        return input.success(minExtensionVersions);
    }
    }


    /**
    /**
+7 −1
Original line number Original line Diff line number Diff line
@@ -35,6 +35,7 @@ import android.os.Build;
import android.os.Bundle;
import android.os.Bundle;
import android.os.FileUtils;
import android.os.FileUtils;
import android.platform.test.annotations.Presubmit;
import android.platform.test.annotations.Presubmit;
import android.util.SparseIntArray;


import androidx.test.InstrumentationRegistry;
import androidx.test.InstrumentationRegistry;
import androidx.test.filters.SmallTest;
import androidx.test.filters.SmallTest;
@@ -542,7 +543,12 @@ public class PackageParserLegacyCoreTest {


    @Test
    @Test
    public void testUsesSdk() throws Exception {
    public void testUsesSdk() throws Exception {
        ParsedPackage pkg =
                parsePackage("install_uses_sdk.apk_r0", R.raw.install_uses_sdk_r0, x -> x);
                parsePackage("install_uses_sdk.apk_r0", R.raw.install_uses_sdk_r0, x -> x);
        SparseIntArray minExtVers = pkg.getMinExtensionVersions();
        assertEquals(1, minExtVers.size());
        assertEquals(0, minExtVers.get(10000, -1));

        try {
        try {
            parsePackage("install_uses_sdk.apk_r5", R.raw.install_uses_sdk_r5, x -> x);
            parsePackage("install_uses_sdk.apk_r5", R.raw.install_uses_sdk_r5, x -> x);
            fail("Expected parsing exception due to incompatible extension SDK version");
            fail("Expected parsing exception due to incompatible extension SDK version");