summaryrefslogtreecommitdiffstats
path: root/src/com/android/deskclock/worldclock
diff options
context:
space:
mode:
Diffstat (limited to 'src/com/android/deskclock/worldclock')
-rw-r--r--src/com/android/deskclock/worldclock/Cities.java49
-rw-r--r--src/com/android/deskclock/worldclock/CitiesActivity.java54
-rw-r--r--src/com/android/deskclock/worldclock/WorldClockAdapter.java36
3 files changed, 70 insertions, 69 deletions
diff --git a/src/com/android/deskclock/worldclock/Cities.java b/src/com/android/deskclock/worldclock/Cities.java
index c91eaeb52..dbd017d82 100644
--- a/src/com/android/deskclock/worldclock/Cities.java
+++ b/src/com/android/deskclock/worldclock/Cities.java
@@ -28,46 +28,45 @@ public class Cities {
public static final String WORLDCLOCK_UPDATE_INTENT = "com.android.deskclock.worldclock.update";
private static final String NUMBER_OF_CITIES = "number_of_cities";
-
public static void saveCitiesToSharedPrefs(
SharedPreferences prefs, HashMap<String, CityObj> cities) {
- SharedPreferences.Editor editor = prefs.edit();
- editor.putInt(NUMBER_OF_CITIES, cities.size());
- Collection<CityObj> col = cities.values();
- Iterator<CityObj> i = col.iterator();
- int count = 0;
- while(i.hasNext()) {
- CityObj c = i.next();
- c.saveCityToSharedPrefs(editor, count);
- count ++;
- }
- editor.apply();
+ SharedPreferences.Editor editor = prefs.edit();
+ editor.putInt(NUMBER_OF_CITIES, cities.size());
+ Collection<CityObj> col = cities.values();
+ Iterator<CityObj> i = col.iterator();
+ int count = 0;
+ while (i.hasNext()) {
+ CityObj c = i.next();
+ c.saveCityToSharedPrefs(editor, count);
+ count++;
+ }
+ editor.apply();
}
public static HashMap<String, CityObj> readCitiesFromSharedPrefs(SharedPreferences prefs) {
- int size = prefs.getInt(NUMBER_OF_CITIES, -1);
- HashMap<String, CityObj> c = new HashMap<String, CityObj> ();
- if (size > 0) {
- for (int i = 0; i < size; i++) {
- CityObj o = new CityObj(prefs, i);
- if (o.mCityName != null && o.mTimeZone != null) {
- c.put(o.mCityId, o);
- }
+ int size = prefs.getInt(NUMBER_OF_CITIES, -1);
+ HashMap<String, CityObj> c = new HashMap<String, CityObj>();
+ if (size > 0) {
+ for (int i = 0; i < size; i++) {
+ CityObj o = new CityObj(prefs, i);
+ if (o.mCityName != null && o.mTimeZone != null) {
+ c.put(o.mCityId, o);
}
}
- return c;
+ }
+ return c;
}
private static void dumpCities(SharedPreferences prefs, String title) {
int size = prefs.getInt(NUMBER_OF_CITIES, -1);
- Log.d("Cities","Selected Cities List " + title);
- Log.d("Cities","Number of cities " + size);
- HashMap<String, CityObj> c = new HashMap<String, CityObj> ();
+ Log.d("Cities", "Selected Cities List " + title);
+ Log.d("Cities", "Number of cities " + size);
+ HashMap<String, CityObj> c = new HashMap<String, CityObj>();
if (size > 0) {
for (int i = 0; i < size; i++) {
CityObj o = new CityObj(prefs, i);
if (o.mCityName != null && o.mTimeZone != null) {
- Log.d("Cities","Name " + o.mCityName + " tz " + o.mTimeZone);
+ Log.d("Cities", "Name " + o.mCityName + " tz " + o.mTimeZone);
}
}
}
diff --git a/src/com/android/deskclock/worldclock/CitiesActivity.java b/src/com/android/deskclock/worldclock/CitiesActivity.java
index ffabc76fb..02423b5a1 100644
--- a/src/com/android/deskclock/worldclock/CitiesActivity.java
+++ b/src/com/android/deskclock/worldclock/CitiesActivity.java
@@ -21,7 +21,6 @@ import android.app.Activity;
import android.content.ActivityNotFoundException;
import android.content.Context;
import android.content.Intent;
-import android.content.res.Resources;
import android.os.Bundle;
import android.preference.PreferenceManager;
import android.text.format.DateFormat;
@@ -40,16 +39,13 @@ import android.widget.TextView;
import com.android.deskclock.Alarms;
import com.android.deskclock.DeskClock;
-import com.android.deskclock.Log;
import com.android.deskclock.R;
import com.android.deskclock.SettingsActivity;
import com.android.deskclock.Utils;
import java.text.Collator;
import java.util.ArrayList;
-import java.util.Arrays;
import java.util.Calendar;
-import java.util.Comparator;
import java.util.HashMap;
import java.util.TimeZone;
@@ -68,8 +64,6 @@ public class CitiesActivity extends Activity implements OnCheckedChangeListener,
private CityAdapter mAdapter;
private HashMap<String, CityObj> mUserSelectedCities;
private Calendar mCalendar;
- private final Collator mCollator = Collator.getInstance();
-
/***
* Adapter for a list of cities with the respected time zone.
@@ -98,12 +92,12 @@ public class CitiesActivity extends Activity implements OnCheckedChangeListener,
@Override
public int getCount() {
- return mAllTheCitiesList.length;
+ return (mAllTheCitiesList != null) ? mAllTheCitiesList.length : 0;
}
@Override
public Object getItem(int p) {
- if (p >=0 && p < mAllTheCitiesList.length) {
+ if (mAllTheCitiesList != null && p >=0 && p < mAllTheCitiesList.length) {
return mAllTheCitiesList [p];
}
return null;
@@ -116,12 +110,12 @@ public class CitiesActivity extends Activity implements OnCheckedChangeListener,
@Override
public boolean isEnabled(int p) {
- return ((CityObj)mAllTheCitiesList[p]).mCityId != null;
+ return mAllTheCitiesList != null && ((CityObj)mAllTheCitiesList[p]).mCityId != null;
}
@Override
public View getView(int position, View view, ViewGroup parent) {
- if (position < 0 || position >= mAllTheCitiesList.length) {
+ if (mAllTheCitiesList == null || position < 0 || position >= mAllTheCitiesList.length) {
return null;
}
CityObj c = (CityObj)mAllTheCitiesList [position];
@@ -157,27 +151,10 @@ public class CitiesActivity extends Activity implements OnCheckedChangeListener,
}
private void loadCitiesDataBase(Context c) {
- Resources r = c.getResources();
- // Read strings array of name,timezone, id
- // make sure the list are the same length
- String [] cities = r.getStringArray(R.array.cities_names);
- String [] timezones = r.getStringArray(R.array.cities_tz);
- String [] ids = r.getStringArray(R.array.cities_id);
- if (cities.length != timezones.length || ids.length != cities.length) {
- Log.wtf("City lists sizes are not the same, cannot use the data");
+ CityObj[] tempList = Utils.loadCitiesDataBase(c);
+ if (tempList == null) {
return;
- }
- CityObj[] tempList = new CityObj [cities.length];
- for (int i = 0; i < cities.length; i++) {
- tempList[i] = new CityObj(cities[i], timezones[i], ids[i]);
- }
- // Sort alphabetically
- Arrays.sort(tempList, new Comparator<CityObj> () {
- @Override
- public int compare(CityObj c1, CityObj c2) {
- return mCollator.compare(c1.mCityName, c2.mCityName);
- }
- });
+ }
//Create section indexer and add headers to the cities list
String val = null;
ArrayList<String> sections = new ArrayList<String> ();
@@ -207,18 +184,21 @@ public class CitiesActivity extends Activity implements OnCheckedChangeListener,
@Override
public int getPositionForSection(int section) {
- return (Integer) mSectionPositions[section];
+ return (mSectionPositions != null) ? (Integer) mSectionPositions[section] : 0;
}
@Override
public int getSectionForPosition(int p) {
- for (int i = 0; i < mSectionPositions.length - 1; i++) {
- if (p >= (Integer)mSectionPositions[i] && p < (Integer)mSectionPositions[i + 1]) {
- return i;
+ if (mSectionPositions != null) {
+ for (int i = 0; i < mSectionPositions.length - 1; i++) {
+ if (p >= (Integer) mSectionPositions[i]
+ && p < (Integer) mSectionPositions[i + 1]) {
+ return i;
+ }
+ }
+ if (p >= (Integer)mSectionPositions[mSectionPositions.length - 1]) {
+ return mSectionPositions.length - 1;
}
- }
- if (p >= (Integer)mSectionPositions[mSectionPositions.length - 1]) {
- return mSectionPositions.length - 1;
}
return 0;
}
diff --git a/src/com/android/deskclock/worldclock/WorldClockAdapter.java b/src/com/android/deskclock/worldclock/WorldClockAdapter.java
index c76407d60..ac94d481c 100644
--- a/src/com/android/deskclock/worldclock/WorldClockAdapter.java
+++ b/src/com/android/deskclock/worldclock/WorldClockAdapter.java
@@ -25,30 +25,34 @@ import android.view.ViewGroup;
import android.widget.BaseAdapter;
import android.widget.TextView;
+import com.android.deskclock.AnalogClock;
+import com.android.deskclock.DigitalClock;
+import com.android.deskclock.R;
+import com.android.deskclock.SettingsActivity;
+import com.android.deskclock.Utils;
+
import java.text.Collator;
import java.util.Arrays;
import java.util.Calendar;
import java.util.Comparator;
import java.util.Date;
+import java.util.HashMap;
import java.util.Locale;
import java.util.TimeZone;
-import com.android.deskclock.AnalogClock;
-import com.android.deskclock.DigitalClock;
-import com.android.deskclock.R;
-import com.android.deskclock.SettingsActivity;
-
public class WorldClockAdapter extends BaseAdapter {
protected Object [] mCitiesList;
private final LayoutInflater mInflater;
private final Context mContext;
private String mClockStyle;
private final Collator mCollator = Collator.getInstance();
+ protected HashMap<String, CityObj> mCitiesDb = new HashMap<String, CityObj>();
public WorldClockAdapter(Context context) {
super();
mContext = context;
loadData(context);
+ loadCitiesDb(context);
mInflater = LayoutInflater.from(context);
}
@@ -66,6 +70,19 @@ public class WorldClockAdapter extends BaseAdapter {
mCitiesList = addHomeCity();
}
+ public void loadCitiesDb(Context context) {
+ mCitiesDb.clear();
+ // Read the cities DB so that the names and timezones will be taken from the DB
+ // and not from the selected list so that change of locale or changes in the DB will
+ // be reflected.
+ CityObj[] cities = Utils.loadCitiesDataBase(context);
+ if (cities != null) {
+ for (int i = 0; i < cities.length; i ++) {
+ mCitiesDb.put(cities[i].mCityId, cities [i]);
+ }
+ }
+ }
+
/***
* Adds the home city as the first item of the adapter if the feature is on and the device time
* zone is different from the home time zone that was set by the user.
@@ -220,11 +237,16 @@ public class WorldClockAdapter extends BaseAdapter {
aclock.setVisibility(View.GONE);
dclock.setTimeZone(cityObj.mTimeZone);
}
- name.setText(cityObj.mCityName);
+ CityObj cityInDb = mCitiesDb.get(cityObj.mCityId);
+ // Home city or city not in DB , use data from the save selected cities list
+ name.setText(Utils.getCityName(cityObj, cityInDb));
+
final Calendar now = Calendar.getInstance();
now.setTimeZone(TimeZone.getDefault());
int myDayOfWeek = now.get(Calendar.DAY_OF_WEEK);
- now.setTimeZone(TimeZone.getTimeZone(cityObj.mTimeZone));
+ // Get timezone from cities DB if available
+ String cityTZ = (cityInDb != null) ? cityInDb.mTimeZone : cityObj.mTimeZone;
+ now.setTimeZone(TimeZone.getTimeZone(cityTZ));
int cityDayOfWeek = now.get(Calendar.DAY_OF_WEEK);
if (myDayOfWeek != cityDayOfWeek) {
dayOfWeek.setText(mContext.getString(R.string.world_day_of_week_label,