Cache bluetooth connection state from callback

Bug: 21444506
Change-Id: Idebcc1974fdd7551645d10eea4e30d9e1133556b
diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/policy/BluetoothControllerImpl.java b/packages/SystemUI/src/com/android/systemui/statusbar/policy/BluetoothControllerImpl.java
index ed98a159..3cc9297 100644
--- a/packages/SystemUI/src/com/android/systemui/statusbar/policy/BluetoothControllerImpl.java
+++ b/packages/SystemUI/src/com/android/systemui/statusbar/policy/BluetoothControllerImpl.java
@@ -41,7 +41,7 @@
     private final LocalBluetoothManager mLocalBluetoothManager;
 
     private boolean mEnabled;
-    private boolean mConnecting;
+    private int mConnectionState = BluetoothAdapter.STATE_DISCONNECTED;
     private CachedBluetoothDevice mLastDevice;
 
     private final H mHandler = new H();
@@ -63,7 +63,7 @@
             return;
         }
         pw.print("  mEnabled="); pw.println(mEnabled);
-        pw.print("  mConnecting="); pw.println(mConnecting);
+        pw.print("  mConnectionState="); pw.println(stateToString(mConnectionState));
         pw.print("  mLastDevice="); pw.println(mLastDevice);
         pw.print("  mCallbacks.size="); pw.println(mCallbacks.size());
         pw.println("  Bluetooth Devices:");
@@ -73,10 +73,25 @@
         }
     }
 
+    private static String stateToString(int state) {
+        switch (state) {
+            case BluetoothAdapter.STATE_CONNECTED:
+                return "CONNECTED";
+            case BluetoothAdapter.STATE_CONNECTING:
+                return "CONNECTING";
+            case BluetoothAdapter.STATE_DISCONNECTED:
+                return "DISCONNECTED";
+            case BluetoothAdapter.STATE_DISCONNECTING:
+                return "DISCONNECTING";
+        }
+        return "UNKNOWN(" + state + ")";
+    }
+
     private String getDeviceString(CachedBluetoothDevice device) {
         return device.getName() + " " + device.getBondState() + " " + device.isConnected();
     }
 
+    @Override
     public void addStateChangedCallback(Callback cb) {
         mCallbacks.add(cb);
         mHandler.sendEmptyMessage(H.MSG_STATE_CHANGED);
@@ -94,14 +109,12 @@
 
     @Override
     public boolean isBluetoothConnected() {
-        return mLocalBluetoothManager != null
-                && mLocalBluetoothManager.getBluetoothAdapter().getConnectionState()
-                == BluetoothAdapter.STATE_CONNECTED;
+        return mConnectionState == BluetoothAdapter.STATE_CONNECTED;
     }
 
     @Override
     public boolean isBluetoothConnecting() {
-        return mConnecting;
+        return mConnectionState == BluetoothAdapter.STATE_CONNECTING;
     }
 
     @Override
@@ -190,7 +203,7 @@
 
     @Override
     public void onConnectionStateChanged(CachedBluetoothDevice cachedDevice, int state) {
-        mConnecting = state == BluetoothAdapter.STATE_CONNECTING;
+        mConnectionState = state;
         mLastDevice = cachedDevice;
         updateConnected();
         mHandler.sendEmptyMessage(H.MSG_STATE_CHANGED);
@@ -225,7 +238,7 @@
         }
 
         private void fireStateChange(BluetoothController.Callback cb) {
-            cb.onBluetoothStateChange(mEnabled, mConnecting);
+            cb.onBluetoothStateChange(mEnabled);
         }
     }
 }