Merge "TelephonyRegistry: Avoid adding duplicate listener" am: 6334152357 am: 3ba0f5da1d am: 4aeb2ecda5 am: 276ee5c666 am: 3565a854ae

Original change: https://android-review.googlesource.com/c/platform/frameworks/base/+/1433021

Change-Id: I1328d6bc805987cc52fb7264a4b96a0300a87492
diff --git a/core/java/android/telephony/TelephonyRegistryManager.java b/core/java/android/telephony/TelephonyRegistryManager.java
index 6d48dc3..24ed29a 100644
--- a/core/java/android/telephony/TelephonyRegistryManager.java
+++ b/core/java/android/telephony/TelephonyRegistryManager.java
@@ -101,6 +101,10 @@
     public void addOnSubscriptionsChangedListener(
             @NonNull SubscriptionManager.OnSubscriptionsChangedListener listener,
             @NonNull Executor executor) {
+        if (mSubscriptionChangedListenerMap.get(listener) != null) {
+            Log.d(TAG, "addOnSubscriptionsChangedListener listener already present");
+            return;
+        }
         IOnSubscriptionsChangedListener callback = new IOnSubscriptionsChangedListener.Stub() {
             @Override
             public void onSubscriptionsChanged () {
@@ -150,6 +154,10 @@
     public void addOnOpportunisticSubscriptionsChangedListener(
             @NonNull SubscriptionManager.OnOpportunisticSubscriptionsChangedListener listener,
             @NonNull Executor executor) {
+        if (mOpportunisticSubscriptionChangedListenerMap.get(listener) != null) {
+            Log.d(TAG, "addOnOpportunisticSubscriptionsChangedListener listener already present");
+            return;
+        }
         /**
          * The callback methods need to be called on the executor thread where
          * this object was created.  If the binder did that for us it'd be nice.
@@ -185,6 +193,9 @@
      */
     public void removeOnOpportunisticSubscriptionsChangedListener(
             @NonNull SubscriptionManager.OnOpportunisticSubscriptionsChangedListener listener) {
+        if (mOpportunisticSubscriptionChangedListenerMap.get(listener) == null) {
+            return;
+        }
         try {
             sRegistry.removeOnSubscriptionsChangedListener(mContext.getOpPackageName(),
                     mOpportunisticSubscriptionChangedListenerMap.get(listener));