summaryrefslogtreecommitdiffstats
path: root/cmds/pm
diff options
context:
space:
mode:
authorJeff Sharkey <jsharkey@android.com>2014-09-11 21:15:37 -0700
committerJeff Sharkey <jsharkey@android.com>2014-09-11 21:24:00 -0700
commite980804df16c968c14a56b8853886bf5f049f46e (patch)
tree7b86eadba1751dd5d3c23f33770f9acdfc8ca1d5 /cmds/pm
parentd6adcef917aac893fd82e7628781145693d6187f (diff)
downloadframeworks_base-e980804df16c968c14a56b8853886bf5f049f46e.zip
frameworks_base-e980804df16c968c14a56b8853886bf5f049f46e.tar.gz
frameworks_base-e980804df16c968c14a56b8853886bf5f049f46e.tar.bz2
Bring install and install-multiple into parity.
This ensures that both are using (almost) identical logic when deciding what installs to proceed with. Installs from "pm" for all users now run as OWNER, and rely solely on INSTALL_ALL_USERS to express intent. This keeps install session notifications simple. Since installer UID can vary from installer package name, start persisting the UID. Also parse some missing flags for install sessions. Bug: 17469392 Change-Id: I6d89b1a787aa2024cc4bebf6b9c29317c358e147
Diffstat (limited to 'cmds/pm')
-rw-r--r--cmds/pm/src/com/android/commands/pm/Pm.java38
1 files changed, 22 insertions, 16 deletions
diff --git a/cmds/pm/src/com/android/commands/pm/Pm.java b/cmds/pm/src/com/android/commands/pm/Pm.java
index da34094..3863bc7 100644
--- a/cmds/pm/src/com/android/commands/pm/Pm.java
+++ b/cmds/pm/src/com/android/commands/pm/Pm.java
@@ -865,7 +865,7 @@ public final class Pm {
}
private void runInstall() {
- int installFlags = PackageManager.INSTALL_ALL_USERS;
+ int installFlags = 0;
int userId = UserHandle.USER_ALL;
String installerPackageName = null;
@@ -912,17 +912,17 @@ public final class Pm {
abi = checkAbiArgument(nextOptionData());
} else if (opt.equals("--user")) {
userId = Integer.parseInt(nextOptionData());
- if (userId == UserHandle.USER_ALL) {
- installFlags |= PackageManager.INSTALL_ALL_USERS;
- } else {
- installFlags &= ~PackageManager.INSTALL_ALL_USERS;
- }
} else {
System.err.println("Error: Unknown option: " + opt);
return;
}
}
+ if (userId == UserHandle.USER_ALL) {
+ userId = UserHandle.USER_OWNER;
+ installFlags |= PackageManager.INSTALL_ALL_USERS;
+ }
+
final Uri verificationURI;
final Uri originatingURI;
final Uri referrerURI;
@@ -961,8 +961,8 @@ public final class Pm {
VerificationParams verificationParams = new VerificationParams(verificationURI,
originatingURI, referrerURI, VerificationParams.NO_UID, null);
- mPm.installPackageAsUser(apkFilePath, obs.getBinder(), installFlags, installerPackageName,
- verificationParams, abi, userId);
+ mPm.installPackageAsUser(apkFilePath, obs.getBinder(), installFlags,
+ installerPackageName, verificationParams, abi, userId);
synchronized (obs) {
while (!obs.finished) {
@@ -986,10 +986,10 @@ public final class Pm {
}
private void runInstallCreate() throws RemoteException {
+ int userId = UserHandle.USER_ALL;
String installerPackageName = null;
final SessionParams params = new SessionParams(SessionParams.MODE_FULL_INSTALL);
- params.installFlags = PackageManager.INSTALL_ALL_USERS;
String opt;
while ((opt = nextOption()) != null) {
@@ -1010,6 +1010,10 @@ public final class Pm {
params.installFlags |= PackageManager.INSTALL_INTERNAL;
} else if (opt.equals("-d")) {
params.installFlags |= PackageManager.INSTALL_ALLOW_DOWNGRADE;
+ } else if (opt.equals("--originating-uri")) {
+ params.originatingUri = Uri.parse(nextOptionData());
+ } else if (opt.equals("--referrer")) {
+ params.referrerUri = Uri.parse(nextOptionData());
} else if (opt.equals("-p")) {
params.mode = SessionParams.MODE_INHERIT_EXISTING;
params.appPackageName = nextOptionData();
@@ -1020,13 +1024,19 @@ public final class Pm {
params.setSize(Long.parseLong(nextOptionData()));
} else if (opt.equals("--abi")) {
params.abiOverride = checkAbiArgument(nextOptionData());
+ } else if (opt.equals("--user")) {
+ userId = Integer.parseInt(nextOptionData());
} else {
throw new IllegalArgumentException("Unknown option " + opt);
}
}
- final int sessionId = mInstaller.createSession(params, installerPackageName,
- UserHandle.USER_OWNER);
+ if (userId == UserHandle.USER_ALL) {
+ userId = UserHandle.USER_OWNER;
+ params.installFlags |= PackageManager.INSTALL_ALL_USERS;
+ }
+
+ final int sessionId = mInstaller.createSession(params, installerPackageName, userId);
// NOTE: adb depends on parsing this string
System.out.println("Success: created install session [" + sessionId + "]");
@@ -1692,11 +1702,7 @@ public final class Pm {
}
public Intent getResult() {
- try {
- return mResult.poll(30, TimeUnit.SECONDS);
- } catch (InterruptedException e) {
- throw new RuntimeException(e);
- }
+ return mResult.poll();
}
}