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

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

Merge "Not use SubscriptionInfoEntity in DataUsageList" into main

parents e25c2082 af56a3ea
Loading
Loading
Loading
Loading
+14 −20
Original line number Diff line number Diff line
@@ -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

/**
@@ -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
@@ -90,7 +86,6 @@ open class DataUsageList : DashboardFragment() {
            finish()
            return
        }
        updateSubscriptionInfoEntity()
        dataUsageListAppsController = use(DataUsageListAppsController::class.java).apply {
            init(template)
        }
@@ -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
@@ -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.
     */
@@ -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,
        )
+6 −1
Original line number Diff line number Diff line
@@ -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
@@ -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
@@ -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 {
+2 −1
Original line number Diff line number Diff line
@@ -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;
@@ -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);
+3 −1
Original line number Diff line number Diff line
@@ -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;
@@ -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