Home | History | Annotate | Download | only in settings
      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
     55     public int getMetricsCategory() {
     56         return MetricsEvent.DATE_TIME;
     57     }
     58 
     59     @Override
     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
     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
    107     public void updateTimeAndDateDisplay(Context context) {
    108         updatePreferenceStates();
    109     }
    110 
    111     @Override
    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
    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
    138     public void showTimePicker() {
    139         removeDialog(TimePreferenceController.DIALOG_TIMEPICKER);
    140         showDialog(TimePreferenceController.DIALOG_TIMEPICKER);
    141     }
    142 
    143     @Override
    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 
    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();
    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
    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