Loading src/com/android/deskclock/settings/SettingsActivity.java +34 −32 Original line number Diff line number Diff line Loading @@ -105,22 +105,27 @@ public final class SettingsActivity extends BaseActivity { public static class PrefsFragment extends PreferenceFragment implements Preference.OnPreferenceChangeListener, Preference.OnPreferenceClickListener { private static CharSequence[][] mTimezones; private long mTime; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); addPreferencesFromResource(R.xml.settings); loadTimeZoneList(); } @Override public void onResume() { super.onResume(); loadTimeZoneList(); public void onActivityCreated(Bundle savedInstanceState) { super.onActivityCreated(savedInstanceState); // By default, do not recreate the DeskClock activity getActivity().setResult(RESULT_CANCELED); } @Override public void onResume() { super.onResume(); refresh(); } Loading Loading @@ -179,7 +184,7 @@ public final class SettingsActivity extends BaseActivity { switch (pref.getKey()) { case KEY_DATE_TIME: Intent dialogIntent = new Intent(Settings.ACTION_DATE_SETTINGS); final Intent dialogIntent = new Intent(Settings.ACTION_DATE_SETTINGS); dialogIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); startActivity(dialogIntent); return true; Loading @@ -195,20 +200,13 @@ public final class SettingsActivity extends BaseActivity { } /** * Reconstruct the timezone list. We don't want to do this unnecessary, so proceed only if * this is the initial load or the locale has changed since the last load. * Reconstruct the timezone list. */ private void loadTimeZoneList() { final Locale currentLocale = getResources().getConfiguration().locale; final Context context = getActivity(); if (mTimezones == null || Utils.getTimezoneLocale(context) != currentLocale) { mTime = System.currentTimeMillis(); mTimezones = getAllTimezones(); Utils.setTimezoneLocale(context, currentLocale); } final CharSequence[][] timezones = getAllTimezones(); final ListPreference homeTimezonePref = (ListPreference) findPreference(KEY_HOME_TZ); homeTimezonePref.setEntryValues(mTimezones[0]); homeTimezonePref.setEntries(mTimezones[1]); homeTimezonePref.setEntryValues(timezones[0]); homeTimezonePref.setEntries(timezones[1]); homeTimezonePref.setSummary(homeTimezonePref.getEntry()); homeTimezonePref.setOnPreferenceChangeListener(this); } Loading @@ -222,21 +220,24 @@ public final class SettingsActivity extends BaseActivity { * @return double array of tz ids and tz names */ public CharSequence[][] getAllTimezones() { Resources resources = this.getResources(); String[] ids = resources.getStringArray(R.array.timezone_values); String[] labels = resources.getStringArray(R.array.timezone_labels); final Resources res = getResources(); final String[] ids = res.getStringArray(R.array.timezone_values); final String[] labels = res.getStringArray(R.array.timezone_labels); int minLength = ids.length; if (ids.length != labels.length) { minLength = Math.min(minLength, labels.length); LogUtils.e("Timezone ids and labels have different length!"); } List<TimeZoneRow> timezones = new ArrayList<>(); final long currentTimeMillis = System.currentTimeMillis(); final List<TimeZoneRow> timezones = new ArrayList<>(minLength); for (int i = 0; i < minLength; i++) { timezones.add(new TimeZoneRow(ids[i], labels[i])); timezones.add(new TimeZoneRow(ids[i], labels[i], currentTimeMillis)); } Collections.sort(timezones); CharSequence[][] timeZones = new CharSequence[2][timezones.size()]; final CharSequence[][] timeZones = new CharSequence[2][timezones.size()]; int i = 0; for (TimeZoneRow row : timezones) { timeZones[0][i] = row.mId; Loading Loading @@ -313,18 +314,19 @@ public final class SettingsActivity extends BaseActivity { } } private class TimeZoneRow implements Comparable<TimeZoneRow> { private static class TimeZoneRow implements Comparable<TimeZoneRow> { private static final boolean SHOW_DAYLIGHT_SAVINGS_INDICATOR = false; public final String mId; public final String mDisplayName; public final int mOffset; public TimeZoneRow(String id, String name) { public TimeZoneRow(String id, String name, long currentTimeMillis) { final TimeZone tz = TimeZone.getTimeZone(id); final boolean useDaylightTime = tz.useDaylightTime(); mId = id; TimeZone tz = TimeZone.getTimeZone(id); boolean useDaylightTime = tz.useDaylightTime(); mOffset = tz.getOffset(mTime); mOffset = tz.getOffset(currentTimeMillis); mDisplayName = buildGmtDisplayName(name, useDaylightTime); } Loading @@ -334,8 +336,8 @@ public final class SettingsActivity extends BaseActivity { } public String buildGmtDisplayName(String displayName, boolean useDaylightTime) { int p = Math.abs(mOffset); StringBuilder name = new StringBuilder("(GMT"); final int p = Math.abs(mOffset); final StringBuilder name = new StringBuilder("(GMT"); name.append(mOffset < 0 ? '-' : '+'); name.append(p / DateUtils.HOUR_IN_MILLIS); Loading Loading
src/com/android/deskclock/settings/SettingsActivity.java +34 −32 Original line number Diff line number Diff line Loading @@ -105,22 +105,27 @@ public final class SettingsActivity extends BaseActivity { public static class PrefsFragment extends PreferenceFragment implements Preference.OnPreferenceChangeListener, Preference.OnPreferenceClickListener { private static CharSequence[][] mTimezones; private long mTime; @Override public void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); addPreferencesFromResource(R.xml.settings); loadTimeZoneList(); } @Override public void onResume() { super.onResume(); loadTimeZoneList(); public void onActivityCreated(Bundle savedInstanceState) { super.onActivityCreated(savedInstanceState); // By default, do not recreate the DeskClock activity getActivity().setResult(RESULT_CANCELED); } @Override public void onResume() { super.onResume(); refresh(); } Loading Loading @@ -179,7 +184,7 @@ public final class SettingsActivity extends BaseActivity { switch (pref.getKey()) { case KEY_DATE_TIME: Intent dialogIntent = new Intent(Settings.ACTION_DATE_SETTINGS); final Intent dialogIntent = new Intent(Settings.ACTION_DATE_SETTINGS); dialogIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); startActivity(dialogIntent); return true; Loading @@ -195,20 +200,13 @@ public final class SettingsActivity extends BaseActivity { } /** * Reconstruct the timezone list. We don't want to do this unnecessary, so proceed only if * this is the initial load or the locale has changed since the last load. * Reconstruct the timezone list. */ private void loadTimeZoneList() { final Locale currentLocale = getResources().getConfiguration().locale; final Context context = getActivity(); if (mTimezones == null || Utils.getTimezoneLocale(context) != currentLocale) { mTime = System.currentTimeMillis(); mTimezones = getAllTimezones(); Utils.setTimezoneLocale(context, currentLocale); } final CharSequence[][] timezones = getAllTimezones(); final ListPreference homeTimezonePref = (ListPreference) findPreference(KEY_HOME_TZ); homeTimezonePref.setEntryValues(mTimezones[0]); homeTimezonePref.setEntries(mTimezones[1]); homeTimezonePref.setEntryValues(timezones[0]); homeTimezonePref.setEntries(timezones[1]); homeTimezonePref.setSummary(homeTimezonePref.getEntry()); homeTimezonePref.setOnPreferenceChangeListener(this); } Loading @@ -222,21 +220,24 @@ public final class SettingsActivity extends BaseActivity { * @return double array of tz ids and tz names */ public CharSequence[][] getAllTimezones() { Resources resources = this.getResources(); String[] ids = resources.getStringArray(R.array.timezone_values); String[] labels = resources.getStringArray(R.array.timezone_labels); final Resources res = getResources(); final String[] ids = res.getStringArray(R.array.timezone_values); final String[] labels = res.getStringArray(R.array.timezone_labels); int minLength = ids.length; if (ids.length != labels.length) { minLength = Math.min(minLength, labels.length); LogUtils.e("Timezone ids and labels have different length!"); } List<TimeZoneRow> timezones = new ArrayList<>(); final long currentTimeMillis = System.currentTimeMillis(); final List<TimeZoneRow> timezones = new ArrayList<>(minLength); for (int i = 0; i < minLength; i++) { timezones.add(new TimeZoneRow(ids[i], labels[i])); timezones.add(new TimeZoneRow(ids[i], labels[i], currentTimeMillis)); } Collections.sort(timezones); CharSequence[][] timeZones = new CharSequence[2][timezones.size()]; final CharSequence[][] timeZones = new CharSequence[2][timezones.size()]; int i = 0; for (TimeZoneRow row : timezones) { timeZones[0][i] = row.mId; Loading Loading @@ -313,18 +314,19 @@ public final class SettingsActivity extends BaseActivity { } } private class TimeZoneRow implements Comparable<TimeZoneRow> { private static class TimeZoneRow implements Comparable<TimeZoneRow> { private static final boolean SHOW_DAYLIGHT_SAVINGS_INDICATOR = false; public final String mId; public final String mDisplayName; public final int mOffset; public TimeZoneRow(String id, String name) { public TimeZoneRow(String id, String name, long currentTimeMillis) { final TimeZone tz = TimeZone.getTimeZone(id); final boolean useDaylightTime = tz.useDaylightTime(); mId = id; TimeZone tz = TimeZone.getTimeZone(id); boolean useDaylightTime = tz.useDaylightTime(); mOffset = tz.getOffset(mTime); mOffset = tz.getOffset(currentTimeMillis); mDisplayName = buildGmtDisplayName(name, useDaylightTime); } Loading @@ -334,8 +336,8 @@ public final class SettingsActivity extends BaseActivity { } public String buildGmtDisplayName(String displayName, boolean useDaylightTime) { int p = Math.abs(mOffset); StringBuilder name = new StringBuilder("(GMT"); final int p = Math.abs(mOffset); final StringBuilder name = new StringBuilder("(GMT"); name.append(mOffset < 0 ? '-' : '+'); name.append(p / DateUtils.HOUR_IN_MILLIS); Loading