Support data usage changes in Settings
Change-Id: I78c6a3956e7136c3ed64d9323d3fe74df2898c5d
This commit is contained in:
@@ -42,11 +42,11 @@ import static android.telephony.TelephonyManager.SIM_STATE_READY;
|
||||
import static android.text.format.DateUtils.FORMAT_ABBREV_MONTH;
|
||||
import static android.text.format.DateUtils.FORMAT_SHOW_DATE;
|
||||
|
||||
public class MobileDataController {
|
||||
private static final String TAG = "MobileDataController";
|
||||
public class DataUsageController {
|
||||
private static final String TAG = "DataUsageController";
|
||||
private static final boolean DEBUG = Log.isLoggable(TAG, Log.DEBUG);
|
||||
|
||||
private static final long DEFAULT_WARNING_LEVEL = 2L * 1024 * 1024 * 1024;
|
||||
public static final long DEFAULT_WARNING_LEVEL = 2L * 1024 * 1024 * 1024;
|
||||
private static final int FIELDS = FIELD_RX_BYTES | FIELD_TX_BYTES;
|
||||
private static final StringBuilder PERIOD_BUILDER = new StringBuilder(50);
|
||||
private static final java.util.Formatter PERIOD_FORMATTER = new java.util.Formatter(
|
||||
@@ -62,7 +62,7 @@ public class MobileDataController {
|
||||
private Callback mCallback;
|
||||
private NetworkNameProvider mNetworkController;
|
||||
|
||||
public MobileDataController(Context context) {
|
||||
public DataUsageController(Context context) {
|
||||
mContext = context;
|
||||
mTelephonyManager = TelephonyManager.from(context);
|
||||
mConnectivityManager = ConnectivityManager.from(context);
|
||||
@@ -109,16 +109,25 @@ public class MobileDataController {
|
||||
if (subscriberId == null) {
|
||||
return warn("no subscriber id");
|
||||
}
|
||||
NetworkTemplate template = NetworkTemplate.buildTemplateMobileAll(subscriberId);
|
||||
template = NetworkTemplate.normalize(template, mTelephonyManager.getMergedSubscriberIds());
|
||||
|
||||
return getDataUsageInfo(template);
|
||||
}
|
||||
|
||||
public DataUsageInfo getWifiDataUsageInfo() {
|
||||
NetworkTemplate template = NetworkTemplate.buildTemplateWifiWildcard();
|
||||
return getDataUsageInfo(template);
|
||||
}
|
||||
|
||||
public DataUsageInfo getDataUsageInfo(NetworkTemplate template) {
|
||||
final INetworkStatsSession session = getSession();
|
||||
if (session == null) {
|
||||
return warn("no stats session");
|
||||
}
|
||||
NetworkTemplate template = NetworkTemplate.buildTemplateMobileAll(subscriberId);
|
||||
template = NetworkTemplate.normalize(template, mTelephonyManager.getMergedSubscriberIds());
|
||||
|
||||
final NetworkPolicy policy = findNetworkPolicy(template);
|
||||
try {
|
||||
final NetworkStatsHistory history = mSession.getHistoryForNetwork(template, FIELDS);
|
||||
final NetworkStatsHistory history = session.getHistoryForNetwork(template, FIELDS);
|
||||
final long now = System.currentTimeMillis();
|
||||
final long start, end;
|
||||
if (policy != null && policy.cycleDay > 0) {
|
||||
@@ -153,6 +162,7 @@ public class MobileDataController {
|
||||
}
|
||||
final long totalBytes = entry.rxBytes + entry.txBytes;
|
||||
final DataUsageInfo usage = new DataUsageInfo();
|
||||
usage.startDate = start;
|
||||
usage.usageLevel = totalBytes;
|
||||
usage.period = formatDateRange(start, end);
|
||||
if (policy != null) {
|
||||
@@ -238,6 +248,7 @@ public class MobileDataController {
|
||||
public static class DataUsageInfo {
|
||||
public String carrier;
|
||||
public String period;
|
||||
public long startDate;
|
||||
public long limitLevel;
|
||||
public long warningLevel;
|
||||
public long usageLevel;
|
||||
@@ -24,7 +24,7 @@ import android.view.LayoutInflater;
|
||||
import android.view.View;
|
||||
import android.view.ViewGroup;
|
||||
import com.android.internal.logging.MetricsLogger;
|
||||
import com.android.settingslib.net.MobileDataController;
|
||||
import com.android.settingslib.net.DataUsageController;
|
||||
import com.android.systemui.R;
|
||||
import com.android.systemui.qs.QSIconView;
|
||||
import com.android.systemui.qs.QSTile;
|
||||
@@ -39,7 +39,7 @@ public class CellularTile extends QSTile<QSTile.SignalState> {
|
||||
"com.android.settings", "com.android.settings.Settings$DataUsageSummaryActivity"));
|
||||
|
||||
private final NetworkController mController;
|
||||
private final MobileDataController mDataController;
|
||||
private final DataUsageController mDataController;
|
||||
private final CellularDetailAdapter mDetailAdapter;
|
||||
|
||||
private final CellSignalCallback mSignalCallback = new CellSignalCallback();
|
||||
@@ -255,7 +255,7 @@ public class CellularTile extends QSTile<QSTile.SignalState> {
|
||||
final DataUsageDetailView v = (DataUsageDetailView) (convertView != null
|
||||
? convertView
|
||||
: LayoutInflater.from(mContext).inflate(R.layout.data_usage, parent, false));
|
||||
final MobileDataController.DataUsageInfo info = mDataController.getDataUsageInfo();
|
||||
final DataUsageController.DataUsageInfo info = mDataController.getDataUsageInfo();
|
||||
if (info == null) return v;
|
||||
v.bind(info);
|
||||
return v;
|
||||
|
||||
@@ -23,7 +23,7 @@ import android.util.AttributeSet;
|
||||
import android.view.View;
|
||||
import android.widget.LinearLayout;
|
||||
import android.widget.TextView;
|
||||
import com.android.settingslib.net.MobileDataController;
|
||||
import com.android.settingslib.net.DataUsageController;
|
||||
import com.android.systemui.FontSizeUtils;
|
||||
import com.android.systemui.R;
|
||||
import com.android.systemui.qs.DataUsageGraph;
|
||||
@@ -59,7 +59,7 @@ public class DataUsageDetailView extends LinearLayout {
|
||||
R.dimen.qs_data_usage_text_size);
|
||||
}
|
||||
|
||||
public void bind(MobileDataController.DataUsageInfo info) {
|
||||
public void bind(DataUsageController.DataUsageInfo info) {
|
||||
final Resources res = mContext.getResources();
|
||||
final int titleId;
|
||||
final long bytes;
|
||||
|
||||
@@ -19,7 +19,7 @@ package com.android.systemui.statusbar.policy;
|
||||
import android.content.Context;
|
||||
import android.content.Intent;
|
||||
import android.telephony.SubscriptionInfo;
|
||||
import com.android.settingslib.net.MobileDataController;
|
||||
import com.android.settingslib.net.DataUsageController;
|
||||
import com.android.settingslib.wifi.AccessPoint;
|
||||
|
||||
import java.util.List;
|
||||
@@ -32,7 +32,7 @@ public interface NetworkController {
|
||||
void setWifiEnabled(boolean enabled);
|
||||
void onUserSwitched(int newUserId);
|
||||
AccessPointController getAccessPointController();
|
||||
MobileDataController getMobileDataController();
|
||||
DataUsageController getMobileDataController();
|
||||
|
||||
public interface SignalCallback {
|
||||
void setWifiIndicators(boolean enabled, IconState statusIcon, IconState qsIcon,
|
||||
|
||||
@@ -40,7 +40,7 @@ import android.util.MathUtils;
|
||||
import com.android.internal.annotations.VisibleForTesting;
|
||||
import com.android.internal.telephony.PhoneConstants;
|
||||
import com.android.internal.telephony.TelephonyIntents;
|
||||
import com.android.settingslib.net.MobileDataController;
|
||||
import com.android.settingslib.net.DataUsageController;
|
||||
import com.android.systemui.DemoMode;
|
||||
import com.android.systemui.R;
|
||||
|
||||
@@ -59,7 +59,7 @@ import static android.net.NetworkCapabilities.NET_CAPABILITY_VALIDATED;
|
||||
|
||||
/** Platform implementation of the network controller. **/
|
||||
public class NetworkControllerImpl extends BroadcastReceiver
|
||||
implements NetworkController, DemoMode, MobileDataController.NetworkNameProvider {
|
||||
implements NetworkController, DemoMode, DataUsageController.NetworkNameProvider {
|
||||
// debug
|
||||
static final String TAG = "NetworkController";
|
||||
static final boolean DEBUG = Log.isLoggable(TAG, Log.DEBUG);
|
||||
@@ -94,7 +94,7 @@ public class NetworkControllerImpl extends BroadcastReceiver
|
||||
// SIM for most actions. This may be null if there aren't any SIMs around.
|
||||
private MobileSignalController mDefaultSignalController;
|
||||
private final AccessPointControllerImpl mAccessPoints;
|
||||
private final MobileDataController mMobileDataController;
|
||||
private final DataUsageController mDataUsageController;
|
||||
|
||||
private boolean mInetCondition; // Used for Logging and demo.
|
||||
|
||||
@@ -139,7 +139,7 @@ public class NetworkControllerImpl extends BroadcastReceiver
|
||||
SubscriptionManager.from(context), Config.readConfig(context), bgLooper,
|
||||
new CallbackHandler(),
|
||||
new AccessPointControllerImpl(context, bgLooper),
|
||||
new MobileDataController(context),
|
||||
new DataUsageController(context),
|
||||
new SubscriptionDefaults());
|
||||
mReceiverHandler.post(mRegisterListeners);
|
||||
}
|
||||
@@ -150,7 +150,7 @@ public class NetworkControllerImpl extends BroadcastReceiver
|
||||
SubscriptionManager subManager, Config config, Looper bgLooper,
|
||||
CallbackHandler callbackHandler,
|
||||
AccessPointControllerImpl accessPointController,
|
||||
MobileDataController mobileDataController,
|
||||
DataUsageController dataUsageController,
|
||||
SubscriptionDefaults defaultsHandler) {
|
||||
mContext = context;
|
||||
mConfig = config;
|
||||
@@ -171,10 +171,10 @@ public class NetworkControllerImpl extends BroadcastReceiver
|
||||
|
||||
mLocale = mContext.getResources().getConfiguration().locale;
|
||||
mAccessPoints = accessPointController;
|
||||
mMobileDataController = mobileDataController;
|
||||
mMobileDataController.setNetworkController(this);
|
||||
// TODO: Find a way to move this into MobileDataController.
|
||||
mMobileDataController.setCallback(new MobileDataController.Callback() {
|
||||
mDataUsageController = dataUsageController;
|
||||
mDataUsageController.setNetworkController(this);
|
||||
// TODO: Find a way to move this into DataUsageController.
|
||||
mDataUsageController.setCallback(new DataUsageController.Callback() {
|
||||
@Override
|
||||
public void onMobileDataEnabled(boolean enabled) {
|
||||
mCallbackHandler.setMobileDataEnabled(enabled);
|
||||
@@ -236,8 +236,8 @@ public class NetworkControllerImpl extends BroadcastReceiver
|
||||
}
|
||||
|
||||
@Override
|
||||
public MobileDataController getMobileDataController() {
|
||||
return mMobileDataController;
|
||||
public DataUsageController getMobileDataController() {
|
||||
return mDataUsageController;
|
||||
}
|
||||
|
||||
public void addEmergencyListener(EmergencyListener listener) {
|
||||
|
||||
@@ -33,7 +33,7 @@ import android.telephony.TelephonyManager;
|
||||
import android.util.Log;
|
||||
|
||||
import com.android.internal.telephony.cdma.EriInfo;
|
||||
import com.android.settingslib.net.MobileDataController;
|
||||
import com.android.settingslib.net.DataUsageController;
|
||||
import com.android.systemui.SysuiTestCase;
|
||||
import com.android.systemui.statusbar.policy.NetworkController.IconState;
|
||||
import com.android.systemui.statusbar.policy.NetworkControllerImpl.Config;
|
||||
@@ -96,7 +96,7 @@ public class NetworkControllerBaseTest extends SysuiTestCase {
|
||||
mCallbackHandler = mock(CallbackHandler.class);
|
||||
mNetworkController = new NetworkControllerImpl(mContext, mMockCm, mMockTm, mMockWm, mMockSm,
|
||||
mConfig, Looper.getMainLooper(), mCallbackHandler,
|
||||
mock(AccessPointControllerImpl.class), mock(MobileDataController.class),
|
||||
mock(AccessPointControllerImpl.class), mock(DataUsageController.class),
|
||||
mMockSubDefaults);
|
||||
setupNetworkController();
|
||||
|
||||
@@ -137,7 +137,7 @@ public class NetworkControllerBaseTest extends SysuiTestCase {
|
||||
= new NetworkControllerImpl(mContext, mMockCm, mMockTm, mMockWm, mMockSm,
|
||||
mConfig, Looper.getMainLooper(), mCallbackHandler,
|
||||
mock(AccessPointControllerImpl.class),
|
||||
mock(MobileDataController.class), mMockSubDefaults);
|
||||
mock(DataUsageController.class), mMockSubDefaults);
|
||||
|
||||
setupNetworkController();
|
||||
|
||||
|
||||
@@ -4,7 +4,7 @@ import android.os.Looper;
|
||||
import android.telephony.TelephonyManager;
|
||||
import android.test.suitebuilder.annotation.SmallTest;
|
||||
|
||||
import com.android.settingslib.net.MobileDataController;
|
||||
import com.android.settingslib.net.DataUsageController;
|
||||
import org.mockito.Mockito;
|
||||
|
||||
@SmallTest
|
||||
@@ -88,7 +88,7 @@ public class NetworkControllerDataTest extends NetworkControllerBaseTest {
|
||||
mNetworkController = new NetworkControllerImpl(mContext, mMockCm, mMockTm, mMockWm, mMockSm,
|
||||
mConfig, Looper.getMainLooper(), mCallbackHandler,
|
||||
Mockito.mock(AccessPointControllerImpl.class),
|
||||
Mockito.mock(MobileDataController.class), mMockSubDefaults);
|
||||
Mockito.mock(DataUsageController.class), mMockSubDefaults);
|
||||
setupNetworkController();
|
||||
|
||||
setupDefaultSignal();
|
||||
|
||||
@@ -29,7 +29,7 @@ import android.test.suitebuilder.annotation.SmallTest;
|
||||
|
||||
import com.android.internal.telephony.PhoneConstants;
|
||||
import com.android.internal.telephony.TelephonyIntents;
|
||||
import com.android.settingslib.net.MobileDataController;
|
||||
import com.android.settingslib.net.DataUsageController;
|
||||
import com.android.systemui.R;
|
||||
|
||||
import org.mockito.ArgumentCaptor;
|
||||
@@ -47,7 +47,7 @@ public class NetworkControllerSignalTest extends NetworkControllerBaseTest {
|
||||
// Create a new NetworkController as this is currently handled in constructor.
|
||||
mNetworkController = new NetworkControllerImpl(mContext, mMockCm, mMockTm, mMockWm, mMockSm,
|
||||
mConfig, Looper.getMainLooper(), mCallbackHandler,
|
||||
mock(AccessPointControllerImpl.class), mock(MobileDataController.class),
|
||||
mock(AccessPointControllerImpl.class), mock(DataUsageController.class),
|
||||
mMockSubDefaults);
|
||||
setupNetworkController();
|
||||
|
||||
@@ -96,7 +96,7 @@ public class NetworkControllerSignalTest extends NetworkControllerBaseTest {
|
||||
// Create a new NetworkController as this is currently handled in constructor.
|
||||
mNetworkController = new NetworkControllerImpl(mContext, mMockCm, mMockTm, mMockWm, mMockSm,
|
||||
mConfig, Looper.getMainLooper(), mCallbackHandler,
|
||||
mock(AccessPointControllerImpl.class), mock(MobileDataController.class),
|
||||
mock(AccessPointControllerImpl.class), mock(DataUsageController.class),
|
||||
mMockSubDefaults);
|
||||
setupNetworkController();
|
||||
|
||||
|
||||
Reference in New Issue
Block a user