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

Commit dc02b5ea authored by Chaohui Wang's avatar Chaohui Wang
Browse files

Reduce api calls when getDataSummary

When defaultSubId == activeSubId, return display name directly.

Bug: 339884322
Flag: com.android.settings.flags.internet_preference_controller_v2
Test: manual - on Internet
Change-Id: I8422c709483069a6894b99d5cc2cc652459ab5e0
parent 2f71bc76
Loading
Loading
Loading
Loading
+20 −25
Original line number Diff line number Diff line
@@ -51,11 +51,13 @@ class DataSubscriptionRepository(
            )
            .map { it.getIntExtra(SUBSCRIPTION_KEY, SubscriptionManager.INVALID_SUBSCRIPTION_ID) }
            .onStart { emit(SubscriptionManager.getDefaultDataSubscriptionId()) }
            .distinctUntilChanged()
            .conflate()
            .flowOn(Dispatchers.Default)

    fun activeDataSubscriptionIdFlow(): Flow<Int> =
        telephonyManager.telephonyCallbackFlow {
        telephonyManager
            .telephonyCallbackFlow {
                object : TelephonyCallback(), TelephonyCallback.ActiveDataSubscriptionIdListener {
                    override fun onActiveDataSubscriptionIdChanged(subId: Int) {
                        trySend(subId)
@@ -63,34 +65,27 @@ class DataSubscriptionRepository(
                    }
                }
            }
            .distinctUntilChanged()

    fun dataSummaryFlow(): Flow<String> =
        combine(defaultDataSubscriptionIdFlow(), activeDataSubscriptionIdFlow()) {
                defaultSubId,
                activeSubId ->
                DataSubscriptionIds(defaultSubId, activeSubId)
                defaultDataSubId,
                activeDataSubId ->
                getDataSummary(defaultDataSubId, activeDataSubId)
            }
            .distinctUntilChanged()
            .map { it.getDataSummary() }
            .conflate()
            .flowOn(Dispatchers.Default)

    private data class DataSubscriptionIds(
        val defaultSubId: Int,
        val activeSubId: Int,
    )

    private fun DataSubscriptionIds.getDataSummary(): String {
        val activeSubInfo = subscriptionManager.getActiveSubscriptionInfo(activeSubId) ?: return ""
    private fun getDataSummary(defaultDataSubId: Int, activeDataSubId: Int): String {
        if (defaultDataSubId == activeDataSubId) return getDisplayName(defaultDataSubId)
        val activeSubInfo =
            subscriptionManager.getActiveSubscriptionInfo(activeDataSubId)
                ?: return getDisplayName(defaultDataSubId)
        if (!SubscriptionUtil.isSubscriptionVisible(subscriptionManager, context, activeSubInfo)) {
            return getDisplayName(defaultSubId)
        }
        val uniqueName = getDisplayName(activeSubId)
        return if (activeSubId == defaultSubId) {
            uniqueName
        } else {
            context.getString(R.string.mobile_data_temp_using, uniqueName)
            return getDisplayName(defaultDataSubId)
        }
        // non-DDS is active
        return context.getString(R.string.mobile_data_temp_using, getDisplayName(activeDataSubId))
    }

    companion object {