Merge changes Id3a155a2,Ifbb9dfe3 into tm-qpr-dev am: 35ee3e1ba5

Original change: https://googleplex-android-review.googlesource.com/c/platform/frameworks/base/+/21802783

Change-Id: I51731f453680d9462bb0ca9b4d93c0d071c6cf39
Signed-off-by: Automerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>
This commit is contained in:
Justin Weir
2023-03-09 21:10:55 +00:00
committed by Automerger Merge Worker
5 changed files with 97 additions and 8 deletions

View File

@@ -3572,7 +3572,8 @@ public class CentralSurfacesImpl implements CoreStartable, CentralSurfaces {
boolean goingToSleepWithoutAnimation = isGoingToSleep() boolean goingToSleepWithoutAnimation = isGoingToSleep()
&& !mDozeParameters.shouldControlScreenOff(); && !mDozeParameters.shouldControlScreenOff();
boolean disabled = (!mDeviceInteractive && !mDozeServiceHost.isPulsing()) boolean disabled = (!mDeviceInteractive && !mDozeServiceHost.isPulsing())
|| goingToSleepWithoutAnimation; || goingToSleepWithoutAnimation
|| mDeviceProvisionedController.isFrpActive();
mNotificationPanelViewController.setTouchAndAnimationDisabled(disabled); mNotificationPanelViewController.setTouchAndAnimationDisabled(disabled);
mNotificationIconAreaController.setAnimationsEnabled(!disabled); mNotificationIconAreaController.setAnimationsEnabled(!disabled);
} }

View File

@@ -21,7 +21,8 @@ import com.android.systemui.statusbar.policy.DeviceProvisionedController.DeviceP
/** /**
* Controller to cache in process the state of the device provisioning. * Controller to cache in process the state of the device provisioning.
* <p> * <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> { public interface DeviceProvisionedController extends CallbackController<DeviceProvisionedListener> {
@@ -49,6 +50,9 @@ public interface DeviceProvisionedController extends CallbackController<DevicePr
*/ */
boolean isCurrentUserSetup(); boolean isCurrentUserSetup();
/** Returns true when Factory Reset Protection is locking the device. */
boolean isFrpActive();
/** /**
* Interface to provide calls when the values tracked change * 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 * Call when some user changes from not provisioned to provisioned
*/ */
default void onUserSetupChanged() { } default void onUserSetupChanged() { }
/**
* Called when the state of FRP changes.
*/
default void onFrpActiveChanged() {}
} }
} }

View File

@@ -60,9 +60,11 @@ open class DeviceProvisionedControllerImpl @Inject constructor(
} }
private val deviceProvisionedUri = globalSettings.getUriFor(Settings.Global.DEVICE_PROVISIONED) 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 userSetupUri = secureSettings.getUriFor(Settings.Secure.USER_SETUP_COMPLETE)
private val deviceProvisioned = AtomicBoolean(false) private val deviceProvisioned = AtomicBoolean(false)
private val frpActive = AtomicBoolean(false)
@GuardedBy("lock") @GuardedBy("lock")
private val userSetupComplete = SparseBooleanArray() private val userSetupComplete = SparseBooleanArray()
@GuardedBy("lock") @GuardedBy("lock")
@@ -89,11 +91,15 @@ open class DeviceProvisionedControllerImpl @Inject constructor(
userId: Int userId: Int
) { ) {
val updateDeviceProvisioned = deviceProvisionedUri in uris val updateDeviceProvisioned = deviceProvisionedUri in uris
val updateFrp = frpActiveUri in uris
val updateUser = if (userSetupUri in uris) userId else NO_USERS val updateUser = if (userSetupUri in uris) userId else NO_USERS
updateValues(updateDeviceProvisioned, updateUser) updateValues(updateDeviceProvisioned, updateFrp, updateUser)
if (updateDeviceProvisioned) { if (updateDeviceProvisioned) {
onDeviceProvisionedChanged() onDeviceProvisionedChanged()
} }
if (updateFrp) {
onFrpActiveChanged()
}
if (updateUser != NO_USERS) { if (updateUser != NO_USERS) {
onUserSetupChanged() onUserSetupChanged()
} }
@@ -103,7 +109,7 @@ open class DeviceProvisionedControllerImpl @Inject constructor(
private val userChangedCallback = object : UserTracker.Callback { private val userChangedCallback = object : UserTracker.Callback {
@WorkerThread @WorkerThread
override fun onUserChanged(newUser: Int, userContext: Context) { override fun onUserChanged(newUser: Int, userContext: Context) {
updateValues(updateDeviceProvisioned = false, updateUser = newUser) updateValues(updateDeviceProvisioned = false, updateFrp = false, updateUser = newUser)
onUserSwitched() onUserSwitched()
} }
@@ -125,19 +131,27 @@ open class DeviceProvisionedControllerImpl @Inject constructor(
updateValues() updateValues()
userTracker.addCallback(userChangedCallback, backgroundExecutor) userTracker.addCallback(userChangedCallback, backgroundExecutor)
globalSettings.registerContentObserver(deviceProvisionedUri, observer) globalSettings.registerContentObserver(deviceProvisionedUri, observer)
globalSettings.registerContentObserver(frpActiveUri, observer)
secureSettings.registerContentObserverForUser(userSetupUri, observer, UserHandle.USER_ALL) secureSettings.registerContentObserverForUser(userSetupUri, observer, UserHandle.USER_ALL)
} }
@WorkerThread @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) { if (updateDeviceProvisioned) {
deviceProvisioned deviceProvisioned
.set(globalSettings.getInt(Settings.Global.DEVICE_PROVISIONED, 0) != 0) .set(globalSettings.getInt(Settings.Global.DEVICE_PROVISIONED, 0) != 0)
} }
if (updateFrp) {
frpActive.set(globalSettings.getInt(Settings.Secure.SECURE_FRP_MODE, 0) != 0)
}
synchronized(lock) { synchronized(lock) {
if (updateUser == ALL_USERS) { if (updateUser == ALL_USERS) {
val N = userSetupComplete.size() val n = userSetupComplete.size()
for (i in 0 until N) { for (i in 0 until n) {
val user = userSetupComplete.keyAt(i) val user = userSetupComplete.keyAt(i)
val value = secureSettings val value = secureSettings
.getIntForUser(Settings.Secure.USER_SETUP_COMPLETE, 0, user) != 0 .getIntForUser(Settings.Secure.USER_SETUP_COMPLETE, 0, user) != 0
@@ -172,6 +186,10 @@ open class DeviceProvisionedControllerImpl @Inject constructor(
return deviceProvisioned.get() return deviceProvisioned.get()
} }
override fun isFrpActive(): Boolean {
return frpActive.get()
}
override fun isUserSetup(user: Int): Boolean { override fun isUserSetup(user: Int): Boolean {
val index = synchronized(lock) { val index = synchronized(lock) {
userSetupComplete.indexOfKey(user) userSetupComplete.indexOfKey(user)
@@ -200,6 +218,12 @@ open class DeviceProvisionedControllerImpl @Inject constructor(
) )
} }
override fun onFrpActiveChanged() {
dispatchChange(
DeviceProvisionedController.DeviceProvisionedListener::onFrpActiveChanged
)
}
override fun onUserSetupChanged() { override fun onUserSetupChanged() {
dispatchChange(DeviceProvisionedController.DeviceProvisionedListener::onUserSetupChanged) dispatchChange(DeviceProvisionedController.DeviceProvisionedListener::onUserSetupChanged)
} }
@@ -221,6 +245,7 @@ open class DeviceProvisionedControllerImpl @Inject constructor(
override fun dump(pw: PrintWriter, args: Array<out String>) { override fun dump(pw: PrintWriter, args: Array<out String>) {
pw.println("Device provisioned: ${deviceProvisioned.get()}") pw.println("Device provisioned: ${deviceProvisioned.get()}")
pw.println("Factory Reset Protection active: ${frpActive.get()}")
synchronized(lock) { synchronized(lock) {
pw.println("User setup complete: $userSetupComplete") pw.println("User setup complete: $userSetupComplete")
pw.println("Listeners: $listeners") pw.println("Listeners: $listeners")

View File

@@ -1259,6 +1259,15 @@ public class CentralSurfacesImplTest extends SysuiTestCase {
verify(mPowerManagerService, never()).wakeUp(anyLong(), anyInt(), anyString(), anyString()); 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} * Configures the appropriate mocks and then calls {@link CentralSurfacesImpl#updateIsKeyguard}
* to reconfigure the keyguard to reflect the requested showing/occluded states. * to reconfigure the keyguard to reflect the requested showing/occluded states.

View File

@@ -89,6 +89,12 @@ class DeviceProvisionedControllerImplTest : SysuiTestCase() {
assertThat(controller.isDeviceProvisioned).isFalse() assertThat(controller.isDeviceProvisioned).isFalse()
} }
@Test
fun testFrpNotActiveByDefault() {
init()
assertThat(controller.isFrpActive).isFalse()
}
@Test @Test
fun testNotUserSetupByDefault() { fun testNotUserSetupByDefault() {
init() init()
@@ -103,6 +109,14 @@ class DeviceProvisionedControllerImplTest : SysuiTestCase() {
assertThat(controller.isDeviceProvisioned).isTrue() assertThat(controller.isDeviceProvisioned).isTrue()
} }
@Test
fun testFrpActiveWhenCreated() {
settings.putInt(Settings.Secure.SECURE_FRP_MODE, 1)
init()
assertThat(controller.isFrpActive).isTrue()
}
@Test @Test
fun testUserSetupWhenCreated() { fun testUserSetupWhenCreated() {
settings.putIntForUser(Settings.Secure.USER_SETUP_COMPLETE, 1, START_USER) settings.putIntForUser(Settings.Secure.USER_SETUP_COMPLETE, 1, START_USER)
@@ -121,6 +135,16 @@ class DeviceProvisionedControllerImplTest : SysuiTestCase() {
assertThat(controller.isDeviceProvisioned).isTrue() 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 @Test
fun testUserSetupChange() { fun testUserSetupChange() {
init() init()
@@ -164,6 +188,7 @@ class DeviceProvisionedControllerImplTest : SysuiTestCase() {
mainExecutor.runAllReady() mainExecutor.runAllReady()
verify(listener, never()).onDeviceProvisionedChanged() verify(listener, never()).onDeviceProvisionedChanged()
verify(listener, never()).onFrpActiveChanged()
verify(listener, never()).onUserSetupChanged() verify(listener, never()).onUserSetupChanged()
verify(listener, never()).onUserSwitched() verify(listener, never()).onUserSwitched()
} }
@@ -181,6 +206,7 @@ class DeviceProvisionedControllerImplTest : SysuiTestCase() {
verify(listener).onUserSwitched() verify(listener).onUserSwitched()
verify(listener, never()).onUserSetupChanged() verify(listener, never()).onUserSetupChanged()
verify(listener, never()).onDeviceProvisionedChanged() verify(listener, never()).onDeviceProvisionedChanged()
verify(listener, never()).onFrpActiveChanged()
} }
@Test @Test
@@ -195,6 +221,7 @@ class DeviceProvisionedControllerImplTest : SysuiTestCase() {
verify(listener, never()).onUserSwitched() verify(listener, never()).onUserSwitched()
verify(listener).onUserSetupChanged() verify(listener).onUserSetupChanged()
verify(listener, never()).onDeviceProvisionedChanged() verify(listener, never()).onDeviceProvisionedChanged()
verify(listener, never()).onFrpActiveChanged()
} }
@Test @Test
@@ -208,9 +235,25 @@ class DeviceProvisionedControllerImplTest : SysuiTestCase() {
verify(listener, never()).onUserSwitched() verify(listener, never()).onUserSwitched()
verify(listener, never()).onUserSetupChanged() verify(listener, never()).onUserSetupChanged()
verify(listener, never()).onFrpActiveChanged()
verify(listener).onDeviceProvisionedChanged() 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 @Test
fun testRemoveListener() { fun testRemoveListener() {
init() init()
@@ -220,11 +263,13 @@ class DeviceProvisionedControllerImplTest : SysuiTestCase() {
switchUser(10) switchUser(10)
settings.putIntForUser(Settings.Secure.USER_SETUP_COMPLETE, 1, START_USER) settings.putIntForUser(Settings.Secure.USER_SETUP_COMPLETE, 1, START_USER)
settings.putInt(Settings.Global.DEVICE_PROVISIONED, 1) settings.putInt(Settings.Global.DEVICE_PROVISIONED, 1)
settings.putInt(Settings.Secure.SECURE_FRP_MODE, 1)
testableLooper.processAllMessages() testableLooper.processAllMessages()
mainExecutor.runAllReady() mainExecutor.runAllReady()
verify(listener, never()).onDeviceProvisionedChanged() verify(listener, never()).onDeviceProvisionedChanged()
verify(listener, never()).onFrpActiveChanged()
verify(listener, never()).onUserSetupChanged() verify(listener, never()).onUserSetupChanged()
verify(listener, never()).onUserSwitched() verify(listener, never()).onUserSwitched()
} }