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

Commit 82356f6e authored by Zhou Liu's avatar Zhou Liu
Browse files

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
parent 7e6cc163
Loading
Loading
Loading
Loading
+4 −0
Original line number Diff line number Diff line
@@ -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>
+1 −0
Original line number Diff line number Diff line
@@ -60,6 +60,7 @@ class SupervisionDashboardScreen : PreferenceScreenCreator {
            +TitlelessPreferenceGroup("supervision_features_group_1") += {
                // Empty category for dynamic injection targeting.
            }
            +SupervisionPinManagementScreen.KEY
        }

    companion object {
+29 −0
Original line number Diff line number Diff line
/*
 * 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
}
+51 −0
Original line number Diff line number Diff line
/*
 * 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"
    }
}
+47 −0
Original line number Diff line number Diff line
/*
 * 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")
    }
}