• 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 package com.android.settings.security;
17 
18 import static com.android.settings.security.EncryptionStatusPreferenceController
19         .PREF_KEY_ENCRYPTION_SECURITY_PAGE;
20 
21 import android.app.Activity;
22 import android.content.Context;
23 import android.content.Intent;
24 import android.hardware.fingerprint.FingerprintManager;
25 import android.provider.SearchIndexableResource;
26 
27 import com.android.internal.logging.nano.MetricsProto;
28 import com.android.settings.R;
29 import com.android.settings.Utils;
30 import com.android.settings.dashboard.DashboardFragment;
31 import com.android.settings.dashboard.SummaryLoader;
32 import com.android.settings.enterprise.EnterprisePrivacyPreferenceController;
33 import com.android.settings.enterprise.ManageDeviceAdminPreferenceController;
34 import com.android.settings.fingerprint.FingerprintProfileStatusPreferenceController;
35 import com.android.settings.fingerprint.FingerprintStatusPreferenceController;
36 import com.android.settings.location.LocationPreferenceController;
37 import com.android.settings.search.BaseSearchIndexProvider;
38 import com.android.settings.security.screenlock.LockScreenPreferenceController;
39 import com.android.settings.security.trustagent.ManageTrustAgentsPreferenceController;
40 import com.android.settings.security.trustagent.TrustAgentListPreferenceController;
41 import com.android.settings.widget.PreferenceCategoryController;
42 import com.android.settingslib.core.AbstractPreferenceController;
43 import com.android.settingslib.core.lifecycle.Lifecycle;
44 
45 import java.util.ArrayList;
46 import java.util.List;
47 
48 public class SecuritySettings extends DashboardFragment {
49 
50     private static final String TAG = "SecuritySettings";
51     private static final String SECURITY_CATEGORY = "security_category";
52     private static final String WORK_PROFILE_SECURITY_CATEGORY = "security_category_profile";
53 
54     public static final int CHANGE_TRUST_AGENT_SETTINGS = 126;
55     public static final int UNIFY_LOCK_CONFIRM_DEVICE_REQUEST = 128;
56     public static final int UNIFY_LOCK_CONFIRM_PROFILE_REQUEST = 129;
57     public static final int UNUNIFY_LOCK_CONFIRM_DEVICE_REQUEST = 130;
58 
59     @Override
getMetricsCategory()60     public int getMetricsCategory() {
61         return MetricsProto.MetricsEvent.SECURITY;
62     }
63 
64     @Override
getPreferenceScreenResId()65     protected int getPreferenceScreenResId() {
66         return R.xml.security_dashboard_settings;
67     }
68 
69     @Override
getLogTag()70     protected String getLogTag() {
71         return TAG;
72     }
73 
74     @Override
getHelpResource()75     public int getHelpResource() {
76         return R.string.help_url_security;
77     }
78 
79     @Override
createPreferenceControllers(Context context)80     protected List<AbstractPreferenceController> createPreferenceControllers(Context context) {
81         return buildPreferenceControllers(context, getLifecycle(), this /* host*/);
82     }
83 
84     /**
85      * see confirmPatternThenDisableAndClear
86      */
87     @Override
onActivityResult(int requestCode, int resultCode, Intent data)88     public void onActivityResult(int requestCode, int resultCode, Intent data) {
89         if (use(TrustAgentListPreferenceController.class)
90                 .handleActivityResult(requestCode, resultCode)) {
91             return;
92         }
93         if (use(LockUnificationPreferenceController.class)
94                 .handleActivityResult(requestCode, resultCode, data)) {
95             return;
96         }
97         super.onActivityResult(requestCode, resultCode, data);
98     }
99 
launchConfirmDeviceLockForUnification()100     void launchConfirmDeviceLockForUnification() {
101         use(LockUnificationPreferenceController.class)
102                 .launchConfirmDeviceLockForUnification();
103     }
104 
unifyUncompliantLocks()105     void unifyUncompliantLocks() {
106         use(LockUnificationPreferenceController.class).unifyUncompliantLocks();
107     }
108 
updateUnificationPreference()109     void updateUnificationPreference() {
110         use(LockUnificationPreferenceController.class).updateState(null);
111     }
112 
buildPreferenceControllers(Context context, Lifecycle lifecycle, SecuritySettings host)113     private static List<AbstractPreferenceController> buildPreferenceControllers(Context context,
114             Lifecycle lifecycle, SecuritySettings host) {
115         final List<AbstractPreferenceController> controllers = new ArrayList<>();
116         controllers.add(new LocationPreferenceController(context, lifecycle));
117         controllers.add(new ManageDeviceAdminPreferenceController(context));
118         controllers.add(new EnterprisePrivacyPreferenceController(context));
119         controllers.add(new ManageTrustAgentsPreferenceController(context));
120         controllers.add(new ScreenPinningPreferenceController(context));
121         controllers.add(new SimLockPreferenceController(context));
122         controllers.add(new ShowPasswordPreferenceController(context));
123         controllers.add(new EncryptionStatusPreferenceController(context,
124                 PREF_KEY_ENCRYPTION_SECURITY_PAGE));
125         controllers.add(new TrustAgentListPreferenceController(context, host, lifecycle));
126 
127         final List<AbstractPreferenceController> securityPreferenceControllers = new ArrayList<>();
128         securityPreferenceControllers.add(new FingerprintStatusPreferenceController(context));
129         securityPreferenceControllers.add(new LockScreenPreferenceController(context, lifecycle));
130         securityPreferenceControllers.add(new ChangeScreenLockPreferenceController(context, host));
131         controllers.add(new PreferenceCategoryController(context, SECURITY_CATEGORY)
132                 .setChildren(securityPreferenceControllers));
133         controllers.addAll(securityPreferenceControllers);
134 
135         final List<AbstractPreferenceController> profileSecurityControllers = new ArrayList<>();
136         profileSecurityControllers.add(new ChangeProfileScreenLockPreferenceController(
137                 context, host));
138         profileSecurityControllers.add(new LockUnificationPreferenceController(context, host));
139         profileSecurityControllers.add(new VisiblePatternProfilePreferenceController(
140                 context, lifecycle));
141         profileSecurityControllers.add(new FingerprintProfileStatusPreferenceController(context));
142         controllers.add(new PreferenceCategoryController(context, WORK_PROFILE_SECURITY_CATEGORY)
143                 .setChildren(profileSecurityControllers));
144         controllers.addAll(profileSecurityControllers);
145 
146         return controllers;
147     }
148 
149     /**
150      * For Search. Please keep it in sync when updating "createPreferenceHierarchy()"
151      */
152     public static final SearchIndexProvider SEARCH_INDEX_DATA_PROVIDER =
153             new BaseSearchIndexProvider() {
154 
155                 @Override
156                 public List<SearchIndexableResource> getXmlResourcesToIndex(
157                         Context context, boolean enabled) {
158                     final List<SearchIndexableResource> index = new ArrayList<>();
159                     // Append the rest of the settings
160                     final SearchIndexableResource sir = new SearchIndexableResource(context);
161                     sir.xmlResId = R.xml.security_dashboard_settings;
162                     index.add(sir);
163                     return index;
164                 }
165 
166                 @Override
167                 public List<AbstractPreferenceController> createPreferenceControllers(Context
168                         context) {
169                     return buildPreferenceControllers(context, null /* lifecycle */,
170                             null /* host*/);
171                 }
172             };
173 
174     static class SummaryProvider implements SummaryLoader.SummaryProvider {
175 
176         private final Context mContext;
177         private final SummaryLoader mSummaryLoader;
178 
SummaryProvider(Context context, SummaryLoader summaryLoader)179         public SummaryProvider(Context context, SummaryLoader summaryLoader) {
180             mContext = context;
181             mSummaryLoader = summaryLoader;
182         }
183 
184         @Override
setListening(boolean listening)185         public void setListening(boolean listening) {
186             if (listening) {
187                 final FingerprintManager fpm =
188                         Utils.getFingerprintManagerOrNull(mContext);
189                 if (fpm != null && fpm.isHardwareDetected()) {
190                     mSummaryLoader.setSummary(this,
191                             mContext.getString(R.string.security_dashboard_summary));
192                 } else {
193                     mSummaryLoader.setSummary(this, mContext.getString(
194                             R.string.security_dashboard_summary_no_fingerprint));
195                 }
196             }
197         }
198     }
199 
200     public static final SummaryLoader.SummaryProviderFactory SUMMARY_PROVIDER_FACTORY =
201             new SummaryLoader.SummaryProviderFactory() {
202                 @Override
203                 public SummaryLoader.SummaryProvider createSummaryProvider(Activity activity,
204                         SummaryLoader summaryLoader) {
205                     return new SummaryProvider(activity, summaryLoader);
206                 }
207             };
208 }
209