Implement Web content filters entry point in Supervision Settings dashboard.

Test: atest SupervisionWebContentFiltersScreenTest
Bug: 395134536
Flag:android.app.supervision.flags.enable_web_content_filters_screen
Change-Id: I5471d8b2956e94b0120ae13bec6187065a5e738a
This commit is contained in:
Xiaomiao Zhang
2025-02-24 23:39:52 +00:00
parent ed15a1079a
commit 0dabc23adb
6 changed files with 149 additions and 1 deletions

25
res/drawable/ic_globe.xml Normal file
View File

@@ -0,0 +1,25 @@
<!--
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.
-->
<vector xmlns:android="http://schemas.android.com/apk/res/android"
android:width="24dp"
android:height="24dp"
android:viewportWidth="960"
android:viewportHeight="960"
android:tint="?android:attr/colorControlNormal">
<path
android:fillColor="@android:color/white"
android:pathData="M480,880Q397,880 324,848.5Q251,817 197,763Q143,709 111.5,636Q80,563 80,480Q80,397 111.5,324Q143,251 197,197Q251,143 324,111.5Q397,80 480,80Q563,80 636,111.5Q709,143 763,197Q817,251 848.5,324Q880,397 880,480Q880,563 848.5,636Q817,709 763,763Q709,817 636,848.5Q563,880 480,880ZM480,800Q614,800 707,707Q800,614 800,480Q800,473 799.5,465.5Q799,458 799,453Q794,482 772,501Q750,520 720,520L640,520Q607,520 583.5,496.5Q560,473 560,440L560,400L400,400L400,320Q400,287 423.5,263.5Q447,240 480,240L520,240L520,240Q520,217 532.5,199.5Q545,182 563,171Q543,166 522.5,163Q502,160 480,160Q346,160 253,253Q160,346 160,480Q160,480 160,480Q160,480 160,480L360,480Q426,480 473,527Q520,574 520,640L520,680L400,680L400,790Q420,795 439.5,797.5Q459,800 480,800Z"/>
</vector>

View File

@@ -14253,4 +14253,6 @@ Data usage charges may apply.</string>
<string name="supervision_change_pin_preference_title">Change PIN</string>
<!-- Title for supervision forgot PIN setting entry [CHAR LIMIT=60] -->
<string name="supervision_add_forgot_pin_preference_title">Forgot PIN</string>
<!-- Title for web content filters entry [CHAR LIMIT=60] -->
<string name="supervision_web_content_filters_title">Web content filters</string>
</resources>

View File

@@ -58,7 +58,7 @@ class SupervisionDashboardScreen : PreferenceScreenCreator {
preferenceHierarchy(context, this) {
+SupervisionMainSwitchPreference()
+TitlelessPreferenceGroup(SUPERVISION_DYNAMIC_GROUP_1) += {
// Empty category for dynamic injection targeting.
+SupervisionWebContentFiltersScreen.KEY
}
+SupervisionPinManagementScreen.KEY
}

View File

@@ -0,0 +1,30 @@
/*
* 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 web content filters page (Settings > Supervision> Web content
* filters).
*
* See [SupervisionWebContentFiltersScreen] for details on the page contents.
*/
class SupervisionWebContentFiltersFragment : PreferenceFragment() {
override fun getPreferenceScreenBindingKey(context: Context) =
SupervisionWebContentFiltersScreen.KEY
}

View File

@@ -0,0 +1,50 @@
/*
* 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 com.android.settingslib.metadata.ProvidePreferenceScreen
import com.android.settingslib.metadata.preferenceHierarchy
import com.android.settingslib.preference.PreferenceScreenCreator
/** Web content filters landing page (Settings > Supervision > Web content filters). */
@ProvidePreferenceScreen(SupervisionWebContentFiltersScreen.KEY)
class SupervisionWebContentFiltersScreen : PreferenceScreenCreator {
override fun isFlagEnabled(context: Context) = Flags.enableWebContentFiltersScreen()
override val key: String
get() = KEY
override val title: Int
get() = R.string.supervision_web_content_filters_title
// TODO(b/395134536) update the summary once the string is finalized.
override val icon: Int
get() = R.drawable.ic_globe
override fun fragmentClass() = SupervisionWebContentFiltersFragment::class.java
override fun getPreferenceHierarchy(context: Context) =
preferenceHierarchy(context, this) {
// TODO(b/395134536) implement the screen.
}
companion object {
const val KEY = "supervision_web_content_filters"
}
}

View File

@@ -0,0 +1,41 @@
/*
* 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 SupervisionWebContentFiltersScreenTest {
private val context: Context = ApplicationProvider.getApplicationContext()
private val supervisionWebContentFiltersScreen = SupervisionWebContentFiltersScreen()
@Test
fun key() {
assertThat(supervisionWebContentFiltersScreen.key)
.isEqualTo(SupervisionWebContentFiltersScreen.KEY)
}
@Test
fun getTitle() {
assertThat(supervisionWebContentFiltersScreen.getPreferenceTitle(context))
.isEqualTo("Web content filters")
}
}