NetworkManagementService: Introduce INetworkManagementEventObserver
Introduce a callback event observer which can be registered on the
INetworkManagementService instance to receive events from the service.
Signed-off-by: San Mehat <san@google.com>
diff --git a/services/java/com/android/server/NetworkManagementService.java b/services/java/com/android/server/NetworkManagementService.java
index 7b66a76..8594e44 100644
--- a/services/java/com/android/server/NetworkManagementService.java
+++ b/services/java/com/android/server/NetworkManagementService.java
@@ -25,6 +25,7 @@
import android.content.pm.PackageManager;
import android.net.Uri;
import android.net.InterfaceConfiguration;
+import android.net.INetworkManagementEventObserver;
import android.os.INetworkManagementService;
import android.os.Handler;
import android.text.TextUtils;
@@ -70,6 +71,8 @@
*/
private NativeDaemonConnector mConnector;
+ private ArrayList<INetworkManagementEventObserver> mObservers;
+
/**
* Constructs a new NetworkManagementService instance
*
@@ -78,12 +81,64 @@
private NetworkManagementService(Context context) {
mContext = context;
+ mObservers = new ArrayList<INetworkManagementEventObserver>();
+
mConnector = new NativeDaemonConnector(
new NetdCallbackReceiver(), "netd", 10, "NetdConnector");
Thread thread = new Thread(mConnector, NativeDaemonConnector.class.getName());
thread.start();
}
+ public void registerObserver(INetworkManagementEventObserver obs) {
+ Log.d(TAG, "Registering observer");
+ mObservers.add(obs);
+ }
+
+ public void unregisterObserver(INetworkManagementEventObserver obs) {
+ Log.d(TAG, "Unregistering observer");
+ mObservers.remove(mObservers.indexOf(obs));
+ }
+
+ /**
+ * Notify our observers of an interface link status change
+ */
+ private void notifyInterfaceLinkStatusChanged(String iface, boolean link) {
+ for (INetworkManagementEventObserver obs : mObservers) {
+ try {
+ obs.interfaceLinkStatusChanged(iface, link);
+ } catch (Exception ex) {
+ Log.w(TAG, "Observer notifier failed", ex);
+ }
+ }
+ }
+
+ /**
+ * Notify our observers of an interface addition.
+ */
+ private void notifyInterfaceAdded(String iface) {
+ for (INetworkManagementEventObserver obs : mObservers) {
+ try {
+ obs.interfaceAdded(iface);
+ } catch (Exception ex) {
+ Log.w(TAG, "Observer notifier failed", ex);
+ }
+ }
+ }
+
+ /**
+ * Notify our observers of an interface removal.
+ */
+ private void notifyInterfaceRemoved(String iface) {
+ for (INetworkManagementEventObserver obs : mObservers) {
+ try {
+ obs.interfaceRemoved(iface);
+ } catch (Exception ex) {
+ Log.w(TAG, "Observer notifier failed", ex);
+ }
+ }
+ }
+
+
//
// Netd Callback handling
//