1 /* <lambda>null2 * Copyright (C) 2024 The Android Open Source Project 3 * 4 * Licensed under the Apache License, Version 2.0 (the "License"); 5 * you may not use this file except in compliance with the License. 6 * You may obtain a copy of the License at 7 * 8 * http://www.apache.org/licenses/LICENSE-2.0 9 * 10 * Unless required by applicable law or agreed to in writing, software 11 * distributed under the License is distributed on an "AS IS" BASIS, 12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. 13 * See the License for the specific language governing permissions and 14 * limitations under the License. 15 */ 16 17 package com.android.settings.datausage 18 19 import android.content.Context 20 import android.telephony.SubscriptionManager.INVALID_SUBSCRIPTION_ID 21 import com.android.settings.R 22 import com.android.settings.Settings.DataSaverSummaryActivity 23 import com.android.settings.flags.Flags 24 import com.android.settings.utils.makeLaunchIntent 25 import com.android.settingslib.datastore.HandlerExecutor 26 import com.android.settingslib.datastore.KeyedObserver 27 import com.android.settingslib.metadata.PreferenceAvailabilityProvider 28 import com.android.settingslib.metadata.PreferenceLifecycleContext 29 import com.android.settingslib.metadata.PreferenceLifecycleProvider 30 import com.android.settingslib.metadata.PreferenceMetadata 31 import com.android.settingslib.metadata.PreferenceSummaryProvider 32 import com.android.settingslib.metadata.ProvidePreferenceScreen 33 import com.android.settingslib.metadata.preferenceHierarchy 34 import com.android.settingslib.preference.PreferenceScreenCreator 35 import com.android.settings.datausage.DataSaverMainSwitchPreference.Companion.KEY as DATA_SAVER_KEY 36 37 @ProvidePreferenceScreen 38 class DataSaverScreen(context: Context) : 39 PreferenceScreenCreator, 40 PreferenceAvailabilityProvider, 41 PreferenceSummaryProvider, 42 PreferenceLifecycleProvider { 43 44 private val dataSaverStore = DataSaverMainSwitchPreference.createDataStore(context) 45 private lateinit var keyedObserver: KeyedObserver<String> 46 47 override val key 48 get() = KEY 49 50 override val title 51 get() = R.string.data_saver_title 52 53 override val icon: Int 54 get() = R.drawable.ic_settings_data_usage 55 56 override fun isIndexable(context: Context) = 57 DataUsageUtils.hasMobileData(context) && 58 DataUsageUtils.getDefaultSubscriptionId(context) != INVALID_SUBSCRIPTION_ID 59 60 override fun getSummary(context: Context): CharSequence? = 61 when { 62 dataSaverStore.getBoolean(DATA_SAVER_KEY) == true -> 63 context.getString(R.string.data_saver_on) 64 else -> context.getString(R.string.data_saver_off) 65 } 66 67 override fun isAvailable(context: Context) = 68 context.resources.getBoolean(R.bool.config_show_data_saver) 69 70 override fun isFlagEnabled(context: Context) = Flags.catalystRestrictBackgroundParentEntry() 71 72 override fun fragmentClass() = DataSaverSummary::class.java 73 74 override fun getLaunchIntent(context: Context, metadata: PreferenceMetadata?) = 75 makeLaunchIntent(context, DataSaverSummaryActivity::class.java, metadata?.key) 76 77 override fun getPreferenceHierarchy(context: Context) = 78 preferenceHierarchy(this) { +DataSaverMainSwitchPreference() } 79 80 override fun hasCompleteHierarchy() = false 81 82 override fun onCreate(context: PreferenceLifecycleContext) { 83 keyedObserver = KeyedObserver { _, _ -> context.notifyPreferenceChange(KEY) } 84 dataSaverStore.addObserver(DATA_SAVER_KEY, keyedObserver, HandlerExecutor.main) 85 } 86 87 override fun onDestroy(context: PreferenceLifecycleContext) { 88 dataSaverStore.removeObserver(DATA_SAVER_KEY, keyedObserver) 89 } 90 91 companion object { 92 const val KEY = "restrict_background_parent_entry" 93 } 94 } 95