summaryrefslogtreecommitdiff
path: root/core/java
diff options
context:
space:
mode:
authorJeff Sharkey <jsharkey@android.com>2015-07-06 17:57:44 +0000
committerAndroid (Google) Code Review <android-gerrit@google.com>2015-07-06 17:57:46 +0000
commit38cae6c8bcb86236b21d69f852473351c0c1d82a (patch)
tree4b7b00169c8a96ad5aa5ec69c47ed12001c8fc0b /core/java
parent539d18c5a9eac6b2cf23b3af38e2635279a106dd (diff)
parent6dce4964b4d1a13d276d95730b8fb09d6a5a8d04 (diff)
Merge "Reconcile private volumes when mounted." into mnc-dev
Diffstat (limited to 'core/java')
-rw-r--r--core/java/android/content/pm/PackageManager.java16
-rw-r--r--core/java/android/content/pm/PackageParser.java5
-rw-r--r--core/java/android/os/Environment.java28
-rw-r--r--core/java/android/os/storage/StorageManager.java15
4 files changed, 43 insertions, 21 deletions
diff --git a/core/java/android/content/pm/PackageManager.java b/core/java/android/content/pm/PackageManager.java
index 538007a32820..49386f9e0480 100644
--- a/core/java/android/content/pm/PackageManager.java
+++ b/core/java/android/content/pm/PackageManager.java
@@ -4448,22 +4448,6 @@ public abstract class PackageManager {
public abstract @NonNull PackageInstaller getPackageInstaller();
/**
- * Returns the data directory for a particular package and user.
- *
- * @hide
- */
- public static File getDataDirForUser(String volumeUuid, String packageName, int userId) {
- // TODO: This should be shared with Installer's knowledge of user directory
- final File base;
- if (TextUtils.isEmpty(volumeUuid)) {
- base = Environment.getDataDirectory();
- } else {
- base = new File("/mnt/expand/" + volumeUuid);
- }
- return new File(base, "user/" + userId + "/" + packageName);
- }
-
- /**
* Adds a {@link CrossProfileIntentFilter}. After calling this method all intents sent from the
* user with id sourceUserId can also be be resolved by activities in the user with id
* targetUserId if they match the specified intent filter.
diff --git a/core/java/android/content/pm/PackageParser.java b/core/java/android/content/pm/PackageParser.java
index 64376c1cede5..48ffb9866232 100644
--- a/core/java/android/content/pm/PackageParser.java
+++ b/core/java/android/content/pm/PackageParser.java
@@ -36,6 +36,7 @@ import android.content.res.TypedArray;
import android.content.res.XmlResourceParser;
import android.os.Build;
import android.os.Bundle;
+import android.os.Environment;
import android.os.FileUtils;
import android.os.PatternMatcher;
import android.os.UserHandle;
@@ -4785,7 +4786,7 @@ public class PackageParser {
// Make shallow copy so we can store the metadata/libraries safely
ApplicationInfo ai = new ApplicationInfo(p.applicationInfo);
ai.uid = UserHandle.getUid(userId, ai.uid);
- ai.dataDir = PackageManager.getDataDirForUser(ai.volumeUuid, ai.packageName, userId)
+ ai.dataDir = Environment.getDataUserPackageDirectory(ai.volumeUuid, userId, ai.packageName)
.getAbsolutePath();
if ((flags & PackageManager.GET_META_DATA) != 0) {
ai.metaData = p.mAppMetaData;
@@ -4812,7 +4813,7 @@ public class PackageParser {
// make a copy.
ai = new ApplicationInfo(ai);
ai.uid = UserHandle.getUid(userId, ai.uid);
- ai.dataDir = PackageManager.getDataDirForUser(ai.volumeUuid, ai.packageName, userId)
+ ai.dataDir = Environment.getDataUserPackageDirectory(ai.volumeUuid, userId, ai.packageName)
.getAbsolutePath();
if (state.stopped) {
ai.flags |= ApplicationInfo.FLAG_STOPPED;
diff --git a/core/java/android/os/Environment.java b/core/java/android/os/Environment.java
index 8e0584a3e0bc..208085624e3b 100644
--- a/core/java/android/os/Environment.java
+++ b/core/java/android/os/Environment.java
@@ -244,14 +244,36 @@ public class Environment {
}
/** {@hide} */
- public static File getDataAppDirectory(String volumeUuid) {
+ public static File getDataDirectory(String volumeUuid) {
if (TextUtils.isEmpty(volumeUuid)) {
- return new File("/data/app");
+ return new File("/data");
} else {
- return new File("/mnt/expand/" + volumeUuid + "/app");
+ return new File("/mnt/expand/" + volumeUuid);
}
}
+ /** {@hide} */
+ public static File getDataAppDirectory(String volumeUuid) {
+ return new File(getDataDirectory(volumeUuid), "app");
+ }
+
+ /** {@hide} */
+ public static File getDataUserDirectory(String volumeUuid) {
+ return new File(getDataDirectory(volumeUuid), "user");
+ }
+
+ /** {@hide} */
+ public static File getDataUserDirectory(String volumeUuid, int userId) {
+ return new File(getDataUserDirectory(volumeUuid), String.valueOf(userId));
+ }
+
+ /** {@hide} */
+ public static File getDataUserPackageDirectory(String volumeUuid, int userId,
+ String packageName) {
+ // TODO: keep consistent with installd
+ return new File(getDataUserDirectory(volumeUuid, userId), packageName);
+ }
+
/**
* Return the primary external storage directory. This directory may not
* currently be accessible if it has been mounted by the user on their
diff --git a/core/java/android/os/storage/StorageManager.java b/core/java/android/os/storage/StorageManager.java
index aab68e96699a..d28766f96368 100644
--- a/core/java/android/os/storage/StorageManager.java
+++ b/core/java/android/os/storage/StorageManager.java
@@ -586,6 +586,21 @@ public class StorageManager {
}
/** {@hide} */
+ public @NonNull List<VolumeInfo> getWritablePrivateVolumes() {
+ try {
+ final ArrayList<VolumeInfo> res = new ArrayList<>();
+ for (VolumeInfo vol : mMountService.getVolumes(0)) {
+ if (vol.getType() == VolumeInfo.TYPE_PRIVATE && vol.isMountedWritable()) {
+ res.add(vol);
+ }
+ }
+ return res;
+ } catch (RemoteException e) {
+ throw e.rethrowAsRuntimeException();
+ }
+ }
+
+ /** {@hide} */
public @NonNull List<VolumeRecord> getVolumeRecords() {
try {
return Arrays.asList(mMountService.getVolumeRecords(0));