BypassEnabled change is not propagated when face enrollment state changes.
- KeyguardStateController was not calling onFaceAuthEnabledChanged() when the enrollment state changes upstream in KeyguardUpdateMonitor
- bypassEnabled getter combines three values: actual setting value && face auth enrolled && posture supports face auth
- When the device first boots up, face enrollment state in KeyguardUpdateMonitor is always false
- Once AuthController#onEnrollmentsChanged gets invoked, KeyguardUpdateMonitor gets the correct enrollment state
- That change is not propagated down to KeyguardBypassController until the bypassEnabled property is read again.
Why is this not an issue currently?
- In the old system, we keep re-reading the property value which ensures we don't miss the update.
- With the new face auth system, we rely on state changes to be published always
- When bypassEnabled is initially false, we assume there will be an update when it changes and don't keep re-checking the property value.
- However, that update never comes until we auth once, which triggers state changes that eventually make us re-read the property.
Bug: 285523886
Test: atest KeyguardBypassControllerTest
Test: atest KeyguardUpdateMonitorTest
Test: atest KeyguardStateControllerTest
Change-Id: I544c3426972dcc03662848096fc1cac1c9412a75
7 files changed