Refactor few public static methods.

Move public static methods from DataUsageSummary to DataUsageBase.

Bug: 62349208
Test: make RunSettingsRoboTests -j40
Change-Id: I632f75f4c4f370fb225a9787267043fec20994e5
This commit is contained in:
Rajeev Kumar
2017-07-13 17:20:22 -07:00
parent 6ce4220862
commit 9664c1a55e
9 changed files with 201 additions and 119 deletions

View File

@@ -1,4 +1,4 @@
/**
/*
* Copyright (C) 2007 The Android Open Source Project
*
* Licensed under the Apache License, Version 2.0 (the "License"); you may not
@@ -67,7 +67,6 @@ import android.view.MenuItem;
import android.view.View;
import android.webkit.IWebViewUpdateService;
import android.widget.Button;
import com.android.internal.logging.nano.MetricsProto.MetricsEvent;
import com.android.internal.os.BatterySipper;
import com.android.internal.os.BatteryStatsHelper;
@@ -86,6 +85,7 @@ import com.android.settings.datausage.AppDataUsage;
import com.android.settings.datausage.DataUsageList;
import com.android.settings.datausage.DataUsageSummary;
import com.android.settings.development.DevelopmentSettingsEnabler;
import com.android.settings.datausage.DataUsageUtils;
import com.android.settings.fuelgauge.AdvancedPowerUsageDetail;
import com.android.settings.fuelgauge.BatteryEntry;
import com.android.settings.fuelgauge.BatteryStatsHelperLoader;
@@ -105,7 +105,6 @@ import com.android.settingslib.applications.StorageStatsSource;
import com.android.settingslib.applications.StorageStatsSource.AppStorageStats;
import com.android.settingslib.net.ChartData;
import com.android.settingslib.net.ChartDataLoader;
import java.lang.ref.WeakReference;
import java.util.ArrayList;
import java.util.HashSet;
@@ -1303,7 +1302,7 @@ public class InstalledAppDetails extends AppInfoBase
if (DataUsageList.hasReadyMobileRadio(context)) {
return NetworkTemplate.buildTemplateMobileWildcard();
}
if (DataUsageSummary.hasWifiRadio(context)) {
if (DataUsageUtils.hasWifiRadio(context)) {
return NetworkTemplate.buildTemplateWifiWildcard();
}
return NetworkTemplate.buildTemplateEthernet();

View File

@@ -14,6 +14,8 @@
package com.android.settings.datausage;
import static android.net.NetworkPolicyManager.POLICY_REJECT_METERED_BACKGROUND;
import android.app.Activity;
import android.app.LoaderManager;
import android.content.Context;
@@ -39,7 +41,6 @@ import android.util.IconDrawableFactory;
import android.util.Log;
import android.view.View;
import android.widget.AdapterView;
import com.android.internal.logging.nano.MetricsProto.MetricsEvent;
import com.android.settings.R;
import com.android.settings.applications.AppInfoBase;
@@ -52,8 +53,6 @@ import com.android.settingslib.net.ChartDataLoader;
import com.android.settingslib.net.UidDetail;
import com.android.settingslib.net.UidDetailProvider;
import static android.net.NetworkPolicyManager.POLICY_REJECT_METERED_BACKGROUND;
public class AppDataUsage extends DataUsageBase implements Preference.OnPreferenceChangeListener,
DataSaverBackend.Listener {
@@ -117,8 +116,8 @@ public class AppDataUsage extends DataUsageBase implements Preference.OnPreferen
: null;
if (mTemplate == null) {
Context context = getContext();
mTemplate = DataUsageSummary.getDefaultTemplate(context,
DataUsageSummary.getDefaultSubscriptionId(context));
mTemplate = DataUsageUtils.getDefaultTemplate(context,
DataUsageUtils.getDefaultSubscriptionId(context));
}
if (mAppItem == null) {
int uid = (args != null) ? args.getInt(AppInfoBase.ARG_PACKAGE_UID, -1)

View File

@@ -14,9 +14,6 @@
package com.android.settings.datausage;
import com.android.settings.SettingsPreferenceFragment;
import com.android.settingslib.NetworkPolicyEditor;
import android.content.Context;
import android.net.INetworkStatsService;
import android.net.NetworkPolicy;
@@ -29,9 +26,10 @@ import android.os.UserManager;
import android.telephony.SubscriptionManager;
import android.telephony.TelephonyManager;
import android.util.Log;
import com.android.settings.SettingsPreferenceFragment;
import com.android.settingslib.NetworkPolicyEditor;
public abstract class DataUsageBase extends SettingsPreferenceFragment {
private static final String TAG = "DataUsageBase";
protected final TemplatePreference.NetworkServices services =

View File

@@ -14,6 +14,12 @@
package com.android.settings.datausage;
import static android.net.ConnectivityManager.TYPE_MOBILE;
import static android.net.NetworkPolicyManager.POLICY_REJECT_METERED_BACKGROUND;
import static android.net.TrafficStats.UID_REMOVED;
import static android.net.TrafficStats.UID_TETHERING;
import static android.telephony.TelephonyManager.SIM_STATE_READY;
import android.app.ActivityManager;
import android.app.LoaderManager.LoaderCallbacks;
import android.content.Context;
@@ -46,7 +52,6 @@ import android.view.View;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemSelectedListener;
import android.widget.Spinner;
import com.android.internal.logging.nano.MetricsProto.MetricsEvent;
import com.android.settings.R;
import com.android.settings.datausage.CycleAdapter.SpinnerInterface;
@@ -56,19 +61,10 @@ import com.android.settingslib.net.ChartData;
import com.android.settingslib.net.ChartDataLoader;
import com.android.settingslib.net.SummaryForAllUidLoader;
import com.android.settingslib.net.UidDetailProvider;
import java.util.ArrayList;
import java.util.Collections;
import java.util.List;
import static android.net.ConnectivityManager.TYPE_MOBILE;
import static android.net.NetworkPolicyManager.POLICY_REJECT_METERED_BACKGROUND;
import static android.net.TrafficStats.UID_REMOVED;
import static android.net.TrafficStats.UID_TETHERING;
import static android.telephony.TelephonyManager.SIM_STATE_READY;
import static com.android.settings.datausage.DataUsageSummary.TEST_RADIOS;
import static com.android.settings.datausage.DataUsageSummary.TEST_RADIOS_PROP;
/**
* Panel showing data usage history across various networks, including options
* to inspect based on usage cycle and control through {@link NetworkPolicy}.
@@ -442,8 +438,8 @@ public class DataUsageList extends DataUsageBase {
* Test if device has a mobile data radio with SIM in ready state.
*/
public static boolean hasReadyMobileRadio(Context context) {
if (TEST_RADIOS) {
return SystemProperties.get(TEST_RADIOS_PROP).contains("mobile");
if (DataUsageUtils.TEST_RADIOS) {
return SystemProperties.get(DataUsageUtils.TEST_RADIOS_PROP).contains("mobile");
}
final ConnectivityManager conn = ConnectivityManager.from(context);
@@ -476,8 +472,8 @@ public class DataUsageList extends DataUsageBase {
* TODO: consider adding to TelephonyManager or SubscriptionManager.
*/
public static boolean hasReadyMobileRadio(Context context, int subId) {
if (TEST_RADIOS) {
return SystemProperties.get(TEST_RADIOS_PROP).contains("mobile");
if (DataUsageUtils.TEST_RADIOS) {
return SystemProperties.get(DataUsageUtils.TEST_RADIOS_PROP).contains("mobile");
}
final ConnectivityManager conn = ConnectivityManager.from(context);

View File

@@ -16,8 +16,6 @@ package com.android.settings.datausage;
import static android.net.wifi.WifiInfo.removeDoubleQuotes;
import static com.android.settings.datausage.DataUsageSummary.hasWifiRadio;
import android.app.backup.BackupManager;
import android.content.Context;
import android.content.res.Resources;
@@ -29,7 +27,6 @@ import android.support.v7.preference.DropDownPreference;
import android.support.v7.preference.Preference;
import android.support.v7.preference.PreferenceCategory;
import android.text.TextUtils;
import com.android.internal.logging.nano.MetricsProto.MetricsEvent;
import com.android.settings.R;
import com.android.settings.SettingsPreferenceFragment;
@@ -37,7 +34,6 @@ import com.android.settings.search.BaseSearchIndexProvider;
import com.android.settings.search.Indexable;
import com.android.settings.search.SearchIndexableRaw;
import com.android.settingslib.NetworkPolicyEditor;
import java.util.ArrayList;
import java.util.List;
@@ -83,7 +79,7 @@ public class DataUsageMeteredSettings extends SettingsPreferenceFragment impleme
getPreferenceScreen().removePreference(mMobileCategory);
mWifiCategory.removeAll();
if (hasWifiRadio(context) && mWifiManager.isWifiEnabled()) {
if (DataUsageUtils.hasWifiRadio(context) && mWifiManager.isWifiEnabled()) {
for (WifiConfiguration config : mWifiManager.getConfiguredNetworks()) {
final Preference pref = new MeteredPreference(getPrefContext(), config);
if (!TextUtils.isEmpty(pref.getTitle())) {
@@ -162,7 +158,7 @@ public class DataUsageMeteredSettings extends SettingsPreferenceFragment impleme
final WifiManager wifiManager =
(WifiManager) context.getSystemService(Context.WIFI_SERVICE);
if (hasWifiRadio(context) && wifiManager.isWifiEnabled()) {
if (DataUsageUtils.hasWifiRadio(context) && wifiManager.isWifiEnabled()) {
for (WifiConfiguration config : wifiManager.getConfiguredNetworks()) {
if (config.SSID != null) {
final String networkId = config.SSID;

View File

@@ -15,7 +15,6 @@
package com.android.settings.datausage;
import static android.net.ConnectivityManager.TYPE_ETHERNET;
import static android.net.ConnectivityManager.TYPE_WIFI;
import android.app.Activity;
import android.content.ComponentName;
@@ -38,7 +37,6 @@ import android.support.v7.preference.Preference;
import android.support.v7.preference.PreferenceScreen;
import android.telephony.SubscriptionInfo;
import android.telephony.SubscriptionManager;
import android.telephony.TelephonyManager;
import android.text.BidiFormatter;
import android.text.Spannable;
import android.text.SpannableString;
@@ -48,7 +46,6 @@ import android.text.style.RelativeSizeSpan;
import android.view.Menu;
import android.view.MenuInflater;
import android.view.MenuItem;
import com.android.internal.logging.nano.MetricsProto.MetricsEvent;
import com.android.settings.R;
import com.android.settings.SummaryPreference;
@@ -58,7 +55,6 @@ import com.android.settings.search.BaseSearchIndexProvider;
import com.android.settings.search.Indexable;
import com.android.settingslib.NetworkPolicyEditor;
import com.android.settingslib.net.DataUsageController;
import java.util.ArrayList;
import java.util.List;
@@ -66,9 +62,6 @@ public class DataUsageSummary extends DataUsageBase implements Indexable, DataUs
static final boolean LOGD = false;
public static final boolean TEST_RADIOS = false;
public static final String TEST_RADIOS_PROP = "test.radios";
public static final String KEY_RESTRICT_BACKGROUND = "restrict_background";
public static final String KEY_NETWORK_RESTRICTIONS = "network_restrictions";
@@ -101,16 +94,16 @@ public class DataUsageSummary extends DataUsageBase implements Indexable, DataUs
mWifiManager = (WifiManager) context.getSystemService(Context.WIFI_SERVICE);
mPolicyEditor = new NetworkPolicyEditor(policyManager);
boolean hasMobileData = hasMobileData(context);
boolean hasMobileData = DataUsageUtils.hasMobileData(context);
mDataUsageController = new DataUsageController(context);
mDataInfoController = new DataUsageInfoController();
addPreferencesFromResource(R.xml.data_usage);
int defaultSubId = getDefaultSubscriptionId(context);
int defaultSubId = DataUsageUtils.getDefaultSubscriptionId(context);
if (defaultSubId == SubscriptionManager.INVALID_SUBSCRIPTION_ID) {
hasMobileData = false;
}
mDefaultTemplate = getDefaultTemplate(context, defaultSubId);
mDefaultTemplate = DataUsageUtils.getDefaultTemplate(context, defaultSubId);
mSummaryPreference = (SummaryPreference) findPreference(KEY_STATUS_HEADER);
if (!hasMobileData || !isAdmin()) {
@@ -136,7 +129,7 @@ public class DataUsageSummary extends DataUsageBase implements Indexable, DataUs
removePreference(KEY_LIMIT_SUMMARY);
mSummaryPreference.setSelectable(false);
}
boolean hasWifiRadio = hasWifiRadio(context);
boolean hasWifiRadio = DataUsageUtils.hasWifiRadio(context);
if (hasWifiRadio) {
addWifiSection();
}
@@ -322,8 +315,8 @@ public class DataUsageSummary extends DataUsageBase implements Indexable, DataUs
* Test if device has an ethernet network connection.
*/
public boolean hasEthernet(Context context) {
if (TEST_RADIOS) {
return SystemProperties.get(TEST_RADIOS_PROP).contains("ethernet");
if (DataUsageUtils.TEST_RADIOS) {
return SystemProperties.get(DataUsageUtils.TEST_RADIOS_PROP).contains("ethernet");
}
final ConnectivityManager conn = ConnectivityManager.from(context);
@@ -348,53 +341,6 @@ public class DataUsageSummary extends DataUsageBase implements Indexable, DataUs
return hasEthernet && ethernetBytes > 0;
}
public static boolean hasMobileData(Context context) {
return ConnectivityManager.from(context).isNetworkSupported(
ConnectivityManager.TYPE_MOBILE);
}
/**
* Test if device has a Wi-Fi data radio.
*/
public static boolean hasWifiRadio(Context context) {
if (TEST_RADIOS) {
return SystemProperties.get(TEST_RADIOS_PROP).contains("wifi");
}
final ConnectivityManager conn = ConnectivityManager.from(context);
return conn.isNetworkSupported(TYPE_WIFI);
}
public static int getDefaultSubscriptionId(Context context) {
SubscriptionManager subManager = SubscriptionManager.from(context);
if (subManager == null) {
return SubscriptionManager.INVALID_SUBSCRIPTION_ID;
}
SubscriptionInfo subscriptionInfo = subManager.getDefaultDataSubscriptionInfo();
if (subscriptionInfo == null) {
List<SubscriptionInfo> list = subManager.getAllSubscriptionInfoList();
if (list.size() == 0) {
return SubscriptionManager.INVALID_SUBSCRIPTION_ID;
}
subscriptionInfo = list.get(0);
}
return subscriptionInfo.getSubscriptionId();
}
public static NetworkTemplate getDefaultTemplate(Context context, int defaultSubId) {
if (hasMobileData(context) && defaultSubId != SubscriptionManager.INVALID_SUBSCRIPTION_ID) {
TelephonyManager telephonyManager = TelephonyManager.from(context);
NetworkTemplate mobileAll = NetworkTemplate.buildTemplateMobileAll(
telephonyManager.getSubscriberId(defaultSubId));
return NetworkTemplate.normalize(mobileAll,
telephonyManager.getMergedSubscriberIds());
} else if (hasWifiRadio(context)) {
return NetworkTemplate.buildTemplateWifiWildcard();
} else {
return NetworkTemplate.buildTemplateEthernet();
}
}
@VisibleForTesting
void updateNetworkRestrictionSummary(NetworkRestrictionsPreference preference) {
if (preference == null) {
@@ -459,12 +405,12 @@ public class DataUsageSummary extends DataUsageBase implements Indexable, DataUs
resource.xmlResId = R.xml.data_usage;
resources.add(resource);
if (hasMobileData(context)) {
if (DataUsageUtils.hasMobileData(context)) {
resource = new SearchIndexableResource(context);
resource.xmlResId = R.xml.data_usage_cellular;
resources.add(resource);
}
if (hasWifiRadio(context)) {
if (DataUsageUtils.hasWifiRadio(context)) {
resource = new SearchIndexableResource(context);
resource.xmlResId = R.xml.data_usage_wifi;
resources.add(resource);
@@ -476,10 +422,10 @@ public class DataUsageSummary extends DataUsageBase implements Indexable, DataUs
public List<String> getNonIndexableKeys(Context context) {
List<String> keys = super.getNonIndexableKeys(context);
if (hasMobileData(context)) {
if (DataUsageUtils.hasMobileData(context)) {
keys.add(KEY_RESTRICT_BACKGROUND);
}
if (hasWifiRadio(context)) {
if (DataUsageUtils.hasWifiRadio(context)) {
keys.add(KEY_NETWORK_RESTRICTIONS);
}
keys.add(KEY_WIFI_USAGE_TITLE);

View File

@@ -0,0 +1,97 @@
/*
* Copyright (C) 2017 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.datausage;
import static android.net.ConnectivityManager.TYPE_WIFI;
import android.content.Context;
import android.net.ConnectivityManager;
import android.net.NetworkTemplate;
import android.os.SystemProperties;
import android.telephony.SubscriptionInfo;
import android.telephony.SubscriptionManager;
import android.telephony.TelephonyManager;
import java.util.List;
/**
* Utility methods for data usage classes.
*/
public final class DataUsageUtils {
static final boolean TEST_RADIOS = false;
static final String TEST_RADIOS_PROP = "test.radios";
private DataUsageUtils() {
}
/**
* Returns whether device has mobile data.
* TODO: This is the opposite to Utils.isWifiOnly(), it should be refactored into 1 method.
*/
static boolean hasMobileData(Context context) {
ConnectivityManager connectivityManager = ConnectivityManager.from(context);
return connectivityManager != null && connectivityManager
.isNetworkSupported(ConnectivityManager.TYPE_MOBILE);
}
/**
* Whether device has a Wi-Fi data radio.
*/
public static boolean hasWifiRadio(Context context) {
if (TEST_RADIOS) {
return SystemProperties.get(TEST_RADIOS_PROP).contains("wifi");
}
ConnectivityManager connectivityManager = ConnectivityManager.from(context);
return connectivityManager != null && connectivityManager.isNetworkSupported(TYPE_WIFI);
}
/**
* Returns the default subscription if available else returns
* SubscriptionManager#INVALID_SUBSCRIPTION_ID
*/
public static int getDefaultSubscriptionId(Context context) {
SubscriptionManager subManager = SubscriptionManager.from(context);
if (subManager == null) {
return SubscriptionManager.INVALID_SUBSCRIPTION_ID;
}
SubscriptionInfo subscriptionInfo = subManager.getDefaultDataSubscriptionInfo();
if (subscriptionInfo == null) {
List<SubscriptionInfo> list = subManager.getAllSubscriptionInfoList();
if (list.size() == 0) {
return SubscriptionManager.INVALID_SUBSCRIPTION_ID;
}
subscriptionInfo = list.get(0);
}
return subscriptionInfo.getSubscriptionId();
}
/**
* Returns the default network template based on the availability of mobile data, Wifi. Returns
* ethernet template if both mobile data and Wifi are not available.
*/
static NetworkTemplate getDefaultTemplate(Context context, int defaultSubId) {
if (hasMobileData(context) && defaultSubId != SubscriptionManager.INVALID_SUBSCRIPTION_ID) {
TelephonyManager telephonyManager = TelephonyManager.from(context);
NetworkTemplate mobileAll = NetworkTemplate.buildTemplateMobileAll(
telephonyManager.getSubscriberId(defaultSubId));
return NetworkTemplate.normalize(mobileAll,
telephonyManager.getMergedSubscriberIds());
} else if (hasWifiRadio(context)) {
return NetworkTemplate.buildTemplateWifiWildcard();
} else {
return NetworkTemplate.buildTemplateEthernet();
}
}
}

View File

@@ -16,19 +16,26 @@
package com.android.settings.datausage;
import static com.google.common.truth.Truth.assertThat;
import static org.mockito.Matchers.anyInt;
import static org.mockito.Mockito.doReturn;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.spy;
import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.when;
import android.content.Context;
import android.net.ConnectivityManager;
import android.net.NetworkPolicy;
import android.net.wifi.WifiConfiguration;
import android.net.wifi.WifiManager;
import com.android.settings.R;
import com.android.settings.testutils.SettingsRobolectricTestRunner;
import com.android.settings.TestConfig;
import com.android.settings.testutils.SettingsRobolectricTestRunner;
import com.android.settings.testutils.XmlTestUtils;
import com.android.settings.testutils.shadow.ShadowConnectivityManager;
import com.android.settingslib.NetworkPolicyEditor;
import java.util.ArrayList;
import java.util.List;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
@@ -39,18 +46,6 @@ import org.robolectric.annotation.Config;
import org.robolectric.shadows.ShadowApplication;
import org.robolectric.util.ReflectionHelpers;
import java.util.ArrayList;
import java.util.List;
import static com.google.common.truth.Truth.assertThat;
import static org.mockito.Matchers.any;
import static org.mockito.Matchers.anyInt;
import static org.mockito.Mockito.doReturn;
import static org.mockito.Mockito.mock;
import static org.mockito.Mockito.spy;
import static org.mockito.Mockito.verify;
import static org.mockito.Mockito.when;
@RunWith(SettingsRobolectricTestRunner.class)
@Config(manifest = TestConfig.MANIFEST_PATH, sdk = TestConfig.SDK_VERSION)
public class DataUsageSummaryTest {
@@ -71,12 +66,6 @@ public class DataUsageSummaryTest {
when(mManager.isNetworkSupported(anyInt())).thenReturn(true);
}
@Test
public void testMobileDataStatus() {
boolean hasMobileData = DataUsageSummary.hasMobileData(mContext);
assertThat(hasMobileData).isTrue();
}
@Test
public void testUpdateNetworkRestrictionSummary_shouldSetSummary() {
final DataUsageSummary dataUsageSummary = spy(new DataUsageSummary());

View File

@@ -0,0 +1,62 @@
/*
* Copyright (C) 2017 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.datausage;
import static com.google.common.truth.Truth.assertThat;
import static org.mockito.Matchers.anyInt;
import static org.mockito.Mockito.when;
import android.content.Context;
import android.net.ConnectivityManager;
import com.android.settings.TestConfig;
import com.android.settings.testutils.SettingsRobolectricTestRunner;
import org.junit.Before;
import org.junit.Test;
import org.junit.runner.RunWith;
import org.mockito.Mock;
import org.mockito.MockitoAnnotations;
import org.robolectric.annotation.Config;
import org.robolectric.shadows.ShadowApplication;
@RunWith(SettingsRobolectricTestRunner.class)
@Config(manifest = TestConfig.MANIFEST_PATH, sdk = TestConfig.SDK_VERSION)
public final class DataUsageUtilsTest {
@Mock private ConnectivityManager mManager;
private Context mContext;
@Before
public void setUp() {
MockitoAnnotations.initMocks(this);
ShadowApplication shadowContext = ShadowApplication.getInstance();
mContext = shadowContext.getApplicationContext();
shadowContext.setSystemService(Context.CONNECTIVITY_SERVICE, mManager);
}
@Test
public void mobileDataStatus_whenNetworkIsSupported() {
when(mManager.isNetworkSupported(anyInt())).thenReturn(true);
boolean hasMobileData = DataUsageUtils.hasMobileData(mContext);
assertThat(hasMobileData).isTrue();
}
@Test
public void mobileDataStatus_whenNetworkIsNotSupported() {
when(mManager.isNetworkSupported(anyInt())).thenReturn(false);
boolean hasMobileData = DataUsageUtils.hasMobileData(mContext);
assertThat(hasMobileData).isFalse();
}
}