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.PREF_KEY_ENCRYPTION_SECURITY_PAGE;
19 
20 import android.app.settings.SettingsEnums;
21 import android.content.Context;
22 import android.content.Intent;
23 
24 import com.android.settings.R;
25 import com.android.settings.biometrics.face.FaceProfileStatusPreferenceController;
26 import com.android.settings.biometrics.face.FaceStatusPreferenceController;
27 import com.android.settings.biometrics.fingerprint.FingerprintProfileStatusPreferenceController;
28 import com.android.settings.biometrics.fingerprint.FingerprintStatusPreferenceController;
29 import com.android.settings.dashboard.DashboardFragment;
30 import com.android.settings.enterprise.EnterprisePrivacyPreferenceController;
31 import com.android.settings.search.BaseSearchIndexProvider;
32 import com.android.settings.security.trustagent.ManageTrustAgentsPreferenceController;
33 import com.android.settings.security.trustagent.TrustAgentListPreferenceController;
34 import com.android.settings.widget.PreferenceCategoryController;
35 import com.android.settingslib.core.AbstractPreferenceController;
36 import com.android.settingslib.core.lifecycle.Lifecycle;
37 import com.android.settingslib.search.SearchIndexable;
38 
39 import java.util.ArrayList;
40 import java.util.List;
41 
42 @SearchIndexable
43 public class SecuritySettings extends DashboardFragment {
44 
45     private static final String TAG = "SecuritySettings";
46     private static final String SECURITY_CATEGORY = "security_category";
47     private static final String WORK_PROFILE_SECURITY_CATEGORY = "security_category_profile";
48 
49     public static final int CHANGE_TRUST_AGENT_SETTINGS = 126;
50     public static final int UNIFY_LOCK_CONFIRM_PROFILE_REQUEST = 129;
51     public static final int UNUNIFY_LOCK_CONFIRM_DEVICE_REQUEST = 130;
52 
53     @Override
getMetricsCategory()54     public int getMetricsCategory() {
55         return SettingsEnums.SECURITY;
56     }
57 
58     @Override
getPreferenceScreenResId()59     protected int getPreferenceScreenResId() {
60         return R.xml.security_dashboard_settings;
61     }
62 
63     @Override
getLogTag()64     protected String getLogTag() {
65         return TAG;
66     }
67 
68     @Override
getHelpResource()69     public int getHelpResource() {
70         return R.string.help_url_security;
71     }
72 
73     @Override
createPreferenceControllers(Context context)74     protected List<AbstractPreferenceController> createPreferenceControllers(Context context) {
75         return buildPreferenceControllers(context, getSettingsLifecycle(), this /* host*/);
76     }
77 
78     /**
79      * see confirmPatternThenDisableAndClear
80      */
81     @Override
onActivityResult(int requestCode, int resultCode, Intent data)82     public void onActivityResult(int requestCode, int resultCode, Intent data) {
83         if (use(TrustAgentListPreferenceController.class)
84                 .handleActivityResult(requestCode, resultCode)) {
85             return;
86         }
87         if (use(LockUnificationPreferenceController.class)
88                 .handleActivityResult(requestCode, resultCode, data)) {
89             return;
90         }
91         super.onActivityResult(requestCode, resultCode, data);
92     }
93 
startUnification()94     void startUnification() {
95         use(LockUnificationPreferenceController.class).startUnification();
96     }
97 
updateUnificationPreference()98     void updateUnificationPreference() {
99         use(LockUnificationPreferenceController.class).updateState(null);
100     }
101 
buildPreferenceControllers(Context context, Lifecycle lifecycle, SecuritySettings host)102     private static List<AbstractPreferenceController> buildPreferenceControllers(Context context,
103             Lifecycle lifecycle, SecuritySettings host) {
104         final List<AbstractPreferenceController> controllers = new ArrayList<>();
105         controllers.add(new EnterprisePrivacyPreferenceController(context));
106         controllers.add(new ManageTrustAgentsPreferenceController(context));
107         controllers.add(new ScreenPinningPreferenceController(context));
108         controllers.add(new SimLockPreferenceController(context));
109         controllers.add(new EncryptionStatusPreferenceController(context,
110                 PREF_KEY_ENCRYPTION_SECURITY_PAGE));
111         controllers.add(new TrustAgentListPreferenceController(context, host, lifecycle));
112 
113         final List<AbstractPreferenceController> securityPreferenceControllers = new ArrayList<>();
114         securityPreferenceControllers.add(new FaceStatusPreferenceController(context));
115         securityPreferenceControllers.add(new FingerprintStatusPreferenceController(context));
116         securityPreferenceControllers.add(new ChangeScreenLockPreferenceController(context, host));
117         controllers.add(new PreferenceCategoryController(context, SECURITY_CATEGORY)
118                 .setChildren(securityPreferenceControllers));
119         controllers.addAll(securityPreferenceControllers);
120 
121         final List<AbstractPreferenceController> profileSecurityControllers = new ArrayList<>();
122         profileSecurityControllers.add(new ChangeProfileScreenLockPreferenceController(
123                 context, host));
124         profileSecurityControllers.add(new LockUnificationPreferenceController(context, host));
125         profileSecurityControllers.add(new VisiblePatternProfilePreferenceController(
126                 context, lifecycle));
127         profileSecurityControllers.add(new FaceProfileStatusPreferenceController(context));
128         profileSecurityControllers.add(new FingerprintProfileStatusPreferenceController(context));
129         controllers.add(new PreferenceCategoryController(context, WORK_PROFILE_SECURITY_CATEGORY)
130                 .setChildren(profileSecurityControllers));
131         controllers.addAll(profileSecurityControllers);
132 
133         return controllers;
134     }
135 
136     /**
137      * For Search. Please keep it in sync when updating "createPreferenceHierarchy()"
138      */
139     public static final BaseSearchIndexProvider SEARCH_INDEX_DATA_PROVIDER =
140             new BaseSearchIndexProvider(R.xml.security_dashboard_settings) {
141 
142                 @Override
143                 public List<AbstractPreferenceController> createPreferenceControllers(Context
144                         context) {
145                     return buildPreferenceControllers(context, null /* lifecycle */,
146                             null /* host*/);
147                 }
148             };
149 }
150