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

Commit 64112e9c authored by Jacky Wang's avatar Jacky Wang
Browse files

[Supervision] Close SupervisionMessengerClient

Also reuse SupervisionMessengerClient.

Fix: 412809206
Flag: android.app.supervision.flags.enable_supervision_settings_screen
Test: manual
Change-Id: I35a00b0904245e7d16513718ed9232a8fbff2ac7
parent 55453ac8
Loading
Loading
Loading
Loading
+14 −4
Original line number Diff line number Diff line
@@ -19,6 +19,8 @@ import android.app.supervision.flags.Flags
import android.content.Context
import com.android.settings.R
import com.android.settings.supervision.ipc.SupervisionMessengerClient
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
@@ -34,7 +36,8 @@ import com.android.settingslib.preference.PreferenceScreenCreator
 * 3. Entry point to supervision PIN management settings page.
 */
@ProvidePreferenceScreen(SupervisionDashboardScreen.KEY)
class SupervisionDashboardScreen : PreferenceScreenCreator {
class SupervisionDashboardScreen : PreferenceScreenCreator, PreferenceLifecycleProvider {
    private var supervisionClient: SupervisionMessengerClient? = null

    override fun isFlagEnabled(context: Context) = Flags.enableSupervisionSettingsScreen()

@@ -55,17 +58,24 @@ class SupervisionDashboardScreen : PreferenceScreenCreator {

    override fun fragmentClass() = SupervisionDashboardFragment::class.java

    override fun onDestroy(context: PreferenceLifecycleContext) {
        supervisionClient?.close()
    }

    override fun getPreferenceHierarchy(context: Context) =
        preferenceHierarchy(context, this) {
            +SupervisionMainSwitchPreference(context, SupervisionMessengerClient(context)) order
                -200
            val supervisionClient = getSupervisionClient(context)
            +SupervisionMainSwitchPreference(context, supervisionClient) order -200
            +TitlelessPreferenceGroup(SUPERVISION_DYNAMIC_GROUP_1) order -100 += {
                +SupervisionWebContentFiltersScreen.KEY order 100
            }
            +SupervisionPinManagementScreen.KEY order 100
            +SupervisionPromoFooterPreference(SupervisionMessengerClient(context)) order 300
            +SupervisionPromoFooterPreference(supervisionClient) order 300
        }

    private fun getSupervisionClient(context: Context) =
        supervisionClient ?: SupervisionMessengerClient(context).also { supervisionClient = it }

    companion object {
        const val KEY = "top_level_supervision"
        internal const val SUPERVISION_DYNAMIC_GROUP_1 = "supervision_features_group_1"