diff options
Diffstat (limited to 'services/java')
3 files changed, 45 insertions, 46 deletions
diff --git a/services/java/com/android/server/BackupManagerService.java b/services/java/com/android/server/BackupManagerService.java index a537e99..ad9192a 100644 --- a/services/java/com/android/server/BackupManagerService.java +++ b/services/java/com/android/server/BackupManagerService.java @@ -2877,7 +2877,7 @@ class BackupManagerService extends IBackupManager.Stub { // Save associated .obb content if it exists and we did save the apk // check for .obb and save those too final UserEnvironment userEnv = new UserEnvironment(UserHandle.USER_OWNER); - final File obbDir = userEnv.getExternalStorageAppObbDirectory(pkg.packageName); + final File obbDir = userEnv.buildExternalStorageAppObbDirs(pkg.packageName)[0]; if (obbDir != null) { if (MORE_DEBUG) Log.i(TAG, "obb dir: " + obbDir.getAbsolutePath()); File[] obbFiles = obbDir.listFiles(); diff --git a/services/java/com/android/server/MountService.java b/services/java/com/android/server/MountService.java index 83739f5..1facb80 100644 --- a/services/java/com/android/server/MountService.java +++ b/services/java/com/android/server/MountService.java @@ -190,6 +190,8 @@ class MountService extends IMountService.Stub /** When defined, base template for user-specific {@link StorageVolume}. */ private StorageVolume mEmulatedTemplate; + // TODO: separate storage volumes on per-user basis + @GuardedBy("mVolumesLock") private final ArrayList<StorageVolume> mVolumes = Lists.newArrayList(); /** Map from path to {@link StorageVolume} */ @@ -2605,6 +2607,7 @@ class MountService extends IMountService.Stub @VisibleForTesting public static String buildObbPath(final String canonicalPath, int userId, boolean forVold) { // TODO: allow caller to provide Environment for full testing + // TODO: extend to support OBB mounts on secondary external storage // Only adjust paths when storage is emulated if (!Environment.isExternalStorageEmulated()) { @@ -2617,10 +2620,10 @@ class MountService extends IMountService.Stub final UserEnvironment userEnv = new UserEnvironment(userId); // /storage/emulated/0 - final String externalPath = userEnv.getExternalStorageDirectory().toString(); + final String externalPath = userEnv.getExternalStorageDirectory().getAbsolutePath(); // /storage/emulated_legacy final String legacyExternalPath = Environment.getLegacyExternalStorageDirectory() - .toString(); + .getAbsolutePath(); if (path.startsWith(externalPath)) { path = path.substring(externalPath.length() + 1); @@ -2636,18 +2639,19 @@ class MountService extends IMountService.Stub path = path.substring(obbPath.length() + 1); if (forVold) { - return new File(Environment.getEmulatedStorageObbSource(), path).toString(); + return new File(Environment.getEmulatedStorageObbSource(), path).getAbsolutePath(); } else { final UserEnvironment ownerEnv = new UserEnvironment(UserHandle.USER_OWNER); - return new File(ownerEnv.getExternalStorageObbDirectory(), path).toString(); + return new File(ownerEnv.buildExternalStorageAndroidObbDirs()[0], path) + .getAbsolutePath(); } } // Handle normal external storage paths if (forVold) { - return new File(Environment.getEmulatedStorageSource(userId), path).toString(); + return new File(Environment.getEmulatedStorageSource(userId), path).getAbsolutePath(); } else { - return new File(userEnv.getExternalStorageDirectory(), path).toString(); + return new File(userEnv.getExternalDirs()[0], path).getAbsolutePath(); } } diff --git a/services/java/com/android/server/pm/PackageManagerService.java b/services/java/com/android/server/pm/PackageManagerService.java index 80e20a5..656080b 100755 --- a/services/java/com/android/server/pm/PackageManagerService.java +++ b/services/java/com/android/server/pm/PackageManagerService.java @@ -6794,31 +6794,20 @@ public class PackageManagerService extends IPackageManager.Stub { if (mounted) { final UserEnvironment userEnv = new UserEnvironment(mStats.userHandle); - final File externalCacheDir = userEnv - .getExternalStorageAppCacheDirectory(mStats.packageName); - final long externalCacheSize = mContainerService - .calculateDirectorySize(externalCacheDir.getPath()); - mStats.externalCacheSize = externalCacheSize; + mStats.externalCacheSize = calculateDirectorySize(mContainerService, + userEnv.buildExternalStorageAppCacheDirs(mStats.packageName)); - final File externalDataDir = userEnv - .getExternalStorageAppDataDirectory(mStats.packageName); - long externalDataSize = mContainerService.calculateDirectorySize(externalDataDir - .getPath()); + mStats.externalDataSize = calculateDirectorySize(mContainerService, + userEnv.buildExternalStorageAppDataDirs(mStats.packageName)); - if (externalCacheDir.getParentFile().equals(externalDataDir)) { - externalDataSize -= externalCacheSize; - } - mStats.externalDataSize = externalDataSize; + // Always subtract cache size, since it's a subdirectory + mStats.externalDataSize -= mStats.externalCacheSize; - final File externalMediaDir = userEnv - .getExternalStorageAppMediaDirectory(mStats.packageName); - mStats.externalMediaSize = mContainerService - .calculateDirectorySize(externalMediaDir.getPath()); + mStats.externalMediaSize = calculateDirectorySize(mContainerService, + userEnv.buildExternalStorageAppMediaDirs(mStats.packageName)); - final File externalObbDir = userEnv - .getExternalStorageAppObbDirectory(mStats.packageName); - mStats.externalObbSize = mContainerService.calculateDirectorySize(externalObbDir - .getPath()); + mStats.externalObbSize = calculateDirectorySize(mContainerService, + userEnv.buildExternalStorageAppObbDirs(mStats.packageName)); } } @@ -6840,6 +6829,24 @@ public class PackageManagerService extends IPackageManager.Stub { } } + private static long calculateDirectorySize(IMediaContainerService mcs, File[] paths) + throws RemoteException { + long result = 0; + for (File path : paths) { + result += mcs.calculateDirectorySize(path.getAbsolutePath()); + } + return result; + } + + private static void clearDirectory(IMediaContainerService mcs, File[] paths) { + for (File path : paths) { + try { + mcs.clearDirectory(path.getAbsolutePath()); + } catch (RemoteException e) { + } + } + } + class InstallParams extends HandlerParams { final IPackageInstallObserver observer; int flags; @@ -9291,25 +9298,13 @@ public class PackageManagerService extends IPackageManager.Stub { } final UserEnvironment userEnv = new UserEnvironment(curUser); - final File externalCacheDir = userEnv - .getExternalStorageAppCacheDirectory(packageName); - try { - conn.mContainerService.clearDirectory(externalCacheDir.toString()); - } catch (RemoteException e) { - } + clearDirectory(conn.mContainerService, + userEnv.buildExternalStorageAppCacheDirs(packageName)); if (allData) { - final File externalDataDir = userEnv - .getExternalStorageAppDataDirectory(packageName); - try { - conn.mContainerService.clearDirectory(externalDataDir.toString()); - } catch (RemoteException e) { - } - final File externalMediaDir = userEnv - .getExternalStorageAppMediaDirectory(packageName); - try { - conn.mContainerService.clearDirectory(externalMediaDir.toString()); - } catch (RemoteException e) { - } + clearDirectory(conn.mContainerService, + userEnv.buildExternalStorageAppDataDirs(packageName)); + clearDirectory(conn.mContainerService, + userEnv.buildExternalStorageAppMediaDirs(packageName)); } } } finally { |
