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;
}