summaryrefslogtreecommitdiffstats
path: root/src/com/android/deskclock/SettingsActivity.java
diff options
context:
space:
mode:
Diffstat (limited to 'src/com/android/deskclock/SettingsActivity.java')
-rw-r--r--src/com/android/deskclock/SettingsActivity.java108
1 files changed, 72 insertions, 36 deletions
diff --git a/src/com/android/deskclock/SettingsActivity.java b/src/com/android/deskclock/SettingsActivity.java
index bf2aa7ccb..11ee6bc4f 100644
--- a/src/com/android/deskclock/SettingsActivity.java
+++ b/src/com/android/deskclock/SettingsActivity.java
@@ -17,6 +17,7 @@
package com.android.deskclock;
import android.app.ActionBar;
+import android.content.Intent;
import android.content.res.Resources;
import android.media.AudioManager;
import android.os.Bundle;
@@ -30,6 +31,11 @@ import android.text.format.DateUtils;
import android.view.Menu;
import android.view.MenuItem;
+import com.android.deskclock.worldclock.Cities;
+
+import java.util.ArrayList;
+import java.util.Collections;
+import java.util.List;
import java.util.TimeZone;
/**
@@ -66,10 +72,11 @@ public class SettingsActivity extends PreferenceActivity
static final String KEY_VOLUME_BUTTONS =
"volume_button_setting";
+ public static final String DEFAULT_VOLUME_BEHAVIOR = "0";
+
private static CharSequence[][] mTimezones;
private long mTime;
- private static final boolean SHOW_DAYLIGHT_SAVINGS_INDICATOR = false;
@Override
protected void onCreate(Bundle savedInstanceState) {
@@ -164,10 +171,12 @@ public class SettingsActivity extends PreferenceActivity
final ListPreference listPref = (ListPreference) pref;
final int idx = listPref.findIndexOfValue((String) newValue);
listPref.setSummary(listPref.getEntries()[idx]);
+ notifyHomeTimeZoneChanged();
} else if (KEY_AUTO_HOME_CLOCK.equals(pref.getKey())) {
boolean state =((CheckBoxPreference) pref).isChecked();
Preference homeTimeZone = findPreference(KEY_HOME_TZ);
homeTimeZone.setEnabled(!state);
+ notifyHomeTimeZoneChanged();
} else if (KEY_VOLUME_BUTTONS.equals(pref.getKey())) {
final ListPreference listPref = (ListPreference) pref;
final int idx = listPref.findIndexOfValue((String) newValue);
@@ -204,6 +213,12 @@ public class SettingsActivity extends PreferenceActivity
getResources().getStringArray(R.array.action_summary_entries)[i]));
}
+ private void notifyHomeTimeZoneChanged() {
+ Intent i = new Intent(Cities.WORLDCLOCK_UPDATE_INTENT);
+ sendBroadcast(i);
+ }
+
+
private void refresh() {
ListPreference listPref = (ListPreference) findPreference(KEY_AUTO_SILENCE);
String delay = listPref.getValue();
@@ -240,6 +255,52 @@ public class SettingsActivity extends PreferenceActivity
SnoozeLengthDialog snoozePref = (SnoozeLengthDialog) findPreference(KEY_ALARM_SNOOZE);
snoozePref.setSummary();
}
+
+ private 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) {
+ mId = id;
+ TimeZone tz = TimeZone.getTimeZone(id);
+ boolean useDaylightTime = tz.useDaylightTime();
+ mOffset = tz.getOffset(mTime);
+ mDisplayName = buildGmtDisplayName(id, name, useDaylightTime);
+ }
+
+ @Override
+ public int compareTo(TimeZoneRow another) {
+ return mOffset - another.mOffset;
+ }
+
+ public String buildGmtDisplayName(String id, String displayName, boolean useDaylightTime) {
+ int p = Math.abs(mOffset);
+ StringBuilder name = new StringBuilder("(GMT");
+ name.append(mOffset < 0 ? '-' : '+');
+
+ name.append(p / DateUtils.HOUR_IN_MILLIS);
+ name.append(':');
+
+ int min = p / 60000;
+ min %= 60;
+
+ if (min < 10) {
+ name.append('0');
+ }
+ name.append(min);
+ name.append(") ");
+ name.append(displayName);
+ if (useDaylightTime && SHOW_DAYLIGHT_SAVINGS_INDICATOR) {
+ name.append(" \u2600"); // Sun symbol
+ }
+ return name.toString();
+ }
+ }
+
+
/**
* Returns an array of ids/time zones. This returns a double indexed array
* of ids and time zones for Calendar. It is an inefficient method and
@@ -255,44 +316,19 @@ public class SettingsActivity extends PreferenceActivity
if (ids.length != labels.length) {
Log.wtf("Timezone ids and labels have different length!");
}
- CharSequence[][] timeZones = new CharSequence[2][ids.length];
+ List<TimeZoneRow> timezones = new ArrayList<TimeZoneRow>();
for (int i = 0; i < ids.length; i++) {
- timeZones[0][i] = ids[i];
- timeZones[1][i] = buildGmtDisplayName(ids[i], labels[i]);
- }
- return timeZones;
- }
-
- public String buildGmtDisplayName(String id, String displayName) {
- TimeZone tz = TimeZone.getTimeZone(id);
- boolean mUseDaylightTime = tz.useDaylightTime();
- int mOffset = tz.getOffset(mTime);
- int p = Math.abs(mOffset);
- StringBuilder name = new StringBuilder();
- name.append("GMT");
-
- if (mOffset < 0) {
- name.append('-');
- } else {
- name.append('+');
+ timezones.add(new TimeZoneRow(ids[i], labels[i]));
}
+ Collections.sort(timezones);
- name.append(p / (DateUtils.HOUR_IN_MILLIS));
- name.append(':');
-
- int min = p / 60000;
- min %= 60;
-
- if (min < 10) {
- name.append('0');
- }
- name.append(min);
- name.insert(0, "(");
- name.append(") ");
- name.append(displayName);
- if (mUseDaylightTime && SHOW_DAYLIGHT_SAVINGS_INDICATOR) {
- name.append(" \u2600"); // Sun symbol
+ CharSequence[][] timeZones = new CharSequence[2][timezones.size()];
+ int i = 0;
+ for (TimeZoneRow row : timezones) {
+ timeZones[0][i] = row.mId;
+ timeZones[1][i++] = row.mDisplayName;
}
- return name.toString();
+ return timeZones;
}
+
}