summaryrefslogtreecommitdiff
path: root/services/java/com/android/server/ConnectivityService.java
diff options
context:
space:
mode:
authorHaoyu Bai <bhy@google.com>2012-06-20 14:29:57 -0700
committerHaoyu Bai <bhy@google.com>2012-07-17 17:13:03 -0700
commitdb3c8678e5cbdfec011afaf25bde2091152c30ad (patch)
treee0f4b593cfba82bd5a35e921eebf351091d2e542 /services/java/com/android/server/ConnectivityService.java
parent6b7358d9511df7e519bb417fbed6017c06a33d45 (diff)
Network data activity change intent for network interfaces.
The activity notification is received from netd, an intent DATA_ACTIVITY_CHANGE is then raised for other part of the system to consume. Change-Id: Idfcc4763c51c5b314c57f546c12557082f06bebf
Diffstat (limited to 'services/java/com/android/server/ConnectivityService.java')
-rw-r--r--services/java/com/android/server/ConnectivityService.java29
1 files changed, 29 insertions, 0 deletions
diff --git a/services/java/com/android/server/ConnectivityService.java b/services/java/com/android/server/ConnectivityService.java
index 230f07bb5baf..9f9390195f62 100644
--- a/services/java/com/android/server/ConnectivityService.java
+++ b/services/java/com/android/server/ConnectivityService.java
@@ -17,6 +17,7 @@
package com.android.server;
import static android.Manifest.permission.MANAGE_NETWORK_POLICY;
+import static android.Manifest.permission.RECEIVE_DATA_ACTIVITY_CHANGE;
import static android.net.ConnectivityManager.CONNECTIVITY_ACTION;
import static android.net.ConnectivityManager.CONNECTIVITY_ACTION_IMMEDIATE;
import static android.net.ConnectivityManager.isNetworkTypeValid;
@@ -35,6 +36,7 @@ import android.net.ConnectivityManager;
import android.net.DummyDataStateTracker;
import android.net.EthernetDataTracker;
import android.net.IConnectivityManager;
+import android.net.INetworkManagementEventObserver;
import android.net.INetworkPolicyListener;
import android.net.INetworkPolicyManager;
import android.net.INetworkStatsService;
@@ -546,6 +548,13 @@ public class ConnectivityService extends IConnectivityManager.Stub {
mSettingsObserver = new SettingsObserver(mHandler, EVENT_APPLY_GLOBAL_HTTP_PROXY);
mSettingsObserver.observe(mContext);
+ INetworkManagementEventObserver netdObserver = new NetdObserver();
+ try {
+ mNetd.registerObserver(netdObserver);
+ } catch (RemoteException e) {
+ loge("Error registering observer :" + e);
+ }
+
loadGlobalProxy();
}
private NetworkStateTracker makeWimaxStateTracker() {
@@ -923,6 +932,19 @@ private NetworkStateTracker makeWimaxStateTracker() {
return tracker != null && tracker.setRadio(turnOn);
}
+ private class NetdObserver extends INetworkManagementEventObserver.Stub {
+ public void interfaceClassDataActivityChanged(String label, boolean active) {
+ int deviceType = Integer.parseInt(label);
+ sendDataActivityBroadcast(deviceType, active);
+ }
+
+ public void interfaceStatusChanged(String iface, boolean up) {}
+ public void interfaceLinkStateChanged(String iface, boolean up) {}
+ public void interfaceAdded(String iface) {}
+ public void interfaceRemoved(String iface) {}
+ public void limitReached(String limitName, String iface) {}
+ }
+
/**
* Used to notice when the calling process dies so we can self-expire
*
@@ -1759,6 +1781,13 @@ private NetworkStateTracker makeWimaxStateTracker() {
sendStickyBroadcastDelayed(makeGeneralIntent(info, bcastType), delayMs);
}
+ private void sendDataActivityBroadcast(int deviceType, boolean active) {
+ Intent intent = new Intent(ConnectivityManager.ACTION_DATA_ACTIVITY_CHANGE);
+ intent.putExtra(ConnectivityManager.EXTRA_DEVICE_TYPE, deviceType);
+ intent.putExtra(ConnectivityManager.EXTRA_IS_ACTIVE, active);
+ mContext.sendOrderedBroadcast(intent, RECEIVE_DATA_ACTIVITY_CHANGE);
+ }
+
/**
* Called when an attempt to fail over to another network has failed.
* @param info the {@link NetworkInfo} for the failed network