diff options
author | Jeff Sharkey <jsharkey@android.com> | 2012-09-11 15:45:19 -0700 |
---|---|---|
committer | Jeff Sharkey <jsharkey@android.com> | 2012-09-11 22:49:27 -0700 |
commit | fc76a78c458ac90d7e050ffc233cf9e32a2d9c0b (patch) | |
tree | cafaff9a473e6d99f27a66d5f14aab867b36cf9a /src/com/android/settings/deviceinfo | |
parent | cfc1bec2e612df10ac5565ebc4382193a6a6c9f6 (diff) | |
download | packages_apps_settings-fc76a78c458ac90d7e050ffc233cf9e32a2d9c0b.zip packages_apps_settings-fc76a78c458ac90d7e050ffc233cf9e32a2d9c0b.tar.gz packages_apps_settings-fc76a78c458ac90d7e050ffc233cf9e32a2d9c0b.tar.bz2 |
Include user identifier in external storage paths.
When building external storage paths, always include user in path
to enable cross-user paths and aid debugging.
Mostly changes so Storage doesn't crash; will take another UI
iteration pass soon.
Bug: 7131382
Change-Id: If7ec807f12a36eb8ed02a0fb94e8a0b3a6694f16
Diffstat (limited to 'src/com/android/settings/deviceinfo')
3 files changed, 41 insertions, 30 deletions
diff --git a/src/com/android/settings/deviceinfo/Memory.java b/src/com/android/settings/deviceinfo/Memory.java index 794c478..f679589 100644 --- a/src/com/android/settings/deviceinfo/Memory.java +++ b/src/com/android/settings/deviceinfo/Memory.java @@ -100,6 +100,7 @@ public class Memory extends SettingsPreferenceFragment { } private void addCategoryForVolume(StorageVolume volume) { + // TODO: Cluster multi-user emulated volumes into single category final StorageVolumePreferenceCategory category = new StorageVolumePreferenceCategory( getActivity(), volume); mCategories.add(category); @@ -108,9 +109,10 @@ public class Memory extends SettingsPreferenceFragment { } private boolean isMassStorageEnabled() { - // mass storage is enabled if primary volume supports it - final StorageVolume[] storageVolumes = mStorageManager.getVolumeList(); - return (storageVolumes.length > 0 && storageVolumes[0].allowMassStorage()); + // Mass storage is enabled if primary volume supports it + final StorageVolume[] volumes = mStorageManager.getVolumeList(); + final StorageVolume primary = StorageManager.getPrimaryVolume(volumes); + return primary != null && primary.allowMassStorage(); } @Override diff --git a/src/com/android/settings/deviceinfo/StorageMeasurement.java b/src/com/android/settings/deviceinfo/StorageMeasurement.java index c137b70..e81bfd8 100644 --- a/src/com/android/settings/deviceinfo/StorageMeasurement.java +++ b/src/com/android/settings/deviceinfo/StorageMeasurement.java @@ -26,6 +26,7 @@ import android.content.pm.PackageManager; import android.content.pm.PackageStats; import android.os.Bundle; import android.os.Environment; +import android.os.Environment.UserEnvironment; import android.os.Handler; import android.os.HandlerThread; import android.os.IBinder; @@ -103,6 +104,7 @@ public class StorageMeasurement { private final StorageVolume mStorageVolume; private final UserHandle mUser; + private final UserEnvironment mUserEnv; private final boolean mIsPrimary; private final boolean mIsInternal; @@ -118,6 +120,7 @@ public class StorageMeasurement { private StorageMeasurement(Context context, StorageVolume volume, UserHandle user) { mStorageVolume = volume; mUser = Preconditions.checkNotNull(user); + mUserEnv = new UserEnvironment(mUser.getIdentifier()); mIsInternal = volume == null; mIsPrimary = volume != null ? volume.isPrimary() : false; @@ -389,7 +392,7 @@ public class StorageMeasurement { final long[] stats = imcs.getFileSystemStats(path); mTotalSize = stats[0]; mAvailSize = stats[1]; - } catch (RemoteException e) { + } catch (Exception e) { Log.w(TAG, "Problem in container service", e); } @@ -450,7 +453,7 @@ public class StorageMeasurement { // Downloads (primary volume only) if (mIsPrimary) { - final String downloadsPath = Environment.getExternalStoragePublicDirectory( + final String downloadsPath = mUserEnv.getExternalStoragePublicDirectory( Environment.DIRECTORY_DOWNLOADS).getAbsolutePath(); mDownloadsSize = getDirectorySize(imcs, downloadsPath); } else { diff --git a/src/com/android/settings/deviceinfo/StorageVolumePreferenceCategory.java b/src/com/android/settings/deviceinfo/StorageVolumePreferenceCategory.java index 4c7c3e6..5be9e15 100644 --- a/src/com/android/settings/deviceinfo/StorageVolumePreferenceCategory.java +++ b/src/com/android/settings/deviceinfo/StorageVolumePreferenceCategory.java @@ -27,6 +27,7 @@ import android.content.res.Resources; import android.hardware.usb.UsbManager; import android.os.Bundle; import android.os.Environment; +import android.os.Environment.UserEnvironment; import android.os.Handler; import android.os.Message; import android.os.RemoteException; @@ -50,17 +51,21 @@ import java.util.Set; public class StorageVolumePreferenceCategory extends PreferenceCategory implements MeasurementReceiver { private static final String KEY_TOTAL_SIZE = "total_size"; + private static final String KEY_AVAILABLE = "available"; + private static final String KEY_APPLICATIONS = "applications"; private static final String KEY_DCIM = "dcim"; // Pictures and Videos private static final String KEY_MUSIC = "music"; private static final String KEY_DOWNLOADS = "downloads"; private static final String KEY_MISC = "misc"; - private static final String KEY_AVAILABLE = "available"; private static final String KEY_USER_PREFIX = "user"; private static final int ORDER_USAGE_BAR = -2; private static final int ORDER_STORAGE_LOW = -1; + private Preference mItemTotal; + private Preference mItemAvailable; + private UsageBarPreference mUsageBarPreference; private Preference mMountTogglePreference; private Preference mFormatPreference; @@ -75,6 +80,9 @@ public class StorageVolumePreferenceCategory extends PreferenceCategory private final StorageManager mStorageManager; private final UserManager mUserManager; + @Deprecated + private static final UserEnvironment sOwnerEnv = new UserEnvironment(UserHandle.USER_OWNER); + /** Measurement for local user. */ private StorageMeasurement mLocalMeasure; /** All used measurements, including other users. */ @@ -98,7 +106,7 @@ public class StorageVolumePreferenceCategory extends PreferenceCategory mDirPaths = new String[length]; for (int i = 0; i < length; i++) { final String name = directories[i]; - final String path = Environment.getExternalStoragePublicDirectory(name). + final String path = sOwnerEnv.getExternalStoragePublicDirectory(name). getAbsolutePath(); mDirPaths[i] = path; sPathsExcludedForMisc.add(path); @@ -116,10 +124,10 @@ public class StorageVolumePreferenceCategory extends PreferenceCategory static { // Downloads - sPathsExcludedForMisc.add(Environment.getExternalStoragePublicDirectory( + sPathsExcludedForMisc.add(sOwnerEnv.getExternalStoragePublicDirectory( Environment.DIRECTORY_DOWNLOADS).getAbsolutePath()); // Apps - sPathsExcludedForMisc.add(Environment.getExternalStorageDirectory().getAbsolutePath() + + sPathsExcludedForMisc.add(sOwnerEnv.getExternalStorageDirectory().getAbsolutePath() + "/Android"); } @@ -196,8 +204,11 @@ public class StorageVolumePreferenceCategory extends PreferenceCategory if (!mIsPrimary) mAllowFormat = false; } - private void addStorageItem(String key, int titleRes, int colorRes) { - addPreference(new StorageItemPreference(getContext(), key, titleRes, colorRes)); + private StorageItemPreference addStorageItem(String key, int titleRes, int colorRes) { + final StorageItemPreference pref = new StorageItemPreference( + getContext(), key, titleRes, colorRes); + addPreference(pref); + return pref; } private static String buildUserKey(UserHandle user) { @@ -221,8 +232,9 @@ public class StorageVolumePreferenceCategory extends PreferenceCategory mUsageBarPreference.setOrder(ORDER_USAGE_BAR); addPreference(mUsageBarPreference); - addStorageItem(KEY_TOTAL_SIZE, R.string.memory_size, 0); - addStorageItem(KEY_AVAILABLE, R.string.memory_available, R.color.memory_avail); + mItemTotal = addStorageItem(KEY_TOTAL_SIZE, R.string.memory_size, 0); + mItemAvailable = addStorageItem( + KEY_AVAILABLE, R.string.memory_available, R.color.memory_avail); if (measureUsers) { addPreference(new PreferenceHeader(context, currentUser.name)); @@ -309,8 +321,9 @@ public class StorageVolumePreferenceCategory extends PreferenceCategory } if (Environment.MEDIA_MOUNTED.equals(state)) { - final Preference pref = findPreference(KEY_AVAILABLE); - pref.setSummary(pref.getSummary() + readOnly); + // TODO: create better i18n strings here; we might end up appending + // multiple times + mItemAvailable.setSummary(mItemAvailable.getSummary() + readOnly); mMountTogglePreference.setEnabled(true); mMountTogglePreference.setTitle(mResources.getString(R.string.sd_eject)); @@ -328,8 +341,8 @@ public class StorageVolumePreferenceCategory extends PreferenceCategory } removePreference(mUsageBarPreference); - removePreference(findPreference(KEY_TOTAL_SIZE)); - removePreference(findPreference(KEY_AVAILABLE)); + removePreference(mItemTotal); + removePreference(mItemAvailable); if (mFormatPreference != null) { removePreference(mFormatPreference); } @@ -354,8 +367,8 @@ public class StorageVolumePreferenceCategory extends PreferenceCategory } public void updateApproximate(long totalSize, long availSize) { - findPreference(KEY_TOTAL_SIZE).setSummary(formatSize(totalSize)); - findPreference(KEY_AVAILABLE).setSummary(formatSize(availSize)); + mItemTotal.setSummary(formatSize(totalSize)); + mItemAvailable.setSummary(formatSize(availSize)); final long usedSize = totalSize - availSize; @@ -374,7 +387,7 @@ public class StorageVolumePreferenceCategory extends PreferenceCategory mShowingApprox = false; } - findPreference(KEY_TOTAL_SIZE).setSummary(formatSize(totalSize)); + mItemTotal.setSummary(formatSize(totalSize)); if (mLocalMeasure.isExternalSDCard()) { // TODO FIXME: external SD card will not report any size. Show used space in bar graph @@ -399,7 +412,7 @@ public class StorageVolumePreferenceCategory extends PreferenceCategory // Block size is taken into account. That can be extra space from folders. TODO Investigate updatePreference(miscSize, totalSize, KEY_MISC); - updatePreference(availSize, totalSize, KEY_AVAILABLE, false); + mItemAvailable.setSummary(formatSize(availSize)); mUsageBarPreference.commit(); } @@ -419,19 +432,13 @@ public class StorageVolumePreferenceCategory extends PreferenceCategory } private void updatePreference(long size, long totalSize, String category) { - updatePreference(size, totalSize, category, true); - } - - private void updatePreference(long size, long totalSize, String category, boolean addBar) { final StorageItemPreference pref = (StorageItemPreference) findPreference(category); if (pref != null) { if (size > 0) { pref.setSummary(formatSize(size)); - if (addBar) { - final int order = pref.getOrder(); - mUsageBarPreference.addEntry(order, size / (float) totalSize, pref.getColor()); - } + final int order = pref.getOrder(); + mUsageBarPreference.addEntry(order, size / (float) totalSize, pref.getColor()); } else { removePreference(pref); } @@ -550,7 +557,6 @@ public class StorageVolumePreferenceCategory extends PreferenceCategory } } - /** * Return list of other users, excluding the current user. */ |