From 2ea50e2b5ba495895768505070fcd01574ba20ad Mon Sep 17 00:00:00 2001 From: Pawit Pornkitprasan Date: Fri, 23 Nov 2012 16:42:11 +0700 Subject: [PATCH] Settings: fix storage measurement for device without emulated sdcard StorageMeasurement: misc files should only be measured for internal storage only if it is the emulated storage, otherwise misc count for the primary storage will be erroneously duplicated on the internal storage count. StorageVolumePreferenceCategory: - Always create mMountTogglePreference to avoid null pointer exception for code that relies on it existing - Check if the keys exist before calculating totalValues to avoid null pointer exception on storage where media is not calculated - For available/readonly, set title, not summary (summary is supposed to be the amount available) Change-Id: Ib217f79ee562dffc514696fff038e58ed0dba7d9 --- .../settings/deviceinfo/StorageMeasurement.java | 2 +- .../deviceinfo/StorageVolumePreferenceCategory.java | 11 +++++++---- 2 files changed, 8 insertions(+), 5 deletions(-) diff --git a/src/com/android/settings/deviceinfo/StorageMeasurement.java b/src/com/android/settings/deviceinfo/StorageMeasurement.java index 772ac0dfd54..a22ba77ad13 100644 --- a/src/com/android/settings/deviceinfo/StorageMeasurement.java +++ b/src/com/android/settings/deviceinfo/StorageMeasurement.java @@ -422,7 +422,7 @@ public class StorageMeasurement { } // Measure misc files not counted under media - if (mIsInternal || mIsPrimary) { + if (measureMedia) { final File path = mIsInternal ? currentEnv.getExternalStorageDirectory() : mVolume.getPathFile(); details.miscSize = measureMisc(imcs, path); diff --git a/src/com/android/settings/deviceinfo/StorageVolumePreferenceCategory.java b/src/com/android/settings/deviceinfo/StorageVolumePreferenceCategory.java index 1599ec7e9ee..61188ec1c2c 100644 --- a/src/com/android/settings/deviceinfo/StorageVolumePreferenceCategory.java +++ b/src/com/android/settings/deviceinfo/StorageVolumePreferenceCategory.java @@ -194,8 +194,9 @@ public class StorageVolumePreferenceCategory extends PreferenceCategory { } final boolean isRemovable = mVolume != null ? mVolume.isRemovable() : false; + // Always create the preference since many code rely on it existing + mMountTogglePreference = new Preference(context); if (isRemovable) { - mMountTogglePreference = new Preference(context); mMountTogglePreference.setTitle(R.string.sd_eject); mMountTogglePreference.setSummary(R.string.sd_eject_summary); addPreference(mMountTogglePreference); @@ -240,12 +241,12 @@ public class StorageVolumePreferenceCategory extends PreferenceCategory { final String state = mStorageManager.getVolumeState(mVolume.getPath()); if (Environment.MEDIA_MOUNTED_READ_ONLY.equals(state)) { - mItemAvailable.setSummary(R.string.memory_available_read_only); + mItemAvailable.setTitle(R.string.memory_available_read_only); if (mFormatPreference != null) { removePreference(mFormatPreference); } } else { - mItemAvailable.setSummary(R.string.memory_available); + mItemAvailable.setTitle(R.string.memory_available); } if (Environment.MEDIA_MOUNTED.equals(state) @@ -310,7 +311,9 @@ public class StorageVolumePreferenceCategory extends PreferenceCategory { private static long totalValues(HashMap map, String... keys) { long total = 0; for (String key : keys) { - total += map.get(key); + if (map.containsKey(key)) { + total += map.get(key); + } } return total; }