diff options
Diffstat (limited to 'src/com/android/deskclock/worldclock')
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, |