The Android Open Source Project | afc4ab2 | 2009-03-03 19:32:34 -0800 | [diff] [blame] | 1 | /* |
| 2 | * Copyright (C) 2008 The Android Open Source Project |
| 3 | * |
| 4 | * Licensed under the Apache License, Version 2.0 (the "License"); |
| 5 | * you may not use this file except in compliance with the License. |
| 6 | * You may obtain a copy of the License at |
| 7 | * |
| 8 | * http://www.apache.org/licenses/LICENSE-2.0 |
| 9 | * |
| 10 | * Unless required by applicable law or agreed to in writing, software |
| 11 | * distributed under the License is distributed on an "AS IS" BASIS, |
| 12 | * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| 13 | * See the License for the specific language governing permissions and |
| 14 | * limitations under the License. |
| 15 | */ |
| 16 | |
| 17 | package com.android.settings; |
| 18 | |
Daisuke Miyakawa | 29e812f | 2010-09-13 16:50:57 -0700 | [diff] [blame] | 19 | import android.app.Activity; |
Amith Yamasani | d799347 | 2010-08-18 13:59:28 -0700 | [diff] [blame] | 20 | import android.app.Dialog; |
The Android Open Source Project | afc4ab2 | 2009-03-03 19:32:34 -0800 | [diff] [blame] | 21 | import android.content.Context; |
| 22 | import android.content.Intent; |
Fyodor Kupolov | ca060e3 | 2016-06-24 13:01:11 -0700 | [diff] [blame] | 23 | import android.os.UserManager; |
| 24 | import android.provider.SearchIndexableResource; |
Fan Zhang | 20374fd | 2016-09-23 12:10:38 -0700 | [diff] [blame] | 25 | |
Tamas Berghammer | 265d3c2 | 2016-06-22 15:34:45 +0100 | [diff] [blame] | 26 | import com.android.internal.logging.nano.MetricsProto.MetricsEvent; |
Fan Zhang | beddff8 | 2016-11-18 11:10:05 -0800 | [diff] [blame] | 27 | import com.android.settings.dashboard.DashboardFragment; |
Jason Monk | 9d80eea | 2015-11-20 14:27:51 -0500 | [diff] [blame] | 28 | import com.android.settings.dashboard.SummaryLoader; |
Joachim Sauer | 95beae0 | 2017-06-01 11:23:28 +0100 | [diff] [blame] | 29 | import com.android.settings.datetime.AutoTimeFormatPreferenceController; |
Fan Zhang | beddff8 | 2016-11-18 11:10:05 -0800 | [diff] [blame] | 30 | import com.android.settings.datetime.AutoTimePreferenceController; |
| 31 | import com.android.settings.datetime.AutoTimeZonePreferenceController; |
| 32 | import com.android.settings.datetime.DatePreferenceController; |
| 33 | import com.android.settings.datetime.TimeChangeListenerMixin; |
Fan Zhang | 3d2efae | 2016-11-17 10:57:15 -0800 | [diff] [blame] | 34 | import com.android.settings.datetime.TimeFormatPreferenceController; |
Fan Zhang | beddff8 | 2016-11-18 11:10:05 -0800 | [diff] [blame] | 35 | import com.android.settings.datetime.TimePreferenceController; |
| 36 | import com.android.settings.datetime.TimeZonePreferenceController; |
Fyodor Kupolov | ca060e3 | 2016-06-24 13:01:11 -0700 | [diff] [blame] | 37 | import com.android.settings.search.BaseSearchIndexProvider; |
| 38 | import com.android.settings.search.Indexable; |
Tony Mantler | 1d583e1 | 2017-06-13 13:09:25 -0700 | [diff] [blame] | 39 | import com.android.settingslib.core.AbstractPreferenceController; |
Tony Mantler | 550015e | 2015-05-28 14:48:29 -0700 | [diff] [blame] | 40 | import com.android.settingslib.datetime.ZoneGetter; |
| 41 | |
Fyodor Kupolov | ca060e3 | 2016-06-24 13:01:11 -0700 | [diff] [blame] | 42 | import java.util.ArrayList; |
The Android Open Source Project | afc4ab2 | 2009-03-03 19:32:34 -0800 | [diff] [blame] | 43 | import java.util.Calendar; |
Fyodor Kupolov | ca060e3 | 2016-06-24 13:01:11 -0700 | [diff] [blame] | 44 | import java.util.List; |
The Android Open Source Project | afc4ab2 | 2009-03-03 19:32:34 -0800 | [diff] [blame] | 45 | |
Fan Zhang | beddff8 | 2016-11-18 11:10:05 -0800 | [diff] [blame] | 46 | public class DateTimeSettings extends DashboardFragment implements |
| 47 | TimePreferenceController.TimePreferenceHost, DatePreferenceController.DatePreferenceHost { |
Sudheer Shanka | 9c32468 | 2016-01-18 11:17:23 +0000 | [diff] [blame] | 48 | |
Fan Zhang | beddff8 | 2016-11-18 11:10:05 -0800 | [diff] [blame] | 49 | private static final String TAG = "DateTimeSettings"; |
Amith Yamasani | 1bb6db5 | 2010-09-17 13:34:47 -0700 | [diff] [blame] | 50 | |
Freeman Ng | 7f6f6e1 | 2011-06-02 15:44:51 -0700 | [diff] [blame] | 51 | // have we been launched from the setup wizard? |
Fan Zhang | 3d2efae | 2016-11-17 10:57:15 -0800 | [diff] [blame] | 52 | protected static final String EXTRA_IS_FROM_SUW = "firstRun"; |
Freeman Ng | 7f6f6e1 | 2011-06-02 15:44:51 -0700 | [diff] [blame] | 53 | |
The Android Open Source Project | afc4ab2 | 2009-03-03 19:32:34 -0800 | [diff] [blame] | 54 | @Override |
Fan Zhang | 6507613 | 2016-08-08 10:25:13 -0700 | [diff] [blame] | 55 | public int getMetricsCategory() { |
Chris Wren | 9d1bfd1 | 2016-01-26 18:04:01 -0500 | [diff] [blame] | 56 | return MetricsEvent.DATE_TIME; |
Chris Wren | 8a963ba | 2015-03-20 10:29:14 -0400 | [diff] [blame] | 57 | } |
| 58 | |
| 59 | @Override |
Fan Zhang | beddff8 | 2016-11-18 11:10:05 -0800 | [diff] [blame] | 60 | protected String getLogTag() { |
| 61 | return TAG; |
| 62 | } |
| 63 | |
| 64 | @Override |
| 65 | protected int getPreferenceScreenResId() { |
| 66 | return R.xml.date_time_prefs; |
| 67 | } |
| 68 | |
| 69 | @Override |
| 70 | public void onAttach(Context context) { |
| 71 | super.onAttach(context); |
| 72 | getLifecycle().addObserver(new TimeChangeListenerMixin(context, this)); |
| 73 | } |
| 74 | |
| 75 | @Override |
Tony Mantler | 1d583e1 | 2017-06-13 13:09:25 -0700 | [diff] [blame] | 76 | protected List<AbstractPreferenceController> getPreferenceControllers(Context context) { |
| 77 | final List<AbstractPreferenceController> controllers = new ArrayList<>(); |
Fan Zhang | 3d2efae | 2016-11-17 10:57:15 -0800 | [diff] [blame] | 78 | final Activity activity = getActivity(); |
| 79 | final Intent intent = activity.getIntent(); |
| 80 | final boolean isFromSUW = intent.getBooleanExtra(EXTRA_IS_FROM_SUW, false); |
The Android Open Source Project | afc4ab2 | 2009-03-03 19:32:34 -0800 | [diff] [blame] | 81 | |
Fan Zhang | beddff8 | 2016-11-18 11:10:05 -0800 | [diff] [blame] | 82 | final AutoTimeZonePreferenceController autoTimeZonePreferenceController = |
| 83 | new AutoTimeZonePreferenceController( |
| 84 | activity, this /* UpdateTimeAndDateCallback */, isFromSUW); |
| 85 | final AutoTimePreferenceController autoTimePreferenceController = |
| 86 | new AutoTimePreferenceController( |
| 87 | activity, this /* UpdateTimeAndDateCallback */); |
Joachim Sauer | 95beae0 | 2017-06-01 11:23:28 +0100 | [diff] [blame] | 88 | final AutoTimeFormatPreferenceController autoTimeFormatPreferenceController = |
| 89 | new AutoTimeFormatPreferenceController( |
| 90 | activity, this /* UpdateTimeAndDateCallback */); |
Fan Zhang | beddff8 | 2016-11-18 11:10:05 -0800 | [diff] [blame] | 91 | controllers.add(autoTimeZonePreferenceController); |
| 92 | controllers.add(autoTimePreferenceController); |
Joachim Sauer | 95beae0 | 2017-06-01 11:23:28 +0100 | [diff] [blame] | 93 | controllers.add(autoTimeFormatPreferenceController); |
Fan Zhang | 3d2efae | 2016-11-17 10:57:15 -0800 | [diff] [blame] | 94 | |
Fan Zhang | beddff8 | 2016-11-18 11:10:05 -0800 | [diff] [blame] | 95 | controllers.add(new TimeFormatPreferenceController( |
| 96 | activity, this /* UpdateTimeAndDateCallback */, isFromSUW)); |
| 97 | controllers.add(new TimeZonePreferenceController( |
| 98 | activity, autoTimeZonePreferenceController)); |
| 99 | controllers.add(new TimePreferenceController( |
| 100 | activity, this /* UpdateTimeAndDateCallback */, autoTimePreferenceController)); |
| 101 | controllers.add(new DatePreferenceController( |
| 102 | activity, this /* UpdateTimeAndDateCallback */, autoTimePreferenceController)); |
| 103 | return controllers; |
The Android Open Source Project | afc4ab2 | 2009-03-03 19:32:34 -0800 | [diff] [blame] | 104 | } |
Amith Yamasani | 1bb6db5 | 2010-09-17 13:34:47 -0700 | [diff] [blame] | 105 | |
Fan Zhang | 3d2efae | 2016-11-17 10:57:15 -0800 | [diff] [blame] | 106 | @Override |
Freeman Ng | 7f6f6e1 | 2011-06-02 15:44:51 -0700 | [diff] [blame] | 107 | public void updateTimeAndDateDisplay(Context context) { |
Fan Zhang | beddff8 | 2016-11-18 11:10:05 -0800 | [diff] [blame] | 108 | updatePreferenceStates(); |
The Android Open Source Project | afc4ab2 | 2009-03-03 19:32:34 -0800 | [diff] [blame] | 109 | } |
| 110 | |
| 111 | @Override |
| 112 | public Dialog onCreateDialog(int id) { |
The Android Open Source Project | afc4ab2 | 2009-03-03 19:32:34 -0800 | [diff] [blame] | 113 | switch (id) { |
Fan Zhang | beddff8 | 2016-11-18 11:10:05 -0800 | [diff] [blame] | 114 | case DatePreferenceController.DIALOG_DATEPICKER: |
| 115 | return getPreferenceController(DatePreferenceController.class) |
| 116 | .buildDatePicker(getActivity()); |
| 117 | case TimePreferenceController.DIALOG_TIMEPICKER: |
| 118 | return getPreferenceController(TimePreferenceController.class) |
| 119 | .buildTimePicker(getActivity()); |
Fan Zhang | 3d2efae | 2016-11-17 10:57:15 -0800 | [diff] [blame] | 120 | default: |
| 121 | throw new IllegalArgumentException(); |
The Android Open Source Project | afc4ab2 | 2009-03-03 19:32:34 -0800 | [diff] [blame] | 122 | } |
Elliott Hughes | b85d48f | 2013-06-24 16:11:19 -0700 | [diff] [blame] | 123 | } |
The Android Open Source Project | afc4ab2 | 2009-03-03 19:32:34 -0800 | [diff] [blame] | 124 | |
Fan Zhang | 20374fd | 2016-09-23 12:10:38 -0700 | [diff] [blame] | 125 | @Override |
| 126 | public int getDialogMetricsCategory(int dialogId) { |
| 127 | switch (dialogId) { |
Fan Zhang | beddff8 | 2016-11-18 11:10:05 -0800 | [diff] [blame] | 128 | case DatePreferenceController.DIALOG_DATEPICKER: |
Fan Zhang | 20374fd | 2016-09-23 12:10:38 -0700 | [diff] [blame] | 129 | return MetricsEvent.DIALOG_DATE_PICKER; |
Fan Zhang | beddff8 | 2016-11-18 11:10:05 -0800 | [diff] [blame] | 130 | case TimePreferenceController.DIALOG_TIMEPICKER: |
Fan Zhang | 20374fd | 2016-09-23 12:10:38 -0700 | [diff] [blame] | 131 | return MetricsEvent.DIALOG_TIME_PICKER; |
| 132 | default: |
| 133 | return 0; |
| 134 | } |
| 135 | } |
| 136 | |
The Android Open Source Project | afc4ab2 | 2009-03-03 19:32:34 -0800 | [diff] [blame] | 137 | @Override |
Fan Zhang | beddff8 | 2016-11-18 11:10:05 -0800 | [diff] [blame] | 138 | public void showTimePicker() { |
| 139 | removeDialog(TimePreferenceController.DIALOG_TIMEPICKER); |
| 140 | showDialog(TimePreferenceController.DIALOG_TIMEPICKER); |
The Android Open Source Project | afc4ab2 | 2009-03-03 19:32:34 -0800 | [diff] [blame] | 141 | } |
Amith Yamasani | 1bb6db5 | 2010-09-17 13:34:47 -0700 | [diff] [blame] | 142 | |
The Android Open Source Project | afc4ab2 | 2009-03-03 19:32:34 -0800 | [diff] [blame] | 143 | @Override |
Fan Zhang | beddff8 | 2016-11-18 11:10:05 -0800 | [diff] [blame] | 144 | public void showDatePicker() { |
| 145 | showDialog(DatePreferenceController.DIALOG_DATEPICKER); |
The Android Open Source Project | afc4ab2 | 2009-03-03 19:32:34 -0800 | [diff] [blame] | 146 | } |
Amith Yamasani | 1bb6db5 | 2010-09-17 13:34:47 -0700 | [diff] [blame] | 147 | |
Jason Monk | 9d80eea | 2015-11-20 14:27:51 -0500 | [diff] [blame] | 148 | private static class SummaryProvider implements SummaryLoader.SummaryProvider { |
| 149 | |
| 150 | private final Context mContext; |
| 151 | private final SummaryLoader mSummaryLoader; |
| 152 | |
| 153 | public SummaryProvider(Context context, SummaryLoader summaryLoader) { |
| 154 | mContext = context; |
| 155 | mSummaryLoader = summaryLoader; |
| 156 | } |
| 157 | |
| 158 | @Override |
| 159 | public void setListening(boolean listening) { |
| 160 | if (listening) { |
| 161 | final Calendar now = Calendar.getInstance(); |
jackqdyulei | fbab059 | 2016-09-27 15:56:48 -0700 | [diff] [blame] | 162 | mSummaryLoader.setSummary(this, ZoneGetter.getTimeZoneOffsetAndName(mContext, |
Jason Monk | 9d80eea | 2015-11-20 14:27:51 -0500 | [diff] [blame] | 163 | now.getTimeZone(), now.getTime())); |
| 164 | } |
| 165 | } |
| 166 | } |
| 167 | |
| 168 | public static final SummaryLoader.SummaryProviderFactory SUMMARY_PROVIDER_FACTORY |
| 169 | = new SummaryLoader.SummaryProviderFactory() { |
| 170 | @Override |
| 171 | public SummaryLoader.SummaryProvider createSummaryProvider(Activity activity, |
Fan Zhang | 3d2efae | 2016-11-17 10:57:15 -0800 | [diff] [blame] | 172 | SummaryLoader summaryLoader) { |
Jason Monk | 9d80eea | 2015-11-20 14:27:51 -0500 | [diff] [blame] | 173 | return new SummaryProvider(activity, summaryLoader); |
| 174 | } |
| 175 | }; |
Fyodor Kupolov | ca060e3 | 2016-06-24 13:01:11 -0700 | [diff] [blame] | 176 | |
Fan Zhang | beddff8 | 2016-11-18 11:10:05 -0800 | [diff] [blame] | 177 | |
Fyodor Kupolov | ca060e3 | 2016-06-24 13:01:11 -0700 | [diff] [blame] | 178 | public static final Indexable.SearchIndexProvider SEARCH_INDEX_DATA_PROVIDER = |
| 179 | new DateTimeSearchIndexProvider(); |
| 180 | |
| 181 | private static class DateTimeSearchIndexProvider extends BaseSearchIndexProvider { |
| 182 | |
| 183 | @Override |
| 184 | public List<SearchIndexableResource> getXmlResourcesToIndex( |
| 185 | Context context, boolean enabled) { |
| 186 | List<SearchIndexableResource> result = new ArrayList<>(); |
| 187 | // Remove data/time settings from search in demo mode |
| 188 | if (UserManager.isDeviceInDemoMode(context)) { |
| 189 | return result; |
| 190 | } |
| 191 | |
| 192 | SearchIndexableResource sir = new SearchIndexableResource(context); |
| 193 | sir.xmlResId = R.xml.date_time_prefs; |
| 194 | result.add(sir); |
| 195 | |
| 196 | return result; |
| 197 | } |
| 198 | } |
The Android Open Source Project | afc4ab2 | 2009-03-03 19:32:34 -0800 | [diff] [blame] | 199 | } |