Snap for 4826885 from e76a08babeec457d3ec28d24d91c833fbd223ba5 to pi-release

Change-Id: I7e036bb4fde4c0c2839fec79227fe5277e46d815
diff --git a/Common/src/com/googlecode/android_scripting/facade/bluetooth/BluetoothA2dpFacade.java b/Common/src/com/googlecode/android_scripting/facade/bluetooth/BluetoothA2dpFacade.java
index 932bcbd..cee0fe9 100644
--- a/Common/src/com/googlecode/android_scripting/facade/bluetooth/BluetoothA2dpFacade.java
+++ b/Common/src/com/googlecode/android_scripting/facade/bluetooth/BluetoothA2dpFacade.java
@@ -140,8 +140,9 @@
         if (sA2dpProfile == null) {
             return false;
         }
-        BluetoothDevice mDevice = BluetoothFacade.getDevice(
-                BluetoothFacade.DiscoveredDevices, deviceID);
+        BluetoothDevice mDevice =
+                BluetoothFacade.getDevice(
+                        mBluetoothAdapter.getBondedDevices(), deviceID);
         Log.d("Connecting to device " + mDevice.getAliasName());
         return a2dpConnect(mDevice);
     }
@@ -161,9 +162,11 @@
         if (sA2dpProfile == null) {
             return false;
         }
-        List<BluetoothDevice> connectedA2dpDevices = sA2dpProfile.getConnectedDevices();
+        List<BluetoothDevice> connectedA2dpDevices =
+                sA2dpProfile.getConnectedDevices();
         Log.d("Connected a2dp devices " + connectedA2dpDevices);
-        BluetoothDevice mDevice = BluetoothFacade.getDevice(connectedA2dpDevices, deviceID);
+        BluetoothDevice mDevice = BluetoothFacade.getDevice(
+                connectedA2dpDevices, deviceID);
         return a2dpDisconnect(mDevice);
     }
 
@@ -179,10 +182,9 @@
             continue;
         }
         return sA2dpProfile.getDevicesMatchingConnectionStates(
-                    new int[] {
-                            BluetoothProfile.STATE_CONNECTED,
-                            BluetoothProfile.STATE_CONNECTING,
-                            BluetoothProfile.STATE_DISCONNECTING});
+                new int[] { BluetoothProfile.STATE_CONNECTED,
+                    BluetoothProfile.STATE_CONNECTING,
+                    BluetoothProfile.STATE_DISCONNECTING});
     }
 
     @Override
diff --git a/Common/src/com/googlecode/android_scripting/facade/bluetooth/BluetoothA2dpSinkFacade.java b/Common/src/com/googlecode/android_scripting/facade/bluetooth/BluetoothA2dpSinkFacade.java
index 1b1e5b6..5d07200 100644
--- a/Common/src/com/googlecode/android_scripting/facade/bluetooth/BluetoothA2dpSinkFacade.java
+++ b/Common/src/com/googlecode/android_scripting/facade/bluetooth/BluetoothA2dpSinkFacade.java
@@ -16,9 +16,6 @@
 
 package com.googlecode.android_scripting.facade.bluetooth;
 
-import java.util.List;
-import java.util.ArrayList;
-
 import android.app.Service;
 import android.bluetooth.BluetoothA2dpSink;
 import android.bluetooth.BluetoothAdapter;
@@ -33,131 +30,182 @@
 import com.googlecode.android_scripting.rpc.Rpc;
 import com.googlecode.android_scripting.rpc.RpcParameter;
 
+import java.util.ArrayList;
+import java.util.List;
+
 public class BluetoothA2dpSinkFacade extends RpcReceiver {
-  static final ParcelUuid[] SOURCE_UUIDS = {
-    BluetoothUuid.AudioSource,
-  };
+    static final ParcelUuid[] SOURCE_UUIDS = {
+        BluetoothUuid.AudioSource,
+    };
 
-  private final Service mService;
-  private final BluetoothAdapter mBluetoothAdapter;
+    private final Service mService;
+    private final BluetoothAdapter mBluetoothAdapter;
 
-  private static BluetoothA2dpSink sA2dpSinkProfile = null;
+    private static BluetoothA2dpSink sA2dpSinkProfile = null;
 
-  public BluetoothA2dpSinkFacade(FacadeManager manager) {
-    super(manager);
-    mService = manager.getService();
-    mBluetoothAdapter = BluetoothAdapter.getDefaultAdapter();
-    mBluetoothAdapter.getProfileProxy(mService, new A2dpSinkServiceListener(),
+    public BluetoothA2dpSinkFacade(FacadeManager manager) {
+        super(manager);
+        mService = manager.getService();
+        mBluetoothAdapter = BluetoothAdapter.getDefaultAdapter();
+        mBluetoothAdapter.getProfileProxy(mService, new A2dpSinkServiceListener(),
         BluetoothProfile.A2DP_SINK);
-  }
+    }
 
-  class A2dpSinkServiceListener implements BluetoothProfile.ServiceListener {
-    @Override
-    public void onServiceConnected(int profile, BluetoothProfile proxy) {
-      sA2dpSinkProfile = (BluetoothA2dpSink) proxy;
+    class A2dpSinkServiceListener implements BluetoothProfile.ServiceListener {
+        @Override
+        public void onServiceConnected(int profile, BluetoothProfile proxy) {
+            sA2dpSinkProfile = (BluetoothA2dpSink) proxy;
+        }
+
+        @Override
+        public void onServiceDisconnected(int profile) {
+            sA2dpSinkProfile = null;
+        }
+    }
+
+    /**
+     * Connect A2dp Sink profile.
+     * @param device - the Bluetooth Device object to connect.
+     * @return if the A2dp Sink Profile connection was successful or not.
+     */
+    public Boolean a2dpSinkConnect(BluetoothDevice device) {
+        if (sA2dpSinkProfile == null) return false;
+        return sA2dpSinkProfile.connect(device);
+    }
+
+    /**
+     * Disconnect A2dp Sink profile.
+     * @param device - the Bluetooth Device object to connect.
+     * @return if the A2dp Sink Profile disconnection was successful or not.
+     */
+    public Boolean a2dpSinkDisconnect(BluetoothDevice device) {
+        if (sA2dpSinkProfile == null) return false;
+        return sA2dpSinkProfile.disconnect(device);
+    }
+
+    /**
+     * Set priority of the profile.
+     * @param deviceStr - Mac address of a Bluetooth device.
+     * @param priority - Priority that needs to be set.
+     */
+    @Rpc(description = "Set priority of the profile")
+    public void bluetoothA2dpSinkSetPriority(
+            @RpcParameter(name = "device", description = "Mac address of a BT device.")
+            String deviceStr,
+            @RpcParameter(name = "priority", description = "Priority that needs to be set.")
+            Integer priority)
+            throws Exception {
+        if (sA2dpSinkProfile == null) return;
+        BluetoothDevice device =
+                BluetoothFacade.getDevice(
+                        mBluetoothAdapter.getBondedDevices(), deviceStr);
+        Log.d("Changing priority of device "
+                + device.getAliasName() + " p: " + priority);
+        sA2dpSinkProfile.setPriority(device, priority);
+    }
+
+    /**
+     * Get priority of the profile.
+      * @param deviceStr - Mac address of a Bluetooth device.
+      * @return priority of the device.
+     */
+    @Rpc(description = "get priority of the profile")
+    public Integer bluetoothA2dpSinkGetPriority(
+            @RpcParameter(name = "device", description = "Mac address of a BT device.")
+                String deviceStr)
+            throws Exception {
+        if (sA2dpSinkProfile == null) return BluetoothProfile.PRIORITY_UNDEFINED;
+        BluetoothDevice device =
+                BluetoothFacade.getDevice(
+                mBluetoothAdapter.getBondedDevices(), deviceStr);
+        return sA2dpSinkProfile.getPriority(device);
+    }
+
+    /**
+     * Is A2dpSink profile ready.
+     * @return if the Profile is ready or not.
+     */
+    @Rpc(description = "Is A2dpSink profile ready.")
+    public Boolean bluetoothA2dpSinkIsReady() {
+        return sA2dpSinkProfile != null;
+    }
+
+    /**
+     * Connect to an A2DP Sink device.
+     * @param deviceStr - Name or MAC address of a bluetooth device.
+     * @return connection to A2DP was successful.
+     */
+    @Rpc(description = "Connect to an A2DP Sink device.")
+    public Boolean bluetoothA2dpSinkConnect(
+            @RpcParameter(name = "device", description =
+                "Name or MAC address of a bluetooth device.") String deviceStr)
+            throws Exception {
+        if (sA2dpSinkProfile == null) return false;
+        BluetoothDevice device =
+                BluetoothFacade.getDevice(
+                BluetoothFacade.DiscoveredDevices, deviceStr);
+        Log.d("Connecting to device " + device.getAliasName());
+        return a2dpSinkConnect(device);
+    }
+
+    /**
+     * Disconnect to an A2DP Sink device.
+     * @param deviceStr - Name or MAC address of a bluetooth device.
+     * @return disconnection to A2DP was successful or not.
+     */
+    @Rpc(description = "Disconnect an A2DP Sink device.")
+    public Boolean bluetoothA2dpSinkDisconnect(
+            @RpcParameter(name = "device", description = "Name or MAC address of a device.")
+                String deviceStr) {
+        if (sA2dpSinkProfile == null) return false;
+        Log.d("Connected devices: " + sA2dpSinkProfile.getConnectedDevices());
+        BluetoothDevice device = null;
+        try {
+            device = BluetoothFacade.getDevice(
+                    sA2dpSinkProfile.getConnectedDevices(), deviceStr);
+            return a2dpSinkDisconnect(device);
+        } catch (Exception e) {
+            // Do nothing here. Since it is disconnect this function should force shutdown anyways.
+            Log.d("bluetoothA2dpSinkDisconnect error while getDevice " + e);
+        }
+        return false;
+    }
+
+    /**
+     * Get all the devices connected through A2DP Sink.
+     * @return List of all the devices connected through A2dp Sink.
+     */
+    @Rpc(description = "Get all the devices connected through A2DP Sink.")
+    public List<BluetoothDevice> bluetoothA2dpSinkGetConnectedDevices() {
+        if (sA2dpSinkProfile == null) return new ArrayList<BluetoothDevice>();
+        return sA2dpSinkProfile.getConnectedDevices();
+    }
+
+    /**
+     * Get the connection status of a device.
+     * @param deviceID - Name or MAC address of a bluetooth device.
+     * @return connection status of the device.
+     */
+    @Rpc(description = "Get the connection status of a device.")
+    public Integer bluetoothA2dpSinkGetConnectionStatus(
+            @RpcParameter(name = "deviceID",
+                description = "Name or MAC address of a bluetooth device.")
+                String deviceID) {
+        if (sA2dpSinkProfile == null) {
+            return BluetoothProfile.STATE_DISCONNECTED;
+        }
+        List<BluetoothDevice> deviceList = sA2dpSinkProfile.getConnectedDevices();
+        BluetoothDevice device;
+        try {
+            device = BluetoothFacade.getDevice(deviceList, deviceID);
+        } catch (Exception e) {
+            Log.e(e);
+            return BluetoothProfile.STATE_DISCONNECTED;
+        }
+        return sA2dpSinkProfile.getConnectionState(device);
     }
 
     @Override
-    public void onServiceDisconnected(int profile) {
-      sA2dpSinkProfile = null;
+    public void shutdown() {
     }
-  }
-
-  public Boolean a2dpSinkConnect(BluetoothDevice device) {
-    if (sA2dpSinkProfile == null) return false;
-    return sA2dpSinkProfile.connect(device);
-  }
-
-  public Boolean a2dpSinkDisconnect(BluetoothDevice device) {
-    if (sA2dpSinkProfile == null) return false;
-    return sA2dpSinkProfile.disconnect(device);
-  }
-
-  @Rpc(description = "Set priority of the profile")
-  public void bluetoothA2dpSinkSetPriority(
-      @RpcParameter(name = "device", description = "Mac address of a BT device.")
-      String deviceStr,
-      @RpcParameter(name = "priority", description = "Priority that needs to be set.")
-      Integer priority)
-      throws Exception {
-    if (sA2dpSinkProfile == null) return;
-    BluetoothDevice device =
-        BluetoothFacade.getDevice(mBluetoothAdapter.getBondedDevices(), deviceStr);
-    Log.d("Changing priority of device " + device.getAliasName() + " p: " + priority);
-    sA2dpSinkProfile.setPriority(device, priority);
-  }
-
-  @Rpc(description = "get priority of the profile")
-  public Integer bluetoothA2dpSinkGetPriority(
-      @RpcParameter(name = "device", description = "Mac address of a BT device.")
-      String deviceStr)
-      throws Exception {
-    if (sA2dpSinkProfile == null) return BluetoothProfile.PRIORITY_UNDEFINED;
-    BluetoothDevice device =
-        BluetoothFacade.getDevice(mBluetoothAdapter.getBondedDevices(), deviceStr);
-    return sA2dpSinkProfile.getPriority(device);
-  }
-
-  @Rpc(description = "Is A2dpSink profile ready.")
-  public Boolean bluetoothA2dpSinkIsReady() {
-    return (sA2dpSinkProfile != null);
-  }
-
-  @Rpc(description = "Connect to an A2DP Sink device.")
-  public Boolean bluetoothA2dpSinkConnect(
-      @RpcParameter(name = "device", description = "Name or MAC address of a bluetooth device.")
-      String deviceStr)
-      throws Exception {
-    if (sA2dpSinkProfile == null) return false;
-    BluetoothDevice device =
-        BluetoothFacade.getDevice(BluetoothFacade.DiscoveredDevices, deviceStr);
-    Log.d("Connecting to device " + device.getAliasName());
-    return a2dpSinkConnect(device);
-  }
-
-  @Rpc(description = "Disconnect an A2DP Sink device.")
-  public Boolean bluetoothA2dpSinkDisconnect(
-      @RpcParameter(name = "device", description = "Name or MAC address of a device.")
-      String deviceStr) {
-    if (sA2dpSinkProfile == null) return false;
-    Log.d("Connected devices: " + sA2dpSinkProfile.getConnectedDevices());
-    BluetoothDevice device = null;
-    try {
-      device = BluetoothFacade.getDevice(sA2dpSinkProfile.getConnectedDevices(), deviceStr);
-      return a2dpSinkDisconnect(device);
-    } catch (Exception e) {
-        // Do nothing here. Since it is disconnect this function should force shutdown anyways.
-        Log.d("bluetoothA2dpSinkDisconnect error while getDevice " + e);
-    }
-    return false;
-  }
-
-  @Rpc(description = "Get all the devices connected through A2DP Sink.")
-  public List<BluetoothDevice> bluetoothA2dpSinkGetConnectedDevices() {
-    if (sA2dpSinkProfile == null) return new ArrayList<BluetoothDevice>();
-    return sA2dpSinkProfile.getConnectedDevices();
-  }
-
-  @Rpc(description = "Get the connection status of a device.")
-  public Integer bluetoothA2dpSinkGetConnectionStatus(
-      @RpcParameter(name = "deviceID",
-                    description = "Name or MAC address of a bluetooth device.")
-        String deviceID) {
-    if (sA2dpSinkProfile == null) {
-      return BluetoothProfile.STATE_DISCONNECTED;
-    }
-    List<BluetoothDevice> deviceList = sA2dpSinkProfile.getConnectedDevices();
-    BluetoothDevice device;
-    try {
-      device = BluetoothFacade.getDevice(deviceList, deviceID);
-    } catch (Exception e) {
-      Log.e(e);
-      return BluetoothProfile.STATE_DISCONNECTED;
-    }
-    return sA2dpSinkProfile.getConnectionState(device);
-  }
-
-  @Override
-  public void shutdown() {
-  }
 }
diff --git a/Common/src/com/googlecode/android_scripting/facade/bluetooth/BluetoothAvrcpFacade.java b/Common/src/com/googlecode/android_scripting/facade/bluetooth/BluetoothAvrcpFacade.java
index 4ecba05..52bb36d 100644
--- a/Common/src/com/googlecode/android_scripting/facade/bluetooth/BluetoothAvrcpFacade.java
+++ b/Common/src/com/googlecode/android_scripting/facade/bluetooth/BluetoothAvrcpFacade.java
@@ -16,9 +16,6 @@
 
 package com.googlecode.android_scripting.facade.bluetooth;
 
-import java.lang.reflect.InvocationTargetException;
-import java.lang.reflect.Method;
-import java.util.List;
 
 import android.app.Service;
 import android.bluetooth.BluetoothAdapter;
@@ -33,65 +30,79 @@
 import com.googlecode.android_scripting.jsonrpc.RpcReceiver;
 import com.googlecode.android_scripting.rpc.Rpc;
 
+import java.lang.reflect.InvocationTargetException;
+import java.lang.reflect.Method;
+import java.util.List;
+
 public class BluetoothAvrcpFacade extends RpcReceiver {
-  static final ParcelUuid[] AVRCP_UUIDS = {
-    BluetoothUuid.AvrcpTarget, BluetoothUuid.AvrcpController
-  };
-  private final Service mService;
-  private final BluetoothAdapter mBluetoothAdapter;
+    static final ParcelUuid[] AVRCP_UUIDS = {
+        BluetoothUuid.AvrcpTarget, BluetoothUuid.AvrcpController
+    };
+    private final Service mService;
+    private final BluetoothAdapter mBluetoothAdapter;
 
-  private static boolean sIsAvrcpReady = false;
-  private static BluetoothAvrcpController sAvrcpProfile = null;
+    private static boolean sIsAvrcpReady = false;
+    private static BluetoothAvrcpController sAvrcpProfile = null;
 
-  public BluetoothAvrcpFacade(FacadeManager manager) {
-    super(manager);
-    mService = manager.getService();
-    mBluetoothAdapter = BluetoothAdapter.getDefaultAdapter();
-    mBluetoothAdapter.getProfileProxy(mService, new AvrcpServiceListener(),
+    public BluetoothAvrcpFacade(FacadeManager manager) {
+        super(manager);
+        mService = manager.getService();
+        mBluetoothAdapter = BluetoothAdapter.getDefaultAdapter();
+        mBluetoothAdapter.getProfileProxy(mService, new AvrcpServiceListener(),
         BluetoothProfile.AVRCP_CONTROLLER);
-  }
+    }
 
-  class AvrcpServiceListener implements BluetoothProfile.ServiceListener {
-    @Override
-    public void onServiceConnected(int profile, BluetoothProfile proxy) {
-      sAvrcpProfile = (BluetoothAvrcpController) proxy;
-      sIsAvrcpReady = true;
+    class AvrcpServiceListener implements BluetoothProfile.ServiceListener {
+        @Override
+        public void onServiceConnected(int profile, BluetoothProfile proxy) {
+            sAvrcpProfile = (BluetoothAvrcpController) proxy;
+            sIsAvrcpReady = true;
+        }
+
+        @Override
+        public void onServiceDisconnected(int profile) {
+            sIsAvrcpReady = false;
+        }
+    }
+
+    /**
+     * Is Avrcp profile ready.
+     * @return Avrcp profile is ready or not.
+     */
+    @Rpc(description = "Is Avrcp profile ready.")
+    public Boolean bluetoothAvrcpIsReady() {
+        return sIsAvrcpReady;
+    }
+
+    /**
+     * Get all the devices connected through AVRCP.
+     * @return Lsit of the devices connected through AVRCP.
+     */
+    @Rpc(description = "Get all the devices connected through AVRCP.")
+    public List<BluetoothDevice> bluetoothAvrcpGetConnectedDevices() {
+        if (!sIsAvrcpReady) {
+            Log.d("AVRCP profile is not ready.");
+            return null;
+        }
+        return sAvrcpProfile.getConnectedDevices();
+    }
+
+    /**
+     * Close AVRCP connection.
+     */
+    @Rpc(description = "Close AVRCP connection.")
+    public void bluetoothAvrcpDisconnect() throws NoSuchMethodException,
+            IllegalAccessException, IllegalArgumentException,
+                InvocationTargetException {
+        if (!sIsAvrcpReady) {
+            Log.d("AVRCP profile is not ready.");
+            return;
+        }
+        Method m = sAvrcpProfile.getClass().getMethod("close");
+        m.invoke(sAvrcpProfile);
     }
 
     @Override
-    public void onServiceDisconnected(int profile) {
-      sIsAvrcpReady = false;
+    public void shutdown() {
     }
-  }
-
-  @Rpc(description = "Is Avrcp profile ready.")
-  public Boolean bluetoothAvrcpIsReady() {
-    return sIsAvrcpReady;
-  }
-
-  @Rpc(description = "Get all the devices connected through AVRCP.")
-  public List<BluetoothDevice> bluetoothAvrcpGetConnectedDevices() {
-    if (!sIsAvrcpReady) {
-        Log.d("AVRCP profile is not ready.");
-        return null;
-    }
-    return sAvrcpProfile.getConnectedDevices();
-  }
-
-  @Rpc(description = "Close AVRCP connection.")
-  public void bluetoothAvrcpDisconnect() throws NoSuchMethodException,
-                                                IllegalAccessException,
-                                                IllegalArgumentException,
-                                                InvocationTargetException {
-      if (!sIsAvrcpReady) {
-          Log.d("AVRCP profile is not ready.");
-          return;
-      }
-      Method m = sAvrcpProfile.getClass().getMethod("close");
-      m.invoke(sAvrcpProfile);
-  }
-
-  @Override
-  public void shutdown() {
-  }
 }
diff --git a/Common/src/com/googlecode/android_scripting/facade/bluetooth/BluetoothBroadcastHelper.java b/Common/src/com/googlecode/android_scripting/facade/bluetooth/BluetoothBroadcastHelper.java
index f3bc288..aab5e63 100644
--- a/Common/src/com/googlecode/android_scripting/facade/bluetooth/BluetoothBroadcastHelper.java
+++ b/Common/src/com/googlecode/android_scripting/facade/bluetooth/BluetoothBroadcastHelper.java
@@ -25,36 +25,45 @@
 
 public class BluetoothBroadcastHelper {
 
-  private static BroadcastReceiver mListener;
-  private final Context mContext;
-  private final BroadcastReceiver mReceiver;
-  private final String[] mActions = {BluetoothDevice.ACTION_FOUND,
-                                     BluetoothDevice.ACTION_UUID,
-                                     BluetoothAdapter.ACTION_DISCOVERY_STARTED,
-                                     BluetoothAdapter.ACTION_DISCOVERY_FINISHED};
+    private static BroadcastReceiver sListener;
+    private final Context mContext;
+    private final BroadcastReceiver mReceiver;
+    private final String[] mActions = {BluetoothDevice.ACTION_FOUND,
+            BluetoothDevice.ACTION_UUID,
+            BluetoothAdapter.ACTION_DISCOVERY_STARTED,
+            BluetoothAdapter.ACTION_DISCOVERY_FINISHED};
 
-  public BluetoothBroadcastHelper(Context context, BroadcastReceiver listener) {
-    mContext = context;
-    mListener = listener;
-    mReceiver = new BluetoothReceiver();
-  }
-
-  public void startReceiver() {
-    IntentFilter mIntentFilter = new IntentFilter();
-    for(String action : mActions) {
-      mIntentFilter.addAction(action);
+    public BluetoothBroadcastHelper(Context context, BroadcastReceiver listener) {
+        mContext = context;
+        sListener = listener;
+        mReceiver = new BluetoothReceiver();
     }
-    mContext.registerReceiver(mReceiver, mIntentFilter);
-  }
 
-  public static class BluetoothReceiver extends BroadcastReceiver {
-    @Override
-    public void onReceive(Context context, Intent intent) {
-      mListener.onReceive(context, intent);
+    /**
+     * Start the Receiver.
+     */
+    public void startReceiver() {
+        IntentFilter mIntentFilter = new IntentFilter();
+        for (String action : mActions) {
+            mIntentFilter.addAction(action);
+        }
+        mContext.registerReceiver(mReceiver, mIntentFilter);
     }
-  }
 
-  public void stopReceiver() {
-    mContext.unregisterReceiver(mReceiver);
-  }
+    /**
+     * Bluetooth Receiver Class.
+     */
+    public static class BluetoothReceiver extends BroadcastReceiver {
+        @Override
+        public void onReceive(Context context, Intent intent) {
+            sListener.onReceive(context, intent);
+        }
+    }
+
+    /**
+     * Unregister the receiver.
+     */
+    public void stopReceiver() {
+        mContext.unregisterReceiver(mReceiver);
+    }
 }
diff --git a/Common/src/com/googlecode/android_scripting/facade/bluetooth/BluetoothConnectionFacade.java b/Common/src/com/googlecode/android_scripting/facade/bluetooth/BluetoothConnectionFacade.java
index 8443883..6945f9e 100644
--- a/Common/src/com/googlecode/android_scripting/facade/bluetooth/BluetoothConnectionFacade.java
+++ b/Common/src/com/googlecode/android_scripting/facade/bluetooth/BluetoothConnectionFacade.java
@@ -16,13 +16,6 @@
 
 package com.googlecode.android_scripting.facade.bluetooth;
 
-import java.util.ArrayList;
-import java.util.Arrays;
-import java.util.Collections;
-import java.util.HashMap;
-import java.util.List;
-import java.util.Map;
-
 import android.app.Service;
 import android.bluetooth.BluetoothA2dp;
 import android.bluetooth.BluetoothA2dpSink;
@@ -58,6 +51,13 @@
 import org.json.JSONArray;
 import org.json.JSONException;
 
+import java.util.ArrayList;
+import java.util.Arrays;
+import java.util.Collections;
+import java.util.HashMap;
+import java.util.List;
+import java.util.Map;
+
 public class BluetoothConnectionFacade extends RpcReceiver {
 
     private final Service mService;
diff --git a/Common/src/com/googlecode/android_scripting/facade/bluetooth/BluetoothDiscoveryHelper.java b/Common/src/com/googlecode/android_scripting/facade/bluetooth/BluetoothDiscoveryHelper.java
index 11a240c..51ebf5f 100644
--- a/Common/src/com/googlecode/android_scripting/facade/bluetooth/BluetoothDiscoveryHelper.java
+++ b/Common/src/com/googlecode/android_scripting/facade/bluetooth/BluetoothDiscoveryHelper.java
@@ -23,74 +23,98 @@
 import android.content.Intent;
 import android.content.IntentFilter;
 
-import java.util.Set;
-
 import com.googlecode.android_scripting.Log;
 
+import java.util.Set;
+
+/**
+ * This class is used to put the device in discovery mode.
+ */
 public class BluetoothDiscoveryHelper {
 
-  public static interface BluetoothDiscoveryListener {
-    public void addBondedDevice(String name, String address);
+    /**
+     * BLuetooth discovery listener Interface.
+     */
+    public interface BluetoothDiscoveryListener {
 
-    public void addDevice(String name, String address);
+        /**
+         * Add Bonded device.
+         */
+        void addBondedDevice(String name, String address);
 
-    public void scanDone();
-  }
+        /**
+         * Add Devices.
+         */
+        void addDevice(String name, String address);
 
-  private final Context mContext;
-  private final BluetoothDiscoveryListener mListener;
-  private final BroadcastReceiver mReceiver;
+        /**
+         * Complete scanning.
+         */
+        void scanDone();
+    }
 
-  public BluetoothDiscoveryHelper(Context context, BluetoothDiscoveryListener listener) {
+    private final Context mContext;
+    private final BluetoothDiscoveryListener mListener;
+    private final BroadcastReceiver mReceiver;
+
+    public BluetoothDiscoveryHelper(
+            Context context, BluetoothDiscoveryListener listener) {
     mContext = context;
     mListener = listener;
     mReceiver = new BluetoothReceiver();
-  }
+    }
 
-  private class BluetoothReceiver extends BroadcastReceiver {
+    private class BluetoothReceiver extends BroadcastReceiver {
     @Override
-    public void onReceive(Context context, Intent intent) {
-      final String action = intent.getAction();
+        public void onReceive(Context context, Intent intent) {
+            final String action = intent.getAction();
 
-      if (BluetoothDevice.ACTION_FOUND.equals(action)) {
-        // Get the BluetoothDevice object from the Intent.
-        BluetoothDevice device = intent.getParcelableExtra(BluetoothDevice.EXTRA_DEVICE);
-        Log.d("Found device " + device.getAliasName());
-        // If it's already paired, skip it, because it's been listed already.
-        if (device.getBondState() != BluetoothDevice.BOND_BONDED) {
-          mListener.addDevice(device.getName(), device.getAddress());
+            if (BluetoothDevice.ACTION_FOUND.equals(action)) {
+                // Get the BluetoothDevice object from the Intent.
+                BluetoothDevice device = intent.getParcelableExtra(
+                        BluetoothDevice.EXTRA_DEVICE);
+                Log.d("Found device " + device.getAliasName());
+                // If it's already paired, skip it, because it's been listed already.
+                if (device.getBondState() != BluetoothDevice.BOND_BONDED) {
+                    mListener.addDevice(device.getName(), device.getAddress());
+                }
+            } else if (BluetoothAdapter.ACTION_DISCOVERY_FINISHED.equals(action)) {
+                mListener.scanDone();
+            }
         }
-      } else if (BluetoothAdapter.ACTION_DISCOVERY_FINISHED.equals(action)) {
+    }
+    /**
+     * Start Bluetooth Discovery.
+     */
+
+    public void startDiscovery() {
+        BluetoothAdapter bluetoothAdapter = BluetoothAdapter.getDefaultAdapter();
+
+        if (bluetoothAdapter.isDiscovering()) {
+            bluetoothAdapter.cancelDiscovery();
+        }
+
+        Set<BluetoothDevice> pairedDevices = bluetoothAdapter.getBondedDevices();
+        for (BluetoothDevice device : pairedDevices) {
+            mListener.addBondedDevice(device.getName(), device.getAddress());
+        }
+
+        IntentFilter filter = new IntentFilter(BluetoothDevice.ACTION_FOUND);
+        filter.addAction(BluetoothAdapter.ACTION_DISCOVERY_FINISHED);
+        mContext.registerReceiver(mReceiver, filter);
+
+        if (!bluetoothAdapter.isEnabled()) {
+            bluetoothAdapter.enable();
+        }
+
+        bluetoothAdapter.startDiscovery();
+    }
+
+    /**
+     * Cancel.
+     */
+    public void cancel() {
+        mContext.unregisterReceiver(mReceiver);
         mListener.scanDone();
-      }
     }
-  }
-
-  public void startDiscovery() {
-    BluetoothAdapter bluetoothAdapter = BluetoothAdapter.getDefaultAdapter();
-
-    if (bluetoothAdapter.isDiscovering()) {
-      bluetoothAdapter.cancelDiscovery();
-    }
-
-    Set<BluetoothDevice> pairedDevices = bluetoothAdapter.getBondedDevices();
-    for (BluetoothDevice device : pairedDevices) {
-      mListener.addBondedDevice(device.getName(), device.getAddress());
-    }
-
-    IntentFilter filter = new IntentFilter(BluetoothDevice.ACTION_FOUND);
-    filter.addAction(BluetoothAdapter.ACTION_DISCOVERY_FINISHED);
-    mContext.registerReceiver(mReceiver, filter);
-
-    if (!bluetoothAdapter.isEnabled()) {
-      bluetoothAdapter.enable();
-    }
-
-    bluetoothAdapter.startDiscovery();
-  }
-
-  public void cancel() {
-    mContext.unregisterReceiver(mReceiver);
-    mListener.scanDone();
-  }
 }
diff --git a/Common/src/com/googlecode/android_scripting/facade/bluetooth/BluetoothFacade.java b/Common/src/com/googlecode/android_scripting/facade/bluetooth/BluetoothFacade.java
index c2c2cfc..e675340 100644
--- a/Common/src/com/googlecode/android_scripting/facade/bluetooth/BluetoothFacade.java
+++ b/Common/src/com/googlecode/android_scripting/facade/bluetooth/BluetoothFacade.java
@@ -64,7 +64,8 @@
 
     public BluetoothFacade(FacadeManager manager) {
         super(manager);
-        mBluetoothAdapter = MainThread.run(manager.getService(), new Callable<BluetoothAdapter>() {
+        mBluetoothAdapter = MainThread.run(manager.getService(),
+                new Callable<BluetoothAdapter>() {
             @Override
             public BluetoothAdapter call() throws Exception {
                 return BluetoothAdapter.getDefaultAdapter();
@@ -87,7 +88,8 @@
         public void onReceive(Context context, Intent intent) {
             String action = intent.getAction();
             if (action.equals(BluetoothDevice.ACTION_FOUND)) {
-                BluetoothDevice device = intent.getParcelableExtra(BluetoothDevice.EXTRA_DEVICE);
+                BluetoothDevice device = intent.getParcelableExtra(
+                        BluetoothDevice.EXTRA_DEVICE);
                 Log.d("Found device " + device.getAliasName());
                 if (!DiscoveredDevices.containsKey(device.getAddress())) {
                     String name = device.getAliasName();
@@ -124,11 +126,15 @@
                 if (state == BluetoothAdapter.STATE_ON) {
                     msg.putString("State", "ON");
                     mEventFacade.postEvent("BluetoothStateChangedOn", msg);
-                    if (!mIsMultiBroadcast) mService.unregisterReceiver(mStateReceiver);
+                    if (!mIsMultiBroadcast) {
+                        mService.unregisterReceiver(mStateReceiver);
+                    }
                 } else if(state == BluetoothAdapter.STATE_OFF) {
                     msg.putString("State", "OFF");
                     mEventFacade.postEvent("BluetoothStateChangedOff", msg);
-                    if (!mIsMultiBroadcast) mService.unregisterReceiver(mStateReceiver);
+                    if (!mIsMultiBroadcast) {
+                        mService.unregisterReceiver(mStateReceiver);
+                    }
                 }
                 msg.clear();
             }
@@ -155,10 +161,18 @@
 
 
     public static boolean deviceMatch(BluetoothDevice device, String deviceID) {
-        return deviceID.equals(device.getAliasName()) || deviceID.equals(device.getAddress());
+        return deviceID.equals(device.getAliasName()) || deviceID.equals(
+                device.getAddress());
     }
 
-    public static <T> BluetoothDevice getDevice(ConcurrentHashMap<String, T> devices, String device)
+    /**
+     * Get Bluetooth device.
+     * @param devices - HashMap of Device Address and Bluetooth device name.
+     * @param device - name of the device.
+     * @return the device name if it exits.
+     */
+    public static <T> BluetoothDevice getDevice(
+            ConcurrentHashMap<String, T> devices, String device)
             throws Exception {
         if (devices.containsKey(device)) {
             return (BluetoothDevice) devices.get(device);
@@ -167,7 +181,14 @@
         }
     }
 
-    public static BluetoothDevice getDevice(Collection<BluetoothDevice> devices, String deviceID)
+    /**
+     * Get Bluetooth device.
+     * @param devices - Collection of device IDs.
+     * @param deviceID - ID of the desired device.
+     * @return the Bluetooth device if the device ID is matched.
+     */
+    public static BluetoothDevice getDevice(
+            Collection<BluetoothDevice> devices, String deviceID)
             throws Exception {
         Log.d("Looking for " + deviceID);
         for (BluetoothDevice bd : devices) {
@@ -180,7 +201,14 @@
         throw new Exception("Can't find device " + deviceID);
     }
 
-    public static boolean deviceExists(Collection<BluetoothDevice> devices, String deviceID) {
+    /**
+     * Verify device existence.
+     * @param devices - Collection of device IDs.
+     * @param deviceID - ID of the desired device.
+     * @return if the device Exists or not.
+     */
+    public static boolean deviceExists(
+            Collection<BluetoothDevice> devices, String deviceID) {
         for (BluetoothDevice bd : devices) {
             if (deviceMatch(bd, deviceID)) {
                 Log.d("Found match " + bd.getAliasName() + " " + bd.getAddress());
@@ -204,8 +232,8 @@
             @RpcDefault("300")
             Integer duration) {
         Log.d("Making discoverable for " + duration + " seconds.\n");
-        mBluetoothAdapter
-                .setScanMode(BluetoothAdapter.SCAN_MODE_CONNECTABLE_DISCOVERABLE, duration);
+        mBluetoothAdapter.setScanMode(
+                BluetoothAdapter.SCAN_MODE_CONNECTABLE_DISCOVERABLE, duration);
     }
 
     @Rpc(description = "Requests that the device be not discoverable.")
@@ -483,7 +511,8 @@
 
     @Override
     public void shutdown() {
-        for (Map.Entry<String, BluetoothConnection> entry : connections.entrySet()) {
+        for (Map.Entry<String,
+                BluetoothConnection> entry : connections.entrySet()) {
             entry.getValue().stop();
         }
         if (mMultiStateReceiver != null ) bluetoothStopListeningForAdapterStateChange();
diff --git a/Common/src/com/googlecode/android_scripting/facade/bluetooth/BluetoothHfpClientFacade.java b/Common/src/com/googlecode/android_scripting/facade/bluetooth/BluetoothHfpClientFacade.java
index 930b229..a1f2328 100644
--- a/Common/src/com/googlecode/android_scripting/facade/bluetooth/BluetoothHfpClientFacade.java
+++ b/Common/src/com/googlecode/android_scripting/facade/bluetooth/BluetoothHfpClientFacade.java
@@ -34,146 +34,197 @@
 import java.util.List;
 
 public class BluetoothHfpClientFacade extends RpcReceiver {
-  static final ParcelUuid[] UUIDS = {
-    BluetoothUuid.Handsfree_AG,
-  };
+    static final ParcelUuid[] UUIDS = {
+        BluetoothUuid.Handsfree_AG,
+    };
 
-  private final Service mService;
-  private final BluetoothAdapter mBluetoothAdapter;
+    private final Service mService;
+    private final BluetoothAdapter mBluetoothAdapter;
 
-  private static boolean sIsHfpClientReady = false;
-  private static BluetoothHeadsetClient sHfpClientProfile = null;
+    private static boolean sIsHfpClientReady = false;
+    private static BluetoothHeadsetClient sHfpClientProfile = null;
 
-  public BluetoothHfpClientFacade(FacadeManager manager) {
-    super(manager);
-    mService = manager.getService();
-    mBluetoothAdapter = BluetoothAdapter.getDefaultAdapter();
-    mBluetoothAdapter.getProfileProxy(mService, new HfpClientServiceListener(),
-        BluetoothProfile.HEADSET_CLIENT);
-  }
-
-  class HfpClientServiceListener implements BluetoothProfile.ServiceListener {
-    @Override
-    public void onServiceConnected(int profile, BluetoothProfile proxy) {
-      sHfpClientProfile = (BluetoothHeadsetClient) proxy;
-      sIsHfpClientReady = true;
+    public BluetoothHfpClientFacade(FacadeManager manager) {
+        super(manager);
+        mService = manager.getService();
+        mBluetoothAdapter = BluetoothAdapter.getDefaultAdapter();
+        mBluetoothAdapter.getProfileProxy(mService,
+                new HfpClientServiceListener(),
+                BluetoothProfile.HEADSET_CLIENT);
     }
 
-    @Override
-    public void onServiceDisconnected(int profile) {
-      sIsHfpClientReady = false;
+    class HfpClientServiceListener implements BluetoothProfile.ServiceListener {
+        @Override
+        public void onServiceConnected(int profile, BluetoothProfile proxy) {
+            sHfpClientProfile = (BluetoothHeadsetClient) proxy;
+            sIsHfpClientReady = true;
+        }
+
+        @Override
+        public void onServiceDisconnected(int profile) {
+            sIsHfpClientReady = false;
+        }
     }
-  }
 
-  public Boolean hfpClientConnect(BluetoothDevice device) {
-    if (sHfpClientProfile == null) return false;
-    return sHfpClientProfile.connect(device);
-  }
+    /**
+     * Connect to HfpClient.
+     * @param device - the BluetoothDevice object to connect Hfp client.
+     * @return if the connection was successfull or not.
+     */
+    public Boolean hfpClientConnect(BluetoothDevice device) {
+        if (sHfpClientProfile == null) return false;
+        return sHfpClientProfile.connect(device);
+    }
 
-  public Boolean hfpClientDisconnect(BluetoothDevice device) {
-    if (sHfpClientProfile == null) return false;
-    return sHfpClientProfile.disconnect(device);
-  }
+    /**
+     * Disconnect from HfpClient.
+     * @param device - the BluetoothDevice object to disconnect from Hfp client.
+     * @return if the disconnection was successfull or not.
+     */
+    public Boolean hfpClientDisconnect(BluetoothDevice device) {
+        if (sHfpClientProfile == null) return false;
+        return sHfpClientProfile.disconnect(device);
+    }
 
-  @Rpc(description = "Is HfpClient profile ready.")
-  public Boolean bluetoothHfpClientIsReady() {
-    return sIsHfpClientReady;
-  }
+    /**
+     * Is Hfp Client profile ready.
+     * @return Hfp Client profile is ready or not.
+     */
+    @Rpc(description = "Is HfpClient profile ready.")
+    public Boolean bluetoothHfpClientIsReady() {
+        return sIsHfpClientReady;
+    }
 
-  @Rpc(description = "Set priority of the profile")
-  public void bluetoothHfpClientSetPriority(
-      @RpcParameter(name = "device", description = "Mac address of a BT device.")
-      String deviceStr,
-      @RpcParameter(name = "priority", description = "Priority that needs to be set.")
-      Integer priority)
-      throws Exception {
-    if (sHfpClientProfile == null) return;
-    BluetoothDevice device =
-        BluetoothFacade.getDevice(mBluetoothAdapter.getBondedDevices(), deviceStr);
-    Log.d("Changing priority of device " + device.getAliasName() + " p: " + priority);
-    sHfpClientProfile.setPriority(device, priority);
-  }
+    /**
+     * Set priority of the profile.
+     * @param deviceStr - Mac address of a BT device.
+     * @param priority - Priority that needs to be set.
+     */
+    @Rpc(description = "Set priority of the profile")
+    public void bluetoothHfpClientSetPriority(
+            @RpcParameter(name = "device",
+                description = "Mac address of a BT device.") String deviceStr,
+            @RpcParameter(name = "priority",
+                description = "Priority that needs to be set.")
+                    Integer priority) throws Exception {
+        if (sHfpClientProfile == null) return;
+        BluetoothDevice device =
+                BluetoothFacade.getDevice(mBluetoothAdapter.getBondedDevices(),
+                    deviceStr);
+        Log.d("Changing priority of device " + device.getAliasName()
+                + " p: " + priority);
+        sHfpClientProfile.setPriority(device, priority);
+    }
 
-  @Rpc(description = "Get priority of the profile")
-  public Integer bluetoothHfpClientGetPriority(
-      @RpcParameter(name = "device", description = "Mac address of a BT device.")
-      String deviceStr)
-      throws Exception {
-    if (sHfpClientProfile == null) return BluetoothProfile.PRIORITY_UNDEFINED;
-    BluetoothDevice device =
-        BluetoothFacade.getDevice(mBluetoothAdapter.getBondedDevices(), deviceStr);
-    return sHfpClientProfile.getPriority(device);
-  }
+    /**
+     * Get priority of the profile.
+     * @param deviceStr - Mac address of a BT device.
+     * @return Priority of the device.
+     */
+    @Rpc(description = "Get priority of the profile")
+    public Integer bluetoothHfpClientGetPriority(
+            @RpcParameter(name = "device", description =
+                    "Mac address of a BT device.") String deviceStr)
+                    throws Exception {
+        if (sHfpClientProfile == null) return BluetoothProfile.PRIORITY_UNDEFINED;
+        BluetoothDevice device = BluetoothFacade.getDevice(
+                mBluetoothAdapter.getBondedDevices(), deviceStr);
+        return sHfpClientProfile.getPriority(device);
+    }
 
-  @Rpc(description = "Connect to an HFP Client device.")
-  public Boolean bluetoothHfpClientConnect(
-      @RpcParameter(name = "device", description = "Name or MAC address of a bluetooth device.")
-      String deviceStr)
-      throws Exception {
-    if (sHfpClientProfile == null) return false;
-    try {
-      BluetoothDevice device =
-          BluetoothFacade.getDevice(BluetoothFacade.DiscoveredDevices, deviceStr);
-      Log.d("Connecting to device " + device.getAliasName());
-      return hfpClientConnect(device);
-    } catch (Exception e) {
-        Log.e("bluetoothHfpClientConnect failed on getDevice " + deviceStr + " with " + e);
+    /**
+     * Connect to an HFP Client device.
+     * @param deviceStr - Name or MAC address of a bluetooth device.
+     * @return Hfp Client was connected or not.
+     */
+    @Rpc(description = "Connect to an HFP Client device.")
+    public Boolean bluetoothHfpClientConnect(
+            @RpcParameter(name = "device",
+                description = "Name or MAC address of a bluetooth device.")
+                    String deviceStr)
+                        throws Exception {
+        if (sHfpClientProfile == null) return false;
+        try {
+            BluetoothDevice device = BluetoothFacade.getDevice(
+                    BluetoothFacade.DiscoveredDevices, deviceStr);
+            Log.d("Connecting to device " + device.getAliasName());
+            return hfpClientConnect(device);
+        } catch (Exception e) {
+            Log.e("bluetoothHfpClientConnect failed on getDevice "
+                    + deviceStr + " with " + e);
+            return false;
+        }
+    }
+
+    /**
+     * Disconnect an HFP Client device.
+     * @param deviceStr - Name or MAC address of a bluetooth device.
+     * @return Hfp Client was disconnected or not.
+     */
+    @Rpc(description = "Disconnect an HFP Client device.")
+    public Boolean bluetoothHfpClientDisconnect(
+            @RpcParameter(name = "device",
+                description = "Name or MAC address of a device.")
+                    String deviceStr) {
+        if (sHfpClientProfile == null) return false;
+        Log.d("Connected devices: " + sHfpClientProfile.getConnectedDevices());
+        try {
+            BluetoothDevice device = BluetoothFacade.getDevice(
+                    sHfpClientProfile.getConnectedDevices(), deviceStr);
+            return hfpClientDisconnect(device);
+        } catch (Exception e) {
+            // Do nothing since it is disconnect and this
+            // function should force disconnect.
+            Log.e("bluetoothHfpClientConnect getDevice failed " + e);
+        }
         return false;
     }
-  }
 
-  @Rpc(description = "Disconnect an HFP Client device.")
-  public Boolean bluetoothHfpClientDisconnect(
-      @RpcParameter(name = "device", description = "Name or MAC address of a device.")
-      String deviceStr) {
-    if (sHfpClientProfile == null) return false;
-    Log.d("Connected devices: " + sHfpClientProfile.getConnectedDevices());
-    try {
-        BluetoothDevice device =
-            BluetoothFacade.getDevice(sHfpClientProfile.getConnectedDevices(), deviceStr);
-        return hfpClientDisconnect(device);
-    } catch (Exception e) {
-        // Do nothing since it is disconnect and this function should force disconnect.
-        Log.e("bluetoothHfpClientConnect getDevice failed " + e);
+    /**
+     * Get all the devices connected through HFP Client.
+     * @return List of all the devices connected through HFP Client.
+     */
+    @Rpc(description = "Get all the devices connected through HFP Client.")
+    public List<BluetoothDevice> bluetoothHfpClientGetConnectedDevices() {
+        if (sHfpClientProfile == null) return new ArrayList<BluetoothDevice>();
+        return sHfpClientProfile.getConnectedDevices();
     }
-    return false;
-  }
 
-  @Rpc(description = "Get all the devices connected through HFP Client.")
-  public List<BluetoothDevice> bluetoothHfpClientGetConnectedDevices() {
-    if (sHfpClientProfile == null) return new ArrayList<BluetoothDevice>();
-    return sHfpClientProfile.getConnectedDevices();
-  }
-
-  @Rpc(description = "Get the connection status of a device.")
-  public Integer bluetoothHfpClientGetConnectionStatus(
-          @RpcParameter(name = "deviceID",
-                        description = "Name or MAC address of a bluetooth device.")
-          String deviceID) {
-      if (sHfpClientProfile == null) {
-          return BluetoothProfile.STATE_DISCONNECTED;
-      }
-      List<BluetoothDevice> deviceList = sHfpClientProfile.getConnectedDevices();
-      BluetoothDevice device;
-      try {
-          device = BluetoothFacade.getDevice(deviceList, deviceID);
-      } catch (Exception e) {
-          Log.e(e);
-          return BluetoothProfile.STATE_DISCONNECTED;
-      }
-      return sHfpClientProfile.getConnectionState(device);
-  }
+    /**
+     * Get the connection status of a device.
+     * @param deviceID - Name or MAC address of a bluetooth device.
+     * @return connection status of the device.
+     */
+    @Rpc(description = "Get the connection status of a device.")
+    public Integer bluetoothHfpClientGetConnectionStatus(
+            @RpcParameter(name = "deviceID",
+                description = "Name or MAC address of a bluetooth device.")
+                    String deviceID) {
+        if (sHfpClientProfile == null) {
+            return BluetoothProfile.STATE_DISCONNECTED;
+        }
+        List<BluetoothDevice> deviceList =
+                sHfpClientProfile.getConnectedDevices();
+        BluetoothDevice device;
+        try {
+            device = BluetoothFacade.getDevice(deviceList, deviceID);
+        } catch (Exception e) {
+            Log.e(e);
+            return BluetoothProfile.STATE_DISCONNECTED;
+        }
+        return sHfpClientProfile.getConnectionState(device);
+    }
 
     /**
      * Get the audio routing state of specified device.
-     *
      * @param deviceStr the Bluetooth MAC address of remote device
-     * @return Audio State
+     * @return Audio State of the device.
      */
     @Rpc(description = "Get all the devices connected through HFP Client.")
     public Integer bluetoothHfpClientGetAudioState(
-            @RpcParameter(name = "device", description = "MAC address of a bluetooth device.")
-            String deviceStr) {
+            @RpcParameter(name = "device",
+                description = "MAC address of a bluetooth device.")
+                String deviceStr) {
         if (sHfpClientProfile == null) return -1;
         BluetoothDevice device;
         try {
@@ -194,12 +245,14 @@
      */
     @Rpc(description = "Start Remote device Voice Recognition through HFP Client.")
     public boolean bluetoothHfpClientStartVoiceRecognition(
-            @RpcParameter(name = "device", description = "MAC address of a bluetooth device.")
-            String deviceStr) {
+            @RpcParameter(name = "device",
+                description = "MAC address of a bluetooth device.")
+                    String deviceStr) {
         if (sHfpClientProfile == null) return false;
         BluetoothDevice device;
         try {
-            device = BluetoothFacade.getDevice(sHfpClientProfile.getConnectedDevices(), deviceStr);
+            device = BluetoothFacade.getDevice(
+                    sHfpClientProfile.getConnectedDevices(), deviceStr);
         } catch (Exception e) {
             // Do nothing since it is disconnect and this function should force disconnect.
             Log.e("bluetoothHfpClientConnect getDevice failed " + e);
@@ -216,21 +269,24 @@
      */
     @Rpc(description = "Stop Remote device Voice Recognition through HFP Client.")
     public boolean bluetoothHfpClientStopVoiceRecognition(
-            @RpcParameter(name = "device", description = "MAC address of a bluetooth device.")
-            String deviceStr) {
+            @RpcParameter(name = "device",
+                description = "MAC address of a bluetooth device.")
+                    String deviceStr) {
         if (sHfpClientProfile == null) return false;
         BluetoothDevice device;
         try {
-            device = BluetoothFacade.getDevice(sHfpClientProfile.getConnectedDevices(), deviceStr);
+            device = BluetoothFacade.getDevice(
+                    sHfpClientProfile.getConnectedDevices(), deviceStr);
         } catch (Exception e) {
-            // Do nothing since it is disconnect and this function should force disconnect.
+            // Do nothing since it is disconnect
+            // and this function should force disconnect.
             Log.e("bluetoothHfpClientConnect getDevice failed " + e);
             return false;
         }
         return sHfpClientProfile.stopVoiceRecognition(device);
     }
 
-  @Override
-  public void shutdown() {
-  }
+    @Override
+    public void shutdown() {
+    }
 }
diff --git a/Common/src/com/googlecode/android_scripting/facade/bluetooth/BluetoothHidFacade.java b/Common/src/com/googlecode/android_scripting/facade/bluetooth/BluetoothHidFacade.java
index 52245ef..140c1de 100644
--- a/Common/src/com/googlecode/android_scripting/facade/bluetooth/BluetoothHidFacade.java
+++ b/Common/src/com/googlecode/android_scripting/facade/bluetooth/BluetoothHidFacade.java
@@ -16,19 +16,17 @@
 
 package com.googlecode.android_scripting.facade.bluetooth;
 
-import java.util.List;
-
 import android.app.Service;
-import android.bluetooth.BluetoothHidHost;
 import android.bluetooth.BluetoothAdapter;
 import android.bluetooth.BluetoothDevice;
+import android.bluetooth.BluetoothHidHost;
 import android.bluetooth.BluetoothProfile;
 import android.bluetooth.BluetoothUuid;
-import android.os.ParcelUuid;
 import android.content.BroadcastReceiver;
 import android.content.Context;
 import android.content.Intent;
 import android.content.IntentFilter;
+import android.os.ParcelUuid;
 
 import com.googlecode.android_scripting.Log;
 import com.googlecode.android_scripting.facade.EventFacade;
@@ -38,177 +36,228 @@
 import com.googlecode.android_scripting.rpc.RpcDefault;
 import com.googlecode.android_scripting.rpc.RpcParameter;
 
+import java.util.List;
+
+/*
+ * Class Bluetooth HidFacade
+ */
 public class BluetoothHidFacade extends RpcReceiver {
-  public final static ParcelUuid[] UUIDS = { BluetoothUuid.Hid };
+    public static final ParcelUuid[] UUIDS = { BluetoothUuid.Hid };
 
-  private final Service mService;
-  private final BluetoothAdapter mBluetoothAdapter;
+    private final Service mService;
+    private final BluetoothAdapter mBluetoothAdapter;
 
-  private static boolean sIsHidReady = false;
-  private static BluetoothHidHost sHidProfile = null;
+    private static boolean sIsHidReady = false;
+    private static BluetoothHidHost sHidProfile = null;
 
-  private final EventFacade mEventFacade;
+    private final EventFacade mEventFacade;
 
-  public BluetoothHidFacade(FacadeManager manager) {
-    super(manager);
-    mService = manager.getService();
-    mBluetoothAdapter = BluetoothAdapter.getDefaultAdapter();
-    mBluetoothAdapter.getProfileProxy(mService, new HidServiceListener(),
+    public BluetoothHidFacade(FacadeManager manager) {
+        super(manager);
+        mService = manager.getService();
+        mBluetoothAdapter = BluetoothAdapter.getDefaultAdapter();
+        mBluetoothAdapter.getProfileProxy(mService, new HidServiceListener(),
         BluetoothProfile.HID_HOST);
-    IntentFilter pkgFilter = new IntentFilter();
-    pkgFilter.addAction(BluetoothHidHost.ACTION_CONNECTION_STATE_CHANGED);
-    pkgFilter.addAction(BluetoothHidHost.ACTION_PROTOCOL_MODE_CHANGED);
-    pkgFilter.addAction(BluetoothHidHost.ACTION_HANDSHAKE);
-    pkgFilter.addAction(BluetoothHidHost.ACTION_REPORT);
-    pkgFilter.addAction(BluetoothHidHost.ACTION_VIRTUAL_UNPLUG_STATUS);
-    pkgFilter.addAction(BluetoothHidHost.ACTION_IDLE_TIME_CHANGED);
-    mService.registerReceiver(mHidServiceBroadcastReceiver, pkgFilter);
-    Log.d(HidServiceBroadcastReceiver.TAG + " registered");
-    mEventFacade = manager.getReceiver(EventFacade.class);
-  }
-
-  class HidServiceListener implements BluetoothProfile.ServiceListener {
-    @Override
-    public void onServiceConnected(int profile, BluetoothProfile proxy) {
-      sHidProfile = (BluetoothHidHost) proxy;
-      sIsHidReady = true;
+        IntentFilter pkgFilter = new IntentFilter();
+        pkgFilter.addAction(BluetoothHidHost.ACTION_CONNECTION_STATE_CHANGED);
+        pkgFilter.addAction(BluetoothHidHost.ACTION_PROTOCOL_MODE_CHANGED);
+        pkgFilter.addAction(BluetoothHidHost.ACTION_HANDSHAKE);
+        pkgFilter.addAction(BluetoothHidHost.ACTION_REPORT);
+        pkgFilter.addAction(BluetoothHidHost.ACTION_VIRTUAL_UNPLUG_STATUS);
+        pkgFilter.addAction(BluetoothHidHost.ACTION_IDLE_TIME_CHANGED);
+        mService.registerReceiver(mHidServiceBroadcastReceiver, pkgFilter);
+        Log.d(HidServiceBroadcastReceiver.TAG + " registered");
+        mEventFacade = manager.getReceiver(EventFacade.class);
     }
 
-    @Override
-    public void onServiceDisconnected(int profile) {
-      sIsHidReady = false;
+    class HidServiceListener implements BluetoothProfile.ServiceListener {
+        @Override
+        public void onServiceConnected(int profile, BluetoothProfile proxy) {
+            sHidProfile = (BluetoothHidHost) proxy;
+            sIsHidReady = true;
+        }
+
+        @Override
+        public void onServiceDisconnected(int profile) {
+            sIsHidReady = false;
+        }
     }
-  }
 
-  class HidServiceBroadcastReceiver extends BroadcastReceiver {
-      private static final String TAG = "HidServiceBroadcastReceiver";
+    class HidServiceBroadcastReceiver extends BroadcastReceiver {
+        private static final String TAG = "HidServiceBroadcastReceiver";
 
-      @Override
-      public void onReceive(Context context, Intent intent) {
-          String action = intent.getAction();
-          Log.d(TAG + " action=" + action);
+        @Override
+        public void onReceive(Context context, Intent intent) {
+            String action = intent.getAction();
+            Log.d(TAG + " action=" + action);
 
-          switch (action) {
-              case BluetoothHidHost.ACTION_CONNECTION_STATE_CHANGED: {
-                  int previousState = intent.getIntExtra(BluetoothProfile.EXTRA_PREVIOUS_STATE, -1);
-                  int state = intent.getIntExtra(BluetoothProfile.EXTRA_STATE, -1);
-                  Log.d("Connection state changed: " + previousState + " -> " + state);
-              }
-              break;
-              case BluetoothHidHost.ACTION_PROTOCOL_MODE_CHANGED: {
-                  int status = intent.getIntExtra(BluetoothHidHost.EXTRA_STATUS, -1);
-                  Log.d("Protocol mode changed: " + status);
-              }
-              break;
-              case BluetoothHidHost.ACTION_HANDSHAKE: {
-                  int status = intent.getIntExtra(BluetoothHidHost.EXTRA_STATUS, -1);
-                  Log.d("Handshake received: " + status);
-              }
-              break;
-              case BluetoothHidHost.ACTION_REPORT: {
-                  char[] report = intent.getCharArrayExtra(BluetoothHidHost.EXTRA_REPORT);
-                  Log.d("Received report: " + String.valueOf(report));
-              }
-              break;
-              case BluetoothHidHost.ACTION_VIRTUAL_UNPLUG_STATUS: {
-                  int status = intent.getIntExtra(
-                          BluetoothHidHost.EXTRA_VIRTUAL_UNPLUG_STATUS, -1);
-                  Log.d("Virtual unplug status: " + status);
-              }
-              break;
-              case BluetoothHidHost.ACTION_IDLE_TIME_CHANGED: {
-                  int idleTime = intent.getIntExtra(BluetoothHidHost.EXTRA_IDLE_TIME, -1);
-                  Log.d("Idle time changed: " + idleTime);
-              }
-              break;
-              default:
-                  break;
-          }
-      }
-  }
+            switch (action) {
+                case BluetoothHidHost.ACTION_CONNECTION_STATE_CHANGED: {
+                    int previousState = intent.getIntExtra(
+                            BluetoothProfile.EXTRA_PREVIOUS_STATE, -1);
+                    int state = intent.getIntExtra(
+                            BluetoothProfile.EXTRA_STATE, -1);
+                    Log.d("Connection state changed: "
+                            + previousState + " -> " + state);
+                }
+                break;
+                case BluetoothHidHost.ACTION_PROTOCOL_MODE_CHANGED: {
+                    int status = intent.getIntExtra(
+                            BluetoothHidHost.EXTRA_STATUS, -1);
+                    Log.d("Protocol mode changed: " + status);
+                }
+                break;
+                case BluetoothHidHost.ACTION_HANDSHAKE: {
+                    int status = intent.getIntExtra(
+                            BluetoothHidHost.EXTRA_STATUS, -1);
+                    Log.d("Handshake received: " + status);
+                }
+                break;
+                case BluetoothHidHost.ACTION_REPORT: {
+                    char[] report = intent.getCharArrayExtra(
+                            BluetoothHidHost.EXTRA_REPORT);
+                    Log.d("Received report: " + String.valueOf(report));
+                }
+                break;
+                case BluetoothHidHost.ACTION_VIRTUAL_UNPLUG_STATUS: {
+                    int status = intent.getIntExtra(
+                            BluetoothHidHost.EXTRA_VIRTUAL_UNPLUG_STATUS, -1);
+                    Log.d("Virtual unplug status: " + status);
+                }
+                break;
+                case BluetoothHidHost.ACTION_IDLE_TIME_CHANGED: {
+                    int idleTime = intent.getIntExtra(
+                            BluetoothHidHost.EXTRA_IDLE_TIME, -1);
+                    Log.d("Idle time changed: " + idleTime);
+                }
+                break;
+                default:
+                    break;
+            }
+        }
+    }
 
-  private final BroadcastReceiver mHidServiceBroadcastReceiver = new HidServiceBroadcastReceiver();
+    private final BroadcastReceiver mHidServiceBroadcastReceiver =
+            new HidServiceBroadcastReceiver();
 
+    /**
+     * Connect to Hid Profile.
+     * @param device - the Bluetooth Device object to connect to.
+     * @return if the connection was successfull or not.
+     */
+    public Boolean hidConnect(BluetoothDevice device) {
+        if (sHidProfile == null) return false;
+        return sHidProfile.connect(device);
+    }
 
-  public Boolean hidConnect(BluetoothDevice device) {
-    if (sHidProfile == null) return false;
-    return sHidProfile.connect(device);
-  }
+    /**
+     * Disconnect to Hid Profile.
+     * @param device - the Bluetooth Device object to disconnect to.
+     * @return if the disconnection was successfull or not.
+     */
+    public Boolean hidDisconnect(BluetoothDevice device) {
+        if (sHidProfile == null) return false;
+        return sHidProfile.disconnect(device);
+    }
 
-  public Boolean hidDisconnect(BluetoothDevice device) {
-    if (sHidProfile == null) return false;
-    return sHidProfile.disconnect(device);
-  }
+    /**
+     * Is Hid profile ready.
+     * @return if Hid profile is ready or not.
+     */
+    @Rpc(description = "Is Hid profile ready.")
+    public Boolean bluetoothHidIsReady() {
+        return sIsHidReady;
+    }
 
-  @Rpc(description = "Is Hid profile ready.")
-  public Boolean bluetoothHidIsReady() {
-    return sIsHidReady;
-  }
+    /**
+     * Connect to an HID device.
+     * @param device - Name or MAC address of a bluetooth device.
+     * @return if the connection was successfull or not.
+     */
+    @Rpc(description = "Connect to an HID device.")
+    public Boolean bluetoothHidConnect(
+            @RpcParameter(name = "device",
+                description = "Name or MAC address of a bluetooth device.")
+                    String device)
+                        throws Exception {
+        if (sHidProfile == null) return false;
+        BluetoothDevice mDevice = BluetoothFacade.getDevice(
+                BluetoothFacade.DiscoveredDevices, device);
+        Log.d("Connecting to device " + mDevice.getAliasName());
+        return hidConnect(mDevice);
+    }
 
-  @Rpc(description = "Connect to an HID device.")
-  public Boolean bluetoothHidConnect(
-      @RpcParameter(name = "device", description = "Name or MAC address of a bluetooth device.")
-      String device)
-      throws Exception {
-    if (sHidProfile == null)
-      return false;
-    BluetoothDevice mDevice = BluetoothFacade.getDevice(BluetoothFacade.DiscoveredDevices, device);
-    Log.d("Connecting to device " + mDevice.getAliasName());
-    return hidConnect(mDevice);
-  }
+    /**
+     * Disconnect an HID device.
+     * @param device - the Bluetooth Device object to disconnect to.
+     * @return if the disconnection was successfull or not.
+     */
+    @Rpc(description = "Disconnect an HID device.")
+    public Boolean bluetoothHidDisconnect(
+            @RpcParameter(name = "device",
+                description = "Name or MAC address of a device.")
+                    String device)
+                        throws Exception {
+        if (sHidProfile == null) return false;
+        Log.d("Connected devices: " + sHidProfile.getConnectedDevices());
+        BluetoothDevice mDevice = BluetoothFacade.getDevice(
+                sHidProfile.getConnectedDevices(), device);
+        return hidDisconnect(mDevice);
+    }
 
-  @Rpc(description = "Disconnect an HID device.")
-  public Boolean bluetoothHidDisconnect(
-      @RpcParameter(name = "device", description = "Name or MAC address of a device.")
-      String device)
-      throws Exception {
-    if (sHidProfile == null)
-      return false;
-    Log.d("Connected devices: " + sHidProfile.getConnectedDevices());
-    BluetoothDevice mDevice = BluetoothFacade.getDevice(sHidProfile.getConnectedDevices(),
-                                                        device);
-    return hidDisconnect(mDevice);
-  }
+    /**
+     * Get all the devices connected through HID.
+     * @return List of all the devices connected through HID.
+     */
+    @Rpc(description = "Get all the devices connected through HID.")
+    public List<BluetoothDevice> bluetoothHidGetConnectedDevices() {
+        if (!sIsHidReady) return null;
+        return sHidProfile.getConnectedDevices();
+    }
 
-  @Rpc(description = "Get all the devices connected through HID.")
-  public List<BluetoothDevice> bluetoothHidGetConnectedDevices() {
-    while (!sIsHidReady);
-    return sHidProfile.getConnectedDevices();
-  }
+    /**
+     * Get the connection status of a device.
+     * @param deviceID - Name or MAC address of a bluetooth device.
+     * @return connection status of a device.
+     */
+    @Rpc(description = "Get the connection status of a device.")
+    public Integer bluetoothHidGetConnectionStatus(
+            @RpcParameter(name = "deviceID",
+                description = "Name or MAC address of a bluetooth device.")
+                    String deviceID) {
+        if (sHidProfile == null) {
+            return BluetoothProfile.STATE_DISCONNECTED;
+        }
+        List<BluetoothDevice> deviceList = sHidProfile.getConnectedDevices();
+        BluetoothDevice device;
+        try {
+            device = BluetoothFacade.getDevice(deviceList, deviceID);
+        } catch (Exception e) {
+            return BluetoothProfile.STATE_DISCONNECTED;
+        }
+        return sHidProfile.getConnectionState(device);
+    }
 
-  @Rpc(description = "Get the connection status of a device.")
-  public Integer bluetoothHidGetConnectionStatus(
-          @RpcParameter(name = "deviceID",
-                        description = "Name or MAC address of a bluetooth device.")
-          String deviceID) {
-      if (sHidProfile == null) {
-          return BluetoothProfile.STATE_DISCONNECTED;
-      }
-      List<BluetoothDevice> deviceList = sHidProfile.getConnectedDevices();
-      BluetoothDevice device;
-      try {
-          device = BluetoothFacade.getDevice(deviceList, deviceID);
-      } catch (Exception e) {
-          return BluetoothProfile.STATE_DISCONNECTED;
-      }
-      return sHidProfile.getConnectionState(device);
-  }
-
-  @Rpc(description = "Send Set_Report command to the connected HID input device.")
-  public Boolean bluetoothHidSetReport(
-          @RpcParameter(name = "deviceID",
-          description = "Name or MAC address of a bluetooth device.")
-          String deviceID,
-          @RpcParameter(name = "type")
-          @RpcDefault(value = "1")
-          Integer type,
-          @RpcParameter(name = "report")
-          String report) throws Exception {
-      BluetoothDevice device = BluetoothFacade.getDevice(sHidProfile.getConnectedDevices(),
-              deviceID);
-      Log.d("type=" + type);
-      return sHidProfile.setReport(device, (byte) (int) type, report);
-  }
+    /**
+     * Send Set_Report command to the connected HID input device.
+     * @param deviceID - Name or MAC address of a bluetooth device.
+     * @return True if successfully sent the command; otherwise false
+     */
+    @Rpc(description =
+            "Send Set_Report command to the connected HID input device.")
+    public Boolean bluetoothHidSetReport(
+            @RpcParameter(name = "deviceID",
+                description = "Name or MAC address of a bluetooth device.")
+                    String deviceID,
+            @RpcParameter(name = "type")
+            @RpcDefault(value = "1") Integer type,
+            @RpcParameter(name = "report")
+                String report) throws Exception {
+        BluetoothDevice device = BluetoothFacade.getDevice(
+                sHidProfile.getConnectedDevices(), deviceID);
+        Log.d("type=" + type);
+        return sHidProfile.setReport(device, (byte) (int) type, report);
+    }
 
     /**
      * Sends the Get_Report command to the given connected HID input device.
@@ -219,173 +268,177 @@
      * @return True if successfully sent the command; otherwise false
      * @throws Exception error from Bluetooth HidService
      */
-  @Rpc(description = "Send Get_Report command to the connected HID input device.")
-  public Boolean bluetoothHidGetReport(
-          @RpcParameter(name = "deviceID",
-          description = "Name or MAC address of a bluetooth device.")
-          String deviceID,
-          @RpcParameter(name = "type")
-          @RpcDefault(value = "1")
-          Integer type,
-          @RpcParameter(name = "reportId")
-          Integer reportId,
-          @RpcParameter(name = "buffSize")
-          Integer buffSize) throws Exception {
-      BluetoothDevice device = BluetoothFacade.getDevice(sHidProfile.getConnectedDevices(),
-              deviceID);
-      Log.d("type=" + type + " reportId=" + reportId);
-      return sHidProfile.getReport(device, (byte) (int) type, (byte) (int) reportId, buffSize);
-  }
-  /**
-   * Sends a data report to the given connected HID input device.
-   * @param deviceID name or MAC address or the HID input device
-   * @param report the report payload
-   * @return True if successfully sent the command; otherwise false
-   * @throws Exception error from Bluetooth HidService
-   */
-  @Rpc(description = "Send data to a connected HID device.")
-  public Boolean bluetoothHidSendData(
-          @RpcParameter(name = "deviceID",
-          description = "Name or MAC address of a bluetooth device.")
-          String deviceID,
-          @RpcParameter(name = "report")
-          String report) throws Exception {
-      BluetoothDevice device = BluetoothFacade.getDevice(sHidProfile.getConnectedDevices(),
-              deviceID);
-      return sHidProfile.sendData(device, report);
-  }
+    @Rpc(description = "Send Get_Report command to the connected HID input device.")
+    public Boolean bluetoothHidGetReport(
+            @RpcParameter(name = "deviceID",
+                description = "Name or MAC address of a bluetooth device.")
+                    String deviceID,
+            @RpcParameter(name = "type")
+            @RpcDefault(value = "1") Integer type,
+            @RpcParameter(name = "reportId")
+            Integer reportId,
+            @RpcParameter(name = "buffSize")
+            Integer buffSize) throws Exception {
+        BluetoothDevice device = BluetoothFacade.getDevice(
+                sHidProfile.getConnectedDevices(), deviceID);
+        Log.d("type=" + type + " reportId=" + reportId);
+        return sHidProfile.getReport(
+                device, (byte) (int) type, (byte) (int) reportId, buffSize);
+    }
+
+    /**
+     * Sends a data report to the given connected HID input device.
+     * @param deviceID name or MAC address or the HID input device
+     * @param report the report payload
+     * @return True if successfully sent the command; otherwise false
+     * @throws Exception error from Bluetooth HidService
+     */
+    @Rpc(description = "Send data to a connected HID device.")
+    public Boolean bluetoothHidSendData(
+            @RpcParameter(name = "deviceID",
+                description = "Name or MAC address of a bluetooth device.")
+                String deviceID,
+            @RpcParameter(name = "report")
+                String report) throws Exception {
+        BluetoothDevice device = BluetoothFacade.getDevice(
+                sHidProfile.getConnectedDevices(), deviceID);
+        return sHidProfile.sendData(device, report);
+    }
 
 
-  /**
-   * Sends the virtual cable unplug command to the given connected HID input device.
-   * @param deviceID name or MAC address or the HID input device
-   * @return True if successfully sent the command; otherwise false
-   * @throws Exception error from Bluetooth HidService
-   */
-  @Rpc(description = "Send virtual unplug to a connected HID device.")
-  public Boolean bluetoothHidVirtualUnplug(
-          @RpcParameter(name = "deviceID",
+    /**
+     * Sends the virtual cable unplug command to the given connected HID input device.
+     * @param deviceID name or MAC address or the HID input device
+     * @return True if successfully sent the command; otherwise false
+     * @throws Exception error from Bluetooth HidService
+     */
+    @Rpc(description = "Send virtual unplug to a connected HID device.")
+        public Boolean bluetoothHidVirtualUnplug(
+                @RpcParameter(name = "deviceID",
           description = "Name or MAC address of a bluetooth device.")
           String deviceID) throws Exception {
-      BluetoothDevice device = BluetoothFacade.getDevice(sHidProfile.getConnectedDevices(),
+        BluetoothDevice device = BluetoothFacade.getDevice(sHidProfile.getConnectedDevices(),
               deviceID);
-      return sHidProfile.virtualUnplug(device);
-  }
+        return sHidProfile.virtualUnplug(device);
+    }
 
-  /**
-   * Sends the Set_Priority command to the given connected HID input device.
-   * @param deviceID name or MAC address or the HID input device
-   * @param priority priority level
-   * @return True if successfully sent the command; otherwise false
-   * @throws Exception error from Bluetooth HidService
-   */
-  @Rpc(description = "Set priority of the profile")
-
-  public Boolean bluetoothHidSetPriority(
+    /**
+     * Sends the Set_Priority command to the given connected HID input device.
+     * @param deviceID name or MAC address or the HID input device
+     * @param priority priority level
+     * @return True if successfully sent the command; otherwise false
+     * @throws Exception error from Bluetooth HidService
+     */
+    @Rpc(description = "Set priority of the profile")
+    public Boolean bluetoothHidSetPriority(
           @RpcParameter(name = "deviceID",
                   description = "Name or MAC address of a bluetooth device.")
                   String deviceID,
           @RpcParameter(name = "priority")
                   Integer priority) throws Exception {
-      BluetoothDevice device = BluetoothFacade.getDevice(sHidProfile.getConnectedDevices(),
+        BluetoothDevice device = BluetoothFacade.getDevice(sHidProfile.getConnectedDevices(),
               deviceID);
-      return sHidProfile.setPriority(device, priority);
-  }
+        return sHidProfile.setPriority(device, priority);
+    }
 
-  /**
-   * Sends the Get_Priority command to the given connected HID input device.
-   * @param deviceID name or MAC address or the HID input device
-   * @return The value of the HID input device priority
-   * @throws Exception error from Bluetooth HidService
-   */
-  @Rpc(description = "Get priority of the profile")
-  public Integer bluetoothHidGetPriority(
+    /**
+     * Sends the Get_Priority command to the given connected HID input device.
+     * @param deviceID name or MAC address or the HID input device
+     * @return The value of the HID input device priority
+     * @throws Exception error from Bluetooth HidService
+     */
+    @Rpc(description = "Get priority of the profile")
+    public Integer bluetoothHidGetPriority(
           @RpcParameter(name = "deviceID",
                   description = "Name or MAC address of a bluetooth device.")
                   String deviceID) throws Exception {
-      BluetoothDevice device = BluetoothFacade.getDevice(sHidProfile.getConnectedDevices(),
+        BluetoothDevice device = BluetoothFacade.getDevice(sHidProfile.getConnectedDevices(),
               deviceID);
-      return sHidProfile.getPriority(device);
-  }
+        return sHidProfile.getPriority(device);
+    }
 
-  /**
-   * Sends the Set_Protocol_Mode command to the given connected HID input device.
-   * @param deviceID name or MAC address or the HID input device
-   * @param protocolMode protocol mode
-   * @return True if successfully sent the command; otherwise false
-   * @throws Exception error from Bluetooth HidService
-   */
-  @Rpc(description = "Send Set_Protocol_Mode command to the connected HID input device.")
-  public Boolean bluetoothHidSetProtocolMode(
+    /**
+     * Sends the Set_Protocol_Mode command to the given connected HID input device.
+     * @param deviceID name or MAC address or the HID input device
+     * @param protocolMode protocol mode
+     * @return True if successfully sent the command; otherwise false
+     * @throws Exception error from Bluetooth HidService
+     */
+    @Rpc(description = "Send Set_Protocol_Mode command to the connected HID input device.")
+    public Boolean bluetoothHidSetProtocolMode(
           @RpcParameter(name = "deviceID",
                   description = "Name or MAC address of a bluetooth device.")
                   String deviceID,
           @RpcParameter(name = "protocolMode")
                   Integer protocolMode) throws Exception {
-      BluetoothDevice device = BluetoothFacade.getDevice(sHidProfile.getConnectedDevices(),
+        BluetoothDevice device = BluetoothFacade.getDevice(sHidProfile.getConnectedDevices(),
               deviceID);
-      return sHidProfile.setProtocolMode(device, protocolMode);
-  }
+        return sHidProfile.setProtocolMode(device, protocolMode);
+    }
 
-  /**
-   * Sends the Get_Protocol_Mode command to the given connected HID input device.
-   * @param deviceID name or MAC address or the HID input device
-   * @return True if successfully sent the command; otherwise false
-   * @throws Exception error from Bluetooth HidService
-   */
-  @Rpc(description = "Send Get_Protocol_Mode command to the connected HID input device.")
-  public Boolean bluetoothHidGetProtocolMode(
+    /**
+     * Sends the Get_Protocol_Mode command to the given connected HID input device.
+     * @param deviceID name or MAC address or the HID input device
+     * @return True if successfully sent the command; otherwise false
+     * @throws Exception error from Bluetooth HidService
+     */
+    @Rpc(description =
+            "Send Get_Protocol_Mode command to the connected HID input device.")
+    public Boolean bluetoothHidGetProtocolMode(
           @RpcParameter(name = "deviceID",
                   description = "Name or MAC address of a bluetooth device.")
                   String deviceID) throws Exception {
-      BluetoothDevice device = BluetoothFacade.getDevice(sHidProfile.getConnectedDevices(),
-              deviceID);
-      return sHidProfile.getProtocolMode(device);
-  }
+        BluetoothDevice device = BluetoothFacade.getDevice(
+                sHidProfile.getConnectedDevices(), deviceID);
+        return sHidProfile.getProtocolMode(device);
+    }
 
-  /**
-   * Sends the Set_Idle_Time command to the given connected HID input device.
-   * @param deviceID name or MAC address or the HID input device
-   * @param idleTime idle time
-   * @return True if successfully sent the command; otherwise false
-   * @throws Exception error from Bluetooth HidService
-   */
-  @Rpc(description = "Send Set_Idle_Time command to the connected HID input device.")
-  public Boolean bluetoothHidSetIdleTime(
-          @RpcParameter(name = "deviceID",
-                  description = "Name or MAC address of a bluetooth device.")
-                  String deviceID,
-          @RpcParameter(name = "idleTime")
-                  Integer idleTime) throws Exception {
-      BluetoothDevice device = BluetoothFacade.getDevice(sHidProfile.getConnectedDevices(),
-              deviceID);
-      return sHidProfile.setIdleTime(device, (byte) (int) idleTime);
-  }
+    /**
+     * Sends the Set_Idle_Time command to the given connected HID input device.
+     * @param deviceID name or MAC address or the HID input device
+     * @param idleTime idle time
+     * @return True if successfully sent the command; otherwise false
+     * @throws Exception error from Bluetooth HidService
+     */
+    @Rpc(description = "Send Set_Idle_Time command to the connected HID input device.")
+    public Boolean bluetoothHidSetIdleTime(
+            @RpcParameter(name = "deviceID",
+                description = "Name or MAC address of a bluetooth device.")
+                    String deviceID,
+            @RpcParameter(name = "idleTime")
+                Integer idleTime) throws Exception {
+        BluetoothDevice device = BluetoothFacade.getDevice(
+                sHidProfile.getConnectedDevices(), deviceID);
+        return sHidProfile.setIdleTime(
+                device, (byte) (int) idleTime);
+    }
 
-  /**
-   * Sends the Get_Idle_Time command to the given connected HID input device.
-   * @param deviceID name or MAC address or the HID input device
-   * @return True if successfully sent the command; otherwise false
-   * @throws Exception error from Bluetooth HidService
-   */
-  @Rpc(description = "Send Get_Idle_Time command to the connected HID input device.")
-  public Boolean bluetoothHidGetIdleTime(
-          @RpcParameter(name = "deviceID",
+    /**
+     * Sends the Get_Idle_Time command to the given connected HID input device.
+     * @param deviceID name or MAC address or the HID input device
+     * @return True if successfully sent the command; otherwise false
+     * @throws Exception error from Bluetooth HidService
+     */
+    @Rpc(description = "Send Get_Idle_Time command to the connected HID input device.")
+    public Boolean bluetoothHidGetIdleTime(
+            @RpcParameter(name = "deviceID",
                   description = "Name or MAC address of a bluetooth device.")
                   String deviceID) throws Exception {
-      BluetoothDevice device = BluetoothFacade.getDevice(sHidProfile.getConnectedDevices(),
-              deviceID);
-      return sHidProfile.getIdleTime(device);
-  }
+        BluetoothDevice device = BluetoothFacade.getDevice(
+                sHidProfile.getConnectedDevices(), deviceID);
+        return sHidProfile.getIdleTime(device);
+    }
 
-  @Rpc(description = "Test byte transfer.")
-  public byte[] testByte() {
-      byte[] bts = {0b01,0b10,0b11,0b100};
-      return bts;
-  }
+    /**
+     * Test byte transfer.
+     */
+    @Rpc(description = "Test byte transfer.")
+    public byte[] testByte() {
+        byte[] bts = {0b01, 0b10, 0b11, 0b100};
+        return bts;
+    }
 
-  @Override
-  public void shutdown() {
-  }
+    @Override
+    public void shutdown() {
+    }
 }
-
diff --git a/Common/src/com/googlecode/android_scripting/facade/bluetooth/BluetoothHspFacade.java b/Common/src/com/googlecode/android_scripting/facade/bluetooth/BluetoothHspFacade.java
index 0af2b9c..d8abfae 100644
--- a/Common/src/com/googlecode/android_scripting/facade/bluetooth/BluetoothHspFacade.java
+++ b/Common/src/com/googlecode/android_scripting/facade/bluetooth/BluetoothHspFacade.java
@@ -33,218 +33,325 @@
 import java.util.List;
 
 public class BluetoothHspFacade extends RpcReceiver {
-  static final ParcelUuid[] UUIDS = {
-    BluetoothUuid.HSP, BluetoothUuid.Handsfree
-  };
+    static final ParcelUuid[] UUIDS = {
+            BluetoothUuid.HSP, BluetoothUuid.Handsfree
+    };
 
-  private final Service mService;
-  private final BluetoothAdapter mBluetoothAdapter;
+    private final Service mService;
+    private final BluetoothAdapter mBluetoothAdapter;
 
-  private static boolean sIsHspReady = false;
-  private static BluetoothHeadset sHspProfile = null;
+    private static boolean sIsHspReady = false;
+    private static BluetoothHeadset sHspProfile = null;
 
-  public BluetoothHspFacade(FacadeManager manager) {
-    super(manager);
-    mService = manager.getService();
-    mBluetoothAdapter = BluetoothAdapter.getDefaultAdapter();
-    mBluetoothAdapter.getProfileProxy(mService, new HspServiceListener(),
-        BluetoothProfile.HEADSET);
-  }
+    public BluetoothHspFacade(FacadeManager manager) {
+        super(manager);
+        mService = manager.getService();
+        mBluetoothAdapter = BluetoothAdapter.getDefaultAdapter();
+        mBluetoothAdapter.getProfileProxy(mService, new HspServiceListener(),
+                BluetoothProfile.HEADSET);
+    }
 
-  class HspServiceListener implements BluetoothProfile.ServiceListener {
-    @Override
-    public void onServiceConnected(int profile, BluetoothProfile proxy) {
-      sHspProfile = (BluetoothHeadset) proxy;
-      sIsHspReady = true;
+    class HspServiceListener implements BluetoothProfile.ServiceListener {
+        @Override
+        public void onServiceConnected(int profile, BluetoothProfile proxy) {
+            sHspProfile = (BluetoothHeadset) proxy;
+            sIsHspReady = true;
+        }
+
+        @Override
+        public void onServiceDisconnected(int profile) {
+            sIsHspReady = false;
+        }
+    }
+
+    /**
+     * Connect to Hsp Profile
+     * @param device - the BluetoothDevice object to connect to.
+     * @return if the connection was successfull or not.
+     */
+    public Boolean hspConnect(BluetoothDevice device) {
+        if (sHspProfile == null) return false;
+        return sHspProfile.connect(device);
+    }
+
+    /**
+     * Disconnect to Hsp Profile.
+     * @param device - the Bluetooth Device object to disconnect from.
+     * @return if the disconnection was successfull or not.
+     */
+    public Boolean hspDisconnect(BluetoothDevice device) {
+        if (sHspProfile == null) return false;
+        return sHspProfile.disconnect(device);
+    }
+
+    /**
+     * Is Hsp profile ready.
+     * @return if Hid profile is ready or not.
+     */
+    @Rpc(description = "Is Hsp profile ready.")
+    public Boolean bluetoothHspIsReady() {
+        return sIsHspReady;
+    }
+
+    /**
+     * Set priority of the profile.
+     * @param deviceStr - name or MAC address of a Bluetooth device.
+     * @param priority - Priority that needs to be set.
+     */
+    @Rpc(description = "Set priority of the profile.")
+    public void bluetoothHspSetPriority(
+            @RpcParameter(name = "device", description = "Mac address of a BT device.")
+                String deviceStr,
+            @RpcParameter(name = "priority", description = "Priority that needs to be set.")
+                Integer priority) throws Exception {
+        if (sHspProfile == null) return;
+        BluetoothDevice device = BluetoothFacade.getDevice(
+                mBluetoothAdapter.getBondedDevices(), deviceStr);
+        Log.d("Changing priority of device " + device.getAliasName() + " p: " + priority);
+        sHspProfile.setPriority(device, priority);
+    }
+
+    /**
+     * Connect to an HSP device.
+     * @param device - Name or MAC address of a bluetooth device.
+     * @return True if the connection was successful; otherwise False.
+     */
+    @Rpc(description = "Connect to an HSP device.")
+    public Boolean bluetoothHspConnect(
+            @RpcParameter(name = "device", description =
+                "Name or MAC address of a bluetooth device.")
+                String device) throws Exception {
+        if (sHspProfile == null) return false;
+        BluetoothDevice mDevice = BluetoothFacade.getDevice(
+                mBluetoothAdapter.getBondedDevices(), device);
+        Log.d("Connecting to device " + mDevice.getAliasName());
+        return hspConnect(mDevice);
+    }
+
+    /**
+     * Disconnect an HSP device.
+     * @param device - Name or MAC address of a bluetooth device.
+     * @return True if the disconnection was successful; otherwise False.
+     */
+    @Rpc(description = "Disconnect an HSP device.")
+    public Boolean bluetoothHspDisconnect(
+            @RpcParameter(name = "device", description = "Name or MAC address of a device.")
+                String device) throws Exception {
+        if (sHspProfile == null) return false;
+        Log.d("Connected devices: " + sHspProfile.getConnectedDevices());
+        BluetoothDevice mDevice = BluetoothFacade.getDevice(
+                sHspProfile.getConnectedDevices(), device);
+        return hspDisconnect(mDevice);
+    }
+
+     /**
+     * Get all the devices connected through HSP.
+     * @return List of all the devices connected through HSP.
+     */
+    @Rpc(description = "Get all the devices connected through HSP.")
+    public List<BluetoothDevice> bluetoothHspGetConnectedDevices() {
+        if (!sIsHspReady) return null;
+        return sHspProfile.getConnectedDevices();
+    }
+
+    /**
+     * Get the connection status of a device.
+     * @param deviceID - Name or MAC address of a bluetooth device.
+     * @return connection status of a device.
+     */
+    @Rpc(description = "Get the connection status of a device.")
+    public Integer bluetoothHspGetConnectionStatus(
+            @RpcParameter(name = "deviceID",
+                description = "Name or MAC address of a bluetooth device.")
+                    String deviceID) {
+        if (sHspProfile == null) {
+            return BluetoothProfile.STATE_DISCONNECTED;
+        }
+        List<BluetoothDevice> deviceList = sHspProfile.getConnectedDevices();
+        BluetoothDevice device;
+        try {
+            device = BluetoothFacade.getDevice(deviceList, deviceID);
+        } catch (Exception e) {
+            return BluetoothProfile.STATE_DISCONNECTED;
+        }
+        return sHspProfile.getConnectionState(device);
+    }
+
+    /**
+     * Force SCO audio on DUT, ignore all other restrictions
+     *
+     * @param force True to force SCO audio, False to resume normal
+     * @return True if the setup is successful
+     */
+    @Rpc(description = "Force SCO audio connection on DUT.")
+    public Boolean bluetoothHspForceScoAudio(
+            @RpcParameter(name = "force", description = "whether to force SCO audio")
+                Boolean force) {
+        if (sHspProfile == null) {
+            return false;
+        }
+        sHspProfile.setForceScoAudio(force);
+        return true;
+    }
+
+    /**
+     * Connect SCO audio to a remote device
+     *
+     * @param deviceAddress the Bluetooth MAC address of remote device
+     * @return True if connection is successful, False otherwise
+     */
+    @Rpc(description = "Connect SCO audio for a remote device.")
+    public Boolean bluetoothHspConnectAudio(
+            @RpcParameter(name = "deviceAddress",
+                description = "MAC address of a bluetooth device.")
+                    String deviceAddress) {
+        if (sHspProfile == null) {
+            return false;
+        }
+        Log.d("Connected devices: " + sHspProfile.getConnectedDevices());
+        BluetoothDevice device = null;
+        if (sHspProfile.getConnectedDevices().size() > 1) {
+            Log.d("More than one device available");
+        }
+        try {
+            device = BluetoothFacade.getDevice(
+                    sHspProfile.getConnectedDevices(), deviceAddress);
+        } catch (Exception e) {
+            Log.d("Cannot find device " + deviceAddress);
+            return false;
+        }
+        return sHspProfile.connectAudio();
+    }
+
+    /**
+     * Disconnect SCO audio for a remote device
+     *
+     * @param deviceAddress the Bluetooth MAC address of remote device
+     * @return True if disconnection is successful, False otherwise
+     */
+    @Rpc(description = "Disconnect SCO audio for a remote device")
+    public Boolean bluetoothHspDisconnectAudio(
+            @RpcParameter(name = "deviceAddress",
+                description = "MAC address of a bluetooth device.")
+                    String deviceAddress) {
+        if (sHspProfile == null) {
+            return false;
+        }
+        Log.d("Connected devices: " + sHspProfile.getConnectedDevices());
+        BluetoothDevice device = null;
+        if (sHspProfile.getConnectedDevices().size() > 1) {
+            Log.d("More than one device available");
+        }
+        try {
+            device = BluetoothFacade.getDevice(
+                    sHspProfile.getConnectedDevices(), deviceAddress);
+        } catch (Exception e) {
+            Log.d("Cannot find device " + deviceAddress);
+            return false;
+        }
+        if (!sHspProfile.isAudioConnected(device)) {
+            Log.d("SCO audio is not connected for device " + deviceAddress);
+            return false;
+        }
+        return sHspProfile.disconnectAudio();
+    }
+
+    /**
+     * Check if SCO audio is connected for a remote device
+     *
+     * @param deviceAddress the Bluetooth MAC address of remote device
+     * @return True if device is connected to us via SCO audio, False otherwise
+     */
+    @Rpc(description = "Check if SCO audio is connected for a remote device")
+    public Boolean bluetoothHspIsAudioConnected(
+            @RpcParameter(name = "deviceAddress",
+                description = "MAC address of a bluetooth device.")
+                    String deviceAddress) {
+        if (sHspProfile == null) {
+            return false;
+        }
+        Log.d("Connected devices: " + sHspProfile.getConnectedDevices());
+        BluetoothDevice device = null;
+        if (sHspProfile.getConnectedDevices().size() > 1) {
+            Log.d("More than one device available");
+        }
+        try {
+            device = BluetoothFacade.getDevice(
+                    sHspProfile.getConnectedDevices(), deviceAddress);
+        } catch (Exception e) {
+            Log.d("Cannot find device " + deviceAddress);
+            return false;
+        }
+        return sHspProfile.isAudioConnected(device);
+    }
+
+    /**
+     * Start voice recognition. Send BVRA command.
+     *
+     * @param deviceAddress the Bluetooth MAC address of remote device
+     * @return True if started successfully, False otherwise.
+     */
+    @Rpc(description = "Start Voice Recognition.")
+    public Boolean bluetoothHspStartVoiceRecognition(
+            @RpcParameter(name = "deviceAddress",
+                    description = "MAC address of a bluetooth device.")
+                        String deviceAddress) throws Exception {
+        BluetoothDevice device = BluetoothFacade.getDevice(
+                sHspProfile.getConnectedDevices(), deviceAddress);
+        return sHspProfile.startVoiceRecognition(device);
+    }
+
+    /**
+     * Stop voice recognition. Send BVRA command.
+     *
+     * @param deviceAddress the Bluetooth MAC address of remote device
+     * @return True if stopped successfully, False otherwise.
+     */
+    @Rpc(description = "Stop Voice Recognition.")
+    public Boolean bluetoothHspStopVoiceRecognition(
+            @RpcParameter(name = "deviceAddress",
+                description = "MAC address of a bluetooth device.")
+                    String deviceAddress) throws Exception {
+        BluetoothDevice device = BluetoothFacade.getDevice(
+                sHspProfile.getConnectedDevices(), deviceAddress);
+        return sHspProfile.stopVoiceRecognition(device);
+    }
+
+    /**
+     * Determine whether in-band ringtone is enabled or not.
+     *
+     * @return True if enabled, False otherwise.
+     */
+    @Rpc(description = "In-band ringtone enabled check.")
+    public Boolean bluetoothHspIsInbandRingingEnabled() {
+        return sHspProfile.isInbandRingingEnabled();
+    }
+
+    /**
+     * Send a CLCC response from Sl4a (experimental).
+     *
+     * @param index the index of the call
+     * @param direction the direction of the call
+     * @param status the status of the call
+     * @param mode the mode
+     * @param mpty the mpty value
+     * @param number the phone number
+     * @param type the type
+     */
+    @Rpc(description = "Send generic clcc response.")
+    public void bluetoothHspClccResponse(
+            @RpcParameter(name = "index", description = "") Integer index,
+            @RpcParameter(name = "direction", description = "") Integer direction,
+            @RpcParameter(name = "status", description = "") Integer status,
+            @RpcParameter(name = "mode", description = "") Integer mode,
+            @RpcParameter(name = "mpty", description = "") Boolean mpty,
+            @RpcParameter(name = "number", description = "") String number,
+            @RpcParameter(name = "type", description = "") Integer type
+                  ) {
+        sHspProfile.clccResponse(index, direction, status, mode, mpty, number, type);
     }
 
     @Override
-    public void onServiceDisconnected(int profile) {
-      sIsHspReady = false;
+    public void shutdown() {
     }
-  }
-
-  public Boolean hspConnect(BluetoothDevice device) {
-    if (sHspProfile == null) return false;
-    return sHspProfile.connect(device);
-  }
-
-  public Boolean hspDisconnect(BluetoothDevice device) {
-    if (sHspProfile == null) return false;
-    return sHspProfile.disconnect(device);
-  }
-
-  @Rpc(description = "Is Hsp profile ready.")
-  public Boolean bluetoothHspIsReady() {
-    return sIsHspReady;
-  }
-
-  @Rpc(description = "Set priority of the profile")
-  public void bluetoothHspSetPriority(
-      @RpcParameter(name = "device", description = "Mac address of a BT device.")
-      String deviceStr,
-      @RpcParameter(name = "priority", description = "Priority that needs to be set.")
-      Integer priority)
-      throws Exception {
-    if (sHspProfile == null) return;
-    BluetoothDevice device =
-        BluetoothFacade.getDevice(mBluetoothAdapter.getBondedDevices(), deviceStr);
-    Log.d("Changing priority of device " + device.getAliasName() + " p: " + priority);
-    sHspProfile.setPriority(device, priority);
-  }
-
-  @Rpc(description = "Connect to an HSP device.")
-  public Boolean bluetoothHspConnect(
-      @RpcParameter(name = "device", description = "Name or MAC address of a bluetooth device.")
-      String device)
-      throws Exception {
-    if (sHspProfile == null)
-      return false;
-    BluetoothDevice mDevice = BluetoothFacade.getDevice(BluetoothFacade.DiscoveredDevices, device);
-    Log.d("Connecting to device " + mDevice.getAliasName());
-    return hspConnect(mDevice);
-  }
-
-  @Rpc(description = "Disconnect an HSP device.")
-  public Boolean bluetoothHspDisconnect(
-      @RpcParameter(name = "device", description = "Name or MAC address of a device.")
-      String device)
-      throws Exception {
-    if (sHspProfile == null)
-      return false;
-    Log.d("Connected devices: " + sHspProfile.getConnectedDevices());
-    BluetoothDevice mDevice = BluetoothFacade.getDevice(sHspProfile.getConnectedDevices(),
-                                                        device);
-    return hspDisconnect(mDevice);
-  }
-
-  @Rpc(description = "Get all the devices connected through HSP.")
-  public List<BluetoothDevice> bluetoothHspGetConnectedDevices() {
-    while (!sIsHspReady);
-    return sHspProfile.getConnectedDevices();
-  }
-
-  @Rpc(description = "Get the connection status of a device.")
-  public Integer bluetoothHspGetConnectionStatus(
-          @RpcParameter(name = "deviceID",
-                        description = "Name or MAC address of a bluetooth device.")
-          String deviceID) {
-      if (sHspProfile == null) {
-          return BluetoothProfile.STATE_DISCONNECTED;
-      }
-      List<BluetoothDevice> deviceList = sHspProfile.getConnectedDevices();
-      BluetoothDevice device;
-      try {
-          device = BluetoothFacade.getDevice(deviceList, deviceID);
-      } catch (Exception e) {
-          return BluetoothProfile.STATE_DISCONNECTED;
-      }
-      return sHspProfile.getConnectionState(device);
-  }
-
-  /**
-   * Force SCO audio on DUT, ignore all other restrictions
-   *
-   * @param force True to force SCO audio, False to resume normal
-   * @return True if the setup is successful
-   */
-  @Rpc(description = "Force SCO audio connection on DUT")
-  public Boolean bluetoothHspForceScoAudio(
-          @RpcParameter(name = "force", description = "whether to force SCO audio")
-                  Boolean force) {
-    if (sHspProfile == null) {
-      return false;
-    }
-    sHspProfile.setForceScoAudio(force);
-    return true;
-  }
-
-  /**
-   * Connect SCO audio to a remote device
-   *
-   * @param deviceAddress the Bluetooth MAC address of remote device
-   * @return True if connection is successful, False otherwise
-   */
-  @Rpc(description = "Connect SCO audio for a remote device")
-  public Boolean bluetoothHspConnectAudio(
-          @RpcParameter(name = "deviceAddress", description = "MAC address of a bluetooth device.")
-                  String deviceAddress) {
-    if (sHspProfile == null) {
-      return false;
-    }
-    Log.d("Connected devices: " + sHspProfile.getConnectedDevices());
-    BluetoothDevice device = null;
-    if (sHspProfile.getConnectedDevices().size() > 1) {
-      Log.d("More than one device available");
-    }
-    try {
-      device = BluetoothFacade.getDevice(sHspProfile.getConnectedDevices(), deviceAddress);
-    } catch (Exception e) {
-      Log.d("Cannot find device " + deviceAddress);
-      return false;
-    }
-    return sHspProfile.connectAudio();
-  }
-
-  /**
-   * Disconnect SCO audio for a remote device
-   *
-   * @param deviceAddress the Bluetooth MAC address of remote device
-   * @return True if disconnection is successful, False otherwise
-   */
-  @Rpc(description = "Disconnect SCO audio for a remote device")
-  public Boolean bluetoothHspDisconnectAudio(
-          @RpcParameter(name = "deviceAddress", description = "MAC address of a bluetooth device.")
-                  String deviceAddress) {
-    if (sHspProfile == null) {
-      return false;
-    }
-    Log.d("Connected devices: " + sHspProfile.getConnectedDevices());
-    BluetoothDevice device = null;
-    if (sHspProfile.getConnectedDevices().size() > 1) {
-      Log.d("More than one device available");
-    }
-    try {
-      device = BluetoothFacade.getDevice(sHspProfile.getConnectedDevices(), deviceAddress);
-    } catch (Exception e) {
-      Log.d("Cannot find device " + deviceAddress);
-      return false;
-    }
-    if (!sHspProfile.isAudioConnected(device)) {
-      Log.d("SCO audio is not connected for device " + deviceAddress);
-      return false;
-    }
-    return sHspProfile.disconnectAudio();
-  }
-
-  /**
-   * Check if SCO audio is connected for a remote device
-   *
-   * @param deviceAddress the Bluetooth MAC address of remote device
-   * @return True if device is connected to us via SCO audio, False otherwise
-   */
-  @Rpc(description = "Check if SCO audio is connected for a remote device")
-  public Boolean bluetoothHspIsAudioConnected(
-          @RpcParameter(name = "deviceAddress", description = "MAC address of a bluetooth device.")
-                  String deviceAddress) {
-    if (sHspProfile == null) {
-      return false;
-    }
-    Log.d("Connected devices: " + sHspProfile.getConnectedDevices());
-    BluetoothDevice device = null;
-    if (sHspProfile.getConnectedDevices().size() > 1) {
-      Log.d("More than one device available");
-    }
-    try {
-      device = BluetoothFacade.getDevice(sHspProfile.getConnectedDevices(), deviceAddress);
-    } catch (Exception e) {
-      Log.d("Cannot find device " + deviceAddress);
-      return false;
-    }
-    return sHspProfile.isAudioConnected(device);
-  }
-
-  @Override
-  public void shutdown() {
-  }
 }
diff --git a/Common/src/com/googlecode/android_scripting/facade/bluetooth/BluetoothLeAdvertiseFacade.java b/Common/src/com/googlecode/android_scripting/facade/bluetooth/BluetoothLeAdvertiseFacade.java
index 521c517..d18dc56 100644
--- a/Common/src/com/googlecode/android_scripting/facade/bluetooth/BluetoothLeAdvertiseFacade.java
+++ b/Common/src/com/googlecode/android_scripting/facade/bluetooth/BluetoothLeAdvertiseFacade.java
@@ -73,7 +73,8 @@
         mAdvertiseDataList = new HashMap<Integer, AdvertiseData>();
         mAdvertiseSettingsList = new HashMap<Integer, AdvertiseSettings>();
         mAdvertiseDataBuilder = new Builder();
-        mAdvertiseSettingsBuilder = new android.bluetooth.le.AdvertiseSettings.Builder();
+        mAdvertiseSettingsBuilder =
+                new android.bluetooth.le.AdvertiseSettings.Builder();
     }
 
     /**
@@ -96,7 +97,8 @@
      *
      * @return index
      */
-    @Rpc(description = "Constructs a new Builder obj for AdvertiseData and returns its index")
+    @Rpc(description =
+            "Constructs a new Builder obj for AdvertiseData and returns its index")
     public Integer bleBuildAdvertiseData() {
         BleAdvertiseDataCount += 1;
         int index = BleAdvertiseDataCount;
@@ -111,13 +113,15 @@
      *
      * @return index
      */
-    @Rpc(description = "Constructs a new Builder obj for AdvertiseData and returns its index")
+    @Rpc(description =
+            "Constructs a new Builder obj for AdvertiseData and returns its index")
     public Integer bleBuildAdvertiseSettings() {
         BleAdvertiseSettingsCount += 1;
         int index = BleAdvertiseSettingsCount;
         mAdvertiseSettingsList.put(index,
                 mAdvertiseSettingsBuilder.build());
-        mAdvertiseSettingsBuilder = new android.bluetooth.le.AdvertiseSettings.Builder();
+        mAdvertiseSettingsBuilder =
+                new android.bluetooth.le.AdvertiseSettings.Builder();
         return index;
     }
 
@@ -136,7 +140,8 @@
             mAdvertise.stopAdvertising(mAdvertiseCallbackList
                     .get(index));
         } else {
-            throw new Exception("Invalid index input:" + Integer.toString(index));
+            throw new Exception("Invalid index input:"
+                    + Integer.toString(index));
         }
     }
 
@@ -162,25 +167,29 @@
         if (mAdvertiseDataList.get(dataIndex) != null) {
             mData = mAdvertiseDataList.get(dataIndex);
         } else {
-            throw new Exception("Invalid dataIndex input:" + Integer.toString(dataIndex));
+            throw new Exception("Invalid dataIndex input:"
+                    + Integer.toString(dataIndex));
         }
         if (mAdvertiseSettingsList.get(settingsIndex) != null) {
             mSettings = mAdvertiseSettingsList.get(settingsIndex);
         } else {
-            throw new Exception("Invalid settingsIndex input:" + Integer.toString(settingsIndex));
+            throw new Exception("Invalid settingsIndex input:"
+                    + Integer.toString(settingsIndex));
         }
         if (mAdvertiseCallbackList.get(callbackIndex) != null) {
             Log.d("bluetooth_le starting a background advertisement on callback index: "
                     + Integer.toString(callbackIndex));
-            mAdvertise
-                    .startAdvertising(mSettings, mData, mAdvertiseCallbackList.get(callbackIndex));
+            mAdvertise.startAdvertising(
+                    mSettings, mData, mAdvertiseCallbackList.get(callbackIndex));
         } else {
-            throw new Exception("Invalid callbackIndex input" + Integer.toString(callbackIndex));
+            throw new Exception("Invalid callbackIndex input"
+                    + Integer.toString(callbackIndex));
         }
     }
 
     /**
-     * Starts ble advertising with a scanResponse. ScanResponses are created in the same way
+     * Starts ble advertising with a scanResponse. ScanResponses are created in
+     *        the same way
      * AdvertiseData is created since they share the same object type.
      *
      * @param callbackIndex The advertisementCallback index
@@ -207,12 +216,14 @@
         if (mAdvertiseDataList.get(dataIndex) != null) {
             mData = mAdvertiseDataList.get(dataIndex);
         } else {
-            throw new Exception("Invalid dataIndex input:" + Integer.toString(dataIndex));
+            throw new Exception("Invalid dataIndex input:"
+                    + Integer.toString(dataIndex));
         }
         if (mAdvertiseSettingsList.get(settingsIndex) != null) {
             mSettings = mAdvertiseSettingsList.get(settingsIndex);
         } else {
-            throw new Exception("Invalid settingsIndex input:" + Integer.toString(settingsIndex));
+            throw new Exception("Invalid settingsIndex input:"
+                    + Integer.toString(settingsIndex));
         }
         if (mAdvertiseDataList.get(scanResponseIndex) != null) {
             mScanResponse = mAdvertiseDataList.get(scanResponseIndex);
@@ -227,7 +238,8 @@
                     .startAdvertising(mSettings, mData, mScanResponse,
                             mAdvertiseCallbackList.get(callbackIndex));
         } else {
-            throw new Exception("Invalid callbackIndex input" + Integer.toString(callbackIndex));
+            throw new Exception("Invalid callbackIndex input"
+                    + Integer.toString(callbackIndex));
         }
     }
 
@@ -246,7 +258,8 @@
             AdvertiseSettings mSettings = mAdvertiseSettingsList.get(index);
             return mSettings.getMode();
         } else {
-            throw new Exception("Invalid index input:" + Integer.toString(index));
+            throw new Exception("Invalid index input:"
+                    + Integer.toString(index));
         }
     }
 
@@ -304,7 +317,8 @@
             AdvertiseData mData = mAdvertiseDataList.get(index);
             return mData.getIncludeTxPowerLevel();
         } else {
-            throw new Exception("Invalid index input:" + Integer.toString(index));
+            throw new Exception("Invalid index input:"
+                    + Integer.toString(index));
         }
     }
 
@@ -327,10 +341,12 @@
             if (mData.getManufacturerSpecificData() != null) {
                 return mData.getManufacturerSpecificData().get(manufacturerId);
             } else {
-                throw new Exception("Invalid manufacturerId input:" + Integer.toString(manufacturerId));
+                throw new Exception("Invalid manufacturerId input:"
+                        + Integer.toString(manufacturerId));
             }
         } else {
-            throw new Exception("Invalid index input:" + Integer.toString(index));
+            throw new Exception("Invalid index input:"
+                    + Integer.toString(index));
 
         }
     }
@@ -350,7 +366,8 @@
             AdvertiseData mData = mAdvertiseDataList.get(index);
             return mData.getIncludeDeviceName();
         } else {
-            throw new Exception("Invalid index input:" + Integer.toString(index));
+            throw new Exception("Invalid index input:"
+                    + Integer.toString(index));
         }
     }
 
@@ -377,7 +394,8 @@
                 throw new Exception("Invalid serviceUuid input:" + serviceUuid);
             }
         } else {
-            throw new Exception("Invalid index input:" + Integer.toString(index));
+            throw new Exception("Invalid index input:"
+                    + Integer.toString(index));
         }
     }
 
@@ -396,7 +414,8 @@
             AdvertiseData mData = mAdvertiseDataList.get(index);
             return mData.getServiceUuids();
         } else {
-            throw new Exception("Invalid index input:" + Integer.toString(index));
+            throw new Exception("Invalid index input:"
+                    + Integer.toString(index));
         }
     }
 
@@ -498,8 +517,8 @@
     /**
      * Set ble advertisement data include tx power level
      *
-     * @param includeTxPowerLevel boolean whether to include the tx power level or not in the
-     *            advertisement
+     * @param includeTxPowerLevel boolean whether to include the tx
+     *         power level or not in the advertisement
      */
     @Rpc(description = "Set ble advertisement data include tx power level")
     public void bleSetAdvertiseDataIncludeTxPowerLevel(
@@ -525,8 +544,8 @@
     /**
      * Set ble advertisement data include device name
      *
-     * @param includeDeviceName boolean whether to include device name or not in the
-     *            advertisement
+     * @param includeDeviceName boolean whether to include device name or
+     *        not in the advertisement
      */
     @Rpc(description = "Set ble advertisement data include device name")
     public void bleSetAdvertiseDataIncludeDeviceName(
@@ -553,22 +572,28 @@
                     + index);
             mResults.putString("Type", "onSuccess");
             mResults.putParcelable("SettingsInEffect", settingsInEffect);
-            mEventFacade.postEvent(mEventType + index + "onSuccess", mResults.clone());
+            mEventFacade.postEvent(mEventType + index
+                    + "onSuccess", mResults.clone());
             mResults.clear();
         }
 
         @Override
         public void onStartFailure(int errorCode) {
             String errorString = "UNKNOWN_ERROR_CODE";
-            if (errorCode == AdvertiseCallback.ADVERTISE_FAILED_ALREADY_STARTED) {
+            if (errorCode
+                    == AdvertiseCallback.ADVERTISE_FAILED_ALREADY_STARTED) {
                 errorString = "ADVERTISE_FAILED_ALREADY_STARTED";
-            } else if (errorCode == AdvertiseCallback.ADVERTISE_FAILED_DATA_TOO_LARGE) {
+            } else if (errorCode
+                    == AdvertiseCallback.ADVERTISE_FAILED_DATA_TOO_LARGE) {
                 errorString = "ADVERTISE_FAILED_DATA_TOO_LARGE";
-            } else if (errorCode == AdvertiseCallback.ADVERTISE_FAILED_FEATURE_UNSUPPORTED) {
+            } else if (errorCode
+                    == AdvertiseCallback.ADVERTISE_FAILED_FEATURE_UNSUPPORTED) {
                 errorString = "ADVERTISE_FAILED_FEATURE_UNSUPPORTED";
-            } else if (errorCode == AdvertiseCallback.ADVERTISE_FAILED_INTERNAL_ERROR) {
+            } else if (errorCode
+                    == AdvertiseCallback.ADVERTISE_FAILED_INTERNAL_ERROR) {
                 errorString = "ADVERTISE_FAILED_INTERNAL_ERROR";
-            } else if (errorCode == AdvertiseCallback.ADVERTISE_FAILED_TOO_MANY_ADVERTISERS) {
+            } else if (errorCode
+                    == AdvertiseCallback.ADVERTISE_FAILED_TOO_MANY_ADVERTISERS) {
                 errorString = "ADVERTISE_FAILED_TOO_MANY_ADVERTISERS";
             }
             Log.d("bluetooth_le_advertisement onFailure " + mEventType + " "
diff --git a/Common/src/com/googlecode/android_scripting/facade/bluetooth/BluetoothLeScanFacade.java b/Common/src/com/googlecode/android_scripting/facade/bluetooth/BluetoothLeScanFacade.java
index ba92ab9..06f2216 100644
--- a/Common/src/com/googlecode/android_scripting/facade/bluetooth/BluetoothLeScanFacade.java
+++ b/Common/src/com/googlecode/android_scripting/facade/bluetooth/BluetoothLeScanFacade.java
@@ -226,7 +226,8 @@
                     + Integer.toString(scanSettingsIndex));
         }
         if (mScanCallbackList.get(callbackIndex) != null) {
-            mScanner.startScan(mScanFilters, mScanSettings, mScanCallbackList.get(callbackIndex));
+            mScanner.startScan(mScanFilters, mScanSettings,
+                    mScanCallbackList.get(callbackIndex));
         } else {
             throw new Exception("Invalid filterListIndex input:"
                     + Integer.toString(filterListIndex));
@@ -247,7 +248,8 @@
         Log.d("bluetooth_le_scan starting a background scan");
         boolean result = false;
         if (mLeScanCallbackList.get(leCallbackIndex) != null) {
-            result = mBluetoothAdapter.startLeScan(mLeScanCallbackList.get(leCallbackIndex));
+            result = mBluetoothAdapter.startLeScan(
+                    mLeScanCallbackList.get(leCallbackIndex));
         } else {
             throw new Exception("Invalid leCallbackIndex input:"
                     + Integer.toString(leCallbackIndex));
@@ -452,7 +454,8 @@
             ScanSettings mScanSettings = mScanSettingsList.get(index);
             return mScanSettings.getScanResultType();
         } else {
-            throw new Exception("Invalid index input:" + Integer.toString(index));
+            throw new Exception("Invalid index input:"
+                    +    Integer.toString(index));
         }
     }
 
@@ -475,10 +478,12 @@
                 return mScanFilterList.get(index)
                         .get(filterIndex).getManufacturerId();
             } else {
-                throw new Exception("Invalid filterIndex input:" + Integer.toString(filterIndex));
+                throw new Exception("Invalid filterIndex input:"
+                        + Integer.toString(filterIndex));
             }
         } else {
-            throw new Exception("Invalid index input:" + Integer.toString(index));
+            throw new Exception("Invalid index input:"
+                    + Integer.toString(index));
         }
     }
 
@@ -498,12 +503,15 @@
             throws Exception {
         if (mScanFilterList.get(index) != null) {
             if (mScanFilterList.get(index).get(filterIndex) != null) {
-                return mScanFilterList.get(index).get(filterIndex).getDeviceAddress();
+                return mScanFilterList.get(index).get(
+                        filterIndex).getDeviceAddress();
             } else {
-                throw new Exception("Invalid filterIndex input:" + Integer.toString(filterIndex));
+                throw new Exception("Invalid filterIndex input:"
+                        + Integer.toString(filterIndex));
             }
         } else {
-            throw new Exception("Invalid index input:" + Integer.toString(index));
+            throw new Exception("Invalid index input:"
+                    + Integer.toString(index));
         }
     }
 
@@ -523,12 +531,15 @@
             throws Exception {
         if (mScanFilterList.get(index) != null) {
             if (mScanFilterList.get(index).get(filterIndex) != null) {
-                return mScanFilterList.get(index).get(filterIndex).getDeviceName();
+                return mScanFilterList.get(index).get(
+                        filterIndex).getDeviceName();
             } else {
-                throw new Exception("Invalid filterIndex input:" + Integer.toString(filterIndex));
+                throw new Exception("Invalid filterIndex input:"
+                        + Integer.toString(filterIndex));
             }
         } else {
-            throw new Exception("Invalid index input:" + Integer.toString(index));
+            throw new Exception("Invalid index input:"
+                    + Integer.toString(index));
         }
     }
 
@@ -548,12 +559,15 @@
             throws Exception {
         if (mScanFilterList.get(index) != null) {
             if (mScanFilterList.get(index).get(filterIndex) != null) {
-                return mScanFilterList.get(index).get(filterIndex).getManufacturerData();
+                return mScanFilterList.get(index).get(
+                        filterIndex).getManufacturerData();
             } else {
-                throw new Exception("Invalid filterIndex input:" + Integer.toString(filterIndex));
+                throw new Exception("Invalid filterIndex input:"
+                        + Integer.toString(filterIndex));
             }
         } else {
-            throw new Exception("Invalid index input:" + Integer.toString(index));
+            throw new Exception("Invalid index input:"
+                    + Integer.toString(index));
         }
     }
 
@@ -573,12 +587,15 @@
             throws Exception {
         if (mScanFilterList.get(index) != null) {
             if (mScanFilterList.get(index).get(filterIndex) != null) {
-                return mScanFilterList.get(index).get(filterIndex).getManufacturerDataMask();
+                return mScanFilterList.get(index).get(
+                        filterIndex).getManufacturerDataMask();
             } else {
-                throw new Exception("Invalid filterIndex input:" + Integer.toString(filterIndex));
+                throw new Exception("Invalid filterIndex input:"
+                        + Integer.toString(filterIndex));
             }
         } else {
-            throw new Exception("Invalid index input:" + Integer.toString(index));
+            throw new Exception("Invalid index input:"
+                    + Integer.toString(index));
         }
     }
 
@@ -598,12 +615,15 @@
             throws Exception {
         if (mScanFilterList.get(index) != null) {
             if (mScanFilterList.get(index).get(filterIndex) != null) {
-                return mScanFilterList.get(index).get(filterIndex).getServiceData();
+                return mScanFilterList.get(index).get(
+                        filterIndex).getServiceData();
             } else {
-                throw new Exception("Invalid filterIndex input:" + Integer.toString(filterIndex));
+                throw new Exception("Invalid filterIndex input:"
+                        + Integer.toString(filterIndex));
             }
         } else {
-            throw new Exception("Invalid index input:" + Integer.toString(index));
+            throw new Exception("Invalid index input:"
+                    + Integer.toString(index));
         }
     }
 
@@ -623,12 +643,15 @@
             throws Exception {
         if (mScanFilterList.get(index) != null) {
             if (mScanFilterList.get(index).get(filterIndex) != null) {
-                return mScanFilterList.get(index).get(filterIndex).getServiceDataMask();
+                return mScanFilterList.get(index).get(
+                        filterIndex).getServiceDataMask();
             } else {
-                throw new Exception("Invalid filterIndex input:" + Integer.toString(filterIndex));
+                throw new Exception("Invalid filterIndex input:"
+                        + Integer.toString(filterIndex));
             }
         } else {
-            throw new Exception("Invalid index input:" + Integer.toString(index));
+            throw new Exception("Invalid index input:"
+                    + Integer.toString(index));
         }
     }
 
@@ -648,17 +671,21 @@
             throws Exception {
         if (mScanFilterList.get(index) != null) {
             if (mScanFilterList.get(index).get(filterIndex) != null) {
-                if (mScanFilterList.get(index).get(filterIndex).getServiceUuid() != null) {
-                    return mScanFilterList.get(index).get(filterIndex).getServiceUuid().toString();
+                if (mScanFilterList.get(index).get(
+                        filterIndex).getServiceUuid() != null) {
+                    return mScanFilterList.get(index).get(
+                            filterIndex).getServiceUuid().toString();
                 } else {
                     throw new Exception("No Service Uuid set for filter:"
                             + Integer.toString(filterIndex));
                 }
             } else {
-                throw new Exception("Invalid filterIndex input:" + Integer.toString(filterIndex));
+                throw new Exception("Invalid filterIndex input:"
+                        + Integer.toString(filterIndex));
             }
         } else {
-            throw new Exception("Invalid index input:" + Integer.toString(index));
+            throw new Exception("Invalid index input:"
+                    + Integer.toString(index));
         }
     }
 
@@ -678,18 +705,22 @@
             throws Exception {
         if (mScanFilterList.get(index) != null) {
             if (mScanFilterList.get(index).get(filterIndex) != null) {
-                if (mScanFilterList.get(index).get(filterIndex).getServiceUuidMask() != null) {
-                    return mScanFilterList.get(index).get(filterIndex).getServiceUuidMask()
+                if (mScanFilterList.get(index).get(
+                        filterIndex).getServiceUuidMask() != null) {
+                    return mScanFilterList.get(
+                            index).get(filterIndex).getServiceUuidMask()
                             .toString();
                 } else {
                     throw new Exception("No Service Uuid Mask set for filter:"
                             + Integer.toString(filterIndex));
                 }
             } else {
-                throw new Exception("Invalid filterIndex input:" + Integer.toString(filterIndex));
+                throw new Exception("Invalid filterIndex input:"
+                        + Integer.toString(filterIndex));
             }
         } else {
-            throw new Exception("Invalid index input:" + Integer.toString(index));
+            throw new Exception("Invalid index input:"
+                    + Integer.toString(index));
         }
     }
 
@@ -708,8 +739,8 @@
     }
 
     /**
-     * Add filter "manufacturereDataId and/or manufacturerData" to existing ScanFilter
-     *
+     * Add filter "manufacturereDataId and/or manufacturerData" to existing
+     * ScanFilter
      * @param manufacturerDataId the manufacturer data id to filter against
      * @param manufacturerDataMask the manufacturere data mask to filter against
      * @throws Exception
@@ -742,13 +773,10 @@
      */
     @Rpc(description = "Add filter \"serviceData and serviceDataMask\" to existing ScanFilter ")
     public void bleSetScanFilterServiceData(
-            @RpcParameter(name = "serviceUuid")
-            String serviceUuid,
-            @RpcParameter(name = "serviceData")
-            byte[] serviceData,
+            @RpcParameter(name = "serviceUuid") String serviceUuid,
+            @RpcParameter(name = "serviceData") byte[] serviceData,
             @RpcParameter(name = "serviceDataMask")
-            @RpcOptional
-            byte[] serviceDataMask
+            @RpcOptional byte[] serviceDataMask
             ) {
         if (serviceDataMask != null) {
             mScanFilterBuilder
@@ -841,14 +869,17 @@
             String errorString = "UNKNOWN_ERROR_CODE";
             if (errorCode == ScanCallback.SCAN_FAILED_ALREADY_STARTED) {
                 errorString = "SCAN_FAILED_ALREADY_STARTED";
-            } else if (errorCode == ScanCallback.SCAN_FAILED_APPLICATION_REGISTRATION_FAILED) {
+            } else if (errorCode
+                    == ScanCallback.SCAN_FAILED_APPLICATION_REGISTRATION_FAILED) {
                 errorString = "SCAN_FAILED_APPLICATION_REGISTRATION_FAILED";
-            } else if (errorCode == ScanCallback.SCAN_FAILED_FEATURE_UNSUPPORTED) {
+            } else if (errorCode
+                    == ScanCallback.SCAN_FAILED_FEATURE_UNSUPPORTED) {
                 errorString = "SCAN_FAILED_FEATURE_UNSUPPORTED";
             } else if (errorCode == ScanCallback.SCAN_FAILED_INTERNAL_ERROR) {
                 errorString = "SCAN_FAILED_INTERNAL_ERROR";
             }
-            Log.d("bluetooth_le_scan change onScanFailed " + mEventType + " " + index + " error "
+            Log.d("bluetooth_le_scan change onScanFailed "
+                    + mEventType + " " + index + " error "
                     + errorString);
             mResults.putInt("ID", index);
             mResults.putString("Type", "onScanFailed");
@@ -861,12 +892,14 @@
 
         @Override
         public void onScanResult(int callbackType, ScanResult result) {
-            Log.d("bluetooth_le_scan change onUpdate " + mEventType + " " + index);
+            Log.d("bluetooth_le_scan change onUpdate "
+                    + mEventType + " " + index);
             mResults.putInt("ID", index);
             mResults.putInt("CallbackType", callbackType);
             mResults.putString("Type", "onScanResult");
             mResults.putParcelable("Result", result);
-            mEventFacade.postEvent(mEventType + index + "onScanResults", mResults.clone());
+            mEventFacade.postEvent(
+                    mEventType + index + "onScanResults", mResults.clone());
             mResults.clear();
         }
 
@@ -877,7 +910,8 @@
             mResults.putInt("ID", index);
             mResults.putString("Type", "onBatchScanResults");
             mResults.putParcelableList("Results", results);
-            mEventFacade.postEvent(mEventType + index + "onBatchScanResult", mResults.clone());
+            mEventFacade.postEvent(mEventType
+                    + index + "onBatchScanResult", mResults.clone());
             mResults.clear();
         }
     }
@@ -894,43 +928,45 @@
         }
 
         @Override
-        public void onLeScan(BluetoothDevice device, int rssi, byte[] scanRecord) {
+        public void onLeScan(
+                BluetoothDevice device, int rssi, byte[] scanRecord) {
             Log.d("bluetooth_classic_le_scan " + mEventType + " " + index);
             mResults.putParcelable("Device", device);
             mResults.putInt("Rssi", rssi);
             mResults.putByteArray("ScanRecord", scanRecord);
             mResults.putString("Type", "onLeScan");
-            mEventFacade.postEvent(mEventType + index + "onLeScan", mResults.clone());
+            mEventFacade.postEvent(mEventType
+                    + index + "onLeScan", mResults.clone());
             mResults.clear();
         }
     }
 
     @Override
     public void shutdown() {
-      if (mBluetoothAdapter.getState() == BluetoothAdapter.STATE_ON) {
-          for (myScanCallback mScanCallback : mScanCallbackList.values()) {
-              if (mScanCallback != null) {
-                  try {
-                    mBluetoothAdapter.getBluetoothLeScanner()
-                      .stopScan(mScanCallback);
-                  } catch (NullPointerException e) {
-                    Log.e("Failed to stop ble scan callback.", e);
-                  }
-              }
-          }
-          for (myLeScanCallback mLeScanCallback : mLeScanCallbackList.values()) {
-              if (mLeScanCallback != null) {
-                  try {
-                      mBluetoothAdapter.stopLeScan(mLeScanCallback);
-                  } catch (NullPointerException e) {
-                    Log.e("Failed to stop classic ble scan callback.", e);
-                  }
-              }
-          }
-      }
-      mScanCallbackList.clear();
-      mScanFilterList.clear();
-      mScanSettingsList.clear();
-      mLeScanCallbackList.clear();
+        if (mBluetoothAdapter.getState() == BluetoothAdapter.STATE_ON) {
+            for (myScanCallback mScanCallback : mScanCallbackList.values()) {
+                if (mScanCallback != null) {
+                    try {
+                        mBluetoothAdapter.getBluetoothLeScanner()
+                                .stopScan(mScanCallback);
+                    } catch (NullPointerException e) {
+                        Log.e("Failed to stop ble scan callback.", e);
+                    }
+                }
+            }
+            for (myLeScanCallback mLeScanCallback : mLeScanCallbackList.values()) {
+                if (mLeScanCallback != null) {
+                    try {
+                        mBluetoothAdapter.stopLeScan(mLeScanCallback);
+                    } catch (NullPointerException e) {
+                        Log.e("Failed to stop classic ble scan callback.", e);
+                    }
+                }
+            }
+        }
+        mScanCallbackList.clear();
+        mScanFilterList.clear();
+        mScanSettingsList.clear();
+        mLeScanCallbackList.clear();
     }
 }
diff --git a/Common/src/com/googlecode/android_scripting/facade/bluetooth/BluetoothMapClientFacade.java b/Common/src/com/googlecode/android_scripting/facade/bluetooth/BluetoothMapClientFacade.java
index 0de2829..36573d2 100644
--- a/Common/src/com/googlecode/android_scripting/facade/bluetooth/BluetoothMapClientFacade.java
+++ b/Common/src/com/googlecode/android_scripting/facade/bluetooth/BluetoothMapClientFacade.java
@@ -72,12 +72,16 @@
         mEventFacade = manager.getReceiver(EventFacade.class);
 
         mNotificationReceiver = new NotificationReceiver();
-        mSendIntent = new Intent(BluetoothMapClient.ACTION_MESSAGE_SENT_SUCCESSFULLY);
-        mDeliveryIntent = new Intent(BluetoothMapClient.ACTION_MESSAGE_DELIVERED_SUCCESSFULLY);
+        mSendIntent = new Intent(
+                BluetoothMapClient.ACTION_MESSAGE_SENT_SUCCESSFULLY);
+        mDeliveryIntent = new Intent(
+                BluetoothMapClient.ACTION_MESSAGE_DELIVERED_SUCCESSFULLY);
         IntentFilter intentFilter = new IntentFilter();
         intentFilter.addAction(BluetoothMapClient.ACTION_MESSAGE_RECEIVED);
-        intentFilter.addAction(BluetoothMapClient.ACTION_MESSAGE_SENT_SUCCESSFULLY);
-        intentFilter.addAction(BluetoothMapClient.ACTION_MESSAGE_DELIVERED_SUCCESSFULLY);
+        intentFilter.addAction(
+                BluetoothMapClient.ACTION_MESSAGE_SENT_SUCCESSFULLY);
+        intentFilter.addAction(
+                BluetoothMapClient.ACTION_MESSAGE_DELIVERED_SUCCESSFULLY);
         mService.registerReceiver(mNotificationReceiver, intentFilter);
         Log.d("notification receiver registered");
     }
@@ -107,34 +111,41 @@
 
     @Rpc(description = "Connect to an MAP MSE device.")
     public Boolean bluetoothMapClientConnect(
-            @RpcParameter(name = "device", description = "Name or MAC address of a bluetooth "
+            @RpcParameter(name = "device",
+                    description = "Name or MAC address of a bluetooth "
                     + "device.")
                     String device)
             throws Exception {
         if (sMapProfile == null) return false;
-        BluetoothDevice mDevice = BluetoothFacade.getDevice(mBluetoothAdapter.getBondedDevices(),
-                device);
+        BluetoothDevice mDevice = BluetoothFacade.getDevice(
+                mBluetoothAdapter.getBondedDevices(), device);
         Log.d("Connecting to device " + mDevice.getAliasName());
         return sMapProfile.connect(mDevice);
     }
 
     @Rpc(description = "Send a (text) message via bluetooth.")
     public Boolean mapSendMessage(
-            @RpcParameter(name = "deviceID", description = "Name or MAC address of a device.")
+            @RpcParameter(name = "deviceID",
+                    description = "Name or MAC address of a device.")
                     String deviceID,
-            @RpcParameter(name = "phoneNumbers", description = "Phone number of contact.")
+            @RpcParameter(name = "phoneNumbers",
+                    description = "Phone number of contact.")
                     String[] phoneNumbers,
-            @RpcParameter(name = "message", description = "Message to send.") String message) {
+            @RpcParameter(name = "message",
+                    description = "Message to send.") String message) {
         try {
             BluetoothDevice device =
-                    BluetoothFacade.getDevice(sMapProfile.getConnectedDevices(), deviceID);
+                    BluetoothFacade.getDevice(
+                            sMapProfile.getConnectedDevices(), deviceID);
             mSentIntent = PendingIntent.getBroadcast(mService, 0, mSendIntent,
                     PendingIntent.FLAG_ONE_SHOT);
-            mDeliveredIntent = PendingIntent.getBroadcast(mService, 0, mDeliveryIntent,
+            mDeliveredIntent = PendingIntent.getBroadcast(
+                    mService, 0, mDeliveryIntent,
                     PendingIntent.FLAG_ONE_SHOT);
             Uri[] contacts = new Uri[phoneNumbers.length];
             for (int i = 0; i < phoneNumbers.length; i++) {
-                Log.d("PhoneNumber count: " + phoneNumbers.length + " = " + phoneNumbers[i]);
+                Log.d("PhoneNumber count: " + phoneNumbers.length + " = "
+                        + phoneNumbers[i]);
                 contacts[i] = Uri.parse(phoneNumbers[i]);
             }
             return sMapProfile.sendMessage(device, contacts, message, mSentIntent,
@@ -159,14 +170,18 @@
 
     @Rpc(description = "Disconnect an MAP device.")
     public Boolean bluetoothMapClientDisconnect(
-            @RpcParameter(name = "deviceID", description = "Name or MAC address of a device.")
+            @RpcParameter(name = "deviceID",
+                    description = "Name or MAC address of a device.")
                     String deviceID)
             throws Exception {
         if (sMapProfile == null) return false;
-        List<BluetoothDevice> connectedMapDevices = sMapProfile.getConnectedDevices();
+        List<BluetoothDevice> connectedMapDevices =
+                sMapProfile.getConnectedDevices();
         Log.d("Connected map devices: " + connectedMapDevices);
-        BluetoothDevice mDevice = BluetoothFacade.getDevice(connectedMapDevices, deviceID);
-        if (!connectedMapDevices.isEmpty() && connectedMapDevices.get(0).equals(mDevice)) {
+        BluetoothDevice mDevice = BluetoothFacade.getDevice(
+                connectedMapDevices, deviceID);
+        if (!connectedMapDevices.isEmpty()
+                && connectedMapDevices.get(0).equals(mDevice)) {
             if (sMapProfile.getPriority(mDevice) > BluetoothProfile.PRIORITY_ON) {
                 sMapProfile.setPriority(mDevice, BluetoothProfile.PRIORITY_ON);
             }
@@ -198,10 +213,13 @@
             if (action.equals(BluetoothMapClient.ACTION_MESSAGE_RECEIVED)) {
                 mEventFacade.postEvent(MAP_EVENT,
                         intent.getStringExtra(android.content.Intent.EXTRA_TEXT));
-            } else if (action.equals(BluetoothMapClient.ACTION_MESSAGE_SENT_SUCCESSFULLY)) {
+            } else if (action.equals(
+                    BluetoothMapClient.ACTION_MESSAGE_SENT_SUCCESSFULLY)) {
                 mEventFacade.postEvent(MAP_SMS_SENT_SUCCESS,
-                        intent.getStringExtra(android.content.Intent.EXTRA_TEXT));
-            } else if (action.equals(BluetoothMapClient.ACTION_MESSAGE_DELIVERED_SUCCESSFULLY)) {
+                        intent.getStringExtra(
+                            android.content.Intent.EXTRA_TEXT));
+            } else if (action.equals(
+                    BluetoothMapClient.ACTION_MESSAGE_DELIVERED_SUCCESSFULLY)) {
                 mEventFacade.postEvent(MAP_SMS_DELIVER_SUCCESS,
                         intent.getStringExtra(android.content.Intent.EXTRA_TEXT));
             }
diff --git a/Common/src/com/googlecode/android_scripting/facade/bluetooth/BluetoothMapFacade.java b/Common/src/com/googlecode/android_scripting/facade/bluetooth/BluetoothMapFacade.java
index 01c1bd4..e3fe007 100644
--- a/Common/src/com/googlecode/android_scripting/facade/bluetooth/BluetoothMapFacade.java
+++ b/Common/src/com/googlecode/android_scripting/facade/bluetooth/BluetoothMapFacade.java
@@ -16,12 +16,10 @@
 
 package com.googlecode.android_scripting.facade.bluetooth;
 
-import java.util.List;
-
 import android.app.Service;
-import android.bluetooth.BluetoothMap;
 import android.bluetooth.BluetoothAdapter;
 import android.bluetooth.BluetoothDevice;
+import android.bluetooth.BluetoothMap;
 import android.bluetooth.BluetoothProfile;
 import android.bluetooth.BluetoothUuid;
 import android.os.ParcelUuid;
@@ -32,86 +30,114 @@
 import com.googlecode.android_scripting.rpc.Rpc;
 import com.googlecode.android_scripting.rpc.RpcParameter;
 
+import java.util.List;
+
 public class BluetoothMapFacade extends RpcReceiver {
-  static final ParcelUuid[] MAP_UUIDS = {
-      BluetoothUuid.MAP,
-      BluetoothUuid.MNS,
-      BluetoothUuid.MAS,
-  };
-  private final Service mService;
-  private final BluetoothAdapter mBluetoothAdapter;
+    static final ParcelUuid[] MAP_UUIDS = {
+        BluetoothUuid.MAP,
+        BluetoothUuid.MNS,
+        BluetoothUuid.MAS,
+    };
+    private final Service mService;
+    private final BluetoothAdapter mBluetoothAdapter;
 
-  private static boolean sIsMapReady = false;
-  private static BluetoothMap sMapProfile = null;
+    private static boolean sIsMapReady = false;
+    private static BluetoothMap sMapProfile = null;
 
-  public BluetoothMapFacade(FacadeManager manager) {
-    super(manager);
-    mService = manager.getService();
-    mBluetoothAdapter = BluetoothAdapter.getDefaultAdapter();
-    mBluetoothAdapter.getProfileProxy(mService, new MapServiceListener(),
+    public BluetoothMapFacade(FacadeManager manager) {
+        super(manager);
+        mService = manager.getService();
+        mBluetoothAdapter = BluetoothAdapter.getDefaultAdapter();
+        mBluetoothAdapter.getProfileProxy(mService, new MapServiceListener(),
         BluetoothProfile.MAP);
-  }
-
-  class MapServiceListener implements BluetoothProfile.ServiceListener {
-    @Override
-    public void onServiceConnected(int profile, BluetoothProfile proxy) {
-      sMapProfile = (BluetoothMap) proxy;
-      sIsMapReady = true;
     }
 
-    @Override
-    public void onServiceDisconnected(int profile) {
-      sIsMapReady = false;
-    }
-  }
-
-  public Boolean mapDisconnect(BluetoothDevice device) {
-    if (sMapProfile.getPriority(device) > BluetoothProfile.PRIORITY_ON) {
-      sMapProfile.setPriority(device, BluetoothProfile.PRIORITY_ON);
-    }
-    return sMapProfile.disconnect(device);
-  }
-
-  @Rpc(description = "Is Map profile ready.")
-  public Boolean bluetoothMapIsReady() {
-    return sIsMapReady;
-  }
-
-  @Rpc(description = "Disconnect an MAP device.")
-  public Boolean bluetoothMapDisconnect(
-      @RpcParameter(name = "deviceID", description = "Name or MAC address of a device.")
-      String deviceID)
-      throws Exception {
-    if (sMapProfile == null) return false;
-    List<BluetoothDevice> connectedMapDevices = sMapProfile.getConnectedDevices();
-    Log.d("Connected map devices: " + connectedMapDevices);
-    BluetoothDevice mDevice = BluetoothFacade.getDevice(connectedMapDevices, deviceID);
-    if (!connectedMapDevices.isEmpty() && connectedMapDevices.get(0).equals(mDevice)) {
-        if (sMapProfile.getPriority(mDevice) > BluetoothProfile.PRIORITY_ON) {
-            sMapProfile.setPriority(mDevice, BluetoothProfile.PRIORITY_ON);
+    class MapServiceListener implements BluetoothProfile.ServiceListener {
+        @Override
+        public void onServiceConnected(int profile, BluetoothProfile proxy) {
+            sMapProfile = (BluetoothMap) proxy;
+            sIsMapReady = true;
         }
-        return sMapProfile.disconnect(mDevice);
-    } else {
-        return false;
+
+        @Override
+        public void onServiceDisconnected(int profile) {
+            sIsMapReady = false;
+        }
     }
-  }
 
-  @Rpc(description = "Get all the devices connected through MAP.")
-  public List<BluetoothDevice> bluetoothMapGetConnectedDevices() {
-    while (!sIsMapReady);
-    return sMapProfile.getDevicesMatchingConnectionStates(
-          new int[] {BluetoothProfile.STATE_CONNECTED,
-                     BluetoothProfile.STATE_CONNECTING,
-                     BluetoothProfile.STATE_DISCONNECTING});
-  }
+    /**
+     * Disconnect Map Profile.
+     * @param device - the BluetoothDevice object to connect to.
+     * @return if the disconnection was successfull or not.
+     */
+    public Boolean mapDisconnect(BluetoothDevice device) {
+        if (sMapProfile.getPriority(device) > BluetoothProfile.PRIORITY_ON) {
+            sMapProfile.setPriority(device, BluetoothProfile.PRIORITY_ON);
+        }
+        return sMapProfile.disconnect(device);
+    }
 
-  @Rpc(description = "Get the currently connected remote Bluetooth device (PCE).")
-  public BluetoothDevice bluetoothMapGetClient() {
-    if (sMapProfile == null) { return null; }
-    return sMapProfile.getClient();
-  }
+    /**
+     * Is Map profile ready.
+     * @return if Map profile is ready or not.
+     */
+    @Rpc(description = "Is Map profile ready.")
+    public Boolean bluetoothMapIsReady() {
+    return sIsMapReady;
+    }
 
-  @Override
-  public void shutdown() {
-  }
+    /**
+     * Disconnect an MAP device.
+     * @param deviceID - Name or MAC address of a bluetooth device.
+     * @return True if the disconnection was successful; otherwise False.
+     */
+    @Rpc(description = "Disconnect an MAP device.")
+    public Boolean bluetoothMapDisconnect(
+            @RpcParameter(name = "deviceID",
+                description = "Name or MAC address of a device.")
+                    String deviceID) throws Exception {
+        if (sMapProfile == null) return false;
+        List<BluetoothDevice> connectedMapDevices =
+                sMapProfile.getConnectedDevices();
+        Log.d("Connected map devices: " + connectedMapDevices);
+        BluetoothDevice mDevice = BluetoothFacade.getDevice(connectedMapDevices, deviceID);
+        if (!connectedMapDevices.isEmpty()
+                && connectedMapDevices.get(0).equals(mDevice)) {
+            if (sMapProfile.getPriority(mDevice)
+                    > BluetoothProfile.PRIORITY_ON) {
+                sMapProfile.setPriority(mDevice, BluetoothProfile.PRIORITY_ON);
+            }
+            return sMapProfile.disconnect(mDevice);
+        } else {
+            return false;
+        }
+    }
+
+    /**
+     * Get all the devices connected through MAP.
+     * @return List of all the devices connected through MAP.
+     */
+    @Rpc(description = "Get all the devices connected through MAP.")
+    public List<BluetoothDevice> bluetoothMapGetConnectedDevices() {
+        if (!sIsMapReady) return null;
+        return sMapProfile.getDevicesMatchingConnectionStates(
+                new int[] {BluetoothProfile.STATE_CONNECTED,
+                    BluetoothProfile.STATE_CONNECTING,
+                    BluetoothProfile.STATE_DISCONNECTING});
+    }
+
+    /**
+     * Get the currently connected remote Bluetooth device (PCE).
+     * @return remote Bluetooth device which is currently conencted.
+     */
+    @Rpc(description =
+            "Get the currently connected remote Bluetooth device (PCE).")
+    public BluetoothDevice bluetoothMapGetClient() {
+        if (sMapProfile == null) return null;
+        return sMapProfile.getClient();
+    }
+
+    @Override
+    public void shutdown() {
+    }
 }
diff --git a/Common/src/com/googlecode/android_scripting/facade/bluetooth/BluetoothMediaFacade.java b/Common/src/com/googlecode/android_scripting/facade/bluetooth/BluetoothMediaFacade.java
index c179b63..404a791 100644
--- a/Common/src/com/googlecode/android_scripting/facade/bluetooth/BluetoothMediaFacade.java
+++ b/Common/src/com/googlecode/android_scripting/facade/bluetooth/BluetoothMediaFacade.java
@@ -17,27 +17,25 @@
 package com.googlecode.android_scripting.facade.bluetooth;
 
 import android.app.Service;
-import android.content.Intent;
 import android.content.ComponentName;
 import android.content.Context;
-
+import android.content.Intent;
 import android.media.MediaMetadata;
-import android.media.session.MediaSessionManager;
-import android.media.session.PlaybackState;
 import android.media.browse.MediaBrowser;
 import android.media.session.MediaController;
-
+import android.media.session.MediaSessionManager;
+import android.media.session.PlaybackState;
 import android.os.Bundle;
 import android.os.Handler;
 import android.os.Looper;
 
+import com.googlecode.android_scripting.Log;
 import com.googlecode.android_scripting.facade.EventFacade;
 import com.googlecode.android_scripting.facade.FacadeManager;
 import com.googlecode.android_scripting.facade.bluetooth.media.BluetoothSL4AAudioSrcMBS;
 import com.googlecode.android_scripting.jsonrpc.RpcReceiver;
 import com.googlecode.android_scripting.rpc.Rpc;
 import com.googlecode.android_scripting.rpc.RpcParameter;
-import com.googlecode.android_scripting.Log;
 
 import java.util.ArrayList;
 import java.util.HashMap;
diff --git a/Common/src/com/googlecode/android_scripting/facade/bluetooth/BluetoothPairingHelper.java b/Common/src/com/googlecode/android_scripting/facade/bluetooth/BluetoothPairingHelper.java
index 18def70..597b17a 100644
--- a/Common/src/com/googlecode/android_scripting/facade/bluetooth/BluetoothPairingHelper.java
+++ b/Common/src/com/googlecode/android_scripting/facade/bluetooth/BluetoothPairingHelper.java
@@ -23,106 +23,128 @@
 import android.os.Bundle;
 
 import com.googlecode.android_scripting.Log;
-import com.googlecode.android_scripting.facade.EventFacade;
 import com.googlecode.android_scripting.event.Event;
+import com.googlecode.android_scripting.facade.EventFacade;
 
 public class BluetoothPairingHelper extends BroadcastReceiver {
-  private final EventFacade mEventFacade;
-  private static final int DEFAULT_TIMEOUT_MS = 5000;
-  private boolean mAutoConfirm = true;
+    private final EventFacade mEventFacade;
+    private static final int DEFAULT_TIMEOUT_MS = 5000;
+    private boolean mAutoConfirm = true;
 
-  public BluetoothPairingHelper(EventFacade eventFacade) {
-    super();
-    mEventFacade = eventFacade;
-    Log.d("Pairing helper created.");
-  }
+    public BluetoothPairingHelper(EventFacade eventFacade) {
+        super();
+        mEventFacade = eventFacade;
+        Log.d("Pairing helper created.");
+    }
+
   /**
    *  Confirms bluetooth connection/bonding requests.
    */
-  @Override
-  public void onReceive(Context c, Intent intent) {
-    String action = intent.getAction();
-    Bundle result = new Bundle();
-    Log.d("Bluetooth pairing intent received: " + action);
-    BluetoothDevice mDevice = intent.getParcelableExtra(BluetoothDevice.EXTRA_DEVICE);
-    if(action.equals(BluetoothDevice.ACTION_PAIRING_REQUEST)) {
-      mDevice.setMessageAccessPermission(BluetoothDevice.ACCESS_ALLOWED);
-      mDevice.setPhonebookAccessPermission(BluetoothDevice.ACCESS_ALLOWED);
-      int type = intent.getIntExtra(BluetoothDevice.EXTRA_PAIRING_VARIANT, BluetoothDevice.ERROR);
-      Log.d("Processing Action Paring Request with type " + type);
-      int pin = intent.getIntExtra(BluetoothDevice.EXTRA_PAIRING_KEY,0);
-      String deviceAddress = mDevice.getAddress();
-      result.putInt("Pin", pin);
-      result.putInt("PairingVariant", type);
-      result.putString("DeviceAddress", deviceAddress);
-      mEventFacade.postEvent("BluetoothActionPairingRequest", result.clone());
-      result.clear();
-      if(type == BluetoothDevice.PAIRING_VARIANT_CONSENT) {
-        mDevice.setPairingConfirmation(true);
-        Log.d("Connection auto-confirmed by consent");
-        abortBroadcast(); // Abort the broadcast so Settings app doesn't get it.
-      } else if (type == BluetoothDevice.PAIRING_VARIANT_PASSKEY_CONFIRMATION) {
-        if (mAutoConfirm) {
-           mDevice.setPairingConfirmation(true);
-          Log.d("Connection auto-confirmed");
-        } else {
-          // Wait for confirmation
-          Event userConfirmEvent = null;
-          try {
-            userConfirmEvent = mEventFacade.eventWaitFor(
-              "BluetoothActionPairingRequestUserConfirm",
-              true, DEFAULT_TIMEOUT_MS);
-          } catch (InterruptedException e) {
-            Log.d("Connection interrupted");
-            userConfirmEvent = null;
-          }
-          if (userConfirmEvent == null) {
-            Log.d("Null response received from test server or timeout");
-            mDevice.setPairingConfirmation(false);
-          } else {
-            String userConfirmEventData = (String) userConfirmEvent.getData();
-            if (userConfirmEventData.equalsIgnoreCase("True")) {
-              mDevice.setPairingConfirmation(true);
-              Log.d("Connection confirmed");
-            } else {
-              mDevice.setPairingConfirmation(false);
-              Log.d("Connection rejected");
+    @Override
+    public void onReceive(Context c, Intent intent) {
+        String action = intent.getAction();
+        Bundle result = new Bundle();
+        Log.d("Bluetooth pairing intent received: " + action);
+        BluetoothDevice mDevice = intent.getParcelableExtra(
+                BluetoothDevice.EXTRA_DEVICE);
+        if (action.equals(BluetoothDevice.ACTION_PAIRING_REQUEST)) {
+            mDevice.setMessageAccessPermission(BluetoothDevice.ACCESS_ALLOWED);
+            mDevice.setPhonebookAccessPermission(
+                    BluetoothDevice.ACCESS_ALLOWED);
+            int type = intent.getIntExtra(
+                    BluetoothDevice.EXTRA_PAIRING_VARIANT,
+                        BluetoothDevice.ERROR);
+            Log.d("Processing Action Paring Request with type " + type);
+            int pin = intent.getIntExtra(BluetoothDevice.EXTRA_PAIRING_KEY, 0);
+            String deviceAddress = mDevice.getAddress();
+            result.putInt("Pin", pin);
+            result.putInt("PairingVariant", type);
+            result.putString("DeviceAddress", deviceAddress);
+            mEventFacade.postEvent("BluetoothActionPairingRequest",
+                    result.clone());
+            result.clear();
+            if (type == BluetoothDevice.PAIRING_VARIANT_CONSENT) {
+                mDevice.setPairingConfirmation(true);
+                Log.d("Connection auto-confirmed by consent");
+                // Abort the broadcast so Settings app doesn't get it.
+                abortBroadcast();
+            } else if (type
+                    == BluetoothDevice.PAIRING_VARIANT_PASSKEY_CONFIRMATION) {
+                if (mAutoConfirm) {
+                    mDevice.setPairingConfirmation(true);
+                    Log.d("Connection auto-confirmed");
+                } else {
+                    // Wait for confirmation
+                    Event userConfirmEvent = null;
+                    try {
+                        userConfirmEvent = mEventFacade.eventWaitFor(
+                                "BluetoothActionPairingRequestUserConfirm",
+                                     true, DEFAULT_TIMEOUT_MS);
+                    } catch (InterruptedException e) {
+                        Log.d("Connection interrupted");
+                        userConfirmEvent = null;
+                    }
+                    if (userConfirmEvent == null) {
+                        Log.d("Null response received from test server or timeout");
+                        mDevice.setPairingConfirmation(false);
+                    } else {
+                        String userConfirmEventData =
+                                (String) userConfirmEvent.getData();
+                        if (userConfirmEventData.equalsIgnoreCase("True")) {
+                            mDevice.setPairingConfirmation(true);
+                            Log.d("Connection confirmed");
+                        } else {
+                            mDevice.setPairingConfirmation(false);
+                            Log.d("Connection rejected");
+                        }
+                    }
+                }
+                // Abort the broadcast so Settings app doesn't get it.
+                abortBroadcast();
             }
-          }
+        } else if (action.equals(
+                BluetoothDevice.ACTION_CONNECTION_ACCESS_REQUEST)) {
+            int type = intent.getIntExtra(
+                    BluetoothDevice.EXTRA_ACCESS_REQUEST_TYPE,
+                        BluetoothDevice.ERROR);
+            Log.d("Processing Action Connection Access Request type " + type);
+            if (type == BluetoothDevice.REQUEST_TYPE_MESSAGE_ACCESS
+                    || type == BluetoothDevice.REQUEST_TYPE_PHONEBOOK_ACCESS
+                        || type
+                            == BluetoothDevice.REQUEST_TYPE_PROFILE_CONNECTION) {
+                Intent newIntent =
+                        new Intent(
+                            BluetoothDevice.ACTION_CONNECTION_ACCESS_REPLY);
+                String mReturnPackage =
+                        intent.getStringExtra(
+                        BluetoothDevice.EXTRA_PACKAGE_NAME);
+                String mReturnClass =
+                        intent.getStringExtra(BluetoothDevice.EXTRA_CLASS_NAME);
+                int mRequestType =
+                        intent.getIntExtra(
+                            BluetoothDevice.EXTRA_ACCESS_REQUEST_TYPE,
+                                BluetoothDevice.REQUEST_TYPE_MESSAGE_ACCESS);
+                if (mReturnPackage != null && mReturnClass != null) {
+                    newIntent.setClassName(mReturnPackage, mReturnClass);
+                }
+                newIntent.putExtra(BluetoothDevice.EXTRA_CONNECTION_ACCESS_RESULT,
+                        BluetoothDevice.CONNECTION_ACCESS_YES);
+                newIntent.putExtra(BluetoothDevice.EXTRA_ALWAYS_ALLOWED, true);
+                newIntent.putExtra(BluetoothDevice.EXTRA_DEVICE, mDevice);
+                newIntent.putExtra(BluetoothDevice.EXTRA_ACCESS_REQUEST_TYPE,
+                        mRequestType);
+                Log.d("Sending connection access acceptance intent.");
+                abortBroadcast();
+                c.sendBroadcast(newIntent,
+                        android.Manifest.permission.BLUETOOTH_ADMIN);
+            }
         }
-        abortBroadcast(); // Abort the broadcast so Settings app doesn't get it.
-      }
     }
-    else if(action.equals(BluetoothDevice.ACTION_CONNECTION_ACCESS_REQUEST)) {
-      int type = intent.getIntExtra(BluetoothDevice.EXTRA_ACCESS_REQUEST_TYPE, BluetoothDevice.ERROR);
-      Log.d("Processing Action Connection Access Request type " + type);
-      if(type == BluetoothDevice.REQUEST_TYPE_MESSAGE_ACCESS ||
-         type == BluetoothDevice.REQUEST_TYPE_PHONEBOOK_ACCESS ||
-         type == BluetoothDevice.REQUEST_TYPE_PROFILE_CONNECTION) {
-    	  Intent newIntent = new Intent(BluetoothDevice.ACTION_CONNECTION_ACCESS_REPLY);
-    	  String mReturnPackage = intent.getStringExtra(BluetoothDevice.EXTRA_PACKAGE_NAME);
-          String mReturnClass = intent.getStringExtra(BluetoothDevice.EXTRA_CLASS_NAME);
-          int mRequestType = intent.getIntExtra(BluetoothDevice.EXTRA_ACCESS_REQUEST_TYPE,
-                  BluetoothDevice.REQUEST_TYPE_MESSAGE_ACCESS);
-          if (mReturnPackage != null && mReturnClass != null) {
-              newIntent.setClassName(mReturnPackage, mReturnClass);
-          }
-    	  newIntent.putExtra(BluetoothDevice.EXTRA_CONNECTION_ACCESS_RESULT,
-    			             BluetoothDevice.CONNECTION_ACCESS_YES);
-          newIntent.putExtra(BluetoothDevice.EXTRA_ALWAYS_ALLOWED, true);
-    	  newIntent.putExtra(BluetoothDevice.EXTRA_DEVICE, mDevice);
-    	  newIntent.putExtra(BluetoothDevice.EXTRA_ACCESS_REQUEST_TYPE, mRequestType);
-          Log.d("Sending connection access acceptance intent.");
-          abortBroadcast();
-          c.sendBroadcast(newIntent, android.Manifest.permission.BLUETOOTH_ADMIN);
-      }
-    }
-  }
 
-  /**
-   * Set autoConfirm flag to Value
-   */
-  public synchronized void setAutoConfirm(boolean value) {
-    mAutoConfirm = value;
-  }
+    /**
+     * Set autoConfirm flag to Value.
+     */
+    public synchronized void setAutoConfirm(boolean value) {
+        mAutoConfirm = value;
+    }
 }
diff --git a/Common/src/com/googlecode/android_scripting/facade/bluetooth/BluetoothPanFacade.java b/Common/src/com/googlecode/android_scripting/facade/bluetooth/BluetoothPanFacade.java
index 0a1235a..14357ed 100644
--- a/Common/src/com/googlecode/android_scripting/facade/bluetooth/BluetoothPanFacade.java
+++ b/Common/src/com/googlecode/android_scripting/facade/bluetooth/BluetoothPanFacade.java
@@ -16,8 +16,6 @@
 
 package com.googlecode.android_scripting.facade.bluetooth;
 
-import java.util.List;
-
 import android.app.Service;
 import android.bluetooth.BluetoothAdapter;
 import android.bluetooth.BluetoothDevice;
@@ -31,6 +29,8 @@
 import com.googlecode.android_scripting.rpc.Rpc;
 import com.googlecode.android_scripting.rpc.RpcParameter;
 
+import java.util.List;
+
 public class BluetoothPanFacade extends RpcReceiver {
 
     static final ParcelUuid[] UUIDS = {
@@ -49,7 +49,7 @@
         mService = manager.getService();
         mBluetoothAdapter = BluetoothAdapter.getDefaultAdapter();
         mBluetoothAdapter.getProfileProxy(mService, new PanServiceListener(),
-            BluetoothProfile.PAN);
+                BluetoothProfile.PAN);
     }
 
     class PanServiceListener implements BluetoothProfile.ServiceListener {
diff --git a/Common/src/com/googlecode/android_scripting/facade/bluetooth/BluetoothPbapClientFacade.java b/Common/src/com/googlecode/android_scripting/facade/bluetooth/BluetoothPbapClientFacade.java
index 7a0a769..e1c20cd 100644
--- a/Common/src/com/googlecode/android_scripting/facade/bluetooth/BluetoothPbapClientFacade.java
+++ b/Common/src/com/googlecode/android_scripting/facade/bluetooth/BluetoothPbapClientFacade.java
@@ -16,13 +16,10 @@
 
 package com.googlecode.android_scripting.facade.bluetooth;
 
-import java.util.List;
-import java.util.ArrayList;
-
 import android.app.Service;
-import android.bluetooth.BluetoothPbapClient;
 import android.bluetooth.BluetoothAdapter;
 import android.bluetooth.BluetoothDevice;
+import android.bluetooth.BluetoothPbapClient;
 import android.bluetooth.BluetoothProfile;
 import android.bluetooth.BluetoothUuid;
 import android.os.ParcelUuid;
@@ -33,138 +30,196 @@
 import com.googlecode.android_scripting.rpc.Rpc;
 import com.googlecode.android_scripting.rpc.RpcParameter;
 
+import java.util.ArrayList;
+import java.util.List;
+
+/**
+ * BluetoothPbapClientFacade
+ */
 public class BluetoothPbapClientFacade extends RpcReceiver {
-  static final ParcelUuid[] UUIDS = {
-    BluetoothUuid.PBAP_PSE,
-  };
+    static final ParcelUuid[] UUIDS = {
+        BluetoothUuid.PBAP_PSE,
+    };
 
-  private final Service mService;
-  private final BluetoothAdapter mBluetoothAdapter;
+    private final Service mService;
+    private final BluetoothAdapter mBluetoothAdapter;
 
-  private static boolean sIsPbapClientReady = false;
-  private static BluetoothPbapClient sPbapClientProfile = null;
+    private static boolean sIsPbapClientReady = false;
+    private static BluetoothPbapClient sPbapClientProfile = null;
 
-  public BluetoothPbapClientFacade(FacadeManager manager) {
-    super(manager);
-    mService = manager.getService();
-    mBluetoothAdapter = BluetoothAdapter.getDefaultAdapter();
-    mBluetoothAdapter.getProfileProxy(mService, new PbapClientServiceListener(),
-        BluetoothProfile.PBAP_CLIENT);
-  }
-
-  class PbapClientServiceListener implements BluetoothProfile.ServiceListener {
-    @Override
-    public void onServiceConnected(int profile, BluetoothProfile proxy) {
-      sPbapClientProfile = (BluetoothPbapClient) proxy;
-      sIsPbapClientReady = true;
+    public BluetoothPbapClientFacade(FacadeManager manager) {
+        super(manager);
+        mService = manager.getService();
+        mBluetoothAdapter = BluetoothAdapter.getDefaultAdapter();
+        mBluetoothAdapter.getProfileProxy(mService,
+                new PbapClientServiceListener(), BluetoothProfile.PBAP_CLIENT);
     }
 
-    @Override
-    public void onServiceDisconnected(int profile) {
-      sIsPbapClientReady = false;
+    class PbapClientServiceListener implements
+            BluetoothProfile.ServiceListener {
+        @Override
+        public void onServiceConnected(int profile, BluetoothProfile proxy) {
+            sPbapClientProfile = (BluetoothPbapClient) proxy;
+            sIsPbapClientReady = true;
+        }
+
+        @Override
+        public void onServiceDisconnected(int profile) {
+            sIsPbapClientReady = false;
+        }
     }
-  }
 
-  public Boolean pbapClientConnect(BluetoothDevice device) {
-    if (sPbapClientProfile == null) return false;
-    return sPbapClientProfile.connect(device);
-  }
+    /**
+     * Connect PbapClient profile.
+     * @param device - the BluetoothDevice object to connect to.
+     * @return if the connection was successfull or not.
+     */
+    public Boolean pbapClientConnect(BluetoothDevice device) {
+        if (sPbapClientProfile == null) return false;
+        return sPbapClientProfile.connect(device);
+    }
 
-  public Boolean pbapClientDisconnect(BluetoothDevice device) {
-    if (sPbapClientProfile == null) return false;
-    return sPbapClientProfile.disconnect(device);
-  }
+    /**
+     * Disconnect PbapClient profile.
+     * @param device - the Bluetooth Device object to disconnect from.
+     * @return if the disconnection was successfull or not.
+     */
+    public Boolean pbapClientDisconnect(BluetoothDevice device) {
+        if (sPbapClientProfile == null) return false;
+        return sPbapClientProfile.disconnect(device);
+    }
 
-  @Rpc(description = "Is PbapClient profile ready.")
-  public Boolean bluetoothPbapClientIsReady() {
-    return sIsPbapClientReady;
-  }
+    /**
+     * Is PbapClient profile ready.
+     * @return if PbapClient profile is ready or not.
+     */
+    @Rpc(description = "Is PbapClient profile ready.")
+    public Boolean bluetoothPbapClientIsReady() {
+        return sIsPbapClientReady;
+    }
 
-  @Rpc(description = "Set priority of the profile")
-  public void bluetoothPbapClientSetPriority(
-      @RpcParameter(name = "device", description = "Mac address of a BT device.")
-      String deviceStr,
-      @RpcParameter(name = "priority", description = "Priority that needs to be set.")
-      Integer priority)
-      throws Exception {
-    if (sPbapClientProfile == null) return;
-    BluetoothDevice device =
-        BluetoothFacade.getDevice(mBluetoothAdapter.getBondedDevices(), deviceStr);
-    Log.d("Changing priority of device " + device.getAliasName() + " p: " + priority);
-    sPbapClientProfile.setPriority(device, priority);
-  }
+    /**
+     * Set priority of the profile.
+     * @param deviceStr - name or MAC address of a Bluetooth device.
+     * @param priority - Priority that needs to be set.
+     */
+    @Rpc(description = "Set priority of the profile")
+    public void bluetoothPbapClientSetPriority(@RpcParameter(name = "device",
+                description = "Mac address of a BT device.") String deviceStr,
+            @RpcParameter(name = "priority",
+                description = "Priority that needs to be set.")
+                Integer priority) throws Exception {
+        if (sPbapClientProfile == null) return;
+        BluetoothDevice device =
+                BluetoothFacade.getDevice(mBluetoothAdapter.getBondedDevices(),
+                deviceStr);
+        Log.d("Changing priority of device " + device.getAliasName()
+                + " p: " + priority);
+        sPbapClientProfile.setPriority(device, priority);
+    }
 
-  @Rpc(description = "Get priority of the profile")
-  public Integer bluetoothPbapClientGetPriority(
-      @RpcParameter(name = "device", description = "Mac address of a BT device.")
-      String deviceStr)
-      throws Exception {
-    if (sPbapClientProfile == null) return BluetoothProfile.PRIORITY_UNDEFINED;
-    BluetoothDevice device =
-        BluetoothFacade.getDevice(mBluetoothAdapter.getBondedDevices(), deviceStr);
-    return sPbapClientProfile.getPriority(device);
-  }
+    /**
+     * Get priority of the profile.
+     * @return Priority of the device.
+     */
+    @Rpc(description = "Get priority of the profile")
+    public Integer bluetoothPbapClientGetPriority(
+            @RpcParameter(name = "device",
+                description = "Mac address of a BT device.") String deviceStr)
+                throws Exception {
+        if (sPbapClientProfile == null) {
+            return BluetoothProfile.PRIORITY_UNDEFINED;
+        }
+        BluetoothDevice device =
+                BluetoothFacade.getDevice(mBluetoothAdapter.getBondedDevices(),
+                    deviceStr);
+        return sPbapClientProfile.getPriority(device);
+    }
 
-  @Rpc(description = "Connect to an PBAP Client device.")
-  public Boolean bluetoothPbapClientConnect(
-      @RpcParameter(name = "device", description = "Name or MAC address of a bluetooth device.")
-      String deviceStr)
-      throws Exception {
-    if (sPbapClientProfile == null) return false;
-    try {
-      BluetoothDevice device =
-          BluetoothFacade.getDevice(mBluetoothAdapter.getBondedDevices(), deviceStr);
-      Log.d("Connecting to device " + device.getAliasName());
-      return pbapClientConnect(device);
-    } catch (Exception e) {
-        Log.e("bluetoothPbapClientConnect failed on getDevice " + deviceStr + " with " + e);
+    /**
+     * Connect to an PBAP Client device.
+     * @param deviceStr - Name or MAC address of a bluetooth device.
+     * @return True if the connection was successful; otherwise False.
+     */
+    @Rpc(description = "Connect to an PBAP Client device.")
+    public Boolean bluetoothPbapClientConnect(
+                @RpcParameter(name = "device",
+                    description = "Name or MAC address of a bluetooth device.")
+                    String deviceStr) throws Exception {
+        if (sPbapClientProfile == null) return false;
+        try {
+            BluetoothDevice device =
+                    BluetoothFacade.getDevice(
+                            mBluetoothAdapter.getBondedDevices(), deviceStr);
+            Log.d("Connecting to device " + device.getAliasName());
+            return pbapClientConnect(device);
+        } catch (Exception e) {
+            Log.e("bluetoothPbapClientConnect failed on getDevice "
+                    + deviceStr + " with " + e);
+            return false;
+        }
+    }
+
+    /**
+     * Disconnect an PBAP Client device.
+     * @param deviceStr - Name or MAC address of a bluetooth device.
+     * @return True if the disconnection was successful; otherwise False.
+     */
+    @Rpc(description = "Disconnect an PBAP Client device.")
+    public Boolean bluetoothPbapClientDisconnect(
+            @RpcParameter(name = "device",
+                description = "Name or MAC address of a device.")
+                String deviceStr) {
+        if (sPbapClientProfile == null) return false;
+        Log.d("Connected devices: " + sPbapClientProfile.getConnectedDevices());
+        try {
+            BluetoothDevice device =
+                    BluetoothFacade.getDevice(
+                        sPbapClientProfile.getConnectedDevices(), deviceStr);
+            return pbapClientDisconnect(device);
+        } catch (Exception e) {
+            // Do nothing since it is disconnect and the above call
+            // should force disconnect.
+            Log.e("bluetoothPbapClientConnect getDevice failed " + e);
+        }
         return false;
     }
-  }
 
-  @Rpc(description = "Disconnect an PBAP Client device.")
-  public Boolean bluetoothPbapClientDisconnect(
-      @RpcParameter(name = "device", description = "Name or MAC address of a device.")
-      String deviceStr) {
-    if (sPbapClientProfile == null) return false;
-    Log.d("Connected devices: " + sPbapClientProfile.getConnectedDevices());
-    try {
-        BluetoothDevice device =
-            BluetoothFacade.getDevice(sPbapClientProfile.getConnectedDevices(), deviceStr);
-        return pbapClientDisconnect(device);
-    } catch (Exception e) {
-        // Do nothing since it is disconnect and the above call should force disconnect.
-        Log.e("bluetoothPbapClientConnect getDevice failed " + e);
+    /**
+     * Get all the devices connected through PBAP Client.
+     * @return List of all the devices connected through PBAP client.
+     */
+    @Rpc(description = "Get all the devices connected through PBAP Client.")
+    public List<BluetoothDevice> bluetoothPbapClientGetConnectedDevices() {
+        if (sPbapClientProfile == null) return new ArrayList<BluetoothDevice>();
+        return sPbapClientProfile.getConnectedDevices();
     }
-    return false;
-  }
 
-  @Rpc(description = "Get all the devices connected through PBAP Client.")
-  public List<BluetoothDevice> bluetoothPbapClientGetConnectedDevices() {
-    if (sPbapClientProfile == null) return new ArrayList<BluetoothDevice>();
-    return sPbapClientProfile.getConnectedDevices();
-  }
+     /**
+     * Get the connection status of a device.
+     * @return connection status of the device.
+     */
+    @Rpc(description = "Get the connection status of a device.")
+    public Integer bluetoothPbapClientGetConnectionStatus(
+            @RpcParameter(name = "deviceID",
+            description = "Name or MAC address of a bluetooth device.")
+            String deviceID) {
+        if (sPbapClientProfile == null) {
+            return BluetoothProfile.STATE_DISCONNECTED;
+        }
+        List<BluetoothDevice> deviceList =
+                sPbapClientProfile.getConnectedDevices();
+        BluetoothDevice device;
+        try {
+            device = BluetoothFacade.getDevice(deviceList, deviceID);
+        } catch (Exception e) {
+            Log.e(e);
+            return BluetoothProfile.STATE_DISCONNECTED;
+        }
+        return sPbapClientProfile.getConnectionState(device);
+    }
 
-  @Rpc(description = "Get the connection status of a device.")
-  public Integer bluetoothPbapClientGetConnectionStatus(
-          @RpcParameter(name = "deviceID",
-                        description = "Name or MAC address of a bluetooth device.")
-          String deviceID) {
-      if (sPbapClientProfile == null) {
-          return BluetoothProfile.STATE_DISCONNECTED;
-      }
-      List<BluetoothDevice> deviceList = sPbapClientProfile.getConnectedDevices();
-      BluetoothDevice device;
-      try {
-          device = BluetoothFacade.getDevice(deviceList, deviceID);
-      } catch (Exception e) {
-          Log.e(e);
-          return BluetoothProfile.STATE_DISCONNECTED;
-      }
-      return sPbapClientProfile.getConnectionState(device);
-  }
-
-  @Override
-  public void shutdown() {
-  }
+    @Override
+    public void shutdown() {
+    }
 }