am 2f1e953f: am 4df65bf1: Merge "Direct notification of network interface changes." into lmp-mr1-dev
* commit '2f1e953f8fd6d7ee32c00a680f887607f1005f62':
Direct notification of network interface changes.
diff --git a/core/java/android/net/INetworkStatsService.aidl b/core/java/android/net/INetworkStatsService.aidl
index b7b8731..2c3881c 100644
--- a/core/java/android/net/INetworkStatsService.aidl
+++ b/core/java/android/net/INetworkStatsService.aidl
@@ -40,8 +40,12 @@
/** Mark given UID as being in foreground for stats purposes. */
void setUidForeground(int uid, boolean uidForeground);
+
+ /** Force update of ifaces. */
+ void forceUpdateIfaces();
/** Force update of statistics. */
void forceUpdate();
+
/** Advise persistance threshold; may be overridden internally. */
void advisePersistThreshold(long thresholdBytes);
diff --git a/core/java/android/net/NetworkIdentity.java b/core/java/android/net/NetworkIdentity.java
index 6864749..a9de23e 100644
--- a/core/java/android/net/NetworkIdentity.java
+++ b/core/java/android/net/NetworkIdentity.java
@@ -41,7 +41,11 @@
/**
* When enabled, combine all {@link #mSubType} together under
* {@link #SUBTYPE_COMBINED}.
+ *
+ * @deprecated we no longer offer to collect statistics on a per-subtype
+ * basis; this is always disabled.
*/
+ @Deprecated
public static final boolean COMBINE_SUBTYPE_ENABLED = true;
public static final int SUBTYPE_COMBINED = -1;
diff --git a/core/java/android/net/NetworkTemplate.java b/core/java/android/net/NetworkTemplate.java
index 6cfab92..57eef83 100644
--- a/core/java/android/net/NetworkTemplate.java
+++ b/core/java/android/net/NetworkTemplate.java
@@ -49,7 +49,9 @@
public class NetworkTemplate implements Parcelable {
public static final int MATCH_MOBILE_ALL = 1;
+ @Deprecated
public static final int MATCH_MOBILE_3G_LOWER = 2;
+ @Deprecated
public static final int MATCH_MOBILE_4G = 3;
public static final int MATCH_WIFI = 4;
public static final int MATCH_ETHERNET = 5;
@@ -293,6 +295,7 @@
/**
* Check if mobile network classified 3G or lower with matching IMSI.
*/
+ @Deprecated
private boolean matchesMobile3gLower(NetworkIdentity ident) {
ensureSubtypeAvailable();
if (ident.mType == TYPE_WIMAX) {
@@ -311,6 +314,7 @@
/**
* Check if mobile network classified 4G with matching IMSI.
*/
+ @Deprecated
private boolean matchesMobile4g(NetworkIdentity ident) {
ensureSubtypeAvailable();
if (ident.mType == TYPE_WIMAX) {
diff --git a/services/core/java/com/android/server/net/NetworkStatsService.java b/services/core/java/com/android/server/net/NetworkStatsService.java
index 61f9a26..856a076 100644
--- a/services/core/java/com/android/server/net/NetworkStatsService.java
+++ b/services/core/java/com/android/server/net/NetworkStatsService.java
@@ -26,9 +26,7 @@
import static android.content.Intent.ACTION_USER_REMOVED;
import static android.content.Intent.EXTRA_UID;
import static android.net.ConnectivityManager.ACTION_TETHER_STATE_CHANGED;
-import static android.net.ConnectivityManager.CONNECTIVITY_ACTION_IMMEDIATE;
import static android.net.ConnectivityManager.isNetworkTypeMobile;
-import static android.net.NetworkIdentity.COMBINE_SUBTYPE_ENABLED;
import static android.net.NetworkStats.IFACE_ALL;
import static android.net.NetworkStats.SET_ALL;
import static android.net.NetworkStats.SET_DEFAULT;
@@ -55,8 +53,6 @@
import static android.provider.Settings.Global.NETSTATS_UID_TAG_DELETE_AGE;
import static android.provider.Settings.Global.NETSTATS_UID_TAG_PERSIST_BYTES;
import static android.provider.Settings.Global.NETSTATS_UID_TAG_ROTATE_AGE;
-import static android.telephony.PhoneStateListener.LISTEN_DATA_CONNECTION_STATE;
-import static android.telephony.PhoneStateListener.LISTEN_NONE;
import static android.text.format.DateUtils.DAY_IN_MILLIS;
import static android.text.format.DateUtils.HOUR_IN_MILLIS;
import static android.text.format.DateUtils.MINUTE_IN_MILLIS;
@@ -102,7 +98,6 @@
import android.os.UserHandle;
import android.provider.Settings;
import android.provider.Settings.Global;
-import android.telephony.PhoneStateListener;
import android.telephony.TelephonyManager;
import android.text.format.DateUtils;
import android.util.ArrayMap;
@@ -308,10 +303,6 @@
bootstrapStatsLocked();
}
- // watch for network interfaces to be claimed
- final IntentFilter connFilter = new IntentFilter(CONNECTIVITY_ACTION_IMMEDIATE);
- mContext.registerReceiver(mConnReceiver, connFilter, CONNECTIVITY_INTERNAL, mHandler);
-
// watch for tethering changes
final IntentFilter tetherFilter = new IntentFilter(ACTION_TETHER_STATE_CHANGED);
mContext.registerReceiver(mTetherReceiver, tetherFilter, null, mHandler);
@@ -338,12 +329,6 @@
// ignored; service lives in system_server
}
- // watch for networkType changes that aren't broadcast through
- // CONNECTIVITY_ACTION_IMMEDIATE above.
- if (!COMBINE_SUBTYPE_ENABLED) {
- mTeleManager.listen(mPhoneListener, LISTEN_DATA_CONNECTION_STATE);
- }
-
registerPollAlarmLocked();
registerGlobalAlert();
}
@@ -358,16 +343,11 @@
}
private void shutdownLocked() {
- mContext.unregisterReceiver(mConnReceiver);
mContext.unregisterReceiver(mTetherReceiver);
mContext.unregisterReceiver(mPollReceiver);
mContext.unregisterReceiver(mRemovedReceiver);
mContext.unregisterReceiver(mShutdownReceiver);
- if (!COMBINE_SUBTYPE_ENABLED) {
- mTeleManager.listen(mPhoneListener, LISTEN_NONE);
- }
-
final long currentTime = mTime.hasCache() ? mTime.currentTimeMillis()
: System.currentTimeMillis();
@@ -620,6 +600,19 @@
}
@Override
+ public void forceUpdateIfaces() {
+ mContext.enforceCallingOrSelfPermission(READ_NETWORK_USAGE_HISTORY, TAG);
+ assertBandwidthControlEnabled();
+
+ final long token = Binder.clearCallingIdentity();
+ try {
+ updateIfaces();
+ } finally {
+ Binder.restoreCallingIdentity(token);
+ }
+ }
+
+ @Override
public void forceUpdate() {
mContext.enforceCallingOrSelfPermission(READ_NETWORK_USAGE_HISTORY, TAG);
assertBandwidthControlEnabled();
@@ -676,20 +669,6 @@
}
/**
- * Receiver that watches for {@link IConnectivityManager} to claim network
- * interfaces. Used to associate {@link TelephonyManager#getSubscriberId()}
- * with mobile interfaces.
- */
- private BroadcastReceiver mConnReceiver = new BroadcastReceiver() {
- @Override
- public void onReceive(Context context, Intent intent) {
- // on background handler thread, and verified CONNECTIVITY_INTERNAL
- // permission above.
- updateIfaces();
- }
- };
-
- /**
* Receiver that watches for {@link Tethering} to claim interface pairs.
*/
private BroadcastReceiver mTetherReceiver = new BroadcastReceiver() {
@@ -784,35 +763,6 @@
}
};
- private int mLastPhoneState = TelephonyManager.DATA_UNKNOWN;
- private int mLastPhoneNetworkType = TelephonyManager.NETWORK_TYPE_UNKNOWN;
-
- /**
- * Receiver that watches for {@link TelephonyManager} changes, such as
- * transitioning between network types.
- */
- private PhoneStateListener mPhoneListener = new PhoneStateListener() {
- @Override
- public void onDataConnectionStateChanged(int state, int networkType) {
- final boolean stateChanged = state != mLastPhoneState;
- final boolean networkTypeChanged = networkType != mLastPhoneNetworkType;
-
- if (networkTypeChanged && !stateChanged) {
- // networkType changed without a state change, which means we
- // need to roll our own update. delay long enough for
- // ConnectivityManager to process.
- // TODO: add direct event to ConnectivityService instead of
- // relying on this delay.
- if (LOGV) Slog.v(TAG, "triggering delayed updateIfaces()");
- mHandler.sendMessageDelayed(
- mHandler.obtainMessage(MSG_UPDATE_IFACES), SECOND_IN_MILLIS);
- }
-
- mLastPhoneState = state;
- mLastPhoneNetworkType = networkType;
- }
- };
-
private void updateIfaces() {
synchronized (mStatsLock) {
mWakeLock.acquire();