diff --git a/src/com/android/settings/datausage/DataSaverMainSwitchPreference.kt b/src/com/android/settings/datausage/DataSaverMainSwitchPreference.kt new file mode 100644 index 00000000000..b05cbc88d9f --- /dev/null +++ b/src/com/android/settings/datausage/DataSaverMainSwitchPreference.kt @@ -0,0 +1,71 @@ +/* + * Copyright (C) 2024 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.datausage + +import android.content.Context +import com.android.settings.R +import com.android.settings.widget.MainSwitchBarMetadata +import com.android.settingslib.datastore.KeyValueStore +import com.android.settingslib.datastore.NoOpKeyedObservable +import com.android.settingslib.metadata.PreferenceLifecycleContext +import com.android.settingslib.metadata.PreferenceLifecycleProvider +import com.android.settingslib.metadata.ReadWritePermit + +class DataSaverMainSwitchPreference(context: Context) : + MainSwitchBarMetadata, PreferenceLifecycleProvider { + + private val dataSaverBackend = DataSaverBackend(context) + private var dataSaverBackendListener: DataSaverBackend.Listener? = null + + override val key + get() = "use_data_saver" + + override val title + get() = R.string.data_saver_switch_title + + override fun storage(context: Context): KeyValueStore = DataSaverStore(dataSaverBackend) + + override fun getWritePermit(context: Context, value: Boolean?, myUid: Int, callingUid: Int) = + ReadWritePermit.ALLOW + + override fun onStart(context: PreferenceLifecycleContext) { + val listener = DataSaverBackend.Listener { context.notifyPreferenceChange(this) } + dataSaverBackendListener = listener + dataSaverBackend.addListener(listener) + } + + override fun onStop(context: PreferenceLifecycleContext) { + dataSaverBackendListener?.let { + dataSaverBackend.remListener(it) + dataSaverBackendListener = null + } + } + + @Suppress("UNCHECKED_CAST") + private class DataSaverStore(private val dataSaverBackend: DataSaverBackend) : + NoOpKeyedObservable(), KeyValueStore { + + override fun contains(key: String) = true // just assume the datastore contains the value + + override fun getValue(key: String, valueType: Class): T? = + dataSaverBackend.isDataSaverEnabled as T? + + override fun setValue(key: String, valueType: Class, value: T?) { + dataSaverBackend.isDataSaverEnabled = value as Boolean + } + } +} diff --git a/src/com/android/settings/datausage/DataSaverScreen.kt b/src/com/android/settings/datausage/DataSaverScreen.kt index eafaa1e8c03..9a9b79018a1 100644 --- a/src/com/android/settings/datausage/DataSaverScreen.kt +++ b/src/com/android/settings/datausage/DataSaverScreen.kt @@ -38,7 +38,8 @@ class DataSaverScreen : PreferenceScreenCreator { override fun fragmentClass() = DataSaverSummary::class.java - override fun getPreferenceHierarchy(context: Context) = preferenceHierarchy(this) {} + override fun getPreferenceHierarchy(context: Context) = + preferenceHierarchy(this) { +DataSaverMainSwitchPreference(context) } override fun hasCompleteHierarchy() = false diff --git a/src/com/android/settings/datausage/DataSaverSummary.kt b/src/com/android/settings/datausage/DataSaverSummary.kt index 8db633331bc..60de8a72539 100644 --- a/src/com/android/settings/datausage/DataSaverSummary.kt +++ b/src/com/android/settings/datausage/DataSaverSummary.kt @@ -43,26 +43,34 @@ class DataSaverSummary : DashboardFragment() { return } - dataSaverBackend = DataSaverBackend(requireContext()) + if (!isCatalystEnabled) { + dataSaverBackend = DataSaverBackend(requireContext()) + } } override fun onViewCreated(view: View, savedInstanceState: Bundle?) { super.onViewCreated(view, savedInstanceState) - switchBar = (activity as SettingsActivity).switchBar.apply { - setTitle(getString(R.string.data_saver_switch_title)) - show() - addOnSwitchChangeListener { _, isChecked -> onSwitchChanged(isChecked) } + if (!isCatalystEnabled) { + switchBar = (activity as SettingsActivity).switchBar.apply { + setTitle(getString(R.string.data_saver_switch_title)) + show() + addOnSwitchChangeListener { _, isChecked -> onSwitchChanged(isChecked) } + } } } override fun onResume() { super.onResume() - dataSaverBackend.addListener(dataSaverBackendListener) + if (!isCatalystEnabled) { + dataSaverBackend.addListener(dataSaverBackendListener) + } } override fun onPause() { super.onPause() - dataSaverBackend.remListener(dataSaverBackendListener) + if (!isCatalystEnabled) { + dataSaverBackend.remListener(dataSaverBackendListener) + } } private fun onSwitchChanged(isChecked: Boolean) {