From 550015e47656dad997973c89a30cffe56db9cdbd Mon Sep 17 00:00:00 2001 From: Tony Mantler Date: Thu, 28 May 2015 14:48:29 -0700 Subject: Move ZoneGetter into SettingsLib Change-Id: Ia998ae0bd7fc4c974e03df7c8fc380d98a3e71de --- src/com/android/settings/ZonePicker.java | 108 ++++--------------------------- 1 file changed, 11 insertions(+), 97 deletions(-) (limited to 'src/com/android/settings/ZonePicker.java') diff --git a/src/com/android/settings/ZonePicker.java b/src/com/android/settings/ZonePicker.java index 72e4a03da..a3c743539 100644 --- a/src/com/android/settings/ZonePicker.java +++ b/src/com/android/settings/ZonePicker.java @@ -20,9 +20,8 @@ import android.app.Activity; import android.app.AlarmManager; import android.app.ListFragment; import android.content.Context; -import android.content.res.XmlResourceParser; import android.os.Bundle; -import android.util.Log; +import android.support.annotation.NonNull; import android.view.LayoutInflater; import android.view.Menu; import android.view.MenuInflater; @@ -32,21 +31,14 @@ import android.view.ViewGroup; import android.widget.ListView; import android.widget.SimpleAdapter; -import org.xmlpull.v1.XmlPullParserException; +import com.android.settingslib.datetime.ZoneGetter; -import java.text.SimpleDateFormat; -import java.util.ArrayList; -import java.util.Calendar; import java.util.Collections; import java.util.Comparator; -import java.util.Date; import java.util.HashMap; -import java.util.HashSet; import java.util.List; -import java.util.Locale; import java.util.Map; import java.util.TimeZone; -import libcore.icu.TimeZoneNames; /** * The class displaying a list of time zones that match a filter string @@ -57,19 +49,11 @@ import libcore.icu.TimeZoneNames; public class ZonePicker extends ListFragment { private static final String TAG = "ZonePicker"; - public static interface ZoneSelectionListener { + public interface ZoneSelectionListener { // You can add any argument if you really need it... - public void onZoneSelected(TimeZone tz); + void onZoneSelected(TimeZone tz); } - private static final String KEY_ID = "id"; // value: String - private static final String KEY_DISPLAYNAME = "name"; // value: String - private static final String KEY_GMT = "gmt"; // value: String - private static final String KEY_OFFSET = "offset"; // value: int (Integer) - private static final String XMLTAG_TIMEZONE = "timezone"; - - private static final int HOURS_1 = 60 * 60000; - private static final int MENU_TIMEZONE = Menu.FIRST+1; private static final int MENU_ALPHABETICAL = Menu.FIRST; @@ -98,12 +82,12 @@ public class ZonePicker extends ListFragment { */ public static SimpleAdapter constructTimezoneAdapter(Context context, boolean sortedByName, int layoutId) { - final String[] from = new String[] {KEY_DISPLAYNAME, KEY_GMT}; + final String[] from = new String[] {ZoneGetter.KEY_DISPLAYNAME, ZoneGetter.KEY_GMT}; final int[] to = new int[] {android.R.id.text1, android.R.id.text2}; - final String sortKey = (sortedByName ? KEY_DISPLAYNAME : KEY_OFFSET); + final String sortKey = (sortedByName ? ZoneGetter.KEY_DISPLAYNAME : ZoneGetter.KEY_OFFSET); final MyComparator comparator = new MyComparator(sortKey); - ZoneGetter zoneGetter = new ZoneGetter(); + final ZoneGetter zoneGetter = new ZoneGetter(); final List> sortedList = zoneGetter.getZones(context); Collections.sort(sortedList, comparator); final SimpleAdapter adapter = new SimpleAdapter(context, @@ -131,7 +115,7 @@ public class ZonePicker extends ListFragment { for (int i = 0; i < listSize; i++) { // Using HashMap induces unnecessary warning. final HashMap map = (HashMap)adapter.getItem(i); - final String id = (String)map.get(KEY_ID); + final String id = (String)map.get(ZoneGetter.KEY_ID); if (defaultId.equals(id)) { // If current timezone is in this list, move focus to it return i; @@ -146,7 +130,7 @@ public class ZonePicker extends ListFragment { * @return TimeZone object corresponding to the item. */ public static TimeZone obtainTimeZoneFromItem(Object item) { - return TimeZone.getTimeZone((String)((Map)item).get(KEY_ID)); + return TimeZone.getTimeZone((String)((Map)item).get(ZoneGetter.KEY_ID)); } @Override @@ -163,7 +147,7 @@ public class ZonePicker extends ListFragment { } @Override - public View onCreateView(LayoutInflater inflater, ViewGroup container, + public View onCreateView(@NonNull LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) { final View view = super.onCreateView(inflater, container, savedInstanceState); final ListView list = (ListView) view.findViewById(android.R.id.list); @@ -223,82 +207,12 @@ public class ZonePicker extends ListFragment { } } - static class ZoneGetter { - private final List> mZones = - new ArrayList>(); - private final HashSet mLocalZones = new HashSet(); - private final Date mNow = Calendar.getInstance().getTime(); - private final SimpleDateFormat mZoneNameFormatter = new SimpleDateFormat("zzzz"); - - private List> getZones(Context context) { - for (String olsonId : TimeZoneNames.forLocale(Locale.getDefault())) { - mLocalZones.add(olsonId); - } - try { - XmlResourceParser xrp = context.getResources().getXml(R.xml.timezones); - while (xrp.next() != XmlResourceParser.START_TAG) { - continue; - } - xrp.next(); - while (xrp.getEventType() != XmlResourceParser.END_TAG) { - while (xrp.getEventType() != XmlResourceParser.START_TAG) { - if (xrp.getEventType() == XmlResourceParser.END_DOCUMENT) { - return mZones; - } - xrp.next(); - } - if (xrp.getName().equals(XMLTAG_TIMEZONE)) { - String olsonId = xrp.getAttributeValue(0); - addTimeZone(olsonId); - } - while (xrp.getEventType() != XmlResourceParser.END_TAG) { - xrp.next(); - } - xrp.next(); - } - xrp.close(); - } catch (XmlPullParserException xppe) { - Log.e(TAG, "Ill-formatted timezones.xml file"); - } catch (java.io.IOException ioe) { - Log.e(TAG, "Unable to read timezones.xml file"); - } - return mZones; - } - - private void addTimeZone(String olsonId) { - // We always need the "GMT-07:00" string. - final TimeZone tz = TimeZone.getTimeZone(olsonId); - - // For the display name, we treat time zones within the country differently - // from other countries' time zones. So in en_US you'd get "Pacific Daylight Time" - // but in de_DE you'd get "Los Angeles" for the same time zone. - String displayName; - if (mLocalZones.contains(olsonId)) { - // Within a country, we just use the local name for the time zone. - mZoneNameFormatter.setTimeZone(tz); - displayName = mZoneNameFormatter.format(mNow); - } else { - // For other countries' time zones, we use the exemplar location. - final String localeName = Locale.getDefault().toString(); - displayName = TimeZoneNames.getExemplarLocation(localeName, olsonId); - } - - final HashMap map = new HashMap(); - map.put(KEY_ID, olsonId); - map.put(KEY_DISPLAYNAME, displayName); - map.put(KEY_GMT, DateTimeSettings.getTimeZoneText(tz, false)); - map.put(KEY_OFFSET, tz.getOffset(mNow.getTime())); - - mZones.add(map); - } - } - @Override public void onListItemClick(ListView listView, View v, int position, long id) { // Ignore extra clicks if (!isResumed()) return; final Map map = (Map)listView.getItemAtPosition(position); - final String tzId = (String) map.get(KEY_ID); + final String tzId = (String) map.get(ZoneGetter.KEY_ID); // Update the system timezone value final Activity activity = getActivity(); -- cgit v1.2.3