Part of Bug 5252423: Crash in summary text when time out is 0

Negative value will show no summary.

Zero is no longer a special case. It will display the first summary, like any
value below it.

Change-Id: I88d49cac844fb2dc347bef94ac033df9255d748f
This commit is contained in:
Gilles Debunne
2011-09-02 15:47:24 -07:00
parent 4e658ba969
commit 698c24fcf0

View File

@@ -78,41 +78,32 @@ public class DisplaySettings extends SettingsPreferenceFragment implements
mScreenTimeoutPreference.setValue(String.valueOf(currentTimeout)); mScreenTimeoutPreference.setValue(String.valueOf(currentTimeout));
mScreenTimeoutPreference.setOnPreferenceChangeListener(this); mScreenTimeoutPreference.setOnPreferenceChangeListener(this);
disableUnusableTimeouts(mScreenTimeoutPreference); disableUnusableTimeouts(mScreenTimeoutPreference);
updateTimeoutPreferenceDescription(mScreenTimeoutPreference, updateTimeoutPreferenceDescription(currentTimeout);
R.string.screen_timeout_summary, currentTimeout);
mFontSizePref = (ListPreference) findPreference(KEY_FONT_SIZE); mFontSizePref = (ListPreference) findPreference(KEY_FONT_SIZE);
mFontSizePref.setOnPreferenceChangeListener(this); mFontSizePref.setOnPreferenceChangeListener(this);
} }
private void updateTimeoutPreferenceDescription( private void updateTimeoutPreferenceDescription(long currentTimeout) {
ListPreference pref, ListPreference preference = mScreenTimeoutPreference;
int summaryStrings,
long currentTimeout) {
updateTimeoutPreferenceDescription(pref, summaryStrings, 0, currentTimeout);
}
private void updateTimeoutPreferenceDescription(
ListPreference pref,
int summaryStrings,
int zeroString,
long currentTimeout) {
String summary; String summary;
if (currentTimeout == 0) { if (currentTimeout < 0) {
summary = pref.getContext().getString(zeroString); // Unsupported value
summary = "";
} else { } else {
final CharSequence[] entries = pref.getEntries(); final CharSequence[] entries = preference.getEntries();
final CharSequence[] values = pref.getEntryValues(); final CharSequence[] values = preference.getEntryValues();
int best = 0; int best = 0;
for (int i = 0; i < values.length; i++) { for (int i = 0; i < values.length; i++) {
long timeout = Long.valueOf(values[i].toString()); long timeout = Long.parseLong(values[i].toString());
if (currentTimeout >= timeout) { if (currentTimeout >= timeout) {
best = i; best = i;
} }
} }
summary = pref.getContext().getString(summaryStrings, entries[best]); summary = preference.getContext().getString(R.string.screen_timeout_summary,
entries[best]);
} }
pref.setSummary(summary); preference.setSummary(summary);
} }
private void disableUnusableTimeouts(ListPreference screenTimeoutPreference) { private void disableUnusableTimeouts(ListPreference screenTimeoutPreference) {
@@ -128,7 +119,7 @@ public class DisplaySettings extends SettingsPreferenceFragment implements
ArrayList<CharSequence> revisedEntries = new ArrayList<CharSequence>(); ArrayList<CharSequence> revisedEntries = new ArrayList<CharSequence>();
ArrayList<CharSequence> revisedValues = new ArrayList<CharSequence>(); ArrayList<CharSequence> revisedValues = new ArrayList<CharSequence>();
for (int i = 0; i < values.length; i++) { for (int i = 0; i < values.length; i++) {
long timeout = Long.valueOf(values[i].toString()); long timeout = Long.parseLong(values[i].toString());
if (timeout <= maxTimeout) { if (timeout <= maxTimeout) {
revisedEntries.add(entries[i]); revisedEntries.add(entries[i]);
revisedValues.add(values[i]); revisedValues.add(values[i]);
@@ -139,7 +130,7 @@ public class DisplaySettings extends SettingsPreferenceFragment implements
revisedEntries.toArray(new CharSequence[revisedEntries.size()])); revisedEntries.toArray(new CharSequence[revisedEntries.size()]));
screenTimeoutPreference.setEntryValues( screenTimeoutPreference.setEntryValues(
revisedValues.toArray(new CharSequence[revisedValues.size()])); revisedValues.toArray(new CharSequence[revisedValues.size()]));
final int userPreference = Integer.valueOf(screenTimeoutPreference.getValue()); final int userPreference = Integer.parseInt(screenTimeoutPreference.getValue());
if (userPreference <= maxTimeout) { if (userPreference <= maxTimeout) {
screenTimeoutPreference.setValue(String.valueOf(userPreference)); screenTimeoutPreference.setValue(String.valueOf(userPreference));
} else { } else {
@@ -234,10 +225,8 @@ public class DisplaySettings extends SettingsPreferenceFragment implements
if (KEY_SCREEN_TIMEOUT.equals(key)) { if (KEY_SCREEN_TIMEOUT.equals(key)) {
int value = Integer.parseInt((String) objValue); int value = Integer.parseInt((String) objValue);
try { try {
Settings.System.putInt(getContentResolver(), Settings.System.putInt(getContentResolver(), SCREEN_OFF_TIMEOUT, value);
SCREEN_OFF_TIMEOUT, value); updateTimeoutPreferenceDescription(value);
updateTimeoutPreferenceDescription(mScreenTimeoutPreference,
R.string.screen_timeout_summary, value);
} catch (NumberFormatException e) { } catch (NumberFormatException e) {
Log.e(TAG, "could not persist screen timeout setting", e); Log.e(TAG, "could not persist screen timeout setting", e);
} }