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

Commit 974343a4 authored by James Kung's avatar James Kung
Browse files

Integrating time zone picker into settings

Change-Id: Ie7099dc5ef1e4e21cf231eb7a452d882b6056cb3
parent 7ec9d761
Loading
Loading
Loading
Loading
+0 −181
Original line number Diff line number Diff line
@@ -136,188 +136,7 @@
        <item>"2"</item>
    </string-array>

    <!-- Choices for timezones, must be kept in sync with timezone_values. This
         list was taken from packages/apps/Settings/res/xml/timezones.xml
         sed -e 's/^.*">/        <item>"/;s,</.*$,"</item>,' packages/apps/Settings/res/xml/timezones.xml
         [CHAR LIMIT=25] -->
    <string-array name="timezone_labels">
        <item>"Marshall Islands"</item>
        <item>"Midway Island"</item>
        <item>"Hawaii"</item>
        <item>"Alaska"</item>
        <item>"Pacific Time"</item>
        <item>"Tijuana"</item>
        <item>"Arizona"</item>
        <item>"Chihuahua"</item>
        <item>"Mountain Time"</item>
        <item>"Central America"</item>
        <item>"Central Time"</item>
        <item>"Mexico City"</item>
        <item>"Saskatchewan"</item>
        <item>"Bogota"</item>
        <item>"Eastern Time"</item>
        <item>"Venezuela"</item>
        <item>"Atlantic Time (Barbados)"</item>
        <item>"Atlantic Time (Canada)"</item>
        <item>"Manaus"</item>
        <item>"Santiago"</item>
        <item>"Newfoundland"</item>
        <item>"Brasilia Time (Recife)"</item>
        <item>"Brasilia Time (Sao Paulo)"</item>
        <item>"Buenos Aires"</item>
        <item>"Greenland"</item>
        <item>"Montevideo"</item>
        <item>"Mid-Atlantic"</item>
        <item>"Azores"</item>
        <item>"Cape Verde Islands"</item>
        <item>"Casablanca"</item>
        <item>"London, Dublin"</item>
        <item>"Amsterdam, Berlin"</item>
        <item>"Belgrade"</item>
        <item>"Brussels"</item>
        <item>"Sarajevo"</item>
        <item>"Windhoek"</item>
        <item>"W. Africa Time"</item>
        <item>"Amman, Jordan"</item>
        <item>"Athens, Istanbul"</item>
        <item>"Beirut, Lebanon"</item>
        <item>"Cairo"</item>
        <item>"Helsinki"</item>
        <item>"Jerusalem"</item>
        <item>"Minsk"</item>
        <item>"Harare"</item>
        <item>"Baghdad"</item>
        <item>"Moscow"</item>
        <item>"Kuwait"</item>
        <item>"Nairobi"</item>
        <item>"Tehran"</item>
        <item>"Baku"</item>
        <item>"Tbilisi"</item>
        <item>"Yerevan"</item>
        <item>"Dubai"</item>
        <item>"Kabul"</item>
        <item>"Islamabad, Karachi"</item>
        <item>"Ural'sk"</item>
        <item>"Yekaterinburg"</item>
        <item>"Kolkata"</item>
        <item>"Sri Lanka"</item>
        <item>"Kathmandu"</item>
        <item>"Astana"</item>
        <item>"Yangon"</item>
        <item>"Krasnoyarsk"</item>
        <item>"Bangkok"</item>
        <item>"Beijing"</item>
        <item>"Hong Kong"</item>
        <item>"Irkutsk"</item>
        <item>"Kuala Lumpur"</item>
        <item>"Perth"</item>
        <item>"Taipei"</item>
        <item>"Seoul"</item>
        <item>"Tokyo, Osaka"</item>
        <item>"Yakutsk"</item>
        <item>"Adelaide"</item>
        <item>"Darwin"</item>
        <item>"Brisbane"</item>
        <item>"Hobart"</item>
        <item>"Sydney, Canberra"</item>
        <item>"Vladivostok"</item>
        <item>"Guam"</item>
        <item>"Magadan"</item>
        <item>"Auckland"</item>
        <item>"Fiji"</item>
        <item>"Tonga"</item>
    </string-array>

    <!-- Choices for timezones, must be kept in sync with timezone_values. This
         list was taken from packages/apps/Settings/res/xml/timezones.xml
         sed -e 's/^.*=/        <item>/;s,">.*$,"</item>,' packages/apps/Settings/res/xml/timezones.xml -->
    <string-array name="timezone_values" translatable="false">
        <item>"Pacific/Majuro"</item>
        <item>"Pacific/Midway"</item>
        <item>"Pacific/Honolulu"</item>
        <item>"America/Anchorage"</item>
        <item>"America/Los_Angeles"</item>
        <item>"America/Tijuana"</item>
        <item>"America/Phoenix"</item>
        <item>"America/Chihuahua"</item>
        <item>"America/Denver"</item>
        <item>"America/Costa_Rica"</item>
        <item>"America/Chicago"</item>
        <item>"America/Mexico_City"</item>
        <item>"America/Regina"</item>
        <item>"America/Bogota"</item>
        <item>"America/New_York"</item>
        <item>"America/Caracas"</item>
        <item>"America/Barbados"</item>
        <item>"America/Halifax"</item>
        <item>"America/Manaus"</item>
        <item>"America/Santiago"</item>
        <item>"America/St_Johns"</item>
        <item>"America/Recife"</item>
        <item>"America/Sao_Paulo"</item>
        <item>"America/Argentina/Buenos_Aires"</item>
        <item>"America/Godthab"</item>
        <item>"America/Montevideo"</item>
        <item>"Atlantic/South_Georgia"</item>
        <item>"Atlantic/Azores"</item>
        <item>"Atlantic/Cape_Verde"</item>
        <item>"Africa/Casablanca"</item>
        <item>"Europe/London"</item>
        <item>"Europe/Amsterdam"</item>
        <item>"Europe/Belgrade"</item>
        <item>"Europe/Brussels"</item>
        <item>"Europe/Sarajevo"</item>
        <item>"Africa/Windhoek"</item>
        <item>"Africa/Brazzaville"</item>
        <item>"Asia/Amman"</item>
        <item>"Europe/Athens"</item>
        <item>"Asia/Beirut"</item>
        <item>"Africa/Cairo"</item>
        <item>"Europe/Helsinki"</item>
        <item>"Asia/Jerusalem"</item>
        <item>"Europe/Minsk"</item>
        <item>"Africa/Harare"</item>
        <item>"Asia/Baghdad"</item>
        <item>"Europe/Moscow"</item>
        <item>"Asia/Kuwait"</item>
        <item>"Africa/Nairobi"</item>
        <item>"Asia/Tehran"</item>
        <item>"Asia/Baku"</item>
        <item>"Asia/Tbilisi"</item>
        <item>"Asia/Yerevan"</item>
        <item>"Asia/Dubai"</item>
        <item>"Asia/Kabul"</item>
        <item>"Asia/Karachi"</item>
        <item>"Asia/Oral"</item>
        <item>"Asia/Yekaterinburg"</item>
        <item>"Asia/Calcutta"</item>
        <item>"Asia/Colombo"</item>
        <item>"Asia/Katmandu"</item>
        <item>"Asia/Almaty"</item>
        <item>"Asia/Rangoon"</item>
        <item>"Asia/Krasnoyarsk"</item>
        <item>"Asia/Bangkok"</item>
        <item>"Asia/Shanghai"</item>
        <item>"Asia/Hong_Kong"</item>
        <item>"Asia/Irkutsk"</item>
        <item>"Asia/Kuala_Lumpur"</item>
        <item>"Australia/Perth"</item>
        <item>"Asia/Taipei"</item>
        <item>"Asia/Seoul"</item>
        <item>"Asia/Tokyo"</item>
        <item>"Asia/Yakutsk"</item>
        <item>"Australia/Adelaide"</item>
        <item>"Australia/Darwin"</item>
        <item>"Australia/Brisbane"</item>
        <item>"Australia/Hobart"</item>
        <item>"Australia/Sydney"</item>
        <item>"Asia/Vladivostok"</item>
        <item>"Pacific/Guam"</item>
        <item>"Asia/Magadan"</item>
        <item>"Pacific/Auckland"</item>
        <item>"Pacific/Fiji"</item>
        <item>"Pacific/Tongatapu"</item>
    </string-array>

    <string-array name="availability">
        <item>Busy</item>
+2 −5
Original line number Diff line number Diff line
@@ -36,14 +36,11 @@
            android:defaultValue="false"
            android:title="@string/preferences_use_home_tz_title"
            android:summary="@string/preferences_use_home_tz_descrip" />
        <ListPreference
        <Preference
            android:key="preferences_home_tz"
            android:dependency="preferences_home_tz_enabled"
            android:defaultValue="@string/preferences_home_tz_default"
            android:title="@string/preferences_home_tz_title"
            android:entries="@array/timezone_labels"
            android:entryValues="@array/timezone_values"
            android:dialogTitle="@string/preferences_home_tz_title" />
            android:title="@string/preferences_home_tz_title" />
        <PreferenceScreen
            android:key="preferences_clear_search_history"
            android:title="@string/preferences_clear_search_history_title"
+58 −24
Original line number Diff line number Diff line
@@ -17,6 +17,7 @@
package com.android.calendar;

import android.app.Activity;
import android.app.FragmentManager;
import android.app.backup.BackupManager;
import android.content.Context;
import android.content.Intent;
@@ -31,6 +32,7 @@ import android.preference.CheckBoxPreference;
import android.preference.ListPreference;
import android.preference.Preference;
import android.preference.Preference.OnPreferenceChangeListener;
import android.preference.Preference.OnPreferenceClickListener;
import android.preference.PreferenceCategory;
import android.preference.PreferenceFragment;
import android.preference.PreferenceManager;
@@ -43,13 +45,19 @@ import android.text.TextUtils;
import android.widget.Toast;

import com.android.calendar.alerts.AlertReceiver;
import com.android.timezonepicker.TimeZoneInfo;
import com.android.timezonepicker.TimeZonePickerDialog;
import com.android.timezonepicker.TimeZonePickerDialog.OnTimeZoneSetListener;
import com.android.timezonepicker.TimeZonePickerUtils;

public class GeneralPreferences extends PreferenceFragment implements
        OnSharedPreferenceChangeListener, OnPreferenceChangeListener {
        OnSharedPreferenceChangeListener, OnPreferenceChangeListener, OnTimeZoneSetListener {
    // The name of the shared preferences file. This name must be maintained for historical
    // reasons, as it's what PreferenceManager assigned the first time the file was created.
    static final String SHARED_PREFS_NAME = "com.android.calendar_preferences";

    private static final String FRAG_TAG_TIME_ZONE_PICKER = "TimeZonePicker";

    // Preference keys
    public static final String KEY_HIDE_DECLINED = "preferences_hide_declined";
    public static final String KEY_WEEK_START_DAY = "preferences_week_start_day";
@@ -109,12 +117,10 @@ public class GeneralPreferences extends PreferenceFragment implements
    CheckBoxPreference mPopup;
    CheckBoxPreference mUseHomeTZ;
    CheckBoxPreference mHideDeclined;
    ListPreference mHomeTZ;
    Preference mHomeTZ;
    ListPreference mWeekStart;
    ListPreference mDefaultReminder;

    private static CharSequence[][] mTimezones;

    /** Return a properly configured SharedPreferences instance */
    public static SharedPreferences getSharedPreferences(Context context) {
        return context.getSharedPreferences(SHARED_PREFS_NAME, Context.MODE_PRIVATE);
@@ -163,29 +169,56 @@ public class GeneralPreferences extends PreferenceFragment implements
        mHideDeclined = (CheckBoxPreference) preferenceScreen.findPreference(KEY_HIDE_DECLINED);
        mWeekStart = (ListPreference) preferenceScreen.findPreference(KEY_WEEK_START_DAY);
        mDefaultReminder = (ListPreference) preferenceScreen.findPreference(KEY_DEFAULT_REMINDER);
        mHomeTZ = (ListPreference) preferenceScreen.findPreference(KEY_HOME_TZ);
        String tz = mHomeTZ.getValue();

        mHomeTZ = preferenceScreen.findPreference(KEY_HOME_TZ);
        mWeekStart.setSummary(mWeekStart.getEntry());
        mDefaultReminder.setSummary(mDefaultReminder.getEntry());

        if (mTimezones == null) {
            mTimezones = (new TimezoneAdapter(activity, tz, System.currentTimeMillis()))
                    .getAllTimezones();
        String timezone = Utils.getTimeZone(activity, null);
        mHomeTZ.setOnPreferenceClickListener(new OnPreferenceClickListener() {
            @Override
            public boolean onPreferenceClick(Preference preference) {
                showTimezoneDialog();
                return true;
            }
        mHomeTZ.setEntryValues(mTimezones[0]);
        mHomeTZ.setEntries(mTimezones[1]);
        CharSequence tzName = mHomeTZ.getEntry();
        if (TextUtils.isEmpty(tzName)) {
            tzName = Utils.getTimeZone(activity, null);
        });

        String timezoneName = TimeZonePickerUtils.getGmtDisplayName(timezone,
                System.currentTimeMillis());
        mHomeTZ.setSummary(timezoneName != null ? timezoneName : timezone);

        TimeZonePickerDialog tzpd = (TimeZonePickerDialog) activity.getFragmentManager()
                .findFragmentByTag(FRAG_TAG_TIME_ZONE_PICKER);
        if (tzpd != null) {
            tzpd.setOnTimeZoneSetListener(this);
        }
        mHomeTZ.setSummary(tzName);

        migrateOldPreferences(sharedPreferences);

        updateChildPreferences();
    }

    private void showTimezoneDialog() {
        final Activity activity = getActivity();
        if (activity == null) {
            return;
        }

        Bundle b = new Bundle();
        b.putLong(TimeZonePickerDialog.BUNDLE_START_TIME_MILLIS, System.currentTimeMillis());
        b.putString(TimeZonePickerDialog.BUNDLE_TIME_ZONE, Utils.getTimeZone(activity, null));

        FragmentManager fm = getActivity().getFragmentManager();
        TimeZonePickerDialog tzpd = (TimeZonePickerDialog) fm
                .findFragmentByTag(FRAG_TAG_TIME_ZONE_PICKER);
        if (tzpd != null) {
            tzpd.dismiss();
        }
        tzpd = new TimeZonePickerDialog();
        tzpd.setArguments(b);
        tzpd.setOnTimeZoneSetListener(this);
        tzpd.show(fm, FRAG_TAG_TIME_ZONE_PICKER);
    }

    @Override
    public void onStart() {
        super.onStart();
@@ -245,7 +278,7 @@ public class GeneralPreferences extends PreferenceFragment implements
        String tz;
        if (preference == mUseHomeTZ) {
            if ((Boolean)newValue) {
                tz = mHomeTZ.getValue();
                tz = mHomeTZ.getSummary().toString();
            } else {
                tz = CalendarCache.TIMEZONE_TYPE_AUTO;
            }
@@ -258,12 +291,6 @@ public class GeneralPreferences extends PreferenceFragment implements
            intent.setDataAndType(CalendarContract.CONTENT_URI, Utils.APPWIDGET_DATA_TYPE);
            act.sendBroadcast(intent);
            return true;
        } else if (preference == mHomeTZ) {
            tz = (String) newValue;
            // We set the value here so we can read back the entry
            mHomeTZ.setValue(tz);
            mHomeTZ.setSummary(mHomeTZ.getEntry());
            Utils.setTimeZone(getActivity(), tz);
        } else if (preference == mWeekStart) {
            mWeekStart.setValue((String) newValue);
            mWeekStart.setSummary(mWeekStart.getEntry());
@@ -363,4 +390,11 @@ public class GeneralPreferences extends PreferenceFragment implements
        }
    }

    @Override
    public void onTimeZoneSet(TimeZoneInfo tzi) {
        final String timezoneName = TimeZonePickerUtils.getGmtDisplayName(tzi.mTzId,
                System.currentTimeMillis());
        mHomeTZ.setSummary(timezoneName);
        Utils.setTimeZone(getActivity(), tzi.mTzId);
    }
}
+0 −433

File deleted.

Preview size limit exceeded, changes collapsed.

+2 −37
Original line number Diff line number Diff line
@@ -94,6 +94,7 @@ import com.android.ex.chips.ChipsUtil;
import com.android.ex.chips.RecipientEditTextView;
import com.android.timezonepicker.TimeZoneInfo;
import com.android.timezonepicker.TimeZonePickerDialog;
import com.android.timezonepicker.TimeZonePickerUtils;

import java.util.ArrayList;
import java.util.Arrays;
@@ -408,48 +409,12 @@ public class EditEventView implements View.OnClickListener, DialogInterface.OnCa
    }

    private void populateTimezone(long eventStartTime) {
        TimeZone tz = TimeZone.getTimeZone(mTimezone);
        String displayName = buildGmtDisplayName(tz, eventStartTime);
        String displayName = TimeZonePickerUtils.getGmtDisplayName(mTimezone, eventStartTime);

        mTimezoneTextView.setText(displayName);
        mTimezoneButton.setText(displayName);
    }

    public String buildGmtDisplayName(TimeZone tz, long timeMillis) {
        StringBuilder sb = new StringBuilder();
        sb.append("(GMT");

        final int gmtOffset = tz.getOffset(timeMillis);
        if (gmtOffset < 0) {
            sb.append('-');
        } else {
            sb.append('+');
        }

        final int p = Math.abs(gmtOffset);
        sb.append(p / DateUtils.HOUR_IN_MILLIS); // Hour

        final int min = (p / 60000) % 60;
        if (min != 0) { // Show minutes if non-zero
            sb.append(':');
            if (min < 10) {
                sb.append('0');
            }
            sb.append(min);
        }
        sb.append(") ");

        // tz.inDaylightTime(new Date(timeMillis))
        String displayName = tz.getDisplayName(mStartTime.isDst != 0, TimeZone.LONG,
                Locale.getDefault());
        sb.append(displayName);

        if (tz.useDaylightTime()) {
            sb.append(" \u2600"); // Sun symbol
        }
        return sb.toString();
    }

    private void showTimezoneDialog() {
        Bundle b = new Bundle();
        b.putLong(TimeZonePickerDialog.BUNDLE_START_TIME_MILLIS, mStartTime.toMillis(false));