From 2838d3908eecbc55c57076c142ac1c204f2761f9 Mon Sep 17 00:00:00 2001 From: Chinmay Dhodapkar Date: Wed, 8 Jun 2022 11:56:11 -0700 Subject: Fix shouldProcessCall in ImsManager There can be call attempts made before the ims service is initialized. In this case, shouldProcessCall should throw an exception, else it might result in subsequent call failure in IMS. Bug: 232514463 Test: atest ImsManagerTest Change-Id: I81a25250a65bf6af0910c57f093ebbc71bad1dba (cherry picked from commit 7b6fb80d5ec80d4ef996453f16403727d17ff279) --- src/java/com/android/ims/ImsManager.java | 3 ++- tests/src/com/android/ims/ImsManagerTest.java | 16 ++++++++++++++++ 2 files changed, 18 insertions(+), 1 deletion(-) diff --git a/src/java/com/android/ims/ImsManager.java b/src/java/com/android/ims/ImsManager.java index cf95a20b..c41426d0 100644 --- a/src/java/com/android/ims/ImsManager.java +++ b/src/java/com/android/ims/ImsManager.java @@ -3035,7 +3035,8 @@ public class ImsManager implements FeatureUpdates { public @MmTelFeature.ProcessCallResult int shouldProcessCall(boolean isEmergency, String[] numbers) throws ImsException { try { - return mMmTelConnectionRef.get().shouldProcessCall(isEmergency, numbers); + MmTelFeatureConnection c = getOrThrowExceptionIfServiceUnavailable(); + return c.shouldProcessCall(isEmergency, numbers); } catch (RemoteException e) { throw new ImsException("shouldProcessCall()", e, ImsReasonInfo.CODE_LOCAL_IMS_SERVICE_DOWN); diff --git a/tests/src/com/android/ims/ImsManagerTest.java b/tests/src/com/android/ims/ImsManagerTest.java index 42f110dc..0653908d 100644 --- a/tests/src/com/android/ims/ImsManagerTest.java +++ b/tests/src/com/android/ims/ImsManagerTest.java @@ -22,6 +22,7 @@ import static android.telephony.ims.stub.ImsRegistrationImplBase.REGISTRATION_TE import static android.telephony.ims.stub.ImsRegistrationImplBase.REGISTRATION_TECH_LTE; import static org.junit.Assert.assertEquals; +import static org.junit.Assert.assertThrows; import static org.mockito.ArgumentMatchers.anyString; import static org.mockito.ArgumentMatchers.eq; import static org.mockito.Mockito.anyInt; @@ -968,6 +969,21 @@ public class ImsManagerTest extends ImsTestBase { anyInt()); } + @Test @SmallTest + public void testShouldProcessCall_ThrowsExceptionIfServiceIsStillInitializing() { + ImsManager imsManager = getImsManagerAndInitProvisionedValues(); + doReturn(-1).when(mMmTelFeatureConnection).getSubId(); + assertThrows(ImsException.class, () -> imsManager.shouldProcessCall(true, new String[1])); + } + + @Test @SmallTest + public void testShouldProcessCall_DoesNotThrowExceptionWhenServiceInitialized() + throws Exception { + ImsManager imsManager = getImsManagerAndInitProvisionedValues(); + int ret = imsManager.shouldProcessCall(true, new String[1]); + assertEquals(MmTelFeature.PROCESS_CALL_IMS, ret); + } + /** * Tests the operation of setWfcRoamingSetting and ensures that the user setting for WFC roaming * and the ImsConfig setting are both called properly. -- cgit v1.2.3