Loading src/java/com/android/ims/ImsManager.java +10 −0 Original line number Diff line number Diff line Loading @@ -75,6 +75,7 @@ import android.util.SparseArray; import com.android.ims.internal.IImsCallSession; import com.android.ims.internal.IImsServiceFeatureCallback; import com.android.internal.annotations.VisibleForTesting; import com.android.internal.telephony.flags.Flags; import com.android.internal.telephony.ITelephony; import com.android.telephony.Rlog; Loading Loading @@ -2450,6 +2451,15 @@ public class ImsManager implements FeatureUpdates { call.attachSession(new ImsCallSession(session)); call.setListener(listener); if (Flags.ignoreAlreadyTerminatedIncomingCallBeforeRegisteringListener()){ // If the call session already terminated before registering callback then the // framework should ignore incoming call. if (!ImsCall.isSessionAlive(call.getSession())) { loge("takeCall : ImsCallSession is not alive"); throw new ImsException("takeCall() : ImsCallSession is not alive", ImsReasonInfo.CODE_UNSPECIFIED); } } return call; } catch (Throwable t) { loge("takeCall caught: ", t); Loading tests/Android.bp +2 −0 Original line number Diff line number Diff line Loading @@ -37,6 +37,8 @@ android_test { "androidx.test.ext.junit", "androidx.test.rules", "mockito-target-minus-junit4", "telephony_flags_core_java_lib", "flag-junit", ], test_suites: [ Loading tests/src/com/android/ims/ImsManagerTest.java +32 −2 Original line number Diff line number Diff line Loading @@ -23,11 +23,15 @@ import static android.telephony.ims.stub.ImsRegistrationImplBase.REGISTRATION_TE import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertThrows; import static org.junit.Assert.fail; import static org.mockito.ArgumentMatchers.any; import static org.mockito.ArgumentMatchers.anyString; import static org.mockito.ArgumentMatchers.eq; import static org.mockito.Mockito.anyInt; import static org.mockito.Mockito.clearInvocations; import static org.mockito.Mockito.doReturn; import static org.mockito.Mockito.doThrow; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.never; import static org.mockito.Mockito.times; import static org.mockito.Mockito.verify; Loading @@ -38,11 +42,11 @@ import android.content.res.Resources; import android.os.IBinder; import android.os.PersistableBundle; import android.os.RemoteException; import android.platform.test.flag.junit.SetFlagsRule; import android.telephony.BinderCacheManager; import android.telephony.CarrierConfigManager; import android.telephony.SubscriptionManager; import android.telephony.ims.ImsMmTelManager; import android.telephony.ims.ImsRcsManager; import android.telephony.ims.ProvisioningManager; import android.telephony.ims.aidl.IImsConfig; import android.telephony.ims.aidl.IImsRegistration; Loading @@ -56,20 +60,25 @@ import androidx.test.InstrumentationRegistry; import androidx.test.ext.junit.runners.AndroidJUnit4; import androidx.test.filters.SmallTest; import com.android.ims.internal.IImsCallSession; import com.android.internal.os.SomeArgs; import com.android.internal.telephony.ITelephony; import com.android.internal.telephony.flags.Flags; import org.junit.After; import org.junit.Before; import org.junit.Rule; import org.junit.Test; import org.junit.runner.RunWith; import org.mockito.Mock; import java.util.Hashtable; import java.util.concurrent.Executor; @RunWith(AndroidJUnit4.class) public class ImsManagerTest extends ImsTestBase { @Rule public final SetFlagsRule mSetFlagsRule = new SetFlagsRule(); private static final boolean ENHANCED_4G_MODE_DEFAULT_VAL = true; private static final boolean ENHANCED_4G_MODE_EDITABLE = true; private static final boolean WFC_IMS_ENABLE_DEFAULT_VAL = false; Loading Loading @@ -131,6 +140,8 @@ public class ImsManagerTest extends ImsTestBase { InstrumentationRegistry.getInstrumentation().getUiAutomation() .adoptShellPermissionIdentity( "android.permission.READ_PRIVILEGED_PHONE_STATE"); mSetFlagsRule.initAllFlagsToReleaseConfigDefault(); } @After Loading Loading @@ -1020,6 +1031,25 @@ public class ImsManagerTest extends ImsTestBase { verify(mMmTelFeatureConnection).onMemoryAvailable(eq(token)); } @Test @SmallTest public void testTakeCall_incomingSessionTerminatedBeforeRegisterListener() throws RemoteException { mSetFlagsRule.enableFlags( Flags.FLAG_IGNORE_ALREADY_TERMINATED_INCOMING_CALL_BEFORE_REGISTERING_LISTENER); IImsCallSession mockSession = mock(IImsCallSession.class); doThrow(RemoteException.class).when(mockSession).setListener(any()); ImsCall.Listener mockListener = mock(ImsCall.Listener.class); ImsManager imsManager = getImsManagerAndInitProvisionedValues(); try { imsManager.takeCall(mockSession, mockListener); fail("expect ImsException"); } catch (ImsException e) { // expected result } } private ImsManager getImsManagerAndInitProvisionedValues() { when(mImsConfigImplBaseMock.getConfigInt(anyInt())) .thenAnswer(invocation -> { Loading Loading
src/java/com/android/ims/ImsManager.java +10 −0 Original line number Diff line number Diff line Loading @@ -75,6 +75,7 @@ import android.util.SparseArray; import com.android.ims.internal.IImsCallSession; import com.android.ims.internal.IImsServiceFeatureCallback; import com.android.internal.annotations.VisibleForTesting; import com.android.internal.telephony.flags.Flags; import com.android.internal.telephony.ITelephony; import com.android.telephony.Rlog; Loading Loading @@ -2450,6 +2451,15 @@ public class ImsManager implements FeatureUpdates { call.attachSession(new ImsCallSession(session)); call.setListener(listener); if (Flags.ignoreAlreadyTerminatedIncomingCallBeforeRegisteringListener()){ // If the call session already terminated before registering callback then the // framework should ignore incoming call. if (!ImsCall.isSessionAlive(call.getSession())) { loge("takeCall : ImsCallSession is not alive"); throw new ImsException("takeCall() : ImsCallSession is not alive", ImsReasonInfo.CODE_UNSPECIFIED); } } return call; } catch (Throwable t) { loge("takeCall caught: ", t); Loading
tests/Android.bp +2 −0 Original line number Diff line number Diff line Loading @@ -37,6 +37,8 @@ android_test { "androidx.test.ext.junit", "androidx.test.rules", "mockito-target-minus-junit4", "telephony_flags_core_java_lib", "flag-junit", ], test_suites: [ Loading
tests/src/com/android/ims/ImsManagerTest.java +32 −2 Original line number Diff line number Diff line Loading @@ -23,11 +23,15 @@ import static android.telephony.ims.stub.ImsRegistrationImplBase.REGISTRATION_TE import static org.junit.Assert.assertEquals; import static org.junit.Assert.assertThrows; import static org.junit.Assert.fail; import static org.mockito.ArgumentMatchers.any; import static org.mockito.ArgumentMatchers.anyString; import static org.mockito.ArgumentMatchers.eq; import static org.mockito.Mockito.anyInt; import static org.mockito.Mockito.clearInvocations; import static org.mockito.Mockito.doReturn; import static org.mockito.Mockito.doThrow; import static org.mockito.Mockito.mock; import static org.mockito.Mockito.never; import static org.mockito.Mockito.times; import static org.mockito.Mockito.verify; Loading @@ -38,11 +42,11 @@ import android.content.res.Resources; import android.os.IBinder; import android.os.PersistableBundle; import android.os.RemoteException; import android.platform.test.flag.junit.SetFlagsRule; import android.telephony.BinderCacheManager; import android.telephony.CarrierConfigManager; import android.telephony.SubscriptionManager; import android.telephony.ims.ImsMmTelManager; import android.telephony.ims.ImsRcsManager; import android.telephony.ims.ProvisioningManager; import android.telephony.ims.aidl.IImsConfig; import android.telephony.ims.aidl.IImsRegistration; Loading @@ -56,20 +60,25 @@ import androidx.test.InstrumentationRegistry; import androidx.test.ext.junit.runners.AndroidJUnit4; import androidx.test.filters.SmallTest; import com.android.ims.internal.IImsCallSession; import com.android.internal.os.SomeArgs; import com.android.internal.telephony.ITelephony; import com.android.internal.telephony.flags.Flags; import org.junit.After; import org.junit.Before; import org.junit.Rule; import org.junit.Test; import org.junit.runner.RunWith; import org.mockito.Mock; import java.util.Hashtable; import java.util.concurrent.Executor; @RunWith(AndroidJUnit4.class) public class ImsManagerTest extends ImsTestBase { @Rule public final SetFlagsRule mSetFlagsRule = new SetFlagsRule(); private static final boolean ENHANCED_4G_MODE_DEFAULT_VAL = true; private static final boolean ENHANCED_4G_MODE_EDITABLE = true; private static final boolean WFC_IMS_ENABLE_DEFAULT_VAL = false; Loading Loading @@ -131,6 +140,8 @@ public class ImsManagerTest extends ImsTestBase { InstrumentationRegistry.getInstrumentation().getUiAutomation() .adoptShellPermissionIdentity( "android.permission.READ_PRIVILEGED_PHONE_STATE"); mSetFlagsRule.initAllFlagsToReleaseConfigDefault(); } @After Loading Loading @@ -1020,6 +1031,25 @@ public class ImsManagerTest extends ImsTestBase { verify(mMmTelFeatureConnection).onMemoryAvailable(eq(token)); } @Test @SmallTest public void testTakeCall_incomingSessionTerminatedBeforeRegisterListener() throws RemoteException { mSetFlagsRule.enableFlags( Flags.FLAG_IGNORE_ALREADY_TERMINATED_INCOMING_CALL_BEFORE_REGISTERING_LISTENER); IImsCallSession mockSession = mock(IImsCallSession.class); doThrow(RemoteException.class).when(mockSession).setListener(any()); ImsCall.Listener mockListener = mock(ImsCall.Listener.class); ImsManager imsManager = getImsManagerAndInitProvisionedValues(); try { imsManager.takeCall(mockSession, mockListener); fail("expect ImsException"); } catch (ImsException e) { // expected result } } private ImsManager getImsManagerAndInitProvisionedValues() { when(mImsConfigImplBaseMock.getConfigInt(anyInt())) .thenAnswer(invocation -> { Loading