• 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 
17 package com.android.settings.biometrics.face;
18 
19 import android.content.Context;
20 import android.hardware.face.FaceManager;
21 
22 import androidx.annotation.Nullable;
23 import androidx.lifecycle.Lifecycle;
24 import androidx.lifecycle.LifecycleObserver;
25 import androidx.lifecycle.OnLifecycleEvent;
26 import androidx.preference.Preference;
27 import androidx.preference.PreferenceScreen;
28 
29 import com.android.internal.annotations.VisibleForTesting;
30 import com.android.settings.Utils;
31 import com.android.settings.biometrics.BiometricStatusPreferenceController;
32 import com.android.settingslib.RestrictedLockUtils;
33 import com.android.settingslib.RestrictedPreference;
34 
35 public class FaceStatusPreferenceController extends BiometricStatusPreferenceController
36         implements LifecycleObserver {
37 
38     public static final String KEY_FACE_SETTINGS = "face_settings";
39 
40     protected final FaceManager mFaceManager;
41 
42     @VisibleForTesting
43     RestrictedPreference mPreference;
44     private PreferenceScreen mPreferenceScreen;
45     protected final FaceStatusUtils mFaceStatusUtils;
46 
FaceStatusPreferenceController(Context context)47     public FaceStatusPreferenceController(Context context) {
48         this(context, KEY_FACE_SETTINGS, null /* lifecycle */);
49     }
50 
FaceStatusPreferenceController(Context context, String key)51     public FaceStatusPreferenceController(Context context, String key) {
52         this(context, key, null /* lifecycle */);
53     }
54 
FaceStatusPreferenceController(Context context, Lifecycle lifecycle)55     public FaceStatusPreferenceController(Context context, Lifecycle lifecycle) {
56         this(context, KEY_FACE_SETTINGS, lifecycle);
57     }
58 
FaceStatusPreferenceController(Context context, String key, Lifecycle lifecycle)59     public FaceStatusPreferenceController(Context context, String key, Lifecycle lifecycle) {
60         super(context, key);
61         mFaceManager = Utils.getFaceManagerOrNull(context);
62         mFaceStatusUtils = new FaceStatusUtils(context, mFaceManager, getUserId());
63 
64         if (lifecycle != null) {
65             lifecycle.addObserver(this);
66         }
67     }
68 
69     @OnLifecycleEvent(Lifecycle.Event.ON_RESUME)
onResume()70     public void onResume() {
71         updateStateInternal();
72         if (mPreferenceScreen != null) {
73             displayPreference(mPreferenceScreen);
74         }
75     }
76 
77     @Override
displayPreference(PreferenceScreen screen)78     public void displayPreference(PreferenceScreen screen) {
79         super.displayPreference(screen);
80         mPreferenceScreen = screen;
81         mPreference = screen.findPreference(mPreferenceKey);
82     }
83 
84     @Override
isDeviceSupported()85     protected boolean isDeviceSupported() {
86         return mFaceStatusUtils.isAvailable();
87     }
88 
89     @Override
isHardwareSupported()90     protected boolean isHardwareSupported() {
91         return Utils.hasFaceHardware(mContext);
92     }
93 
94     @Override
updateState(Preference preference)95     public void updateState(Preference preference) {
96         super.updateState(preference);
97         updateStateInternal();
98     }
99 
updateStateInternal()100     private void updateStateInternal() {
101         updateStateInternal(mFaceStatusUtils.getDisablingAdmin());
102     }
103 
104     @VisibleForTesting
updateStateInternal(@ullable RestrictedLockUtils.EnforcedAdmin enforcedAdmin)105     void updateStateInternal(@Nullable RestrictedLockUtils.EnforcedAdmin enforcedAdmin) {
106         if (mPreference != null) {
107             mPreference.setDisabledByAdmin(enforcedAdmin);
108         }
109     }
110 
111     @Override
getSummaryText()112     protected String getSummaryText() {
113         return mFaceStatusUtils.getSummary();
114     }
115 
116     @Override
getSettingsClassName()117     protected String getSettingsClassName() {
118         return mFaceStatusUtils.getSettingsClassName();
119     }
120 
setPreferenceScreen(PreferenceScreen preferenceScreen)121     public void setPreferenceScreen(PreferenceScreen preferenceScreen) {
122         mPreferenceScreen = preferenceScreen;
123     }
124 }
125