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.settings.biometrics; 18 19 import static com.android.settings.Utils.SETTINGS_PACKAGE_NAME; 20 import static com.android.settings.biometrics.BiometricEnrollBase.EXTRA_FROM_SETTINGS_SUMMARY; 21 22 import android.content.Context; 23 import android.content.Intent; 24 import android.os.UserHandle; 25 import android.os.UserManager; 26 import android.text.TextUtils; 27 28 import androidx.preference.Preference; 29 30 import com.android.internal.widget.LockPatternUtils; 31 import com.android.settings.Utils; 32 import com.android.settings.core.BasePreferenceController; 33 import com.android.settings.core.SettingsBaseActivity; 34 import com.android.settings.overlay.FeatureFactory; 35 import com.android.settingslib.transition.SettingsTransitionHelper; 36 37 public abstract class BiometricStatusPreferenceController extends BasePreferenceController { 38 39 protected final UserManager mUm; 40 protected final LockPatternUtils mLockPatternUtils; 41 42 private final int mUserId = UserHandle.myUserId(); 43 protected final int mProfileChallengeUserId; 44 45 /** 46 * @return true if the manager is not null and the hardware is detected. 47 */ isDeviceSupported()48 protected abstract boolean isDeviceSupported(); 49 50 /** 51 * @return true if the user has enrolled biometrics of the subclassed type. 52 */ hasEnrolledBiometrics()53 protected abstract boolean hasEnrolledBiometrics(); 54 55 /** 56 * @return the summary text if biometrics are enrolled. 57 */ getSummaryTextEnrolled()58 protected abstract String getSummaryTextEnrolled(); 59 60 /** 61 * @return the summary text if no biometrics are enrolled. 62 */ getSummaryTextNoneEnrolled()63 protected abstract String getSummaryTextNoneEnrolled(); 64 65 /** 66 * @return the class name for the settings page. 67 */ getSettingsClassName()68 protected abstract String getSettingsClassName(); 69 70 /** 71 * @return the class name for entry to enrollment. 72 */ getEnrollClassName()73 protected abstract String getEnrollClassName(); 74 BiometricStatusPreferenceController(Context context, String key)75 public BiometricStatusPreferenceController(Context context, String key) { 76 super(context, key); 77 mUm = (UserManager) context.getSystemService(Context.USER_SERVICE); 78 mLockPatternUtils = FeatureFactory.getFactory(context) 79 .getSecurityFeatureProvider() 80 .getLockPatternUtils(context); 81 mProfileChallengeUserId = Utils.getManagedProfileId(mUm, mUserId); 82 } 83 84 @Override getAvailabilityStatus()85 public int getAvailabilityStatus() { 86 if (!isDeviceSupported()) { 87 return UNSUPPORTED_ON_DEVICE; 88 } 89 if (isUserSupported()) { 90 return AVAILABLE; 91 } else { 92 return DISABLED_FOR_USER; 93 } 94 } 95 96 @Override updateState(Preference preference)97 public void updateState(Preference preference) { 98 if (!isAvailable()) { 99 if (preference != null) { 100 preference.setVisible(false); 101 } 102 return; 103 } else { 104 preference.setVisible(true); 105 } 106 preference.setSummary(hasEnrolledBiometrics() ? getSummaryTextEnrolled() 107 : getSummaryTextNoneEnrolled()); 108 } 109 110 @Override handlePreferenceTreeClick(Preference preference)111 public boolean handlePreferenceTreeClick(Preference preference) { 112 if (!TextUtils.equals(preference.getKey(), getPreferenceKey())) { 113 return super.handlePreferenceTreeClick(preference); 114 } 115 116 final Context context = preference.getContext(); 117 final UserManager userManager = UserManager.get(context); 118 final int userId = getUserId(); 119 if (Utils.startQuietModeDialogIfNecessary(context, userManager, userId)) { 120 return false; 121 } 122 123 final Intent intent = new Intent(); 124 final String clazz = hasEnrolledBiometrics() ? getSettingsClassName() 125 : getEnrollClassName(); 126 intent.setClassName(SETTINGS_PACKAGE_NAME, clazz); 127 if (!preference.getExtras().isEmpty()) { 128 intent.putExtras(preference.getExtras()); 129 } 130 intent.putExtra(Intent.EXTRA_USER_ID, userId); 131 intent.putExtra(EXTRA_FROM_SETTINGS_SUMMARY, true); 132 intent.putExtra(SettingsBaseActivity.EXTRA_PAGE_TRANSITION_TYPE, 133 SettingsTransitionHelper.TransitionType.TRANSITION_SLIDE); 134 context.startActivity(intent); 135 return true; 136 } 137 getUserId()138 protected int getUserId() { 139 return mUserId; 140 } 141 isUserSupported()142 protected boolean isUserSupported() { 143 return true; 144 } 145 } 146