Loading packages/SystemUI/src/com/android/systemui/statusbar/phone/CentralSurfacesImpl.java +2 −1 Original line number Diff line number Diff line Loading @@ -3571,7 +3571,8 @@ public class CentralSurfacesImpl implements CoreStartable, CentralSurfaces { boolean goingToSleepWithoutAnimation = isGoingToSleep() && !mDozeParameters.shouldControlScreenOff(); boolean disabled = (!mDeviceInteractive && !mDozeServiceHost.isPulsing()) || goingToSleepWithoutAnimation; || goingToSleepWithoutAnimation || mDeviceProvisionedController.isFrpActive(); mNotificationPanelViewController.setTouchAndAnimationDisabled(disabled); mNotificationIconAreaController.setAnimationsEnabled(!disabled); } Loading packages/SystemUI/src/com/android/systemui/statusbar/policy/DeviceProvisionedController.java +10 −1 Original line number Diff line number Diff line Loading @@ -21,7 +21,8 @@ import com.android.systemui.statusbar.policy.DeviceProvisionedController.DeviceP /** * Controller to cache in process the state of the device provisioning. * <p> * This controller keeps track of the values of device provisioning and user setup complete * This controller keeps track of the values of device provisioning, user setup complete, and * whether Factory Reset Protection is active. */ public interface DeviceProvisionedController extends CallbackController<DeviceProvisionedListener> { Loading Loading @@ -49,6 +50,9 @@ public interface DeviceProvisionedController extends CallbackController<DevicePr */ boolean isCurrentUserSetup(); /** Returns true when Factory Reset Protection is locking the device. */ boolean isFrpActive(); /** * Interface to provide calls when the values tracked change */ Loading @@ -69,5 +73,10 @@ public interface DeviceProvisionedController extends CallbackController<DevicePr * Call when some user changes from not provisioned to provisioned */ default void onUserSetupChanged() { } /** * Called when the state of FRP changes. */ default void onFrpActiveChanged() {} } } packages/SystemUI/src/com/android/systemui/statusbar/policy/DeviceProvisionedControllerImpl.kt +31 −6 Original line number Diff line number Diff line Loading @@ -60,9 +60,11 @@ open class DeviceProvisionedControllerImpl @Inject constructor( } private val deviceProvisionedUri = globalSettings.getUriFor(Settings.Global.DEVICE_PROVISIONED) private val frpActiveUri = secureSettings.getUriFor(Settings.Secure.SECURE_FRP_MODE) private val userSetupUri = secureSettings.getUriFor(Settings.Secure.USER_SETUP_COMPLETE) private val deviceProvisioned = AtomicBoolean(false) private val frpActive = AtomicBoolean(false) @GuardedBy("lock") private val userSetupComplete = SparseBooleanArray() @GuardedBy("lock") Loading @@ -89,11 +91,15 @@ open class DeviceProvisionedControllerImpl @Inject constructor( userId: Int ) { val updateDeviceProvisioned = deviceProvisionedUri in uris val updateFrp = frpActiveUri in uris val updateUser = if (userSetupUri in uris) userId else NO_USERS updateValues(updateDeviceProvisioned, updateUser) updateValues(updateDeviceProvisioned, updateFrp, updateUser) if (updateDeviceProvisioned) { onDeviceProvisionedChanged() } if (updateFrp) { onFrpActiveChanged() } if (updateUser != NO_USERS) { onUserSetupChanged() } Loading @@ -103,7 +109,7 @@ open class DeviceProvisionedControllerImpl @Inject constructor( private val userChangedCallback = object : UserTracker.Callback { @WorkerThread override fun onUserChanged(newUser: Int, userContext: Context) { updateValues(updateDeviceProvisioned = false, updateUser = newUser) updateValues(updateDeviceProvisioned = false, updateFrp = false, updateUser = newUser) onUserSwitched() } Loading @@ -125,19 +131,27 @@ open class DeviceProvisionedControllerImpl @Inject constructor( updateValues() userTracker.addCallback(userChangedCallback, backgroundExecutor) globalSettings.registerContentObserver(deviceProvisionedUri, observer) globalSettings.registerContentObserver(frpActiveUri, observer) secureSettings.registerContentObserverForUser(userSetupUri, observer, UserHandle.USER_ALL) } @WorkerThread private fun updateValues(updateDeviceProvisioned: Boolean = true, updateUser: Int = ALL_USERS) { private fun updateValues( updateDeviceProvisioned: Boolean = true, updateFrp: Boolean = true, updateUser: Int = ALL_USERS ) { if (updateDeviceProvisioned) { deviceProvisioned .set(globalSettings.getInt(Settings.Global.DEVICE_PROVISIONED, 0) != 0) } if (updateFrp) { frpActive.set(globalSettings.getInt(Settings.Secure.SECURE_FRP_MODE, 0) != 0) } synchronized(lock) { if (updateUser == ALL_USERS) { val N = userSetupComplete.size() for (i in 0 until N) { val n = userSetupComplete.size() for (i in 0 until n) { val user = userSetupComplete.keyAt(i) val value = secureSettings .getIntForUser(Settings.Secure.USER_SETUP_COMPLETE, 0, user) != 0 Loading Loading @@ -172,6 +186,10 @@ open class DeviceProvisionedControllerImpl @Inject constructor( return deviceProvisioned.get() } override fun isFrpActive(): Boolean { return frpActive.get() } override fun isUserSetup(user: Int): Boolean { val index = synchronized(lock) { userSetupComplete.indexOfKey(user) Loading Loading @@ -200,6 +218,12 @@ open class DeviceProvisionedControllerImpl @Inject constructor( ) } override fun onFrpActiveChanged() { dispatchChange( DeviceProvisionedController.DeviceProvisionedListener::onFrpActiveChanged ) } override fun onUserSetupChanged() { dispatchChange(DeviceProvisionedController.DeviceProvisionedListener::onUserSetupChanged) } Loading @@ -221,6 +245,7 @@ open class DeviceProvisionedControllerImpl @Inject constructor( override fun dump(pw: PrintWriter, args: Array<out String>) { pw.println("Device provisioned: ${deviceProvisioned.get()}") pw.println("Factory Reset Protection active: ${frpActive.get()}") synchronized(lock) { pw.println("User setup complete: $userSetupComplete") pw.println("Listeners: $listeners") Loading packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/CentralSurfacesImplTest.java +9 −0 Original line number Diff line number Diff line Loading @@ -1259,6 +1259,15 @@ public class CentralSurfacesImplTest extends SysuiTestCase { verify(mPowerManagerService, never()).wakeUp(anyLong(), anyInt(), anyString(), anyString()); } @Test public void frpLockedDevice_shadeDisabled() { when(mDeviceProvisionedController.isFrpActive()).thenReturn(true); when(mDozeServiceHost.isPulsing()).thenReturn(true); mCentralSurfaces.updateNotificationPanelTouchState(); verify(mNotificationPanelViewController).setTouchAndAnimationDisabled(true); } /** * Configures the appropriate mocks and then calls {@link CentralSurfacesImpl#updateIsKeyguard} * to reconfigure the keyguard to reflect the requested showing/occluded states. Loading packages/SystemUI/tests/src/com/android/systemui/statusbar/policy/DeviceProvisionedControllerImplTest.kt +45 −0 Original line number Diff line number Diff line Loading @@ -89,6 +89,12 @@ class DeviceProvisionedControllerImplTest : SysuiTestCase() { assertThat(controller.isDeviceProvisioned).isFalse() } @Test fun testFrpNotActiveByDefault() { init() assertThat(controller.isFrpActive).isFalse() } @Test fun testNotUserSetupByDefault() { init() Loading @@ -103,6 +109,14 @@ class DeviceProvisionedControllerImplTest : SysuiTestCase() { assertThat(controller.isDeviceProvisioned).isTrue() } @Test fun testFrpActiveWhenCreated() { settings.putInt(Settings.Secure.SECURE_FRP_MODE, 1) init() assertThat(controller.isFrpActive).isTrue() } @Test fun testUserSetupWhenCreated() { settings.putIntForUser(Settings.Secure.USER_SETUP_COMPLETE, 1, START_USER) Loading @@ -121,6 +135,16 @@ class DeviceProvisionedControllerImplTest : SysuiTestCase() { assertThat(controller.isDeviceProvisioned).isTrue() } @Test fun testFrpActiveChange() { init() settings.putInt(Settings.Secure.SECURE_FRP_MODE, 1) testableLooper.processAllMessages() // background observer assertThat(controller.isFrpActive).isTrue() } @Test fun testUserSetupChange() { init() Loading Loading @@ -164,6 +188,7 @@ class DeviceProvisionedControllerImplTest : SysuiTestCase() { mainExecutor.runAllReady() verify(listener, never()).onDeviceProvisionedChanged() verify(listener, never()).onFrpActiveChanged() verify(listener, never()).onUserSetupChanged() verify(listener, never()).onUserSwitched() } Loading @@ -181,6 +206,7 @@ class DeviceProvisionedControllerImplTest : SysuiTestCase() { verify(listener).onUserSwitched() verify(listener, never()).onUserSetupChanged() verify(listener, never()).onDeviceProvisionedChanged() verify(listener, never()).onFrpActiveChanged() } @Test Loading @@ -195,6 +221,7 @@ class DeviceProvisionedControllerImplTest : SysuiTestCase() { verify(listener, never()).onUserSwitched() verify(listener).onUserSetupChanged() verify(listener, never()).onDeviceProvisionedChanged() verify(listener, never()).onFrpActiveChanged() } @Test Loading @@ -208,9 +235,25 @@ class DeviceProvisionedControllerImplTest : SysuiTestCase() { verify(listener, never()).onUserSwitched() verify(listener, never()).onUserSetupChanged() verify(listener, never()).onFrpActiveChanged() verify(listener).onDeviceProvisionedChanged() } @Test fun testListenerCalledOnFrpActiveChanged() { init() controller.addCallback(listener) settings.putInt(Settings.Secure.SECURE_FRP_MODE, 1) testableLooper.processAllMessages() mainExecutor.runAllReady() verify(listener, never()).onUserSwitched() verify(listener, never()).onUserSetupChanged() verify(listener, never()).onDeviceProvisionedChanged() verify(listener).onFrpActiveChanged() } @Test fun testRemoveListener() { init() Loading @@ -220,11 +263,13 @@ class DeviceProvisionedControllerImplTest : SysuiTestCase() { switchUser(10) settings.putIntForUser(Settings.Secure.USER_SETUP_COMPLETE, 1, START_USER) settings.putInt(Settings.Global.DEVICE_PROVISIONED, 1) settings.putInt(Settings.Secure.SECURE_FRP_MODE, 1) testableLooper.processAllMessages() mainExecutor.runAllReady() verify(listener, never()).onDeviceProvisionedChanged() verify(listener, never()).onFrpActiveChanged() verify(listener, never()).onUserSetupChanged() verify(listener, never()).onUserSwitched() } Loading Loading
packages/SystemUI/src/com/android/systemui/statusbar/phone/CentralSurfacesImpl.java +2 −1 Original line number Diff line number Diff line Loading @@ -3571,7 +3571,8 @@ public class CentralSurfacesImpl implements CoreStartable, CentralSurfaces { boolean goingToSleepWithoutAnimation = isGoingToSleep() && !mDozeParameters.shouldControlScreenOff(); boolean disabled = (!mDeviceInteractive && !mDozeServiceHost.isPulsing()) || goingToSleepWithoutAnimation; || goingToSleepWithoutAnimation || mDeviceProvisionedController.isFrpActive(); mNotificationPanelViewController.setTouchAndAnimationDisabled(disabled); mNotificationIconAreaController.setAnimationsEnabled(!disabled); } Loading
packages/SystemUI/src/com/android/systemui/statusbar/policy/DeviceProvisionedController.java +10 −1 Original line number Diff line number Diff line Loading @@ -21,7 +21,8 @@ import com.android.systemui.statusbar.policy.DeviceProvisionedController.DeviceP /** * Controller to cache in process the state of the device provisioning. * <p> * This controller keeps track of the values of device provisioning and user setup complete * This controller keeps track of the values of device provisioning, user setup complete, and * whether Factory Reset Protection is active. */ public interface DeviceProvisionedController extends CallbackController<DeviceProvisionedListener> { Loading Loading @@ -49,6 +50,9 @@ public interface DeviceProvisionedController extends CallbackController<DevicePr */ boolean isCurrentUserSetup(); /** Returns true when Factory Reset Protection is locking the device. */ boolean isFrpActive(); /** * Interface to provide calls when the values tracked change */ Loading @@ -69,5 +73,10 @@ public interface DeviceProvisionedController extends CallbackController<DevicePr * Call when some user changes from not provisioned to provisioned */ default void onUserSetupChanged() { } /** * Called when the state of FRP changes. */ default void onFrpActiveChanged() {} } }
packages/SystemUI/src/com/android/systemui/statusbar/policy/DeviceProvisionedControllerImpl.kt +31 −6 Original line number Diff line number Diff line Loading @@ -60,9 +60,11 @@ open class DeviceProvisionedControllerImpl @Inject constructor( } private val deviceProvisionedUri = globalSettings.getUriFor(Settings.Global.DEVICE_PROVISIONED) private val frpActiveUri = secureSettings.getUriFor(Settings.Secure.SECURE_FRP_MODE) private val userSetupUri = secureSettings.getUriFor(Settings.Secure.USER_SETUP_COMPLETE) private val deviceProvisioned = AtomicBoolean(false) private val frpActive = AtomicBoolean(false) @GuardedBy("lock") private val userSetupComplete = SparseBooleanArray() @GuardedBy("lock") Loading @@ -89,11 +91,15 @@ open class DeviceProvisionedControllerImpl @Inject constructor( userId: Int ) { val updateDeviceProvisioned = deviceProvisionedUri in uris val updateFrp = frpActiveUri in uris val updateUser = if (userSetupUri in uris) userId else NO_USERS updateValues(updateDeviceProvisioned, updateUser) updateValues(updateDeviceProvisioned, updateFrp, updateUser) if (updateDeviceProvisioned) { onDeviceProvisionedChanged() } if (updateFrp) { onFrpActiveChanged() } if (updateUser != NO_USERS) { onUserSetupChanged() } Loading @@ -103,7 +109,7 @@ open class DeviceProvisionedControllerImpl @Inject constructor( private val userChangedCallback = object : UserTracker.Callback { @WorkerThread override fun onUserChanged(newUser: Int, userContext: Context) { updateValues(updateDeviceProvisioned = false, updateUser = newUser) updateValues(updateDeviceProvisioned = false, updateFrp = false, updateUser = newUser) onUserSwitched() } Loading @@ -125,19 +131,27 @@ open class DeviceProvisionedControllerImpl @Inject constructor( updateValues() userTracker.addCallback(userChangedCallback, backgroundExecutor) globalSettings.registerContentObserver(deviceProvisionedUri, observer) globalSettings.registerContentObserver(frpActiveUri, observer) secureSettings.registerContentObserverForUser(userSetupUri, observer, UserHandle.USER_ALL) } @WorkerThread private fun updateValues(updateDeviceProvisioned: Boolean = true, updateUser: Int = ALL_USERS) { private fun updateValues( updateDeviceProvisioned: Boolean = true, updateFrp: Boolean = true, updateUser: Int = ALL_USERS ) { if (updateDeviceProvisioned) { deviceProvisioned .set(globalSettings.getInt(Settings.Global.DEVICE_PROVISIONED, 0) != 0) } if (updateFrp) { frpActive.set(globalSettings.getInt(Settings.Secure.SECURE_FRP_MODE, 0) != 0) } synchronized(lock) { if (updateUser == ALL_USERS) { val N = userSetupComplete.size() for (i in 0 until N) { val n = userSetupComplete.size() for (i in 0 until n) { val user = userSetupComplete.keyAt(i) val value = secureSettings .getIntForUser(Settings.Secure.USER_SETUP_COMPLETE, 0, user) != 0 Loading Loading @@ -172,6 +186,10 @@ open class DeviceProvisionedControllerImpl @Inject constructor( return deviceProvisioned.get() } override fun isFrpActive(): Boolean { return frpActive.get() } override fun isUserSetup(user: Int): Boolean { val index = synchronized(lock) { userSetupComplete.indexOfKey(user) Loading Loading @@ -200,6 +218,12 @@ open class DeviceProvisionedControllerImpl @Inject constructor( ) } override fun onFrpActiveChanged() { dispatchChange( DeviceProvisionedController.DeviceProvisionedListener::onFrpActiveChanged ) } override fun onUserSetupChanged() { dispatchChange(DeviceProvisionedController.DeviceProvisionedListener::onUserSetupChanged) } Loading @@ -221,6 +245,7 @@ open class DeviceProvisionedControllerImpl @Inject constructor( override fun dump(pw: PrintWriter, args: Array<out String>) { pw.println("Device provisioned: ${deviceProvisioned.get()}") pw.println("Factory Reset Protection active: ${frpActive.get()}") synchronized(lock) { pw.println("User setup complete: $userSetupComplete") pw.println("Listeners: $listeners") Loading
packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/CentralSurfacesImplTest.java +9 −0 Original line number Diff line number Diff line Loading @@ -1259,6 +1259,15 @@ public class CentralSurfacesImplTest extends SysuiTestCase { verify(mPowerManagerService, never()).wakeUp(anyLong(), anyInt(), anyString(), anyString()); } @Test public void frpLockedDevice_shadeDisabled() { when(mDeviceProvisionedController.isFrpActive()).thenReturn(true); when(mDozeServiceHost.isPulsing()).thenReturn(true); mCentralSurfaces.updateNotificationPanelTouchState(); verify(mNotificationPanelViewController).setTouchAndAnimationDisabled(true); } /** * Configures the appropriate mocks and then calls {@link CentralSurfacesImpl#updateIsKeyguard} * to reconfigure the keyguard to reflect the requested showing/occluded states. Loading
packages/SystemUI/tests/src/com/android/systemui/statusbar/policy/DeviceProvisionedControllerImplTest.kt +45 −0 Original line number Diff line number Diff line Loading @@ -89,6 +89,12 @@ class DeviceProvisionedControllerImplTest : SysuiTestCase() { assertThat(controller.isDeviceProvisioned).isFalse() } @Test fun testFrpNotActiveByDefault() { init() assertThat(controller.isFrpActive).isFalse() } @Test fun testNotUserSetupByDefault() { init() Loading @@ -103,6 +109,14 @@ class DeviceProvisionedControllerImplTest : SysuiTestCase() { assertThat(controller.isDeviceProvisioned).isTrue() } @Test fun testFrpActiveWhenCreated() { settings.putInt(Settings.Secure.SECURE_FRP_MODE, 1) init() assertThat(controller.isFrpActive).isTrue() } @Test fun testUserSetupWhenCreated() { settings.putIntForUser(Settings.Secure.USER_SETUP_COMPLETE, 1, START_USER) Loading @@ -121,6 +135,16 @@ class DeviceProvisionedControllerImplTest : SysuiTestCase() { assertThat(controller.isDeviceProvisioned).isTrue() } @Test fun testFrpActiveChange() { init() settings.putInt(Settings.Secure.SECURE_FRP_MODE, 1) testableLooper.processAllMessages() // background observer assertThat(controller.isFrpActive).isTrue() } @Test fun testUserSetupChange() { init() Loading Loading @@ -164,6 +188,7 @@ class DeviceProvisionedControllerImplTest : SysuiTestCase() { mainExecutor.runAllReady() verify(listener, never()).onDeviceProvisionedChanged() verify(listener, never()).onFrpActiveChanged() verify(listener, never()).onUserSetupChanged() verify(listener, never()).onUserSwitched() } Loading @@ -181,6 +206,7 @@ class DeviceProvisionedControllerImplTest : SysuiTestCase() { verify(listener).onUserSwitched() verify(listener, never()).onUserSetupChanged() verify(listener, never()).onDeviceProvisionedChanged() verify(listener, never()).onFrpActiveChanged() } @Test Loading @@ -195,6 +221,7 @@ class DeviceProvisionedControllerImplTest : SysuiTestCase() { verify(listener, never()).onUserSwitched() verify(listener).onUserSetupChanged() verify(listener, never()).onDeviceProvisionedChanged() verify(listener, never()).onFrpActiveChanged() } @Test Loading @@ -208,9 +235,25 @@ class DeviceProvisionedControllerImplTest : SysuiTestCase() { verify(listener, never()).onUserSwitched() verify(listener, never()).onUserSetupChanged() verify(listener, never()).onFrpActiveChanged() verify(listener).onDeviceProvisionedChanged() } @Test fun testListenerCalledOnFrpActiveChanged() { init() controller.addCallback(listener) settings.putInt(Settings.Secure.SECURE_FRP_MODE, 1) testableLooper.processAllMessages() mainExecutor.runAllReady() verify(listener, never()).onUserSwitched() verify(listener, never()).onUserSetupChanged() verify(listener, never()).onDeviceProvisionedChanged() verify(listener).onFrpActiveChanged() } @Test fun testRemoveListener() { init() Loading @@ -220,11 +263,13 @@ class DeviceProvisionedControllerImplTest : SysuiTestCase() { switchUser(10) settings.putIntForUser(Settings.Secure.USER_SETUP_COMPLETE, 1, START_USER) settings.putInt(Settings.Global.DEVICE_PROVISIONED, 1) settings.putInt(Settings.Secure.SECURE_FRP_MODE, 1) testableLooper.processAllMessages() mainExecutor.runAllReady() verify(listener, never()).onDeviceProvisionedChanged() verify(listener, never()).onFrpActiveChanged() verify(listener, never()).onUserSetupChanged() verify(listener, never()).onUserSwitched() } Loading