1afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project/*
2afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project * Copyright (C) 2008 The Android Open Source Project
3afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project *
4afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project * Licensed under the Apache License, Version 2.0 (the "License");
5afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project * you may not use this file except in compliance with the License.
6afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project * You may obtain a copy of the License at
7afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project *
8afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project *      http://www.apache.org/licenses/LICENSE-2.0
9afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project *
10afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project * Unless required by applicable law or agreed to in writing, software
11afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project * distributed under the License is distributed on an "AS IS" BASIS,
12afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project * See the License for the specific language governing permissions and
14afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project * limitations under the License.
15afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project */
16afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project
17afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Projectpackage com.android.settings;
18afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project
1929e812f29915d9bd84d516e53931ba774f62d328Daisuke Miyakawaimport android.app.Activity;
205f050104386b96d8c99eb3ff0f5088814709348bAmith Yamasaniimport android.app.AlarmManager;
21afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Projectimport android.app.DatePickerDialog;
22d2e75e052823fc602965bc175803d32325c094f5Jason Monkimport android.app.DatePickerDialog.OnDateSetListener;
23d79934731c8d33f6fc63b21c120b9ffba5d06f54Amith Yamasaniimport android.app.Dialog;
24afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Projectimport android.app.TimePickerDialog;
25d2e75e052823fc602965bc175803d32325c094f5Jason Monkimport android.app.TimePickerDialog.OnTimeSetListener;
26afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Projectimport android.content.BroadcastReceiver;
27afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Projectimport android.content.Context;
28afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Projectimport android.content.Intent;
29afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Projectimport android.content.IntentFilter;
30afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Projectimport android.os.Bundle;
31ca060e3e98c561cad5e28603200810ca70ae4869Fyodor Kupolovimport android.os.UserManager;
32ca060e3e98c561cad5e28603200810ca70ae4869Fyodor Kupolovimport android.provider.SearchIndexableResource;
33afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Projectimport android.provider.Settings;
34afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Projectimport android.provider.Settings.SettingNotFoundException;
3539b467482d1bf256a111c757e9b7621c6f523271Jason Monkimport android.support.v14.preference.SwitchPreference;
3639b467482d1bf256a111c757e9b7621c6f523271Jason Monkimport android.support.v7.preference.Preference;
37d2e75e052823fc602965bc175803d32325c094f5Jason Monkimport android.support.v7.preference.Preference.OnPreferenceChangeListener;
38afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Projectimport android.text.format.DateFormat;
39afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Projectimport android.widget.DatePicker;
40afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Projectimport android.widget.TimePicker;
419d1bfd1e8de6e46137a9571507c03526880d6a46Chris Wrenimport com.android.internal.logging.MetricsProto.MetricsEvent;
429d80eeabe7807b5ff0a60bd40d3a1a84f681ea37Jason Monkimport com.android.settings.dashboard.SummaryLoader;
43ca060e3e98c561cad5e28603200810ca70ae4869Fyodor Kupolovimport com.android.settings.search.BaseSearchIndexProvider;
44ca060e3e98c561cad5e28603200810ca70ae4869Fyodor Kupolovimport com.android.settings.search.Indexable;
459c32468cd59cbe5b8e7692235a67034c936b4788Sudheer Shankaimport com.android.settingslib.RestrictedLockUtils;
469c32468cd59cbe5b8e7692235a67034c936b4788Sudheer Shankaimport com.android.settingslib.RestrictedSwitchPreference;
47550015e47656dad997973c89a30cffe56db9cdbdTony Mantlerimport com.android.settingslib.datetime.ZoneGetter;
488a963babe2e36b7a41f77b8d2598c97658196e58Chris Wren
49ca060e3e98c561cad5e28603200810ca70ae4869Fyodor Kupolovimport java.util.ArrayList;
50afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Projectimport java.util.Calendar;
51afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Projectimport java.util.Date;
52ca060e3e98c561cad5e28603200810ca70ae4869Fyodor Kupolovimport java.util.List;
53afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project
549c32468cd59cbe5b8e7692235a67034c936b4788Sudheer Shankaimport static com.android.settingslib.RestrictedLockUtils.EnforcedAdmin;
559c32468cd59cbe5b8e7692235a67034c936b4788Sudheer Shanka
560f4f2f3a81f2a6d7100b4cff0d8de062cb2bc8f6Daisuke Miyakawapublic class DateTimeSettings extends SettingsPreferenceFragment
57ca060e3e98c561cad5e28603200810ca70ae4869Fyodor Kupolov        implements OnTimeSetListener, OnDateSetListener, OnPreferenceChangeListener, Indexable {
58afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project
59afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project    private static final String HOURS_12 = "12";
60afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project    private static final String HOURS_24 = "24";
611bb6db526771fa594b2e5c0865dc89dce3cf351cAmith Yamasani
6271cc548f7ee51ff77a2c1dfb5da7a3f7b6c55fd5Daisuke Miyakawa    // Used for showing the current date format, which looks like "12/31/2010", "2010/12/13", etc.
6371cc548f7ee51ff77a2c1dfb5da7a3f7b6c55fd5Daisuke Miyakawa    // The date value is dummy (independent of actual date).
64afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project    private Calendar mDummyDate;
6571cc548f7ee51ff77a2c1dfb5da7a3f7b6c55fd5Daisuke Miyakawa
66afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project    private static final String KEY_AUTO_TIME = "auto_time";
671bb6db526771fa594b2e5c0865dc89dce3cf351cAmith Yamasani    private static final String KEY_AUTO_TIME_ZONE = "auto_zone";
68afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project
69afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project    private static final int DIALOG_DATEPICKER = 0;
70afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project    private static final int DIALOG_TIMEPICKER = 1;
711bb6db526771fa594b2e5c0865dc89dce3cf351cAmith Yamasani
727f6f6e18c9f078323b15c8185a7e707194e7d155Freeman Ng    // have we been launched from the setup wizard?
737f6f6e18c9f078323b15c8185a7e707194e7d155Freeman Ng    protected static final String EXTRA_IS_FIRST_RUN = "firstRun";
747f6f6e18c9f078323b15c8185a7e707194e7d155Freeman Ng
7578f7b416c006f830faad957a9121e9383b11a5f3Jason Monk    // Minimum time is Nov 5, 2007, 0:00.
7678f7b416c006f830faad957a9121e9383b11a5f3Jason Monk    private static final long MIN_DATE = 1194220800000L;
7778f7b416c006f830faad957a9121e9383b11a5f3Jason Monk
789c32468cd59cbe5b8e7692235a67034c936b4788Sudheer Shanka    private RestrictedSwitchPreference mAutoTimePref;
79afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project    private Preference mTimePref;
80afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project    private Preference mTime24Pref;
81b98c40649eb7a5ab4b24d3ed74ff46ce7cb672deFabrice Di Meglio    private SwitchPreference mAutoTimeZonePref;
82afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project    private Preference mTimeZone;
83afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project    private Preference mDatePref;
841bb6db526771fa594b2e5c0865dc89dce3cf351cAmith Yamasani
85afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project    @Override
868a963babe2e36b7a41f77b8d2598c97658196e58Chris Wren    protected int getMetricsCategory() {
879d1bfd1e8de6e46137a9571507c03526880d6a46Chris Wren        return MetricsEvent.DATE_TIME;
888a963babe2e36b7a41f77b8d2598c97658196e58Chris Wren    }
898a963babe2e36b7a41f77b8d2598c97658196e58Chris Wren
908a963babe2e36b7a41f77b8d2598c97658196e58Chris Wren    @Override
91d79934731c8d33f6fc63b21c120b9ffba5d06f54Amith Yamasani    public void onCreate(Bundle icicle) {
92afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        super.onCreate(icicle);
931bb6db526771fa594b2e5c0865dc89dce3cf351cAmith Yamasani
94afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        addPreferencesFromResource(R.xml.date_time_prefs);
951bb6db526771fa594b2e5c0865dc89dce3cf351cAmith Yamasani
961bb6db526771fa594b2e5c0865dc89dce3cf351cAmith Yamasani        initUI();
97afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project    }
981bb6db526771fa594b2e5c0865dc89dce3cf351cAmith Yamasani
99afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project    private void initUI() {
100f1c085899dd3d9142392b9ab7841c0e9502526a3Christopher Tate        boolean autoTimeEnabled = getAutoState(Settings.Global.AUTO_TIME);
101f1c085899dd3d9142392b9ab7841c0e9502526a3Christopher Tate        boolean autoTimeZoneEnabled = getAutoState(Settings.Global.AUTO_TIME_ZONE);
102afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project
1039c32468cd59cbe5b8e7692235a67034c936b4788Sudheer Shanka        mAutoTimePref = (RestrictedSwitchPreference) findPreference(KEY_AUTO_TIME);
104d2e75e052823fc602965bc175803d32325c094f5Jason Monk        mAutoTimePref.setOnPreferenceChangeListener(this);
1059c32468cd59cbe5b8e7692235a67034c936b4788Sudheer Shanka        EnforcedAdmin admin = RestrictedLockUtils.checkIfAutoTimeRequired(getActivity());
1069c32468cd59cbe5b8e7692235a67034c936b4788Sudheer Shanka        mAutoTimePref.setDisabledByAdmin(admin);
107fe4eff6a6584d760584c4e438f15bcf774c6fbf0Sander Alewijnse
1087f6f6e18c9f078323b15c8185a7e707194e7d155Freeman Ng        Intent intent = getActivity().getIntent();
1097f6f6e18c9f078323b15c8185a7e707194e7d155Freeman Ng        boolean isFirstRun = intent.getBooleanExtra(EXTRA_IS_FIRST_RUN, false);
1107f6f6e18c9f078323b15c8185a7e707194e7d155Freeman Ng
111afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        mDummyDate = Calendar.getInstance();
1121bb6db526771fa594b2e5c0865dc89dce3cf351cAmith Yamasani
1139c32468cd59cbe5b8e7692235a67034c936b4788Sudheer Shanka        // If device admin requires auto time device policy manager will set
1149c32468cd59cbe5b8e7692235a67034c936b4788Sudheer Shanka        // Settings.Global.AUTO_TIME to true. Note that this app listens to that change.
1151bb6db526771fa594b2e5c0865dc89dce3cf351cAmith Yamasani        mAutoTimePref.setChecked(autoTimeEnabled);
116b98c40649eb7a5ab4b24d3ed74ff46ce7cb672deFabrice Di Meglio        mAutoTimeZonePref = (SwitchPreference) findPreference(KEY_AUTO_TIME_ZONE);
117d2e75e052823fc602965bc175803d32325c094f5Jason Monk        mAutoTimeZonePref.setOnPreferenceChangeListener(this);
1187f6f6e18c9f078323b15c8185a7e707194e7d155Freeman Ng        // Override auto-timezone if it's a wifi-only device or if we're still in setup wizard.
1197f6f6e18c9f078323b15c8185a7e707194e7d155Freeman Ng        // TODO: Remove the wifiOnly test when auto-timezone is implemented based on wifi-location.
1208af88fb8387259e51615709b2d1ea0260f7057fdRobert Greenwalt        if (Utils.isWifiOnly(getActivity()) || isFirstRun) {
121c06d4c48a9455d6018f2d793c6b8f211f1131055Amith Yamasani            getPreferenceScreen().removePreference(mAutoTimeZonePref);
122c06d4c48a9455d6018f2d793c6b8f211f1131055Amith Yamasani            autoTimeZoneEnabled = false;
123c06d4c48a9455d6018f2d793c6b8f211f1131055Amith Yamasani        }
124ea07165ef26b57dde4b45eee24200cdfaa5945e7Amith Yamasani        mAutoTimeZonePref.setChecked(autoTimeZoneEnabled);
125ea07165ef26b57dde4b45eee24200cdfaa5945e7Amith Yamasani
126afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        mTimePref = findPreference("time");
127afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        mTime24Pref = findPreference("24 hour");
128afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        mTimeZone = findPreference("timezone");
129afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        mDatePref = findPreference("date");
1307f6f6e18c9f078323b15c8185a7e707194e7d155Freeman Ng        if (isFirstRun) {
1317f6f6e18c9f078323b15c8185a7e707194e7d155Freeman Ng            getPreferenceScreen().removePreference(mTime24Pref);
1327f6f6e18c9f078323b15c8185a7e707194e7d155Freeman Ng        }
1331bb6db526771fa594b2e5c0865dc89dce3cf351cAmith Yamasani
1341bb6db526771fa594b2e5c0865dc89dce3cf351cAmith Yamasani        mTimePref.setEnabled(!autoTimeEnabled);
1351bb6db526771fa594b2e5c0865dc89dce3cf351cAmith Yamasani        mDatePref.setEnabled(!autoTimeEnabled);
1361bb6db526771fa594b2e5c0865dc89dce3cf351cAmith Yamasani        mTimeZone.setEnabled(!autoTimeZoneEnabled);
137afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project    }
138afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project
139afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project    @Override
140d79934731c8d33f6fc63b21c120b9ffba5d06f54Amith Yamasani    public void onResume() {
141afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        super.onResume();
1421bb6db526771fa594b2e5c0865dc89dce3cf351cAmith Yamasani
143b98c40649eb7a5ab4b24d3ed74ff46ce7cb672deFabrice Di Meglio        ((SwitchPreference)mTime24Pref).setChecked(is24Hour());
144afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project
145afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        // Register for time ticks and other reasons for time change
146afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        IntentFilter filter = new IntentFilter();
147afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        filter.addAction(Intent.ACTION_TIME_TICK);
148afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        filter.addAction(Intent.ACTION_TIME_CHANGED);
149afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        filter.addAction(Intent.ACTION_TIMEZONE_CHANGED);
150d79934731c8d33f6fc63b21c120b9ffba5d06f54Amith Yamasani        getActivity().registerReceiver(mIntentReceiver, filter, null, null);
15129e812f29915d9bd84d516e53931ba774f62d328Daisuke Miyakawa
15229e812f29915d9bd84d516e53931ba774f62d328Daisuke Miyakawa        updateTimeAndDateDisplay(getActivity());
153afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project    }
154afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project
1551bb6db526771fa594b2e5c0865dc89dce3cf351cAmith Yamasani    @Override
156d79934731c8d33f6fc63b21c120b9ffba5d06f54Amith Yamasani    public void onPause() {
157afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        super.onPause();
158d79934731c8d33f6fc63b21c120b9ffba5d06f54Amith Yamasani        getActivity().unregisterReceiver(mIntentReceiver);
159afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project    }
1601bb6db526771fa594b2e5c0865dc89dce3cf351cAmith Yamasani
1617f6f6e18c9f078323b15c8185a7e707194e7d155Freeman Ng    public void updateTimeAndDateDisplay(Context context) {
16271cc548f7ee51ff77a2c1dfb5da7a3f7b6c55fd5Daisuke Miyakawa        final Calendar now = Calendar.getInstance();
163151b0e117443d874c475d25f7144bba1e1b438efKenny Root        mDummyDate.setTimeZone(now.getTimeZone());
16482723df002a27a79545dd18a52333973b056b720Elliott Hughes        // We use December 31st because it's unambiguous when demonstrating the date format.
16582723df002a27a79545dd18a52333973b056b720Elliott Hughes        // We use 13:00 so we can demonstrate the 12/24 hour options.
166151b0e117443d874c475d25f7144bba1e1b438efKenny Root        mDummyDate.set(now.get(Calendar.YEAR), 11, 31, 13, 0, 0);
167afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        Date dummyDate = mDummyDate.getTime();
16830cc30864b2b41d73e187ba9a0f75ea1fa64b538Elliott Hughes        mDatePref.setSummary(DateFormat.getLongDateFormat(context).format(now.getTime()));
16971cc548f7ee51ff77a2c1dfb5da7a3f7b6c55fd5Daisuke Miyakawa        mTimePref.setSummary(DateFormat.getTimeFormat(getActivity()).format(now.getTime()));
170b9864427471ac206d08836a12a8b2f230c883d9eNeil Fuller        mTimeZone.setSummary(ZoneGetter.getTimeZoneOffsetAndName(now.getTimeZone(), now.getTime()));
17182723df002a27a79545dd18a52333973b056b720Elliott Hughes        mTime24Pref.setSummary(DateFormat.getTimeFormat(getActivity()).format(dummyDate));
172afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project    }
173afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project
1740f4f2f3a81f2a6d7100b4cff0d8de062cb2bc8f6Daisuke Miyakawa    @Override
175afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project    public void onDateSet(DatePicker view, int year, int month, int day) {
17629e812f29915d9bd84d516e53931ba774f62d328Daisuke Miyakawa        final Activity activity = getActivity();
17729e812f29915d9bd84d516e53931ba774f62d328Daisuke Miyakawa        if (activity != null) {
1785f050104386b96d8c99eb3ff0f5088814709348bAmith Yamasani            setDate(activity, year, month, day);
17929e812f29915d9bd84d516e53931ba774f62d328Daisuke Miyakawa            updateTimeAndDateDisplay(activity);
18029e812f29915d9bd84d516e53931ba774f62d328Daisuke Miyakawa        }
181afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project    }
182afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project
1830f4f2f3a81f2a6d7100b4cff0d8de062cb2bc8f6Daisuke Miyakawa    @Override
184afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project    public void onTimeSet(TimePicker view, int hourOfDay, int minute) {
18529e812f29915d9bd84d516e53931ba774f62d328Daisuke Miyakawa        final Activity activity = getActivity();
18629e812f29915d9bd84d516e53931ba774f62d328Daisuke Miyakawa        if (activity != null) {
1875f050104386b96d8c99eb3ff0f5088814709348bAmith Yamasani            setTime(activity, hourOfDay, minute);
18829e812f29915d9bd84d516e53931ba774f62d328Daisuke Miyakawa            updateTimeAndDateDisplay(activity);
18929e812f29915d9bd84d516e53931ba774f62d328Daisuke Miyakawa        }
19071cc548f7ee51ff77a2c1dfb5da7a3f7b6c55fd5Daisuke Miyakawa
19172ed6feab24308a0acd1fa2135afa3476759cf39The Android Open Source Project        // We don't need to call timeUpdated() here because the TIME_CHANGED
19272ed6feab24308a0acd1fa2135afa3476759cf39The Android Open Source Project        // broadcast is sent by the AlarmManager as a side effect of setting the
19372ed6feab24308a0acd1fa2135afa3476759cf39The Android Open Source Project        // SystemClock time.
194afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project    }
195afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project
1960f4f2f3a81f2a6d7100b4cff0d8de062cb2bc8f6Daisuke Miyakawa    @Override
197d2e75e052823fc602965bc175803d32325c094f5Jason Monk    public boolean onPreferenceChange(Preference preference, Object newValue) {
198d2e75e052823fc602965bc175803d32325c094f5Jason Monk        if (preference.getKey().equals(KEY_AUTO_TIME)) {
199d2e75e052823fc602965bc175803d32325c094f5Jason Monk            boolean autoEnabled = (Boolean) newValue;
200f1c085899dd3d9142392b9ab7841c0e9502526a3Christopher Tate            Settings.Global.putInt(getContentResolver(), Settings.Global.AUTO_TIME,
201afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project                    autoEnabled ? 1 : 0);
202afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project            mTimePref.setEnabled(!autoEnabled);
203afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project            mDatePref.setEnabled(!autoEnabled);
204d2e75e052823fc602965bc175803d32325c094f5Jason Monk        } else if (preference.getKey().equals(KEY_AUTO_TIME_ZONE)) {
205d2e75e052823fc602965bc175803d32325c094f5Jason Monk            boolean autoZoneEnabled = (Boolean) newValue;
206f1c085899dd3d9142392b9ab7841c0e9502526a3Christopher Tate            Settings.Global.putInt(
207f1c085899dd3d9142392b9ab7841c0e9502526a3Christopher Tate                    getContentResolver(), Settings.Global.AUTO_TIME_ZONE, autoZoneEnabled ? 1 : 0);
2081bb6db526771fa594b2e5c0865dc89dce3cf351cAmith Yamasani            mTimeZone.setEnabled(!autoZoneEnabled);
209afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        }
210d2e75e052823fc602965bc175803d32325c094f5Jason Monk        return true;
211afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project    }
212afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project
213afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project    @Override
214afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project    public Dialog onCreateDialog(int id) {
215b85d48fa43e5f7b98492c2ee313f51c072f5ddd8Elliott Hughes        final Calendar calendar = Calendar.getInstance();
216afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        switch (id) {
217b85d48fa43e5f7b98492c2ee313f51c072f5ddd8Elliott Hughes        case DIALOG_DATEPICKER:
218b85d48fa43e5f7b98492c2ee313f51c072f5ddd8Elliott Hughes            DatePickerDialog d = new DatePickerDialog(
219b85d48fa43e5f7b98492c2ee313f51c072f5ddd8Elliott Hughes                    getActivity(),
220b85d48fa43e5f7b98492c2ee313f51c072f5ddd8Elliott Hughes                    this,
221b85d48fa43e5f7b98492c2ee313f51c072f5ddd8Elliott Hughes                    calendar.get(Calendar.YEAR),
222b85d48fa43e5f7b98492c2ee313f51c072f5ddd8Elliott Hughes                    calendar.get(Calendar.MONTH),
223b85d48fa43e5f7b98492c2ee313f51c072f5ddd8Elliott Hughes                    calendar.get(Calendar.DAY_OF_MONTH));
224b85d48fa43e5f7b98492c2ee313f51c072f5ddd8Elliott Hughes            configureDatePicker(d.getDatePicker());
225b85d48fa43e5f7b98492c2ee313f51c072f5ddd8Elliott Hughes            return d;
226b85d48fa43e5f7b98492c2ee313f51c072f5ddd8Elliott Hughes        case DIALOG_TIMEPICKER:
227b85d48fa43e5f7b98492c2ee313f51c072f5ddd8Elliott Hughes            return new TimePickerDialog(
228d79934731c8d33f6fc63b21c120b9ffba5d06f54Amith Yamasani                    getActivity(),
229afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project                    this,
230afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project                    calendar.get(Calendar.HOUR_OF_DAY),
231afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project                    calendar.get(Calendar.MINUTE),
232d79934731c8d33f6fc63b21c120b9ffba5d06f54Amith Yamasani                    DateFormat.is24HourFormat(getActivity()));
233afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        default:
234b85d48fa43e5f7b98492c2ee313f51c072f5ddd8Elliott Hughes            throw new IllegalArgumentException();
235afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        }
236b85d48fa43e5f7b98492c2ee313f51c072f5ddd8Elliott Hughes    }
237afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project
238b85d48fa43e5f7b98492c2ee313f51c072f5ddd8Elliott Hughes    static void configureDatePicker(DatePicker datePicker) {
239b85d48fa43e5f7b98492c2ee313f51c072f5ddd8Elliott Hughes        // The system clock can't represent dates outside this range.
240b85d48fa43e5f7b98492c2ee313f51c072f5ddd8Elliott Hughes        Calendar t = Calendar.getInstance();
241b85d48fa43e5f7b98492c2ee313f51c072f5ddd8Elliott Hughes        t.clear();
242b85d48fa43e5f7b98492c2ee313f51c072f5ddd8Elliott Hughes        t.set(1970, Calendar.JANUARY, 1);
243b85d48fa43e5f7b98492c2ee313f51c072f5ddd8Elliott Hughes        datePicker.setMinDate(t.getTimeInMillis());
244b85d48fa43e5f7b98492c2ee313f51c072f5ddd8Elliott Hughes        t.clear();
245b85d48fa43e5f7b98492c2ee313f51c072f5ddd8Elliott Hughes        t.set(2037, Calendar.DECEMBER, 31);
246b85d48fa43e5f7b98492c2ee313f51c072f5ddd8Elliott Hughes        datePicker.setMaxDate(t.getTimeInMillis());
247afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project    }
248afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project
249d79934731c8d33f6fc63b21c120b9ffba5d06f54Amith Yamasani    /*
250afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project    @Override
251afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project    public void onPrepareDialog(int id, Dialog d) {
252afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        switch (id) {
253afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        case DIALOG_DATEPICKER: {
254afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project            DatePickerDialog datePicker = (DatePickerDialog)d;
255afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project            final Calendar calendar = Calendar.getInstance();
256afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project            datePicker.updateDate(
257afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project                    calendar.get(Calendar.YEAR),
258afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project                    calendar.get(Calendar.MONTH),
259afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project                    calendar.get(Calendar.DAY_OF_MONTH));
260afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project            break;
261afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        }
262afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        case DIALOG_TIMEPICKER: {
263afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project            TimePickerDialog timePicker = (TimePickerDialog)d;
264afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project            final Calendar calendar = Calendar.getInstance();
265afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project            timePicker.updateTime(
266afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project                    calendar.get(Calendar.HOUR_OF_DAY),
267afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project                    calendar.get(Calendar.MINUTE));
268afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project            break;
269afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        }
270afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        default:
271afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project            break;
272afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        }
273afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project    }
274d79934731c8d33f6fc63b21c120b9ffba5d06f54Amith Yamasani    */
275afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project    @Override
27639b467482d1bf256a111c757e9b7621c6f523271Jason Monk    public boolean onPreferenceTreeClick(Preference preference) {
277afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        if (preference == mDatePref) {
278afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project            showDialog(DIALOG_DATEPICKER);
279afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        } else if (preference == mTimePref) {
280afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project            // The 24-hour mode may have changed, so recreate the dialog
281afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project            removeDialog(DIALOG_TIMEPICKER);
282afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project            showDialog(DIALOG_TIMEPICKER);
283afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        } else if (preference == mTime24Pref) {
284b98c40649eb7a5ab4b24d3ed74ff46ce7cb672deFabrice Di Meglio            final boolean is24Hour = ((SwitchPreference)mTime24Pref).isChecked();
2850a2bc1cc760143e91a7a7cc3f5182e50c0009fcdNarayan Kamath            set24Hour(is24Hour);
28629e812f29915d9bd84d516e53931ba774f62d328Daisuke Miyakawa            updateTimeAndDateDisplay(getActivity());
2870a2bc1cc760143e91a7a7cc3f5182e50c0009fcdNarayan Kamath            timeUpdated(is24Hour);
288afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        }
28939b467482d1bf256a111c757e9b7621c6f523271Jason Monk        return super.onPreferenceTreeClick(preference);
290afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project    }
2911bb6db526771fa594b2e5c0865dc89dce3cf351cAmith Yamasani
292afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project    @Override
293d79934731c8d33f6fc63b21c120b9ffba5d06f54Amith Yamasani    public void onActivityResult(int requestCode, int resultCode,
294afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project            Intent data) {
29529e812f29915d9bd84d516e53931ba774f62d328Daisuke Miyakawa        updateTimeAndDateDisplay(getActivity());
296afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project    }
2971bb6db526771fa594b2e5c0865dc89dce3cf351cAmith Yamasani
2980a2bc1cc760143e91a7a7cc3f5182e50c0009fcdNarayan Kamath    private void timeUpdated(boolean is24Hour) {
299afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        Intent timeChanged = new Intent(Intent.ACTION_TIME_CHANGED);
3000a2bc1cc760143e91a7a7cc3f5182e50c0009fcdNarayan Kamath        timeChanged.putExtra(Intent.EXTRA_TIME_PREF_24_HOUR_FORMAT, is24Hour);
301d79934731c8d33f6fc63b21c120b9ffba5d06f54Amith Yamasani        getActivity().sendBroadcast(timeChanged);
302afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project    }
3031bb6db526771fa594b2e5c0865dc89dce3cf351cAmith Yamasani
304afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project    /*  Get & Set values from the system settings  */
3051bb6db526771fa594b2e5c0865dc89dce3cf351cAmith Yamasani
306afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project    private boolean is24Hour() {
307d79934731c8d33f6fc63b21c120b9ffba5d06f54Amith Yamasani        return DateFormat.is24HourFormat(getActivity());
308afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project    }
3091bb6db526771fa594b2e5c0865dc89dce3cf351cAmith Yamasani
310afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project    private void set24Hour(boolean is24Hour) {
311afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        Settings.System.putString(getContentResolver(),
312afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project                Settings.System.TIME_12_24,
313afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project                is24Hour? HOURS_24 : HOURS_12);
314afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project    }
3151bb6db526771fa594b2e5c0865dc89dce3cf351cAmith Yamasani
3161bb6db526771fa594b2e5c0865dc89dce3cf351cAmith Yamasani    private boolean getAutoState(String name) {
317afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        try {
318f1c085899dd3d9142392b9ab7841c0e9502526a3Christopher Tate            return Settings.Global.getInt(getContentResolver(), name) > 0;
319afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        } catch (SettingNotFoundException snfe) {
320ea07165ef26b57dde4b45eee24200cdfaa5945e7Amith Yamasani            return false;
321afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        }
322afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project    }
323afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project
3245f050104386b96d8c99eb3ff0f5088814709348bAmith Yamasani    /* package */ static void setDate(Context context, int year, int month, int day) {
32571cc548f7ee51ff77a2c1dfb5da7a3f7b6c55fd5Daisuke Miyakawa        Calendar c = Calendar.getInstance();
32671cc548f7ee51ff77a2c1dfb5da7a3f7b6c55fd5Daisuke Miyakawa
32771cc548f7ee51ff77a2c1dfb5da7a3f7b6c55fd5Daisuke Miyakawa        c.set(Calendar.YEAR, year);
32871cc548f7ee51ff77a2c1dfb5da7a3f7b6c55fd5Daisuke Miyakawa        c.set(Calendar.MONTH, month);
32971cc548f7ee51ff77a2c1dfb5da7a3f7b6c55fd5Daisuke Miyakawa        c.set(Calendar.DAY_OF_MONTH, day);
33078f7b416c006f830faad957a9121e9383b11a5f3Jason Monk        long when = Math.max(c.getTimeInMillis(), MIN_DATE);
33171cc548f7ee51ff77a2c1dfb5da7a3f7b6c55fd5Daisuke Miyakawa
33271cc548f7ee51ff77a2c1dfb5da7a3f7b6c55fd5Daisuke Miyakawa        if (when / 1000 < Integer.MAX_VALUE) {
3335f050104386b96d8c99eb3ff0f5088814709348bAmith Yamasani            ((AlarmManager) context.getSystemService(Context.ALARM_SERVICE)).setTime(when);
334188ca778702938d87313592175a3c2ff86bd3218Eric Fischer        }
33571cc548f7ee51ff77a2c1dfb5da7a3f7b6c55fd5Daisuke Miyakawa    }
33671cc548f7ee51ff77a2c1dfb5da7a3f7b6c55fd5Daisuke Miyakawa
3375f050104386b96d8c99eb3ff0f5088814709348bAmith Yamasani    /* package */ static void setTime(Context context, int hourOfDay, int minute) {
33871cc548f7ee51ff77a2c1dfb5da7a3f7b6c55fd5Daisuke Miyakawa        Calendar c = Calendar.getInstance();
339188ca778702938d87313592175a3c2ff86bd3218Eric Fischer
34071cc548f7ee51ff77a2c1dfb5da7a3f7b6c55fd5Daisuke Miyakawa        c.set(Calendar.HOUR_OF_DAY, hourOfDay);
34171cc548f7ee51ff77a2c1dfb5da7a3f7b6c55fd5Daisuke Miyakawa        c.set(Calendar.MINUTE, minute);
34233ff11599553254683bbf4a5c75d5dee4251fd74Gilles Debunne        c.set(Calendar.SECOND, 0);
34333ff11599553254683bbf4a5c75d5dee4251fd74Gilles Debunne        c.set(Calendar.MILLISECOND, 0);
34478f7b416c006f830faad957a9121e9383b11a5f3Jason Monk        long when = Math.max(c.getTimeInMillis(), MIN_DATE);
34571cc548f7ee51ff77a2c1dfb5da7a3f7b6c55fd5Daisuke Miyakawa
34671cc548f7ee51ff77a2c1dfb5da7a3f7b6c55fd5Daisuke Miyakawa        if (when / 1000 < Integer.MAX_VALUE) {
3475f050104386b96d8c99eb3ff0f5088814709348bAmith Yamasani            ((AlarmManager) context.getSystemService(Context.ALARM_SERVICE)).setTime(when);
34871cc548f7ee51ff77a2c1dfb5da7a3f7b6c55fd5Daisuke Miyakawa        }
349afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project    }
35071cc548f7ee51ff77a2c1dfb5da7a3f7b6c55fd5Daisuke Miyakawa
351afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project    private BroadcastReceiver mIntentReceiver = new BroadcastReceiver() {
352afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        @Override
353afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        public void onReceive(Context context, Intent intent) {
35429e812f29915d9bd84d516e53931ba774f62d328Daisuke Miyakawa            final Activity activity = getActivity();
35529e812f29915d9bd84d516e53931ba774f62d328Daisuke Miyakawa            if (activity != null) {
35629e812f29915d9bd84d516e53931ba774f62d328Daisuke Miyakawa                updateTimeAndDateDisplay(activity);
35729e812f29915d9bd84d516e53931ba774f62d328Daisuke Miyakawa            }
358afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project        }
359afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project    };
3609d80eeabe7807b5ff0a60bd40d3a1a84f681ea37Jason Monk
3619d80eeabe7807b5ff0a60bd40d3a1a84f681ea37Jason Monk    private static class SummaryProvider implements SummaryLoader.SummaryProvider {
3629d80eeabe7807b5ff0a60bd40d3a1a84f681ea37Jason Monk
3639d80eeabe7807b5ff0a60bd40d3a1a84f681ea37Jason Monk        private final Context mContext;
3649d80eeabe7807b5ff0a60bd40d3a1a84f681ea37Jason Monk        private final SummaryLoader mSummaryLoader;
3659d80eeabe7807b5ff0a60bd40d3a1a84f681ea37Jason Monk
3669d80eeabe7807b5ff0a60bd40d3a1a84f681ea37Jason Monk        public SummaryProvider(Context context, SummaryLoader summaryLoader) {
3679d80eeabe7807b5ff0a60bd40d3a1a84f681ea37Jason Monk            mContext = context;
3689d80eeabe7807b5ff0a60bd40d3a1a84f681ea37Jason Monk            mSummaryLoader = summaryLoader;
3699d80eeabe7807b5ff0a60bd40d3a1a84f681ea37Jason Monk        }
3709d80eeabe7807b5ff0a60bd40d3a1a84f681ea37Jason Monk
3719d80eeabe7807b5ff0a60bd40d3a1a84f681ea37Jason Monk        @Override
3729d80eeabe7807b5ff0a60bd40d3a1a84f681ea37Jason Monk        public void setListening(boolean listening) {
3739d80eeabe7807b5ff0a60bd40d3a1a84f681ea37Jason Monk            if (listening) {
3749d80eeabe7807b5ff0a60bd40d3a1a84f681ea37Jason Monk                final Calendar now = Calendar.getInstance();
3759d80eeabe7807b5ff0a60bd40d3a1a84f681ea37Jason Monk                mSummaryLoader.setSummary(this, ZoneGetter.getTimeZoneOffsetAndName(
3769d80eeabe7807b5ff0a60bd40d3a1a84f681ea37Jason Monk                        now.getTimeZone(), now.getTime()));
3779d80eeabe7807b5ff0a60bd40d3a1a84f681ea37Jason Monk            }
3789d80eeabe7807b5ff0a60bd40d3a1a84f681ea37Jason Monk        }
3799d80eeabe7807b5ff0a60bd40d3a1a84f681ea37Jason Monk    }
3809d80eeabe7807b5ff0a60bd40d3a1a84f681ea37Jason Monk
3819d80eeabe7807b5ff0a60bd40d3a1a84f681ea37Jason Monk    public static final SummaryLoader.SummaryProviderFactory SUMMARY_PROVIDER_FACTORY
3829d80eeabe7807b5ff0a60bd40d3a1a84f681ea37Jason Monk            = new SummaryLoader.SummaryProviderFactory() {
3839d80eeabe7807b5ff0a60bd40d3a1a84f681ea37Jason Monk        @Override
3849d80eeabe7807b5ff0a60bd40d3a1a84f681ea37Jason Monk        public SummaryLoader.SummaryProvider createSummaryProvider(Activity activity,
3859d80eeabe7807b5ff0a60bd40d3a1a84f681ea37Jason Monk                                                                   SummaryLoader summaryLoader) {
3869d80eeabe7807b5ff0a60bd40d3a1a84f681ea37Jason Monk            return new SummaryProvider(activity, summaryLoader);
3879d80eeabe7807b5ff0a60bd40d3a1a84f681ea37Jason Monk        }
3889d80eeabe7807b5ff0a60bd40d3a1a84f681ea37Jason Monk    };
389ca060e3e98c561cad5e28603200810ca70ae4869Fyodor Kupolov
390ca060e3e98c561cad5e28603200810ca70ae4869Fyodor Kupolov    public static final Indexable.SearchIndexProvider SEARCH_INDEX_DATA_PROVIDER =
391ca060e3e98c561cad5e28603200810ca70ae4869Fyodor Kupolov            new DateTimeSearchIndexProvider();
392ca060e3e98c561cad5e28603200810ca70ae4869Fyodor Kupolov
393ca060e3e98c561cad5e28603200810ca70ae4869Fyodor Kupolov    private static class DateTimeSearchIndexProvider extends BaseSearchIndexProvider {
394ca060e3e98c561cad5e28603200810ca70ae4869Fyodor Kupolov
395ca060e3e98c561cad5e28603200810ca70ae4869Fyodor Kupolov        @Override
396ca060e3e98c561cad5e28603200810ca70ae4869Fyodor Kupolov        public List<SearchIndexableResource> getXmlResourcesToIndex(
397ca060e3e98c561cad5e28603200810ca70ae4869Fyodor Kupolov                Context context, boolean enabled) {
398ca060e3e98c561cad5e28603200810ca70ae4869Fyodor Kupolov            List<SearchIndexableResource> result = new ArrayList<>();
399ca060e3e98c561cad5e28603200810ca70ae4869Fyodor Kupolov            // Remove data/time settings from search in demo mode
400ca060e3e98c561cad5e28603200810ca70ae4869Fyodor Kupolov            if (UserManager.isDeviceInDemoMode(context)) {
401ca060e3e98c561cad5e28603200810ca70ae4869Fyodor Kupolov                return result;
402ca060e3e98c561cad5e28603200810ca70ae4869Fyodor Kupolov            }
403ca060e3e98c561cad5e28603200810ca70ae4869Fyodor Kupolov
404ca060e3e98c561cad5e28603200810ca70ae4869Fyodor Kupolov            SearchIndexableResource sir = new SearchIndexableResource(context);
405ca060e3e98c561cad5e28603200810ca70ae4869Fyodor Kupolov            sir.xmlResId = R.xml.date_time_prefs;
406ca060e3e98c561cad5e28603200810ca70ae4869Fyodor Kupolov            result.add(sir);
407ca060e3e98c561cad5e28603200810ca70ae4869Fyodor Kupolov
408ca060e3e98c561cad5e28603200810ca70ae4869Fyodor Kupolov            return result;
409ca060e3e98c561cad5e28603200810ca70ae4869Fyodor Kupolov        }
410ca060e3e98c561cad5e28603200810ca70ae4869Fyodor Kupolov    }
411afc4ab2ffbb8327ddce9907961295a32cbf49d0fThe Android Open Source Project}
412