diff options
| author | 2023-03-09 20:46:31 +0000 | |
|---|---|---|
| committer | 2023-03-09 20:46:31 +0000 | |
| commit | 35ee3e1ba57e93090b56c8931e52f23fc8cbbe11 (patch) | |
| tree | 08ec524bf0420072fa26ae0ccbcc37ebaa4af46f | |
| parent | d319f10c94f0716c2cf3375efe608d9e41ae3caa (diff) | |
| parent | 421cf7df11caeb8504ab3e0b0d05d198c9667f97 (diff) | |
Merge changes Id3a155a2,Ifbb9dfe3 into tm-qpr-dev
* changes:
Disable shade open when FRP is active
Add FRP setting to DeviceProvisionController
5 files changed, 97 insertions, 8 deletions
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/CentralSurfacesImpl.java b/packages/SystemUI/src/com/android/systemui/statusbar/phone/CentralSurfacesImpl.java index b5d51ce2b9ee..2e3e71757daa 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/CentralSurfacesImpl.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/CentralSurfacesImpl.java @@ -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); } diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/policy/DeviceProvisionedController.java b/packages/SystemUI/src/com/android/systemui/statusbar/policy/DeviceProvisionedController.java index 3944c8c77f49..0d09fc184892 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/policy/DeviceProvisionedController.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/policy/DeviceProvisionedController.java @@ -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> { @@ -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 */ @@ -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() {} } } diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/policy/DeviceProvisionedControllerImpl.kt b/packages/SystemUI/src/com/android/systemui/statusbar/policy/DeviceProvisionedControllerImpl.kt index a6b7d9c56900..32c64f457501 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/policy/DeviceProvisionedControllerImpl.kt +++ b/packages/SystemUI/src/com/android/systemui/statusbar/policy/DeviceProvisionedControllerImpl.kt @@ -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") @@ -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() } @@ -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() } @@ -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 @@ -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) @@ -196,7 +214,13 @@ open class DeviceProvisionedControllerImpl @Inject constructor( override fun onDeviceProvisionedChanged() { dispatchChange( - DeviceProvisionedController.DeviceProvisionedListener::onDeviceProvisionedChanged + DeviceProvisionedController.DeviceProvisionedListener::onDeviceProvisionedChanged + ) + } + + override fun onFrpActiveChanged() { + dispatchChange( + DeviceProvisionedController.DeviceProvisionedListener::onFrpActiveChanged ) } @@ -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") diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/CentralSurfacesImplTest.java b/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/CentralSurfacesImplTest.java index 5a5b1424758f..52a93e7e07b3 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/CentralSurfacesImplTest.java +++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/CentralSurfacesImplTest.java @@ -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. diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/policy/DeviceProvisionedControllerImplTest.kt b/packages/SystemUI/tests/src/com/android/systemui/statusbar/policy/DeviceProvisionedControllerImplTest.kt index 5129f8584165..6980a0b4565e 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/statusbar/policy/DeviceProvisionedControllerImplTest.kt +++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/policy/DeviceProvisionedControllerImplTest.kt @@ -90,6 +90,12 @@ class DeviceProvisionedControllerImplTest : SysuiTestCase() { } @Test + fun testFrpNotActiveByDefault() { + init() + assertThat(controller.isFrpActive).isFalse() + } + + @Test fun testNotUserSetupByDefault() { init() assertThat(controller.isUserSetup(START_USER)).isFalse() @@ -104,6 +110,14 @@ class DeviceProvisionedControllerImplTest : SysuiTestCase() { } @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) init() @@ -122,6 +136,16 @@ class DeviceProvisionedControllerImplTest : SysuiTestCase() { } @Test + fun testFrpActiveChange() { + init() + + settings.putInt(Settings.Secure.SECURE_FRP_MODE, 1) + testableLooper.processAllMessages() // background observer + + assertThat(controller.isFrpActive).isTrue() + } + + @Test fun testUserSetupChange() { init() @@ -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() } @@ -181,6 +206,7 @@ class DeviceProvisionedControllerImplTest : SysuiTestCase() { verify(listener).onUserSwitched() verify(listener, never()).onUserSetupChanged() verify(listener, never()).onDeviceProvisionedChanged() + verify(listener, never()).onFrpActiveChanged() } @Test @@ -195,6 +221,7 @@ class DeviceProvisionedControllerImplTest : SysuiTestCase() { verify(listener, never()).onUserSwitched() verify(listener).onUserSetupChanged() verify(listener, never()).onDeviceProvisionedChanged() + verify(listener, never()).onFrpActiveChanged() } @Test @@ -208,10 +235,26 @@ 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() controller.addCallback(listener) @@ -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() } |