Add dumpsys support for bluetooth

Bug: 18159457
Change-Id: I8d3f7084a7b089c111fd622ff526630bfdfa7300
diff --git a/core/java/android/bluetooth/IBluetooth.aidl b/core/java/android/bluetooth/IBluetooth.aidl
index 992f601..cd4535a 100644
--- a/core/java/android/bluetooth/IBluetooth.aidl
+++ b/core/java/android/bluetooth/IBluetooth.aidl
@@ -98,4 +98,7 @@
     boolean isActivityAndEnergyReportingSupported();
     void getActivityEnergyInfoFromController();
     BluetoothActivityEnergyInfo reportActivityInfo();
+
+    // for dumpsys support
+    String dump();
 }
diff --git a/core/java/com/android/internal/util/StateMachine.java b/core/java/com/android/internal/util/StateMachine.java
index d26f79e..7ad3470 100644
--- a/core/java/com/android/internal/util/StateMachine.java
+++ b/core/java/com/android/internal/util/StateMachine.java
@@ -1940,13 +1940,19 @@
      * @param args
      */
     public void dump(FileDescriptor fd, PrintWriter pw, String[] args) {
-        pw.println(getName() + ":");
-        pw.println(" total records=" + getLogRecCount());
+        pw.println(this.toString());
+    }
+
+    @Override
+    public String toString() {
+        StringBuilder sb = new StringBuilder();
+        sb.append(getName() + ":\n");
+        sb.append(" total records=" + getLogRecCount() + "\n");
         for (int i = 0; i < getLogRecSize(); i++) {
-            pw.printf(" rec[%d]: %s\n", i, getLogRec(i).toString());
-            pw.flush();
+            sb.append(" rec[" + i + "]: " + getLogRec(i).toString() + "\n");
         }
-        pw.println("curState=" + getCurrentState().getName());
+        sb.append("curState=" + getCurrentState().getName());
+        return sb.toString();
     }
 
     /**
diff --git a/services/core/java/com/android/server/BluetoothManagerService.java b/services/core/java/com/android/server/BluetoothManagerService.java
index 636228b..ebdd386 100644
--- a/services/core/java/com/android/server/BluetoothManagerService.java
+++ b/services/core/java/com/android/server/BluetoothManagerService.java
@@ -44,6 +44,10 @@
 import android.os.UserHandle;
 import android.provider.Settings;
 import android.util.Log;
+
+import java.io.FileDescriptor;
+import java.io.PrintWriter;
+
 class BluetoothManagerService extends IBluetoothManager.Stub {
     private static final String TAG = "BluetoothManagerService";
     private static final boolean DBG = true;
@@ -1282,4 +1286,21 @@
             // todo: notify user to power down and power up phone to make bluetooth work.
         }
     }
+
+    @Override
+    public void dump(FileDescriptor fd, PrintWriter writer, String[] args) {
+        writer.println("enabled: " + mEnable);
+        writer.println("state: " + mState);
+        writer.println("address: " + mAddress);
+        writer.println("name: " + mName);
+        if (mBluetooth == null) {
+            writer.println("Bluetooth Service not connected");
+        } else {
+            try {
+                writer.println(mBluetooth.dump());
+            } catch (RemoteException re) {
+                writer.println("RemoteException while calling Bluetooth Service");
+            }
+        }
+    }
 }