• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright (C) 2022 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.biometrics.fingerprint;
18 
19 import android.app.admin.DevicePolicyManager;
20 import android.content.Context;
21 import android.hardware.biometrics.BiometricAuthenticator;
22 import android.hardware.fingerprint.FingerprintManager;
23 import android.os.UserManager;
24 
25 import com.android.settings.R;
26 import com.android.settings.Utils;
27 import com.android.settings.biometrics.ParentalControlsUtils;
28 import com.android.settings.flags.Flags;
29 import com.android.settingslib.RestrictedLockUtils.EnforcedAdmin;
30 import com.android.settingslib.RestrictedLockUtilsInternal;
31 import com.android.settingslib.utils.StringUtil;
32 
33 /** Utilities for fingerprint details shared between Security Settings and Safety Center. */
34 public class FingerprintStatusUtils {
35 
36     private final int mUserId;
37     private final Context mContext;
38     private final FingerprintManager mFingerprintManager;
39 
FingerprintStatusUtils( Context context, FingerprintManager fingerprintManager, int userId)40     public FingerprintStatusUtils(
41             Context context, FingerprintManager fingerprintManager, int userId) {
42         mContext = context;
43         mFingerprintManager = fingerprintManager;
44         mUserId = userId;
45     }
46 
47     /** Returns whether the fingerprint settings entity should be shown. */
isAvailable()48     public boolean isAvailable() {
49         return !Utils.isMultipleBiometricsSupported(mContext)
50                 && Utils.hasFingerprintHardware(mContext);
51     }
52 
53     /**
54      * Returns the {@link EnforcedAdmin} if parental consent is required to change face settings.
55      *
56      * @return null if face settings does not require a parental consent.
57      */
getDisablingAdmin()58     public EnforcedAdmin getDisablingAdmin() {
59         return ParentalControlsUtils.parentConsentRequired(
60                 mContext, BiometricAuthenticator.TYPE_FINGERPRINT);
61     }
62 
63     /** Returns the title of fingerprint settings entity. */
getTitle()64     public String getTitle() {
65         UserManager userManager = mContext.getSystemService(UserManager.class);
66         if (userManager != null && userManager.isProfile()) {
67             return mContext.getString(
68                     Utils.isPrivateProfile(mUserId, mContext)
69                             ? getPrivateSpaceTitle()
70                             : getWorkProfileTitle());
71         } else {
72             return mContext.getString(getRegularTitle());
73         }
74     }
75 
getPrivateSpaceTitle()76     private int getPrivateSpaceTitle() {
77         if (Flags.biometricsOnboardingEducation()) {
78             return R.string.private_space_fingerprint_unlock_title_new;
79         }
80         return R.string.private_space_fingerprint_unlock_title;
81     }
82 
getWorkProfileTitle()83     private int getWorkProfileTitle() {
84         if (Flags.biometricsOnboardingEducation()) {
85             return R.string.security_settings_work_fingerprint_preference_title_new;
86         }
87         return R.string.security_settings_work_fingerprint_preference_title;
88     }
89 
getRegularTitle()90     private int getRegularTitle() {
91         if (Flags.biometricsOnboardingEducation()) {
92             return R.string.security_settings_fingerprint; // doesn't have an overlay
93         }
94         return R.string.security_settings_fingerprint_preference_title;
95     }
96 
97     /** Returns the summary of fingerprint settings entity. */
getSummary()98     public String getSummary() {
99         if (shouldShowDisabledByAdminStr()) {
100             return mContext.getString(
101                     com.android.settingslib.widget.restricted.R.string.disabled_by_admin);
102         }
103         if (hasEnrolled()) {
104             final int numEnrolled = mFingerprintManager.getEnrolledFingerprints(mUserId).size();
105             return StringUtil.getIcuPluralsString(
106                     mContext,
107                     numEnrolled,
108                     R.string.security_settings_fingerprint_preference_summary);
109         } else {
110             return mContext.getString(
111                     Flags.biometricsOnboardingEducation()
112                             ? R.string.security_settings_fingerprint_preference_summary_none_new
113                             : R.string.security_settings_fingerprint_preference_summary_none);
114         }
115     }
116 
117     /** Returns the class name of the Settings page corresponding to fingerprint settings. */
getSettingsClassName()118     public String getSettingsClassName() {
119         return FingerprintSettings.class.getName();
120     }
121 
122     /** Returns whether at least one fingerprint has been enrolled. */
hasEnrolled()123     public boolean hasEnrolled() {
124         return mFingerprintManager.hasEnrolledFingerprints(mUserId);
125     }
126 
127     /** Indicates if the fingerprint feature should show the "Disabled by Admin" string. */
shouldShowDisabledByAdminStr()128     private boolean shouldShowDisabledByAdminStr() {
129         return RestrictedLockUtilsInternal.checkIfKeyguardFeaturesDisabled(
130                         mContext, DevicePolicyManager.KEYGUARD_DISABLE_FINGERPRINT, mUserId)
131                 != null;
132     }
133 }
134