Snap for 5590969 from 14eff71976bb02d7bce2bfceea17c5c9d7ffb95c to sdk-release

Change-Id: If8bfb643ab06a5500b401cc8ebd5430943f1eb16
diff --git a/Common/src/com/googlecode/android_scripting/facade/EventFacade.java b/Common/src/com/googlecode/android_scripting/facade/EventFacade.java
index 0e666f5..7a4a77b 100644
--- a/Common/src/com/googlecode/android_scripting/facade/EventFacade.java
+++ b/Common/src/com/googlecode/android_scripting/facade/EventFacade.java
@@ -196,7 +196,7 @@
                                 Log.v(String.format("Removing observer (%s) got event  (%s)",
                                         this,
                                         event));
-                                removeEventObserver(this);
+                                removeNamedEventObserver(eventName, this);
                             }
                             if (removeEvent)
                                 mEventQueue.remove(event);
@@ -411,10 +411,19 @@
      * @param observer the observer to remove
      */
     public void removeEventObserver(EventObserver observer) {
-        mNamedEventObservers.removeAll(observer);
         mGlobalEventObservers.remove(observer);
     }
 
+    /**
+     * Removes a named observer from the event listening queue.
+     * @param eventName the name of the event being listened to.
+     * @param observer the observer to remove
+     */
+    public void removeNamedEventObserver(String eventName, EventObserver observer) {
+        mNamedEventObservers.removeAll(eventName);
+        removeEventObserver(observer);
+    }
+
     public class BroadcastListener extends android.content.BroadcastReceiver {
         private EventFacade mParent;
         private boolean mEnQueue;
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 5d87607..f1968d3 100644
--- a/Common/src/com/googlecode/android_scripting/facade/bluetooth/BluetoothA2dpFacade.java
+++ b/Common/src/com/googlecode/android_scripting/facade/bluetooth/BluetoothA2dpFacade.java
@@ -51,7 +51,7 @@
     private final BroadcastReceiver mBluetoothA2dpReceiver;
     private final BluetoothAdapter mBluetoothAdapter;
 
-    private static boolean sIsA2dpReady = false;
+    private static volatile boolean sIsA2dpReady = false;
     private static BluetoothA2dp sA2dpProfile = null;
 
     public BluetoothA2dpFacade(FacadeManager manager) {
diff --git a/Common/src/com/googlecode/android_scripting/facade/telephony/SubscriptionManagerFacade.java b/Common/src/com/googlecode/android_scripting/facade/telephony/SubscriptionManagerFacade.java
index 7192b15..90ae1f5 100644
--- a/Common/src/com/googlecode/android_scripting/facade/telephony/SubscriptionManagerFacade.java
+++ b/Common/src/com/googlecode/android_scripting/facade/telephony/SubscriptionManagerFacade.java
@@ -102,6 +102,13 @@
         return mSubscriptionManager.getActiveSubscriptionInfo(subId);
     }
 
+    @Rpc(description = "Return if AlwaysAllowMMSData is set correctly")
+    public boolean subscriptionSetAlwaysAllowMmsData(
+            @RpcParameter(name = "subId") Integer subId,
+            @RpcParameter(name = "alwaysAllow") Boolean alwaysAllow) {
+        return mSubscriptionManager.setAlwaysAllowMmsData(subId, alwaysAllow);
+    }
+
     @Rpc(description = "Set Data Roaming Enabled or Disabled for a particular Subscription ID")
     public Integer subscriptionSetDataRoaming(
             @RpcParameter(name = "roaming") Integer roaming,