diff options
| author | Jeff Sharkey <jsharkey@android.com> | 2015-07-06 17:57:44 +0000 |
|---|---|---|
| committer | Android (Google) Code Review <android-gerrit@google.com> | 2015-07-06 17:57:46 +0000 |
| commit | 38cae6c8bcb86236b21d69f852473351c0c1d82a (patch) | |
| tree | 4b7b00169c8a96ad5aa5ec69c47ed12001c8fc0b /core/java | |
| parent | 539d18c5a9eac6b2cf23b3af38e2635279a106dd (diff) | |
| parent | 6dce4964b4d1a13d276d95730b8fb09d6a5a8d04 (diff) | |
Merge "Reconcile private volumes when mounted." into mnc-dev
Diffstat (limited to 'core/java')
| -rw-r--r-- | core/java/android/content/pm/PackageManager.java | 16 | ||||
| -rw-r--r-- | core/java/android/content/pm/PackageParser.java | 5 | ||||
| -rw-r--r-- | core/java/android/os/Environment.java | 28 | ||||
| -rw-r--r-- | core/java/android/os/storage/StorageManager.java | 15 |
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)); |
