Not use SubscriptionInfoEntity in DataUsageList

Carrier id will be get in DataUsageListAppsController async.

Bug: 348118234
Flag: EXEMPT clean up
Test: manual - on DataUsageList
Change-Id: I06b361f38d04c5020431cd8c6e359aa3a69942e5
This commit is contained in:
Chaohui Wang
2024-06-25 17:03:46 +08:00
parent 69f686828b
commit af56a3ea21
4 changed files with 25 additions and 23 deletions

View File

@@ -33,13 +33,10 @@ import com.android.settings.R
import com.android.settings.dashboard.DashboardFragment import com.android.settings.dashboard.DashboardFragment
import com.android.settings.datausage.lib.BillingCycleRepository import com.android.settings.datausage.lib.BillingCycleRepository
import com.android.settings.datausage.lib.NetworkUsageData import com.android.settings.datausage.lib.NetworkUsageData
import com.android.settings.network.MobileNetworkRepository
import com.android.settings.network.SubscriptionUtil import com.android.settings.network.SubscriptionUtil
import com.android.settings.network.telephony.requireSubscriptionManager import com.android.settings.network.telephony.SubscriptionRepository
import com.android.settingslib.mobile.dataservice.SubscriptionInfoEntity
import com.android.settingslib.spa.framework.util.collectLatestWithLifecycle import com.android.settingslib.spa.framework.util.collectLatestWithLifecycle
import com.android.settingslib.spaprivileged.framework.common.userManager import com.android.settingslib.spaprivileged.framework.common.userManager
import com.android.settingslib.utils.ThreadUtils
import kotlin.jvm.optionals.getOrNull import kotlin.jvm.optionals.getOrNull
/** /**
@@ -59,7 +56,6 @@ open class DataUsageList : DashboardFragment() {
private lateinit var billingCycleRepository: BillingCycleRepository private lateinit var billingCycleRepository: BillingCycleRepository
private var usageAmount: Preference? = null private var usageAmount: Preference? = null
private var subscriptionInfoEntity: SubscriptionInfoEntity? = null
private var dataUsageListAppsController: DataUsageListAppsController? = null private var dataUsageListAppsController: DataUsageListAppsController? = null
private var chartDataUsagePreferenceController: ChartDataUsagePreferenceController? = null private var chartDataUsagePreferenceController: ChartDataUsagePreferenceController? = null
private var dataUsageListHeaderController: DataUsageListHeaderController? = null private var dataUsageListHeaderController: DataUsageListHeaderController? = null
@@ -90,7 +86,6 @@ open class DataUsageList : DashboardFragment() {
finish() finish()
return return
} }
updateSubscriptionInfoEntity()
dataUsageListAppsController = use(DataUsageListAppsController::class.java).apply { dataUsageListAppsController = use(DataUsageListAppsController::class.java).apply {
init(template) init(template)
} }
@@ -132,6 +127,16 @@ open class DataUsageList : DashboardFragment() {
viewModel.chartDataFlow.collectLatestWithLifecycle(viewLifecycleOwner) { chartData -> viewModel.chartDataFlow.collectLatestWithLifecycle(viewLifecycleOwner) { chartData ->
chartDataUsagePreferenceController?.update(chartData) chartDataUsagePreferenceController?.update(chartData)
} }
finishIfSubscriptionDisabled()
}
private fun finishIfSubscriptionDisabled() {
if (SubscriptionManager.isUsableSubscriptionId(subId)) {
SubscriptionRepository(requireContext()).isSubscriptionEnabledFlow(subId)
.collectLatestWithLifecycle(viewLifecycleOwner) { isSubscriptionEnabled ->
if (!isSubscriptionEnabled) finish()
}
}
} }
override fun getPreferenceScreenResId() = R.xml.data_usage_list override fun getPreferenceScreenResId() = R.xml.data_usage_list
@@ -155,23 +160,12 @@ open class DataUsageList : DashboardFragment() {
} }
} }
private fun updateSubscriptionInfoEntity() {
ThreadUtils.postOnBackgroundThread {
subscriptionInfoEntity =
MobileNetworkRepository.getInstance(context).getSubInfoById(subId.toString())
}
}
/** Update chart sweeps and cycle list to reflect [NetworkPolicy] for current [template]. */ /** Update chart sweeps and cycle list to reflect [NetworkPolicy] for current [template]. */
private fun updatePolicy(isModifiable: Boolean) { private fun updatePolicy(isModifiable: Boolean) {
val isBillingCycleModifiable = isModifiable && isActiveSubscription() dataUsageListHeaderController?.setConfigButtonVisible(isModifiable)
dataUsageListHeaderController?.setConfigButtonVisible(isBillingCycleModifiable) chartDataUsagePreferenceController?.setBillingCycleModifiable(isModifiable)
chartDataUsagePreferenceController?.setBillingCycleModifiable(isBillingCycleModifiable)
} }
private fun isActiveSubscription(): Boolean =
requireContext().requireSubscriptionManager().getActiveSubscriptionInfo(subId) != null
/** /**
* Updates the chart and detail data when initial loaded or selected cycle changed. * Updates the chart and detail data when initial loaded or selected cycle changed.
*/ */
@@ -187,7 +181,7 @@ open class DataUsageList : DashboardFragment() {
/** Updates applications data usage. */ /** Updates applications data usage. */
private fun updateApps(usageData: NetworkUsageData) { private fun updateApps(usageData: NetworkUsageData) {
dataUsageListAppsController?.update( dataUsageListAppsController?.update(
carrierId = subscriptionInfoEntity?.carrierId, subId = subId,
startTime = usageData.startTime, startTime = usageData.startTime,
endTime = usageData.endTime, endTime = usageData.endTime,
) )

View File

@@ -20,6 +20,7 @@ import android.app.ActivityManager
import android.content.Context import android.content.Context
import android.net.NetworkTemplate import android.net.NetworkTemplate
import android.os.Bundle import android.os.Bundle
import android.telephony.SubscriptionManager
import androidx.annotation.OpenForTesting import androidx.annotation.OpenForTesting
import androidx.annotation.VisibleForTesting import androidx.annotation.VisibleForTesting
import androidx.lifecycle.LifecycleCoroutineScope import androidx.lifecycle.LifecycleCoroutineScope
@@ -32,6 +33,7 @@ import com.android.settings.core.BasePreferenceController
import com.android.settings.core.SubSettingLauncher import com.android.settings.core.SubSettingLauncher
import com.android.settings.datausage.lib.AppDataUsageRepository import com.android.settings.datausage.lib.AppDataUsageRepository
import com.android.settings.datausage.lib.NetworkUsageData import com.android.settings.datausage.lib.NetworkUsageData
import com.android.settings.network.telephony.requireSubscriptionManager
import com.android.settingslib.AppItem import com.android.settingslib.AppItem
import com.android.settingslib.net.UidDetailProvider import com.android.settingslib.net.UidDetailProvider
import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.Dispatchers
@@ -74,8 +76,11 @@ open class DataUsageListAppsController(context: Context, preferenceKey: String)
this.cycleData = cycleData this.cycleData = cycleData
} }
fun update(carrierId: Int?, startTime: Long, endTime: Long) = lifecycleScope.launch { fun update(subId: Int, startTime: Long, endTime: Long) = lifecycleScope.launch {
val apps = withContext(Dispatchers.Default) { val apps = withContext(Dispatchers.Default) {
val carrierId = if (SubscriptionManager.isValidSubscriptionId(subId)) {
mContext.requireSubscriptionManager().getActiveSubscriptionInfo(subId)?.carrierId
} else null
repository.getAppPercent(carrierId, startTime, endTime).map { (appItem, percent) -> repository.getAppPercent(carrierId, startTime, endTime).map { (appItem, percent) ->
AppDataUsagePreference(mContext, appItem, percent, uidDetailProvider).apply { AppDataUsagePreference(mContext, appItem, percent, uidDetailProvider).apply {
setOnPreferenceClickListener { setOnPreferenceClickListener {

View File

@@ -36,6 +36,7 @@ import android.os.PowerManager;
import android.os.UserHandle; import android.os.UserHandle;
import android.os.UserManager; import android.os.UserManager;
import android.provider.Settings; import android.provider.Settings;
import android.telephony.SubscriptionManager;
import android.telephony.TelephonyManager; import android.telephony.TelephonyManager;
import android.text.TextUtils; import android.text.TextUtils;
import android.util.EventLog; import android.util.EventLog;
@@ -370,7 +371,7 @@ public class NetworkProviderSettings extends RestrictedSettingsFragment
mDataUsagePreference = findPreference(PREF_KEY_DATA_USAGE); mDataUsagePreference = findPreference(PREF_KEY_DATA_USAGE);
mDataUsagePreference.setVisible(DataUsageUtils.hasWifiRadio(getContext())); mDataUsagePreference.setVisible(DataUsageUtils.hasWifiRadio(getContext()));
mDataUsagePreference.setTemplate(new NetworkTemplate.Builder(NetworkTemplate.MATCH_WIFI) mDataUsagePreference.setTemplate(new NetworkTemplate.Builder(NetworkTemplate.MATCH_WIFI)
.build(), 0 /*subId*/); .build(), SubscriptionManager.INVALID_SUBSCRIPTION_ID);
mResetInternetPreference = findPreference(PREF_KEY_RESET_INTERNET); mResetInternetPreference = findPreference(PREF_KEY_RESET_INTERNET);
if (mResetInternetPreference != null) { if (mResetInternetPreference != null) {
mResetInternetPreference.setVisible(false); mResetInternetPreference.setVisible(false);

View File

@@ -51,6 +51,7 @@ import android.os.Bundle;
import android.os.PowerManager; import android.os.PowerManager;
import android.os.UserManager; import android.os.UserManager;
import android.provider.Settings; import android.provider.Settings;
import android.telephony.SubscriptionManager;
import android.view.ContextMenu; import android.view.ContextMenu;
import android.view.Menu; import android.view.Menu;
import android.view.MenuItem; import android.view.MenuItem;
@@ -319,7 +320,8 @@ public class NetworkProviderSettingsTest {
mNetworkProviderSettings.onCreate(Bundle.EMPTY); mNetworkProviderSettings.onCreate(Bundle.EMPTY);
verify(mDataUsagePreference).setVisible(true); verify(mDataUsagePreference).setVisible(true);
verify(mDataUsagePreference).setTemplate(any(), eq(0) /*subId*/); verify(mDataUsagePreference)
.setTemplate(any(), eq(SubscriptionManager.INVALID_SUBSCRIPTION_ID));
} }
@Test @Test