OSDN Git Service

Merge changes from topic "am-e8b13d24-dee0-4f84-89d4-8a7d110f6ec1" into oc-dev am...
[android-x86/packages-apps-Settings.git] / src / com / android / settings / DateTimeSettings.java
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.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;
40
41 import java.util.ArrayList;
42 import java.util.Calendar;
43 import java.util.List;
44
45 public class DateTimeSettings extends DashboardFragment implements
46         TimePreferenceController.TimePreferenceHost, DatePreferenceController.DatePreferenceHost {
47
48     private static final String TAG = "DateTimeSettings";
49
50     // have we been launched from the setup wizard?
51     protected static final String EXTRA_IS_FROM_SUW = "firstRun";
52
53     @Override
54     public int getMetricsCategory() {
55         return MetricsEvent.DATE_TIME;
56     }
57
58     @Override
59     protected String getLogTag() {
60         return TAG;
61     }
62
63     @Override
64     protected int getPreferenceScreenResId() {
65         return R.xml.date_time_prefs;
66     }
67
68     @Override
69     public void onAttach(Context context) {
70         super.onAttach(context);
71         getLifecycle().addObserver(new TimeChangeListenerMixin(context, this));
72     }
73
74     @Override
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);
80
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);
89
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));
98         return controllers;
99     }
100
101     @Override
102     public void updateTimeAndDateDisplay(Context context) {
103         updatePreferenceStates();
104     }
105
106     @Override
107     public Dialog onCreateDialog(int id) {
108         switch (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());
115             default:
116                 throw new IllegalArgumentException();
117         }
118     }
119
120     @Override
121     public int getDialogMetricsCategory(int dialogId) {
122         switch (dialogId) {
123             case DatePreferenceController.DIALOG_DATEPICKER:
124                 return MetricsEvent.DIALOG_DATE_PICKER;
125             case TimePreferenceController.DIALOG_TIMEPICKER:
126                 return MetricsEvent.DIALOG_TIME_PICKER;
127             default:
128                 return 0;
129         }
130     }
131
132     @Override
133     public void showTimePicker() {
134         removeDialog(TimePreferenceController.DIALOG_TIMEPICKER);
135         showDialog(TimePreferenceController.DIALOG_TIMEPICKER);
136     }
137
138     @Override
139     public void showDatePicker() {
140         showDialog(DatePreferenceController.DIALOG_DATEPICKER);
141     }
142
143     private static class SummaryProvider implements SummaryLoader.SummaryProvider {
144
145         private final Context mContext;
146         private final SummaryLoader mSummaryLoader;
147
148         public SummaryProvider(Context context, SummaryLoader summaryLoader) {
149             mContext = context;
150             mSummaryLoader = summaryLoader;
151         }
152
153         @Override
154         public void setListening(boolean listening) {
155             if (listening) {
156                 final Calendar now = Calendar.getInstance();
157                 mSummaryLoader.setSummary(this, ZoneGetter.getTimeZoneOffsetAndName(mContext,
158                         now.getTimeZone(), now.getTime()));
159             }
160         }
161     }
162
163     public static final SummaryLoader.SummaryProviderFactory SUMMARY_PROVIDER_FACTORY
164             = new SummaryLoader.SummaryProviderFactory() {
165         @Override
166         public SummaryLoader.SummaryProvider createSummaryProvider(Activity activity,
167                 SummaryLoader summaryLoader) {
168             return new SummaryProvider(activity, summaryLoader);
169         }
170     };
171
172
173     public static final Indexable.SearchIndexProvider SEARCH_INDEX_DATA_PROVIDER =
174             new DateTimeSearchIndexProvider();
175
176     private static class DateTimeSearchIndexProvider extends BaseSearchIndexProvider {
177
178         @Override
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)) {
184                 return result;
185             }
186
187             SearchIndexableResource sir = new SearchIndexableResource(context);
188             sir.xmlResId = R.xml.date_time_prefs;
189             result.add(sir);
190
191             return result;
192         }
193     }
194 }