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
This commit is contained in:
Michal Brzezinski
2021-12-09 19:01:48 +00:00
committed by Michał Brzeziński
parent 9e699657d8
commit bf09696f91
2 changed files with 54 additions and 10 deletions

View File

@@ -49,8 +49,9 @@ class SplitShadeHeaderController @Inject constructor(
} }
private val combinedHeaders = featureFlags.isEnabled(Flags.COMBINED_QS_HEADERS) 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 iconManager: StatusBarIconController.TintedIconManager
private val iconContainer: StatusIconContainer
private val carrierIconSlots: List<String>
private val qsCarrierGroupController: QSCarrierGroupController private val qsCarrierGroupController: QSCarrierGroupController
private var visible = false private var visible = false
set(value) { set(value) {
@@ -117,10 +118,19 @@ class SplitShadeHeaderController @Inject constructor(
batteryMeterViewController.ignoreTunerUpdates() batteryMeterViewController.ignoreTunerUpdates()
batteryIcon.setPercentShowMode(BatteryMeterView.MODE_ESTIMATE) 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 = StatusBarIconController.TintedIconManager(iconContainer, featureFlags)
iconManager.setTint(Utils.getColorAttrDefaultColor(statusBar.context, iconManager.setTint(Utils.getColorAttrDefaultColor(statusBar.context,
android.R.attr.textColorPrimary)) 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 qsCarrierGroupController = qsCarrierGroupControllerBuilder
.setQSCarrierGroup(statusBar.findViewById(R.id.carrier_group)) .setQSCarrierGroup(statusBar.findViewById(R.id.carrier_group))
.build() .build()
@@ -185,9 +195,20 @@ class SplitShadeHeaderController @Inject constructor(
private fun updateListeners() { private fun updateListeners() {
qsCarrierGroupController.setListening(visible) qsCarrierGroupController.setListening(visible)
if (visible) { if (visible) {
updateSingleCarrier(qsCarrierGroupController.isSingleCarrier)
qsCarrierGroupController.setOnSingleCarrierChangedListener { updateSingleCarrier(it) }
statusBarIconController.addIconGroup(iconManager) statusBarIconController.addIconGroup(iconManager)
} else { } else {
qsCarrierGroupController.setOnSingleCarrierChangedListener(null)
statusBarIconController.removeIconGroup(iconManager) statusBarIconController.removeIconGroup(iconManager)
} }
} }
private fun updateSingleCarrier(singleCarrier: Boolean) {
if (singleCarrier) {
iconContainer.removeIgnoredSlots(carrierIconSlots)
} else {
iconContainer.addIgnoredSlots(carrierIconSlots)
}
}
} }

View File

@@ -1,8 +1,8 @@
package com.android.systemui.statusbar.phone package com.android.systemui.statusbar.phone
import android.test.suitebuilder.annotation.SmallTest
import android.testing.AndroidTestingRunner import android.testing.AndroidTestingRunner
import android.view.View import android.view.View
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.animation.ShadeInterpolation import com.android.systemui.animation.ShadeInterpolation
@@ -42,6 +42,7 @@ class SplitShadeHeaderControllerTest : SysuiTestCase() {
var viewVisibility = View.GONE var viewVisibility = View.GONE
private lateinit var splitShadeHeaderController: SplitShadeHeaderController private lateinit var splitShadeHeaderController: SplitShadeHeaderController
private lateinit var carrierIconSlots: List<String>
@Before @Before
fun setup() { fun setup() {
@@ -67,12 +68,13 @@ class SplitShadeHeaderControllerTest : SysuiTestCase() {
featureFlags, featureFlags,
batteryMeterViewController batteryMeterViewController
) )
carrierIconSlots = listOf(
context.getString(com.android.internal.R.string.status_bar_mobile))
} }
@Test @Test
fun setVisible_onlyInSplitShade() { fun setVisible_onlyInSplitShade() {
splitShadeHeaderController.splitShadeMode = true makeShadeVisible()
splitShadeHeaderController.shadeExpanded = true
assertThat(viewVisibility).isEqualTo(View.VISIBLE) assertThat(viewVisibility).isEqualTo(View.VISIBLE)
splitShadeHeaderController.splitShadeMode = false splitShadeHeaderController.splitShadeMode = false
@@ -81,17 +83,38 @@ class SplitShadeHeaderControllerTest : SysuiTestCase() {
@Test @Test
fun updateListeners_registersWhenVisible() { fun updateListeners_registersWhenVisible() {
splitShadeHeaderController.splitShadeMode = true makeShadeVisible()
splitShadeHeaderController.shadeExpanded = true
verify(qsCarrierGroupController).setListening(true) verify(qsCarrierGroupController).setListening(true)
verify(statusBarIconController).addIconGroup(any()) verify(statusBarIconController).addIconGroup(any())
} }
@Test @Test
fun shadeExpandedFraction_updatesAlpha() { fun shadeExpandedFraction_updatesAlpha() {
splitShadeHeaderController.splitShadeMode = true makeShadeVisible()
splitShadeHeaderController.shadeExpanded = true
splitShadeHeaderController.shadeExpandedFraction = 0.5f splitShadeHeaderController.shadeExpandedFraction = 0.5f
verify(view).setAlpha(ShadeInterpolation.getContentAlpha(0.5f)) verify(view).setAlpha(ShadeInterpolation.getContentAlpha(0.5f))
} }
@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
}
} }