Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit eee5b1f9 authored by Isaac Katzenelson's avatar Isaac Katzenelson
Browse files

Read cities names for DB and not from list

Bug: 7413861

The list of user selected cities in world clock was using the name from the usr's list and
not from the DB. When a change of locale is done on the device, the cities name were not changed.
Changed the WorldClock adapter to use the DB name and timezone if available.

Change-Id: I11b44c61c792ce0821f8a8e34f9c9086d6bfb66f
parent ca81a5ca
Loading
Loading
Loading
Loading
+22 −2
Original line number Diff line number Diff line
@@ -50,6 +50,7 @@ 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;

@@ -242,12 +243,22 @@ public class ClockFragment extends DeskClockFragment implements OnSharedPreferen
        LayoutInflater mInflater;
        @SuppressWarnings("hiding")
        Context mContext;
        HashMap<String, CityObj> mCitiesDb = new HashMap<String, CityObj>();

        public WorldClockAdapter(Context context) {
            super();
            mContext = context;
            loadData(context);
            mInflater = LayoutInflater.from(context);
            // 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]);
                }
            }
        }

        public void reloadData(Context context) {
@@ -415,11 +426,20 @@ public class ClockFragment extends DeskClockFragment implements OnSharedPreferen
                aclock.setVisibility(View.GONE);
                dclock.setTimeZone(cityObj.mTimeZone);
            }
            CityObj cityInDb = mCitiesDb.get(cityObj.mCityId);

            // Home city or city not in DB , use data from the save selected cities list
            if (cityObj.mCityId == null || cityInDb == null) {
                name.setText(cityObj.mCityName);
            } else {
                name.setText(cityInDb.mCityName);
            }
            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(getString(R.string.world_day_of_week_label, now.getDisplayName(
+31 −0
Original line number Diff line number Diff line
@@ -25,6 +25,7 @@ import android.content.Intent;
import android.content.SharedPreferences;
import android.content.pm.PackageInfo;
import android.content.pm.PackageManager.NameNotFoundException;
import android.content.res.Resources;
import android.graphics.Color;
import android.graphics.Paint;
import android.graphics.PorterDuff;
@@ -44,8 +45,12 @@ import android.widget.TextView;

import com.android.deskclock.stopwatch.Stopwatches;
import com.android.deskclock.timer.Timers;
import com.android.deskclock.worldclock.CityObj;

import java.text.Collator;
import java.util.Arrays;
import java.util.Calendar;
import java.util.Comparator;
import java.util.Locale;


@@ -382,4 +387,30 @@ public class Utils {
        }
    }

    public static CityObj[] loadCitiesDataBase(Context c) {
        final Collator collator = Collator.getInstance();
        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");
            return null;
         }
         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) {
                Comparator<CityObj> mCollator;
                return collator.compare(c1.mCityName, c2.mCityName);
            }
        });
        return tempList;
    }
}
+24 −26
Original line number Diff line number Diff line
@@ -25,10 +25,8 @@ import java.util.Iterator;

public class Cities {


    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();
+1 −27
Original line number Diff line number Diff line
@@ -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.
@@ -157,27 +151,7 @@ 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");
                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);
                }
            });
            CityObj[] tempList = Utils.loadCitiesDataBase(c);
            //Create section indexer and add headers to the cities list
            String val = null;
            ArrayList<String> sections = new ArrayList<String> ();