2 * Copyright (C) 2008 The Android Open Source Project
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
8 * http://www.apache.org/licenses/LICENSE-2.0
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.
17 package com.android.settings;
19 import android.app.Activity;
20 import android.app.Dialog;
21 import android.content.Context;
22 import android.content.Intent;
23 import android.os.UserManager;
24 import android.provider.SearchIndexableResource;
26 import com.android.internal.logging.nano.MetricsProto.MetricsEvent;
27 import com.android.settings.dashboard.DashboardFragment;
28 import com.android.settings.dashboard.SummaryLoader;
29 import com.android.settings.datetime.AutoTimePreferenceController;
30 import com.android.settings.datetime.AutoTimeZonePreferenceController;
31 import com.android.settings.datetime.DatePreferenceController;
32 import com.android.settings.datetime.TimeChangeListenerMixin;
33 import com.android.settings.datetime.TimeFormatPreferenceController;
34 import com.android.settings.datetime.TimePreferenceController;
35 import com.android.settings.datetime.TimeZonePreferenceController;
36 import com.android.settings.search.BaseSearchIndexProvider;
37 import com.android.settings.search.Indexable;
38 import com.android.settingslib.core.AbstractPreferenceController;
39 import com.android.settingslib.datetime.ZoneGetter;
41 import java.util.ArrayList;
42 import java.util.Calendar;
43 import java.util.List;
45 public class DateTimeSettings extends DashboardFragment implements
46 TimePreferenceController.TimePreferenceHost, DatePreferenceController.DatePreferenceHost {
48 private static final String TAG = "DateTimeSettings";
50 // have we been launched from the setup wizard?
51 protected static final String EXTRA_IS_FROM_SUW = "firstRun";
54 public int getMetricsCategory() {
55 return MetricsEvent.DATE_TIME;
59 protected String getLogTag() {
64 protected int getPreferenceScreenResId() {
65 return R.xml.date_time_prefs;
69 public void onAttach(Context context) {
70 super.onAttach(context);
71 getLifecycle().addObserver(new TimeChangeListenerMixin(context, this));
75 protected List<AbstractPreferenceController> getPreferenceControllers(Context context) {
76 final List<AbstractPreferenceController> controllers = new ArrayList<>();
77 final Activity activity = getActivity();
78 final Intent intent = activity.getIntent();
79 final boolean isFromSUW = intent.getBooleanExtra(EXTRA_IS_FROM_SUW, false);
81 final AutoTimeZonePreferenceController autoTimeZonePreferenceController =
82 new AutoTimeZonePreferenceController(
83 activity, this /* UpdateTimeAndDateCallback */, isFromSUW);
84 final AutoTimePreferenceController autoTimePreferenceController =
85 new AutoTimePreferenceController(
86 activity, this /* UpdateTimeAndDateCallback */);
87 controllers.add(autoTimeZonePreferenceController);
88 controllers.add(autoTimePreferenceController);
90 controllers.add(new TimeFormatPreferenceController(
91 activity, this /* UpdateTimeAndDateCallback */, isFromSUW));
92 controllers.add(new TimeZonePreferenceController(
93 activity, autoTimeZonePreferenceController));
94 controllers.add(new TimePreferenceController(
95 activity, this /* UpdateTimeAndDateCallback */, autoTimePreferenceController));
96 controllers.add(new DatePreferenceController(
97 activity, this /* UpdateTimeAndDateCallback */, autoTimePreferenceController));
102 public void updateTimeAndDateDisplay(Context context) {
103 updatePreferenceStates();
107 public Dialog onCreateDialog(int id) {
109 case DatePreferenceController.DIALOG_DATEPICKER:
110 return getPreferenceController(DatePreferenceController.class)
111 .buildDatePicker(getActivity());
112 case TimePreferenceController.DIALOG_TIMEPICKER:
113 return getPreferenceController(TimePreferenceController.class)
114 .buildTimePicker(getActivity());
116 throw new IllegalArgumentException();
121 public int getDialogMetricsCategory(int dialogId) {
123 case DatePreferenceController.DIALOG_DATEPICKER:
124 return MetricsEvent.DIALOG_DATE_PICKER;
125 case TimePreferenceController.DIALOG_TIMEPICKER:
126 return MetricsEvent.DIALOG_TIME_PICKER;
133 public void showTimePicker() {
134 removeDialog(TimePreferenceController.DIALOG_TIMEPICKER);
135 showDialog(TimePreferenceController.DIALOG_TIMEPICKER);
139 public void showDatePicker() {
140 showDialog(DatePreferenceController.DIALOG_DATEPICKER);
143 private static class SummaryProvider implements SummaryLoader.SummaryProvider {
145 private final Context mContext;
146 private final SummaryLoader mSummaryLoader;
148 public SummaryProvider(Context context, SummaryLoader summaryLoader) {
150 mSummaryLoader = summaryLoader;
154 public void setListening(boolean listening) {
156 final Calendar now = Calendar.getInstance();
157 mSummaryLoader.setSummary(this, ZoneGetter.getTimeZoneOffsetAndName(mContext,
158 now.getTimeZone(), now.getTime()));
163 public static final SummaryLoader.SummaryProviderFactory SUMMARY_PROVIDER_FACTORY
164 = new SummaryLoader.SummaryProviderFactory() {
166 public SummaryLoader.SummaryProvider createSummaryProvider(Activity activity,
167 SummaryLoader summaryLoader) {
168 return new SummaryProvider(activity, summaryLoader);
173 public static final Indexable.SearchIndexProvider SEARCH_INDEX_DATA_PROVIDER =
174 new DateTimeSearchIndexProvider();
176 private static class DateTimeSearchIndexProvider extends BaseSearchIndexProvider {
179 public List<SearchIndexableResource> getXmlResourcesToIndex(
180 Context context, boolean enabled) {
181 List<SearchIndexableResource> result = new ArrayList<>();
182 // Remove data/time settings from search in demo mode
183 if (UserManager.isDeviceInDemoMode(context)) {
187 SearchIndexableResource sir = new SearchIndexableResource(context);
188 sir.xmlResId = R.xml.date_time_prefs;