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.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 }
    195