diff options
| author | Haoyu Bai <bhy@google.com> | 2012-06-20 14:29:57 -0700 |
|---|---|---|
| committer | Haoyu Bai <bhy@google.com> | 2012-07-17 17:13:03 -0700 |
| commit | db3c8678e5cbdfec011afaf25bde2091152c30ad (patch) | |
| tree | e0f4b593cfba82bd5a35e921eebf351091d2e542 /services/java/com/android/server/ConnectivityService.java | |
| parent | 6b7358d9511df7e519bb417fbed6017c06a33d45 (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.java | 29 |
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 |
