Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 38261353 authored by Justin Weir's avatar Justin Weir Committed by Automerger Merge Worker
Browse files

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

Merge changes Id3a155a2,Ifbb9dfe3 into tm-qpr-dev am: 35ee3e1b am: 1332019e am: d5d57bed am: f3f38204

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



Change-Id: Ie21d0650fab77e6cd131834de9a0a17580f8e3b7
Signed-off-by: default avatarAutomerger Merge Worker <android-build-automerger-merge-worker@system.gserviceaccount.com>
parents 407ce313 f3f38204
Loading
Loading
Loading
Loading
+2 −1
Original line number Diff line number Diff line
@@ -3623,7 +3623,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);
    }
+10 −1
Original line number Diff line number Diff line
@@ -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() {}
    }
}
+31 −6
Original line number Diff line number Diff line
@@ -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)
@@ -200,6 +218,12 @@ open class DeviceProvisionedControllerImpl @Inject constructor(
        )
    }

    override fun onFrpActiveChanged() {
        dispatchChange(
            DeviceProvisionedController.DeviceProvisionedListener::onFrpActiveChanged
        )
    }

    override fun onUserSetupChanged() {
        dispatchChange(DeviceProvisionedController.DeviceProvisionedListener::onUserSetupChanged)
    }
@@ -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")
+9 −0
Original line number Diff line number Diff line
@@ -1314,6 +1314,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.
+45 −0
Original line number Diff line number Diff line
@@ -89,6 +89,12 @@ class DeviceProvisionedControllerImplTest : SysuiTestCase() {
        assertThat(controller.isDeviceProvisioned).isFalse()
    }

    @Test
    fun testFrpNotActiveByDefault() {
        init()
        assertThat(controller.isFrpActive).isFalse()
    }

    @Test
    fun testNotUserSetupByDefault() {
        init()
@@ -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)
@@ -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()
@@ -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,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()
@@ -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()
    }