• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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 
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;
25 
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.AutoTimeFormatPreferenceController;
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;
34 import com.android.settings.datetime.TimeFormatPreferenceController;
35 import com.android.settings.datetime.TimePreferenceController;
36 import com.android.settings.datetime.TimeZonePreferenceController;
37 import com.android.settings.search.BaseSearchIndexProvider;
38 import com.android.settings.search.Indexable;
39 import com.android.settingslib.core.AbstractPreferenceController;
40 import com.android.settingslib.datetime.ZoneGetter;
41 
42 import java.util.ArrayList;
43 import java.util.Calendar;
44 import java.util.List;
45 
46 public class DateTimeSettings extends DashboardFragment implements
47         TimePreferenceController.TimePreferenceHost, DatePreferenceController.DatePreferenceHost {
48 
49     private static final String TAG = "DateTimeSettings";
50 
51     // have we been launched from the setup wizard?
52     protected static final String EXTRA_IS_FROM_SUW = "firstRun";
53 
54     @Override
getMetricsCategory()55     public int getMetricsCategory() {
56         return MetricsEvent.DATE_TIME;
57     }
58 
59     @Override
getLogTag()60     protected String getLogTag() {
61         return TAG;
62     }
63 
64     @Override
getPreferenceScreenResId()65     protected int getPreferenceScreenResId() {
66         return R.xml.date_time_prefs;
67     }
68 
69     @Override
onAttach(Context context)70     public void onAttach(Context context) {
71         super.onAttach(context);
72         getLifecycle().addObserver(new TimeChangeListenerMixin(context, this));
73     }
74 
75     @Override
createPreferenceControllers(Context context)76     protected List<AbstractPreferenceController> createPreferenceControllers(Context context) {
77         final List<AbstractPreferenceController> controllers = new ArrayList<>();
78         final Activity activity = getActivity();
79         final Intent intent = activity.getIntent();
80         final boolean isFromSUW = intent.getBooleanExtra(EXTRA_IS_FROM_SUW, false);
81 
82         final AutoTimeZonePreferenceController autoTimeZonePreferenceController =
83                 new AutoTimeZonePreferenceController(
84                         activity, this /* UpdateTimeAndDateCallback */, isFromSUW);
85         final AutoTimePreferenceController autoTimePreferenceController =
86                 new AutoTimePreferenceController(
87                         activity, this /* UpdateTimeAndDateCallback */);
88         final AutoTimeFormatPreferenceController autoTimeFormatPreferenceController =
89                 new AutoTimeFormatPreferenceController(
90                         activity, this /* UpdateTimeAndDateCallback */);
91         controllers.add(autoTimeZonePreferenceController);
92         controllers.add(autoTimePreferenceController);
93         controllers.add(autoTimeFormatPreferenceController);
94 
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;
104     }
105 
106     @Override
updateTimeAndDateDisplay(Context context)107     public void updateTimeAndDateDisplay(Context context) {
108         updatePreferenceStates();
109     }
110 
111     @Override
onCreateDialog(int id)112     public Dialog onCreateDialog(int id) {
113         switch (id) {
114             case DatePreferenceController.DIALOG_DATEPICKER:
115                 return use(DatePreferenceController.class)
116                         .buildDatePicker(getActivity());
117             case TimePreferenceController.DIALOG_TIMEPICKER:
118                 return use(TimePreferenceController.class)
119                         .buildTimePicker(getActivity());
120             default:
121                 throw new IllegalArgumentException();
122         }
123     }
124 
125     @Override
getDialogMetricsCategory(int dialogId)126     public int getDialogMetricsCategory(int dialogId) {
127         switch (dialogId) {
128             case DatePreferenceController.DIALOG_DATEPICKER:
129                 return MetricsEvent.DIALOG_DATE_PICKER;
130             case TimePreferenceController.DIALOG_TIMEPICKER:
131                 return MetricsEvent.DIALOG_TIME_PICKER;
132             default:
133                 return 0;
134         }
135     }
136 
137     @Override
showTimePicker()138     public void showTimePicker() {
139         removeDialog(TimePreferenceController.DIALOG_TIMEPICKER);
140         showDialog(TimePreferenceController.DIALOG_TIMEPICKER);
141     }
142 
143     @Override
showDatePicker()144     public void showDatePicker() {
145         showDialog(DatePreferenceController.DIALOG_DATEPICKER);
146     }
147 
148     private static class SummaryProvider implements SummaryLoader.SummaryProvider {
149 
150         private final Context mContext;
151         private final SummaryLoader mSummaryLoader;
152 
SummaryProvider(Context context, SummaryLoader summaryLoader)153         public SummaryProvider(Context context, SummaryLoader summaryLoader) {
154             mContext = context;
155             mSummaryLoader = summaryLoader;
156         }
157 
158         @Override
setListening(boolean listening)159         public void setListening(boolean listening) {
160             if (listening) {
161                 final Calendar now = Calendar.getInstance();
162                 mSummaryLoader.setSummary(this, ZoneGetter.getTimeZoneOffsetAndName(mContext,
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,
172                 SummaryLoader summaryLoader) {
173             return new SummaryProvider(activity, summaryLoader);
174         }
175     };
176 
177 
178     public static final Indexable.SearchIndexProvider SEARCH_INDEX_DATA_PROVIDER =
179             new DateTimeSearchIndexProvider();
180 
181     private static class DateTimeSearchIndexProvider extends BaseSearchIndexProvider {
182 
183         @Override
getXmlResourcesToIndex( Context context, boolean enabled)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     }
199 }
200