[Catalyst] Add back Wi-Fi switch metrics
- The original Wi-Fi switch metrics is recorded by WifiEnabler. - Since the design of Catalyst removes WifiEnabler, the metrics needs to be added to Catalyst preference. NO_IFTTT=Catalyst only Bug: 388547699 Flag: EXEMPT bugfix Test: Manual testing atest -c WifiSwitchPreferenceTest Change-Id: I8819e8f660784b8b04c7958b65f4792b5d4d0919
This commit is contained in:
@@ -17,6 +17,8 @@
|
|||||||
package com.android.settings.wifi
|
package com.android.settings.wifi
|
||||||
|
|
||||||
import android.Manifest
|
import android.Manifest
|
||||||
|
import android.app.settings.SettingsEnums.ACTION_WIFI_OFF
|
||||||
|
import android.app.settings.SettingsEnums.ACTION_WIFI_ON
|
||||||
import android.content.BroadcastReceiver
|
import android.content.BroadcastReceiver
|
||||||
import android.content.Context
|
import android.content.Context
|
||||||
import android.content.Intent
|
import android.content.Intent
|
||||||
@@ -31,6 +33,8 @@ import com.android.settings.PreferenceRestrictionMixin
|
|||||||
import com.android.settings.R
|
import com.android.settings.R
|
||||||
import com.android.settings.network.SatelliteRepository.Companion.isSatelliteOn
|
import com.android.settings.network.SatelliteRepository.Companion.isSatelliteOn
|
||||||
import com.android.settings.network.SatelliteWarningDialogActivity
|
import com.android.settings.network.SatelliteWarningDialogActivity
|
||||||
|
import com.android.settings.overlay.FeatureFactory.Companion.featureFactory
|
||||||
|
import com.android.settings.wifi.utils.isDefaultNetworkWifi
|
||||||
import com.android.settings.wifi.utils.isWifiEnabled
|
import com.android.settings.wifi.utils.isWifiEnabled
|
||||||
import com.android.settings.wifi.utils.wifiManager
|
import com.android.settings.wifi.utils.wifiManager
|
||||||
import com.android.settingslib.RestrictedSwitchPreference
|
import com.android.settingslib.RestrictedSwitchPreference
|
||||||
@@ -137,8 +141,15 @@ class WifiSwitchPreference :
|
|||||||
context.isWifiEnabled as T?
|
context.isWifiEnabled as T?
|
||||||
|
|
||||||
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) {
|
if (value !is Boolean) return
|
||||||
context.isWifiEnabled = value
|
|
||||||
|
context.isWifiEnabled = value
|
||||||
|
|
||||||
|
val metricsFeature = featureFactory.metricsFeatureProvider
|
||||||
|
if (value) {
|
||||||
|
metricsFeature.action(context, ACTION_WIFI_ON)
|
||||||
|
} else {
|
||||||
|
metricsFeature.action(context, ACTION_WIFI_OFF, context.isDefaultNetworkWifi)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@@ -19,6 +19,8 @@
|
|||||||
package com.android.settings.wifi.utils
|
package com.android.settings.wifi.utils
|
||||||
|
|
||||||
import android.content.Context
|
import android.content.Context
|
||||||
|
import android.net.ConnectivityManager
|
||||||
|
import android.net.NetworkCapabilities
|
||||||
import android.net.TetheringManager
|
import android.net.TetheringManager
|
||||||
import android.net.wifi.WifiManager
|
import android.net.wifi.WifiManager
|
||||||
|
|
||||||
@@ -52,3 +54,18 @@ var Context.isWifiEnabled: Boolean
|
|||||||
*/
|
*/
|
||||||
val Context.tetheringManager: TetheringManager?
|
val Context.tetheringManager: TetheringManager?
|
||||||
get() = applicationContext.getSystemService(TetheringManager::class.java)
|
get() = applicationContext.getSystemService(TetheringManager::class.java)
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Gets the {@link android.net.ConnectivityManager} system service.
|
||||||
|
*
|
||||||
|
* Use application context to get system services to avoid memory leaks.
|
||||||
|
*/
|
||||||
|
val Context.connectivityManager: ConnectivityManager?
|
||||||
|
get() = applicationContext.getSystemService(ConnectivityManager::class.java)
|
||||||
|
|
||||||
|
/** Return true if the default network is a Wi-Fi network */
|
||||||
|
val Context.isDefaultNetworkWifi: Boolean
|
||||||
|
get() =
|
||||||
|
connectivityManager
|
||||||
|
?.getNetworkCapabilities(connectivityManager?.activeNetwork)
|
||||||
|
?.hasTransport(NetworkCapabilities.TRANSPORT_WIFI) == true
|
||||||
|
@@ -16,11 +16,19 @@
|
|||||||
|
|
||||||
package com.android.settings.wifi
|
package com.android.settings.wifi
|
||||||
|
|
||||||
|
import android.app.settings.SettingsEnums.ACTION_WIFI_OFF
|
||||||
|
import android.app.settings.SettingsEnums.ACTION_WIFI_ON
|
||||||
import android.content.ContextWrapper
|
import android.content.ContextWrapper
|
||||||
|
import android.net.ConnectivityManager
|
||||||
|
import android.net.Network
|
||||||
|
import android.net.NetworkCapabilities
|
||||||
|
import android.net.NetworkCapabilities.TRANSPORT_CELLULAR
|
||||||
|
import android.net.NetworkCapabilities.TRANSPORT_WIFI
|
||||||
import android.net.wifi.WifiManager
|
import android.net.wifi.WifiManager
|
||||||
import androidx.preference.SwitchPreferenceCompat
|
import androidx.preference.SwitchPreferenceCompat
|
||||||
import androidx.test.core.app.ApplicationProvider
|
import androidx.test.core.app.ApplicationProvider
|
||||||
import androidx.test.ext.junit.runners.AndroidJUnit4
|
import androidx.test.ext.junit.runners.AndroidJUnit4
|
||||||
|
import com.android.settings.testutils.FakeFeatureFactory
|
||||||
import com.android.settingslib.preference.createAndBindWidget
|
import com.android.settingslib.preference.createAndBindWidget
|
||||||
import com.google.common.truth.Truth.assertThat
|
import com.google.common.truth.Truth.assertThat
|
||||||
import org.junit.Test
|
import org.junit.Test
|
||||||
@@ -28,11 +36,13 @@ import org.junit.runner.RunWith
|
|||||||
import org.mockito.kotlin.doReturn
|
import org.mockito.kotlin.doReturn
|
||||||
import org.mockito.kotlin.mock
|
import org.mockito.kotlin.mock
|
||||||
import org.mockito.kotlin.stub
|
import org.mockito.kotlin.stub
|
||||||
|
import org.mockito.kotlin.verify
|
||||||
|
|
||||||
@RunWith(AndroidJUnit4::class)
|
@RunWith(AndroidJUnit4::class)
|
||||||
class WifiSwitchPreferenceTest {
|
class WifiSwitchPreferenceTest {
|
||||||
|
|
||||||
private val mockWifiManager = mock<WifiManager>()
|
private val mockWifiManager = mock<WifiManager>()
|
||||||
|
private val mockConnectivityManager = mock<ConnectivityManager>()
|
||||||
|
|
||||||
private val context =
|
private val context =
|
||||||
object : ContextWrapper(ApplicationProvider.getApplicationContext()) {
|
object : ContextWrapper(ApplicationProvider.getApplicationContext()) {
|
||||||
@@ -41,6 +51,7 @@ class WifiSwitchPreferenceTest {
|
|||||||
override fun getSystemService(name: String): Any? =
|
override fun getSystemService(name: String): Any? =
|
||||||
when (name) {
|
when (name) {
|
||||||
getSystemServiceName(WifiManager::class.java) -> mockWifiManager
|
getSystemServiceName(WifiManager::class.java) -> mockWifiManager
|
||||||
|
getSystemServiceName(ConnectivityManager::class.java) -> mockConnectivityManager
|
||||||
else -> super.getSystemService(name)
|
else -> super.getSystemService(name)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -65,6 +76,35 @@ class WifiSwitchPreferenceTest {
|
|||||||
assertThat(getValue).isFalse()
|
assertThat(getValue).isFalse()
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
fun setValue_valueTrue_metricsActionWifiOn() {
|
||||||
|
val metricsFeatureProvider = FakeFeatureFactory.setupForTest().metricsFeatureProvider
|
||||||
|
|
||||||
|
wifiSwitchPreference.storage(context).setBoolean(WifiSwitchPreference.KEY, true)
|
||||||
|
|
||||||
|
verify(metricsFeatureProvider).action(context, ACTION_WIFI_ON)
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
fun setValue_valueFalseWithoutDefaultWifi_metricsActionWifiOffWithFalse() {
|
||||||
|
val metricsFeatureProvider = FakeFeatureFactory.setupForTest().metricsFeatureProvider
|
||||||
|
mockDefaultNetwork(TRANSPORT_CELLULAR)
|
||||||
|
|
||||||
|
wifiSwitchPreference.storage(context).setBoolean(WifiSwitchPreference.KEY, false)
|
||||||
|
|
||||||
|
verify(metricsFeatureProvider).action(context, ACTION_WIFI_OFF, false)
|
||||||
|
}
|
||||||
|
|
||||||
|
@Test
|
||||||
|
fun setValue_valueFalseWithDefaultWifi_metricsActionWifiOffWithTrue() {
|
||||||
|
val metricsFeatureProvider = FakeFeatureFactory.setupForTest().metricsFeatureProvider
|
||||||
|
mockDefaultNetwork(TRANSPORT_WIFI)
|
||||||
|
|
||||||
|
wifiSwitchPreference.storage(context).setBoolean(WifiSwitchPreference.KEY, false)
|
||||||
|
|
||||||
|
verify(metricsFeatureProvider).action(context, ACTION_WIFI_OFF, true)
|
||||||
|
}
|
||||||
|
|
||||||
@Test
|
@Test
|
||||||
fun performClick_defaultOn_checkedIsFalse() {
|
fun performClick_defaultOn_checkedIsFalse() {
|
||||||
mockWifiManager.stub { on { isWifiEnabled } doReturn true }
|
mockWifiManager.stub { on { isWifiEnabled } doReturn true }
|
||||||
@@ -85,4 +125,16 @@ class WifiSwitchPreferenceTest {
|
|||||||
|
|
||||||
private fun getSwitchPreference(): SwitchPreferenceCompat =
|
private fun getSwitchPreference(): SwitchPreferenceCompat =
|
||||||
wifiSwitchPreference.createAndBindWidget(context)
|
wifiSwitchPreference.createAndBindWidget(context)
|
||||||
|
|
||||||
|
private fun mockDefaultNetwork(transportType: Int) {
|
||||||
|
val mockNetwork = mock<Network>()
|
||||||
|
val networkCapabilities =
|
||||||
|
NetworkCapabilities.Builder.withoutDefaultCapabilities()
|
||||||
|
.addTransportType(transportType)
|
||||||
|
.build()
|
||||||
|
mockConnectivityManager.stub {
|
||||||
|
on { activeNetwork } doReturn mockNetwork
|
||||||
|
on { getNetworkCapabilities(mockNetwork) } doReturn networkCapabilities
|
||||||
|
}
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user