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

Commit a34f53f6 authored by Bartosz Fabianowski's avatar Bartosz Fabianowski
Browse files

Add install reason

This CL allows a reason to be specified when installing a package. The
install reason is a sticky piece of metadata: When a package is e.g.
installed via enterprise policy and an update is then manually
installed or sideloaded, the install reason will remain "policy."
The install reason is tracked separately for each user.

With this CL, two install reasons exist: "policy" and "unknown." Other
install reasons will likely be supported in the future.

Bug: 32692748
Bug: 33415829
Test: Tested manually with "adb install" / "adb uninstall"

Change-Id: I0c9b9e1b8eb666bb6962564f6efd97e41703cd86
parent d26d2af7
Loading
Loading
Loading
Loading
+3 −0
Original line number Diff line number Diff line
@@ -9938,6 +9938,7 @@ package android.content.pm {
    method public void setAppLabel(java.lang.CharSequence);
    method public void setAppPackageName(java.lang.String);
    method public void setInstallLocation(int);
    method public void setInstallReason(int);
    method public void setOriginatingUid(int);
    method public void setOriginatingUri(android.net.Uri);
    method public void setReferrerUri(android.net.Uri);
@@ -10171,6 +10172,8 @@ package android.content.pm {
    field public static final int GET_SIGNATURES = 64; // 0x40
    field public static final deprecated int GET_UNINSTALLED_PACKAGES = 8192; // 0x2000
    field public static final int GET_URI_PERMISSION_PATTERNS = 2048; // 0x800
    field public static final int INSTALL_REASON_POLICY = 1; // 0x1
    field public static final int INSTALL_REASON_UNKNOWN = 0; // 0x0
    field public static final int MATCH_ALL = 131072; // 0x20000
    field public static final int MATCH_DEFAULT_ONLY = 65536; // 0x10000
    field public static final int MATCH_DIRECT_BOOT_AWARE = 524288; // 0x80000
+3 −0
Original line number Diff line number Diff line
@@ -10359,6 +10359,7 @@ package android.content.pm {
    method public void setGrantedRuntimePermissions(java.lang.String[]);
    method public void setInstallAsInstantApp(boolean);
    method public void setInstallLocation(int);
    method public void setInstallReason(int);
    method public void setOriginatingUid(int);
    method public void setOriginatingUri(android.net.Uri);
    method public void setReferrerUri(android.net.Uri);
@@ -10647,6 +10648,8 @@ package android.content.pm {
    field public static final int INSTALL_PARSE_FAILED_NOT_APK = -100; // 0xffffff9c
    field public static final int INSTALL_PARSE_FAILED_NO_CERTIFICATES = -103; // 0xffffff99
    field public static final int INSTALL_PARSE_FAILED_UNEXPECTED_EXCEPTION = -102; // 0xffffff9a
    field public static final int INSTALL_REASON_POLICY = 1; // 0x1
    field public static final int INSTALL_REASON_UNKNOWN = 0; // 0x0
    field public static final int INSTALL_SUCCEEDED = 1; // 0x1
    field public static final int INTENT_FILTER_VERIFICATION_FAILURE = -1; // 0xffffffff
    field public static final int INTENT_FILTER_VERIFICATION_SUCCESS = 1; // 0x1
+5 −0
Original line number Diff line number Diff line
@@ -9966,6 +9966,7 @@ package android.content.pm {
    method public void setAppLabel(java.lang.CharSequence);
    method public void setAppPackageName(java.lang.String);
    method public void setInstallLocation(int);
    method public void setInstallReason(int);
    method public void setOriginatingUid(int);
    method public void setOriginatingUri(android.net.Uri);
    method public void setReferrerUri(android.net.Uri);
@@ -10038,6 +10039,7 @@ package android.content.pm {
    method public abstract android.graphics.drawable.Drawable getDefaultActivityIcon();
    method public abstract java.lang.String getDefaultBrowserPackageNameAsUser(int);
    method public abstract android.graphics.drawable.Drawable getDrawable(java.lang.String, int, android.content.pm.ApplicationInfo);
    method public abstract int getInstallReason(java.lang.String, android.os.UserHandle);
    method public abstract java.util.List<android.content.pm.ApplicationInfo> getInstalledApplications(int);
    method public abstract java.util.List<android.content.pm.PackageInfo> getInstalledPackages(int);
    method public abstract java.lang.String getInstallerPackageName(java.lang.String);
@@ -10200,6 +10202,8 @@ package android.content.pm {
    field public static final int GET_SIGNATURES = 64; // 0x40
    field public static final deprecated int GET_UNINSTALLED_PACKAGES = 8192; // 0x2000
    field public static final int GET_URI_PERMISSION_PATTERNS = 2048; // 0x800
    field public static final int INSTALL_REASON_POLICY = 1; // 0x1
    field public static final int INSTALL_REASON_UNKNOWN = 0; // 0x0
    field public static final int MATCH_ALL = 131072; // 0x20000
    field public static final int MATCH_DEFAULT_ONLY = 65536; // 0x10000
    field public static final int MATCH_DIRECT_BOOT_AWARE = 524288; // 0x80000
@@ -39106,6 +39110,7 @@ package android.test.mock {
    method public android.graphics.drawable.Drawable getDefaultActivityIcon();
    method public java.lang.String getDefaultBrowserPackageNameAsUser(int);
    method public android.graphics.drawable.Drawable getDrawable(java.lang.String, int, android.content.pm.ApplicationInfo);
    method public int getInstallReason(java.lang.String, android.os.UserHandle);
    method public java.util.List<android.content.pm.ApplicationInfo> getInstalledApplications(int);
    method public java.util.List<android.content.pm.PackageInfo> getInstalledPackages(int);
    method public java.lang.String getInstallerPackageName(java.lang.String);
+14 −1
Original line number Diff line number Diff line
@@ -1635,7 +1635,8 @@ public class ApplicationPackageManager extends PackageManager {
    public int installExistingPackageAsUser(String packageName, int userId)
            throws NameNotFoundException {
        try {
            int res = mPM.installExistingPackageAsUser(packageName, userId);
            int res = mPM.installExistingPackageAsUser(packageName, userId,
                    PackageManager.INSTALL_REASON_UNKNOWN);
            if (res == INSTALL_FAILED_INVALID_URI) {
                throw new NameNotFoundException("Package " + packageName + " doesn't exist");
            }
@@ -2411,6 +2412,18 @@ public class ApplicationPackageManager extends PackageManager {
        return getUserManager().isManagedProfile(userId);
    }

    /**
     * @hide
     */
    @Override
    public int getInstallReason(String packageName, UserHandle user) {
        try {
            return mPM.getInstallReason(packageName, user.getIdentifier());
        } catch (RemoteException e) {
            throw e.rethrowFromSystemServer();
        }
    }

    /** {@hide} */
    private static class MoveCallbackDelegate extends IPackageMoveObserver.Stub implements
            Handler.Callback {
+3 −1
Original line number Diff line number Diff line
@@ -523,7 +523,7 @@ interface IPackageManager {
    boolean setInstallLocation(int loc);
    int getInstallLocation();

    int installExistingPackageAsUser(String packageName, int userId);
    int installExistingPackageAsUser(String packageName, int userId, int installReason);

    void verifyPendingInstall(int id, int verificationCode);
    void extendVerificationTimeout(int id, int verificationCodeAtTimeout, long millisecondsToDelay);
@@ -584,4 +584,6 @@ interface IPackageManager {
    boolean isPackageDeviceAdminOnAnyUser(String packageName);

    List<String> getPreviousCodePaths(in String packageName);

    int getInstallReason(String packageName, int userId);
}
Loading