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