Merge "Reduce api calls when getDataSummary" into main

This commit is contained in:
Chaohui Wang
2024-06-17 10:22:05 +00:00
committed by Android (Google) Code Review

View File

@@ -51,11 +51,13 @@ class DataSubscriptionRepository(
) )
.map { it.getIntExtra(SUBSCRIPTION_KEY, SubscriptionManager.INVALID_SUBSCRIPTION_ID) } .map { it.getIntExtra(SUBSCRIPTION_KEY, SubscriptionManager.INVALID_SUBSCRIPTION_ID) }
.onStart { emit(SubscriptionManager.getDefaultDataSubscriptionId()) } .onStart { emit(SubscriptionManager.getDefaultDataSubscriptionId()) }
.distinctUntilChanged()
.conflate() .conflate()
.flowOn(Dispatchers.Default) .flowOn(Dispatchers.Default)
fun activeDataSubscriptionIdFlow(): Flow<Int> = fun activeDataSubscriptionIdFlow(): Flow<Int> =
telephonyManager.telephonyCallbackFlow { telephonyManager
.telephonyCallbackFlow {
object : TelephonyCallback(), TelephonyCallback.ActiveDataSubscriptionIdListener { object : TelephonyCallback(), TelephonyCallback.ActiveDataSubscriptionIdListener {
override fun onActiveDataSubscriptionIdChanged(subId: Int) { override fun onActiveDataSubscriptionIdChanged(subId: Int) {
trySend(subId) trySend(subId)
@@ -63,34 +65,27 @@ class DataSubscriptionRepository(
} }
} }
} }
.distinctUntilChanged()
fun dataSummaryFlow(): Flow<String> = fun dataSummaryFlow(): Flow<String> =
combine(defaultDataSubscriptionIdFlow(), activeDataSubscriptionIdFlow()) { combine(defaultDataSubscriptionIdFlow(), activeDataSubscriptionIdFlow()) {
defaultSubId, defaultDataSubId,
activeSubId -> activeDataSubId ->
DataSubscriptionIds(defaultSubId, activeSubId) getDataSummary(defaultDataSubId, activeDataSubId)
} }
.distinctUntilChanged()
.map { it.getDataSummary() }
.conflate() .conflate()
.flowOn(Dispatchers.Default) .flowOn(Dispatchers.Default)
private data class DataSubscriptionIds( private fun getDataSummary(defaultDataSubId: Int, activeDataSubId: Int): String {
val defaultSubId: Int, if (defaultDataSubId == activeDataSubId) return getDisplayName(defaultDataSubId)
val activeSubId: Int, val activeSubInfo =
) subscriptionManager.getActiveSubscriptionInfo(activeDataSubId)
?: return getDisplayName(defaultDataSubId)
private fun DataSubscriptionIds.getDataSummary(): String {
val activeSubInfo = subscriptionManager.getActiveSubscriptionInfo(activeSubId) ?: return ""
if (!SubscriptionUtil.isSubscriptionVisible(subscriptionManager, context, activeSubInfo)) { if (!SubscriptionUtil.isSubscriptionVisible(subscriptionManager, context, activeSubInfo)) {
return getDisplayName(defaultSubId) return getDisplayName(defaultDataSubId)
}
val uniqueName = getDisplayName(activeSubId)
return if (activeSubId == defaultSubId) {
uniqueName
} else {
context.getString(R.string.mobile_data_temp_using, uniqueName)
} }
// non-DDS is active
return context.getString(R.string.mobile_data_temp_using, getDisplayName(activeDataSubId))
} }
companion object { companion object {