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

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

Merge "Update reference of SupervisionRecoveryInfo." into main

parents bedbc606 cd600ac3
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