Merge changes from topic "catalyst" into main

* changes:
  [Catalyst] Refine WifiHotspotSwitchPreference
  [Catalyst] Refine DataSaverMainSwitchPreference
This commit is contained in:
Jacky Wang
2024-12-09 06:26:53 +00:00
committed by Android (Google) Code Review
5 changed files with 121 additions and 132 deletions

View File

@@ -19,18 +19,14 @@ package com.android.settings.datausage
import android.content.Context import android.content.Context
import com.android.settings.R import com.android.settings.R
import com.android.settings.widget.MainSwitchBarMetadata import com.android.settings.widget.MainSwitchBarMetadata
import com.android.settingslib.datastore.AbstractKeyedDataObservable
import com.android.settingslib.datastore.DataChangeReason
import com.android.settingslib.datastore.KeyValueStore 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.PreferenceLifecycleProvider
import com.android.settingslib.metadata.ReadWritePermit import com.android.settingslib.metadata.ReadWritePermit
import com.android.settingslib.metadata.SensitivityLevel import com.android.settingslib.metadata.SensitivityLevel
class DataSaverMainSwitchPreference(context: Context) : class DataSaverMainSwitchPreference : MainSwitchBarMetadata, PreferenceLifecycleProvider {
MainSwitchBarMetadata, PreferenceLifecycleProvider {
private val dataSaverBackend = DataSaverBackend(context)
private var dataSaverBackendListener: DataSaverBackend.Listener? = null
override val key override val key
get() = KEY get() = KEY
@@ -38,7 +34,7 @@ class DataSaverMainSwitchPreference(context: Context) :
override val title override val title
get() = R.string.data_saver_switch_title get() = R.string.data_saver_switch_title
override fun storage(context: Context): KeyValueStore = DataSaverStore(dataSaverBackend) override fun storage(context: Context) = createDataStore(context)
override fun getReadPermit(context: Context, myUid: Int, callingUid: Int) = override fun getReadPermit(context: Context, myUid: Int, callingUid: Int) =
ReadWritePermit.ALLOW ReadWritePermit.ALLOW
@@ -49,24 +45,11 @@ class DataSaverMainSwitchPreference(context: Context) :
override val sensitivityLevel override val sensitivityLevel
get() = SensitivityLevel.NO_SENSITIVITY get() = SensitivityLevel.NO_SENSITIVITY
override fun onStart(context: PreferenceLifecycleContext) {
val listener = DataSaverBackend.Listener { context.notifyPreferenceChange(KEY) }
dataSaverBackendListener = listener
dataSaverBackend.addListener(listener)
}
override fun onStop(context: PreferenceLifecycleContext) {
dataSaverBackendListener?.let {
dataSaverBackend.remListener(it)
dataSaverBackendListener = null
}
}
@Suppress("UNCHECKED_CAST") @Suppress("UNCHECKED_CAST")
private class DataSaverStore(private val dataSaverBackend: DataSaverBackend) : private class DataSaverStore(private val dataSaverBackend: DataSaverBackend) :
NoOpKeyedObservable<String>(), KeyValueStore { AbstractKeyedDataObservable<String>(), KeyValueStore, DataSaverBackend.Listener {
override fun contains(key: String) = true // just assume the datastore contains the value override fun contains(key: String) = key == KEY
override fun <T : Any> getValue(key: String, valueType: Class<T>): T? = override fun <T : Any> getValue(key: String, valueType: Class<T>): T? =
dataSaverBackend.isDataSaverEnabled as T? dataSaverBackend.isDataSaverEnabled as T?
@@ -74,9 +57,20 @@ class DataSaverMainSwitchPreference(context: Context) :
override fun <T : Any> setValue(key: String, valueType: Class<T>, value: T?) { override fun <T : Any> setValue(key: String, valueType: Class<T>, value: T?) {
dataSaverBackend.isDataSaverEnabled = value as Boolean dataSaverBackend.isDataSaverEnabled = value as Boolean
} }
override fun onFirstObserverAdded() = dataSaverBackend.addListener(this)
override fun onLastObserverRemoved() = dataSaverBackend.remListener(this)
override fun onDataSaverChanged(isDataSaving: Boolean) =
notifyChange(KEY, DataChangeReason.UPDATE)
} }
companion object { companion object {
const val KEY = "use_data_saver" const val KEY = "use_data_saver"
/** Creates [KeyValueStore] for data saver preference. */
fun createDataStore(context: Context): KeyValueStore =
DataSaverStore(DataSaverBackend(context))
} }
} }

View File

@@ -19,24 +19,30 @@ package com.android.settings.datausage
import android.content.Context import android.content.Context
import android.telephony.SubscriptionManager.INVALID_SUBSCRIPTION_ID import android.telephony.SubscriptionManager.INVALID_SUBSCRIPTION_ID
import com.android.settings.R import com.android.settings.R
import com.android.settings.Settings.DataSaverSummaryActivity
import com.android.settings.flags.Flags import com.android.settings.flags.Flags
import com.android.settings.utils.makeLaunchIntent
import com.android.settingslib.datastore.HandlerExecutor
import com.android.settingslib.datastore.KeyedObserver
import com.android.settingslib.metadata.PreferenceAvailabilityProvider import com.android.settingslib.metadata.PreferenceAvailabilityProvider
import com.android.settingslib.metadata.PreferenceLifecycleContext import com.android.settingslib.metadata.PreferenceLifecycleContext
import com.android.settingslib.metadata.PreferenceLifecycleProvider import com.android.settingslib.metadata.PreferenceLifecycleProvider
import com.android.settingslib.metadata.PreferenceMetadata
import com.android.settingslib.metadata.PreferenceSummaryProvider import com.android.settingslib.metadata.PreferenceSummaryProvider
import com.android.settingslib.metadata.ProvidePreferenceScreen import com.android.settingslib.metadata.ProvidePreferenceScreen
import com.android.settingslib.metadata.preferenceHierarchy import com.android.settingslib.metadata.preferenceHierarchy
import com.android.settingslib.preference.PreferenceScreenCreator import com.android.settingslib.preference.PreferenceScreenCreator
import com.android.settings.datausage.DataSaverMainSwitchPreference.Companion.KEY as DATA_SAVER_KEY
@ProvidePreferenceScreen @ProvidePreferenceScreen
class DataSaverScreen : class DataSaverScreen(context: Context) :
PreferenceScreenCreator, PreferenceScreenCreator,
PreferenceAvailabilityProvider, PreferenceAvailabilityProvider,
PreferenceSummaryProvider, PreferenceSummaryProvider,
PreferenceLifecycleProvider { PreferenceLifecycleProvider {
private var dataSaverBackend: DataSaverBackend? = null private val dataSaverStore = DataSaverMainSwitchPreference.createDataStore(context)
private var dataSaverBackendListener: DataSaverBackend.Listener? = null private lateinit var keyedObserver: KeyedObserver<String>
override val key override val key
get() = KEY get() = KEY
@@ -53,7 +59,7 @@ class DataSaverScreen :
override fun getSummary(context: Context): CharSequence? = override fun getSummary(context: Context): CharSequence? =
when { when {
DataSaverBackend(context).isDataSaverEnabled -> dataSaverStore.getBoolean(DATA_SAVER_KEY) == true ->
context.getString(R.string.data_saver_on) context.getString(R.string.data_saver_on)
else -> context.getString(R.string.data_saver_off) else -> context.getString(R.string.data_saver_off)
} }
@@ -65,21 +71,21 @@ class DataSaverScreen :
override fun fragmentClass() = DataSaverSummary::class.java override fun fragmentClass() = DataSaverSummary::class.java
override fun getLaunchIntent(context: Context, metadata: PreferenceMetadata?) =
makeLaunchIntent(context, DataSaverSummaryActivity::class.java, metadata?.key)
override fun getPreferenceHierarchy(context: Context) = override fun getPreferenceHierarchy(context: Context) =
preferenceHierarchy(this) { +DataSaverMainSwitchPreference(context) } preferenceHierarchy(this) { +DataSaverMainSwitchPreference() }
override fun hasCompleteHierarchy() = false override fun hasCompleteHierarchy() = false
override fun onStart(context: PreferenceLifecycleContext) { override fun onCreate(context: PreferenceLifecycleContext) {
val listener = DataSaverBackend.Listener { context.notifyPreferenceChange(KEY) } keyedObserver = KeyedObserver { _, _ -> context.notifyPreferenceChange(KEY) }
dataSaverBackendListener = listener dataSaverStore.addObserver(DATA_SAVER_KEY, keyedObserver, HandlerExecutor.main)
dataSaverBackend = DataSaverBackend(context).apply { addListener(listener) }
} }
override fun onStop(context: PreferenceLifecycleContext) { override fun onDestroy(context: PreferenceLifecycleContext) {
dataSaverBackend?.remListener(dataSaverBackendListener) dataSaverStore.removeObserver(DATA_SAVER_KEY, keyedObserver)
dataSaverBackend = null
dataSaverBackendListener = null
} }
companion object { companion object {

View File

@@ -20,19 +20,27 @@ import android.net.TetheringManager
import android.os.UserManager import android.os.UserManager
import com.android.settings.PreferenceRestrictionMixin import com.android.settings.PreferenceRestrictionMixin
import com.android.settings.R import com.android.settings.R
import com.android.settings.Settings.TetherSettingsActivity
import com.android.settings.datausage.DataSaverMainSwitchPreference
import com.android.settings.flags.Flags import com.android.settings.flags.Flags
import com.android.settings.network.TetherPreferenceController import com.android.settings.network.TetherPreferenceController
import com.android.settings.utils.makeLaunchIntent
import com.android.settings.wifi.tether.WifiHotspotSwitchPreference import com.android.settings.wifi.tether.WifiHotspotSwitchPreference
import com.android.settingslib.TetherUtil import com.android.settingslib.TetherUtil
import com.android.settingslib.Utils import com.android.settingslib.Utils
import com.android.settingslib.metadata.PreferenceAvailabilityProvider import com.android.settingslib.metadata.PreferenceAvailabilityProvider
import com.android.settingslib.metadata.PreferenceMetadata
import com.android.settingslib.metadata.PreferenceTitleProvider
import com.android.settingslib.metadata.ProvidePreferenceScreen import com.android.settingslib.metadata.ProvidePreferenceScreen
import com.android.settingslib.metadata.preferenceHierarchy import com.android.settingslib.metadata.preferenceHierarchy
import com.android.settingslib.preference.PreferenceScreenCreator import com.android.settingslib.preference.PreferenceScreenCreator
@ProvidePreferenceScreen @ProvidePreferenceScreen
class TetherScreen : class TetherScreen :
PreferenceScreenCreator, PreferenceAvailabilityProvider, PreferenceRestrictionMixin { PreferenceScreenCreator,
PreferenceTitleProvider,
PreferenceAvailabilityProvider,
PreferenceRestrictionMixin {
override val key: String override val key: String
get() = KEY get() = KEY
@@ -43,7 +51,7 @@ class TetherScreen :
override val keywords: Int override val keywords: Int
get() = R.string.keywords_hotspot_tethering get() = R.string.keywords_hotspot_tethering
override fun getPreferenceTitle(context: Context): CharSequence? = override fun getTitle(context: Context): CharSequence? =
if (TetherPreferenceController.isTetherConfigDisallowed(context)) { if (TetherPreferenceController.isTetherConfigDisallowed(context)) {
context.getText(R.string.tether_settings_title_all) context.getText(R.string.tether_settings_title_all)
} else { } else {
@@ -64,8 +72,13 @@ class TetherScreen :
override fun fragmentClass() = TetherSettings::class.java override fun fragmentClass() = TetherSettings::class.java
override fun getPreferenceHierarchy(context: Context) = preferenceHierarchy(this) { override fun getLaunchIntent(context: Context, metadata: PreferenceMetadata?) =
+WifiHotspotSwitchPreference(context) makeLaunchIntent(context, TetherSettingsActivity::class.java, metadata?.key)
override fun getPreferenceHierarchy(context: Context) =
preferenceHierarchy(this) {
val dataSaverStore = DataSaverMainSwitchPreference.createDataStore(context)
+WifiHotspotSwitchPreference(context, dataSaverStore)
} }
companion object { companion object {

View File

@@ -20,6 +20,7 @@ import android.app.settings.SettingsEnums
import android.content.Context import android.content.Context
import android.content.Intent import android.content.Intent
import android.net.TetheringManager import android.net.TetheringManager
import android.net.TetheringManager.TETHERING_WIFI
import android.net.wifi.WifiClient import android.net.wifi.WifiClient
import android.net.wifi.WifiManager import android.net.wifi.WifiManager
import android.os.UserManager import android.os.UserManager
@@ -30,7 +31,7 @@ import com.android.settings.PreferenceRestrictionMixin
import com.android.settings.R import com.android.settings.R
import com.android.settings.Utils import com.android.settings.Utils
import com.android.settings.core.SubSettingLauncher import com.android.settings.core.SubSettingLauncher
import com.android.settings.datausage.DataSaverBackend import com.android.settings.datausage.DataSaverMainSwitchPreference.Companion.KEY as DATA_SAVER_KEY
import com.android.settings.wifi.WifiUtils.canShowWifiHotspot import com.android.settings.wifi.WifiUtils.canShowWifiHotspot
import com.android.settingslib.PrimarySwitchPreference import com.android.settingslib.PrimarySwitchPreference
import com.android.settingslib.TetherUtil import com.android.settingslib.TetherUtil
@@ -38,9 +39,8 @@ import com.android.settingslib.datastore.AbstractKeyedDataObservable
import com.android.settingslib.datastore.DataChangeReason import com.android.settingslib.datastore.DataChangeReason
import com.android.settingslib.datastore.HandlerExecutor import com.android.settingslib.datastore.HandlerExecutor
import com.android.settingslib.datastore.KeyValueStore import com.android.settingslib.datastore.KeyValueStore
import com.android.settingslib.datastore.KeyedObserver
import com.android.settingslib.metadata.PreferenceAvailabilityProvider import com.android.settingslib.metadata.PreferenceAvailabilityProvider
import com.android.settingslib.metadata.PreferenceLifecycleContext
import com.android.settingslib.metadata.PreferenceLifecycleProvider
import com.android.settingslib.metadata.PreferenceMetadata import com.android.settingslib.metadata.PreferenceMetadata
import com.android.settingslib.metadata.PreferenceSummaryProvider import com.android.settingslib.metadata.PreferenceSummaryProvider
import com.android.settingslib.metadata.ReadWritePermit import com.android.settingslib.metadata.ReadWritePermit
@@ -50,20 +50,15 @@ import com.android.settingslib.preference.PreferenceBinding
import com.android.settingslib.wifi.WifiUtils.Companion.getWifiTetherSummaryForConnectedDevices import com.android.settingslib.wifi.WifiUtils.Companion.getWifiTetherSummaryForConnectedDevices
// LINT.IfChange // LINT.IfChange
@Deprecated("Deprecated in Java")
@Suppress("MissingPermission", "NewApi", "UNCHECKED_CAST") @Suppress("MissingPermission", "NewApi", "UNCHECKED_CAST")
class WifiHotspotSwitchPreference(context: Context) : class WifiHotspotSwitchPreference(context: Context, dataSaverStore: KeyValueStore) :
SwitchPreference(KEY, R.string.wifi_hotspot_checkbox_text), SwitchPreference(KEY, R.string.wifi_hotspot_checkbox_text),
PreferenceBinding, PreferenceBinding,
PreferenceAvailabilityProvider, PreferenceAvailabilityProvider,
PreferenceSummaryProvider, PreferenceSummaryProvider,
PreferenceLifecycleProvider,
PreferenceRestrictionMixin { PreferenceRestrictionMixin {
private val wifiHotspotStore = WifiHotspotStore(context) private val wifiHotspotStore = WifiHotspotStore(context, dataSaverStore)
private val dataSaverBackend = DataSaverBackend(context)
private var dataSaverBackendListener: DataSaverBackend.Listener? = null
override fun isAvailable(context: Context) = override fun isAvailable(context: Context) =
canShowWifiHotspot(context) && canShowWifiHotspot(context) &&
@@ -71,21 +66,18 @@ class WifiHotspotSwitchPreference(context: Context) :
!Utils.isMonkeyRunning() !Utils.isMonkeyRunning()
override fun getSummary(context: Context): CharSequence? = override fun getSummary(context: Context): CharSequence? =
when (wifiHotspotStore.sapState) { when (context.wifiManager?.wifiApState) {
WifiManager.WIFI_AP_STATE_ENABLING -> context.getString(R.string.wifi_tether_starting) WifiManager.WIFI_AP_STATE_ENABLING -> context.getString(R.string.wifi_tether_starting)
WifiManager.WIFI_AP_STATE_ENABLED -> WifiManager.WIFI_AP_STATE_ENABLED -> {
when (wifiHotspotStore.sapClientsSize) { val sapClientsSize = wifiHotspotStore.sapClientsSize
null -> if (sapClientsSize == null) {
context.getString( context.getString(
R.string.wifi_tether_enabled_subtext, R.string.wifi_tether_enabled_subtext,
BidiFormatter.getInstance() BidiFormatter.getInstance().unicodeWrap(context.wifiSsid),
.unicodeWrap(context.getSoftApConfiguration()?.ssid),
)
else ->
getWifiTetherSummaryForConnectedDevices(
context,
wifiHotspotStore.sapClientsSize!!,
) )
} else {
getWifiTetherSummaryForConnectedDevices(context, sapClientsSize)
}
} }
WifiManager.WIFI_AP_STATE_DISABLING -> context.getString(R.string.wifi_tether_stopping) WifiManager.WIFI_AP_STATE_DISABLING -> context.getString(R.string.wifi_tether_stopping)
WifiManager.WIFI_AP_STATE_DISABLED -> WifiManager.WIFI_AP_STATE_DISABLED ->
@@ -108,7 +100,8 @@ class WifiHotspotSwitchPreference(context: Context) :
.toIntent() .toIntent()
override fun isEnabled(context: Context) = override fun isEnabled(context: Context) =
!dataSaverBackend.isDataSaverEnabled && super<PreferenceRestrictionMixin>.isEnabled(context) wifiHotspotStore.dataSaverStore.getBoolean(DATA_SAVER_KEY) == true &&
super<PreferenceRestrictionMixin>.isEnabled(context)
override val restrictionKeys override val restrictionKeys
get() = arrayOf(UserManager.DISALLOW_WIFI_TETHERING) get() = arrayOf(UserManager.DISALLOW_WIFI_TETHERING)
@@ -117,10 +110,7 @@ class WifiHotspotSwitchPreference(context: Context) :
ReadWritePermit.ALLOW ReadWritePermit.ALLOW
override fun getWritePermit(context: Context, value: Boolean?, myUid: Int, callingUid: Int) = override fun getWritePermit(context: Context, value: Boolean?, myUid: Int, callingUid: Int) =
when { ReadWritePermit.ALLOW
dataSaverBackend.isDataSaverEnabled -> ReadWritePermit.DISALLOW
else -> ReadWritePermit.ALLOW
}
override val sensitivityLevel override val sensitivityLevel
get() = SensitivityLevel.HIGH_SENSITIVITY get() = SensitivityLevel.HIGH_SENSITIVITY
@@ -129,11 +119,17 @@ class WifiHotspotSwitchPreference(context: Context) :
override fun storage(context: Context): KeyValueStore = wifiHotspotStore override fun storage(context: Context): KeyValueStore = wifiHotspotStore
private class WifiHotspotStore(private val context: Context) : private class WifiHotspotStore(
AbstractKeyedDataObservable<String>(), KeyValueStore { private val context: Context,
val dataSaverStore: KeyValueStore,
) :
AbstractKeyedDataObservable<String>(),
KeyValueStore,
WifiTetherSoftApManager.WifiTetherSoftApCallback,
TetheringManager.StartTetheringCallback,
KeyedObserver<String> {
private var wifiTetherSoftApManager: WifiTetherSoftApManager? = null private var wifiTetherSoftApManager: WifiTetherSoftApManager? = null
var sapState: Int = WifiManager.WIFI_AP_STATE_DISABLED
var sapFailureReason: Int? = null var sapFailureReason: Int? = null
var sapClientsSize: Int? = null var sapClientsSize: Int? = null
@@ -150,35 +146,28 @@ class WifiHotspotSwitchPreference(context: Context) :
override fun <T : Any> setValue(key: String, valueType: Class<T>, value: T?) { override fun <T : Any> setValue(key: String, valueType: Class<T>, value: T?) {
if (value !is Boolean) return if (value !is Boolean) return
context.tetheringManager?.let { val tetheringManager = context.tetheringManager ?: return
if (value) { if (value) {
val startTetheringCallback = tetheringManager.startTethering(TETHERING_WIFI, HandlerExecutor.main, this)
object : TetheringManager.StartTetheringCallback {
override fun onTetheringStarted() {
Log.d(TAG, "onTetheringStarted()")
}
override fun onTetheringFailed(error: Int) {
Log.e(TAG, "onTetheringFailed(),error=$error")
}
}
it.startTethering(
TetheringManager.TETHERING_WIFI,
HandlerExecutor.main,
startTetheringCallback,
)
} else { } else {
it.stopTethering(TetheringManager.TETHERING_WIFI) tetheringManager.stopTethering(TETHERING_WIFI)
}
} }
} }
override fun onFirstObserverAdded() { override fun onFirstObserverAdded() {
val wifiSoftApCallback = val apManager = WifiTetherSoftApManager(context.wifiManager, this)
object : WifiTetherSoftApManager.WifiTetherSoftApCallback { wifiTetherSoftApManager = apManager
apManager.registerSoftApCallback()
dataSaverStore.addObserver(DATA_SAVER_KEY, this, HandlerExecutor.main)
}
override fun onLastObserverRemoved() {
dataSaverStore.removeObserver(DATA_SAVER_KEY, this)
wifiTetherSoftApManager?.unRegisterSoftApCallback()
}
override fun onStateChanged(state: Int, failureReason: Int) { override fun onStateChanged(state: Int, failureReason: Int) {
Log.d(TAG, "onStateChanged(),state=$state,failureReason=$failureReason") Log.d(TAG, "onStateChanged(),state=$state,failureReason=$failureReason")
sapState = state
sapFailureReason = failureReason sapFailureReason = failureReason
if (state == WifiManager.WIFI_AP_STATE_DISABLED) sapClientsSize = null if (state == WifiManager.WIFI_AP_STATE_DISABLED) sapClientsSize = null
notifyChange(KEY, DataChangeReason.UPDATE) notifyChange(KEY, DataChangeReason.UPDATE)
@@ -189,15 +178,15 @@ class WifiHotspotSwitchPreference(context: Context) :
Log.d(TAG, "onConnectedClientsChanged(),sapClientsSize=$sapClientsSize") Log.d(TAG, "onConnectedClientsChanged(),sapClientsSize=$sapClientsSize")
notifyChange(KEY, DataChangeReason.UPDATE) notifyChange(KEY, DataChangeReason.UPDATE)
} }
}
wifiTetherSoftApManager = override fun onTetheringStarted() {}
WifiTetherSoftApManager(context.wifiManager, wifiSoftApCallback)
wifiTetherSoftApManager?.registerSoftApCallback() override fun onTetheringFailed(error: Int) {
Log.e(TAG, "onTetheringFailed(),error=$error")
} }
override fun onLastObserverRemoved() { override fun onKeyChanged(key: String, reason: Int) =
wifiTetherSoftApManager?.unRegisterSoftApCallback() notifyChange(KEY, DataChangeReason.UPDATE)
}
} }
override fun bind(preference: Preference, metadata: PreferenceMetadata) { override fun bind(preference: Preference, metadata: PreferenceMetadata) {
@@ -207,24 +196,6 @@ class WifiHotspotSwitchPreference(context: Context) :
} }
} }
override fun onStart(context: PreferenceLifecycleContext) {
val listener =
DataSaverBackend.Listener { isDataSaving: Boolean ->
context.findPreference<PrimarySwitchPreference>(KEY)?.isSwitchEnabled =
!isDataSaving
context.notifyPreferenceChange(KEY)
}
dataSaverBackendListener = listener
dataSaverBackend.addListener(listener)
}
override fun onStop(context: PreferenceLifecycleContext) {
dataSaverBackendListener?.let {
dataSaverBackend.remListener(it)
dataSaverBackendListener = null
}
}
companion object { companion object {
const val TAG = "WifiHotspotSwitchPreference" const val TAG = "WifiHotspotSwitchPreference"
const val KEY = "wifi_tether" const val KEY = "wifi_tether"
@@ -232,7 +203,9 @@ class WifiHotspotSwitchPreference(context: Context) :
private val Context.wifiManager: WifiManager? private val Context.wifiManager: WifiManager?
get() = applicationContext.getSystemService(WifiManager::class.java) get() = applicationContext.getSystemService(WifiManager::class.java)
private fun Context.getSoftApConfiguration() = wifiManager?.softApConfiguration @Suppress("DEPRECATION")
private val Context.wifiSsid
get() = wifiManager?.softApConfiguration?.ssid
private val Context.tetheringManager: TetheringManager? private val Context.tetheringManager: TetheringManager?
get() = applicationContext.getSystemService(TetheringManager::class.java) get() = applicationContext.getSystemService(TetheringManager::class.java)

View File

@@ -16,13 +16,16 @@
package com.android.settings.datausage package com.android.settings.datausage
import androidx.test.core.app.ApplicationProvider
import com.android.settings.flags.Flags import com.android.settings.flags.Flags
import com.android.settingslib.preference.CatalystScreenTestCase import com.android.settingslib.preference.CatalystScreenTestCase
import com.google.common.truth.Truth.assertThat import com.google.common.truth.Truth.assertThat
import org.junit.Test import org.junit.Test
class DataSaverScreenTest : CatalystScreenTestCase() { class DataSaverScreenTest : CatalystScreenTestCase() {
override val preferenceScreenCreator = DataSaverScreen() override val preferenceScreenCreator =
DataSaverScreen(ApplicationProvider.getApplicationContext())
override val flagName override val flagName
get() = Flags.FLAG_CATALYST_RESTRICT_BACKGROUND_PARENT_ENTRY get() = Flags.FLAG_CATALYST_RESTRICT_BACKGROUND_PARENT_ENTRY