1 /*
2  * Copyright (C) 2020 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.widget;
18 
19 import androidx.preference.Preference;
20 
21 import com.android.settings.dashboard.DashboardFragment;
22 import com.android.settings.overlay.FeatureFactory;
23 import com.android.settingslib.RestrictedLockUtils.EnforcedAdmin;
24 import com.android.settingslib.RestrictedSwitchPreference;
25 import com.android.settingslib.core.instrumentation.MetricsFeatureProvider;
26 
27 /**
28  * The switch controller that is used to update the switch widget in the PrimarySwitchPreference
29  * and RestrictedSwitchPreference layouts.
30  */
31 public class GenericSwitchController extends SwitchWidgetController implements
32         Preference.OnPreferenceChangeListener {
33 
34     private Preference mPreference;
35     private MetricsFeatureProvider mMetricsFeatureProvider;
36 
GenericSwitchController(PrimarySwitchPreference preference)37     public GenericSwitchController(PrimarySwitchPreference preference) {
38         setPreference(preference);
39     }
40 
GenericSwitchController(RestrictedSwitchPreference preference)41     public GenericSwitchController(RestrictedSwitchPreference preference) {
42         setPreference(preference);
43     }
44 
setPreference(Preference preference)45     private void setPreference(Preference preference) {
46         mPreference = preference;
47         mMetricsFeatureProvider =
48                 FeatureFactory.getFactory(preference.getContext()).getMetricsFeatureProvider();
49     }
50 
51     @Override
setTitle(String title)52     public void setTitle(String title) {
53     }
54 
55     @Override
startListening()56     public void startListening() {
57         mPreference.setOnPreferenceChangeListener(this);
58     }
59 
60     @Override
stopListening()61     public void stopListening() {
62         mPreference.setOnPreferenceChangeListener(null);
63     }
64 
65     @Override
setChecked(boolean checked)66     public void setChecked(boolean checked) {
67         if (mPreference instanceof PrimarySwitchPreference) {
68             ((PrimarySwitchPreference) mPreference).setChecked(checked);
69         } else if (mPreference instanceof RestrictedSwitchPreference) {
70             ((RestrictedSwitchPreference) mPreference).setChecked(checked);
71         }
72     }
73 
74     @Override
isChecked()75     public boolean isChecked() {
76         if (mPreference instanceof PrimarySwitchPreference) {
77             return ((PrimarySwitchPreference) mPreference).isChecked();
78         } else if (mPreference instanceof RestrictedSwitchPreference) {
79             return ((RestrictedSwitchPreference) mPreference).isChecked();
80         }
81         return false;
82     }
83 
84     @Override
setEnabled(boolean enabled)85     public void setEnabled(boolean enabled) {
86         if (mPreference instanceof PrimarySwitchPreference) {
87             ((PrimarySwitchPreference) mPreference).setSwitchEnabled(enabled);
88         } else if (mPreference instanceof RestrictedSwitchPreference) {
89             ((RestrictedSwitchPreference) mPreference).setEnabled(enabled);
90         }
91     }
92 
93     @Override
onPreferenceChange(Preference preference, Object newValue)94     public boolean onPreferenceChange(Preference preference, Object newValue) {
95         if (mListener != null) {
96             final boolean result = mListener.onSwitchToggled((Boolean) newValue);
97             if (result) {
98                 mMetricsFeatureProvider.logClickedPreference(preference,
99                         preference.getExtras().getInt(DashboardFragment.CATEGORY));
100             }
101             return result;
102         }
103         return false;
104     }
105 
106     @Override
setDisabledByAdmin(EnforcedAdmin admin)107     public void setDisabledByAdmin(EnforcedAdmin admin) {
108         if (mPreference instanceof PrimarySwitchPreference) {
109             ((PrimarySwitchPreference) mPreference).setDisabledByAdmin(admin);
110         } else if (mPreference instanceof RestrictedSwitchPreference) {
111             ((RestrictedSwitchPreference) mPreference).setDisabledByAdmin(admin);
112         }
113     }
114 }
115