Propagate new link-status-change message to any NetworkManagementService
observers.  Also fix the syntax of the "interface-status-change" message.  Add
a null handler in the ThrottleService and Tethering classes (plus fix names).

Change-Id: I58cabc7b0ce5662243bc6513b2de4818065e6c52
diff --git a/services/java/com/android/server/NetworkManagementService.java b/services/java/com/android/server/NetworkManagementService.java
index 152605f..08970d1 100644
--- a/services/java/com/android/server/NetworkManagementService.java
+++ b/services/java/com/android/server/NetworkManagementService.java
@@ -131,12 +131,26 @@
     }
 
     /**
-     * Notify our observers of an interface link status change
+     * Notify our observers of an interface status change
      */
-    private void notifyInterfaceLinkStatusChanged(String iface, boolean link) {
+    private void notifyInterfaceStatusChanged(String iface, boolean up) {
         for (INetworkManagementEventObserver obs : mObservers) {
             try {
-                obs.interfaceLinkStatusChanged(iface, link);
+                obs.interfaceStatusChanged(iface, up);
+            } catch (Exception ex) {
+                Slog.w(TAG, "Observer notifier failed", ex);
+            }
+        }
+    }
+
+    /**
+     * Notify our observers of an interface link status change.
+     * (typically, an Ethernet cable has been plugged-in or unplugged).
+     */
+    private void notifyInterfaceLinkStateChanged(String iface, boolean up) {
+        for (INetworkManagementEventObserver obs : mObservers) {
+            try {
+                obs.interfaceLinkStateChanged(iface, up);
             } catch (Exception ex) {
                 Slog.w(TAG, "Observer notifier failed", ex);
             }
@@ -197,6 +211,7 @@
                  * Format: "NNN Iface added <name>"
                  *         "NNN Iface removed <name>"
                  *         "NNN Iface changed <name> <up/down>"
+                 *         "NNN Iface linkstatus <name> <up/down>"
                  */
                 if (cooked.length < 4 || !cooked[1].equals("Iface")) {
                     throw new IllegalStateException(
@@ -209,7 +224,10 @@
                     notifyInterfaceRemoved(cooked[3]);
                     return true;
                 } else if (cooked[2].equals("changed") && cooked.length == 5) {
-                    notifyInterfaceLinkStatusChanged(cooked[3], cooked[4].equals("up"));
+                    notifyInterfaceStatusChanged(cooked[3], cooked[4].equals("up"));
+                    return true;
+                } else if (cooked[2].equals("linkstatus") && cooked.length == 5) {
+                    notifyInterfaceLinkStateChanged(cooked[3], cooked[4].equals("up"));
                     return true;
                 }
                 throw new IllegalStateException(
diff --git a/services/java/com/android/server/ThrottleService.java b/services/java/com/android/server/ThrottleService.java
index d841cb3..ccfc99b 100644
--- a/services/java/com/android/server/ThrottleService.java
+++ b/services/java/com/android/server/ThrottleService.java
@@ -160,7 +160,7 @@
             mIface = iface;
         }
 
-        public void interfaceLinkStatusChanged(String iface, boolean link) {
+        public void interfaceStatusChanged(String iface, boolean link) {
             if (link) {
                 if (TextUtils.equals(iface, mIface)) {
                     mHandler.obtainMessage(mMsg).sendToTarget();
@@ -176,6 +176,8 @@
             }
         }
 
+        public void interfaceLinkStateChanged(String iface, boolean linkState) {}
+
         public void interfaceRemoved(String iface) {}
     }
 
diff --git a/services/java/com/android/server/connectivity/Tethering.java b/services/java/com/android/server/connectivity/Tethering.java
index fc1b2c4..60e8264 100644
--- a/services/java/com/android/server/connectivity/Tethering.java
+++ b/services/java/com/android/server/connectivity/Tethering.java
@@ -202,8 +202,11 @@
         mDnsServers[1] = DNS_DEFAULT_SERVER2;
     }
 
-    public void interfaceLinkStatusChanged(String iface, boolean link) {
-        if (DEBUG) Log.d(TAG, "interfaceLinkStatusChanged " + iface + ", " + link);
+    public void interfaceLinkStateChanged(String iface, boolean up) {
+    }
+
+    public void interfaceStatusChanged(String iface, boolean up) {
+        if (DEBUG) Log.d(TAG, "interfaceStatusChanged " + iface + ", " + up);
         boolean found = false;
         boolean usb = false;
         if (isWifi(iface)) {
@@ -218,7 +221,7 @@
 
         synchronized (mIfaces) {
             TetherInterfaceSM sm = mIfaces.get(iface);
-            if (link) {
+            if (up) {
                 if (sm == null) {
                     sm = new TetherInterfaceSM(iface, mLooper, usb);
                     mIfaces.put(iface, sm);