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

Commit c6b49c4f authored by Chaohui Wang's avatar Chaohui Wang Committed by Android (Google) Code Review
Browse files

Merge "Sort selectable subscriptions by sim slot index" into main

parents ea5e44f1 ec8ce02b
Loading
Loading
Loading
Loading
+14 −14
Original line number Diff line number Diff line
@@ -109,21 +109,21 @@ fun Context.getSelectableSubscriptionInfoList(): List<SubscriptionInfo> {
        // to users so they should never be returned.
        SubscriptionUtil.isSubscriptionVisible(subscriptionManager, this, subInfo)
    }
    // Multiple subscriptions in a group should only have one representative.
    // It should be the current active primary subscription if any, or any primary subscription.
    val groupUuidToSelectedIdMap = visibleList
    return visibleList
        .groupBy { it.groupUuid }
        .mapValues { (_, subInfos) ->
        .flatMap { (groupUuid, subInfos) ->
            if (groupUuid == null) {
                subInfos
            } else {
                // Multiple subscriptions in a group should only have one representative.
                // It should be the current active primary subscription if any, or the primary
                // subscription with minimum subscription id.
                subInfos.filter { it.simSlotIndex != SubscriptionManager.INVALID_SIM_SLOT_INDEX }
                .ifEmpty { subInfos }
                .minOf { it.subscriptionId }
                    .ifEmpty { subInfos.sortedBy { it.subscriptionId } }
                    .take(1)
            }

    return visibleList
        .filter { subInfo ->
            val groupUuid = subInfo.groupUuid ?: return@filter true
            groupUuidToSelectedIdMap[groupUuid] == subInfo.subscriptionId
        }
        .sortedBy { it.subscriptionId }
        // Matching the sorting order in SubscriptionManagerService.getAvailableSubscriptionInfoList
        .sortedWith(compareBy({ it.simSlotIndex }, { it.subscriptionId }))
        .also { Log.d(TAG, "getSelectableSubscriptionInfoList: $it") }
}
+26 −18
Original line number Diff line number Diff line
@@ -66,10 +66,11 @@ class SubscriptionRepositoryTest {
    @Test
    fun isSubscriptionEnabledFlow_enabled() = runBlocking {
        mockSubscriptionManager.stub {
            on { isSubscriptionEnabled(SUB_ID_1) } doReturn true
            on { isSubscriptionEnabled(SUB_ID_IN_SLOT_0) } doReturn true
        }

        val isEnabled = repository.isSubscriptionEnabledFlow(SUB_ID_1).firstWithTimeoutOrNull()
        val isEnabled =
            repository.isSubscriptionEnabledFlow(SUB_ID_IN_SLOT_0).firstWithTimeoutOrNull()

        assertThat(isEnabled).isTrue()
    }
@@ -94,21 +95,24 @@ class SubscriptionRepositoryTest {
    }

    @Test
    fun getSelectableSubscriptionInfoList_sortedBySubId() {
    fun getSelectableSubscriptionInfoList_sortedBySimSlotIndex() {
        mockSubscriptionManager.stub {
            on { getAvailableSubscriptionInfoList() } doReturn listOf(
                SubscriptionInfo.Builder().apply {
                    setId(SUB_ID_2)
                    setSimSlotIndex(SIM_SLOT_INDEX_0)
                    setId(SUB_ID_IN_SLOT_0)
                }.build(),
                SubscriptionInfo.Builder().apply {
                    setId(SUB_ID_1)
                    setSimSlotIndex(SIM_SLOT_INDEX_1)
                    setId(SUB_ID_IN_SLOT_1)
                }.build(),
            )
        }

        val subInfos = context.getSelectableSubscriptionInfoList()

        assertThat(subInfos.map { it.subscriptionId }).containsExactly(SUB_ID_1, SUB_ID_2).inOrder()
        assertThat(subInfos.map { it.simSlotIndex })
            .containsExactly(SIM_SLOT_INDEX_0, SIM_SLOT_INDEX_1).inOrder()
    }

    @Test
@@ -116,20 +120,21 @@ class SubscriptionRepositoryTest {
        mockSubscriptionManager.stub {
            on { getAvailableSubscriptionInfoList() } doReturn listOf(
                SubscriptionInfo.Builder().apply {
                    setId(SUB_ID_1)
                    setSimSlotIndex(SubscriptionManager.INVALID_SIM_SLOT_INDEX)
                    setId(SUB_ID_3_NOT_IN_SLOT)
                    setGroupUuid(GROUP_UUID)
                }.build(),
                SubscriptionInfo.Builder().apply {
                    setId(SUB_ID_2)
                    setSimSlotIndex(SIM_SLOT_INDEX_0)
                    setId(SUB_ID_IN_SLOT_0)
                    setGroupUuid(GROUP_UUID)
                    setSimSlotIndex(SIM_SLOT_INDEX)
                }.build(),
            )
        }

        val subInfos = context.getSelectableSubscriptionInfoList()

        assertThat(subInfos.map { it.subscriptionId }).containsExactly(SUB_ID_2)
        assertThat(subInfos.map { it.subscriptionId }).containsExactly(SUB_ID_IN_SLOT_0)
    }

    @Test
@@ -137,11 +142,11 @@ class SubscriptionRepositoryTest {
        mockSubscriptionManager.stub {
            on { getAvailableSubscriptionInfoList() } doReturn listOf(
                SubscriptionInfo.Builder().apply {
                    setId(SUB_ID_2)
                    setId(SUB_ID_4_NOT_IN_SLOT)
                    setGroupUuid(GROUP_UUID)
                }.build(),
                SubscriptionInfo.Builder().apply {
                    setId(SUB_ID_1)
                    setId(SUB_ID_3_NOT_IN_SLOT)
                    setGroupUuid(GROUP_UUID)
                }.build(),
            )
@@ -149,16 +154,16 @@ class SubscriptionRepositoryTest {

        val subInfos = context.getSelectableSubscriptionInfoList()

        assertThat(subInfos.map { it.subscriptionId }).containsExactly(SUB_ID_1)
        assertThat(subInfos.map { it.subscriptionId }).containsExactly(SUB_ID_3_NOT_IN_SLOT)
    }

    @Test
    fun phoneNumberFlow() = runBlocking {
        mockSubscriptionManager.stub {
            on { getPhoneNumber(SUB_ID_1) } doReturn NUMBER_1
            on { getPhoneNumber(SUB_ID_IN_SLOT_1) } doReturn NUMBER_1
        }
        val subInfo = SubscriptionInfo.Builder().apply {
            setId(SUB_ID_1)
            setId(SUB_ID_IN_SLOT_1)
            setMcc(MCC)
        }.build()

@@ -168,10 +173,13 @@ class SubscriptionRepositoryTest {
    }

    private companion object {
        const val SUB_ID_1 = 1
        const val SUB_ID_2 = 2
        const val SIM_SLOT_INDEX_0 = 0
        const val SUB_ID_IN_SLOT_0 = 2
        const val SIM_SLOT_INDEX_1 = 1
        const val SUB_ID_IN_SLOT_1 = 1
        const val SUB_ID_3_NOT_IN_SLOT = 3
        const val SUB_ID_4_NOT_IN_SLOT = 4
        val GROUP_UUID = UUID.randomUUID().toString()
        const val SIM_SLOT_INDEX = 1
        const val NUMBER_1 = "000000001"
        const val MCC = "310"
    }