Add ImsManager#removeRegistrationListener

Adds a removeRegistrationListener API to
complement the existing add method.

Bug: 73951668
Test: Manual
Merged-In: Ieee1d53763d3544ad8e014f900559559c043248c
Change-Id: I3c31236ec51480c819936a7ba1fac882d5a42200
diff --git a/src/java/com/android/ims/ImsManager.java b/src/java/com/android/ims/ImsManager.java
index 521b46a..3a971cf 100644
--- a/src/java/com/android/ims/ImsManager.java
+++ b/src/java/com/android/ims/ImsManager.java
@@ -1556,7 +1556,6 @@
             throw new NullPointerException("registration callback can't be null");
         }
 
-        checkAndThrowExceptionIfServiceUnavailable();
         try {
             mMmTelFeatureConnection.addRegistrationCallback(callback);
             log("Registration Callback registered.");
@@ -1568,6 +1567,27 @@
     }
 
     /**
+     * Removes a previously added registration callback that was added via
+     * {@link #addRegistrationCallback(ImsRegistrationImplBase.Callback)} .
+     * @param callback A {@link ImsRegistrationImplBase.Callback} that was previously added.
+     * @throws ImsException when the ImsService connection is not available.
+     */
+    public void removeRegistrationListener(ImsRegistrationImplBase.Callback callback)
+        throws ImsException {
+        if (callback == null) {
+            throw new NullPointerException("registration callback can't be null");
+        }
+
+        try {
+            mMmTelFeatureConnection.removeRegistrationCallback(callback);
+            log("Registration callback removed.");
+        } catch (RemoteException e) {
+            throw new ImsException("removeRegistrationCallback(IRIB)", e,
+                    ImsReasonInfo.CODE_LOCAL_IMS_SERVICE_DOWN);
+        }
+    }
+
+    /**
      * Adds a callback that gets called when MMTel capability status has changed, for example when
      * Voice over IMS or VT over IMS is not available currently.
      * @param callback A {@link ImsFeature.CapabilityCallback} that will notify the caller when
diff --git a/src/java/com/android/ims/MmTelFeatureConnection.java b/src/java/com/android/ims/MmTelFeatureConnection.java
index 2d11ae6..6028f6f 100644
--- a/src/java/com/android/ims/MmTelFeatureConnection.java
+++ b/src/java/com/android/ims/MmTelFeatureConnection.java
@@ -196,7 +196,7 @@
             IImsRegistration imsRegistration = getRegistration();
             if (imsRegistration != null) {
                 try {
-                    getRegistration().addRegistrationCallback(mRegistrationCallbackAdapter);
+                    getRegistration().removeRegistrationCallback(mRegistrationCallbackAdapter);
                 } catch (RemoteException e) {
                     Log.w(TAG, "removeConnection: couldn't remove registration callback");
                 }