From bf09696f91dab7999e2e477a80d195325267f29b Mon Sep 17 00:00:00 2001 From: Michal Brzezinski Date: Thu, 9 Dec 2021 19:01:48 +0000 Subject: [PATCH] Fixing displaying two carriers in split shade header For dual carriers all carrier information will be displayed inside QSCarrierGroupController and carrier information in StatusIconContainer should be hidden. The difference in split shade is that for single carrier name of the carrier will be also displayed on the left side in QSCarrierGroupController. Test: SplitShadeHeaderControllerTest and too much mocking Fixes: 194178072 Change-Id: Idd2819fbe3d8b2b23f89999052cb900698ac4b11 --- .../phone/SplitShadeHeaderController.kt | 25 +++++++++++- .../phone/SplitShadeHeaderControllerTest.kt | 39 +++++++++++++++---- 2 files changed, 54 insertions(+), 10 deletions(-) diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/phone/SplitShadeHeaderController.kt b/packages/SystemUI/src/com/android/systemui/statusbar/phone/SplitShadeHeaderController.kt index f6e19bff8f9b1..8cf7288c9cd5e 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/phone/SplitShadeHeaderController.kt +++ b/packages/SystemUI/src/com/android/systemui/statusbar/phone/SplitShadeHeaderController.kt @@ -49,8 +49,9 @@ class SplitShadeHeaderController @Inject constructor( } private val combinedHeaders = featureFlags.isEnabled(Flags.COMBINED_QS_HEADERS) - // TODO(b/194178072) Handle RSSI hiding when multi carrier private val iconManager: StatusBarIconController.TintedIconManager + private val iconContainer: StatusIconContainer + private val carrierIconSlots: List private val qsCarrierGroupController: QSCarrierGroupController private var visible = false set(value) { @@ -117,10 +118,19 @@ class SplitShadeHeaderController @Inject constructor( batteryMeterViewController.ignoreTunerUpdates() batteryIcon.setPercentShowMode(BatteryMeterView.MODE_ESTIMATE) - val iconContainer: StatusIconContainer = statusBar.findViewById(R.id.statusIcons) + iconContainer = statusBar.findViewById(R.id.statusIcons) iconManager = StatusBarIconController.TintedIconManager(iconContainer, featureFlags) iconManager.setTint(Utils.getColorAttrDefaultColor(statusBar.context, android.R.attr.textColorPrimary)) + + carrierIconSlots = if (featureFlags.isEnabled(Flags.COMBINED_STATUS_BAR_SIGNAL_ICONS)) { + listOf( + statusBar.context.getString(com.android.internal.R.string.status_bar_no_calling), + statusBar.context.getString(com.android.internal.R.string.status_bar_call_strength) + ) + } else { + listOf(statusBar.context.getString(com.android.internal.R.string.status_bar_mobile)) + } qsCarrierGroupController = qsCarrierGroupControllerBuilder .setQSCarrierGroup(statusBar.findViewById(R.id.carrier_group)) .build() @@ -185,9 +195,20 @@ class SplitShadeHeaderController @Inject constructor( private fun updateListeners() { qsCarrierGroupController.setListening(visible) if (visible) { + updateSingleCarrier(qsCarrierGroupController.isSingleCarrier) + qsCarrierGroupController.setOnSingleCarrierChangedListener { updateSingleCarrier(it) } statusBarIconController.addIconGroup(iconManager) } else { + qsCarrierGroupController.setOnSingleCarrierChangedListener(null) statusBarIconController.removeIconGroup(iconManager) } } + + private fun updateSingleCarrier(singleCarrier: Boolean) { + if (singleCarrier) { + iconContainer.removeIgnoredSlots(carrierIconSlots) + } else { + iconContainer.addIgnoredSlots(carrierIconSlots) + } + } } diff --git a/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/SplitShadeHeaderControllerTest.kt b/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/SplitShadeHeaderControllerTest.kt index 2d548e96e5989..a8544a9a15e4c 100644 --- a/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/SplitShadeHeaderControllerTest.kt +++ b/packages/SystemUI/tests/src/com/android/systemui/statusbar/phone/SplitShadeHeaderControllerTest.kt @@ -1,8 +1,8 @@ package com.android.systemui.statusbar.phone -import android.test.suitebuilder.annotation.SmallTest import android.testing.AndroidTestingRunner import android.view.View +import androidx.test.filters.SmallTest import com.android.systemui.R import com.android.systemui.SysuiTestCase import com.android.systemui.animation.ShadeInterpolation @@ -42,6 +42,7 @@ class SplitShadeHeaderControllerTest : SysuiTestCase() { var viewVisibility = View.GONE private lateinit var splitShadeHeaderController: SplitShadeHeaderController + private lateinit var carrierIconSlots: List @Before fun setup() { @@ -67,12 +68,13 @@ class SplitShadeHeaderControllerTest : SysuiTestCase() { featureFlags, batteryMeterViewController ) + carrierIconSlots = listOf( + context.getString(com.android.internal.R.string.status_bar_mobile)) } @Test fun setVisible_onlyInSplitShade() { - splitShadeHeaderController.splitShadeMode = true - splitShadeHeaderController.shadeExpanded = true + makeShadeVisible() assertThat(viewVisibility).isEqualTo(View.VISIBLE) splitShadeHeaderController.splitShadeMode = false @@ -81,17 +83,38 @@ class SplitShadeHeaderControllerTest : SysuiTestCase() { @Test fun updateListeners_registersWhenVisible() { - splitShadeHeaderController.splitShadeMode = true - splitShadeHeaderController.shadeExpanded = true + makeShadeVisible() verify(qsCarrierGroupController).setListening(true) verify(statusBarIconController).addIconGroup(any()) } @Test fun shadeExpandedFraction_updatesAlpha() { - splitShadeHeaderController.splitShadeMode = true - splitShadeHeaderController.shadeExpanded = true + makeShadeVisible() splitShadeHeaderController.shadeExpandedFraction = 0.5f verify(view).setAlpha(ShadeInterpolation.getContentAlpha(0.5f)) } -} \ No newline at end of file + + @Test + fun singleCarrier_enablesCarrierIconsInStatusIcons() { + whenever(qsCarrierGroupController.isSingleCarrier).thenReturn(true) + + makeShadeVisible() + + verify(statusIcons).removeIgnoredSlots(carrierIconSlots) + } + + @Test + fun dualCarrier_disablesCarrierIconsInStatusIcons() { + whenever(qsCarrierGroupController.isSingleCarrier).thenReturn(false) + + makeShadeVisible() + + verify(statusIcons).addIgnoredSlots(carrierIconSlots) + } + + private fun makeShadeVisible() { + splitShadeHeaderController.splitShadeMode = true + splitShadeHeaderController.shadeExpanded = true + } +}