Refresh biometric preference controllers on lifecycle events.

Fix: 195961101
Test: make RunSettingsRoboTests
Test: manual (enroll via settings and verify preferences enabled after enrolling)

Change-Id: Ie50cd862a42c96eb95f2156a33f34748b2b8b50c
(cherry picked from commit 9e9f1249d42e8b8189528a537be78c272eeb30af)
diff --git a/src/com/android/settings/biometrics/combination/BiometricFaceProfileStatusPreferenceController.java b/src/com/android/settings/biometrics/combination/BiometricFaceProfileStatusPreferenceController.java
index 1dbfa64..b6c3088 100644
--- a/src/com/android/settings/biometrics/combination/BiometricFaceProfileStatusPreferenceController.java
+++ b/src/com/android/settings/biometrics/combination/BiometricFaceProfileStatusPreferenceController.java
@@ -18,6 +18,8 @@
 import android.content.Context;
 import android.os.UserHandle;
 
+import androidx.lifecycle.Lifecycle;
+
 /**
  * Preference controller for face settings within the biometrics settings page of work profile,
  * that controls the ability to unlock the phone with face authentication.
@@ -29,6 +31,11 @@
         super(context, key);
     }
 
+    public BiometricFaceProfileStatusPreferenceController(
+            Context context, String key, Lifecycle lifecycle) {
+        super(context, key, lifecycle);
+    }
+
     @Override
     protected boolean isUserSupported() {
         return mProfileChallengeUserId != UserHandle.USER_NULL
diff --git a/src/com/android/settings/biometrics/combination/BiometricFaceStatusPreferenceController.java b/src/com/android/settings/biometrics/combination/BiometricFaceStatusPreferenceController.java
index 047a2df..3ac14a1 100644
--- a/src/com/android/settings/biometrics/combination/BiometricFaceStatusPreferenceController.java
+++ b/src/com/android/settings/biometrics/combination/BiometricFaceStatusPreferenceController.java
@@ -17,6 +17,8 @@
 
 import android.content.Context;
 
+import androidx.lifecycle.Lifecycle;
+
 import com.android.settings.Utils;
 import com.android.settings.biometrics.face.FaceStatusPreferenceController;
 
@@ -30,6 +32,11 @@
         super(context, key);
     }
 
+    public BiometricFaceStatusPreferenceController(
+            Context context, String key, Lifecycle lifecycle) {
+        super(context, key, lifecycle);
+    }
+
     @Override
     protected boolean isDeviceSupported() {
         return Utils.isMultipleBiometricsSupported(mContext) && Utils.hasFaceHardware(mContext);
diff --git a/src/com/android/settings/biometrics/combination/BiometricFingerprintProfileStatusPreferenceController.java b/src/com/android/settings/biometrics/combination/BiometricFingerprintProfileStatusPreferenceController.java
index 5477c9d..4d91083 100644
--- a/src/com/android/settings/biometrics/combination/BiometricFingerprintProfileStatusPreferenceController.java
+++ b/src/com/android/settings/biometrics/combination/BiometricFingerprintProfileStatusPreferenceController.java
@@ -18,6 +18,8 @@
 import android.content.Context;
 import android.os.UserHandle;
 
+import androidx.lifecycle.Lifecycle;
+
 /**
  * Preference controller for fingerprint settings within the biometrics settings page, that controls
  * the ability to unlock the phone with fingerprint.
@@ -29,6 +31,11 @@
         super(context, key);
     }
 
+    public BiometricFingerprintProfileStatusPreferenceController(
+            Context context, String key, Lifecycle lifecycle) {
+        super(context, key, lifecycle);
+    }
+
     @Override
     protected boolean isUserSupported() {
         return mProfileChallengeUserId != UserHandle.USER_NULL
diff --git a/src/com/android/settings/biometrics/combination/BiometricFingerprintStatusPreferenceController.java b/src/com/android/settings/biometrics/combination/BiometricFingerprintStatusPreferenceController.java
index 72a19c7..782d889 100644
--- a/src/com/android/settings/biometrics/combination/BiometricFingerprintStatusPreferenceController.java
+++ b/src/com/android/settings/biometrics/combination/BiometricFingerprintStatusPreferenceController.java
@@ -17,6 +17,8 @@
 
 import android.content.Context;
 
+import androidx.lifecycle.Lifecycle;
+
 import com.android.settings.Utils;
 import com.android.settings.biometrics.fingerprint.FingerprintStatusPreferenceController;
 
@@ -31,6 +33,11 @@
         super(context, key);
     }
 
+    public BiometricFingerprintStatusPreferenceController(
+            Context context, String key, Lifecycle lifecycle) {
+        super(context, key, lifecycle);
+    }
+
     @Override
     protected boolean isDeviceSupported() {
         return Utils.isMultipleBiometricsSupported(mContext)
diff --git a/src/com/android/settings/biometrics/combination/CombinedBiometricProfileStatusPreferenceController.java b/src/com/android/settings/biometrics/combination/CombinedBiometricProfileStatusPreferenceController.java
index e9cbcd8..aba3244 100644
--- a/src/com/android/settings/biometrics/combination/CombinedBiometricProfileStatusPreferenceController.java
+++ b/src/com/android/settings/biometrics/combination/CombinedBiometricProfileStatusPreferenceController.java
@@ -18,6 +18,8 @@
 import android.content.Context;
 import android.os.UserHandle;
 
+import androidx.lifecycle.Lifecycle;
+
 import com.android.settings.Settings;
 
 /**
@@ -37,6 +39,16 @@
         super(context, key);
     }
 
+    public CombinedBiometricProfileStatusPreferenceController(
+            Context context, Lifecycle lifecycle) {
+        super(context, KEY_BIOMETRIC_SETTINGS, lifecycle);
+    }
+
+    public CombinedBiometricProfileStatusPreferenceController(
+            Context context, String key, Lifecycle lifecycle) {
+        super(context, key, lifecycle);
+    }
+
     @Override
     protected boolean isUserSupported() {
         return mProfileChallengeUserId != UserHandle.USER_NULL
diff --git a/src/com/android/settings/biometrics/combination/CombinedBiometricStatusPreferenceController.java b/src/com/android/settings/biometrics/combination/CombinedBiometricStatusPreferenceController.java
index 9cc95e1..6f24215 100644
--- a/src/com/android/settings/biometrics/combination/CombinedBiometricStatusPreferenceController.java
+++ b/src/com/android/settings/biometrics/combination/CombinedBiometricStatusPreferenceController.java
@@ -21,6 +21,9 @@
 import android.hardware.fingerprint.FingerprintManager;
 
 import androidx.annotation.Nullable;
+import androidx.lifecycle.Lifecycle;
+import androidx.lifecycle.LifecycleObserver;
+import androidx.lifecycle.OnLifecycleEvent;
 import androidx.preference.Preference;
 import androidx.preference.PreferenceScreen;
 
@@ -38,7 +41,7 @@
  * with face and fingerprint.
  */
 public class CombinedBiometricStatusPreferenceController extends
-        BiometricStatusPreferenceController {
+        BiometricStatusPreferenceController implements LifecycleObserver {
     private static final String KEY_BIOMETRIC_SETTINGS = "biometric_settings";
 
     @Nullable
@@ -49,13 +52,31 @@
     RestrictedPreference mPreference;
 
     public CombinedBiometricStatusPreferenceController(Context context) {
-        this(context, KEY_BIOMETRIC_SETTINGS);
+        this(context, KEY_BIOMETRIC_SETTINGS, null /* lifecycle */);
     }
 
     public CombinedBiometricStatusPreferenceController(Context context, String key) {
+        this(context, key, null /* lifecycle */);
+    }
+
+    public CombinedBiometricStatusPreferenceController(Context context, Lifecycle lifecycle) {
+        this(context, KEY_BIOMETRIC_SETTINGS, lifecycle);
+    }
+
+    public CombinedBiometricStatusPreferenceController(
+            Context context, String key, Lifecycle lifecycle) {
         super(context, key);
         mFingerprintManager = Utils.getFingerprintManagerOrNull(context);
         mFaceManager = Utils.getFaceManagerOrNull(context);
+
+        if (lifecycle != null) {
+            lifecycle.addObserver(this);
+        }
+    }
+
+    @OnLifecycleEvent(Lifecycle.Event.ON_RESUME)
+    public void onResume() {
+        updateStateInternal();
     }
 
     @Override
@@ -77,17 +98,19 @@
     @Override
     public void updateState(Preference preference) {
         super.updateState(preference);
+        updateStateInternal();
+    }
+
+    private void updateStateInternal() {
         // This controller currently is shown if fingerprint&face exist on the device. If this
         // changes in the future, the modalities passed into the below will need to be updated.
-        final RestrictedLockUtils.EnforcedAdmin admin = ParentalControlsUtils
-                .parentConsentRequired(mContext,
-                BiometricAuthenticator.TYPE_FACE | BiometricAuthenticator.TYPE_FINGERPRINT);
-        updateStateInternal(admin);
+        updateStateInternal(ParentalControlsUtils.parentConsentRequired(mContext,
+                BiometricAuthenticator.TYPE_FACE | BiometricAuthenticator.TYPE_FINGERPRINT));
     }
 
     @VisibleForTesting
     void updateStateInternal(@Nullable RestrictedLockUtils.EnforcedAdmin enforcedAdmin) {
-        if (enforcedAdmin != null && mPreference != null) {
+        if (mPreference != null) {
             mPreference.setDisabledByAdmin(enforcedAdmin);
         }
     }
diff --git a/src/com/android/settings/biometrics/face/FaceProfileStatusPreferenceController.java b/src/com/android/settings/biometrics/face/FaceProfileStatusPreferenceController.java
index c46ddcf..99145f8 100644
--- a/src/com/android/settings/biometrics/face/FaceProfileStatusPreferenceController.java
+++ b/src/com/android/settings/biometrics/face/FaceProfileStatusPreferenceController.java
@@ -19,6 +19,7 @@
 import android.content.Context;
 import android.os.UserHandle;
 
+import androidx.lifecycle.Lifecycle;
 import androidx.preference.Preference;
 
 import com.android.settings.R;
@@ -28,13 +29,21 @@
     private static final String KEY_FACE_SETTINGS = "face_settings_profile";
 
     public FaceProfileStatusPreferenceController(Context context) {
-        this(context, KEY_FACE_SETTINGS);
+        super(context, KEY_FACE_SETTINGS);
     }
 
     public FaceProfileStatusPreferenceController(Context context, String key) {
         super(context, key);
     }
 
+    public FaceProfileStatusPreferenceController(Context context, Lifecycle lifecycle) {
+        super(context, KEY_FACE_SETTINGS, lifecycle);
+    }
+
+    public FaceProfileStatusPreferenceController(Context context, String key, Lifecycle lifecycle) {
+        super(context, key, lifecycle);
+    }
+
     @Override
     public int getAvailabilityStatus() {
         // Check if Face for Profile is available.
diff --git a/src/com/android/settings/biometrics/face/FaceStatusPreferenceController.java b/src/com/android/settings/biometrics/face/FaceStatusPreferenceController.java
index 3a53f01..319166e 100644
--- a/src/com/android/settings/biometrics/face/FaceStatusPreferenceController.java
+++ b/src/com/android/settings/biometrics/face/FaceStatusPreferenceController.java
@@ -21,6 +21,9 @@
 import android.hardware.face.FaceManager;
 
 import androidx.annotation.Nullable;
+import androidx.lifecycle.Lifecycle;
+import androidx.lifecycle.LifecycleObserver;
+import androidx.lifecycle.OnLifecycleEvent;
 import androidx.preference.Preference;
 import androidx.preference.PreferenceScreen;
 
@@ -33,7 +36,8 @@
 import com.android.settingslib.RestrictedLockUtils;
 import com.android.settingslib.RestrictedPreference;
 
-public class FaceStatusPreferenceController extends BiometricStatusPreferenceController {
+public class FaceStatusPreferenceController extends BiometricStatusPreferenceController
+        implements LifecycleObserver {
 
     public static final String KEY_FACE_SETTINGS = "face_settings";
 
@@ -42,12 +46,29 @@
     RestrictedPreference mPreference;
 
     public FaceStatusPreferenceController(Context context) {
-        this(context, KEY_FACE_SETTINGS);
+        this(context, KEY_FACE_SETTINGS, null /* lifecycle */);
     }
 
     public FaceStatusPreferenceController(Context context, String key) {
+        this(context, key, null /* lifecycle */);
+    }
+
+    public FaceStatusPreferenceController(Context context, Lifecycle lifecycle) {
+        this(context, KEY_FACE_SETTINGS, lifecycle);
+    }
+
+    public FaceStatusPreferenceController(Context context, String key, Lifecycle lifecycle) {
         super(context, key);
         mFaceManager = Utils.getFaceManagerOrNull(context);
+
+        if (lifecycle != null) {
+            lifecycle.addObserver(this);
+        }
+    }
+
+    @OnLifecycleEvent(Lifecycle.Event.ON_RESUME)
+    public void onResume() {
+        updateStateInternal();
     }
 
     @Override
@@ -69,14 +90,17 @@
     @Override
     public void updateState(Preference preference) {
         super.updateState(preference);
-        final RestrictedLockUtils.EnforcedAdmin admin = ParentalControlsUtils
-                .parentConsentRequired(mContext, BiometricAuthenticator.TYPE_FACE);
-        updateStateInternal(admin);
+        updateStateInternal();
+    }
+
+    private void updateStateInternal() {
+        updateStateInternal(ParentalControlsUtils.parentConsentRequired(
+                mContext, BiometricAuthenticator.TYPE_FACE));
     }
 
     @VisibleForTesting
     void updateStateInternal(@Nullable RestrictedLockUtils.EnforcedAdmin enforcedAdmin) {
-        if (enforcedAdmin != null && mPreference != null) {
+        if (mPreference != null) {
             mPreference.setDisabledByAdmin(enforcedAdmin);
         }
     }
diff --git a/src/com/android/settings/biometrics/fingerprint/FingerprintProfileStatusPreferenceController.java b/src/com/android/settings/biometrics/fingerprint/FingerprintProfileStatusPreferenceController.java
index 0d9893d..68e1c5e 100644
--- a/src/com/android/settings/biometrics/fingerprint/FingerprintProfileStatusPreferenceController.java
+++ b/src/com/android/settings/biometrics/fingerprint/FingerprintProfileStatusPreferenceController.java
@@ -19,19 +19,30 @@
 import android.content.Context;
 import android.os.UserHandle;
 
+import androidx.lifecycle.Lifecycle;
+
 public class FingerprintProfileStatusPreferenceController
         extends FingerprintStatusPreferenceController {
 
     public static final String KEY_FINGERPRINT_SETTINGS = "fingerprint_settings_profile";
 
     public FingerprintProfileStatusPreferenceController(Context context) {
-        this(context, KEY_FINGERPRINT_SETTINGS);
+        super(context, KEY_FINGERPRINT_SETTINGS);
     }
 
     public FingerprintProfileStatusPreferenceController(Context context, String key) {
         super(context, key);
     }
 
+    public FingerprintProfileStatusPreferenceController(Context context, Lifecycle lifecycle) {
+        super(context, KEY_FINGERPRINT_SETTINGS, lifecycle);
+    }
+
+    public FingerprintProfileStatusPreferenceController(
+            Context context, String key, Lifecycle lifecycle) {
+        super(context, key, lifecycle);
+    }
+
     @Override
     protected boolean isUserSupported() {
         return mProfileChallengeUserId != UserHandle.USER_NULL
diff --git a/src/com/android/settings/biometrics/fingerprint/FingerprintStatusPreferenceController.java b/src/com/android/settings/biometrics/fingerprint/FingerprintStatusPreferenceController.java
index 56bfc68..76c809c 100644
--- a/src/com/android/settings/biometrics/fingerprint/FingerprintStatusPreferenceController.java
+++ b/src/com/android/settings/biometrics/fingerprint/FingerprintStatusPreferenceController.java
@@ -21,6 +21,9 @@
 import android.hardware.fingerprint.FingerprintManager;
 
 import androidx.annotation.Nullable;
+import androidx.lifecycle.Lifecycle;
+import androidx.lifecycle.LifecycleObserver;
+import androidx.lifecycle.OnLifecycleEvent;
 import androidx.preference.Preference;
 import androidx.preference.PreferenceScreen;
 
@@ -32,7 +35,8 @@
 import com.android.settingslib.RestrictedLockUtils;
 import com.android.settingslib.RestrictedPreference;
 
-public class FingerprintStatusPreferenceController extends BiometricStatusPreferenceController {
+public class FingerprintStatusPreferenceController extends BiometricStatusPreferenceController
+        implements LifecycleObserver {
 
     private static final String KEY_FINGERPRINT_SETTINGS = "fingerprint_settings";
 
@@ -45,8 +49,25 @@
     }
 
     public FingerprintStatusPreferenceController(Context context, String key) {
+        this(context, key, null /* lifecycle */);
+    }
+
+    public FingerprintStatusPreferenceController(Context context, Lifecycle lifecycle) {
+        this(context, KEY_FINGERPRINT_SETTINGS, lifecycle);
+    }
+
+    public FingerprintStatusPreferenceController(Context context, String key, Lifecycle lifecycle) {
         super(context, key);
         mFingerprintManager = Utils.getFingerprintManagerOrNull(context);
+
+        if (lifecycle != null) {
+            lifecycle.addObserver(this);
+        }
+    }
+
+    @OnLifecycleEvent(Lifecycle.Event.ON_RESUME)
+    public void onResume() {
+        updateStateInternal();
     }
 
     @Override
@@ -69,14 +90,17 @@
     @Override
     public void updateState(Preference preference) {
         super.updateState(preference);
-        final RestrictedLockUtils.EnforcedAdmin admin = ParentalControlsUtils
-                .parentConsentRequired(mContext, BiometricAuthenticator.TYPE_FINGERPRINT);
-        updateStateInternal(admin);
+        updateStateInternal();
+    }
+
+    private void updateStateInternal() {
+        updateStateInternal(ParentalControlsUtils.parentConsentRequired(
+                mContext, BiometricAuthenticator.TYPE_FINGERPRINT));
     }
 
     @VisibleForTesting
     void updateStateInternal(@Nullable RestrictedLockUtils.EnforcedAdmin enforcedAdmin) {
-        if (enforcedAdmin != null && mPreference != null) {
+        if (mPreference != null) {
             mPreference.setDisabledByAdmin(enforcedAdmin);
         }
     }
diff --git a/src/com/android/settings/security/SecuritySettings.java b/src/com/android/settings/security/SecuritySettings.java
index 8a03a04..be123f2 100644
--- a/src/com/android/settings/security/SecuritySettings.java
+++ b/src/com/android/settings/security/SecuritySettings.java
@@ -116,9 +116,11 @@
         controllers.add(new TrustAgentListPreferenceController(context, host, lifecycle));
 
         final List<AbstractPreferenceController> securityPreferenceControllers = new ArrayList<>();
-        securityPreferenceControllers.add(new FaceStatusPreferenceController(context));
-        securityPreferenceControllers.add(new FingerprintStatusPreferenceController(context));
-        securityPreferenceControllers.add(new CombinedBiometricStatusPreferenceController(context));
+        securityPreferenceControllers.add(new FaceStatusPreferenceController(context, lifecycle));
+        securityPreferenceControllers.add(new FingerprintStatusPreferenceController(
+                context, lifecycle));
+        securityPreferenceControllers.add(new CombinedBiometricStatusPreferenceController(
+                context, lifecycle));
         securityPreferenceControllers.add(new ChangeScreenLockPreferenceController(context, host));
         controllers.add(new PreferenceCategoryController(context, SECURITY_CATEGORY)
                 .setChildren(securityPreferenceControllers));
@@ -130,10 +132,12 @@
         profileSecurityControllers.add(new LockUnificationPreferenceController(context, host));
         profileSecurityControllers.add(new VisiblePatternProfilePreferenceController(
                 context, lifecycle));
-        profileSecurityControllers.add(new FaceProfileStatusPreferenceController(context));
-        profileSecurityControllers.add(new FingerprintProfileStatusPreferenceController(context));
+        profileSecurityControllers.add(new FaceProfileStatusPreferenceController(
+                context, lifecycle));
+        profileSecurityControllers.add(new FingerprintProfileStatusPreferenceController(
+                context, lifecycle));
         profileSecurityControllers
-                .add(new CombinedBiometricProfileStatusPreferenceController(context));
+                .add(new CombinedBiometricProfileStatusPreferenceController(context, lifecycle));
         controllers.add(new PreferenceCategoryController(context, WORK_PROFILE_SECURITY_CATEGORY)
                 .setChildren(profileSecurityControllers));
         controllers.addAll(profileSecurityControllers);
diff --git a/tests/robotests/src/com/android/settings/biometrics/combination/CombinedBiometricStatusPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/biometrics/combination/CombinedBiometricStatusPreferenceControllerTest.java
index 3b8744b..3a97387 100644
--- a/tests/robotests/src/com/android/settings/biometrics/combination/CombinedBiometricStatusPreferenceControllerTest.java
+++ b/tests/robotests/src/com/android/settings/biometrics/combination/CombinedBiometricStatusPreferenceControllerTest.java
@@ -18,7 +18,10 @@
 
 import static org.mockito.ArgumentMatchers.anyInt;
 import static org.mockito.ArgumentMatchers.eq;
+import static org.mockito.Mockito.any;
 import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.never;
+import static org.mockito.Mockito.reset;
 import static org.mockito.Mockito.spy;
 import static org.mockito.Mockito.verify;
 import static org.mockito.Mockito.when;
@@ -29,12 +32,14 @@
 import android.hardware.fingerprint.FingerprintManager;
 import android.os.UserManager;
 
+import androidx.lifecycle.LifecycleOwner;
 import androidx.preference.Preference;
 
 import com.android.internal.widget.LockPatternUtils;
 import com.android.settings.testutils.FakeFeatureFactory;
 import com.android.settingslib.RestrictedLockUtils;
 import com.android.settingslib.RestrictedPreference;
+import com.android.settingslib.core.lifecycle.Lifecycle;
 
 import org.junit.Before;
 import org.junit.Test;
@@ -65,11 +70,15 @@
     private Context mContext;
     private CombinedBiometricStatusPreferenceController mController;
     private Preference mPreference;
+    private Lifecycle mLifecycle;
+    private LifecycleOwner mLifecycleOwner;
 
     @Before
     public void setUp() {
         MockitoAnnotations.initMocks(this);
         mContext = spy(RuntimeEnvironment.application);
+        mLifecycleOwner = () -> mLifecycle;
+        mLifecycle = new Lifecycle(mLifecycleOwner);
         when(mContext.getPackageManager()).thenReturn(mPackageManager);
         when(mPackageManager.hasSystemFeature(PackageManager.FEATURE_FINGERPRINT)).thenReturn(true);
         when(mPackageManager.hasSystemFeature(PackageManager.FEATURE_FACE)).thenReturn(true);
@@ -82,7 +91,8 @@
         when(mFeatureFactory.securityFeatureProvider.getLockPatternUtils(mContext))
                 .thenReturn(mLockPatternUtils);
         when(mUm.getProfileIdsWithDisabled(anyInt())).thenReturn(new int[] {1234});
-        mController = new CombinedBiometricStatusPreferenceController(mContext, TEST_PREF_KEY);
+        mController = new CombinedBiometricStatusPreferenceController(
+                mContext, TEST_PREF_KEY, mLifecycle);
     }
 
     @Test
@@ -96,5 +106,10 @@
         mController.mPreference = restrictedPreference;
         mController.updateStateInternal(admin);
         verify(restrictedPreference).setDisabledByAdmin(eq(admin));
+
+        reset(admin);
+
+        mController.updateStateInternal(null /* enforcedAdmin */);
+        verify(restrictedPreference, never()).setDisabledByAdmin(any());
     }
 }
diff --git a/tests/robotests/src/com/android/settings/biometrics/face/FaceStatusPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/biometrics/face/FaceStatusPreferenceControllerTest.java
index 92a7f4a..200cde9 100644
--- a/tests/robotests/src/com/android/settings/biometrics/face/FaceStatusPreferenceControllerTest.java
+++ b/tests/robotests/src/com/android/settings/biometrics/face/FaceStatusPreferenceControllerTest.java
@@ -23,7 +23,10 @@
 
 import static org.mockito.ArgumentMatchers.anyInt;
 import static org.mockito.ArgumentMatchers.eq;
+import static org.mockito.Mockito.any;
 import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.never;
+import static org.mockito.Mockito.reset;
 import static org.mockito.Mockito.spy;
 import static org.mockito.Mockito.verify;
 import static org.mockito.Mockito.when;
@@ -34,6 +37,7 @@
 import android.hardware.face.FaceManager;
 import android.os.UserManager;
 
+import androidx.lifecycle.LifecycleOwner;
 import androidx.preference.Preference;
 
 import com.android.internal.widget.LockPatternUtils;
@@ -41,6 +45,7 @@
 import com.android.settings.testutils.FakeFeatureFactory;
 import com.android.settingslib.RestrictedLockUtils;
 import com.android.settingslib.RestrictedPreference;
+import com.android.settingslib.core.lifecycle.Lifecycle;
 
 import org.junit.Before;
 import org.junit.Test;
@@ -71,11 +76,15 @@
     private Context mContext;
     private FaceStatusPreferenceController mController;
     private Preference mPreference;
+    private Lifecycle mLifecycle;
+    private LifecycleOwner mLifecycleOwner;
 
     @Before
     public void setUp() {
         MockitoAnnotations.initMocks(this);
         mContext = spy(RuntimeEnvironment.application);
+        mLifecycleOwner = () -> mLifecycle;
+        mLifecycle = new Lifecycle(mLifecycleOwner);
         when(mContext.getPackageManager()).thenReturn(mPackageManager);
         when(mPackageManager.hasSystemFeature(PackageManager.FEATURE_FACE)).thenReturn(true);
         ShadowApplication.getInstance().setSystemService(Context.FACE_SERVICE, mFaceManager);
@@ -85,7 +94,7 @@
         when(mFeatureFactory.securityFeatureProvider.getLockPatternUtils(mContext))
                 .thenReturn(mLockPatternUtils);
         when(mUm.getProfileIdsWithDisabled(anyInt())).thenReturn(new int[] {1234});
-        mController = new FaceStatusPreferenceController(mContext, TEST_PREF_KEY);
+        mController = new FaceStatusPreferenceController(mContext, TEST_PREF_KEY, mLifecycle);
     }
 
     @Test
@@ -147,5 +156,10 @@
         mController.mPreference = restrictedPreference;
         mController.updateStateInternal(admin);
         verify(restrictedPreference).setDisabledByAdmin(eq(admin));
+
+        reset(admin);
+
+        mController.updateStateInternal(null /* enforcedAdmin */);
+        verify(restrictedPreference, never()).setDisabledByAdmin(any());
     }
 }
diff --git a/tests/robotests/src/com/android/settings/biometrics/fingerprint/FingerprintStatusPreferenceControllerTest.java b/tests/robotests/src/com/android/settings/biometrics/fingerprint/FingerprintStatusPreferenceControllerTest.java
index b0137a1..d8a8726 100644
--- a/tests/robotests/src/com/android/settings/biometrics/fingerprint/FingerprintStatusPreferenceControllerTest.java
+++ b/tests/robotests/src/com/android/settings/biometrics/fingerprint/FingerprintStatusPreferenceControllerTest.java
@@ -23,7 +23,10 @@
 
 import static org.mockito.ArgumentMatchers.anyInt;
 import static org.mockito.ArgumentMatchers.eq;
+import static org.mockito.Mockito.any;
 import static org.mockito.Mockito.mock;
+import static org.mockito.Mockito.never;
+import static org.mockito.Mockito.reset;
 import static org.mockito.Mockito.spy;
 import static org.mockito.Mockito.verify;
 import static org.mockito.Mockito.when;
@@ -34,6 +37,7 @@
 import android.hardware.fingerprint.FingerprintManager;
 import android.os.UserManager;
 
+import androidx.lifecycle.LifecycleOwner;
 import androidx.preference.Preference;
 
 import com.android.internal.widget.LockPatternUtils;
@@ -41,6 +45,7 @@
 import com.android.settings.testutils.FakeFeatureFactory;
 import com.android.settingslib.RestrictedLockUtils;
 import com.android.settingslib.RestrictedPreference;
+import com.android.settingslib.core.lifecycle.Lifecycle;
 
 import org.junit.Before;
 import org.junit.Test;
@@ -69,11 +74,15 @@
     private Context mContext;
     private FingerprintStatusPreferenceController mController;
     private Preference mPreference;
+    private Lifecycle mLifecycle;
+    private LifecycleOwner mLifecycleOwner;
 
     @Before
     public void setUp() {
         MockitoAnnotations.initMocks(this);
         mContext = spy(RuntimeEnvironment.application);
+        mLifecycleOwner = () -> mLifecycle;
+        mLifecycle = new Lifecycle(mLifecycleOwner);
         when(mContext.getPackageManager()).thenReturn(mPackageManager);
         when(mPackageManager.hasSystemFeature(PackageManager.FEATURE_FINGERPRINT)).thenReturn(true);
         ShadowApplication.getInstance().setSystemService(Context.FINGERPRINT_SERVICE,
@@ -84,7 +93,7 @@
         when(mFeatureFactory.securityFeatureProvider.getLockPatternUtils(mContext))
                 .thenReturn(mLockPatternUtils);
         when(mUm.getProfileIdsWithDisabled(anyInt())).thenReturn(new int[] {1234});
-        mController = new FingerprintStatusPreferenceController(mContext);
+        mController = new FingerprintStatusPreferenceController(mContext, mLifecycle);
     }
 
     @Test
@@ -145,5 +154,10 @@
         mController.mPreference = restrictedPreference;
         mController.updateStateInternal(admin);
         verify(restrictedPreference).setDisabledByAdmin(eq(admin));
+
+        reset(admin);
+
+        mController.updateStateInternal(null /* enforcedAdmin */);
+        verify(restrictedPreference, never()).setDisabledByAdmin(any());
     }
 }