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
This commit is contained in:
Pawit Pornkitprasan
2012-11-23 16:42:11 +07:00
parent 79bf08d246
commit 2ea50e2b5b
2 changed files with 8 additions and 5 deletions

View File

@@ -422,7 +422,7 @@ public class StorageMeasurement {
} }
// Measure misc files not counted under media // Measure misc files not counted under media
if (mIsInternal || mIsPrimary) { if (measureMedia) {
final File path = mIsInternal ? currentEnv.getExternalStorageDirectory() final File path = mIsInternal ? currentEnv.getExternalStorageDirectory()
: mVolume.getPathFile(); : mVolume.getPathFile();
details.miscSize = measureMisc(imcs, path); details.miscSize = measureMisc(imcs, path);

View File

@@ -194,8 +194,9 @@ public class StorageVolumePreferenceCategory extends PreferenceCategory {
} }
final boolean isRemovable = mVolume != null ? mVolume.isRemovable() : false; 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) { if (isRemovable) {
mMountTogglePreference = new Preference(context);
mMountTogglePreference.setTitle(R.string.sd_eject); mMountTogglePreference.setTitle(R.string.sd_eject);
mMountTogglePreference.setSummary(R.string.sd_eject_summary); mMountTogglePreference.setSummary(R.string.sd_eject_summary);
addPreference(mMountTogglePreference); addPreference(mMountTogglePreference);
@@ -240,12 +241,12 @@ public class StorageVolumePreferenceCategory extends PreferenceCategory {
final String state = mStorageManager.getVolumeState(mVolume.getPath()); final String state = mStorageManager.getVolumeState(mVolume.getPath());
if (Environment.MEDIA_MOUNTED_READ_ONLY.equals(state)) { 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) { if (mFormatPreference != null) {
removePreference(mFormatPreference); removePreference(mFormatPreference);
} }
} else { } else {
mItemAvailable.setSummary(R.string.memory_available); mItemAvailable.setTitle(R.string.memory_available);
} }
if (Environment.MEDIA_MOUNTED.equals(state) if (Environment.MEDIA_MOUNTED.equals(state)
@@ -310,7 +311,9 @@ public class StorageVolumePreferenceCategory extends PreferenceCategory {
private static long totalValues(HashMap<String, Long> map, String... keys) { private static long totalValues(HashMap<String, Long> map, String... keys) {
long total = 0; long total = 0;
for (String key : keys) { for (String key : keys) {
total += map.get(key); if (map.containsKey(key)) {
total += map.get(key);
}
} }
return total; return total;
} }