• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (C) 2021 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.security;
18 
19 import static android.app.admin.DevicePolicyResources.Strings.Settings.FINGERPRINT_FOR_WORK;
20 import static android.app.admin.DevicePolicyResources.Strings.Settings.MANAGED_DEVICE_INFO;
21 import static android.app.admin.DevicePolicyResources.Strings.Settings.MANAGE_DEVICE_ADMIN_APPS;
22 import static android.app.admin.DevicePolicyResources.Strings.Settings.WORK_PROFILE_SECURITY_TITLE;
23 import static android.app.admin.DevicePolicyResources.Strings.Settings.WORK_PROFILE_SET_UNLOCK_LAUNCH_PICKER_TITLE;
24 import static android.app.admin.DevicePolicyResources.Strings.Settings.WORK_PROFILE_UNIFY_LOCKS_SUMMARY;
25 
26 import android.app.settings.SettingsEnums;
27 import android.content.Context;
28 import android.content.Intent;
29 import android.os.Bundle;
30 
31 import com.android.settings.R;
32 import com.android.settings.biometrics.combination.CombinedBiometricProfileStatusPreferenceController;
33 import com.android.settings.biometrics.face.FaceProfileStatusPreferenceController;
34 import com.android.settings.biometrics.fingerprint.FingerprintProfileStatusPreferenceController;
35 import com.android.settings.dashboard.DashboardFragment;
36 import com.android.settings.overlay.FeatureFactory;
37 import com.android.settings.safetycenter.SafetyCenterManagerWrapper;
38 import com.android.settings.search.BaseSearchIndexProvider;
39 import com.android.settings.security.trustagent.TrustAgentListPreferenceController;
40 import com.android.settings.widget.PreferenceCategoryController;
41 import com.android.settingslib.core.AbstractPreferenceController;
42 import com.android.settingslib.core.lifecycle.Lifecycle;
43 import com.android.settingslib.drawer.CategoryKey;
44 import com.android.settingslib.search.SearchIndexable;
45 
46 import java.util.ArrayList;
47 import java.util.List;
48 
49 /**
50  * An overflow menu for {@code SecuritySettings} containing advanced security settings.
51  *
52  * <p>This includes all work-profile related settings.
53  */
54 @SearchIndexable
55 public class SecurityAdvancedSettings extends DashboardFragment {
56 
57     private static final String TAG = "SecurityAdvancedSettings";
58     private static final String WORK_PROFILE_SECURITY_CATEGORY = "security_category_profile";
59 
60     /** Used in case of old Security settings when SafetyCenter is disabled */
61     private static final String CATEGORY_SECURITY_LEGACY_ADVANCED_SETTINGS =
62             "com.android.settings.category.ia.legacy_advanced_security";
63 
64     @Override
onCreate(Bundle icicle)65     public void onCreate(Bundle icicle) {
66         super.onCreate(icicle);
67         replaceEnterpriseStringTitle("unlock_set_or_change_profile",
68                 WORK_PROFILE_SET_UNLOCK_LAUNCH_PICKER_TITLE,
69                 R.string.unlock_set_unlock_launch_picker_title_profile);
70         replaceEnterpriseStringSummary("unification",
71                 WORK_PROFILE_UNIFY_LOCKS_SUMMARY,
72                 R.string.lock_settings_profile_unification_summary);
73         replaceEnterpriseStringTitle("fingerprint_settings_profile",
74                 FINGERPRINT_FOR_WORK,
75                 R.string.security_settings_work_fingerprint_preference_title);
76         replaceEnterpriseStringTitle("manage_device_admin",
77                 MANAGE_DEVICE_ADMIN_APPS, R.string.manage_device_admin);
78         replaceEnterpriseStringTitle("security_category_profile",
79                 WORK_PROFILE_SECURITY_TITLE, R.string.lock_settings_profile_title);
80         replaceEnterpriseStringTitle("enterprise_privacy", MANAGED_DEVICE_INFO,
81                 R.string.enterprise_privacy_settings);
82 
83     }
84 
85     @Override
getMetricsCategory()86     public int getMetricsCategory() {
87         return SettingsEnums.SECURITY_ADVANCED;
88     }
89 
90     @Override
getCategoryKey()91     public String getCategoryKey() {
92         final Context context = getContext();
93         if (context == null) {
94             return CATEGORY_SECURITY_LEGACY_ADVANCED_SETTINGS;
95         } else if (SafetyCenterManagerWrapper.get().isEnabled(context)) {
96             return CategoryKey.CATEGORY_SECURITY_ADVANCED_SETTINGS;
97         } else {
98             final SecuritySettingsFeatureProvider securitySettingsFeatureProvider =
99                     FeatureFactory.getFactory(context)
100                             .getSecuritySettingsFeatureProvider();
101 
102             if (securitySettingsFeatureProvider.hasAlternativeSecuritySettingsFragment()) {
103                 return securitySettingsFeatureProvider.getAlternativeAdvancedSettingsCategoryKey();
104             } else {
105                 return CATEGORY_SECURITY_LEGACY_ADVANCED_SETTINGS;
106             }
107         }
108     }
109 
110     @Override
getPreferenceScreenResId()111     protected int getPreferenceScreenResId() {
112         return R.xml.security_advanced_settings;
113     }
114 
115     @Override
getLogTag()116     protected String getLogTag() {
117         return TAG;
118     }
119 
120     @Override
createPreferenceControllers(Context context)121     protected List<AbstractPreferenceController> createPreferenceControllers(Context context) {
122         return buildPreferenceControllers(context, getSettingsLifecycle(), this /* host*/);
123     }
124 
125     /**
126      * see confirmPatternThenDisableAndClear
127      */
128     @Override
onActivityResult(int requestCode, int resultCode, Intent data)129     public void onActivityResult(int requestCode, int resultCode, Intent data) {
130         if (use(TrustAgentListPreferenceController.class)
131                 .handleActivityResult(requestCode, resultCode)) {
132             return;
133         }
134         if (use(LockUnificationPreferenceController.class)
135                 .handleActivityResult(requestCode, resultCode, data)) {
136             return;
137         }
138         super.onActivityResult(requestCode, resultCode, data);
139     }
140 
buildPreferenceControllers(Context context, Lifecycle lifecycle, DashboardFragment host)141     private static List<AbstractPreferenceController> buildPreferenceControllers(Context context,
142             Lifecycle lifecycle, DashboardFragment host) {
143         final List<AbstractPreferenceController> controllers = new ArrayList<>();
144         controllers.add(new TrustAgentListPreferenceController(context, host, lifecycle));
145 
146         final List<AbstractPreferenceController> profileSecurityControllers = new ArrayList<>();
147         profileSecurityControllers.add(new ChangeProfileScreenLockPreferenceController(
148                 context, host));
149         profileSecurityControllers.add(new LockUnificationPreferenceController(context, host));
150         profileSecurityControllers.add(new VisiblePatternProfilePreferenceController(
151                 context, lifecycle));
152         profileSecurityControllers.add(new FaceProfileStatusPreferenceController(
153                 context, lifecycle));
154         profileSecurityControllers.add(new FingerprintProfileStatusPreferenceController(
155                 context, lifecycle));
156         profileSecurityControllers
157                 .add(new CombinedBiometricProfileStatusPreferenceController(context, lifecycle));
158         controllers.add(new PreferenceCategoryController(context, WORK_PROFILE_SECURITY_CATEGORY)
159                 .setChildren(profileSecurityControllers));
160         controllers.addAll(profileSecurityControllers);
161 
162         return controllers;
163     }
164 
165     /**
166      * For Search. Please keep it in sync when updating "createPreferenceHierarchy()"
167      */
168     public static final BaseSearchIndexProvider SEARCH_INDEX_DATA_PROVIDER =
169             new BaseSearchIndexProvider(R.xml.security_advanced_settings) {
170 
171                 @Override
172                 public List<AbstractPreferenceController> createPreferenceControllers(Context
173                         context) {
174                     return buildPreferenceControllers(context, null /* lifecycle */,
175                             null /* host*/);
176                 }
177             };
178 }
179