Add data usage header to mobile network details page
As a part of the work for subscriptions UI improvements, we want to show data usage information at the top of the mobile network details page, and those details need to be specific to the particular subscription we're showing details for, even if that SIM isn't the current default one. This is useful for seeing data usage across your SIMs in dual-SIM devices. This CL adapts our already existing DataUsageSummaryPreferenceController class so that if can be used on any fragment instead of just the DataUsageSummary one, and changes it to take an explicit subscription id instead of assuming it should use the default one. Bug: 122670283 Test: make RunSettingsRoboTests Change-Id: I41e307b0f32580c73b08adec7cabf01c96d7e835
This commit is contained in:
@@ -34,11 +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.TelephonyManager;
|
||||
|
||||
import androidx.fragment.app.FragmentActivity;
|
||||
import androidx.preference.PreferenceFragmentCompat;
|
||||
import androidx.recyclerview.widget.RecyclerView;
|
||||
|
||||
import com.android.internal.logging.nano.MetricsProto;
|
||||
@@ -92,7 +92,7 @@ public class DataUsageSummaryPreferenceControllerTest {
|
||||
@Mock(answer = Answers.RETURNS_DEEP_STUBS)
|
||||
private EntityHeaderController mHeaderController;
|
||||
@Mock
|
||||
private DataUsageSummary mDataUsageSummary;
|
||||
private PreferenceFragmentCompat mPreferenceFragment;
|
||||
@Mock
|
||||
private TelephonyManager mTelephonyManager;
|
||||
@Mock
|
||||
@@ -104,6 +104,7 @@ public class DataUsageSummaryPreferenceControllerTest {
|
||||
private FragmentActivity mActivity;
|
||||
private Context mContext;
|
||||
private DataUsageSummaryPreferenceController mController;
|
||||
private int mDefaultSubscriptionId;
|
||||
|
||||
@Before
|
||||
public void setUp() {
|
||||
@@ -125,6 +126,7 @@ public class DataUsageSummaryPreferenceControllerTest {
|
||||
.thenReturn(mConnectivityManager);
|
||||
when(mTelephonyManager.getSimState()).thenReturn(TelephonyManager.SIM_STATE_READY);
|
||||
when(mConnectivityManager.isNetworkSupported(TYPE_WIFI)).thenReturn(false);
|
||||
mDefaultSubscriptionId = 1234;
|
||||
mController = new DataUsageSummaryPreferenceController(
|
||||
mDataUsageController,
|
||||
mDataInfoController,
|
||||
@@ -133,7 +135,7 @@ public class DataUsageSummaryPreferenceControllerTest {
|
||||
R.string.cell_data_template,
|
||||
true,
|
||||
null,
|
||||
mActivity, null, null, null);
|
||||
mActivity, null, null, null, mDefaultSubscriptionId);
|
||||
}
|
||||
|
||||
@After
|
||||
@@ -355,11 +357,7 @@ public class DataUsageSummaryPreferenceControllerTest {
|
||||
R.string.cell_data_template,
|
||||
true,
|
||||
mSubscriptionManager,
|
||||
mActivity, null, null, null);
|
||||
|
||||
final SubscriptionInfo subInfo = new SubscriptionInfo(0, "123456", 0, "name", "carrier",
|
||||
0, 0, "number", 0, null, "123", "456", "ZX", false, null, null);
|
||||
when(mSubscriptionManager.getDefaultDataSubscriptionInfo()).thenReturn(subInfo);
|
||||
mActivity, null, null, null, mDefaultSubscriptionId);
|
||||
assertThat(mController.getAvailabilityStatus()).isEqualTo(AVAILABLE);
|
||||
}
|
||||
|
||||
@@ -373,7 +371,7 @@ public class DataUsageSummaryPreferenceControllerTest {
|
||||
R.string.cell_data_template,
|
||||
true,
|
||||
mSubscriptionManager,
|
||||
mActivity, null, null, null);
|
||||
mActivity, null, null, null, mDefaultSubscriptionId);
|
||||
|
||||
when(mTelephonyManager.getSimState()).thenReturn(TelephonyManager.SIM_STATE_ABSENT);
|
||||
when(mConnectivityManager.isNetworkSupported(TYPE_WIFI)).thenReturn(false);
|
||||
@@ -390,7 +388,7 @@ public class DataUsageSummaryPreferenceControllerTest {
|
||||
R.string.cell_data_template,
|
||||
true,
|
||||
mSubscriptionManager,
|
||||
mActivity, null, null, null);
|
||||
mActivity, null, null, null, mDefaultSubscriptionId);
|
||||
|
||||
when(mTelephonyManager.getSimState()).thenReturn(TelephonyManager.SIM_STATE_ABSENT);
|
||||
when(mConnectivityManager.isNetworkSupported(TYPE_WIFI)).thenReturn(true);
|
||||
@@ -409,9 +407,10 @@ public class DataUsageSummaryPreferenceControllerTest {
|
||||
R.string.cell_data_template,
|
||||
true,
|
||||
mSubscriptionManager,
|
||||
mActivity, mLifecycle, mHeaderController, mDataUsageSummary);
|
||||
mActivity, mLifecycle, mHeaderController, mPreferenceFragment,
|
||||
mDefaultSubscriptionId);
|
||||
|
||||
when(mDataUsageSummary.getListView()).thenReturn(recyclerView);
|
||||
when(mPreferenceFragment.getListView()).thenReturn(recyclerView);
|
||||
|
||||
mController.onStart();
|
||||
|
||||
|
@@ -0,0 +1,113 @@
|
||||
/*
|
||||
* Copyright (C) 2019 The Android Open Source Project
|
||||
*
|
||||
* Licensed under the Apache License, Version 2.0 (the "License");
|
||||
* you may not use this file except in compliance with the License.
|
||||
* You may obtain a copy of the License at
|
||||
*
|
||||
* http://www.apache.org/licenses/LICENSE-2.0
|
||||
*
|
||||
* Unless required by applicable law or agreed to in writing, software
|
||||
* distributed under the License is distributed on an "AS IS" BASIS,
|
||||
* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||
* See the License for the specific language governing permissions and
|
||||
* limitations under the License.
|
||||
*/
|
||||
|
||||
package com.android.settings.network.telephony;
|
||||
|
||||
import static com.google.common.truth.Truth.assertThat;
|
||||
|
||||
import static org.mockito.ArgumentMatchers.anyInt;
|
||||
import static org.mockito.Mockito.mock;
|
||||
import static org.mockito.Mockito.spy;
|
||||
import static org.mockito.Mockito.when;
|
||||
|
||||
import android.app.usage.NetworkStatsManager;
|
||||
import android.content.Context;
|
||||
import android.net.NetworkPolicyManager;
|
||||
import android.os.Bundle;
|
||||
import android.provider.Settings;
|
||||
import android.telephony.TelephonyManager;
|
||||
|
||||
import com.android.settings.core.FeatureFlags;
|
||||
import com.android.settings.datausage.DataUsageSummaryPreferenceController;
|
||||
import com.android.settings.development.featureflags.FeatureFlagPersistent;
|
||||
import com.android.settings.testutils.shadow.ShadowEntityHeaderController;
|
||||
import com.android.settings.widget.EntityHeaderController;
|
||||
import com.android.settingslib.core.AbstractPreferenceController;
|
||||
|
||||
import org.junit.Before;
|
||||
import org.junit.Test;
|
||||
import org.junit.runner.RunWith;
|
||||
import org.mockito.Mock;
|
||||
import org.mockito.MockitoAnnotations;
|
||||
import org.robolectric.RobolectricTestRunner;
|
||||
import org.robolectric.RuntimeEnvironment;
|
||||
import org.robolectric.annotation.Config;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
import androidx.fragment.app.FragmentActivity;
|
||||
|
||||
@RunWith(RobolectricTestRunner.class)
|
||||
@Config(shadows = ShadowEntityHeaderController.class)
|
||||
public class MobileNetworkSettingsTest {
|
||||
@Mock
|
||||
private TelephonyManager mTelephonyManager;
|
||||
@Mock
|
||||
private NetworkStatsManager mNetworkStatsManager;
|
||||
@Mock
|
||||
private NetworkPolicyManager mNetworkPolicyManager;
|
||||
@Mock
|
||||
private FragmentActivity mActivity;
|
||||
|
||||
private Context mContext;
|
||||
private MobileNetworkSettings mFragment;
|
||||
|
||||
@Before
|
||||
public void setUp() {
|
||||
MockitoAnnotations.initMocks(this);
|
||||
mContext = spy(RuntimeEnvironment.application);
|
||||
when(mContext.getSystemService(Context.TELEPHONY_SERVICE)).thenReturn(mTelephonyManager);
|
||||
when(mTelephonyManager.createForSubscriptionId(anyInt())).thenReturn(mTelephonyManager);
|
||||
when(mContext.getSystemService(NetworkStatsManager.class)).thenReturn(mNetworkStatsManager);
|
||||
ShadowEntityHeaderController.setUseMock(mock(EntityHeaderController.class));
|
||||
|
||||
mFragment = spy(new MobileNetworkSettings());
|
||||
final Bundle args = new Bundle();
|
||||
final int subscriptionId = 1234;
|
||||
args.putInt(Settings.EXTRA_SUB_ID, subscriptionId);
|
||||
mFragment.setArguments(args);
|
||||
when(mFragment.getActivity()).thenReturn(mActivity);
|
||||
when(mActivity.getSystemService(NetworkPolicyManager.class)).thenReturn(
|
||||
mNetworkPolicyManager);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void onAttach_noCrash() {
|
||||
mFragment.onAttach(mContext);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void createPreferenceControllers_noV2Flag_noDataUsageSummaryController() {
|
||||
final List<AbstractPreferenceController> controllers =
|
||||
mFragment.createPreferenceControllers(mContext);
|
||||
assertThat(controllers.stream().filter(
|
||||
c -> c.getClass().equals(DataUsageSummaryPreferenceController.class))
|
||||
.count())
|
||||
.isEqualTo(0);
|
||||
}
|
||||
|
||||
@Test
|
||||
public void createPreferenceControllers_v2Flag_createsDataUsageSummaryController() {
|
||||
FeatureFlagPersistent.setEnabled(mContext, FeatureFlags.NETWORK_INTERNET_V2, true);
|
||||
|
||||
final List<AbstractPreferenceController> controllers =
|
||||
mFragment.createPreferenceControllers(mContext);
|
||||
assertThat(controllers.stream().filter(
|
||||
c -> c.getClass().equals(DataUsageSummaryPreferenceController.class))
|
||||
.count())
|
||||
.isEqualTo(1);
|
||||
}
|
||||
}
|
Reference in New Issue
Block a user