summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorJeff Sharkey <jsharkey@android.com>2015-06-09 21:42:22 -0700
committerJeff Sharkey <jsharkey@android.com>2015-06-09 21:42:22 -0700
commitab2340996a515ea0c437ad5bb1ea1fa88ab9edff (patch)
tree5a0fe9a3ade570643394908c989a2cd371268a40
parent4e83cc9fc15fa4795a41d4d8dfd2b00c1ad966fd (diff)
downloadframeworks_base-ab2340996a515ea0c437ad5bb1ea1fa88ab9edff.zip
frameworks_base-ab2340996a515ea0c437ad5bb1ea1fa88ab9edff.tar.gz
frameworks_base-ab2340996a515ea0c437ad5bb1ea1fa88ab9edff.tar.bz2
Flags to select storage volume for app installs.
Remote callers can now provide the "--install-location" value from the APK to help select a location, or they can explicitly force a volume by UUID. Bug: 21676789 Change-Id: Iefc92d770a851fc33e37edbf259fdb8df2b14ae5
-rw-r--r--cmds/pm/src/com/android/commands/pm/Pm.java10
-rw-r--r--core/java/android/content/pm/PackageManager.java3
-rw-r--r--services/core/java/com/android/server/pm/PackageInstallerService.java5
3 files changed, 18 insertions, 0 deletions
diff --git a/cmds/pm/src/com/android/commands/pm/Pm.java b/cmds/pm/src/com/android/commands/pm/Pm.java
index 1599459..1faf41b 100644
--- a/cmds/pm/src/com/android/commands/pm/Pm.java
+++ b/cmds/pm/src/com/android/commands/pm/Pm.java
@@ -1037,6 +1037,14 @@ public final class Pm {
params.abiOverride = checkAbiArgument(nextOptionData());
} else if (opt.equals("--user")) {
userId = Integer.parseInt(nextOptionData());
+ } else if (opt.equals("--install-location")) {
+ params.installLocation = Integer.parseInt(nextOptionData());
+ } else if (opt.equals("--force-uuid")) {
+ params.installFlags |= PackageManager.INSTALL_FORCE_VOLUME_UUID;
+ params.volumeUuid = nextOptionData();
+ if ("internal".equals(params.volumeUuid)) {
+ params.volumeUuid = null;
+ }
} else {
throw new IllegalArgumentException("Unknown option " + opt);
}
@@ -1885,6 +1893,8 @@ public final class Pm {
System.err.println(" pm dump PACKAGE");
System.err.println(" pm install [-lrtsfd] [-i PACKAGE] [--user USER_ID] [PATH]");
System.err.println(" pm install-create [-lrtsfdp] [-i PACKAGE] [-S BYTES]");
+ System.err.println(" [--install-location 0/1/2]");
+ System.err.println(" [--force-uuid internal|UUID]");
System.err.println(" pm install-write [-S BYTES] SESSION_ID SPLIT_NAME [PATH]");
System.err.println(" pm install-commit SESSION_ID");
System.err.println(" pm install-abandon SESSION_ID");
diff --git a/core/java/android/content/pm/PackageManager.java b/core/java/android/content/pm/PackageManager.java
index c016ac3..68092c8 100644
--- a/core/java/android/content/pm/PackageManager.java
+++ b/core/java/android/content/pm/PackageManager.java
@@ -401,6 +401,9 @@ public abstract class PackageManager {
*/
public static final int INSTALL_GRANT_RUNTIME_PERMISSIONS = 0x00000100;
+ /** {@hide} */
+ public static final int INSTALL_FORCE_VOLUME_UUID = 0x00000200;
+
/**
* Flag parameter for
* {@link #setComponentEnabledSetting(android.content.ComponentName, int, int)} to indicate
diff --git a/services/core/java/com/android/server/pm/PackageInstallerService.java b/services/core/java/com/android/server/pm/PackageInstallerService.java
index a1738a2..ca24e3a 100644
--- a/services/core/java/com/android/server/pm/PackageInstallerService.java
+++ b/services/core/java/com/android/server/pm/PackageInstallerService.java
@@ -571,6 +571,11 @@ public class PackageInstallerService extends IPackageInstaller.Stub {
throw new IOException("No suitable external storage available");
}
+ } else if ((params.installFlags & PackageManager.INSTALL_FORCE_VOLUME_UUID) != 0) {
+ // For now, installs to adopted media are treated as internal from
+ // an install flag point-of-view.
+ params.setInstallFlagsInternal();
+
} else {
// For now, installs to adopted media are treated as internal from
// an install flag point-of-view.