diff options
3 files changed, 50 insertions, 45 deletions
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/pipeline/wifi/ui/model/WifiIcon.kt b/packages/SystemUI/src/com/android/systemui/statusbar/pipeline/wifi/ui/model/WifiIcon.kt index 094bcf96eef9..a650562770bf 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/pipeline/wifi/ui/model/WifiIcon.kt +++ b/packages/SystemUI/src/com/android/systemui/statusbar/pipeline/wifi/ui/model/WifiIcon.kt @@ -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" diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/pipeline/wifi/ui/viewmodel/WifiViewModel.kt b/packages/SystemUI/src/com/android/systemui/statusbar/pipeline/wifi/ui/viewmodel/WifiViewModel.kt index d9c214452ef1..27ac7b9be6e6 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/pipeline/wifi/ui/viewmodel/WifiViewModel.kt +++ b/packages/SystemUI/src/com/android/systemui/statusbar/pipeline/wifi/ui/viewmodel/WifiViewModel.kt @@ -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 - } } diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/pipeline/wifi/ui/viewmodel/WifiViewModelIconParameterizedTest.kt b/packages/SystemUI/tests/src/com/android/systemui/statusbar/pipeline/wifi/ui/viewmodel/WifiViewModelIconParameterizedTest.kt index e6724d86ec55..c8bb28325065 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/statusbar/pipeline/wifi/ui/viewmodel/WifiViewModelIconParameterizedTest.kt +++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/pipeline/wifi/ui/viewmodel/WifiViewModelIconParameterizedTest.kt @@ -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 |