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

Commit cd600ac3 authored by Sandy Pan's avatar Sandy Pan
Browse files

Update reference of SupervisionRecoveryInfo.

Bug: 406054267
Flag: android.app.supervision.flags.enable_supervision_pin_recovery_screen
Test: tests/robotests/src/com/android/settings/supervision/SupervisionUpdateRecoveryEmailPreferenceTest.kt & ...
Change-Id: I5e5ed7933a0cd224a549333de2eac99b4e685cd7
parent 7bebe024
Loading
Loading
Loading
Loading
+3 −5
Original line number Diff line number Diff line
@@ -143,12 +143,10 @@ open class ConfirmSupervisionCredentialsActivity : FragmentActivity() {
                .setConfirmationRequired(true)
                .setAllowedAuthenticators(BiometricManager.Authenticators.DEVICE_CREDENTIAL)

        val supportSuprevisionRecovery =
            getSystemService(SupervisionManager::class.java)?.getSupervisionRecoveryInfo()?.let {
                !it.email.isNullOrEmpty() || !it.id.isNullOrEmpty()
            } ?: false
        val supportSupervisionRecovery =
            getSystemService(SupervisionManager::class.java)?.getSupervisionRecoveryInfo() != null

        if (!supportSuprevisionRecovery) {
        if (!supportSupervisionRecovery) {
            return builder.build()
        }

+4 −8
Original line number Diff line number Diff line
@@ -16,6 +16,7 @@
package com.android.settings.supervision

import android.app.supervision.SupervisionManager
import android.app.supervision.SupervisionRecoveryInfo.STATE_PENDING
import android.app.supervision.flags.Flags
import android.content.Context
import com.android.settings.R
@@ -48,11 +49,10 @@ class SupervisionPinManagementScreen :
        val recoveryInfo =
            context.getSystemService(SupervisionManager::class.java)?.supervisionRecoveryInfo
        return when {
            recoveryInfo == null ||
                (recoveryInfo.email.isNullOrEmpty() && recoveryInfo.id.isNullOrEmpty()) -> {
            recoveryInfo == null -> {
                context.getString(R.string.supervision_pin_management_preference_summary_add)
            }
            recoveryInfo.id.isNullOrEmpty() -> {
            recoveryInfo.state == STATE_PENDING -> {
                context.getString(
                    R.string.supervision_pin_management_preference_summary_verify_recovery
                )
@@ -66,11 +66,7 @@ class SupervisionPinManagementScreen :
        if (Flags.enableSupervisionPinRecoveryScreen()) {
            val recoveryInfo =
                context.getSystemService(SupervisionManager::class.java)?.supervisionRecoveryInfo
            if (
                recoveryInfo == null ||
                    recoveryInfo.email.isNullOrEmpty() ||
                    recoveryInfo.id.isNullOrEmpty()
            ) {
            if (recoveryInfo == null || recoveryInfo.state == STATE_PENDING) {
                // if recovery is not fully setup.
                return R.drawable.exclamation_icon
            }
+24 −10
Original line number Diff line number Diff line
@@ -19,8 +19,11 @@ import android.app.Activity
import android.app.admin.DevicePolicyManager
import android.app.supervision.SupervisionManager
import android.app.supervision.SupervisionRecoveryInfo
import android.app.supervision.SupervisionRecoveryInfo.STATE_PENDING
import android.app.supervision.SupervisionRecoveryInfo.STATE_VERIFIED
import android.content.Intent
import android.os.Bundle
import android.os.PersistableBundle
import android.util.Log
import android.widget.Toast
import androidx.activity.result.ActivityResultLauncher
@@ -95,9 +98,9 @@ class SupervisionPinRecoveryActivity : FragmentActivity() {

            recoveryIntent.apply {
                // Pass along any available recovery information.
                // TODO(b/409805806): will expose the parcelable as system API and pass it instead.
                recoveryInfo?.email?.let { putExtra(EXTRA_RECOVERY_EMAIL, it) }
                recoveryInfo?.id?.let { putExtra(EXTRA_RECOVERY_ID, it) }
                // TODO(b/409805806): will pass the parcelable once the system API is available.
                recoveryInfo?.accountName?.let { putExtra(EXTRA_RECOVERY_EMAIL, it) }
                recoveryInfo?.accountData?.getString("id")?.let { putExtra(EXTRA_RECOVERY_ID, it) }
                verificationLauncher.launch(this)
            }
        } else {
@@ -144,9 +147,9 @@ class SupervisionPinRecoveryActivity : FragmentActivity() {
                            applicationContext.getSystemService(SupervisionManager::class.java)
                        val recoveryInfo = supervisionManager?.getSupervisionRecoveryInfo()
                        postSetupVerifyIntent.apply {
                            // TODO(b/409805806): will expose the parcelable as system API and pass
                            // it instead.
                            recoveryInfo?.email?.let { putExtra(EXTRA_RECOVERY_EMAIL, it) }
                            // TODO(b/409805806): will use the parcelable once the system API is
                            // available.
                            recoveryInfo?.accountName?.let { putExtra(EXTRA_RECOVERY_EMAIL, it) }
                            verificationLauncher.launch(postSetupVerifyIntent)
                        }
                    } else {
@@ -172,9 +175,20 @@ class SupervisionPinRecoveryActivity : FragmentActivity() {
                    if (data != null) {
                        val supervisionManager =
                            applicationContext.getSystemService(SupervisionManager::class.java)
                        val recoveryInfo = SupervisionRecoveryInfo()
                        recoveryInfo.email = data.getStringExtra(EXTRA_RECOVERY_EMAIL)
                        recoveryInfo.id = data.getStringExtra(EXTRA_RECOVERY_ID)
                        // TODO(b/409805806): will directly get the parcelable from intent once the
                        // system API is available.
                        val recoveryInfo =
                            data.getStringExtra(EXTRA_RECOVERY_EMAIL)?.let {
                                SupervisionRecoveryInfo(
                                    /* accountName */ it,
                                    /* accountType */ "default",
                                    /* state */ if (action == ACTION_SETUP) STATE_PENDING
                                    else STATE_VERIFIED,
                                    /* accountData */ PersistableBundle().apply {
                                        putString("id", data.getStringExtra(EXTRA_RECOVERY_ID))
                                    },
                                )
                            }
                        supervisionManager?.setSupervisionRecoveryInfo(recoveryInfo)
                        handleSuccess()
                    } else {
+2 −4
Original line number Diff line number Diff line
@@ -34,10 +34,8 @@ class SupervisionPinRecoveryPreference : PreferenceMetadata, PreferenceAvailabil
        if (!Flags.enableSupervisionPinRecoveryScreen()) {
            return false
        }
        return context
            .getSystemService(SupervisionManager::class.java)
            ?.getSupervisionRecoveryInfo()
            ?.let { !it.email.isNullOrEmpty() || !it.id.isNullOrEmpty() } ?: false
        return context.getSystemService(SupervisionManager::class.java)?.supervisionRecoveryInfo !=
            null
    }

    override fun intent(context: Context): Intent? =
+9 −9
Original line number Diff line number Diff line
@@ -18,6 +18,7 @@ package com.android.settings.supervision
import android.annotation.DrawableRes
import android.app.Activity
import android.app.supervision.SupervisionManager
import android.app.supervision.SupervisionRecoveryInfo.STATE_PENDING
import android.app.supervision.flags.Flags
import android.content.Context
import android.content.Intent
@@ -54,7 +55,7 @@ class SupervisionSetupRecoveryPreference :
        get() = KEY

    override fun getTitle(context: Context): CharSequence {
        return if (hasEmailToVerify(context)) {
        return if (hasAccountNameToVerify(context)) {
            context.getString(R.string.supervision_verify_pin_recovery_title)
        } else {
            context.getString(R.string.supervision_add_pin_recovery_title)
@@ -62,7 +63,7 @@ class SupervisionSetupRecoveryPreference :
    }

    override fun getSummary(context: Context): CharSequence? {
        return emailToVerify(context)?.asMaskedEmail()
        return accountNameToVerify(context)?.asMaskedEmail()
    }

    // TODO(b/409837094): get icon with dynamic color.
@@ -76,8 +77,7 @@ class SupervisionSetupRecoveryPreference :
        return context
            .getSystemService(SupervisionManager::class.java)
            ?.getSupervisionRecoveryInfo()
            ?.id
            ?.isEmpty() ?: true
            ?.let { it.state == STATE_PENDING } ?: true
    }

    override fun onCreate(context: PreferenceLifecycleContext) {
@@ -107,7 +107,7 @@ class SupervisionSetupRecoveryPreference :

    override fun onPreferenceClick(preference: Preference): Boolean {
        val intent = Intent(lifeCycleContext, SupervisionPinRecoveryActivity::class.java)
        if (hasEmailToVerify(lifeCycleContext)) {
        if (hasAccountNameToVerify(lifeCycleContext)) {
            intent.action = SupervisionPinRecoveryActivity.ACTION_POST_SETUP_VERIFY
        } else {
            intent.action = SupervisionPinRecoveryActivity.ACTION_SETUP_VERIFIED
@@ -116,15 +116,15 @@ class SupervisionSetupRecoveryPreference :
        return true
    }

    private fun emailToVerify(context: Context): String? {
    private fun accountNameToVerify(context: Context): String? {
        return context
            .getSystemService(SupervisionManager::class.java)
            ?.supervisionRecoveryInfo
            ?.email
            ?.accountName
    }

    private fun hasEmailToVerify(context: Context): Boolean {
        return !emailToVerify(context).isNullOrEmpty()
    private fun hasAccountNameToVerify(context: Context): Boolean {
        return !accountNameToVerify(context).isNullOrEmpty()
    }

    companion object {
Loading