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

Commit 4513768e authored by Caitlin Shkuratov's avatar Caitlin Shkuratov
Browse files

[SB Refactor] Display the activity in and out icons using the new pipeline.

Bug: 238425913
Test: manual: Verified activity icons show and hide as the actual
activity changes (see video in b/238425913#comment28)
Test: statusbar.pipeline tests

Change-Id: I454555db129fce0e7e168d55148c304ba43122c0
parent 8cfb8af9
Loading
Loading
Loading
Loading
+1 −1
Original line number Diff line number Diff line
@@ -133,7 +133,7 @@ class ConnectivityPipelineLogger @Inject constructor(
         * @param prettyPrint an optional function to transform the value into a readable string.
         *   [toString] is used if no custom function is provided.
         */
        fun <T : Any> Flow<T>.logOutputChange(
        fun <T> Flow<T>.logOutputChange(
                logger: ConnectivityPipelineLogger,
                outputParamName: String,
                prettyPrint: (T) -> String = { it.toString() }
+1 −1
Original line number Diff line number Diff line
@@ -36,8 +36,8 @@ import com.android.systemui.dagger.qualifiers.Application
import com.android.systemui.dagger.qualifiers.Main
import com.android.systemui.statusbar.pipeline.shared.ConnectivityPipelineLogger
import com.android.systemui.statusbar.pipeline.shared.ConnectivityPipelineLogger.Companion.SB_LOGGING_TAG
import com.android.systemui.statusbar.pipeline.wifi.data.model.WifiActivityModel
import com.android.systemui.statusbar.pipeline.wifi.data.model.WifiNetworkModel
import com.android.systemui.statusbar.pipeline.wifi.shared.model.WifiActivityModel
import java.util.concurrent.Executor
import javax.inject.Inject
import kotlinx.coroutines.CoroutineScope
+10 −8
Original line number Diff line number Diff line
@@ -22,9 +22,10 @@ import com.android.systemui.statusbar.pipeline.shared.data.model.ConnectivitySlo
import com.android.systemui.statusbar.pipeline.shared.data.repository.ConnectivityRepository
import com.android.systemui.statusbar.pipeline.wifi.data.model.WifiNetworkModel
import com.android.systemui.statusbar.pipeline.wifi.data.repository.WifiRepository
import com.android.systemui.statusbar.pipeline.wifi.shared.model.WifiActivityModel
import javax.inject.Inject
import kotlinx.coroutines.flow.Flow
import kotlinx.coroutines.flow.combine
import kotlinx.coroutines.flow.StateFlow
import kotlinx.coroutines.flow.map

/**
@@ -38,7 +39,11 @@ class WifiInteractor @Inject constructor(
    connectivityRepository: ConnectivityRepository,
    wifiRepository: WifiRepository,
) {
    private val ssid: Flow<String?> = wifiRepository.wifiNetwork.map { info ->
    /**
     * The SSID (service set identifier) of the wifi network. Null if we don't have a network, or
     * have a network but no valid SSID.
     */
    val ssid: Flow<String?> = wifiRepository.wifiNetwork.map { info ->
        when (info) {
            is WifiNetworkModel.Inactive -> null
            is WifiNetworkModel.CarrierMerged -> null
@@ -54,14 +59,11 @@ class WifiInteractor @Inject constructor(
    /** Our current wifi network. See [WifiNetworkModel]. */
    val wifiNetwork: Flow<WifiNetworkModel> = wifiRepository.wifiNetwork

    /** Our current wifi activity. See [WifiActivityModel]. */
    val activity: StateFlow<WifiActivityModel> = wifiRepository.wifiActivity

    /** True if we're configured to force-hide the wifi icon and false otherwise. */
    val isForceHidden: Flow<Boolean> = connectivityRepository.forceHiddenSlots.map {
        it.contains(ConnectivitySlot.WIFI)
    }

    /** True if our wifi network has activity in (download), and false otherwise. */
    val hasActivityIn: Flow<Boolean> =
        combine(wifiRepository.wifiActivity, ssid) { activity, ssid ->
            activity.hasActivityIn && ssid != null
        }
}
+2 −4
Original line number Diff line number Diff line
@@ -14,11 +14,9 @@
 * limitations under the License.
 */

package com.android.systemui.statusbar.pipeline.wifi.data.model
package com.android.systemui.statusbar.pipeline.wifi.shared.model

/**
 * Provides information on the current wifi activity.
 */
/** Provides information on the current wifi activity. */
data class WifiActivityModel(
    /** True if the wifi has activity in (download). */
    val hasActivityIn: Boolean,
+26 −6
Original line number Diff line number Diff line
@@ -48,6 +48,9 @@ object WifiViewBinder {
        viewModel: WifiViewModel,
    ) {
        val iconView = view.requireViewById<ImageView>(R.id.wifi_signal)
        val activityInView = view.requireViewById<ImageView>(R.id.wifi_in)
        val activityOutView = view.requireViewById<ImageView>(R.id.wifi_out)
        val activityContainerView = view.requireViewById<View>(R.id.inout_container)

        view.isVisible = true
        iconView.isVisible = true
@@ -61,20 +64,37 @@ object WifiViewBinder {
                        //   [ModernStatusBarWifiView.isIconVisible], which is what actually makes
                        //   the view GONE.
                        view.isVisible = wifiIcon != null
                        wifiIcon?.let {
                            IconViewBinder.bind(wifiIcon, iconView)
                        }
                        wifiIcon?.let { IconViewBinder.bind(wifiIcon, iconView) }
                    }
                }

                launch {
                    viewModel.tint.collect { tint ->
                        iconView.imageTintList = ColorStateList.valueOf(tint)
                        val tintList = ColorStateList.valueOf(tint)
                        iconView.imageTintList = tintList
                        activityInView.imageTintList = tintList
                        activityOutView.imageTintList = tintList
                    }
                }

                launch {
                    viewModel.isActivityInViewVisible.distinctUntilChanged().collect { visible ->
                        activityInView.isVisible = visible
                    }
                }

                launch {
                    viewModel.isActivityOutViewVisible.distinctUntilChanged().collect { visible ->
                        activityOutView.isVisible = visible
                    }
                }

        // TODO(b/238425913): Hook up to [viewModel] to render actual changes to the wifi icon.
                launch {
                    viewModel.isActivityContainerVisible.distinctUntilChanged().collect { visible ->
                        activityContainerView.isVisible = visible
                    }
                }
            }
        }
    }
}
Loading