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

Commit 8c5bd755 authored by Chaohui Wang's avatar Chaohui Wang
Browse files

Use BillingCycleRepository in DataUsageList

Unify the enable logic for the "Data warning & limit" page.

Bug: 290856342
Test: manual - on DataUsageList
Test: m RunSettingsRoboTests
Change-Id: I3014461ef21768b5d0eb6d91873a4ba52d20f6bf
parent c39acee1
Loading
Loading
Loading
Loading
+1 −0
Original line number Diff line number Diff line
@@ -49,6 +49,7 @@ class BillingCyclePreference @JvmOverloads constructor(
        this.subId = subId
        summary = null
        updateEnabled()
        intent = intent
    }

    override fun onAttached() {
+0 −45
Original line number Diff line number Diff line
@@ -15,23 +15,13 @@
package com.android.settings.datausage;

import android.content.Context;
import android.net.NetworkPolicy;
import android.net.NetworkPolicyManager;
import android.os.Bundle;
import android.os.INetworkManagementService;
import android.os.RemoteException;
import android.os.ServiceManager;
import android.os.UserManager;
import android.telephony.SubscriptionManager;
import android.telephony.TelephonyManager;
import android.util.Log;

import com.android.settings.dashboard.DashboardFragment;
import com.android.settingslib.NetworkPolicyEditor;

public abstract class DataUsageBaseFragment extends DashboardFragment {
    private static final String TAG = "DataUsageBase";
    private static final String ETHERNET = "ethernet";

    protected final TemplatePreference.NetworkServices services =
            new TemplatePreference.NetworkServices();
@@ -41,16 +31,10 @@ public abstract class DataUsageBaseFragment extends DashboardFragment {
        super.onCreate(icicle);
        Context context = getContext();

        services.mNetworkService = INetworkManagementService.Stub.asInterface(
                ServiceManager.getService(Context.NETWORKMANAGEMENT_SERVICE));
        services.mPolicyManager = (NetworkPolicyManager) context
                .getSystemService(Context.NETWORK_POLICY_SERVICE);

        services.mPolicyEditor = new NetworkPolicyEditor(services.mPolicyManager);

        services.mTelephonyManager = context.getSystemService(TelephonyManager.class);
        services.mSubscriptionManager = SubscriptionManager.from(context);
        services.mUserManager = UserManager.get(context);
    }

    @Override
@@ -58,33 +42,4 @@ public abstract class DataUsageBaseFragment extends DashboardFragment {
        super.onResume();
        services.mPolicyEditor.read();
    }

    protected boolean isAdmin() {
        return services.mUserManager.isAdminUser();
    }

    protected boolean isMobileDataAvailable(int subId) {
        return services.mSubscriptionManager.getActiveSubscriptionInfo(subId) != null;
    }

    protected boolean isNetworkPolicyModifiable(NetworkPolicy policy, int subId) {
        return policy != null && isBandwidthControlEnabled() && services.mUserManager.isAdminUser()
                && isDataEnabled(subId);
    }

    private boolean isDataEnabled(int subId) {
        if (subId == SubscriptionManager.INVALID_SUBSCRIPTION_ID) {
            return true;
        }
        return services.mTelephonyManager.getDataEnabled(subId);
    }

    protected boolean isBandwidthControlEnabled() {
        try {
            return services.mNetworkService.isBandwidthControlEnabled();
        } catch (RemoteException e) {
            Log.w(TAG, "problem talking with INetworkManagementService: ", e);
            return false;
        }
    }
}
+17 −4
Original line number Diff line number Diff line
@@ -32,7 +32,6 @@ import android.view.View.AccessibilityDelegate;
import android.view.accessibility.AccessibilityEvent;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemSelectedListener;
import android.widget.ImageView;
import android.widget.Spinner;

import androidx.annotation.NonNull;
@@ -46,6 +45,7 @@ import androidx.preference.Preference;
import com.android.settings.R;
import com.android.settings.core.SubSettingLauncher;
import com.android.settings.datausage.CycleAdapter.SpinnerInterface;
import com.android.settings.datausage.lib.BillingCycleRepository;
import com.android.settings.network.MobileDataEnabledListener;
import com.android.settings.network.MobileNetworkRepository;
import com.android.settings.widget.LoadingViewController;
@@ -108,6 +108,7 @@ public class DataUsageList extends DataUsageBaseFragment
    private MobileNetworkRepository mMobileNetworkRepository;
    private SubscriptionInfoEntity mSubscriptionInfoEntity;
    private DataUsageListAppsController mDataUsageListAppsController;
    private BillingCycleRepository mBillingCycleRepository;

    @Override
    public int getMetricsCategory() {
@@ -125,7 +126,8 @@ public class DataUsageList extends DataUsageBaseFragment
        }

        final Activity activity = getActivity();
        if (!isBandwidthControlEnabled()) {
        mBillingCycleRepository = createBillingCycleRepository();
        if (!mBillingCycleRepository.isBandwidthControlEnabled()) {
            Log.w(TAG, "No bandwidth control; leaving");
            activity.finish();
            return;
@@ -146,6 +148,12 @@ public class DataUsageList extends DataUsageBaseFragment
        mDataUsageListAppsController.init(mTemplate);
    }

    @VisibleForTesting
    @NonNull
    BillingCycleRepository createBillingCycleRepository() {
        return new BillingCycleRepository(requireContext());
    }

    @Override
    public void onViewCreated(@NonNull View v, Bundle savedInstanceState) {
        super.onViewCreated(v, savedInstanceState);
@@ -286,10 +294,9 @@ public class DataUsageList extends DataUsageBaseFragment
        final NetworkPolicy policy = services.mPolicyEditor.getPolicy(mTemplate);
        final View configureButton = mHeader.findViewById(R.id.filter_settings);
        //SUB SELECT
        if (isNetworkPolicyModifiable(policy, mSubId) && isMobileDataAvailable(mSubId)) {
        if (policy != null && isMobileDataAvailable()) {
            mChart.setNetworkPolicy(policy);
            configureButton.setVisibility(View.VISIBLE);
            ((ImageView) configureButton).setColorFilter(android.R.color.white);
        } else {
            // controls are disabled; don't bind warning/limit sweeps
            mChart.setNetworkPolicy(null);
@@ -304,6 +311,12 @@ public class DataUsageList extends DataUsageBaseFragment
        updateSelectedCycle();
    }

    private boolean isMobileDataAvailable() {
        return mBillingCycleRepository.isModifiable(mSubId)
                && SubscriptionManager.from(requireContext())
                .getActiveSubscriptionInfo(mSubId) != null;
    }

    /**
     * Updates the chart and detail data when initial loaded or selected cycle changed.
     */
+4 −2
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 androidx.annotation.OpenForTesting
import androidx.annotation.VisibleForTesting
import androidx.lifecycle.LifecycleCoroutineScope
import androidx.lifecycle.LifecycleOwner
@@ -37,7 +38,8 @@ import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.launch
import kotlinx.coroutines.withContext

class DataUsageListAppsController(context: Context, preferenceKey: String) :
@OpenForTesting
open class DataUsageListAppsController(context: Context, preferenceKey: String) :
    BasePreferenceController(context, preferenceKey) {

    private val uidDetailProvider = UidDetailProvider(context)
@@ -48,7 +50,7 @@ class DataUsageListAppsController(context: Context, preferenceKey: String) :

    private var cycleData: List<NetworkCycleChartData>? = null

    fun init(template: NetworkTemplate) {
    open fun init(template: NetworkTemplate) {
        this.template = template
        repository = AppDataUsageRepository(
            context = mContext,
+1 −1
Original line number Diff line number Diff line
@@ -103,7 +103,7 @@ public class DataUsageSummary extends DataUsageBaseFragment implements DataUsage
        mDefaultTemplate = DataUsageUtils.getDefaultTemplate(context, defaultSubId);
        mSummaryPreference = findPreference(KEY_STATUS_HEADER);

        if (!hasMobileData || !isAdmin()) {
        if (!hasMobileData || !UserManager.get(context).isAdminUser()) {
            removePreference(KEY_RESTRICT_BACKGROUND);
        }
        boolean hasWifiRadio = DataUsageUtils.hasWifiRadio(context);
Loading