Loading packages/SystemUI/aconfig/systemui.aconfig +9 −0 Original line number Diff line number Diff line Loading @@ -239,3 +239,12 @@ flag { description: "Enable special visual and haptic effects for quick settings tiles with long-press actions" bug: "229856884" } flag { name: "status_bar_static_inout_indicators" namespace: "systemui" description: "(Upstream request) Always show the network activity inout indicators and " "prefer using alpha to distinguish network activity." bug: "310715220" } packages/SystemUI/multivalentTests/src/com/android/systemui/statusbar/pipeline/wifi/ui/viewmodel/WifiViewModelTest.kt +61 −2 Original line number Diff line number Diff line Loading @@ -16,9 +16,11 @@ package com.android.systemui.statusbar.pipeline.wifi.ui.viewmodel import android.platform.test.flag.junit.SetFlagsRule import androidx.test.ext.junit.runners.AndroidJUnit4 import androidx.test.filters.SmallTest import com.android.settingslib.AccessibilityContentDescriptions.WIFI_OTHER_DEVICE_CONNECTION import com.android.systemui.Flags.FLAG_STATUS_BAR_STATIC_INOUT_INDICATORS import com.android.systemui.SysuiTestCase import com.android.systemui.common.shared.model.ContentDescription.Companion.loadContentDescription import com.android.systemui.coroutines.collectLastValue Loading Loading @@ -58,6 +60,8 @@ class WifiViewModelTest : SysuiTestCase() { private lateinit var underTest: WifiViewModel private val setFlagsRule = SetFlagsRule() @Mock private lateinit var tableLogBuffer: TableLogBuffer @Mock private lateinit var connectivityConstants: ConnectivityConstants @Mock private lateinit var wifiConstants: WifiConstants Loading Loading @@ -183,8 +187,11 @@ class WifiViewModelTest : SysuiTestCase() { } @Test fun activity_nullSsid_outputsFalse() = fun activity_nullSsid_outputsFalse_staticFlagOff() = testScope.runTest { // GIVEN flag is disabled setFlagsRule.disableFlags(FLAG_STATUS_BAR_STATIC_INOUT_INDICATORS) whenever(connectivityConstants.shouldShowActivityConfig).thenReturn(true) createAndSetViewModel() Loading @@ -206,6 +213,35 @@ class WifiViewModelTest : SysuiTestCase() { assertThat(activityContainer).isFalse() } @Test fun activity_nullSsid_outputsFalse_staticFlagOn() = testScope.runTest { // GIVEN flag is enabled setFlagsRule.enableFlags(FLAG_STATUS_BAR_STATIC_INOUT_INDICATORS) whenever(connectivityConstants.shouldShowActivityConfig).thenReturn(true) createAndSetViewModel() wifiRepository.setWifiNetwork( WifiNetworkModel.Active(NETWORK_ID, ssid = null, level = 1) ) val activityIn by collectLastValue(underTest.isActivityInViewVisible) val activityOut by collectLastValue(underTest.isActivityOutViewVisible) val activityContainer by collectLastValue(underTest.isActivityContainerVisible) // WHEN we update the repo to have activity val activity = DataActivityModel(hasActivityIn = true, hasActivityOut = true) wifiRepository.setWifiActivity(activity) // THEN we still output false because our network's SSID is null assertThat(activityIn).isFalse() assertThat(activityOut).isFalse() // THEN the inout indicators are sill showing due to the config being true assertThat(activityContainer).isTrue() } @Test fun activity_allLocationViewModelsReceiveSameData() = testScope.runTest { Loading Loading @@ -335,8 +371,11 @@ class WifiViewModelTest : SysuiTestCase() { } @Test fun activityContainer_inAndOutFalse_outputsFalse() = fun activityContainer_inAndOutFalse_outputsTrue_staticFlagOff() = testScope.runTest { // GIVEN the flag is off setFlagsRule.disableFlags(FLAG_STATUS_BAR_STATIC_INOUT_INDICATORS) whenever(connectivityConstants.shouldShowActivityConfig).thenReturn(true) createAndSetViewModel() wifiRepository.setWifiNetwork(ACTIVE_VALID_WIFI_NETWORK) Loading @@ -349,6 +388,26 @@ class WifiViewModelTest : SysuiTestCase() { assertThat(latest).isFalse() } @Test fun activityContainer_inAndOutFalse_outputsTrue_staticFlagOn() = testScope.runTest { // GIVEN the flag is on setFlagsRule.enableFlags(FLAG_STATUS_BAR_STATIC_INOUT_INDICATORS) whenever(connectivityConstants.shouldShowActivityConfig).thenReturn(true) createAndSetViewModel() wifiRepository.setWifiNetwork(ACTIVE_VALID_WIFI_NETWORK) val latest by collectLastValue(underTest.isActivityContainerVisible) val activity = DataActivityModel(hasActivityIn = false, hasActivityOut = false) wifiRepository.setWifiActivity(activity) // The activity container should always be visible, since activity is // shown in UI by changing opacity of the indicators. assertThat(latest).isTrue() } @Test fun airplaneSpacer_notAirplaneMode_outputsFalse() = testScope.runTest { Loading packages/SystemUI/res-keyguard/layout/status_bar_mobile_signal_group_inner.xml +0 −2 Original line number Diff line number Diff line Loading @@ -39,7 +39,6 @@ android:adjustViewBounds="true" android:layout_width="wrap_content" android:src="@drawable/ic_activity_down" android:visibility="gone" android:paddingEnd="2dp" /> <ImageView Loading @@ -49,7 +48,6 @@ android:layout_width="wrap_content" android:src="@drawable/ic_activity_up" android:paddingEnd="2dp" android:visibility="gone" /> </FrameLayout> <FrameLayout Loading packages/SystemUI/res/layout/status_bar_wifi_group_inner.xml +0 −2 Original line number Diff line number Diff line Loading @@ -37,7 +37,6 @@ android:adjustViewBounds="true" android:layout_width="wrap_content" android:src="@drawable/ic_activity_down" android:visibility="gone" android:paddingEnd="2dp" /> <ImageView Loading @@ -47,7 +46,6 @@ android:layout_width="wrap_content" android:src="@drawable/ic_activity_up" android:paddingEnd="2dp" android:visibility="gone" /> </FrameLayout> <FrameLayout Loading packages/SystemUI/src/com/android/systemui/statusbar/pipeline/mobile/ui/binder/MobileIconBinder.kt +25 −3 Original line number Diff line number Diff line Loading @@ -30,6 +30,7 @@ import androidx.lifecycle.Lifecycle import androidx.lifecycle.lifecycleScope import androidx.lifecycle.repeatOnLifecycle import com.android.settingslib.graph.SignalDrawable import com.android.systemui.Flags.statusBarStaticInoutIndicators import com.android.systemui.common.ui.binder.ContentDescriptionViewBinder import com.android.systemui.common.ui.binder.IconViewBinder import com.android.systemui.lifecycle.repeatWhenAttached Loading @@ -41,6 +42,8 @@ import com.android.systemui.statusbar.pipeline.mobile.ui.MobileViewLogger import com.android.systemui.statusbar.pipeline.mobile.ui.viewmodel.LocationBasedMobileViewModel import com.android.systemui.statusbar.pipeline.shared.ui.binder.ModernStatusBarViewBinding import com.android.systemui.statusbar.pipeline.shared.ui.binder.ModernStatusBarViewVisibilityHelper import com.android.systemui.statusbar.pipeline.shared.ui.binder.StatusBarViewBinderConstants.ALPHA_ACTIVE import com.android.systemui.statusbar.pipeline.shared.ui.binder.StatusBarViewBinderConstants.ALPHA_INACTIVE import kotlinx.coroutines.awaitCancellation import kotlinx.coroutines.flow.MutableStateFlow import kotlinx.coroutines.flow.distinctUntilChanged Loading Loading @@ -190,10 +193,29 @@ object MobileIconBinder { } } if (statusBarStaticInoutIndicators()) { // Set the opacity of the activity indicators launch { viewModel.activityInVisible.collect { visible -> activityIn.imageAlpha = (if (visible) ALPHA_ACTIVE else ALPHA_INACTIVE) } } launch { viewModel.activityOutVisible.collect { visible -> activityOut.imageAlpha = (if (visible) ALPHA_ACTIVE else ALPHA_INACTIVE) } } } else { // Set the activity indicators launch { viewModel.activityInVisible.collect { activityIn.isVisible = it } } launch { viewModel.activityOutVisible.collect { activityOut.isVisible = it } } launch { viewModel.activityOutVisible.collect { activityOut.isVisible = it } } } launch { viewModel.activityContainerVisible.collect { Loading Loading
packages/SystemUI/aconfig/systemui.aconfig +9 −0 Original line number Diff line number Diff line Loading @@ -239,3 +239,12 @@ flag { description: "Enable special visual and haptic effects for quick settings tiles with long-press actions" bug: "229856884" } flag { name: "status_bar_static_inout_indicators" namespace: "systemui" description: "(Upstream request) Always show the network activity inout indicators and " "prefer using alpha to distinguish network activity." bug: "310715220" }
packages/SystemUI/multivalentTests/src/com/android/systemui/statusbar/pipeline/wifi/ui/viewmodel/WifiViewModelTest.kt +61 −2 Original line number Diff line number Diff line Loading @@ -16,9 +16,11 @@ package com.android.systemui.statusbar.pipeline.wifi.ui.viewmodel import android.platform.test.flag.junit.SetFlagsRule import androidx.test.ext.junit.runners.AndroidJUnit4 import androidx.test.filters.SmallTest import com.android.settingslib.AccessibilityContentDescriptions.WIFI_OTHER_DEVICE_CONNECTION import com.android.systemui.Flags.FLAG_STATUS_BAR_STATIC_INOUT_INDICATORS import com.android.systemui.SysuiTestCase import com.android.systemui.common.shared.model.ContentDescription.Companion.loadContentDescription import com.android.systemui.coroutines.collectLastValue Loading Loading @@ -58,6 +60,8 @@ class WifiViewModelTest : SysuiTestCase() { private lateinit var underTest: WifiViewModel private val setFlagsRule = SetFlagsRule() @Mock private lateinit var tableLogBuffer: TableLogBuffer @Mock private lateinit var connectivityConstants: ConnectivityConstants @Mock private lateinit var wifiConstants: WifiConstants Loading Loading @@ -183,8 +187,11 @@ class WifiViewModelTest : SysuiTestCase() { } @Test fun activity_nullSsid_outputsFalse() = fun activity_nullSsid_outputsFalse_staticFlagOff() = testScope.runTest { // GIVEN flag is disabled setFlagsRule.disableFlags(FLAG_STATUS_BAR_STATIC_INOUT_INDICATORS) whenever(connectivityConstants.shouldShowActivityConfig).thenReturn(true) createAndSetViewModel() Loading @@ -206,6 +213,35 @@ class WifiViewModelTest : SysuiTestCase() { assertThat(activityContainer).isFalse() } @Test fun activity_nullSsid_outputsFalse_staticFlagOn() = testScope.runTest { // GIVEN flag is enabled setFlagsRule.enableFlags(FLAG_STATUS_BAR_STATIC_INOUT_INDICATORS) whenever(connectivityConstants.shouldShowActivityConfig).thenReturn(true) createAndSetViewModel() wifiRepository.setWifiNetwork( WifiNetworkModel.Active(NETWORK_ID, ssid = null, level = 1) ) val activityIn by collectLastValue(underTest.isActivityInViewVisible) val activityOut by collectLastValue(underTest.isActivityOutViewVisible) val activityContainer by collectLastValue(underTest.isActivityContainerVisible) // WHEN we update the repo to have activity val activity = DataActivityModel(hasActivityIn = true, hasActivityOut = true) wifiRepository.setWifiActivity(activity) // THEN we still output false because our network's SSID is null assertThat(activityIn).isFalse() assertThat(activityOut).isFalse() // THEN the inout indicators are sill showing due to the config being true assertThat(activityContainer).isTrue() } @Test fun activity_allLocationViewModelsReceiveSameData() = testScope.runTest { Loading Loading @@ -335,8 +371,11 @@ class WifiViewModelTest : SysuiTestCase() { } @Test fun activityContainer_inAndOutFalse_outputsFalse() = fun activityContainer_inAndOutFalse_outputsTrue_staticFlagOff() = testScope.runTest { // GIVEN the flag is off setFlagsRule.disableFlags(FLAG_STATUS_BAR_STATIC_INOUT_INDICATORS) whenever(connectivityConstants.shouldShowActivityConfig).thenReturn(true) createAndSetViewModel() wifiRepository.setWifiNetwork(ACTIVE_VALID_WIFI_NETWORK) Loading @@ -349,6 +388,26 @@ class WifiViewModelTest : SysuiTestCase() { assertThat(latest).isFalse() } @Test fun activityContainer_inAndOutFalse_outputsTrue_staticFlagOn() = testScope.runTest { // GIVEN the flag is on setFlagsRule.enableFlags(FLAG_STATUS_BAR_STATIC_INOUT_INDICATORS) whenever(connectivityConstants.shouldShowActivityConfig).thenReturn(true) createAndSetViewModel() wifiRepository.setWifiNetwork(ACTIVE_VALID_WIFI_NETWORK) val latest by collectLastValue(underTest.isActivityContainerVisible) val activity = DataActivityModel(hasActivityIn = false, hasActivityOut = false) wifiRepository.setWifiActivity(activity) // The activity container should always be visible, since activity is // shown in UI by changing opacity of the indicators. assertThat(latest).isTrue() } @Test fun airplaneSpacer_notAirplaneMode_outputsFalse() = testScope.runTest { Loading
packages/SystemUI/res-keyguard/layout/status_bar_mobile_signal_group_inner.xml +0 −2 Original line number Diff line number Diff line Loading @@ -39,7 +39,6 @@ android:adjustViewBounds="true" android:layout_width="wrap_content" android:src="@drawable/ic_activity_down" android:visibility="gone" android:paddingEnd="2dp" /> <ImageView Loading @@ -49,7 +48,6 @@ android:layout_width="wrap_content" android:src="@drawable/ic_activity_up" android:paddingEnd="2dp" android:visibility="gone" /> </FrameLayout> <FrameLayout Loading
packages/SystemUI/res/layout/status_bar_wifi_group_inner.xml +0 −2 Original line number Diff line number Diff line Loading @@ -37,7 +37,6 @@ android:adjustViewBounds="true" android:layout_width="wrap_content" android:src="@drawable/ic_activity_down" android:visibility="gone" android:paddingEnd="2dp" /> <ImageView Loading @@ -47,7 +46,6 @@ android:layout_width="wrap_content" android:src="@drawable/ic_activity_up" android:paddingEnd="2dp" android:visibility="gone" /> </FrameLayout> <FrameLayout Loading
packages/SystemUI/src/com/android/systemui/statusbar/pipeline/mobile/ui/binder/MobileIconBinder.kt +25 −3 Original line number Diff line number Diff line Loading @@ -30,6 +30,7 @@ import androidx.lifecycle.Lifecycle import androidx.lifecycle.lifecycleScope import androidx.lifecycle.repeatOnLifecycle import com.android.settingslib.graph.SignalDrawable import com.android.systemui.Flags.statusBarStaticInoutIndicators import com.android.systemui.common.ui.binder.ContentDescriptionViewBinder import com.android.systemui.common.ui.binder.IconViewBinder import com.android.systemui.lifecycle.repeatWhenAttached Loading @@ -41,6 +42,8 @@ import com.android.systemui.statusbar.pipeline.mobile.ui.MobileViewLogger import com.android.systemui.statusbar.pipeline.mobile.ui.viewmodel.LocationBasedMobileViewModel import com.android.systemui.statusbar.pipeline.shared.ui.binder.ModernStatusBarViewBinding import com.android.systemui.statusbar.pipeline.shared.ui.binder.ModernStatusBarViewVisibilityHelper import com.android.systemui.statusbar.pipeline.shared.ui.binder.StatusBarViewBinderConstants.ALPHA_ACTIVE import com.android.systemui.statusbar.pipeline.shared.ui.binder.StatusBarViewBinderConstants.ALPHA_INACTIVE import kotlinx.coroutines.awaitCancellation import kotlinx.coroutines.flow.MutableStateFlow import kotlinx.coroutines.flow.distinctUntilChanged Loading Loading @@ -190,10 +193,29 @@ object MobileIconBinder { } } if (statusBarStaticInoutIndicators()) { // Set the opacity of the activity indicators launch { viewModel.activityInVisible.collect { visible -> activityIn.imageAlpha = (if (visible) ALPHA_ACTIVE else ALPHA_INACTIVE) } } launch { viewModel.activityOutVisible.collect { visible -> activityOut.imageAlpha = (if (visible) ALPHA_ACTIVE else ALPHA_INACTIVE) } } } else { // Set the activity indicators launch { viewModel.activityInVisible.collect { activityIn.isVisible = it } } launch { viewModel.activityOutVisible.collect { activityOut.isVisible = it } } launch { viewModel.activityOutVisible.collect { activityOut.isVisible = it } } } launch { viewModel.activityContainerVisible.collect { Loading