• 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     private 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
updateState(Preference preference)90     public void updateState(Preference preference) {
91         super.updateState(preference);
92         updateStateInternal();
93     }
94 
updateStateInternal()95     private void updateStateInternal() {
96         updateStateInternal(mFaceStatusUtils.getDisablingAdmin());
97     }
98 
99     @VisibleForTesting
updateStateInternal(@ullable RestrictedLockUtils.EnforcedAdmin enforcedAdmin)100     void updateStateInternal(@Nullable RestrictedLockUtils.EnforcedAdmin enforcedAdmin) {
101         if (mPreference != null) {
102             mPreference.setDisabledByAdmin(enforcedAdmin);
103         }
104     }
105 
106     @Override
getSummaryText()107     protected String getSummaryText() {
108         return mFaceStatusUtils.getSummary();
109     }
110 
111     @Override
getSettingsClassName()112     protected String getSettingsClassName() {
113         return mFaceStatusUtils.getSettingsClassName();
114     }
115 
setPreferenceScreen(PreferenceScreen preferenceScreen)116     public void setPreferenceScreen(PreferenceScreen preferenceScreen) {
117         mPreferenceScreen = preferenceScreen;
118     }
119 }
120