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

Commit 9edd4f66 authored by Ricky Wai's avatar Ricky Wai Committed by Android (Google) Code Review
Browse files

Merge "Add a new API to let app installer to flag package source."

parents 77c14eb4 143db559
Loading
Loading
Loading
Loading
+8 −0
Original line number Diff line number Diff line
@@ -11259,6 +11259,7 @@ package android.content.pm {
    method @Nullable public android.content.pm.SigningInfo getInitiatingPackageSigningInfo();
    method @Nullable public String getInstallingPackageName();
    method @Nullable public String getOriginatingPackageName();
    method public int getPackageSource();
    method public void writeToParcel(@NonNull android.os.Parcel, int);
    field @NonNull public static final android.os.Parcelable.Creator<android.content.pm.InstallSourceInfo> CREATOR;
  }
@@ -11466,6 +11467,11 @@ package android.content.pm {
    field public static final String EXTRA_STATUS = "android.content.pm.extra.STATUS";
    field public static final String EXTRA_STATUS_MESSAGE = "android.content.pm.extra.STATUS_MESSAGE";
    field public static final String EXTRA_STORAGE_PATH = "android.content.pm.extra.STORAGE_PATH";
    field public static final int PACKAGE_SOURCE_DOWNLOADED_FILE = 4; // 0x4
    field public static final int PACKAGE_SOURCE_LOCAL_FILE = 3; // 0x3
    field public static final int PACKAGE_SOURCE_OTHER = 1; // 0x1
    field public static final int PACKAGE_SOURCE_STORE = 2; // 0x2
    field public static final int PACKAGE_SOURCE_UNSPECIFIED = 0; // 0x0
    field public static final int STATUS_FAILURE = 1; // 0x1
    field public static final int STATUS_FAILURE_ABORTED = 3; // 0x3
    field public static final int STATUS_FAILURE_BLOCKED = 2; // 0x2
@@ -11522,6 +11528,7 @@ package android.content.pm {
    method public int getMode();
    method public int getOriginatingUid();
    method @Nullable public android.net.Uri getOriginatingUri();
    method public int getPackageSource();
    method public int getParentSessionId();
    method public float getProgress();
    method @Nullable public android.net.Uri getReferrerUri();
@@ -11570,6 +11577,7 @@ package android.content.pm {
    method public void setMultiPackage();
    method public void setOriginatingUid(int);
    method public void setOriginatingUri(@Nullable android.net.Uri);
    method public void setPackageSource(int);
    method public void setReferrerUri(@Nullable android.net.Uri);
    method public void setRequireUserAction(int);
    method public void setSize(long);
+21 −0
Original line number Diff line number Diff line
@@ -35,14 +35,26 @@ public final class InstallSourceInfo implements Parcelable {

    @Nullable private final String mInstallingPackageName;

    @Nullable private final int mPackageSource;

    /** @hide */
    public InstallSourceInfo(@Nullable String initiatingPackageName,
            @Nullable SigningInfo initiatingPackageSigningInfo,
            @Nullable String originatingPackageName, @Nullable String installingPackageName) {
        this(initiatingPackageName, initiatingPackageSigningInfo, originatingPackageName,
                installingPackageName, PackageInstaller.PACKAGE_SOURCE_UNSPECIFIED);
    }

    /** @hide */
    public InstallSourceInfo(@Nullable String initiatingPackageName,
            @Nullable SigningInfo initiatingPackageSigningInfo,
            @Nullable String originatingPackageName, @Nullable String installingPackageName,
            int packageSource) {
        mInitiatingPackageName = initiatingPackageName;
        mInitiatingPackageSigningInfo = initiatingPackageSigningInfo;
        mOriginatingPackageName = originatingPackageName;
        mInstallingPackageName = installingPackageName;
        mPackageSource = packageSource;
    }

    @Override
@@ -57,6 +69,7 @@ public final class InstallSourceInfo implements Parcelable {
        dest.writeParcelable(mInitiatingPackageSigningInfo, flags);
        dest.writeString(mOriginatingPackageName);
        dest.writeString(mInstallingPackageName);
        dest.writeInt(mPackageSource);
    }

    private InstallSourceInfo(Parcel source) {
@@ -64,6 +77,7 @@ public final class InstallSourceInfo implements Parcelable {
        mInitiatingPackageSigningInfo = source.readParcelable(SigningInfo.class.getClassLoader(), android.content.pm.SigningInfo.class);
        mOriginatingPackageName = source.readString();
        mInstallingPackageName = source.readString();
        mPackageSource = source.readInt();
    }

    /**
@@ -122,6 +136,13 @@ public final class InstallSourceInfo implements Parcelable {
        return mInstallingPackageName;
    }

    /**
     * Information about the package source when installer installed this app.
     */
    public @PackageInstaller.PackageSourceType int getPackageSource() {
        return mPackageSource;
    }

    @NonNull
    public static final Parcelable.Creator<InstallSourceInfo> CREATOR =
            new Creator<InstallSourceInfo>() {
+67 −0
Original line number Diff line number Diff line
@@ -418,6 +418,48 @@ public class PackageInstaller {
    @Retention(RetentionPolicy.SOURCE)
    public @interface FileLocation{}

    /**
     * The installer did not call SessionParams#setPackageSource(int) to specify the package
     * source.
     */
    public static final int PACKAGE_SOURCE_UNSPECIFIED = 0;

    /**
     * Code indicating that the package being installed is from a source not reflected by any
     * other package source constant.
     */
    public static final int PACKAGE_SOURCE_OTHER = 1;

    /**
     * Code indicating that the package being installed is from a store. An app store that
     * installs an app for the user would use this.
     */
    public static final int PACKAGE_SOURCE_STORE = 2;

    /**
     * Code indicating that the package being installed comes from a local file on the device. A
     * file manager that is facilitating the installation of an APK file would use this.
     */
    public static final int PACKAGE_SOURCE_LOCAL_FILE = 3;

    /**
     * Code indicating that the package being installed comes from a file that was downloaded to
     * the device by the user. For use in place of PACKAGE_SOURCE_LOCAL_FILE when the installer
     * knows the package was downloaded.
     */
    public static final int PACKAGE_SOURCE_DOWNLOADED_FILE = 4;

    /** @hide */
    @IntDef(prefix = { "PACKAGE_SOURCE_" }, value = {
            PACKAGE_SOURCE_UNSPECIFIED,
            PACKAGE_SOURCE_STORE,
            PACKAGE_SOURCE_LOCAL_FILE,
            PACKAGE_SOURCE_DOWNLOADED_FILE,
            PACKAGE_SOURCE_OTHER
    })
    @Retention(RetentionPolicy.SOURCE)
    @interface PackageSourceType{}

    /** Default set of checksums - includes all available checksums.
     * @see Session#requestChecksums  */
    private static final int DEFAULT_CHECKSUMS =
@@ -1722,6 +1764,8 @@ public class PackageInstaller {
        /** {@hide} */
        public boolean isMultiPackage;
        /** {@hide} */
        public int packageSource = PACKAGE_SOURCE_UNSPECIFIED;
        /** {@hide} */
        public boolean isStaged;
        /** {@hide} */
        public long requiredInstalledVersionCode = PackageManager.VERSION_CODE_HIGHEST;
@@ -1776,6 +1820,7 @@ public class PackageInstaller {
            }
            rollbackDataPolicy = source.readInt();
            requireUserAction = source.readInt();
            packageSource = source.readInt();
        }

        /** {@hide} */
@@ -1805,6 +1850,7 @@ public class PackageInstaller {
            ret.dataLoaderParams = dataLoaderParams;
            ret.rollbackDataPolicy = rollbackDataPolicy;
            ret.requireUserAction = requireUserAction;
            ret.packageSource = packageSource;
            return ret;
        }

@@ -1925,6 +1971,13 @@ public class PackageInstaller {
            this.grantedRuntimePermissions = permissions;
        }

        /**
         * Sets the apk package installation source.
         */
        public void setPackageSource(@PackageSourceType int packageSource) {
            this.packageSource = packageSource;
        }

        /**
         * Sets which restricted permissions to be allowlisted for the app. Allowlisting
         * is not granting the permissions, rather it allows the app to hold permissions
@@ -2289,6 +2342,7 @@ public class PackageInstaller {
            pw.printPair("abiOverride", abiOverride);
            pw.printPair("volumeUuid", volumeUuid);
            pw.printPair("grantedRuntimePermissions", grantedRuntimePermissions);
            pw.printPair("packageSource", packageSource);
            pw.printPair("whitelistedRestrictedPermissions", whitelistedRestrictedPermissions);
            pw.printPair("autoRevokePermissions", autoRevokePermissionsMode);
            pw.printPair("installerPackageName", installerPackageName);
@@ -2338,6 +2392,7 @@ public class PackageInstaller {
            }
            dest.writeInt(rollbackDataPolicy);
            dest.writeInt(requireUserAction);
            dest.writeInt(packageSource);
        }

        public static final Parcelable.Creator<SessionParams>
@@ -2539,6 +2594,9 @@ public class PackageInstaller {
        /** {@hide} */
        public int requireUserAction;

        /** {@hide} */
        public int packageSource = PACKAGE_SOURCE_UNSPECIFIED;

        /** {@hide} */
        public int installerUid;

@@ -2593,6 +2651,7 @@ public class PackageInstaller {
            createdMillis = source.readLong();
            requireUserAction = source.readInt();
            installerUid = source.readInt();
            packageSource = source.readInt();
        }

        /**
@@ -2928,6 +2987,13 @@ public class PackageInstaller {
            return createDetailsIntent();
        }

        /**
         * Gets the apk package installation source.
         */
        public @PackageSourceType int getPackageSource() {
            return packageSource;
        }

        /**
         * Returns true if this session is a multi-package session containing references to other
         * sessions.
@@ -3163,6 +3229,7 @@ public class PackageInstaller {
            dest.writeLong(createdMillis);
            dest.writeInt(requireUserAction);
            dest.writeInt(installerUid);
            dest.writeInt(packageSource);
        }

        public static final Parcelable.Creator<SessionInfo>
+5 −1
Original line number Diff line number Diff line
@@ -130,8 +130,12 @@ public class InstallInstalling extends AlertActivity {
            } else {
                PackageInstaller.SessionParams params = new PackageInstaller.SessionParams(
                        PackageInstaller.SessionParams.MODE_FULL_INSTALL);
                final Uri referrerUri = getIntent().getParcelableExtra(Intent.EXTRA_REFERRER);
                params.setPackageSource(
                        referrerUri != null ? PackageInstaller.PACKAGE_SOURCE_DOWNLOADED_FILE
                                : PackageInstaller.PACKAGE_SOURCE_LOCAL_FILE);
                params.setInstallAsInstantApp(false);
                params.setReferrerUri(getIntent().getParcelableExtra(Intent.EXTRA_REFERRER));
                params.setReferrerUri(referrerUri);
                params.setOriginatingUri(getIntent()
                        .getParcelableExtra(Intent.EXTRA_ORIGINATING_URI));
                params.setOriginatingUid(getIntent().getIntExtra(Intent.EXTRA_ORIGINATING_UID,
+1 −1
Original line number Diff line number Diff line
@@ -5033,7 +5033,7 @@ public class ComputerEngine implements Computer {
        }

        return new InstallSourceInfo(initiatingPackageName, initiatingPackageSigningInfo,
                originatingPackageName, installerPackageName);
                originatingPackageName, installerPackageName, installSource.packageSource);
    }

    @PackageManager.EnabledState
Loading