• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (C) 2016 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.datetime;
18 
19 import static android.app.time.Capabilities.CAPABILITY_POSSESSED;
20 
21 import android.app.time.TimeManager;
22 import android.app.time.TimeZoneCapabilities;
23 import android.content.Context;
24 
25 import androidx.annotation.VisibleForTesting;
26 import androidx.preference.Preference;
27 
28 import com.android.settings.core.PreferenceControllerMixin;
29 import com.android.settingslib.RestrictedPreference;
30 import com.android.settingslib.core.AbstractPreferenceController;
31 import com.android.settingslib.datetime.ZoneGetter;
32 
33 import java.util.Calendar;
34 
35 public class TimeZonePreferenceController extends AbstractPreferenceController
36         implements PreferenceControllerMixin {
37 
38     private static final String KEY_TIMEZONE = "timezone";
39 
40     private final TimeManager mTimeManager;
41 
TimeZonePreferenceController(Context context)42     public TimeZonePreferenceController(Context context) {
43         super(context);
44         mTimeManager = context.getSystemService(TimeManager.class);
45     }
46 
47     @Override
updateState(Preference preference)48     public void updateState(Preference preference) {
49         if (!(preference instanceof RestrictedPreference)) {
50             return;
51         }
52         preference.setSummary(getTimeZoneOffsetAndName());
53         if (!((RestrictedPreference) preference).isDisabledByAdmin()) {
54             boolean enableManualTimeZoneSelection = shouldEnableManualTimeZoneSelection();
55             preference.setEnabled(enableManualTimeZoneSelection);
56         }
57     }
58 
59     @Override
isAvailable()60     public boolean isAvailable() {
61         return true;
62     }
63 
64     @Override
getPreferenceKey()65     public String getPreferenceKey() {
66         return KEY_TIMEZONE;
67     }
68 
69     @VisibleForTesting
getTimeZoneOffsetAndName()70     CharSequence getTimeZoneOffsetAndName() {
71         final Calendar now = Calendar.getInstance();
72         return ZoneGetter.getTimeZoneOffsetAndName(mContext,
73                 now.getTimeZone(), now.getTime());
74     }
75 
shouldEnableManualTimeZoneSelection()76     private boolean shouldEnableManualTimeZoneSelection() {
77         TimeZoneCapabilities timeZoneCapabilities =
78                 mTimeManager.getTimeZoneCapabilitiesAndConfig().getCapabilities();
79         int suggestManualTimeZoneCapability =
80                 timeZoneCapabilities.getSetManualTimeZoneCapability();
81         return suggestManualTimeZoneCapability == CAPABILITY_POSSESSED;
82     }
83 }
84