• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (C) 2017 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 package com.android.car.settings.datetime;
17 
18 import android.content.BroadcastReceiver;
19 import android.content.Context;
20 import android.content.Intent;
21 import android.content.IntentFilter;
22 import android.os.Bundle;
23 import android.provider.Settings;
24 
25 import androidx.car.widget.ListItem;
26 import androidx.car.widget.ListItemProvider;
27 import androidx.car.widget.ListItemProvider.ListProvider;
28 
29 import com.android.car.settings.R;
30 import com.android.car.settings.common.ListItemSettingsFragment;
31 
32 import java.util.ArrayList;
33 import java.util.List;
34 
35 /**
36  * Configures date and time.
37  */
38 public class DatetimeSettingsFragment extends ListItemSettingsFragment {
39     private static final IntentFilter TIME_CHANGED_FILTER =
40             new IntentFilter(Intent.ACTION_TIME_CHANGED);
41 
42     // Minimum time is Nov 5, 2007, 0:00.
43     public static final long MIN_DATE = 1194220800000L;
44 
45     private List<ListItem> mListItems;
46 
47     private final TimeChangedBroadCastReceiver mTimeChangedBroadCastReceiver =
48             new TimeChangedBroadCastReceiver();
49 
50     /**
51      * Observes list refreshes.
52      */
53     public interface ListRefreshObserver {
54 
55         /**
56          * Gets called when the list is about to refresh. Subclass should set the view to ListItem
57          * state, so can be reflected on next fresh.
58          */
onPreRefresh()59         void onPreRefresh();
60     }
61 
getInstance()62     public static DatetimeSettingsFragment getInstance() {
63         DatetimeSettingsFragment datetimeSettingsFragment = new DatetimeSettingsFragment();
64         Bundle bundle = ListItemSettingsFragment.getBundle();
65         bundle.putInt(EXTRA_TITLE_ID, R.string.date_and_time_settings_title);
66         datetimeSettingsFragment.setArguments(bundle);
67         return datetimeSettingsFragment;
68     }
69 
70     @Override
getItemProvider()71     public ListItemProvider getItemProvider() {
72         return new ListProvider(initializeListItems());
73     }
74 
initializeListItems()75     private List<ListItem> initializeListItems() {
76         mListItems = new ArrayList<>();
77         mListItems.add(new DateTimeToggleLineItem(getContext(),
78                 getString(R.string.date_time_auto),
79                 getString(R.string.date_time_auto_summary),
80                 Settings.Global.AUTO_TIME));
81         mListItems.add(new DateTimeToggleLineItem(getContext(),
82                 getString(R.string.zone_auto),
83                 getString(R.string.zone_auto_summary),
84                 Settings.Global.AUTO_TIME_ZONE));
85         mListItems.add(new SetDateLineItem(getContext(), getFragmentController()));
86         mListItems.add(new SetTimeLineItem(getContext(), getFragmentController()));
87         mListItems.add(new SetTimeZoneLineItem(getContext(), getFragmentController()));
88         mListItems.add(new TimeFormatToggleLineItem(getContext()));
89         return mListItems;
90     }
91 
92     @Override
onStart()93     public void onStart() {
94         super.onStart();
95         getActivity().registerReceiver(mTimeChangedBroadCastReceiver, TIME_CHANGED_FILTER);
96         refreshList();
97     }
98 
99     @Override
onStop()100     public void onStop() {
101         super.onStop();
102         getActivity().unregisterReceiver(mTimeChangedBroadCastReceiver);
103     }
104 
105     private class TimeChangedBroadCastReceiver extends BroadcastReceiver {
106         @Override
onReceive(Context context, Intent intent)107         public void onReceive(Context context, Intent intent) {
108             for (ListItem listItem : mListItems) {
109                 if (!(listItem instanceof ListRefreshObserver)) {
110                     throw new IllegalArgumentException(
111                             "all list items should be ListRefreshObserver");
112                 }
113                 ((ListRefreshObserver) listItem).onPreRefresh();
114             }
115             refreshList();
116         }
117     }
118 }
119