diff options
| author | 2014-03-12 18:42:23 -0700 | |
|---|---|---|
| committer | 2014-03-18 21:42:02 +0000 | |
| commit | 0535a9f7aa5d0f875b06845e9af5f6dbfc5c8a19 (patch) | |
| tree | aa04ed953ba768dd3ca6227f1617c9f98341018a | |
| parent | 76aa61a920ed6839cd2daf2eb4ffc62473424a4e (diff) | |
Include elapsed realtime (nanos) of the event in the radio state change notifications.
Bug: 13247811
Change-Id: I3454aa159a68b9087b4762df947b41965b5a3941
5 files changed, 25 insertions, 10 deletions
diff --git a/core/java/android/net/ConnectivityManager.java b/core/java/android/net/ConnectivityManager.java index 5b2a29ea0c7f..3da00b176b10 100644 --- a/core/java/android/net/ConnectivityManager.java +++ b/core/java/android/net/ConnectivityManager.java @@ -175,6 +175,11 @@ public class ConnectivityManager { * {@hide} */ public static final String EXTRA_IS_ACTIVE = "isActive"; + /** + * The lookup key for a long that contains the timestamp (nanos) of the radio state change. + * {@hide} + */ + public static final String EXTRA_REALTIME_NS = "tsNanos"; /** * Broadcast Action: The setting for background data usage has changed diff --git a/core/java/android/net/INetworkManagementEventObserver.aidl b/core/java/android/net/INetworkManagementEventObserver.aidl index 5b16f8b3e581..dd9c39f275d0 100644 --- a/core/java/android/net/INetworkManagementEventObserver.aidl +++ b/core/java/android/net/INetworkManagementEventObserver.aidl @@ -86,8 +86,9 @@ interface INetworkManagementEventObserver { * * @param iface The interface. * @param active True if the interface is actively transmitting data, false if it is idle. + * @param tsNanos Elapsed realtime in nanos when the state of the network interface changed. */ - void interfaceClassDataActivityChanged(String label, boolean active); + void interfaceClassDataActivityChanged(String label, boolean active, long tsNanos); /** * Information about available DNS servers has been received. diff --git a/core/java/com/android/server/net/BaseNetworkObserver.java b/core/java/com/android/server/net/BaseNetworkObserver.java index 5502a178649f..430dd631dbc6 100644 --- a/core/java/com/android/server/net/BaseNetworkObserver.java +++ b/core/java/com/android/server/net/BaseNetworkObserver.java @@ -57,7 +57,7 @@ public class BaseNetworkObserver extends INetworkManagementEventObserver.Stub { } @Override - public void interfaceClassDataActivityChanged(String label, boolean active) { + public void interfaceClassDataActivityChanged(String label, boolean active, long tsNanos) { // default no-op } diff --git a/services/core/java/com/android/server/ConnectivityService.java b/services/core/java/com/android/server/ConnectivityService.java index ffc748fa37b3..68b779c023e4 100644 --- a/services/core/java/com/android/server/ConnectivityService.java +++ b/services/core/java/com/android/server/ConnectivityService.java @@ -1183,9 +1183,9 @@ public class ConnectivityService extends IConnectivityManager.Stub { private INetworkManagementEventObserver mDataActivityObserver = new BaseNetworkObserver() { @Override - public void interfaceClassDataActivityChanged(String label, boolean active) { + public void interfaceClassDataActivityChanged(String label, boolean active, long tsNanos) { int deviceType = Integer.parseInt(label); - sendDataActivityBroadcast(deviceType, active); + sendDataActivityBroadcast(deviceType, active, tsNanos); } }; @@ -2169,10 +2169,11 @@ public class ConnectivityService extends IConnectivityManager.Stub { sendStickyBroadcastDelayed(makeGeneralIntent(info, bcastType), delayMs); } - private void sendDataActivityBroadcast(int deviceType, boolean active) { + private void sendDataActivityBroadcast(int deviceType, boolean active, long tsNanos) { Intent intent = new Intent(ConnectivityManager.ACTION_DATA_ACTIVITY_CHANGE); intent.putExtra(ConnectivityManager.EXTRA_DEVICE_TYPE, deviceType); intent.putExtra(ConnectivityManager.EXTRA_IS_ACTIVE, active); + intent.putExtra(ConnectivityManager.EXTRA_REALTIME_NS, tsNanos); final long ident = Binder.clearCallingIdentity(); try { mContext.sendOrderedBroadcastAsUser(intent, UserHandle.ALL, diff --git a/services/core/java/com/android/server/NetworkManagementService.java b/services/core/java/com/android/server/NetworkManagementService.java index bfc966beb04f..a09d6059f281 100644 --- a/services/core/java/com/android/server/NetworkManagementService.java +++ b/services/core/java/com/android/server/NetworkManagementService.java @@ -346,7 +346,7 @@ public class NetworkManagementService extends INetworkManagementService.Stub /** * Notify our observers of a change in the data activity state of the interface */ - private void notifyInterfaceClassActivity(int type, boolean active) { + private void notifyInterfaceClassActivity(int type, boolean active, long tsNanos) { try { getBatteryStats().noteDataConnectionActive(type, active); } catch (RemoteException e) { @@ -356,7 +356,7 @@ public class NetworkManagementService extends INetworkManagementService.Stub for (int i = 0; i < length; i++) { try { mObservers.getBroadcastItem(i).interfaceClassDataActivityChanged( - Integer.toString(type), active); + Integer.toString(type), active, tsNanos); } catch (RemoteException e) { } catch (RuntimeException e) { } @@ -571,8 +571,15 @@ public class NetworkManagementService extends INetworkManagementService.Stub if (cooked.length < 4 || !cooked[1].equals("IfaceClass")) { throw new IllegalStateException(errorMessage); } + long timestampNanos = 0; + if (cooked.length == 5) { + try { + timestampNanos = Long.parseLong(cooked[4]); + } catch(NumberFormatException ne) {} + } boolean isActive = cooked[2].equals("active"); - notifyInterfaceClassActivity(Integer.parseInt(cooked[3]), isActive); + notifyInterfaceClassActivity(Integer.parseInt(cooked[3]), + isActive, timestampNanos); return true; // break; case NetdResponseCode.InterfaceAddressChange: @@ -1261,7 +1268,7 @@ public class NetworkManagementService extends INetworkManagementService.Stub } mMainHandler.post(new Runnable() { @Override public void run() { - notifyInterfaceClassActivity(type, true); + notifyInterfaceClassActivity(type, true, SystemClock.elapsedRealtimeNanos()); } }); } @@ -1288,7 +1295,8 @@ public class NetworkManagementService extends INetworkManagementService.Stub mActiveIdleTimers.remove(iface); mMainHandler.post(new Runnable() { @Override public void run() { - notifyInterfaceClassActivity(params.type, false); + notifyInterfaceClassActivity(params.type, false, + SystemClock.elapsedRealtimeNanos()); } }); } |