diff options
author | Jeff Sharkey <jsharkey@android.com> | 2013-08-11 16:28:14 -0700 |
---|---|---|
committer | Jeff Sharkey <jsharkey@android.com> | 2013-08-11 17:07:44 -0700 |
commit | 1abdb7123025e52512b2ed7a518f8c754c35f50a (patch) | |
tree | c6ee8a4b4b4f8cf7b865d2d537823d6a59dca441 /services/java/com/android/server/pm/PackageManagerService.java | |
parent | 09335703572db7d6a9b43f3aba32074e473d6a0f (diff) |
APIs for multiple external storage devices.
Provide developer APIs to discover application-specific paths on
secondary external storage devices. Covers files, cache, and OBB
directories. Apps will not have write access outside their package-
specific directories on secondary devices, so only primary storage is
exposed through Environment.
Creation of .nomedia files will be handled by FUSE daemon in future
change.
Change-Id: Ifcce6201a686d80269d7285adb597c008cf8fa7c
Diffstat (limited to 'services/java/com/android/server/pm/PackageManagerService.java')
-rwxr-xr-x | services/java/com/android/server/pm/PackageManagerService.java | 73 |
1 files changed, 34 insertions, 39 deletions
diff --git a/services/java/com/android/server/pm/PackageManagerService.java b/services/java/com/android/server/pm/PackageManagerService.java index 80e20a537592..656080b4bf5c 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 { |