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

Commit b7e1cc47 authored by Treehugger Robot's avatar Treehugger Robot Committed by Android (Google) Code Review
Browse files

Merge "[Catalyst] Add back Wi-Fi switch metrics" into main

parents adfb3a48 cd9af665
Loading
Loading
Loading
Loading
+13 −2
Original line number Diff line number Diff line
@@ -17,6 +17,8 @@
package com.android.settings.wifi

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.Context
import android.content.Intent
@@ -31,6 +33,8 @@ import com.android.settings.PreferenceRestrictionMixin
import com.android.settings.R
import com.android.settings.network.SatelliteRepository.Companion.isSatelliteOn
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.wifiManager
import com.android.settingslib.RestrictedSwitchPreference
@@ -137,8 +141,15 @@ class WifiSwitchPreference :
            context.isWifiEnabled as 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

            val metricsFeature = featureFactory.metricsFeatureProvider
            if (value) {
                metricsFeature.action(context, ACTION_WIFI_ON)
            } else {
                metricsFeature.action(context, ACTION_WIFI_OFF, context.isDefaultNetworkWifi)
            }
        }

+17 −0
Original line number Diff line number Diff line
@@ -19,6 +19,8 @@
package com.android.settings.wifi.utils

import android.content.Context
import android.net.ConnectivityManager
import android.net.NetworkCapabilities
import android.net.TetheringManager
import android.net.wifi.WifiManager

@@ -52,3 +54,18 @@ var Context.isWifiEnabled: Boolean
 */
val Context.tetheringManager: TetheringManager?
    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
+52 −0
Original line number Diff line number Diff line
@@ -16,11 +16,19 @@

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.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 androidx.preference.SwitchPreferenceCompat
import androidx.test.core.app.ApplicationProvider
import androidx.test.ext.junit.runners.AndroidJUnit4
import com.android.settings.testutils.FakeFeatureFactory
import com.android.settingslib.preference.createAndBindWidget
import com.google.common.truth.Truth.assertThat
import org.junit.Test
@@ -28,11 +36,13 @@ import org.junit.runner.RunWith
import org.mockito.kotlin.doReturn
import org.mockito.kotlin.mock
import org.mockito.kotlin.stub
import org.mockito.kotlin.verify

@RunWith(AndroidJUnit4::class)
class WifiSwitchPreferenceTest {

    private val mockWifiManager = mock<WifiManager>()
    private val mockConnectivityManager = mock<ConnectivityManager>()

    private val context =
        object : ContextWrapper(ApplicationProvider.getApplicationContext()) {
@@ -41,6 +51,7 @@ class WifiSwitchPreferenceTest {
            override fun getSystemService(name: String): Any? =
                when (name) {
                    getSystemServiceName(WifiManager::class.java) -> mockWifiManager
                    getSystemServiceName(ConnectivityManager::class.java) -> mockConnectivityManager
                    else -> super.getSystemService(name)
                }
        }
@@ -65,6 +76,35 @@ class WifiSwitchPreferenceTest {
        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
    fun performClick_defaultOn_checkedIsFalse() {
        mockWifiManager.stub { on { isWifiEnabled } doReturn true }
@@ -85,4 +125,16 @@ class WifiSwitchPreferenceTest {

    private fun getSwitchPreference(): SwitchPreferenceCompat =
        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
        }
    }
}