blob: 18a7ee1eb4f1464edf410c7952643115747b6c68 [file] [log] [blame]
The Android Open Source Projectafc4ab22009-03-03 19:32:34 -08001/*
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
17package com.android.settings;
18
Daisuke Miyakawa29e812f2010-09-13 16:50:57 -070019import android.app.Activity;
Amith Yamasanid7993472010-08-18 13:59:28 -070020import android.app.Dialog;
The Android Open Source Projectafc4ab22009-03-03 19:32:34 -080021import android.content.Context;
22import android.content.Intent;
Fyodor Kupolovca060e32016-06-24 13:01:11 -070023import android.os.UserManager;
24import android.provider.SearchIndexableResource;
Fan Zhang20374fd2016-09-23 12:10:38 -070025
Tamas Berghammer265d3c22016-06-22 15:34:45 +010026import com.android.internal.logging.nano.MetricsProto.MetricsEvent;
Fan Zhangbeddff82016-11-18 11:10:05 -080027import com.android.settings.dashboard.DashboardFragment;
Jason Monk9d80eea2015-11-20 14:27:51 -050028import com.android.settings.dashboard.SummaryLoader;
Joachim Sauer95beae02017-06-01 11:23:28 +010029import com.android.settings.datetime.AutoTimeFormatPreferenceController;
Fan Zhangbeddff82016-11-18 11:10:05 -080030import com.android.settings.datetime.AutoTimePreferenceController;
31import com.android.settings.datetime.AutoTimeZonePreferenceController;
32import com.android.settings.datetime.DatePreferenceController;
33import com.android.settings.datetime.TimeChangeListenerMixin;
Fan Zhang3d2efae2016-11-17 10:57:15 -080034import com.android.settings.datetime.TimeFormatPreferenceController;
Fan Zhangbeddff82016-11-18 11:10:05 -080035import com.android.settings.datetime.TimePreferenceController;
36import com.android.settings.datetime.TimeZonePreferenceController;
Fyodor Kupolovca060e32016-06-24 13:01:11 -070037import com.android.settings.search.BaseSearchIndexProvider;
38import com.android.settings.search.Indexable;
Tony Mantler1d583e12017-06-13 13:09:25 -070039import com.android.settingslib.core.AbstractPreferenceController;
Tony Mantler550015e2015-05-28 14:48:29 -070040import com.android.settingslib.datetime.ZoneGetter;
41
Fyodor Kupolovca060e32016-06-24 13:01:11 -070042import java.util.ArrayList;
The Android Open Source Projectafc4ab22009-03-03 19:32:34 -080043import java.util.Calendar;
Fyodor Kupolovca060e32016-06-24 13:01:11 -070044import java.util.List;
The Android Open Source Projectafc4ab22009-03-03 19:32:34 -080045
Fan Zhangbeddff82016-11-18 11:10:05 -080046public class DateTimeSettings extends DashboardFragment implements
47 TimePreferenceController.TimePreferenceHost, DatePreferenceController.DatePreferenceHost {
Sudheer Shanka9c324682016-01-18 11:17:23 +000048
Fan Zhangbeddff82016-11-18 11:10:05 -080049 private static final String TAG = "DateTimeSettings";
Amith Yamasani1bb6db52010-09-17 13:34:47 -070050
Freeman Ng7f6f6e12011-06-02 15:44:51 -070051 // have we been launched from the setup wizard?
Fan Zhang3d2efae2016-11-17 10:57:15 -080052 protected static final String EXTRA_IS_FROM_SUW = "firstRun";
Freeman Ng7f6f6e12011-06-02 15:44:51 -070053
The Android Open Source Projectafc4ab22009-03-03 19:32:34 -080054 @Override
Fan Zhang65076132016-08-08 10:25:13 -070055 public int getMetricsCategory() {
Chris Wren9d1bfd12016-01-26 18:04:01 -050056 return MetricsEvent.DATE_TIME;
Chris Wren8a963ba2015-03-20 10:29:14 -040057 }
58
59 @Override
Fan Zhangbeddff82016-11-18 11:10:05 -080060 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 Mantler1d583e12017-06-13 13:09:25 -070076 protected List<AbstractPreferenceController> getPreferenceControllers(Context context) {
77 final List<AbstractPreferenceController> controllers = new ArrayList<>();
Fan Zhang3d2efae2016-11-17 10:57:15 -080078 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 Projectafc4ab22009-03-03 19:32:34 -080081
Fan Zhangbeddff82016-11-18 11:10:05 -080082 final AutoTimeZonePreferenceController autoTimeZonePreferenceController =
83 new AutoTimeZonePreferenceController(
84 activity, this /* UpdateTimeAndDateCallback */, isFromSUW);
85 final AutoTimePreferenceController autoTimePreferenceController =
86 new AutoTimePreferenceController(
87 activity, this /* UpdateTimeAndDateCallback */);
Joachim Sauer95beae02017-06-01 11:23:28 +010088 final AutoTimeFormatPreferenceController autoTimeFormatPreferenceController =
89 new AutoTimeFormatPreferenceController(
90 activity, this /* UpdateTimeAndDateCallback */);
Fan Zhangbeddff82016-11-18 11:10:05 -080091 controllers.add(autoTimeZonePreferenceController);
92 controllers.add(autoTimePreferenceController);
Joachim Sauer95beae02017-06-01 11:23:28 +010093 controllers.add(autoTimeFormatPreferenceController);
Fan Zhang3d2efae2016-11-17 10:57:15 -080094
Fan Zhangbeddff82016-11-18 11:10:05 -080095 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 Projectafc4ab22009-03-03 19:32:34 -0800104 }
Amith Yamasani1bb6db52010-09-17 13:34:47 -0700105
Fan Zhang3d2efae2016-11-17 10:57:15 -0800106 @Override
Freeman Ng7f6f6e12011-06-02 15:44:51 -0700107 public void updateTimeAndDateDisplay(Context context) {
Fan Zhangbeddff82016-11-18 11:10:05 -0800108 updatePreferenceStates();
The Android Open Source Projectafc4ab22009-03-03 19:32:34 -0800109 }
110
111 @Override
112 public Dialog onCreateDialog(int id) {
The Android Open Source Projectafc4ab22009-03-03 19:32:34 -0800113 switch (id) {
Fan Zhangbeddff82016-11-18 11:10:05 -0800114 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 Zhang3d2efae2016-11-17 10:57:15 -0800120 default:
121 throw new IllegalArgumentException();
The Android Open Source Projectafc4ab22009-03-03 19:32:34 -0800122 }
Elliott Hughesb85d48f2013-06-24 16:11:19 -0700123 }
The Android Open Source Projectafc4ab22009-03-03 19:32:34 -0800124
Fan Zhang20374fd2016-09-23 12:10:38 -0700125 @Override
126 public int getDialogMetricsCategory(int dialogId) {
127 switch (dialogId) {
Fan Zhangbeddff82016-11-18 11:10:05 -0800128 case DatePreferenceController.DIALOG_DATEPICKER:
Fan Zhang20374fd2016-09-23 12:10:38 -0700129 return MetricsEvent.DIALOG_DATE_PICKER;
Fan Zhangbeddff82016-11-18 11:10:05 -0800130 case TimePreferenceController.DIALOG_TIMEPICKER:
Fan Zhang20374fd2016-09-23 12:10:38 -0700131 return MetricsEvent.DIALOG_TIME_PICKER;
132 default:
133 return 0;
134 }
135 }
136
The Android Open Source Projectafc4ab22009-03-03 19:32:34 -0800137 @Override
Fan Zhangbeddff82016-11-18 11:10:05 -0800138 public void showTimePicker() {
139 removeDialog(TimePreferenceController.DIALOG_TIMEPICKER);
140 showDialog(TimePreferenceController.DIALOG_TIMEPICKER);
The Android Open Source Projectafc4ab22009-03-03 19:32:34 -0800141 }
Amith Yamasani1bb6db52010-09-17 13:34:47 -0700142
The Android Open Source Projectafc4ab22009-03-03 19:32:34 -0800143 @Override
Fan Zhangbeddff82016-11-18 11:10:05 -0800144 public void showDatePicker() {
145 showDialog(DatePreferenceController.DIALOG_DATEPICKER);
The Android Open Source Projectafc4ab22009-03-03 19:32:34 -0800146 }
Amith Yamasani1bb6db52010-09-17 13:34:47 -0700147
Jason Monk9d80eea2015-11-20 14:27:51 -0500148 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();
jackqdyuleifbab0592016-09-27 15:56:48 -0700162 mSummaryLoader.setSummary(this, ZoneGetter.getTimeZoneOffsetAndName(mContext,
Jason Monk9d80eea2015-11-20 14:27:51 -0500163 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 Zhang3d2efae2016-11-17 10:57:15 -0800172 SummaryLoader summaryLoader) {
Jason Monk9d80eea2015-11-20 14:27:51 -0500173 return new SummaryProvider(activity, summaryLoader);
174 }
175 };
Fyodor Kupolovca060e32016-06-24 13:01:11 -0700176
Fan Zhangbeddff82016-11-18 11:10:05 -0800177
Fyodor Kupolovca060e32016-06-24 13:01:11 -0700178 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 Projectafc4ab22009-03-03 19:32:34 -0800199}