ImsService Subscription Notifications

The subId need to be propogated all the way to FeatureConnector.Listener#connectionReady so that classes can listen to changes in subId directly.

Bug: 197991451
Test: atest TeleServiceTests:ImsStateCallbackControllerTest, atest TeleServiceTests:RcsProvisioningMonitorTest, atest TeleServiceTests:RcsFeatureControllerTest

Change-Id: I4d9ae7c71f8b06e2d49fbdcb94d2575cc5b786f9
Merged-In: I4d9ae7c71f8b06e2d49fbdcb94d2575cc5b786f9
diff --git a/src/com/android/phone/ImsStateCallbackController.java b/src/com/android/phone/ImsStateCallbackController.java
index 28fca59..4e2407c 100644
--- a/src/com/android/phone/ImsStateCallbackController.java
+++ b/src/com/android/phone/ImsStateCallbackController.java
@@ -292,7 +292,7 @@
         }
 
         @Override
-        public void connectionReady(ImsManager manager) {
+        public void connectionReady(ImsManager manager, int subId) {
             logd(mLogPrefix + "connectionReady");
 
             mState = STATE_READY;
@@ -434,7 +434,7 @@
         }
 
         @Override
-        public void connectionReady(RcsFeatureManager manager) {
+        public void connectionReady(RcsFeatureManager manager, int subId) {
             logd(mLogPrefix + "connectionReady");
 
             mState = STATE_READY;
diff --git a/src/com/android/phone/RcsProvisioningMonitor.java b/src/com/android/phone/RcsProvisioningMonitor.java
index 6d2bd6f..baf0ac5 100644
--- a/src/com/android/phone/RcsProvisioningMonitor.java
+++ b/src/com/android/phone/RcsProvisioningMonitor.java
@@ -440,7 +440,7 @@
         }
 
         @Override
-        public void connectionReady(RcsFeatureManager manager) {
+        public void connectionReady(RcsFeatureManager manager, int subId) {
             mRcsFeatureManager = manager;
             mRcsProvisioningInfos.forEach(v -> v.onRcsStatusChanged(manager.getConfig()));
         }
diff --git a/src/com/android/services/telephony/rcs/RcsFeatureController.java b/src/com/android/services/telephony/rcs/RcsFeatureController.java
index cc1a2cc..0e1cb4b 100644
--- a/src/com/android/services/telephony/rcs/RcsFeatureController.java
+++ b/src/com/android/services/telephony/rcs/RcsFeatureController.java
@@ -128,7 +128,7 @@
     private FeatureConnector.Listener<RcsFeatureManager> mFeatureConnectorListener =
             new FeatureConnector.Listener<RcsFeatureManager>() {
                 @Override
-                public void connectionReady(RcsFeatureManager manager)
+                public void connectionReady(RcsFeatureManager manager, int subId)
                         throws com.android.ims.ImsException {
                     if (manager == null) {
                         logw("connectionReady returned null RcsFeatureManager");
diff --git a/tests/src/com/android/phone/ImsStateCallbackControllerTest.java b/tests/src/com/android/phone/ImsStateCallbackControllerTest.java
index c493f6b..e4cdc6e 100644
--- a/tests/src/com/android/phone/ImsStateCallbackControllerTest.java
+++ b/tests/src/com/android/phone/ImsStateCallbackControllerTest.java
@@ -243,7 +243,7 @@
         verify(mCallback0, times(1)).onUnavailable(REASON_IMS_SERVICE_DISCONNECTED);
         verify(mCallback0, times(0)).onAvailable();
 
-        mMmTelConnectorListenerSlot0.getValue().connectionReady(null);
+        mMmTelConnectorListenerSlot0.getValue().connectionReady(null, SLOT_0_SUB_ID);
         processAllMessages();
         verify(mCallback0, atLeastOnce()).onAvailable();
 
@@ -344,7 +344,7 @@
         processAllMessages();
         verify(mCallback0, times(1)).onUnavailable(REASON_IMS_SERVICE_NOT_READY);
 
-        mRcsConnectorListenerSlot0.getValue().connectionReady(null);
+        mRcsConnectorListenerSlot0.getValue().connectionReady(null, SLOT_0_SUB_ID);
         processAllMessages();
         verify(mCallback0, times(0)).onAvailable();
 
@@ -368,7 +368,7 @@
         processAllMessages();
         verify(mCallback0, times(1)).onAvailable();
 
-        mRcsConnectorListenerSlot0.getValue().connectionReady(null);
+        mRcsConnectorListenerSlot0.getValue().connectionReady(null, SLOT_0_SUB_ID);
         processAllMessages();
         verify(mCallback0, times(2)).onAvailable();
 
@@ -398,7 +398,7 @@
         processAllMessages();
         verify(mCallback0, times(0)).onUnavailable(REASON_IMS_SERVICE_NOT_READY);
 
-        mRcsConnectorListenerSlot0.getValue().connectionReady(null);
+        mRcsConnectorListenerSlot0.getValue().connectionReady(null, SLOT_0_SUB_ID);
         processAllMessages();
         verify(mCallback0, times(0)).onAvailable();
 
@@ -693,7 +693,7 @@
         verify(mCallback3, times(2)).onUnavailable(anyInt());
 
         // connectionReady
-        mMmTelConnectorListenerSlot0.getValue().connectionReady(null);
+        mMmTelConnectorListenerSlot0.getValue().connectionReady(null, SLOT_0_SUB_ID);
         processAllMessages();
         verify(mCallback0, times(1)).onAvailable();
         verify(mCallback1, times(0)).onAvailable();
@@ -704,7 +704,7 @@
         verify(mCallback2, times(2)).onUnavailable(anyInt());
         verify(mCallback3, times(2)).onUnavailable(anyInt());
 
-        mRcsConnectorListenerSlot0.getValue().connectionReady(null);
+        mRcsConnectorListenerSlot0.getValue().connectionReady(null, SLOT_0_SUB_ID);
         processAllMessages();
         verify(mCallback0, times(1)).onAvailable();
         verify(mCallback1, times(0)).onAvailable();
@@ -726,7 +726,7 @@
         verify(mCallback2, times(2)).onUnavailable(anyInt());
         verify(mCallback3, times(2)).onUnavailable(anyInt());
 
-        mMmTelConnectorListenerSlot1.getValue().connectionReady(null);
+        mMmTelConnectorListenerSlot1.getValue().connectionReady(null, SLOT_0_SUB_ID);
         processAllMessages();
         verify(mCallback0, times(1)).onAvailable();
         verify(mCallback1, times(1)).onAvailable();
@@ -737,7 +737,7 @@
         verify(mCallback2, times(2)).onUnavailable(anyInt());
         verify(mCallback3, times(2)).onUnavailable(anyInt());
 
-        mRcsConnectorListenerSlot1.getValue().connectionReady(null);
+        mRcsConnectorListenerSlot1.getValue().connectionReady(null, SLOT_0_SUB_ID);
         processAllMessages();
         verify(mCallback0, times(1)).onAvailable();
         verify(mCallback1, times(1)).onAvailable();
diff --git a/tests/src/com/android/phone/RcsProvisioningMonitorTest.java b/tests/src/com/android/phone/RcsProvisioningMonitorTest.java
index 8e5e073..aad0885 100644
--- a/tests/src/com/android/phone/RcsProvisioningMonitorTest.java
+++ b/tests/src/com/android/phone/RcsProvisioningMonitorTest.java
@@ -147,6 +147,7 @@
     private MockContentResolver mContentResolver = new MockContentResolver();
     private SimInfoContentProvider mProvider;
     private BroadcastReceiver mReceiver;
+    private static final int TEST_SUB_ID = 1;
     @Mock
     private Cursor mCursor;
     @Mock
@@ -784,7 +785,7 @@
         } catch (Exception e) {
             logd("Unable to create looper from handler.");
         }
-        mConnectorListener.getValue().connectionReady(mFeatureManager);
+        mConnectorListener.getValue().connectionReady(mFeatureManager, TEST_SUB_ID);
 
         verify(mFeatureConnector, atLeastOnce()).connect();
     }
diff --git a/tests/src/com/android/services/telephony/rcs/RcsFeatureControllerTest.java b/tests/src/com/android/services/telephony/rcs/RcsFeatureControllerTest.java
index da614fc..2a30e1a 100644
--- a/tests/src/com/android/services/telephony/rcs/RcsFeatureControllerTest.java
+++ b/tests/src/com/android/services/telephony/rcs/RcsFeatureControllerTest.java
@@ -96,7 +96,7 @@
         controller.addFeature(mMockFeature, RcsFeatureController.Feature.class);
         verify(mMockFeature).onRcsDisconnected();
         // Connect the RcsFeatureManager
-        mConnectorListener.getValue().connectionReady(mFeatureManager);
+        mConnectorListener.getValue().connectionReady(mFeatureManager, TEST_SUB_ID);
 
         verify(mFeatureManager).updateCapabilities(TEST_SUB_ID);
         verify(mFeatureManager).registerImsRegistrationCallback(any());
@@ -114,7 +114,7 @@
     public void testFeatureManagerConnectedAddRemoveFeature() throws Exception {
         RcsFeatureController controller = createFeatureController();
         // Connect the RcsFeatureManager
-        mConnectorListener.getValue().connectionReady(mFeatureManager);
+        mConnectorListener.getValue().connectionReady(mFeatureManager, TEST_SUB_ID);
         controller.addFeature(mMockFeature, RcsFeatureController.Feature.class);
 
         verify(mMockFeature).onRcsConnected(mFeatureManager);
@@ -131,7 +131,7 @@
         IImsRegistrationCallback regCb = mock(IImsRegistrationCallback.class);
         IImsCapabilityCallback capCb = mock(IImsCapabilityCallback.class);
         // Connect the RcsFeatureManager
-        mConnectorListener.getValue().connectionReady(mFeatureManager);
+        mConnectorListener.getValue().connectionReady(mFeatureManager, TEST_SUB_ID);
 
         try {
             controller.registerImsRegistrationCallback(TEST_SUB_ID, regCb);
@@ -165,7 +165,7 @@
     public void testFeatureManagerConnectedHelper() throws Exception {
         RcsFeatureController controller = createFeatureController();
         // Connect the RcsFeatureManager
-        mConnectorListener.getValue().connectionReady(mFeatureManager);
+        mConnectorListener.getValue().connectionReady(mFeatureManager, TEST_SUB_ID);
         ArgumentCaptor<IImsRegistrationCallback> captor =
                 ArgumentCaptor.forClass(IImsRegistrationCallback.class);
         verify(mFeatureManager).registerImsRegistrationCallback(captor.capture());
@@ -257,7 +257,7 @@
     public void testCarrierConfigChanged() throws Exception {
         RcsFeatureController controller = createFeatureController();
         // Connect the RcsFeatureManager
-        mConnectorListener.getValue().connectionReady(mFeatureManager);
+        mConnectorListener.getValue().connectionReady(mFeatureManager, TEST_SUB_ID);
         verify(mFeatureManager).updateCapabilities(TEST_SUB_ID);
         controller.addFeature(mMockFeature, RcsFeatureController.Feature.class);
 
@@ -272,7 +272,7 @@
     public void testChangeSubId() throws Exception {
         RcsFeatureController controller = createFeatureController();
         // Connect the RcsFeatureManager
-        mConnectorListener.getValue().connectionReady(mFeatureManager);
+        mConnectorListener.getValue().connectionReady(mFeatureManager, TEST_SUB_ID);
         verify(mFeatureManager).updateCapabilities(TEST_SUB_ID);
         controller.addFeature(mMockFeature, RcsFeatureController.Feature.class);
 
@@ -286,7 +286,7 @@
     public void testDestroy() throws Exception {
         RcsFeatureController controller = createFeatureController();
         // Connect the RcsFeatureManager
-        mConnectorListener.getValue().connectionReady(mFeatureManager);
+        mConnectorListener.getValue().connectionReady(mFeatureManager, TEST_SUB_ID);
         controller.addFeature(mMockFeature, RcsFeatureController.Feature.class);
         controller.destroy();