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

Commit 65e1b6b6 authored by Olivier St-Onge's avatar Olivier St-Onge
Browse files

Only stack icons if they share the same number of levels

Flag: com.android.settingslib.flags.new_status_bar_icons
Flag: com.android.systemui.status_bar_root_modernization
Fixes: 396700738
Test: MobileIconsInteractorTest.kt
Change-Id: Iba5685edc3bac0eb171cb692a775fe1b66d651e6
parent 56c3d217
Loading
Loading
Loading
Loading
+29 −0
Original line number Diff line number Diff line
@@ -39,6 +39,7 @@ import com.android.systemui.statusbar.core.StatusBarRootModernization
import com.android.systemui.statusbar.pipeline.mobile.data.model.SubscriptionModel
import com.android.systemui.statusbar.pipeline.mobile.data.repository.FakeMobileConnectionRepository
import com.android.systemui.statusbar.pipeline.mobile.data.repository.fake
import com.android.systemui.statusbar.pipeline.mobile.data.repository.fakeMobileConnectionsRepository
import com.android.systemui.statusbar.pipeline.mobile.data.repository.mobileConnectionsRepository
import com.android.systemui.statusbar.pipeline.mobile.data.repository.mobileConnectionsRepositoryLogbufferName
import com.android.systemui.statusbar.pipeline.shared.data.model.ConnectivitySlot
@@ -937,6 +938,34 @@ class MobileIconsInteractorTest : SysuiTestCase() {
            assertThat(latest).isFalse()
        }

    @Test
    @EnableFlags(NewStatusBarIcons.FLAG_NAME, StatusBarRootModernization.FLAG_NAME)
    fun isStackable_checksForNumberOfBars() =
        kosmos.runTest {
            val latest by collectLastValue(underTest.isStackable)

            // Number of levels is the same for both
            connectionsRepository.setSubscriptions(listOf(SUB_1, SUB_2))
            setNumberOfLevelsForSubId(SUB_1_ID, 5)
            setNumberOfLevelsForSubId(SUB_2_ID, 5)

            assertThat(latest).isTrue()

            // Change the number of levels to be different than SUB_2
            setNumberOfLevelsForSubId(SUB_1_ID, 6)

            assertThat(latest).isFalse()
        }

    private fun setNumberOfLevelsForSubId(subId: Int, numberOfLevels: Int) {
        with(kosmos) {
            (fakeMobileConnectionsRepository.getRepoForSubId(subId)
                    as FakeMobileConnectionRepository)
                .numberOfLevels
                .value = numberOfLevels
        }
    }

    /**
     * Convenience method for creating a pair of subscriptions to test the filteredSubscriptions
     * flow.
+9 −2
Original line number Diff line number Diff line
@@ -34,6 +34,7 @@ import com.android.systemui.statusbar.pipeline.dagger.MobileSummaryLog
import com.android.systemui.statusbar.pipeline.mobile.data.model.SubscriptionModel
import com.android.systemui.statusbar.pipeline.mobile.data.repository.MobileConnectionRepository
import com.android.systemui.statusbar.pipeline.mobile.data.repository.MobileConnectionsRepository
import com.android.systemui.statusbar.pipeline.mobile.domain.model.SignalIconModel
import com.android.systemui.statusbar.pipeline.shared.data.model.ConnectivitySlot
import com.android.systemui.statusbar.pipeline.shared.data.repository.ConnectivityRepository
import com.android.systemui.statusbar.policy.data.repository.UserSetupRepository
@@ -309,8 +310,14 @@ constructor(
    override val isStackable =
        if (NewStatusBarIcons.isEnabled && StatusBarRootModernization.isEnabled) {
                icons.flatMapLatest { icons ->
                    combine(icons.map { it.isNonTerrestrial }) {
                        it.size == 2 && it.none { isNonTerrestrial -> isNonTerrestrial }
                    combine(icons.map { it.signalLevelIcon }) { signalLevelIcons ->
                        // These are only stackable if:
                        // - They are cellular
                        // - There's exactly two
                        // - They have the same number of levels
                        signalLevelIcons.filterIsInstance<SignalIconModel.Cellular>().let {
                            it.size == 2 && it[0].numberOfLevels == it[1].numberOfLevels
                        }
                    }
                }
            } else {