Loading src/com/android/settings/datausage/DataUsageList.kt +14 −20 Original line number Diff line number Diff line Loading @@ -33,13 +33,10 @@ import com.android.settings.R import com.android.settings.dashboard.DashboardFragment import com.android.settings.datausage.lib.BillingCycleRepository import com.android.settings.datausage.lib.NetworkUsageData import com.android.settings.network.MobileNetworkRepository import com.android.settings.network.SubscriptionUtil import com.android.settings.network.telephony.requireSubscriptionManager import com.android.settingslib.mobile.dataservice.SubscriptionInfoEntity import com.android.settings.network.telephony.SubscriptionRepository import com.android.settingslib.spa.framework.util.collectLatestWithLifecycle import com.android.settingslib.spaprivileged.framework.common.userManager import com.android.settingslib.utils.ThreadUtils import kotlin.jvm.optionals.getOrNull /** Loading @@ -59,7 +56,6 @@ open class DataUsageList : DashboardFragment() { private lateinit var billingCycleRepository: BillingCycleRepository private var usageAmount: Preference? = null private var subscriptionInfoEntity: SubscriptionInfoEntity? = null private var dataUsageListAppsController: DataUsageListAppsController? = null private var chartDataUsagePreferenceController: ChartDataUsagePreferenceController? = null private var dataUsageListHeaderController: DataUsageListHeaderController? = null Loading Loading @@ -90,7 +86,6 @@ open class DataUsageList : DashboardFragment() { finish() return } updateSubscriptionInfoEntity() dataUsageListAppsController = use(DataUsageListAppsController::class.java).apply { init(template) } Loading Loading @@ -132,6 +127,16 @@ open class DataUsageList : DashboardFragment() { viewModel.chartDataFlow.collectLatestWithLifecycle(viewLifecycleOwner) { 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 Loading @@ -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]. */ private fun updatePolicy(isModifiable: Boolean) { val isBillingCycleModifiable = isModifiable && isActiveSubscription() dataUsageListHeaderController?.setConfigButtonVisible(isBillingCycleModifiable) chartDataUsagePreferenceController?.setBillingCycleModifiable(isBillingCycleModifiable) dataUsageListHeaderController?.setConfigButtonVisible(isModifiable) chartDataUsagePreferenceController?.setBillingCycleModifiable(isModifiable) } private fun isActiveSubscription(): Boolean = requireContext().requireSubscriptionManager().getActiveSubscriptionInfo(subId) != null /** * Updates the chart and detail data when initial loaded or selected cycle changed. */ Loading @@ -187,7 +181,7 @@ open class DataUsageList : DashboardFragment() { /** Updates applications data usage. */ private fun updateApps(usageData: NetworkUsageData) { dataUsageListAppsController?.update( carrierId = subscriptionInfoEntity?.carrierId, subId = subId, startTime = usageData.startTime, endTime = usageData.endTime, ) Loading src/com/android/settings/datausage/DataUsageListAppsController.kt +6 −1 Original line number Diff line number Diff line Loading @@ -20,6 +20,7 @@ import android.app.ActivityManager import android.content.Context import android.net.NetworkTemplate import android.os.Bundle import android.telephony.SubscriptionManager import androidx.annotation.OpenForTesting import androidx.annotation.VisibleForTesting import androidx.lifecycle.LifecycleCoroutineScope Loading @@ -32,6 +33,7 @@ import com.android.settings.core.BasePreferenceController import com.android.settings.core.SubSettingLauncher import com.android.settings.datausage.lib.AppDataUsageRepository import com.android.settings.datausage.lib.NetworkUsageData import com.android.settings.network.telephony.requireSubscriptionManager import com.android.settingslib.AppItem import com.android.settingslib.net.UidDetailProvider import kotlinx.coroutines.Dispatchers Loading Loading @@ -74,8 +76,11 @@ open class DataUsageListAppsController(context: Context, preferenceKey: String) 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 carrierId = if (SubscriptionManager.isValidSubscriptionId(subId)) { mContext.requireSubscriptionManager().getActiveSubscriptionInfo(subId)?.carrierId } else null repository.getAppPercent(carrierId, startTime, endTime).map { (appItem, percent) -> AppDataUsagePreference(mContext, appItem, percent, uidDetailProvider).apply { setOnPreferenceClickListener { Loading src/com/android/settings/network/NetworkProviderSettings.java +2 −1 Original line number Diff line number Diff line Loading @@ -36,6 +36,7 @@ import android.os.PowerManager; import android.os.UserHandle; import android.os.UserManager; import android.provider.Settings; import android.telephony.SubscriptionManager; import android.telephony.TelephonyManager; import android.text.TextUtils; import android.util.EventLog; Loading Loading @@ -370,7 +371,7 @@ public class NetworkProviderSettings extends RestrictedSettingsFragment mDataUsagePreference = findPreference(PREF_KEY_DATA_USAGE); mDataUsagePreference.setVisible(DataUsageUtils.hasWifiRadio(getContext())); mDataUsagePreference.setTemplate(new NetworkTemplate.Builder(NetworkTemplate.MATCH_WIFI) .build(), 0 /*subId*/); .build(), SubscriptionManager.INVALID_SUBSCRIPTION_ID); mResetInternetPreference = findPreference(PREF_KEY_RESET_INTERNET); if (mResetInternetPreference != null) { mResetInternetPreference.setVisible(false); Loading tests/robotests/src/com/android/settings/network/NetworkProviderSettingsTest.java +3 −1 Original line number Diff line number Diff line Loading @@ -51,6 +51,7 @@ import android.os.Bundle; import android.os.PowerManager; import android.os.UserManager; import android.provider.Settings; import android.telephony.SubscriptionManager; import android.view.ContextMenu; import android.view.Menu; import android.view.MenuItem; Loading Loading @@ -319,7 +320,8 @@ public class NetworkProviderSettingsTest { mNetworkProviderSettings.onCreate(Bundle.EMPTY); verify(mDataUsagePreference).setVisible(true); verify(mDataUsagePreference).setTemplate(any(), eq(0) /*subId*/); verify(mDataUsagePreference) .setTemplate(any(), eq(SubscriptionManager.INVALID_SUBSCRIPTION_ID)); } @Test Loading Loading
src/com/android/settings/datausage/DataUsageList.kt +14 −20 Original line number Diff line number Diff line Loading @@ -33,13 +33,10 @@ import com.android.settings.R import com.android.settings.dashboard.DashboardFragment import com.android.settings.datausage.lib.BillingCycleRepository import com.android.settings.datausage.lib.NetworkUsageData import com.android.settings.network.MobileNetworkRepository import com.android.settings.network.SubscriptionUtil import com.android.settings.network.telephony.requireSubscriptionManager import com.android.settingslib.mobile.dataservice.SubscriptionInfoEntity import com.android.settings.network.telephony.SubscriptionRepository import com.android.settingslib.spa.framework.util.collectLatestWithLifecycle import com.android.settingslib.spaprivileged.framework.common.userManager import com.android.settingslib.utils.ThreadUtils import kotlin.jvm.optionals.getOrNull /** Loading @@ -59,7 +56,6 @@ open class DataUsageList : DashboardFragment() { private lateinit var billingCycleRepository: BillingCycleRepository private var usageAmount: Preference? = null private var subscriptionInfoEntity: SubscriptionInfoEntity? = null private var dataUsageListAppsController: DataUsageListAppsController? = null private var chartDataUsagePreferenceController: ChartDataUsagePreferenceController? = null private var dataUsageListHeaderController: DataUsageListHeaderController? = null Loading Loading @@ -90,7 +86,6 @@ open class DataUsageList : DashboardFragment() { finish() return } updateSubscriptionInfoEntity() dataUsageListAppsController = use(DataUsageListAppsController::class.java).apply { init(template) } Loading Loading @@ -132,6 +127,16 @@ open class DataUsageList : DashboardFragment() { viewModel.chartDataFlow.collectLatestWithLifecycle(viewLifecycleOwner) { 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 Loading @@ -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]. */ private fun updatePolicy(isModifiable: Boolean) { val isBillingCycleModifiable = isModifiable && isActiveSubscription() dataUsageListHeaderController?.setConfigButtonVisible(isBillingCycleModifiable) chartDataUsagePreferenceController?.setBillingCycleModifiable(isBillingCycleModifiable) dataUsageListHeaderController?.setConfigButtonVisible(isModifiable) chartDataUsagePreferenceController?.setBillingCycleModifiable(isModifiable) } private fun isActiveSubscription(): Boolean = requireContext().requireSubscriptionManager().getActiveSubscriptionInfo(subId) != null /** * Updates the chart and detail data when initial loaded or selected cycle changed. */ Loading @@ -187,7 +181,7 @@ open class DataUsageList : DashboardFragment() { /** Updates applications data usage. */ private fun updateApps(usageData: NetworkUsageData) { dataUsageListAppsController?.update( carrierId = subscriptionInfoEntity?.carrierId, subId = subId, startTime = usageData.startTime, endTime = usageData.endTime, ) Loading
src/com/android/settings/datausage/DataUsageListAppsController.kt +6 −1 Original line number Diff line number Diff line Loading @@ -20,6 +20,7 @@ import android.app.ActivityManager import android.content.Context import android.net.NetworkTemplate import android.os.Bundle import android.telephony.SubscriptionManager import androidx.annotation.OpenForTesting import androidx.annotation.VisibleForTesting import androidx.lifecycle.LifecycleCoroutineScope Loading @@ -32,6 +33,7 @@ import com.android.settings.core.BasePreferenceController import com.android.settings.core.SubSettingLauncher import com.android.settings.datausage.lib.AppDataUsageRepository import com.android.settings.datausage.lib.NetworkUsageData import com.android.settings.network.telephony.requireSubscriptionManager import com.android.settingslib.AppItem import com.android.settingslib.net.UidDetailProvider import kotlinx.coroutines.Dispatchers Loading Loading @@ -74,8 +76,11 @@ open class DataUsageListAppsController(context: Context, preferenceKey: String) 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 carrierId = if (SubscriptionManager.isValidSubscriptionId(subId)) { mContext.requireSubscriptionManager().getActiveSubscriptionInfo(subId)?.carrierId } else null repository.getAppPercent(carrierId, startTime, endTime).map { (appItem, percent) -> AppDataUsagePreference(mContext, appItem, percent, uidDetailProvider).apply { setOnPreferenceClickListener { Loading
src/com/android/settings/network/NetworkProviderSettings.java +2 −1 Original line number Diff line number Diff line Loading @@ -36,6 +36,7 @@ import android.os.PowerManager; import android.os.UserHandle; import android.os.UserManager; import android.provider.Settings; import android.telephony.SubscriptionManager; import android.telephony.TelephonyManager; import android.text.TextUtils; import android.util.EventLog; Loading Loading @@ -370,7 +371,7 @@ public class NetworkProviderSettings extends RestrictedSettingsFragment mDataUsagePreference = findPreference(PREF_KEY_DATA_USAGE); mDataUsagePreference.setVisible(DataUsageUtils.hasWifiRadio(getContext())); mDataUsagePreference.setTemplate(new NetworkTemplate.Builder(NetworkTemplate.MATCH_WIFI) .build(), 0 /*subId*/); .build(), SubscriptionManager.INVALID_SUBSCRIPTION_ID); mResetInternetPreference = findPreference(PREF_KEY_RESET_INTERNET); if (mResetInternetPreference != null) { mResetInternetPreference.setVisible(false); Loading
tests/robotests/src/com/android/settings/network/NetworkProviderSettingsTest.java +3 −1 Original line number Diff line number Diff line Loading @@ -51,6 +51,7 @@ import android.os.Bundle; import android.os.PowerManager; import android.os.UserManager; import android.provider.Settings; import android.telephony.SubscriptionManager; import android.view.ContextMenu; import android.view.Menu; import android.view.MenuItem; Loading Loading @@ -319,7 +320,8 @@ public class NetworkProviderSettingsTest { mNetworkProviderSettings.onCreate(Bundle.EMPTY); verify(mDataUsagePreference).setVisible(true); verify(mDataUsagePreference).setTemplate(any(), eq(0) /*subId*/); verify(mDataUsagePreference) .setTemplate(any(), eq(SubscriptionManager.INVALID_SUBSCRIPTION_ID)); } @Test Loading