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

Commit 2a6c2260 authored by Sandy Pan's avatar Sandy Pan Committed by Android (Google) Code Review
Browse files

Merge "Finish setup activity when supervision lock is already set." into main

parents 5371c0c9 63beac8a
Loading
Loading
Loading
Loading
+15 −2
Original line number Diff line number Diff line
@@ -58,11 +58,24 @@ class SetupSupervisionActivity : FragmentActivity() {
    public override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)

        if (isSupervisingCredentialSet) {
            setResult(RESULT_CANCELED)
            finish()
        }
        if (savedInstanceState == null) {
            enableSupervision()
        }
    }

    public override fun onResume() {
        super.onResume()

        if (isSupervisingCredentialSet) {
            setResult(RESULT_OK)
            finish()
        }
    }

    @RequiresPermission(anyOf = [CREATE_USERS, MANAGE_USERS])
    private fun enableSupervision() {
        val userManager = getSystemService(UserManager::class.java)
@@ -165,7 +178,7 @@ class SetupSupervisionActivity : FragmentActivity() {
    }

    companion object {
        private const val REQUEST_CODE_SET_SUPERVISION_LOCK = 0
        private const val REQUEST_CODE_SET_PIN_RECOVERY = 1
        private const val REQUEST_CODE_SET_SUPERVISION_LOCK = 1000
        private const val REQUEST_CODE_SET_PIN_RECOVERY = 1001
    }
}
+36 −3
Original line number Diff line number Diff line
@@ -71,7 +71,7 @@ class SetupSupervisionActivityTest {

        mockUserManager.stub { on { users } doReturn listOf(SUPERVISING_USER_INFO) }
        mockActivityManager.stub { on { startProfile(any()) } doReturn true }
        shadowKeyguardManager.setIsDeviceSecure(SUPERVISING_USER_ID, true)
        shadowKeyguardManager.setIsDeviceSecure(SUPERVISING_USER_ID, false)
    }

    @Test
@@ -80,6 +80,7 @@ class SetupSupervisionActivityTest {
            on { users } doReturn emptyList()
            on { createUser(any(), any(), any()) } doReturn SUPERVISING_USER_INFO
        }
        shadowKeyguardManager.setIsDeviceSecure(SUPERVISING_USER_ID, true)

        ActivityScenario.launch(SetupSupervisionActivity::class.java).use { scenario ->
            scenario.onActivity { activity ->
@@ -135,12 +136,42 @@ class SetupSupervisionActivityTest {
        }
    }

    @Test
    fun onCreate_existingSupervisingLock_finishes() {
        shadowKeyguardManager.setIsDeviceSecure(SUPERVISING_USER_ID, true)

        ActivityScenario.launchActivityForResult(SetupSupervisionActivity::class.java).use {
            scenario ->
            assertThat(scenario.state).isEqualTo(Lifecycle.State.DESTROYED)
            assertThat(scenario.result.resultCode).isEqualTo(RESULT_CANCELED)
        }
    }

    @Test
    fun onResume_existingSupervisingLock_finishes() {
        shadowKeyguardManager.setIsDeviceSecure(SUPERVISING_USER_ID, false)

        ActivityScenario.launchActivityForResult(SetupSupervisionActivity::class.java).use {
            scenario ->
            scenario.moveToState(Lifecycle.State.STARTED)

            shadowKeyguardManager.setIsDeviceSecure(SUPERVISING_USER_ID, true)
            scenario.moveToState(Lifecycle.State.RESUMED)

            scenario.onActivity { activity -> assertThat(activity.isFinishing).isTrue() }
            assertThat(scenario.result.resultCode).isEqualTo(RESULT_OK)
        }
    }

    @Test
    @EnableFlags(Flags.FLAG_ENABLE_SUPERVISION_PIN_RECOVERY_SCREEN)
    fun onSetLockResult_startsRecoveryActivity() {
        shadowKeyguardManager.setIsDeviceSecure(SUPERVISING_USER_ID, false)

        ActivityScenario.launch(SetupSupervisionActivity::class.java).use { scenario ->
            scenario.onActivity { activity ->
                val shadowActivity = shadowOf(activity)
                shadowKeyguardManager.setIsDeviceSecure(SUPERVISING_USER_ID, true)
                shadowActivity.receiveResult(
                    shadowActivity.nextStartedActivityForResult.intent,
                    RESULT_OK,
@@ -178,8 +209,6 @@ class SetupSupervisionActivityTest {

    @Test
    fun onSetLockResult_supervisingUserNotSecure_canceled() {
        shadowKeyguardManager.setIsDeviceSecure(SUPERVISING_USER_ID, false)

        ActivityScenario.launchActivityForResult(SetupSupervisionActivity::class.java).use {
            scenario ->
            scenario.onActivity { activity ->
@@ -200,16 +229,20 @@ class SetupSupervisionActivityTest {
    @Test
    @EnableFlags(Flags.FLAG_ENABLE_SUPERVISION_PIN_RECOVERY_SCREEN)
    fun onPinRecoveryResult_finishesOk() {
        shadowKeyguardManager.setIsDeviceSecure(SUPERVISING_USER_ID, false)

        ActivityScenario.launchActivityForResult(SetupSupervisionActivity::class.java).use {
            scenario ->
            scenario.onActivity { activity ->
                val shadowActivity = shadowOf(activity)
                shadowKeyguardManager.setIsDeviceSecure(SUPERVISING_USER_ID, true)
                // Set PIN result.
                shadowActivity.receiveResult(
                    shadowActivity.nextStartedActivityForResult.intent,
                    RESULT_OK,
                    null,
                )

                // PIN recovery result.
                shadowActivity.receiveResult(
                    shadowActivity.nextStartedActivityForResult.intent,