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

Commit 8215f50d authored by Junchen Quan's avatar Junchen Quan Committed by Android (Google) Code Review
Browse files

Merge "[Device Supervision] Implement change PIN intent" into main

parents 65253d96 465e850e
Loading
Loading
Loading
Loading
+6 −4
Original line number Diff line number Diff line
@@ -102,8 +102,10 @@ open class ConfirmSupervisionCredentialsActivity : FragmentActivity() {

        val activityManager = getSystemService(ActivityManager::class.java)
        if (!activityManager.startProfile(supervisingUser)) {
            Log.w(SupervisionLog.TAG,
                "Unable to start supervising user, cannot verify credentials.")
            Log.w(
                SupervisionLog.TAG,
                "Unable to start supervising user, cannot verify credentials.",
            )
            setResult(RESULT_CANCELED)
            finish()
            return
@@ -123,7 +125,7 @@ open class ConfirmSupervisionCredentialsActivity : FragmentActivity() {
            CancellationSignal(),
            ContextCompat.getMainExecutor(this),
            mAuthenticationCallback,
            userId
            userId,
        )
    }

+15 −3
Original line number Diff line number Diff line
@@ -17,22 +17,34 @@ package com.android.settings.supervision

import android.content.Context
import android.content.Intent
import android.util.Log
import com.android.settings.R
import com.android.settingslib.metadata.PreferenceMetadata
import com.android.settingslib.supervision.SupervisionLog

/**
 * Setting on PIN Management screen (Settings > Supervision > Manage Pin) that invokes the flow to
 * update the existing device supervision PIN.
 */
class SupervisionChangePinPreference : PreferenceMetadata {

    override val key: String
        get() = "supervision_change_pin"
        get() = KEY

    override val title: Int
        get() = R.string.supervision_change_pin_preference_title

    override fun intent(context: Context): Intent? {
        // TODO(b/393450922): implement handling of change pin intent.
        return super.intent(context)
        val supervisionHelper = SupervisionHelper.getInstance(context)
        if (!supervisionHelper.isSupervisingCredentialSet()) {
            Log.w(SupervisionLog.TAG, "Supervising credential not set")
            return null
        }

        return Intent(context, SupervisionCredentialProxyActivity::class.java)
    }

    companion object {
        const val KEY = "supervision_change_pin"
    }
}
+54 −5
Original line number Diff line number Diff line
@@ -15,23 +15,72 @@
 */
package com.android.settings.supervision

import android.content.Context
import android.app.KeyguardManager
import android.content.ComponentName
import android.content.ContextWrapper
import android.content.pm.UserInfo
import android.os.UserManager
import android.os.UserManager.USER_TYPE_PROFILE_SUPERVISING
import androidx.test.core.app.ApplicationProvider
import androidx.test.ext.junit.runners.AndroidJUnit4
import com.android.settings.R
import com.google.common.truth.Truth.assertThat
import org.junit.Before
import org.junit.Test
import org.junit.runner.RunWith
import org.mockito.kotlin.mock
import org.mockito.kotlin.whenever

@RunWith(AndroidJUnit4::class)
class SupervisionChangePinPreferenceTest {
    private val context: Context = ApplicationProvider.getApplicationContext()
    private val mockUserManager = mock<UserManager>()
    private val mockKeyguardManager = mock<KeyguardManager>()

    private val supervisionChangePinPreference = SupervisionChangePinPreference()
    private val context =
        object : ContextWrapper(ApplicationProvider.getApplicationContext()) {
            override fun getSystemService(name: String): Any =
                when (name) {
                    getSystemServiceName(UserManager::class.java) -> mockUserManager
                    getSystemServiceName(KeyguardManager::class.java) -> mockKeyguardManager
                    else -> super.getSystemService(name)
                }
        }

    private val preference = SupervisionChangePinPreference()

    @Before
    fun setUp() {
        SupervisionHelper.sInstance = null
    }

    @Test
    fun getTitle() {
        assertThat(supervisionChangePinPreference.title)
            .isEqualTo(R.string.supervision_change_pin_preference_title)
        assertThat(preference.title).isEqualTo(R.string.supervision_change_pin_preference_title)
    }

    @Test
    fun getIntent_supervisingCredentialSet() {
        whenever(mockUserManager.users).thenReturn(listOf(SUPERVISING_USER_INFO))
        whenever(mockKeyguardManager.isDeviceSecure(SUPERVISING_USER_ID)).thenReturn(true)

        assertThat(preference.intent(context)?.component)
            .isEqualTo(ComponentName(context, SupervisionCredentialProxyActivity::class.java))
    }

    @Test
    fun getIntent_supervisingCredentialNotSet() {
        assertThat(preference.intent(context)?.component).isNull()
    }

    private companion object {
        const val SUPERVISING_USER_ID = 5
        val SUPERVISING_USER_INFO =
            UserInfo(
                SUPERVISING_USER_ID,
                /* name */ "supervising",
                /* iconPath */ "",
                /* flags */ 0,
                USER_TYPE_PROFILE_SUPERVISING,
            )
    }
}