Tethering: Use battery changed broadcast instead of UMS broadcast to determine
when USB is connected and disconnected.

This is needed because the UMS broadcasts will not be sent when UMSis disabled.

Change-Id: I4488fee2c19ac9c901596d1430ea371df97e4325
Signed-off-by: Mike Lockwood <lockwood@android.com>
diff --git a/services/java/com/android/server/connectivity/Tethering.java b/services/java/com/android/server/connectivity/Tethering.java
index 16638bc..1c47bb4 100644
--- a/services/java/com/android/server/connectivity/Tethering.java
+++ b/services/java/com/android/server/connectivity/Tethering.java
@@ -31,6 +31,7 @@
 import android.net.IConnectivityManager;
 import android.net.INetworkManagementEventObserver;
 import android.net.NetworkInfo;
+import android.os.BatteryManager;
 import android.os.Binder;
 import android.os.IBinder;
 import android.os.INetworkManagementService;
@@ -88,11 +89,6 @@
 
     private String mUpstreamIfaceName;
 
-    // turning on/off RNDIS resets the interface generating and extra discon/conn cycle
-    // count how many to ignore..  Self correcting if you plug/unplug a bunch of times.
-    // TODO - brittle - maybe don't need?
-    private int mUsbResetExpected = 0;
-
     HierarchicalStateMachine mTetherMasterSM;
 
     public Tethering(Context context) {
@@ -116,8 +112,7 @@
 
         // TODO - remove this hack after real USB connections are detected.
         IntentFilter filter = new IntentFilter();
-        filter.addAction(Intent.ACTION_UMS_DISCONNECTED);
-        filter.addAction(Intent.ACTION_UMS_CONNECTED);
+        filter.addAction(Intent.ACTION_BATTERY_CHANGED);
         filter.addAction(ConnectivityManager.CONNECTIVITY_ACTION);
         mStateReceiver = new StateReceiver();
         mContext.registerReceiver(mStateReceiver, filter);
@@ -428,26 +423,10 @@
     private class StateReceiver extends BroadcastReceiver {
         public void onReceive(Context content, Intent intent) {
             String action = intent.getAction();
-            if (action.equals(Intent.ACTION_UMS_CONNECTED)) {
-                Log.w(TAG, "got UMS connected");
-                synchronized (Tethering.this) {
-                    if(mUsbResetExpected != 0) {
-                        Log.w(TAG, "mUsbResetExpected == " + mUsbResetExpected + ", ignored");
-                        mUsbResetExpected--;
-                        return;
-                    }
-                }
-                Tethering.this.enableUsbIfaces(true); // add them
-            } else if (action.equals(Intent.ACTION_UMS_DISCONNECTED)) {
-                Log.w(TAG, "got UMS disconneded broadcast");
-                synchronized (Tethering.this) {
-                    if(mUsbResetExpected != 0) {
-                        Log.w(TAG, "mUsbResetExpected == " + mUsbResetExpected + ", ignored");
-                        mUsbResetExpected--;
-                        return;
-                    }
-                }
-                Tethering.this.enableUsbIfaces(false); // remove them
+            if (action.equals(Intent.ACTION_BATTERY_CHANGED)) {
+                boolean usbConnected = (intent.getIntExtra(BatteryManager.EXTRA_PLUGGED, -1)
+                        == BatteryManager.BATTERY_PLUGGED_USB);
+                Tethering.this.enableUsbIfaces(usbConnected); // add or remove them
             } else if (action.equals(ConnectivityManager.CONNECTIVITY_ACTION)) {
                 IBinder b = ServiceManager.getService(Context.CONNECTIVITY_SERVICE);
                 IConnectivityManager service = IConnectivityManager.Stub.asInterface(b);
@@ -497,10 +476,8 @@
 
         try {
             if (enabled) {
-                // turning this on will reset USB and generate two bogus events - ignore them
                 synchronized (this) {
                     if (!service.isUsbRNDISStarted()) {
-                        mUsbResetExpected += 2;
                         service.startUsbRNDIS();
                     }
                 }