Create "Manage PIN" settings UI menu

Test: atest SupervisionPinManagementScreenTest
Test: manually on real device
Bug: 390186179
Flag: android.app.supervision.flags.enable_supervision_settings_screen
Change-Id: Ib53dce2a32fe9551e8877145a61c8834505d389d
This commit is contained in:
Zhou Liu
2025-01-24 05:34:18 +00:00
parent 7e6cc163d9
commit 82356f6e93
5 changed files with 132 additions and 0 deletions

View File

@@ -14084,4 +14084,8 @@
<string name="device_supervision_switch_no_pin_summary">Set up PIN to get started</string>
<!-- Search keywords for supervision settings [CHAR LIMIT=NONE] -->
<string name="keywords_supervision_settings">supervision, parental supervision, parental controls</string>
<!-- Title for supervision PIN management settings entry [CHAR LIMIT=60] -->
<string name="supervision_pin_management_preference_title">Manage PIN</string>
<!-- Description for supervision PIN management settings entry, in the case of adding a PIN [CHAR LIMIT=NONE] -->
<string name="supervision_pin_management_preference_summary_add">Add a PIN recovery method</string>
</resources>

View File

@@ -60,6 +60,7 @@ class SupervisionDashboardScreen : PreferenceScreenCreator {
+TitlelessPreferenceGroup("supervision_features_group_1") += {
// Empty category for dynamic injection targeting.
}
+SupervisionPinManagementScreen.KEY
}
companion object {

View File

@@ -0,0 +1,29 @@
/*
* 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 com.android.settingslib.preference.PreferenceFragment
/**
* Fragment to display the Supervision PIN management page (Settings > Supervision > Manage PIN).
*
* See [SupervisionPinManagementScreen] for details on the page contents.
*/
class SupervisionPinManagementFragment : PreferenceFragment() {
override fun getPreferenceScreenBindingKey(context: Context) =
SupervisionPinManagementScreen.KEY
}

View File

@@ -0,0 +1,51 @@
/*
* 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 com.android.settings.R
import com.android.settingslib.metadata.ProvidePreferenceScreen
import com.android.settingslib.metadata.preferenceHierarchy
import com.android.settingslib.preference.PreferenceScreenCreator
/** Pin Management landing page (Settings > Supervision > Manage Pin). */
@ProvidePreferenceScreen(SupervisionPinManagementScreen.KEY)
class SupervisionPinManagementScreen : PreferenceScreenCreator {
override val key: String
get() = KEY
override val title: Int
get() = R.string.supervision_pin_management_preference_title
// TODO(b/391994031): dynamically update the summary according to PIN status.
override val summary: Int
get() = R.string.supervision_pin_management_preference_summary_add
// TODO(b/391994031): dynamically update the icon according to PIN status.
override val icon: Int
get() = R.drawable.ic_pin
override fun fragmentClass() = SupervisionPinManagementFragment::class.java
override fun getPreferenceHierarchy(context: Context) =
preferenceHierarchy(context, this) {
// TODO(b/391992481) implement the screen.
}
companion object {
const val KEY = "supervision_pin_management"
}
}

View File

@@ -0,0 +1,47 @@
/*
* 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 SupervisionPinManagementScreenTest {
private val context: Context = ApplicationProvider.getApplicationContext()
private val supervisionPinManagementScreen = SupervisionPinManagementScreen()
@Test
fun key() {
assertThat(supervisionPinManagementScreen.key).isEqualTo(SupervisionPinManagementScreen.KEY)
}
@Test
fun getTitle() {
assertThat(supervisionPinManagementScreen.getPreferenceTitle(context))
.isEqualTo("Manage PIN")
}
@Test
fun getSummary_addPin() {
assertThat(supervisionPinManagementScreen.getPreferenceSummary(context))
.isEqualTo("Add a PIN recovery method")
}
}