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