Loading src/com/android/settings/supervision/SupervisionWebContentFiltersScreen.kt +49 −1 Original line number Diff line number Diff line Loading @@ -17,15 +17,26 @@ package com.android.settings.supervision import android.app.supervision.flags.Flags import android.content.Context import androidx.preference.Preference import androidx.preference.PreferenceScreen import com.android.settings.R import com.android.settings.supervision.ipc.SupervisionMessengerClient import com.android.settingslib.metadata.PreferenceCategory import com.android.settingslib.metadata.PreferenceLifecycleContext import com.android.settingslib.metadata.PreferenceLifecycleProvider import com.android.settingslib.metadata.ProvidePreferenceScreen import com.android.settingslib.metadata.preferenceHierarchy import com.android.settingslib.preference.PreferenceScreenCreator import com.android.settingslib.preference.forEachRecursively import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.launch import kotlinx.coroutines.withContext /** Web content filters landing page (Settings > Supervision > Web content filters). */ @ProvidePreferenceScreen(SupervisionWebContentFiltersScreen.KEY) class SupervisionWebContentFiltersScreen : PreferenceScreenCreator { class SupervisionWebContentFiltersScreen : PreferenceScreenCreator, PreferenceLifecycleProvider { private var supervisionClient: SupervisionMessengerClient? = null override fun isFlagEnabled(context: Context) = Flags.enableWebContentFiltersScreen() override val key: String Loading @@ -39,6 +50,15 @@ class SupervisionWebContentFiltersScreen : PreferenceScreenCreator { override fun fragmentClass() = SupervisionWebContentFiltersFragment::class.java override fun onCreate(context: PreferenceLifecycleContext) { supervisionClient = getSupervisionClient(context) updatePreferenceData(context) } override fun onDestroy(context: PreferenceLifecycleContext) { supervisionClient?.close() } override fun getPreferenceHierarchy(context: Context) = preferenceHierarchy(context, this) { +PreferenceCategory( Loading @@ -62,6 +82,34 @@ class SupervisionWebContentFiltersScreen : PreferenceScreenCreator { +SupervisionWebContentFiltersFooterPreference() } private fun updatePreferenceData(context: PreferenceLifecycleContext) { val preferenceScreen = context.findPreference<Preference>(key) if (preferenceScreen is PreferenceScreen) { val preferenceKeys = buildList<String> { preferenceScreen.forEachRecursively { add(it.key) } } context.lifecycleScope.launch { val preferenceDataMap = withContext(Dispatchers.IO) { supervisionClient?.getPreferenceData(preferenceKeys) } preferenceScreen.forEachRecursively { val preferenceData = preferenceDataMap?.get(it.key) val newTitle = preferenceData?.title if (newTitle != null) { it.title = newTitle } val newSummary = preferenceData?.summary if (newSummary != null) { it.summary = newSummary } } } } } private fun getSupervisionClient(context: Context) = supervisionClient ?: SupervisionMessengerClient(context).also { supervisionClient = it } companion object { const val KEY = "supervision_web_content_filters" internal const val BROWSER_RADIO_BUTTON_GROUP = "browser_radio_button_group" Loading tests/robotests/src/com/android/settings/supervision/SupervisionWebContentFiltersScreenTest.kt +12 −2 Original line number Diff line number Diff line Loading @@ -27,6 +27,8 @@ import androidx.fragment.app.testing.FragmentScenario import androidx.test.core.app.ApplicationProvider import androidx.test.ext.junit.runners.AndroidJUnit4 import com.android.settings.R import com.android.settings.supervision.ipc.SupervisionMessengerClient import com.android.settingslib.ipc.MessengerServiceRule import com.android.settingslib.widget.FooterPreference import com.android.settingslib.widget.SelectorWithWidgetPreference import com.google.common.truth.Truth.assertThat Loading @@ -35,16 +37,24 @@ import org.junit.Rule import org.junit.Test import org.junit.runner.RunWith import org.robolectric.Shadows.shadowOf import org.robolectric.annotation.LooperMode import org.robolectric.shadows.ShadowPackageManager @RunWith(AndroidJUnit4::class) @LooperMode(LooperMode.Mode.INSTRUMENTATION_TEST) class SupervisionWebContentFiltersScreenTest { @get:Rule val setFlagsRule = SetFlagsRule() private val context: Context = ApplicationProvider.getApplicationContext() private lateinit var supervisionWebContentFiltersScreen: SupervisionWebContentFiltersScreen private lateinit var shadowPackageManager: ShadowPackageManager @get:Rule val setFlagsRule = SetFlagsRule() @get:Rule val serviceRule = MessengerServiceRule<SupervisionMessengerClient>( TestSupervisionMessengerService::class.java ) @Before fun setUp() { shadowPackageManager = shadowOf(context.packageManager) Loading Loading
src/com/android/settings/supervision/SupervisionWebContentFiltersScreen.kt +49 −1 Original line number Diff line number Diff line Loading @@ -17,15 +17,26 @@ package com.android.settings.supervision import android.app.supervision.flags.Flags import android.content.Context import androidx.preference.Preference import androidx.preference.PreferenceScreen import com.android.settings.R import com.android.settings.supervision.ipc.SupervisionMessengerClient import com.android.settingslib.metadata.PreferenceCategory import com.android.settingslib.metadata.PreferenceLifecycleContext import com.android.settingslib.metadata.PreferenceLifecycleProvider import com.android.settingslib.metadata.ProvidePreferenceScreen import com.android.settingslib.metadata.preferenceHierarchy import com.android.settingslib.preference.PreferenceScreenCreator import com.android.settingslib.preference.forEachRecursively import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.launch import kotlinx.coroutines.withContext /** Web content filters landing page (Settings > Supervision > Web content filters). */ @ProvidePreferenceScreen(SupervisionWebContentFiltersScreen.KEY) class SupervisionWebContentFiltersScreen : PreferenceScreenCreator { class SupervisionWebContentFiltersScreen : PreferenceScreenCreator, PreferenceLifecycleProvider { private var supervisionClient: SupervisionMessengerClient? = null override fun isFlagEnabled(context: Context) = Flags.enableWebContentFiltersScreen() override val key: String Loading @@ -39,6 +50,15 @@ class SupervisionWebContentFiltersScreen : PreferenceScreenCreator { override fun fragmentClass() = SupervisionWebContentFiltersFragment::class.java override fun onCreate(context: PreferenceLifecycleContext) { supervisionClient = getSupervisionClient(context) updatePreferenceData(context) } override fun onDestroy(context: PreferenceLifecycleContext) { supervisionClient?.close() } override fun getPreferenceHierarchy(context: Context) = preferenceHierarchy(context, this) { +PreferenceCategory( Loading @@ -62,6 +82,34 @@ class SupervisionWebContentFiltersScreen : PreferenceScreenCreator { +SupervisionWebContentFiltersFooterPreference() } private fun updatePreferenceData(context: PreferenceLifecycleContext) { val preferenceScreen = context.findPreference<Preference>(key) if (preferenceScreen is PreferenceScreen) { val preferenceKeys = buildList<String> { preferenceScreen.forEachRecursively { add(it.key) } } context.lifecycleScope.launch { val preferenceDataMap = withContext(Dispatchers.IO) { supervisionClient?.getPreferenceData(preferenceKeys) } preferenceScreen.forEachRecursively { val preferenceData = preferenceDataMap?.get(it.key) val newTitle = preferenceData?.title if (newTitle != null) { it.title = newTitle } val newSummary = preferenceData?.summary if (newSummary != null) { it.summary = newSummary } } } } } private fun getSupervisionClient(context: Context) = supervisionClient ?: SupervisionMessengerClient(context).also { supervisionClient = it } companion object { const val KEY = "supervision_web_content_filters" internal const val BROWSER_RADIO_BUTTON_GROUP = "browser_radio_button_group" Loading
tests/robotests/src/com/android/settings/supervision/SupervisionWebContentFiltersScreenTest.kt +12 −2 Original line number Diff line number Diff line Loading @@ -27,6 +27,8 @@ import androidx.fragment.app.testing.FragmentScenario import androidx.test.core.app.ApplicationProvider import androidx.test.ext.junit.runners.AndroidJUnit4 import com.android.settings.R import com.android.settings.supervision.ipc.SupervisionMessengerClient import com.android.settingslib.ipc.MessengerServiceRule import com.android.settingslib.widget.FooterPreference import com.android.settingslib.widget.SelectorWithWidgetPreference import com.google.common.truth.Truth.assertThat Loading @@ -35,16 +37,24 @@ import org.junit.Rule import org.junit.Test import org.junit.runner.RunWith import org.robolectric.Shadows.shadowOf import org.robolectric.annotation.LooperMode import org.robolectric.shadows.ShadowPackageManager @RunWith(AndroidJUnit4::class) @LooperMode(LooperMode.Mode.INSTRUMENTATION_TEST) class SupervisionWebContentFiltersScreenTest { @get:Rule val setFlagsRule = SetFlagsRule() private val context: Context = ApplicationProvider.getApplicationContext() private lateinit var supervisionWebContentFiltersScreen: SupervisionWebContentFiltersScreen private lateinit var shadowPackageManager: ShadowPackageManager @get:Rule val setFlagsRule = SetFlagsRule() @get:Rule val serviceRule = MessengerServiceRule<SupervisionMessengerClient>( TestSupervisionMessengerService::class.java ) @Before fun setUp() { shadowPackageManager = shadowOf(context.packageManager) Loading