Loading src/com/android/settings/supervision/ConfirmSupervisionCredentialsActivity.kt +7 −0 Original line number Diff line number Diff line Loading @@ -21,6 +21,7 @@ import android.Manifest.permission.SET_BIOMETRIC_DIALOG_ADVANCED import android.Manifest.permission.USE_BIOMETRIC_INTERNAL import android.app.ActivityManager import android.app.role.RoleManager import android.app.settings.SettingsEnums import android.app.supervision.SupervisionManager import android.content.DialogInterface import android.content.Intent Loading @@ -40,6 +41,7 @@ import androidx.annotation.VisibleForTesting import androidx.core.content.ContextCompat import androidx.fragment.app.FragmentActivity import com.android.settings.R import com.android.settings.overlay.FeatureFactory import com.android.settingslib.supervision.SupervisionLog.TAG /** Loading Loading @@ -171,8 +173,13 @@ class ConfirmSupervisionCredentialsActivity : FragmentActivity() { Intent(this, SupervisionPinRecoveryActivity::class.java).apply { action = SupervisionPinRecoveryActivity.ACTION_RECOVERY } val metricsFeatureProvider = FeatureFactory.featureFactory.metricsFeatureProvider val listener = DialogInterface.OnClickListener { _: DialogInterface?, _: Int -> metricsFeatureProvider.action( this, SettingsEnums.ACTION_SUPERVISION_FORGOT_PIN_DURING_PIN_INVOCATION, ) getResultLauncher.launch(intent) } val moreOptionsButtonBuilder = Loading src/com/android/settings/supervision/SupervisionPinRecoveryActivity.kt +20 −1 Original line number Diff line number Diff line Loading @@ -16,6 +16,7 @@ package com.android.settings.supervision import android.Manifest import android.app.settings.SettingsEnums import android.app.supervision.SupervisionManager import android.app.supervision.SupervisionRecoveryInfo import android.app.supervision.SupervisionRecoveryInfo.EXTRA_SUPERVISION_RECOVERY_INFO Loading @@ -30,6 +31,7 @@ import androidx.activity.result.contract.ActivityResultContracts import androidx.annotation.RequiresPermission import androidx.fragment.app.FragmentActivity import com.android.settings.R import com.android.settings.overlay.FeatureFactory import com.android.settingslib.supervision.SupervisionIntentProvider import com.android.settingslib.supervision.SupervisionLog Loading Loading @@ -172,7 +174,8 @@ class SupervisionPinRecoveryActivity : FragmentActivity() { SupervisionRecoveryInfo::class.java, ) if (recoveryInfo != null) { val supervisionManager = getSystemService(SupervisionManager::class.java) val supervisionManager = getSystemService(SupervisionManager::class.java) supervisionManager?.setSupervisionRecoveryInfo(recoveryInfo) handleSuccess() } else { Loading @@ -187,6 +190,9 @@ class SupervisionPinRecoveryActivity : FragmentActivity() { else -> handleError("Unknown action after verification: $action") } } else { if (intent.action == ACTION_RECOVERY) { logRecoveryResult(false) } handleError( "Verification process failed with result: $resultCode, action: ${intent.action}" ) Loading @@ -202,8 +208,10 @@ class SupervisionPinRecoveryActivity : FragmentActivity() { Toast.LENGTH_SHORT, ) .show() logRecoveryResult(true) handleSuccess() } else { logRecoveryResult(false) handleError("Setting new PIN failed with result: $resultCode") } } Loading @@ -215,6 +223,7 @@ class SupervisionPinRecoveryActivity : FragmentActivity() { private fun startResetPinActivity() { if (!resetSupervisionUser()) { handleError("Failed to reset supervision user.") logRecoveryResult(false) return } val intent = Intent(this, SupervisionCredentialProxyActivity::class.java) Loading @@ -234,6 +243,16 @@ class SupervisionPinRecoveryActivity : FragmentActivity() { finish() } /** Logs the result of the PIN recovery process. */ private fun logRecoveryResult(success: Boolean) { val metricsFeatureProvider = FeatureFactory.featureFactory.metricsFeatureProvider metricsFeatureProvider.action( this, SettingsEnums.ACTION_SUPERVISION_PIN_RESET_SUCCEED, success, ) } /** * Resets the supervision user by removing the existing one and creating a new one. * Loading tests/robotests/src/com/android/settings/supervision/ConfirmSupervisionCredentialsActivityTest.kt +9 −0 Original line number Diff line number Diff line Loading @@ -19,6 +19,7 @@ import android.app.Activity import android.app.ActivityManager import android.app.KeyguardManager import android.app.role.RoleManager.ROLE_SYSTEM_SUPERVISION import android.app.settings.SettingsEnums import android.app.supervision.SupervisionManager import android.app.supervision.SupervisionRecoveryInfo import android.app.supervision.SupervisionRecoveryInfo.STATE_PENDING Loading @@ -36,8 +37,10 @@ import androidx.test.core.app.ApplicationProvider import androidx.test.ext.junit.runners.AndroidJUnit4 import com.android.settings.R import com.android.settings.supervision.ConfirmSupervisionCredentialsActivity.Companion.EXTRA_FORCE_CONFIRMATION import com.android.settings.testutils.MetricsRule import com.google.common.truth.Truth.assertThat import org.junit.Before import org.junit.Rule import org.junit.Test import org.junit.runner.RunWith import org.mockito.kotlin.any Loading @@ -60,6 +63,7 @@ import org.robolectric.shadows.ShadowRoleManager @RunWith(AndroidJUnit4::class) class ConfirmSupervisionCredentialsActivityTest { @get:Rule val metricsRule = MetricsRule() private val mockUserManager = mock<UserManager>() private val mockActivityManager = mock<ActivityManager>() private val mockSupervisionManager = mock<SupervisionManager>() Loading Loading @@ -216,6 +220,11 @@ class ConfirmSupervisionCredentialsActivityTest { .isEqualTo(BiometricManager.Authenticators.DEVICE_CREDENTIAL) assertThat(biometricPrompt.contentView) .isInstanceOf(PromptContentViewWithMoreOptionsButton::class.java) val contentView = biometricPrompt.contentView as PromptContentViewWithMoreOptionsButton contentView.moreOptionsButtonListener.onClick(null, 0) verify(metricsRule.metricsFeatureProvider) .action(mActivity, SettingsEnums.ACTION_SUPERVISION_FORGOT_PIN_DURING_PIN_INVOCATION) } @Test Loading tests/robotests/src/com/android/settings/supervision/SupervisionPinRecoveryActivityTest.kt +10 −0 Original line number Diff line number Diff line Loading @@ -18,6 +18,7 @@ package com.android.settings.supervision import android.app.Activity import android.app.Application import android.app.role.RoleManager.ROLE_SYSTEM_SUPERVISION import android.app.settings.SettingsEnums import android.app.supervision.SupervisionManager import android.app.supervision.SupervisionRecoveryInfo import android.app.supervision.SupervisionRecoveryInfo.EXTRA_SUPERVISION_RECOVERY_INFO Loading @@ -36,9 +37,11 @@ import android.os.UserManager.USER_TYPE_PROFILE_SUPERVISING import androidx.lifecycle.Lifecycle import androidx.test.core.app.ActivityScenario import androidx.test.core.app.ApplicationProvider import com.android.settings.testutils.MetricsRule import com.google.common.truth.Truth.assertThat import org.junit.Assert.assertEquals import org.junit.Before import org.junit.Rule import org.junit.Test import org.junit.runner.RunWith import org.mockito.kotlin.any Loading @@ -64,6 +67,7 @@ class SupervisionPinRecoveryActivityTest { private lateinit var shadowPackageManager: ShadowPackageManager private val mockSupervisionManager = mock<SupervisionManager>() private val mockUserManager = mock<UserManager>() @get:Rule val metricsRule = MetricsRule() @Before fun setUp() { Loading Loading @@ -550,6 +554,8 @@ class SupervisionPinRecoveryActivityTest { val verifyPinIntent = shadowActivity.nextStartedActivity shadowActivity.receiveResult(verifyPinIntent, testActivityResult, null) verify(metricsRule.metricsFeatureProvider) .action(activity, SettingsEnums.ACTION_SUPERVISION_PIN_RESET_SUCCEED, false) assertEquals(testActivityResult, shadowActivity.resultCode) assertThat(activity.isFinishing).isTrue() } Loading @@ -575,6 +581,8 @@ class SupervisionPinRecoveryActivityTest { val setPinIntent = shadowActivity.nextStartedActivity shadowActivity.receiveResult(setPinIntent, testActivityResult, null) verify(metricsRule.metricsFeatureProvider) .action(activity, SettingsEnums.ACTION_SUPERVISION_PIN_RESET_SUCCEED, true) assertEquals(testActivityResult, shadowActivity.resultCode) assertThat(activity.isFinishing).isTrue() } Loading @@ -600,6 +608,8 @@ class SupervisionPinRecoveryActivityTest { val setPinIntent = shadowActivity.nextStartedActivity shadowActivity.receiveResult(setPinIntent, testActivityResult, null) verify(metricsRule.metricsFeatureProvider) .action(activity, SettingsEnums.ACTION_SUPERVISION_PIN_RESET_SUCCEED, false) assertEquals(testActivityResult, shadowActivity.resultCode) assertThat(activity.isFinishing).isTrue() } Loading Loading
src/com/android/settings/supervision/ConfirmSupervisionCredentialsActivity.kt +7 −0 Original line number Diff line number Diff line Loading @@ -21,6 +21,7 @@ import android.Manifest.permission.SET_BIOMETRIC_DIALOG_ADVANCED import android.Manifest.permission.USE_BIOMETRIC_INTERNAL import android.app.ActivityManager import android.app.role.RoleManager import android.app.settings.SettingsEnums import android.app.supervision.SupervisionManager import android.content.DialogInterface import android.content.Intent Loading @@ -40,6 +41,7 @@ import androidx.annotation.VisibleForTesting import androidx.core.content.ContextCompat import androidx.fragment.app.FragmentActivity import com.android.settings.R import com.android.settings.overlay.FeatureFactory import com.android.settingslib.supervision.SupervisionLog.TAG /** Loading Loading @@ -171,8 +173,13 @@ class ConfirmSupervisionCredentialsActivity : FragmentActivity() { Intent(this, SupervisionPinRecoveryActivity::class.java).apply { action = SupervisionPinRecoveryActivity.ACTION_RECOVERY } val metricsFeatureProvider = FeatureFactory.featureFactory.metricsFeatureProvider val listener = DialogInterface.OnClickListener { _: DialogInterface?, _: Int -> metricsFeatureProvider.action( this, SettingsEnums.ACTION_SUPERVISION_FORGOT_PIN_DURING_PIN_INVOCATION, ) getResultLauncher.launch(intent) } val moreOptionsButtonBuilder = Loading
src/com/android/settings/supervision/SupervisionPinRecoveryActivity.kt +20 −1 Original line number Diff line number Diff line Loading @@ -16,6 +16,7 @@ package com.android.settings.supervision import android.Manifest import android.app.settings.SettingsEnums import android.app.supervision.SupervisionManager import android.app.supervision.SupervisionRecoveryInfo import android.app.supervision.SupervisionRecoveryInfo.EXTRA_SUPERVISION_RECOVERY_INFO Loading @@ -30,6 +31,7 @@ import androidx.activity.result.contract.ActivityResultContracts import androidx.annotation.RequiresPermission import androidx.fragment.app.FragmentActivity import com.android.settings.R import com.android.settings.overlay.FeatureFactory import com.android.settingslib.supervision.SupervisionIntentProvider import com.android.settingslib.supervision.SupervisionLog Loading Loading @@ -172,7 +174,8 @@ class SupervisionPinRecoveryActivity : FragmentActivity() { SupervisionRecoveryInfo::class.java, ) if (recoveryInfo != null) { val supervisionManager = getSystemService(SupervisionManager::class.java) val supervisionManager = getSystemService(SupervisionManager::class.java) supervisionManager?.setSupervisionRecoveryInfo(recoveryInfo) handleSuccess() } else { Loading @@ -187,6 +190,9 @@ class SupervisionPinRecoveryActivity : FragmentActivity() { else -> handleError("Unknown action after verification: $action") } } else { if (intent.action == ACTION_RECOVERY) { logRecoveryResult(false) } handleError( "Verification process failed with result: $resultCode, action: ${intent.action}" ) Loading @@ -202,8 +208,10 @@ class SupervisionPinRecoveryActivity : FragmentActivity() { Toast.LENGTH_SHORT, ) .show() logRecoveryResult(true) handleSuccess() } else { logRecoveryResult(false) handleError("Setting new PIN failed with result: $resultCode") } } Loading @@ -215,6 +223,7 @@ class SupervisionPinRecoveryActivity : FragmentActivity() { private fun startResetPinActivity() { if (!resetSupervisionUser()) { handleError("Failed to reset supervision user.") logRecoveryResult(false) return } val intent = Intent(this, SupervisionCredentialProxyActivity::class.java) Loading @@ -234,6 +243,16 @@ class SupervisionPinRecoveryActivity : FragmentActivity() { finish() } /** Logs the result of the PIN recovery process. */ private fun logRecoveryResult(success: Boolean) { val metricsFeatureProvider = FeatureFactory.featureFactory.metricsFeatureProvider metricsFeatureProvider.action( this, SettingsEnums.ACTION_SUPERVISION_PIN_RESET_SUCCEED, success, ) } /** * Resets the supervision user by removing the existing one and creating a new one. * Loading
tests/robotests/src/com/android/settings/supervision/ConfirmSupervisionCredentialsActivityTest.kt +9 −0 Original line number Diff line number Diff line Loading @@ -19,6 +19,7 @@ import android.app.Activity import android.app.ActivityManager import android.app.KeyguardManager import android.app.role.RoleManager.ROLE_SYSTEM_SUPERVISION import android.app.settings.SettingsEnums import android.app.supervision.SupervisionManager import android.app.supervision.SupervisionRecoveryInfo import android.app.supervision.SupervisionRecoveryInfo.STATE_PENDING Loading @@ -36,8 +37,10 @@ import androidx.test.core.app.ApplicationProvider import androidx.test.ext.junit.runners.AndroidJUnit4 import com.android.settings.R import com.android.settings.supervision.ConfirmSupervisionCredentialsActivity.Companion.EXTRA_FORCE_CONFIRMATION import com.android.settings.testutils.MetricsRule import com.google.common.truth.Truth.assertThat import org.junit.Before import org.junit.Rule import org.junit.Test import org.junit.runner.RunWith import org.mockito.kotlin.any Loading @@ -60,6 +63,7 @@ import org.robolectric.shadows.ShadowRoleManager @RunWith(AndroidJUnit4::class) class ConfirmSupervisionCredentialsActivityTest { @get:Rule val metricsRule = MetricsRule() private val mockUserManager = mock<UserManager>() private val mockActivityManager = mock<ActivityManager>() private val mockSupervisionManager = mock<SupervisionManager>() Loading Loading @@ -216,6 +220,11 @@ class ConfirmSupervisionCredentialsActivityTest { .isEqualTo(BiometricManager.Authenticators.DEVICE_CREDENTIAL) assertThat(biometricPrompt.contentView) .isInstanceOf(PromptContentViewWithMoreOptionsButton::class.java) val contentView = biometricPrompt.contentView as PromptContentViewWithMoreOptionsButton contentView.moreOptionsButtonListener.onClick(null, 0) verify(metricsRule.metricsFeatureProvider) .action(mActivity, SettingsEnums.ACTION_SUPERVISION_FORGOT_PIN_DURING_PIN_INVOCATION) } @Test Loading
tests/robotests/src/com/android/settings/supervision/SupervisionPinRecoveryActivityTest.kt +10 −0 Original line number Diff line number Diff line Loading @@ -18,6 +18,7 @@ package com.android.settings.supervision import android.app.Activity import android.app.Application import android.app.role.RoleManager.ROLE_SYSTEM_SUPERVISION import android.app.settings.SettingsEnums import android.app.supervision.SupervisionManager import android.app.supervision.SupervisionRecoveryInfo import android.app.supervision.SupervisionRecoveryInfo.EXTRA_SUPERVISION_RECOVERY_INFO Loading @@ -36,9 +37,11 @@ import android.os.UserManager.USER_TYPE_PROFILE_SUPERVISING import androidx.lifecycle.Lifecycle import androidx.test.core.app.ActivityScenario import androidx.test.core.app.ApplicationProvider import com.android.settings.testutils.MetricsRule import com.google.common.truth.Truth.assertThat import org.junit.Assert.assertEquals import org.junit.Before import org.junit.Rule import org.junit.Test import org.junit.runner.RunWith import org.mockito.kotlin.any Loading @@ -64,6 +67,7 @@ class SupervisionPinRecoveryActivityTest { private lateinit var shadowPackageManager: ShadowPackageManager private val mockSupervisionManager = mock<SupervisionManager>() private val mockUserManager = mock<UserManager>() @get:Rule val metricsRule = MetricsRule() @Before fun setUp() { Loading Loading @@ -550,6 +554,8 @@ class SupervisionPinRecoveryActivityTest { val verifyPinIntent = shadowActivity.nextStartedActivity shadowActivity.receiveResult(verifyPinIntent, testActivityResult, null) verify(metricsRule.metricsFeatureProvider) .action(activity, SettingsEnums.ACTION_SUPERVISION_PIN_RESET_SUCCEED, false) assertEquals(testActivityResult, shadowActivity.resultCode) assertThat(activity.isFinishing).isTrue() } Loading @@ -575,6 +581,8 @@ class SupervisionPinRecoveryActivityTest { val setPinIntent = shadowActivity.nextStartedActivity shadowActivity.receiveResult(setPinIntent, testActivityResult, null) verify(metricsRule.metricsFeatureProvider) .action(activity, SettingsEnums.ACTION_SUPERVISION_PIN_RESET_SUCCEED, true) assertEquals(testActivityResult, shadowActivity.resultCode) assertThat(activity.isFinishing).isTrue() } Loading @@ -600,6 +608,8 @@ class SupervisionPinRecoveryActivityTest { val setPinIntent = shadowActivity.nextStartedActivity shadowActivity.receiveResult(setPinIntent, testActivityResult, null) verify(metricsRule.metricsFeatureProvider) .action(activity, SettingsEnums.ACTION_SUPERVISION_PIN_RESET_SUCCEED, false) assertEquals(testActivityResult, shadowActivity.resultCode) assertThat(activity.isFinishing).isTrue() } Loading