• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (C) 2018 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.phone;
18 
19 import static com.android.settingslib.RestrictedLockUtils.EnforcedAdmin;
20 
21 import android.content.Context;
22 import android.preference.Preference;
23 import android.preference.PreferenceScreen;
24 import android.util.AttributeSet;
25 import android.view.View;
26 import android.widget.TextView;
27 
28 import com.android.settingslib.RestrictedLockUtils;
29 
30 /**
31  * Preference class that supports being disabled by a device admin.
32  *
33  * <p>This class is a mimic of ../../../frameworks/base/packages/SettingsLib/src/com/android
34  * /settingslib/RestrictedPreference.java,
35  * but support framework {@link Preference}.
36  */
37 public class RestrictedPreference extends Preference {
38     private final Context mContext;
39 
40     private boolean mDisabledByAdmin;
41     private EnforcedAdmin mEnforcedAdmin;
42 
RestrictedPreference(Context context, AttributeSet attrs, int defStyleAttr, int defStyleRes)43     public RestrictedPreference(Context context, AttributeSet attrs,
44             int defStyleAttr, int defStyleRes) {
45         super(context, attrs, defStyleAttr, defStyleRes);
46         mContext = context;
47 
48         setLayoutResource(com.android.settingslib.R.layout.preference_two_target);
49         setWidgetLayoutResource(R.layout.restricted_icon);
50     }
51 
RestrictedPreference(Context context, AttributeSet attrs, int defStyleAttr)52     public RestrictedPreference(Context context, AttributeSet attrs, int defStyleAttr) {
53         this(context, attrs, defStyleAttr, 0);
54     }
55 
RestrictedPreference(Context context, AttributeSet attrs)56     public RestrictedPreference(Context context, AttributeSet attrs) {
57         this(context, attrs, android.R.attr.preferenceStyle);
58     }
59 
RestrictedPreference(Context context)60     public RestrictedPreference(Context context) {
61         this(context, null);
62     }
63 
64     @Override
performClick(PreferenceScreen preferenceScreen)65     public void performClick(PreferenceScreen preferenceScreen) {
66         if (mDisabledByAdmin) {
67             RestrictedLockUtils.sendShowAdminSupportDetailsIntent(mContext, mEnforcedAdmin);
68         } else {
69             super.performClick(preferenceScreen);
70         }
71     }
72 
73     @Override
onBindView(View view)74     protected void onBindView(View view) {
75         super.onBindView(view);
76 
77         final View divider = view.findViewById(com.android.settingslib.R.id.two_target_divider);
78         final View widgetFrame = view.findViewById(android.R.id.widget_frame);
79         final View restrictedIcon = view.findViewById(R.id.restricted_icon);
80         final TextView summaryView = view.findViewById(android.R.id.summary);
81         if (divider != null) {
82             divider.setVisibility(mDisabledByAdmin ? View.VISIBLE : View.GONE);
83         }
84         if (widgetFrame != null) {
85             widgetFrame.setVisibility(mDisabledByAdmin ? View.VISIBLE : View.GONE);
86         }
87         if (restrictedIcon != null) {
88             restrictedIcon.setVisibility(mDisabledByAdmin ? View.VISIBLE : View.GONE);
89         }
90         if (summaryView != null && mDisabledByAdmin) {
91             summaryView.setText(com.android.settingslib.R.string.disabled_by_admin_summary_text);
92             summaryView.setVisibility(View.VISIBLE);
93         }
94 
95         if (mDisabledByAdmin) {
96             view.setEnabled(true);
97         }
98     }
99 
100     @Override
setEnabled(boolean enabled)101     public void setEnabled(boolean enabled) {
102         if (enabled && mDisabledByAdmin) {
103             setDisabledByAdmin(null);
104             return;
105         }
106         super.setEnabled(enabled);
107     }
108 
109     /**
110      * Disable this preference based on the enforce admin.
111      *
112      * @param admin Details of the admin who enforced the restriction. If it is {@code null}, then
113      * this preference will be enabled. Otherwise, it will be disabled.
114      */
setDisabledByAdmin(EnforcedAdmin admin)115     public void setDisabledByAdmin(EnforcedAdmin admin) {
116         final boolean disabled = admin != null;
117         mEnforcedAdmin = admin;
118         boolean changed = false;
119         if (mDisabledByAdmin != disabled) {
120             mDisabledByAdmin = disabled;
121             changed = true;
122         }
123         setEnabled(!disabled);
124         if (changed) {
125             notifyChanged();
126         }
127     }
128 }
129