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:
@@ -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);
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user