diff options
author | Android Build Coastguard Worker <android-build-coastguard-worker@google.com> | 2023-10-27 03:33:51 +0000 |
---|---|---|
committer | Android Build Coastguard Worker <android-build-coastguard-worker@google.com> | 2023-10-27 03:33:51 +0000 |
commit | 42a34025c645fe1b562f204d1a87410275fef0ff (patch) | |
tree | dae94a458604c6471e0ad02c9fcc10c84f5396b8 | |
parent | cb7f5927727c54ae491eff2685988f053dbc21d1 (diff) | |
parent | cf934c17f21e60b15f6baa20da589aba8c54bda6 (diff) | |
download | ims-android14-qpr2-s1-release.tar.gz |
Snap for 11012804 from cf934c17f21e60b15f6baa20da589aba8c54bda6 to 24Q1-releaseandroid-14.0.0_r37android-14.0.0_r36android-14.0.0_r35android-14.0.0_r34android-14.0.0_r33android-14.0.0_r32android-14.0.0_r31android-14.0.0_r30android-14.0.0_r29android14-qpr2-s5-releaseandroid14-qpr2-s4-releaseandroid14-qpr2-s3-releaseandroid14-qpr2-s2-releaseandroid14-qpr2-s1-releaseandroid14-qpr2-release
Change-Id: I94e7f93f3f53502de37982e6f90fddfb5dec2a5f
-rw-r--r-- | src/java/com/android/ims/ImsManager.java | 10 | ||||
-rw-r--r-- | tests/Android.bp | 2 | ||||
-rw-r--r-- | tests/src/com/android/ims/ImsManagerTest.java | 34 |
3 files changed, 44 insertions, 2 deletions
diff --git a/src/java/com/android/ims/ImsManager.java b/src/java/com/android/ims/ImsManager.java index b5a1168b..c9252f24 100644 --- a/src/java/com/android/ims/ImsManager.java +++ b/src/java/com/android/ims/ImsManager.java @@ -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; @@ -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); diff --git a/tests/Android.bp b/tests/Android.bp index 7ae66b56..a628946a 100644 --- a/tests/Android.bp +++ b/tests/Android.bp @@ -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: [ diff --git a/tests/src/com/android/ims/ImsManagerTest.java b/tests/src/com/android/ims/ImsManagerTest.java index ad5051be..9e206b78 100644 --- a/tests/src/com/android/ims/ImsManagerTest.java +++ b/tests/src/com/android/ims/ImsManagerTest.java @@ -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; @@ -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; @@ -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; @@ -131,6 +140,8 @@ public class ImsManagerTest extends ImsTestBase { InstrumentationRegistry.getInstrumentation().getUiAutomation() .adoptShellPermissionIdentity( "android.permission.READ_PRIVILEGED_PHONE_STATE"); + + mSetFlagsRule.initAllFlagsToReleaseConfigDefault(); } @After @@ -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 -> { |