From 26ea7df1d5988c029c48f01018bc64be6f452bb9 Mon Sep 17 00:00:00 2001 From: juquan Date: Mon, 27 Jan 2025 00:50:08 +0000 Subject: [PATCH] Add PIN recovery entry in supervision PIN management page. Bug: b/390500290 Change-Id: I942fad663d0fb731215707d7c0b18359242aecb0 Test: atest SupervisionPinRecoveryPreferenceTest Flag:android.app.supervision.flags.enable_supervision_pin_recovery_screen --- res/values/strings.xml | 2 + .../SupervisionPinManagementScreen.kt | 1 + .../SupervisionPinRecoveryPreference.kt | 44 +++++++++++++++++++ .../SupervisionPinRecoveryPreferenceTest.kt | 36 +++++++++++++++ 4 files changed, 83 insertions(+) create mode 100644 src/com/android/settings/supervision/SupervisionPinRecoveryPreference.kt create mode 100644 tests/robotests/src/com/android/settings/supervision/SupervisionPinRecoveryPreferenceTest.kt diff --git a/res/values/strings.xml b/res/values/strings.xml index df82f3e1f34..8a58d40ec89 100644 --- a/res/values/strings.xml +++ b/res/values/strings.xml @@ -14112,4 +14112,6 @@ Add a PIN recovery method Change PIN + + Forgot PIN diff --git a/src/com/android/settings/supervision/SupervisionPinManagementScreen.kt b/src/com/android/settings/supervision/SupervisionPinManagementScreen.kt index d7cdaae6a71..6d9874a69b7 100644 --- a/src/com/android/settings/supervision/SupervisionPinManagementScreen.kt +++ b/src/com/android/settings/supervision/SupervisionPinManagementScreen.kt @@ -42,6 +42,7 @@ class SupervisionPinManagementScreen : PreferenceScreenCreator { override fun getPreferenceHierarchy(context: Context) = preferenceHierarchy(context, this) { + +SupervisionPinRecoveryPreference() // TODO(b/391992481) implement the screen. +SupervisionChangePinPreference() } diff --git a/src/com/android/settings/supervision/SupervisionPinRecoveryPreference.kt b/src/com/android/settings/supervision/SupervisionPinRecoveryPreference.kt new file mode 100644 index 00000000000..5a0e4bad2d2 --- /dev/null +++ b/src/com/android/settings/supervision/SupervisionPinRecoveryPreference.kt @@ -0,0 +1,44 @@ +/* + * Copyright (C) 2025 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package com.android.settings.supervision + +import android.app.supervision.flags.Flags +import android.content.Context +import com.android.settings.R +import androidx.preference.Preference +import com.android.settingslib.metadata.PreferenceAvailabilityProvider +import com.android.settingslib.metadata.PreferenceMetadata + +class SupervisionPinRecoveryPreference : PreferenceMetadata, + PreferenceAvailabilityProvider, Preference.OnPreferenceClickListener { + override val key: String + get() = SupervisionPinRecoveryPreference.KEY + + override val title: Int + get() = R.string.supervision_add_forgot_pin_preference_title + + override fun isAvailable(context: Context) = Flags.enableSupervisionPinRecoveryScreen() + + // TODO(b/393657542): trigger re-authentication flow to confirm user credential before PIN + // recovery. + override fun onPreferenceClick(preference: Preference): Boolean { + return true + } + + companion object { + const val KEY = "supervision_pin_recovery" + } +} \ No newline at end of file diff --git a/tests/robotests/src/com/android/settings/supervision/SupervisionPinRecoveryPreferenceTest.kt b/tests/robotests/src/com/android/settings/supervision/SupervisionPinRecoveryPreferenceTest.kt new file mode 100644 index 00000000000..3fa938f6e57 --- /dev/null +++ b/tests/robotests/src/com/android/settings/supervision/SupervisionPinRecoveryPreferenceTest.kt @@ -0,0 +1,36 @@ +/* + * Copyright (C) 2025 The Android Open Source Project + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package com.android.settings.supervision + +import android.content.Context +import androidx.test.core.app.ApplicationProvider +import androidx.test.ext.junit.runners.AndroidJUnit4 +import com.google.common.truth.Truth.assertThat +import org.junit.Test +import org.junit.runner.RunWith + +@RunWith(AndroidJUnit4::class) +class SupervisionPinRecoveryPreferenceTest { + private val context: Context = ApplicationProvider.getApplicationContext() + + private val supervisionPinRecoveryPreference = SupervisionPinRecoveryPreference() + + @Test + fun getTitle() { + assertThat(supervisionPinRecoveryPreference.getPreferenceTitle(context)) + .isEqualTo("Forgot PIN") + } +} \ No newline at end of file