Merge "[SB Refactor] Add table logging to the wifi view model." into tm-qpr-dev
This commit is contained in:
committed by
Android (Google) Code Review
commit
49480248da
@@ -24,6 +24,7 @@ import com.android.systemui.lifecycle.repeatWhenAttached
|
|||||||
import com.android.systemui.statusbar.phone.StatusBarIconController
|
import com.android.systemui.statusbar.phone.StatusBarIconController
|
||||||
import com.android.systemui.statusbar.phone.StatusBarLocation
|
import com.android.systemui.statusbar.phone.StatusBarLocation
|
||||||
import com.android.systemui.statusbar.pipeline.StatusBarPipelineFlags
|
import com.android.systemui.statusbar.pipeline.StatusBarPipelineFlags
|
||||||
|
import com.android.systemui.statusbar.pipeline.wifi.ui.model.WifiIcon
|
||||||
import com.android.systemui.statusbar.pipeline.wifi.ui.viewmodel.LocationBasedWifiViewModel
|
import com.android.systemui.statusbar.pipeline.wifi.ui.viewmodel.LocationBasedWifiViewModel
|
||||||
import com.android.systemui.statusbar.pipeline.wifi.ui.viewmodel.WifiViewModel
|
import com.android.systemui.statusbar.pipeline.wifi.ui.viewmodel.WifiViewModel
|
||||||
import javax.inject.Inject
|
import javax.inject.Inject
|
||||||
@@ -73,7 +74,9 @@ constructor(
|
|||||||
// Note that this flow may still run if
|
// Note that this flow may still run if
|
||||||
// [statusBarPipelineFlags.runNewWifiIconBackend] is true because we may
|
// [statusBarPipelineFlags.runNewWifiIconBackend] is true because we may
|
||||||
// want to get the logging data without rendering.
|
// want to get the logging data without rendering.
|
||||||
if (wifiIcon != null && statusBarPipelineFlags.useNewWifiIcon()) {
|
if (
|
||||||
|
wifiIcon is WifiIcon.Visible && statusBarPipelineFlags.useNewWifiIcon()
|
||||||
|
) {
|
||||||
iconController.setNewWifiIcon()
|
iconController.setNewWifiIcon()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -30,6 +30,7 @@ import com.android.systemui.statusbar.StatusBarIconView
|
|||||||
import com.android.systemui.statusbar.StatusBarIconView.STATE_DOT
|
import com.android.systemui.statusbar.StatusBarIconView.STATE_DOT
|
||||||
import com.android.systemui.statusbar.StatusBarIconView.STATE_HIDDEN
|
import com.android.systemui.statusbar.StatusBarIconView.STATE_HIDDEN
|
||||||
import com.android.systemui.statusbar.StatusBarIconView.STATE_ICON
|
import com.android.systemui.statusbar.StatusBarIconView.STATE_ICON
|
||||||
|
import com.android.systemui.statusbar.pipeline.wifi.ui.model.WifiIcon
|
||||||
import com.android.systemui.statusbar.pipeline.wifi.ui.viewmodel.LocationBasedWifiViewModel
|
import com.android.systemui.statusbar.pipeline.wifi.ui.viewmodel.LocationBasedWifiViewModel
|
||||||
import kotlinx.coroutines.InternalCoroutinesApi
|
import kotlinx.coroutines.InternalCoroutinesApi
|
||||||
import kotlinx.coroutines.flow.MutableStateFlow
|
import kotlinx.coroutines.flow.MutableStateFlow
|
||||||
@@ -92,8 +93,10 @@ object WifiViewBinder {
|
|||||||
|
|
||||||
launch {
|
launch {
|
||||||
viewModel.wifiIcon.collect { wifiIcon ->
|
viewModel.wifiIcon.collect { wifiIcon ->
|
||||||
view.isVisible = wifiIcon != null
|
view.isVisible = wifiIcon is WifiIcon.Visible
|
||||||
wifiIcon?.let { IconViewBinder.bind(wifiIcon, iconView) }
|
if (wifiIcon is WifiIcon.Visible) {
|
||||||
|
IconViewBinder.bind(wifiIcon.icon, iconView)
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -135,7 +138,7 @@ object WifiViewBinder {
|
|||||||
|
|
||||||
return object : Binding {
|
return object : Binding {
|
||||||
override fun getShouldIconBeVisible(): Boolean {
|
override fun getShouldIconBeVisible(): Boolean {
|
||||||
return viewModel.wifiIcon.value != null
|
return viewModel.wifiIcon.value is WifiIcon.Visible
|
||||||
}
|
}
|
||||||
|
|
||||||
override fun onVisibilityStateChanged(@StatusBarIconView.VisibleState state: Int) {
|
override fun onVisibilityStateChanged(@StatusBarIconView.VisibleState state: Int) {
|
||||||
|
|||||||
@@ -0,0 +1,56 @@
|
|||||||
|
/*
|
||||||
|
* Copyright (C) 2022 The Android Open Source Project
|
||||||
|
*
|
||||||
|
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
* you may not use this file except in compliance with the License.
|
||||||
|
* You may obtain a copy of the License at
|
||||||
|
*
|
||||||
|
* http://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
*
|
||||||
|
* Unless required by applicable law or agreed to in writing, software
|
||||||
|
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
* See the License for the specific language governing permissions and
|
||||||
|
* limitations under the License.
|
||||||
|
*/
|
||||||
|
|
||||||
|
package com.android.systemui.statusbar.pipeline.wifi.ui.model
|
||||||
|
|
||||||
|
import android.annotation.DrawableRes
|
||||||
|
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
|
||||||
|
|
||||||
|
/** Represents the various states of the wifi icon. */
|
||||||
|
sealed interface WifiIcon : Diffable<WifiIcon> {
|
||||||
|
/** Represents a wifi icon that should be hidden (not visible). */
|
||||||
|
object Hidden : WifiIcon {
|
||||||
|
override fun toString() = "hidden"
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Represents a visible wifi icon that uses [res] as its image and [contentDescription] as its
|
||||||
|
* description.
|
||||||
|
*/
|
||||||
|
class Visible(
|
||||||
|
@DrawableRes res: Int,
|
||||||
|
val contentDescription: ContentDescription.Loaded,
|
||||||
|
) : WifiIcon {
|
||||||
|
val icon = Icon.Resource(res, contentDescription)
|
||||||
|
|
||||||
|
override fun toString() = contentDescription.description.toString()
|
||||||
|
}
|
||||||
|
|
||||||
|
override fun logDiffs(prevVal: WifiIcon, row: TableRowLogger) {
|
||||||
|
if (prevVal.toString() != toString()) {
|
||||||
|
row.logChange(COL_ICON, toString())
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
override fun logFull(row: TableRowLogger) {
|
||||||
|
row.logChange(COL_ICON, toString())
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private const val COL_ICON = "wifiIcon"
|
||||||
@@ -17,8 +17,8 @@
|
|||||||
package com.android.systemui.statusbar.pipeline.wifi.ui.viewmodel
|
package com.android.systemui.statusbar.pipeline.wifi.ui.viewmodel
|
||||||
|
|
||||||
import android.graphics.Color
|
import android.graphics.Color
|
||||||
import com.android.systemui.common.shared.model.Icon
|
|
||||||
import com.android.systemui.statusbar.pipeline.StatusBarPipelineFlags
|
import com.android.systemui.statusbar.pipeline.StatusBarPipelineFlags
|
||||||
|
import com.android.systemui.statusbar.pipeline.wifi.ui.model.WifiIcon
|
||||||
import kotlinx.coroutines.flow.Flow
|
import kotlinx.coroutines.flow.Flow
|
||||||
import kotlinx.coroutines.flow.StateFlow
|
import kotlinx.coroutines.flow.StateFlow
|
||||||
|
|
||||||
@@ -28,7 +28,7 @@ import kotlinx.coroutines.flow.StateFlow
|
|||||||
*/
|
*/
|
||||||
class HomeWifiViewModel(
|
class HomeWifiViewModel(
|
||||||
statusBarPipelineFlags: StatusBarPipelineFlags,
|
statusBarPipelineFlags: StatusBarPipelineFlags,
|
||||||
wifiIcon: StateFlow<Icon.Resource?>,
|
wifiIcon: StateFlow<WifiIcon>,
|
||||||
isActivityInViewVisible: Flow<Boolean>,
|
isActivityInViewVisible: Flow<Boolean>,
|
||||||
isActivityOutViewVisible: Flow<Boolean>,
|
isActivityOutViewVisible: Flow<Boolean>,
|
||||||
isActivityContainerVisible: Flow<Boolean>,
|
isActivityContainerVisible: Flow<Boolean>,
|
||||||
|
|||||||
@@ -17,15 +17,15 @@
|
|||||||
package com.android.systemui.statusbar.pipeline.wifi.ui.viewmodel
|
package com.android.systemui.statusbar.pipeline.wifi.ui.viewmodel
|
||||||
|
|
||||||
import android.graphics.Color
|
import android.graphics.Color
|
||||||
import com.android.systemui.common.shared.model.Icon
|
|
||||||
import com.android.systemui.statusbar.pipeline.StatusBarPipelineFlags
|
import com.android.systemui.statusbar.pipeline.StatusBarPipelineFlags
|
||||||
|
import com.android.systemui.statusbar.pipeline.wifi.ui.model.WifiIcon
|
||||||
import kotlinx.coroutines.flow.Flow
|
import kotlinx.coroutines.flow.Flow
|
||||||
import kotlinx.coroutines.flow.StateFlow
|
import kotlinx.coroutines.flow.StateFlow
|
||||||
|
|
||||||
/** A view model for the wifi icon shown on keyguard (lockscreen). */
|
/** A view model for the wifi icon shown on keyguard (lockscreen). */
|
||||||
class KeyguardWifiViewModel(
|
class KeyguardWifiViewModel(
|
||||||
statusBarPipelineFlags: StatusBarPipelineFlags,
|
statusBarPipelineFlags: StatusBarPipelineFlags,
|
||||||
wifiIcon: StateFlow<Icon.Resource?>,
|
wifiIcon: StateFlow<WifiIcon>,
|
||||||
isActivityInViewVisible: Flow<Boolean>,
|
isActivityInViewVisible: Flow<Boolean>,
|
||||||
isActivityOutViewVisible: Flow<Boolean>,
|
isActivityOutViewVisible: Flow<Boolean>,
|
||||||
isActivityContainerVisible: Flow<Boolean>,
|
isActivityContainerVisible: Flow<Boolean>,
|
||||||
|
|||||||
@@ -17,8 +17,8 @@
|
|||||||
package com.android.systemui.statusbar.pipeline.wifi.ui.viewmodel
|
package com.android.systemui.statusbar.pipeline.wifi.ui.viewmodel
|
||||||
|
|
||||||
import android.graphics.Color
|
import android.graphics.Color
|
||||||
import com.android.systemui.common.shared.model.Icon
|
|
||||||
import com.android.systemui.statusbar.pipeline.StatusBarPipelineFlags
|
import com.android.systemui.statusbar.pipeline.StatusBarPipelineFlags
|
||||||
|
import com.android.systemui.statusbar.pipeline.wifi.ui.model.WifiIcon
|
||||||
import kotlinx.coroutines.flow.Flow
|
import kotlinx.coroutines.flow.Flow
|
||||||
import kotlinx.coroutines.flow.StateFlow
|
import kotlinx.coroutines.flow.StateFlow
|
||||||
import kotlinx.coroutines.flow.flowOf
|
import kotlinx.coroutines.flow.flowOf
|
||||||
@@ -33,8 +33,8 @@ abstract class LocationBasedWifiViewModel(
|
|||||||
statusBarPipelineFlags: StatusBarPipelineFlags,
|
statusBarPipelineFlags: StatusBarPipelineFlags,
|
||||||
debugTint: Int,
|
debugTint: Int,
|
||||||
|
|
||||||
/** The wifi icon that should be displayed. Null if we shouldn't display any icon. */
|
/** The wifi icon that should be displayed. */
|
||||||
val wifiIcon: StateFlow<Icon.Resource?>,
|
val wifiIcon: StateFlow<WifiIcon>,
|
||||||
|
|
||||||
/** True if the activity in view should be visible. */
|
/** True if the activity in view should be visible. */
|
||||||
val isActivityInViewVisible: Flow<Boolean>,
|
val isActivityInViewVisible: Flow<Boolean>,
|
||||||
|
|||||||
@@ -17,15 +17,15 @@
|
|||||||
package com.android.systemui.statusbar.pipeline.wifi.ui.viewmodel
|
package com.android.systemui.statusbar.pipeline.wifi.ui.viewmodel
|
||||||
|
|
||||||
import android.graphics.Color
|
import android.graphics.Color
|
||||||
import com.android.systemui.common.shared.model.Icon
|
|
||||||
import com.android.systemui.statusbar.pipeline.StatusBarPipelineFlags
|
import com.android.systemui.statusbar.pipeline.StatusBarPipelineFlags
|
||||||
|
import com.android.systemui.statusbar.pipeline.wifi.ui.model.WifiIcon
|
||||||
import kotlinx.coroutines.flow.Flow
|
import kotlinx.coroutines.flow.Flow
|
||||||
import kotlinx.coroutines.flow.StateFlow
|
import kotlinx.coroutines.flow.StateFlow
|
||||||
|
|
||||||
/** A view model for the wifi icon shown in quick settings (when the shade is pulled down). */
|
/** A view model for the wifi icon shown in quick settings (when the shade is pulled down). */
|
||||||
class QsWifiViewModel(
|
class QsWifiViewModel(
|
||||||
statusBarPipelineFlags: StatusBarPipelineFlags,
|
statusBarPipelineFlags: StatusBarPipelineFlags,
|
||||||
wifiIcon: StateFlow<Icon.Resource?>,
|
wifiIcon: StateFlow<WifiIcon>,
|
||||||
isActivityInViewVisible: Flow<Boolean>,
|
isActivityInViewVisible: Flow<Boolean>,
|
||||||
isActivityOutViewVisible: Flow<Boolean>,
|
isActivityOutViewVisible: Flow<Boolean>,
|
||||||
isActivityContainerVisible: Flow<Boolean>,
|
isActivityContainerVisible: Flow<Boolean>,
|
||||||
|
|||||||
@@ -17,16 +17,18 @@
|
|||||||
package com.android.systemui.statusbar.pipeline.wifi.ui.viewmodel
|
package com.android.systemui.statusbar.pipeline.wifi.ui.viewmodel
|
||||||
|
|
||||||
import android.content.Context
|
import android.content.Context
|
||||||
import androidx.annotation.DrawableRes
|
|
||||||
import androidx.annotation.StringRes
|
import androidx.annotation.StringRes
|
||||||
import androidx.annotation.VisibleForTesting
|
import androidx.annotation.VisibleForTesting
|
||||||
import com.android.settingslib.AccessibilityContentDescriptions.WIFI_CONNECTION_STRENGTH
|
import com.android.settingslib.AccessibilityContentDescriptions.WIFI_CONNECTION_STRENGTH
|
||||||
import com.android.settingslib.AccessibilityContentDescriptions.WIFI_NO_CONNECTION
|
import com.android.settingslib.AccessibilityContentDescriptions.WIFI_NO_CONNECTION
|
||||||
import com.android.systemui.R
|
import com.android.systemui.R
|
||||||
import com.android.systemui.common.shared.model.ContentDescription
|
import com.android.systemui.common.shared.model.ContentDescription
|
||||||
import com.android.systemui.common.shared.model.Icon
|
|
||||||
import com.android.systemui.dagger.SysUISingleton
|
import com.android.systemui.dagger.SysUISingleton
|
||||||
import com.android.systemui.dagger.qualifiers.Application
|
import com.android.systemui.dagger.qualifiers.Application
|
||||||
|
import com.android.systemui.statusbar.pipeline.dagger.WifiTableLog
|
||||||
|
import com.android.systemui.statusbar.pipeline.wifi.ui.model.WifiIcon
|
||||||
|
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_FULL_ICONS
|
||||||
import com.android.systemui.statusbar.connectivity.WifiIcons.WIFI_NO_INTERNET_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.connectivity.WifiIcons.WIFI_NO_NETWORK
|
||||||
@@ -71,50 +73,39 @@ constructor(
|
|||||||
connectivityConstants: ConnectivityConstants,
|
connectivityConstants: ConnectivityConstants,
|
||||||
private val context: Context,
|
private val context: Context,
|
||||||
logger: ConnectivityPipelineLogger,
|
logger: ConnectivityPipelineLogger,
|
||||||
|
@WifiTableLog wifiTableLogBuffer: TableLogBuffer,
|
||||||
interactor: WifiInteractor,
|
interactor: WifiInteractor,
|
||||||
@Application private val scope: CoroutineScope,
|
@Application private val scope: CoroutineScope,
|
||||||
statusBarPipelineFlags: StatusBarPipelineFlags,
|
statusBarPipelineFlags: StatusBarPipelineFlags,
|
||||||
wifiConstants: WifiConstants,
|
wifiConstants: WifiConstants,
|
||||||
) {
|
) {
|
||||||
/**
|
/** Returns the icon to use based on the given network. */
|
||||||
* Returns the drawable resource ID to use for the wifi icon based on the given network.
|
private fun WifiNetworkModel.icon(): WifiIcon {
|
||||||
* Null if we can't compute the icon.
|
|
||||||
*/
|
|
||||||
@DrawableRes
|
|
||||||
private fun WifiNetworkModel.iconResId(): Int? {
|
|
||||||
return when (this) {
|
return when (this) {
|
||||||
is WifiNetworkModel.CarrierMerged -> null
|
is WifiNetworkModel.CarrierMerged -> WifiIcon.Hidden
|
||||||
is WifiNetworkModel.Inactive -> WIFI_NO_NETWORK
|
is WifiNetworkModel.Inactive -> WifiIcon.Visible(
|
||||||
is WifiNetworkModel.Active ->
|
res = WIFI_NO_NETWORK,
|
||||||
when {
|
|
||||||
this.level == null -> null
|
|
||||||
this.isValidated -> WIFI_FULL_ICONS[this.level]
|
|
||||||
else -> WIFI_NO_INTERNET_ICONS[this.level]
|
|
||||||
}
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
/**
|
|
||||||
* Returns the content description for the wifi icon based on the given network.
|
|
||||||
* Null if we can't compute the content description.
|
|
||||||
*/
|
|
||||||
private fun WifiNetworkModel.contentDescription(): ContentDescription? {
|
|
||||||
return when (this) {
|
|
||||||
is WifiNetworkModel.CarrierMerged -> null
|
|
||||||
is WifiNetworkModel.Inactive ->
|
|
||||||
ContentDescription.Loaded(
|
ContentDescription.Loaded(
|
||||||
"${context.getString(WIFI_NO_CONNECTION)},${context.getString(NO_INTERNET)}"
|
"${context.getString(WIFI_NO_CONNECTION)},${context.getString(NO_INTERNET)}"
|
||||||
)
|
)
|
||||||
|
)
|
||||||
is WifiNetworkModel.Active ->
|
is WifiNetworkModel.Active ->
|
||||||
when (this.level) {
|
when (this.level) {
|
||||||
null -> null
|
null -> WifiIcon.Hidden
|
||||||
else -> {
|
else -> {
|
||||||
val levelDesc = context.getString(WIFI_CONNECTION_STRENGTH[this.level])
|
val levelDesc = context.getString(WIFI_CONNECTION_STRENGTH[this.level])
|
||||||
when {
|
when {
|
||||||
this.isValidated -> ContentDescription.Loaded(levelDesc)
|
this.isValidated ->
|
||||||
|
WifiIcon.Visible(
|
||||||
|
WIFI_FULL_ICONS[this.level],
|
||||||
|
ContentDescription.Loaded(levelDesc)
|
||||||
|
)
|
||||||
else ->
|
else ->
|
||||||
ContentDescription.Loaded(
|
WifiIcon.Visible(
|
||||||
"$levelDesc,${context.getString(NO_INTERNET)}"
|
WIFI_NO_INTERNET_ICONS[this.level],
|
||||||
|
ContentDescription.Loaded(
|
||||||
|
"$levelDesc,${context.getString(NO_INTERNET)}"
|
||||||
|
)
|
||||||
)
|
)
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -122,8 +113,8 @@ constructor(
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
/** The wifi icon that should be displayed. Null if we shouldn't display any icon. */
|
/** The wifi icon that should be displayed. */
|
||||||
private val wifiIcon: StateFlow<Icon.Resource?> =
|
private val wifiIcon: StateFlow<WifiIcon> =
|
||||||
combine(
|
combine(
|
||||||
interactor.isEnabled,
|
interactor.isEnabled,
|
||||||
interactor.isDefault,
|
interactor.isDefault,
|
||||||
@@ -131,22 +122,29 @@ constructor(
|
|||||||
interactor.wifiNetwork,
|
interactor.wifiNetwork,
|
||||||
) { isEnabled, isDefault, isForceHidden, wifiNetwork ->
|
) { isEnabled, isDefault, isForceHidden, wifiNetwork ->
|
||||||
if (!isEnabled || isForceHidden || wifiNetwork is WifiNetworkModel.CarrierMerged) {
|
if (!isEnabled || isForceHidden || wifiNetwork is WifiNetworkModel.CarrierMerged) {
|
||||||
return@combine null
|
return@combine WifiIcon.Hidden
|
||||||
}
|
}
|
||||||
|
|
||||||
val iconResId = wifiNetwork.iconResId() ?: return@combine null
|
val icon = wifiNetwork.icon()
|
||||||
val icon = Icon.Resource(iconResId, wifiNetwork.contentDescription())
|
|
||||||
|
|
||||||
return@combine when {
|
return@combine when {
|
||||||
isDefault -> icon
|
isDefault -> icon
|
||||||
wifiConstants.alwaysShowIconIfEnabled -> icon
|
wifiConstants.alwaysShowIconIfEnabled -> icon
|
||||||
!connectivityConstants.hasDataCapabilities -> icon
|
!connectivityConstants.hasDataCapabilities -> icon
|
||||||
wifiNetwork is WifiNetworkModel.Active && wifiNetwork.isValidated -> icon
|
wifiNetwork is WifiNetworkModel.Active && wifiNetwork.isValidated -> icon
|
||||||
else -> null
|
else -> WifiIcon.Hidden
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
.logOutputChange(logger, "icon") { icon -> icon?.contentDescription.toString() }
|
.logDiffsForTable(
|
||||||
.stateIn(scope, started = SharingStarted.WhileSubscribed(), initialValue = null)
|
wifiTableLogBuffer,
|
||||||
|
columnPrefix = "",
|
||||||
|
initialValue = WifiIcon.Hidden,
|
||||||
|
)
|
||||||
|
.stateIn(
|
||||||
|
scope,
|
||||||
|
started = SharingStarted.WhileSubscribed(),
|
||||||
|
initialValue = WifiIcon.Hidden
|
||||||
|
)
|
||||||
|
|
||||||
/** The wifi activity status. Null if we shouldn't display the activity status. */
|
/** The wifi activity status. Null if we shouldn't display the activity status. */
|
||||||
private val activity: Flow<WifiActivityModel?> =
|
private val activity: Flow<WifiActivityModel?> =
|
||||||
|
|||||||
@@ -25,6 +25,7 @@ import androidx.test.filters.SmallTest
|
|||||||
import com.android.systemui.R
|
import com.android.systemui.R
|
||||||
import com.android.systemui.SysuiTestCase
|
import com.android.systemui.SysuiTestCase
|
||||||
import com.android.systemui.lifecycle.InstantTaskExecutorRule
|
import com.android.systemui.lifecycle.InstantTaskExecutorRule
|
||||||
|
import com.android.systemui.log.table.TableLogBuffer
|
||||||
import com.android.systemui.statusbar.StatusBarIconView.STATE_DOT
|
import com.android.systemui.statusbar.StatusBarIconView.STATE_DOT
|
||||||
import com.android.systemui.statusbar.StatusBarIconView.STATE_HIDDEN
|
import com.android.systemui.statusbar.StatusBarIconView.STATE_HIDDEN
|
||||||
import com.android.systemui.statusbar.StatusBarIconView.STATE_ICON
|
import com.android.systemui.statusbar.StatusBarIconView.STATE_ICON
|
||||||
@@ -64,6 +65,7 @@ class ModernStatusBarWifiViewTest : SysuiTestCase() {
|
|||||||
private lateinit var statusBarPipelineFlags: StatusBarPipelineFlags
|
private lateinit var statusBarPipelineFlags: StatusBarPipelineFlags
|
||||||
@Mock
|
@Mock
|
||||||
private lateinit var logger: ConnectivityPipelineLogger
|
private lateinit var logger: ConnectivityPipelineLogger
|
||||||
|
@Mock private lateinit var tableLogBuffer: TableLogBuffer
|
||||||
@Mock
|
@Mock
|
||||||
private lateinit var connectivityConstants: ConnectivityConstants
|
private lateinit var connectivityConstants: ConnectivityConstants
|
||||||
@Mock
|
@Mock
|
||||||
@@ -103,6 +105,7 @@ class ModernStatusBarWifiViewTest : SysuiTestCase() {
|
|||||||
connectivityConstants,
|
connectivityConstants,
|
||||||
context,
|
context,
|
||||||
logger,
|
logger,
|
||||||
|
tableLogBuffer,
|
||||||
interactor,
|
interactor,
|
||||||
scope,
|
scope,
|
||||||
statusBarPipelineFlags,
|
statusBarPipelineFlags,
|
||||||
|
|||||||
@@ -23,6 +23,7 @@ import com.android.settingslib.AccessibilityContentDescriptions.WIFI_CONNECTION_
|
|||||||
import com.android.settingslib.AccessibilityContentDescriptions.WIFI_NO_CONNECTION
|
import com.android.settingslib.AccessibilityContentDescriptions.WIFI_NO_CONNECTION
|
||||||
import com.android.systemui.SysuiTestCase
|
import com.android.systemui.SysuiTestCase
|
||||||
import com.android.systemui.common.shared.model.ContentDescription.Companion.loadContentDescription
|
import com.android.systemui.common.shared.model.ContentDescription.Companion.loadContentDescription
|
||||||
|
import com.android.systemui.log.table.TableLogBuffer
|
||||||
import com.android.systemui.statusbar.connectivity.WifiIcons.WIFI_FULL_ICONS
|
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_INTERNET_ICONS
|
||||||
import com.android.systemui.statusbar.connectivity.WifiIcons.WIFI_NO_NETWORK
|
import com.android.systemui.statusbar.connectivity.WifiIcons.WIFI_NO_NETWORK
|
||||||
@@ -40,6 +41,7 @@ import com.android.systemui.statusbar.pipeline.wifi.data.repository.FakeWifiRepo
|
|||||||
import com.android.systemui.statusbar.pipeline.wifi.domain.interactor.WifiInteractor
|
import com.android.systemui.statusbar.pipeline.wifi.domain.interactor.WifiInteractor
|
||||||
import com.android.systemui.statusbar.pipeline.wifi.domain.interactor.WifiInteractorImpl
|
import com.android.systemui.statusbar.pipeline.wifi.domain.interactor.WifiInteractorImpl
|
||||||
import com.android.systemui.statusbar.pipeline.wifi.shared.WifiConstants
|
import com.android.systemui.statusbar.pipeline.wifi.shared.WifiConstants
|
||||||
|
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.viewmodel.WifiViewModel.Companion.NO_INTERNET
|
||||||
import com.google.common.truth.Truth.assertThat
|
import com.google.common.truth.Truth.assertThat
|
||||||
import kotlinx.coroutines.CoroutineScope
|
import kotlinx.coroutines.CoroutineScope
|
||||||
@@ -67,6 +69,7 @@ internal class WifiViewModelIconParameterizedTest(private val testCase: TestCase
|
|||||||
|
|
||||||
@Mock private lateinit var statusBarPipelineFlags: StatusBarPipelineFlags
|
@Mock private lateinit var statusBarPipelineFlags: StatusBarPipelineFlags
|
||||||
@Mock private lateinit var logger: ConnectivityPipelineLogger
|
@Mock private lateinit var logger: ConnectivityPipelineLogger
|
||||||
|
@Mock private lateinit var tableLogBuffer: TableLogBuffer
|
||||||
@Mock private lateinit var connectivityConstants: ConnectivityConstants
|
@Mock private lateinit var connectivityConstants: ConnectivityConstants
|
||||||
@Mock private lateinit var wifiConstants: WifiConstants
|
@Mock private lateinit var wifiConstants: WifiConstants
|
||||||
private lateinit var airplaneModeRepository: FakeAirplaneModeRepository
|
private lateinit var airplaneModeRepository: FakeAirplaneModeRepository
|
||||||
@@ -123,6 +126,7 @@ internal class WifiViewModelIconParameterizedTest(private val testCase: TestCase
|
|||||||
connectivityConstants,
|
connectivityConstants,
|
||||||
context,
|
context,
|
||||||
logger,
|
logger,
|
||||||
|
tableLogBuffer,
|
||||||
interactor,
|
interactor,
|
||||||
scope,
|
scope,
|
||||||
statusBarPipelineFlags,
|
statusBarPipelineFlags,
|
||||||
@@ -137,15 +141,21 @@ internal class WifiViewModelIconParameterizedTest(private val testCase: TestCase
|
|||||||
yield()
|
yield()
|
||||||
|
|
||||||
// THEN we get the expected icon
|
// THEN we get the expected icon
|
||||||
assertThat(iconFlow.value?.res).isEqualTo(testCase.expected?.iconResource)
|
val actualIcon = iconFlow.value
|
||||||
val expectedContentDescription =
|
when (testCase.expected) {
|
||||||
if (testCase.expected == null) {
|
null -> {
|
||||||
null
|
assertThat(actualIcon).isInstanceOf(WifiIcon.Hidden::class.java)
|
||||||
} else {
|
|
||||||
testCase.expected.contentDescription.invoke(context)
|
|
||||||
}
|
}
|
||||||
assertThat(iconFlow.value?.contentDescription?.loadContentDescription(context))
|
else -> {
|
||||||
.isEqualTo(expectedContentDescription)
|
assertThat(actualIcon).isInstanceOf(WifiIcon.Visible::class.java)
|
||||||
|
val actualIconVisible = actualIcon as WifiIcon.Visible
|
||||||
|
assertThat(actualIconVisible.icon.res).isEqualTo(testCase.expected.iconResource)
|
||||||
|
val expectedContentDescription =
|
||||||
|
testCase.expected.contentDescription.invoke(context)
|
||||||
|
assertThat(actualIconVisible.contentDescription.loadContentDescription(context))
|
||||||
|
.isEqualTo(expectedContentDescription)
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
job.cancel()
|
job.cancel()
|
||||||
}
|
}
|
||||||
@@ -174,7 +184,7 @@ internal class WifiViewModelIconParameterizedTest(private val testCase: TestCase
|
|||||||
val isDefault: Boolean = false,
|
val isDefault: Boolean = false,
|
||||||
val network: WifiNetworkModel,
|
val network: WifiNetworkModel,
|
||||||
|
|
||||||
/** The expected output. Null if we expect the output to be null. */
|
/** The expected output. Null if we expect the output to be hidden. */
|
||||||
val expected: Expected?
|
val expected: Expected?
|
||||||
) {
|
) {
|
||||||
override fun toString(): String {
|
override fun toString(): String {
|
||||||
|
|||||||
@@ -18,7 +18,7 @@ package com.android.systemui.statusbar.pipeline.wifi.ui.viewmodel
|
|||||||
|
|
||||||
import androidx.test.filters.SmallTest
|
import androidx.test.filters.SmallTest
|
||||||
import com.android.systemui.SysuiTestCase
|
import com.android.systemui.SysuiTestCase
|
||||||
import com.android.systemui.common.shared.model.Icon
|
import com.android.systemui.log.table.TableLogBuffer
|
||||||
import com.android.systemui.statusbar.pipeline.StatusBarPipelineFlags
|
import com.android.systemui.statusbar.pipeline.StatusBarPipelineFlags
|
||||||
import com.android.systemui.statusbar.pipeline.airplane.data.repository.FakeAirplaneModeRepository
|
import com.android.systemui.statusbar.pipeline.airplane.data.repository.FakeAirplaneModeRepository
|
||||||
import com.android.systemui.statusbar.pipeline.airplane.domain.interactor.AirplaneModeInteractor
|
import com.android.systemui.statusbar.pipeline.airplane.domain.interactor.AirplaneModeInteractor
|
||||||
@@ -34,6 +34,7 @@ import com.android.systemui.statusbar.pipeline.wifi.domain.interactor.WifiIntera
|
|||||||
import com.android.systemui.statusbar.pipeline.wifi.domain.interactor.WifiInteractorImpl
|
import com.android.systemui.statusbar.pipeline.wifi.domain.interactor.WifiInteractorImpl
|
||||||
import com.android.systemui.statusbar.pipeline.wifi.shared.WifiConstants
|
import com.android.systemui.statusbar.pipeline.wifi.shared.WifiConstants
|
||||||
import com.android.systemui.statusbar.pipeline.wifi.shared.model.WifiActivityModel
|
import com.android.systemui.statusbar.pipeline.wifi.shared.model.WifiActivityModel
|
||||||
|
import com.android.systemui.statusbar.pipeline.wifi.ui.model.WifiIcon
|
||||||
import com.google.common.truth.Truth.assertThat
|
import com.google.common.truth.Truth.assertThat
|
||||||
import kotlinx.coroutines.CoroutineScope
|
import kotlinx.coroutines.CoroutineScope
|
||||||
import kotlinx.coroutines.Dispatchers
|
import kotlinx.coroutines.Dispatchers
|
||||||
@@ -59,6 +60,7 @@ class WifiViewModelTest : SysuiTestCase() {
|
|||||||
|
|
||||||
@Mock private lateinit var statusBarPipelineFlags: StatusBarPipelineFlags
|
@Mock private lateinit var statusBarPipelineFlags: StatusBarPipelineFlags
|
||||||
@Mock private lateinit var logger: ConnectivityPipelineLogger
|
@Mock private lateinit var logger: ConnectivityPipelineLogger
|
||||||
|
@Mock private lateinit var tableLogBuffer: TableLogBuffer
|
||||||
@Mock private lateinit var connectivityConstants: ConnectivityConstants
|
@Mock private lateinit var connectivityConstants: ConnectivityConstants
|
||||||
@Mock private lateinit var wifiConstants: WifiConstants
|
@Mock private lateinit var wifiConstants: WifiConstants
|
||||||
private lateinit var airplaneModeRepository: FakeAirplaneModeRepository
|
private lateinit var airplaneModeRepository: FakeAirplaneModeRepository
|
||||||
@@ -103,21 +105,21 @@ class WifiViewModelTest : SysuiTestCase() {
|
|||||||
|
|
||||||
@Test
|
@Test
|
||||||
fun wifiIcon_allLocationViewModelsReceiveSameData() = runBlocking(IMMEDIATE) {
|
fun wifiIcon_allLocationViewModelsReceiveSameData() = runBlocking(IMMEDIATE) {
|
||||||
var latestHome: Icon? = null
|
var latestHome: WifiIcon? = null
|
||||||
val jobHome = underTest
|
val jobHome = underTest
|
||||||
.home
|
.home
|
||||||
.wifiIcon
|
.wifiIcon
|
||||||
.onEach { latestHome = it }
|
.onEach { latestHome = it }
|
||||||
.launchIn(this)
|
.launchIn(this)
|
||||||
|
|
||||||
var latestKeyguard: Icon? = null
|
var latestKeyguard: WifiIcon? = null
|
||||||
val jobKeyguard = underTest
|
val jobKeyguard = underTest
|
||||||
.keyguard
|
.keyguard
|
||||||
.wifiIcon
|
.wifiIcon
|
||||||
.onEach { latestKeyguard = it }
|
.onEach { latestKeyguard = it }
|
||||||
.launchIn(this)
|
.launchIn(this)
|
||||||
|
|
||||||
var latestQs: Icon? = null
|
var latestQs: WifiIcon? = null
|
||||||
val jobQs = underTest
|
val jobQs = underTest
|
||||||
.qs
|
.qs
|
||||||
.wifiIcon
|
.wifiIcon
|
||||||
@@ -133,7 +135,7 @@ class WifiViewModelTest : SysuiTestCase() {
|
|||||||
)
|
)
|
||||||
yield()
|
yield()
|
||||||
|
|
||||||
assertThat(latestHome).isInstanceOf(Icon.Resource::class.java)
|
assertThat(latestHome).isInstanceOf(WifiIcon.Visible::class.java)
|
||||||
assertThat(latestHome).isEqualTo(latestKeyguard)
|
assertThat(latestHome).isEqualTo(latestKeyguard)
|
||||||
assertThat(latestKeyguard).isEqualTo(latestQs)
|
assertThat(latestKeyguard).isEqualTo(latestQs)
|
||||||
|
|
||||||
@@ -541,6 +543,7 @@ class WifiViewModelTest : SysuiTestCase() {
|
|||||||
connectivityConstants,
|
connectivityConstants,
|
||||||
context,
|
context,
|
||||||
logger,
|
logger,
|
||||||
|
tableLogBuffer,
|
||||||
interactor,
|
interactor,
|
||||||
scope,
|
scope,
|
||||||
statusBarPipelineFlags,
|
statusBarPipelineFlags,
|
||||||
|
|||||||
Reference in New Issue
Block a user