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

Commit 018e1a1f authored by Evan Laird's avatar Evan Laird
Browse files

[Sb refactor] Add WifiIcon.fromModel for use in QS

This function is a simple mapping from a WifiNetworkModel to a WifiIcon.
Since we want a WifiIcon object to represent a WifiNetworkModel in
exactly the same way in QS as in the status bar, moving this function
allows us to reuse it later

Test: tests in statusbar/pipeline
Bug: 291321279
Change-Id: I2fae11827c6cfd07d08fccc3eb5351883b706f90
parent 33ae20c8
Loading
Loading
Loading
Loading
+48 −0
Original line number Diff line number Diff line
@@ -17,10 +17,18 @@
package com.android.systemui.statusbar.pipeline.wifi.ui.model

import android.annotation.DrawableRes
import android.content.Context
import androidx.annotation.StringRes
import androidx.annotation.VisibleForTesting
import com.android.settingslib.AccessibilityContentDescriptions.WIFI_CONNECTION_STRENGTH
import com.android.settingslib.AccessibilityContentDescriptions.WIFI_NO_CONNECTION
import com.android.systemui.R
import com.android.systemui.common.shared.model.ContentDescription
import com.android.systemui.common.shared.model.Icon
import com.android.systemui.log.table.Diffable
import com.android.systemui.log.table.TableRowLogger
import com.android.systemui.statusbar.connectivity.WifiIcons
import com.android.systemui.statusbar.pipeline.wifi.shared.model.WifiNetworkModel

/** Represents the various states of the wifi icon. */
sealed interface WifiIcon : Diffable<WifiIcon> {
@@ -51,6 +59,46 @@ sealed interface WifiIcon : Diffable<WifiIcon> {
    override fun logFull(row: TableRowLogger) {
        row.logChange(COL_ICON, toString())
    }

    companion object {
        @StringRes
        @VisibleForTesting
        internal val NO_INTERNET = R.string.data_connection_no_internet

        /** Mapping from a [WifiNetworkModel] to the appropriate [WifiIcon] */
        fun fromModel(model: WifiNetworkModel, context: Context): WifiIcon =
            when (model) {
                is WifiNetworkModel.Unavailable -> Hidden
                is WifiNetworkModel.Invalid -> Hidden
                is WifiNetworkModel.CarrierMerged -> Hidden
                is WifiNetworkModel.Inactive ->
                    Visible(
                        res = WifiIcons.WIFI_NO_NETWORK,
                        ContentDescription.Loaded(
                            "${context.getString(WIFI_NO_CONNECTION)},${context.getString(
                                NO_INTERNET
                            )}"
                        )
                    )
                is WifiNetworkModel.Active -> {
                    val levelDesc = context.getString(WIFI_CONNECTION_STRENGTH[model.level])
                    when {
                        model.isValidated ->
                            Visible(
                                WifiIcons.WIFI_FULL_ICONS[model.level],
                                ContentDescription.Loaded(levelDesc),
                            )
                        else ->
                            Visible(
                                WifiIcons.WIFI_NO_INTERNET_ICONS[model.level],
                                ContentDescription.Loaded(
                                    "$levelDesc,${context.getString(NO_INTERNET)}"
                                ),
                            )
                    }
                }
            }
    }
}

private const val COL_ICON = "icon"
+1 −44
Original line number Diff line number Diff line
@@ -17,19 +17,10 @@
package com.android.systemui.statusbar.pipeline.wifi.ui.viewmodel

import android.content.Context
import androidx.annotation.StringRes
import androidx.annotation.VisibleForTesting
import com.android.settingslib.AccessibilityContentDescriptions.WIFI_CONNECTION_STRENGTH
import com.android.settingslib.AccessibilityContentDescriptions.WIFI_NO_CONNECTION
import com.android.systemui.R
import com.android.systemui.common.shared.model.ContentDescription
import com.android.systemui.dagger.SysUISingleton
import com.android.systemui.dagger.qualifiers.Application
import com.android.systemui.log.table.TableLogBuffer
import com.android.systemui.log.table.logDiffsForTable
import com.android.systemui.statusbar.connectivity.WifiIcons.WIFI_FULL_ICONS
import com.android.systemui.statusbar.connectivity.WifiIcons.WIFI_NO_INTERNET_ICONS
import com.android.systemui.statusbar.connectivity.WifiIcons.WIFI_NO_NETWORK
import com.android.systemui.statusbar.pipeline.airplane.ui.viewmodel.AirplaneModeViewModel
import com.android.systemui.statusbar.pipeline.dagger.StatusBarPipelineModule.Companion.FIRST_MOBILE_SUB_SHOWING_NETWORK_TYPE_ICON
import com.android.systemui.statusbar.pipeline.dagger.WifiTableLog
@@ -77,35 +68,7 @@ constructor(
) : WifiViewModelCommon {
    /** Returns the icon to use based on the given network. */
    private fun WifiNetworkModel.icon(): WifiIcon {
        return when (this) {
            is WifiNetworkModel.Unavailable -> WifiIcon.Hidden
            is WifiNetworkModel.Invalid -> WifiIcon.Hidden
            is WifiNetworkModel.CarrierMerged -> WifiIcon.Hidden
            is WifiNetworkModel.Inactive ->
                WifiIcon.Visible(
                    res = WIFI_NO_NETWORK,
                    ContentDescription.Loaded(
                        "${context.getString(WIFI_NO_CONNECTION)},${context.getString(NO_INTERNET)}"
                    )
                )
            is WifiNetworkModel.Active -> {
                val levelDesc = context.getString(WIFI_CONNECTION_STRENGTH[this.level])
                when {
                    this.isValidated ->
                        WifiIcon.Visible(
                            WIFI_FULL_ICONS[this.level],
                            ContentDescription.Loaded(levelDesc),
                        )
                    else ->
                        WifiIcon.Visible(
                            WIFI_NO_INTERNET_ICONS[this.level],
                            ContentDescription.Loaded(
                                "$levelDesc,${context.getString(NO_INTERNET)}"
                            ),
                        )
                }
            }
        }
        return WifiIcon.fromModel(this, context)
    }

    override val wifiIcon: StateFlow<WifiIcon> =
@@ -186,10 +149,4 @@ constructor(
        airplaneModeViewModel.isAirplaneModeIconVisible

    override val isSignalSpacerVisible: Flow<Boolean> = shouldShowSignalSpacerProvider.get()

    companion object {
        @StringRes
        @VisibleForTesting
        internal val NO_INTERNET = R.string.data_connection_no_internet
    }
}
+1 −1
Original line number Diff line number Diff line
@@ -40,7 +40,7 @@ import com.android.systemui.statusbar.pipeline.wifi.domain.interactor.WifiIntera
import com.android.systemui.statusbar.pipeline.wifi.shared.WifiConstants
import com.android.systemui.statusbar.pipeline.wifi.shared.model.WifiNetworkModel
import com.android.systemui.statusbar.pipeline.wifi.ui.model.WifiIcon
import com.android.systemui.statusbar.pipeline.wifi.ui.viewmodel.WifiViewModel.Companion.NO_INTERNET
import com.android.systemui.statusbar.pipeline.wifi.ui.model.WifiIcon.Companion.NO_INTERNET
import com.google.common.truth.Truth.assertThat
import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.Dispatchers