Merge "Update PackageInstaller install handing"
am: 47950e588c
* commit '47950e588c59ff58d12b3429d285e3330b9dfe01':
Update PackageInstaller install handing
This commit is contained in:
@@ -9167,6 +9167,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 setOriginatingUid(int);
|
||||
method public void setOriginatingUri(android.net.Uri);
|
||||
method public void setReferrerUri(android.net.Uri);
|
||||
method public void setSize(long);
|
||||
|
||||
@@ -9451,6 +9451,7 @@ package android.content.pm {
|
||||
method public void setAppPackageName(java.lang.String);
|
||||
method public void setGrantedRuntimePermissions(java.lang.String[]);
|
||||
method public void setInstallLocation(int);
|
||||
method public void setOriginatingUid(int);
|
||||
method public void setOriginatingUri(android.net.Uri);
|
||||
method public void setReferrerUri(android.net.Uri);
|
||||
method public void setSize(long);
|
||||
|
||||
@@ -867,6 +867,9 @@ public class PackageInstaller {
|
||||
*/
|
||||
public static final int MODE_INHERIT_EXISTING = 2;
|
||||
|
||||
/** {@hide} */
|
||||
public static final int UID_UNKNOWN = -1;
|
||||
|
||||
/** {@hide} */
|
||||
public int mode = MODE_INVALID;
|
||||
/** {@hide} */
|
||||
@@ -886,6 +889,8 @@ public class PackageInstaller {
|
||||
/** {@hide} */
|
||||
public Uri originatingUri;
|
||||
/** {@hide} */
|
||||
public int originatingUid = UID_UNKNOWN;
|
||||
/** {@hide} */
|
||||
public Uri referrerUri;
|
||||
/** {@hide} */
|
||||
public String abiOverride;
|
||||
@@ -915,6 +920,7 @@ public class PackageInstaller {
|
||||
appIcon = source.readParcelable(null);
|
||||
appLabel = source.readString();
|
||||
originatingUri = source.readParcelable(null);
|
||||
originatingUid = source.readInt();
|
||||
referrerUri = source.readParcelable(null);
|
||||
abiOverride = source.readString();
|
||||
volumeUuid = source.readString();
|
||||
@@ -982,6 +988,15 @@ public class PackageInstaller {
|
||||
this.originatingUri = originatingUri;
|
||||
}
|
||||
|
||||
/**
|
||||
* Sets the UID that initiated package installation. Used for verification purposes.
|
||||
*
|
||||
* @see PackageManager#EXTRA_VERIFICATION_INSTALLER_UID
|
||||
*/
|
||||
public void setOriginatingUid(int originatingUid) {
|
||||
this.originatingUid = originatingUid;
|
||||
}
|
||||
|
||||
/**
|
||||
* Optionally set the URI that referred you to install this package. Used
|
||||
* for verification purposes.
|
||||
@@ -1021,6 +1036,11 @@ public class PackageInstaller {
|
||||
installFlags &= ~PackageManager.INSTALL_INTERNAL;
|
||||
}
|
||||
|
||||
/** {@hide} */
|
||||
public void setInstallFlagsForcePermissionPrompt() {
|
||||
installFlags |= PackageManager.INSTALL_FORCE_PERMISSION_PROMPT;
|
||||
}
|
||||
|
||||
/** {@hide} */
|
||||
public void dump(IndentingPrintWriter pw) {
|
||||
pw.printPair("mode", mode);
|
||||
@@ -1031,6 +1051,7 @@ public class PackageInstaller {
|
||||
pw.printPair("appIcon", (appIcon != null));
|
||||
pw.printPair("appLabel", appLabel);
|
||||
pw.printPair("originatingUri", originatingUri);
|
||||
pw.printPair("originatingUid", originatingUid);
|
||||
pw.printPair("referrerUri", referrerUri);
|
||||
pw.printPair("abiOverride", abiOverride);
|
||||
pw.printPair("volumeUuid", volumeUuid);
|
||||
@@ -1053,6 +1074,7 @@ public class PackageInstaller {
|
||||
dest.writeParcelable(appIcon, flags);
|
||||
dest.writeString(appLabel);
|
||||
dest.writeParcelable(originatingUri, flags);
|
||||
dest.writeInt(originatingUid);
|
||||
dest.writeParcelable(referrerUri, flags);
|
||||
dest.writeString(abiOverride);
|
||||
dest.writeString(volumeUuid);
|
||||
|
||||
@@ -421,6 +421,15 @@ public abstract class PackageManager {
|
||||
/** {@hide} */
|
||||
public static final int INSTALL_FORCE_VOLUME_UUID = 0x00000200;
|
||||
|
||||
/**
|
||||
* Flag parameter for {@link #installPackage} to indicate that we always want to force
|
||||
* the prompt for permission approval. This overrides any special behaviour for internal
|
||||
* components.
|
||||
*
|
||||
* @hide
|
||||
*/
|
||||
public static final int INSTALL_FORCE_PERMISSION_PROMPT = 0x00000400;
|
||||
|
||||
/**
|
||||
* Flag parameter for
|
||||
* {@link #setComponentEnabledSetting(android.content.ComponentName, int, int)} to indicate
|
||||
|
||||
@@ -140,6 +140,7 @@ public class PackageInstallerService extends IPackageInstaller.Stub {
|
||||
private static final String ATTR_APP_ICON = "appIcon";
|
||||
private static final String ATTR_APP_LABEL = "appLabel";
|
||||
private static final String ATTR_ORIGINATING_URI = "originatingUri";
|
||||
private static final String ATTR_ORIGINATING_UID = "originatingUid";
|
||||
private static final String ATTR_REFERRER_URI = "referrerUri";
|
||||
private static final String ATTR_ABI_OVERRIDE = "abiOverride";
|
||||
private static final String ATTR_VOLUME_UUID = "volumeUuid";
|
||||
@@ -405,6 +406,8 @@ public class PackageInstallerService extends IPackageInstaller.Stub {
|
||||
params.appIcon = readBitmapAttribute(in, ATTR_APP_ICON);
|
||||
params.appLabel = readStringAttribute(in, ATTR_APP_LABEL);
|
||||
params.originatingUri = readUriAttribute(in, ATTR_ORIGINATING_URI);
|
||||
params.originatingUid =
|
||||
readIntAttribute(in, ATTR_ORIGINATING_UID, SessionParams.UID_UNKNOWN);
|
||||
params.referrerUri = readUriAttribute(in, ATTR_REFERRER_URI);
|
||||
params.abiOverride = readStringAttribute(in, ATTR_ABI_OVERRIDE);
|
||||
params.volumeUuid = readStringAttribute(in, ATTR_VOLUME_UUID);
|
||||
@@ -477,6 +480,7 @@ public class PackageInstallerService extends IPackageInstaller.Stub {
|
||||
writeStringAttribute(out, ATTR_APP_PACKAGE_NAME, params.appPackageName);
|
||||
writeStringAttribute(out, ATTR_APP_LABEL, params.appLabel);
|
||||
writeUriAttribute(out, ATTR_ORIGINATING_URI, params.originatingUri);
|
||||
writeIntAttribute(out, ATTR_ORIGINATING_UID, params.originatingUid);
|
||||
writeUriAttribute(out, ATTR_REFERRER_URI, params.referrerUri);
|
||||
writeStringAttribute(out, ATTR_ABI_OVERRIDE, params.abiOverride);
|
||||
writeStringAttribute(out, ATTR_VOLUME_UUID, params.volumeUuid);
|
||||
|
||||
@@ -222,11 +222,17 @@ public class PackageInstallerSession extends IPackageInstallerSession.Stub {
|
||||
// waived if the installer is the device owner.
|
||||
DevicePolicyManager dpm = (DevicePolicyManager) mContext.getSystemService(
|
||||
Context.DEVICE_POLICY_SERVICE);
|
||||
final boolean isPermissionGranted =
|
||||
(mPm.checkUidPermission(android.Manifest.permission.INSTALL_PACKAGES, installerUid)
|
||||
== PackageManager.PERMISSION_GRANTED);
|
||||
final boolean isInstallerRoot = (installerUid == Process.ROOT_UID);
|
||||
final boolean forcePermissionPrompt =
|
||||
(params.installFlags & PackageManager.INSTALL_FORCE_PERMISSION_PROMPT) != 0;
|
||||
mIsInstallerDeviceOwner = (dpm != null) && dpm.isDeviceOwnerApp(installerPackageName);
|
||||
if ((mPm.checkUidPermission(android.Manifest.permission.INSTALL_PACKAGES, installerUid)
|
||||
== PackageManager.PERMISSION_GRANTED)
|
||||
|| (installerUid == Process.ROOT_UID)
|
||||
|| mIsInstallerDeviceOwner) {
|
||||
if ((isPermissionGranted
|
||||
|| isInstallerRoot
|
||||
|| mIsInstallerDeviceOwner)
|
||||
&& !forcePermissionPrompt) {
|
||||
mPermissionsAccepted = true;
|
||||
} else {
|
||||
mPermissionsAccepted = false;
|
||||
@@ -955,7 +961,9 @@ public class PackageInstallerSession extends IPackageInstallerSession.Stub {
|
||||
|
||||
if (accepted) {
|
||||
// Mark and kick off another install pass
|
||||
mPermissionsAccepted = true;
|
||||
synchronized (mLock) {
|
||||
mPermissionsAccepted = true;
|
||||
}
|
||||
mHandler.obtainMessage(MSG_COMMIT).sendToTarget();
|
||||
} else {
|
||||
destroyInternal();
|
||||
|
||||
@@ -9575,7 +9575,7 @@ public class PackageManagerService extends IPackageManager.Stub {
|
||||
IPackageInstallObserver2 observer, PackageInstaller.SessionParams params,
|
||||
String installerPackageName, int installerUid, UserHandle user) {
|
||||
final VerificationParams verifParams = new VerificationParams(null, params.originatingUri,
|
||||
params.referrerUri, installerUid, null);
|
||||
params.referrerUri, params.originatingUid, null);
|
||||
verifParams.setInstallerUid(installerUid);
|
||||
|
||||
final OriginInfo origin;
|
||||
|
||||
Reference in New Issue
Block a user