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

Commit 0260d257 authored by Xiaomiao Zhang's avatar Xiaomiao Zhang Committed by Android (Google) Code Review
Browse files

Merge "Update web content filters screen title and summary using messenger service." into main

parents a947fd52 24d96dbf
Loading
Loading
Loading
Loading
+49 −1
Original line number Diff line number Diff line
@@ -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
@@ -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(
@@ -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"
+12 −2
Original line number Diff line number Diff line
@@ -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
@@ -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)