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

Commit 6fb4a18d authored by Bonian Chen's avatar Bonian Chen Committed by Android (Google) Code Review
Browse files

Merge "[Settings] Refactor test case DataUsageSummaryPreferenceControllerTest" into rvc-dev

parents 56f06c59 dcef4237
Loading
Loading
Loading
Loading
+40 −47
Original line number Diff line number Diff line
@@ -68,13 +68,12 @@ public class DataUsageSummaryPreferenceController extends BasePreferenceControll
    private final EntityHeaderController mEntityHeaderController;
    private final Lifecycle mLifecycle;
    private final PreferenceFragmentCompat mFragment;
    protected final DataUsageController mDataUsageController;
    protected final DataUsageInfoController mDataInfoController;
    private final NetworkTemplate mDefaultTemplate;
    protected final NetworkPolicyEditor mPolicyEditor;
    private final int mDataUsageTemplate;
    private final boolean mHasMobileData;
    private final SubscriptionManager mSubscriptionManager;
    protected DataUsageController mDataUsageController;
    protected DataUsageInfoController mDataInfoController;
    private NetworkTemplate mDefaultTemplate;
    protected NetworkPolicyEditor mPolicyEditor;
    private int mDataUsageTemplate;
    private boolean mHasMobileData;

    /** Name of the carrier, or null if not available */
    private CharSequence mCarrierName;
@@ -112,29 +111,31 @@ public class DataUsageSummaryPreferenceController extends BasePreferenceControll
                fragment, null);
        mLifecycle = lifecycle;
        mFragment = fragment;
        init(subscriptionId);
    }

    protected void init(int subscriptionId) {
        mSubscriptionId = subscriptionId;

        mDefaultTemplate = DataUsageUtils.getDefaultTemplate(activity, mSubscriptionId);
        NetworkPolicyManager policyManager = activity.getSystemService(NetworkPolicyManager.class);
        mDefaultTemplate = DataUsageUtils.getDefaultTemplate(mContext, mSubscriptionId);
        final NetworkPolicyManager policyManager =
                mContext.getSystemService(NetworkPolicyManager.class);
        mPolicyEditor = new NetworkPolicyEditor(policyManager);

        mHasMobileData = SubscriptionManager.isValidSubscriptionId(mSubscriptionId)
                && DataUsageUtils.hasMobileData(activity);
                && DataUsageUtils.hasMobileData(mContext);

        mDataUsageController = new DataUsageController(activity);
        mDataUsageController = new DataUsageController(mContext);
        mDataUsageController.setSubscriptionId(mSubscriptionId);
        mDataInfoController = new DataUsageInfoController();

        if (mHasMobileData) {
            mDataUsageTemplate = R.string.cell_data_template;
        } else if (DataUsageUtils.hasWifiRadio(activity)) {
        } else if (DataUsageUtils.hasWifiRadio(mContext)) {
            mDataUsageTemplate = R.string.wifi_data_template;
        } else {
            mDataUsageTemplate = R.string.ethernet_data_template;
        }

        mSubscriptionManager = (SubscriptionManager)
                mContext.getSystemService(Context.TELEPHONY_SUBSCRIPTION_SERVICE);
    }

    @VisibleForTesting
@@ -144,8 +145,6 @@ public class DataUsageSummaryPreferenceController extends BasePreferenceControll
            NetworkTemplate defaultTemplate,
            NetworkPolicyEditor policyEditor,
            int dataUsageTemplate,
            boolean hasMobileData,
            SubscriptionManager subscriptionManager,
            Activity activity,
            Lifecycle lifecycle,
            EntityHeaderController entityHeaderController,
@@ -157,8 +156,7 @@ public class DataUsageSummaryPreferenceController extends BasePreferenceControll
        mDefaultTemplate = defaultTemplate;
        mPolicyEditor = policyEditor;
        mDataUsageTemplate = dataUsageTemplate;
        mHasMobileData = hasMobileData;
        mSubscriptionManager = subscriptionManager;
        mHasMobileData = true;
        mActivity = activity;
        mLifecycle = lifecycle;
        mEntityHeaderController = entityHeaderController;
@@ -174,24 +172,25 @@ public class DataUsageSummaryPreferenceController extends BasePreferenceControll
    }

    @VisibleForTesting
    void setPlanValues(int dataPlanCount, long dataPlanSize, long dataPlanUse) {
        mDataplanCount = dataPlanCount;
        mDataplanSize = dataPlanSize;
        mDataBarSize = dataPlanSize;
        mDataplanUse = dataPlanUse;
    List<SubscriptionPlan> getSubscriptionPlans(int subscriptionId) {
        return ProxySubscriptionManager.getInstance(mContext).get()
                .getSubscriptionPlans(subscriptionId);
    }

    @VisibleForTesting
    SubscriptionInfo getSubscriptionInfo(int subscriptionId) {
        return ProxySubscriptionManager.getInstance(mContext)
                .getAccessibleSubscriptionInfo(subscriptionId);
    }

    @VisibleForTesting
    void setCarrierValues(String carrierName, long snapshotTime, long cycleEnd, Intent intent) {
        mCarrierName = carrierName;
        mSnapshotTime = snapshotTime;
        mCycleEnd = cycleEnd;
        mManageSubscriptionIntent = intent;
    boolean hasSim() {
        return DataUsageUtils.hasSim(mContext);
    }

    @Override
    public int getAvailabilityStatus() {
        return DataUsageUtils.hasSim(mActivity)
        return hasSim()
                || DataUsageUtils.hasWifiRadio(mContext) ? AVAILABLE : CONDITIONALLY_UNAVAILABLE;
    }

@@ -200,7 +199,8 @@ public class DataUsageSummaryPreferenceController extends BasePreferenceControll
        DataUsageSummaryPreference summaryPreference = (DataUsageSummaryPreference) preference;

        final DataUsageController.DataUsageInfo info;
        if (DataUsageUtils.hasSim(mActivity)) {
        final SubscriptionInfo subInfo = getSubscriptionInfo(mSubscriptionId);
        if (hasSim()) {
            info = mDataUsageController.getDataUsageInfo(mDefaultTemplate);
            mDataInfoController.updateDataLimit(info, mPolicyEditor.getPolicy(mDefaultTemplate));
            summaryPreference.setWifiMode(/* isWifiMode */ false,
@@ -223,9 +223,7 @@ public class DataUsageSummaryPreferenceController extends BasePreferenceControll
            return;
        }

        if (mSubscriptionManager != null) {
            refreshDataplanInfo(info);
        }
        refreshDataplanInfo(info, subInfo);

        if (info.warningLevel > 0 && info.limitLevel > 0) {
            summaryPreference.setLimitInfo(TextUtils.expandTemplate(
@@ -260,7 +258,8 @@ public class DataUsageSummaryPreferenceController extends BasePreferenceControll

    // TODO(b/70950124) add test for this method once the robolectric shadow run script is
    // completed (b/3526807)
    private void refreshDataplanInfo(DataUsageController.DataUsageInfo info) {
    private void refreshDataplanInfo(DataUsageController.DataUsageInfo info,
            SubscriptionInfo subInfo) {
        // reset data before overwriting
        mCarrierName = null;
        mDataplanCount = 0;
@@ -271,16 +270,10 @@ public class DataUsageSummaryPreferenceController extends BasePreferenceControll
        mCycleEnd = info.cycleEnd;
        mSnapshotTime = -1L;

        final ProxySubscriptionManager proxySubsciptionMgr =
                ProxySubscriptionManager.getInstance(mContext);
        final SubscriptionInfo subInfo = proxySubsciptionMgr
                .getAccessibleSubscriptionInfo(mSubscriptionId);
        if (subInfo != null && mHasMobileData) {
            mCarrierName = subInfo.getCarrierName();
            List<SubscriptionPlan> plans = mSubscriptionManager.getSubscriptionPlans(
                    mSubscriptionId);
            final SubscriptionPlan primaryPlan = getPrimaryPlan(mSubscriptionManager,
                    mSubscriptionId);
            final List<SubscriptionPlan> plans = getSubscriptionPlans(mSubscriptionId);
            final SubscriptionPlan primaryPlan = getPrimaryPlan(plans);

            if (primaryPlan != null) {
                mDataplanCount = plans.size();
@@ -313,7 +306,8 @@ public class DataUsageSummaryPreferenceController extends BasePreferenceControll
     *         {@code null} if no carrier app is defined, or if the defined
     *         carrier app provides no management activity.
     */
    private Intent createManageSubscriptionIntent(int subId) {
    @VisibleForTesting
    Intent createManageSubscriptionIntent(int subId) {
        final INetworkPolicyManager iNetPolicyManager = INetworkPolicyManager.Stub.asInterface(
                ServiceManager.getService(Context.NETWORK_POLICY_SERVICE));
        String owner = "";
@@ -327,7 +321,7 @@ public class DataUsageSummaryPreferenceController extends BasePreferenceControll
            return null;
        }

        final List<SubscriptionPlan> plans = mSubscriptionManager.getSubscriptionPlans(subId);
        final List<SubscriptionPlan> plans = getSubscriptionPlans(subId);
        if (plans.isEmpty()) {
            return null;
        }
@@ -344,8 +338,7 @@ public class DataUsageSummaryPreferenceController extends BasePreferenceControll
        return intent;
    }

    public static SubscriptionPlan getPrimaryPlan(SubscriptionManager subManager, int primaryId) {
        List<SubscriptionPlan> plans = subManager.getSubscriptionPlans(primaryId);
    private static SubscriptionPlan getPrimaryPlan(List<SubscriptionPlan> plans) {
        if (CollectionUtils.isEmpty(plans)) {
            return null;
        }
+102 −79
Original line number Diff line number Diff line
@@ -34,8 +34,11 @@ import android.content.Context;
import android.content.Intent;
import android.net.ConnectivityManager;
import android.net.NetworkTemplate;
import android.telephony.SubscriptionInfo;
import android.telephony.SubscriptionManager;
import android.telephony.SubscriptionPlan;
import android.telephony.TelephonyManager;
import android.util.RecurrenceRule;

import androidx.fragment.app.FragmentActivity;
import androidx.preference.PreferenceFragmentCompat;
@@ -64,6 +67,10 @@ import org.robolectric.RobolectricTestRunner;
import org.robolectric.RuntimeEnvironment;
import org.robolectric.annotation.Config;

import java.time.Instant;
import java.time.ZoneId;
import java.util.ArrayList;
import java.util.List;
import java.util.concurrent.TimeUnit;

@RunWith(RobolectricTestRunner.class)
@@ -87,7 +94,9 @@ public class DataUsageSummaryPreferenceControllerTest {
    @Mock
    private NetworkTemplate mNetworkTemplate;
    @Mock
    private SubscriptionManager mSubscriptionManager;
    private SubscriptionInfo mSubscriptionInfo;
    @Mock
    private SubscriptionPlan mSubscriptionPlan;
    @Mock
    private Lifecycle mLifecycle;
    @Mock(answer = Answers.RETURNS_DEEP_STUBS)
@@ -106,6 +115,7 @@ public class DataUsageSummaryPreferenceControllerTest {
    private Context mContext;
    private DataUsageSummaryPreferenceController mController;
    private int mDefaultSubscriptionId;
    private List<SubscriptionPlan> mSubscriptionPlans;

    @Before
    public void setUp() {
@@ -115,28 +125,43 @@ public class DataUsageSummaryPreferenceControllerTest {
        doReturn("%1$s %2%s").when(mContext)
                .getString(com.android.internal.R.string.fileSizeSuffix);

        mDefaultSubscriptionId = 1234;
        mSubscriptionPlans = new ArrayList<SubscriptionPlan>();

        mFactory = FakeFeatureFactory.setupForTest();
        when(mFactory.metricsFeatureProvider.getMetricsCategory(any(Object.class)))
                .thenReturn(MetricsProto.MetricsEvent.SETTINGS_APP_NOTIF_CATEGORY);
        ShadowEntityHeaderController.setUseMock(mHeaderController);
        mDataInfoController = new DataUsageInfoController();

        mDataInfoController = spy(new DataUsageInfoController());
        doReturn(-1L).when(mDataInfoController).getSummaryLimit(any());

        mActivity = spy(Robolectric.buildActivity(FragmentActivity.class).get());
        when(mActivity.getSystemService(TelephonyManager.class)).thenReturn(mTelephonyManager);
        doReturn(mTelephonyManager).when(mActivity).getSystemService(TelephonyManager.class);
        doReturn(mTelephonyManager).when(mTelephonyManager)
                .createForSubscriptionId(mDefaultSubscriptionId);
        when(mActivity.getSystemService(Context.CONNECTIVITY_SERVICE))
                .thenReturn(mConnectivityManager);
        when(mTelephonyManager.getSimState()).thenReturn(TelephonyManager.SIM_STATE_READY);
        doReturn(TelephonyManager.SIM_STATE_READY).when(mTelephonyManager).getSimState();
        when(mConnectivityManager.isNetworkSupported(TYPE_WIFI)).thenReturn(false);
        mDefaultSubscriptionId = 1234;
        mController = new DataUsageSummaryPreferenceController(

        mController = spy(new DataUsageSummaryPreferenceController(
                mDataUsageController,
                mDataInfoController,
                mNetworkTemplate,
                mPolicyEditor,
                R.string.cell_data_template,
                true,
                null,
                mActivity, null, null, null, mDefaultSubscriptionId);
                mActivity, null, null, null, mDefaultSubscriptionId));
        doReturn(null).when(mController).getSubscriptionInfo(
                SubscriptionManager.INVALID_SUBSCRIPTION_ID);
        doReturn(null).when(mController).getSubscriptionPlans(
                SubscriptionManager.INVALID_SUBSCRIPTION_ID);

        doReturn(CARRIER_NAME).when(mSubscriptionInfo).getCarrierName();
        doReturn(mSubscriptionInfo).when(mController).getSubscriptionInfo(mDefaultSubscriptionId);
        doReturn(mSubscriptionPlans).when(mController).getSubscriptionPlans(mDefaultSubscriptionId);

        doReturn(true).when(mController).hasSim();
    }

    @After
@@ -152,9 +177,10 @@ public class DataUsageSummaryPreferenceControllerTest {

        final Intent intent = new Intent();

        when(mDataUsageController.getDataUsageInfo(any())).thenReturn(info);
        mController.setPlanValues(1 /* dataPlanCount */, LIMIT1, USAGE1);
        mController.setCarrierValues(CARRIER_NAME, now - UPDATE_BACKOFF_MS, info.cycleEnd, intent);
        doReturn(info).when(mDataUsageController).getDataUsageInfo(any());
        setupTestDataUsage(LIMIT1, USAGE1, now - UPDATE_BACKOFF_MS);
        createTestDataPlan(info.cycleStart, info.cycleEnd);
        doReturn(intent).when(mController).createManageSubscriptionIntent(mDefaultSubscriptionId);

        mController.updateState(mSummaryPreference);

@@ -163,7 +189,8 @@ public class DataUsageSummaryPreferenceControllerTest {
        CharSequence value = captor.getValue();
        assertThat(value.toString()).isEqualTo("512 MB data warning / 1.00 GB data limit");

        verify(mSummaryPreference).setUsageInfo(info.cycleEnd, now - UPDATE_BACKOFF_MS,
        verify(mSummaryPreference).setUsageInfo((info.cycleEnd / 1000) * 1000,
                now - UPDATE_BACKOFF_MS,
                CARRIER_NAME, 1 /* numPlans */, intent);
        verify(mSummaryPreference).setChartEnabled(true);
        verify(mSummaryPreference).setWifiMode(false /* isWifiMode */, null /* usagePeriod */,
@@ -178,9 +205,8 @@ public class DataUsageSummaryPreferenceControllerTest {

        final Intent intent = new Intent();

        when(mDataUsageController.getDataUsageInfo(any())).thenReturn(info);
        mController.setPlanValues(0 /* dataPlanCount */, LIMIT1, USAGE1);
        mController.setCarrierValues(CARRIER_NAME, now - UPDATE_BACKOFF_MS, info.cycleEnd, intent);
        doReturn(info).when(mDataUsageController).getDataUsageInfo(any());
        setupTestDataUsage(LIMIT1, USAGE1, now - UPDATE_BACKOFF_MS);

        mController.updateState(mSummaryPreference);

@@ -189,8 +215,12 @@ public class DataUsageSummaryPreferenceControllerTest {
        CharSequence value = captor.getValue();
        assertThat(value.toString()).isEqualTo("512 MB data warning / 1.00 GB data limit");

        verify(mSummaryPreference).setUsageInfo(info.cycleEnd, now - UPDATE_BACKOFF_MS,
                CARRIER_NAME, 0 /* numPlans */, intent);
        verify(mSummaryPreference).setUsageInfo(
                info.cycleEnd,
                -1L /* snapshotTime */,
                CARRIER_NAME,
                0 /* numPlans */,
                null /* launchIntent */);
        verify(mSummaryPreference).setChartEnabled(true);
        verify(mSummaryPreference).setWifiMode(false /* isWifiMode */, null /* usagePeriod */,
                false /* isSingleWifi */);
@@ -202,10 +232,10 @@ public class DataUsageSummaryPreferenceControllerTest {
        final long now = System.currentTimeMillis();
        final DataUsageController.DataUsageInfo info = createTestDataUsageInfo(now);

        when(mDataUsageController.getDataUsageInfo(any())).thenReturn(info);
        mController.setPlanValues(0 /* dataPlanCount */, LIMIT1, USAGE1);
        mController.setCarrierValues(null /* carrierName */, -1L /* snapshotTime */,
                info.cycleEnd, null /* intent */);
        doReturn(info).when(mDataUsageController).getDataUsageInfo(any());
        doReturn(null).when(mSubscriptionInfo).getCarrierName();
        setupTestDataUsage(LIMIT1, USAGE1, -1L /* snapshotTime */);

        mController.updateState(mSummaryPreference);

        ArgumentCaptor<CharSequence> captor = ArgumentCaptor.forClass(CharSequence.class);
@@ -231,10 +261,10 @@ public class DataUsageSummaryPreferenceControllerTest {

        final DataUsageController.DataUsageInfo info = createTestDataUsageInfo(now);

        when(mDataUsageController.getDataUsageInfo(any())).thenReturn(info);
        mController.setPlanValues(0 /* dataPlanCount */, -1L /* dataPlanSize */, USAGE1);
        mController.setCarrierValues(null /* carrierName */, -1L /* snapshotTime */,
                info.cycleEnd, null /* intent */);
        doReturn(info).when(mDataUsageController).getDataUsageInfo(any());
        doReturn(null).when(mSubscriptionInfo).getCarrierName();
        setupTestDataUsage(-1L /* dataPlanSize */, USAGE1, -1L /* snapshotTime */);

        mController.updateState(mSummaryPreference);

        ArgumentCaptor<CharSequence> captor = ArgumentCaptor.forClass(CharSequence.class);
@@ -262,9 +292,8 @@ public class DataUsageSummaryPreferenceControllerTest {

        final Intent intent = new Intent();

        when(mDataUsageController.getDataUsageInfo(any())).thenReturn(info);
        mController.setPlanValues(0 /* dataPlanCount */, LIMIT1, USAGE1);
        mController.setCarrierValues(CARRIER_NAME, now - UPDATE_BACKOFF_MS, info.cycleEnd, intent);
        doReturn(info).when(mDataUsageController).getDataUsageInfo(any());
        setupTestDataUsage(LIMIT1, USAGE1, now - UPDATE_BACKOFF_MS);

        mController.updateState(mSummaryPreference);
        verify(mSummaryPreference).setLimitInfo(null);
@@ -280,9 +309,8 @@ public class DataUsageSummaryPreferenceControllerTest {

        final Intent intent = new Intent();

        when(mDataUsageController.getDataUsageInfo(any())).thenReturn(info);
        mController.setPlanValues(0 /* dataPlanCount */, LIMIT1, USAGE1);
        mController.setCarrierValues(CARRIER_NAME, now - UPDATE_BACKOFF_MS, info.cycleEnd, intent);
        doReturn(info).when(mDataUsageController).getDataUsageInfo(any());
        setupTestDataUsage(LIMIT1, USAGE1, now - UPDATE_BACKOFF_MS);

        mController.updateState(mSummaryPreference);

@@ -302,9 +330,8 @@ public class DataUsageSummaryPreferenceControllerTest {

        final Intent intent = new Intent();

        when(mDataUsageController.getDataUsageInfo(any())).thenReturn(info);
        mController.setPlanValues(0 /* dataPlanCount */, LIMIT1, USAGE1);
        mController.setCarrierValues(CARRIER_NAME, now - UPDATE_BACKOFF_MS, info.cycleEnd, intent);
        doReturn(info).when(mDataUsageController).getDataUsageInfo(any());
        setupTestDataUsage(LIMIT1, USAGE1, now - UPDATE_BACKOFF_MS);

        mController.updateState(mSummaryPreference);

@@ -324,9 +351,8 @@ public class DataUsageSummaryPreferenceControllerTest {

        final Intent intent = new Intent();

        when(mDataUsageController.getDataUsageInfo(any())).thenReturn(info);
        mController.setPlanValues(0 /* dataPlanCount */, LIMIT1, USAGE1);
        mController.setCarrierValues(CARRIER_NAME, now - UPDATE_BACKOFF_MS, info.cycleEnd, intent);
        doReturn(info).when(mDataUsageController).getDataUsageInfo(any());
        setupTestDataUsage(LIMIT1, USAGE1, now - UPDATE_BACKOFF_MS);

        mController.updateState(mSummaryPreference);

@@ -341,6 +367,11 @@ public class DataUsageSummaryPreferenceControllerTest {
    @Test
    @Ignore
    public void testSummaryUpdate_noSim_shouldSetWifiMode() {
        mController.init(SubscriptionManager.INVALID_SUBSCRIPTION_ID);
        mController.mDataUsageController = mDataUsageController;
        doReturn(TelephonyManager.SIM_STATE_ABSENT).when(mTelephonyManager).getSimState();
        doReturn(false).when(mController).hasSim();

        final long now = System.currentTimeMillis();
        final DataUsageController.DataUsageInfo info = createTestDataUsageInfo(now);
        info.warningLevel = BillingCycleSettings.MIB_IN_BYTES;
@@ -348,11 +379,9 @@ public class DataUsageSummaryPreferenceControllerTest {

        final Intent intent = new Intent();

        when(mDataUsageController.getDataUsageInfo(any())).thenReturn(info);
        mController.setPlanValues(0 /* dataPlanCount */, LIMIT1, USAGE1);
        mController.setCarrierValues(CARRIER_NAME, now - UPDATE_BACKOFF_MS, info.cycleEnd, intent);
        doReturn(info).when(mDataUsageController).getDataUsageInfo(any());
        setupTestDataUsage(LIMIT1, USAGE1, now - UPDATE_BACKOFF_MS);

        when(mTelephonyManager.getSimState()).thenReturn(TelephonyManager.SIM_STATE_ABSENT);
        mController.updateState(mSummaryPreference);

        verify(mSummaryPreference).setWifiMode(true /* isWifiMode */, info.period /* usagePeriod */,
@@ -366,50 +395,29 @@ public class DataUsageSummaryPreferenceControllerTest {
    @Test
    @Ignore
    public void testMobileData_preferenceAvailable() {
        mController = new DataUsageSummaryPreferenceController(
                mDataUsageController,
                mDataInfoController,
                mNetworkTemplate,
                mPolicyEditor,
                R.string.cell_data_template,
                true,
                mSubscriptionManager,
                mActivity, null, null, null, mDefaultSubscriptionId);
        assertThat(mController.getAvailabilityStatus()).isEqualTo(AVAILABLE);
    }

    @Test
    @Ignore
    public void testMobileData_noSimNoWifi_preferenceDisabled() {
        mController = new DataUsageSummaryPreferenceController(
                mDataUsageController,
                mDataInfoController,
                mNetworkTemplate,
                mPolicyEditor,
                R.string.cell_data_template,
                true,
                mSubscriptionManager,
                mActivity, null, null, null, mDefaultSubscriptionId);

        when(mTelephonyManager.getSimState()).thenReturn(TelephonyManager.SIM_STATE_ABSENT);
        final int subscriptionId = SubscriptionManager.INVALID_SUBSCRIPTION_ID;
        mController.init(subscriptionId);
        mController.mDataUsageController = mDataUsageController;
        doReturn(TelephonyManager.SIM_STATE_ABSENT).when(mTelephonyManager).getSimState();
        doReturn(false).when(mController).hasSim();
        when(mConnectivityManager.isNetworkSupported(TYPE_WIFI)).thenReturn(false);
        assertThat(mController.getAvailabilityStatus()).isEqualTo(CONDITIONALLY_UNAVAILABLE);
        assertThat(mController.getAvailabilityStatus())
                        .isEqualTo(CONDITIONALLY_UNAVAILABLE);
    }

    @Test
    @Ignore
    public void testMobileData_noSimWifi_preferenceDisabled() {
        mController = new DataUsageSummaryPreferenceController(
                mDataUsageController,
                mDataInfoController,
                mNetworkTemplate,
                mPolicyEditor,
                R.string.cell_data_template,
                true,
                mSubscriptionManager,
                mActivity, null, null, null, mDefaultSubscriptionId);

        when(mTelephonyManager.getSimState()).thenReturn(TelephonyManager.SIM_STATE_ABSENT);
        final int subscriptionId = SubscriptionManager.INVALID_SUBSCRIPTION_ID;
        mController.init(subscriptionId);
        mController.mDataUsageController = mDataUsageController;
        doReturn(TelephonyManager.SIM_STATE_ABSENT).when(mTelephonyManager).getSimState();
        when(mConnectivityManager.isNetworkSupported(TYPE_WIFI)).thenReturn(true);
        assertThat(mController.getAvailabilityStatus()).isEqualTo(AVAILABLE);
    }
@@ -418,16 +426,14 @@ public class DataUsageSummaryPreferenceControllerTest {
    public void testMobileData_entityHeaderSet() {
        final RecyclerView recyclerView = new RecyclerView(mActivity);

        mController = new DataUsageSummaryPreferenceController(
        mController = spy(new DataUsageSummaryPreferenceController(
                mDataUsageController,
                mDataInfoController,
                mNetworkTemplate,
                mPolicyEditor,
                R.string.cell_data_template,
                true,
                mSubscriptionManager,
                mActivity, mLifecycle, mHeaderController, mPreferenceFragment,
                mDefaultSubscriptionId);
                mDefaultSubscriptionId));

        when(mPreferenceFragment.getListView()).thenReturn(recyclerView);

@@ -450,4 +456,21 @@ public class DataUsageSummaryPreferenceControllerTest {
        info.cycleEnd = info.cycleStart + CYCLE_LENGTH_MS;
        return info;
    }

    private void setupTestDataUsage(long dataPlanSize, long dataUsageSize, long snapshotTime) {
        doReturn(dataPlanSize).when(mSubscriptionPlan).getDataLimitBytes();
        doReturn(dataUsageSize).when(mSubscriptionPlan).getDataUsageBytes();
        doReturn(snapshotTime).when(mSubscriptionPlan).getDataUsageTime();

        doReturn(dataPlanSize).when(mDataInfoController).getSummaryLimit(any());
    }

    private void createTestDataPlan(long startTime, long endTime) {
        final RecurrenceRule recurrenceRule = new RecurrenceRule(
                Instant.ofEpochMilli(startTime).atZone(ZoneId.systemDefault()),
                Instant.ofEpochMilli(endTime).atZone(ZoneId.systemDefault()),
                null);
        doReturn(recurrenceRule).when(mSubscriptionPlan).getCycleRule();
        mSubscriptionPlans.add(mSubscriptionPlan);
    }
}