diff options
author | Xin Li <delphij@google.com> | 2024-03-06 09:29:59 -0800 |
---|---|---|
committer | Xin Li <delphij@google.com> | 2024-03-06 09:29:59 -0800 |
commit | d18ed61a1d7c4e50da55f0d4aa6b792bd7df6544 (patch) | |
tree | 0251fa9f30fc496c7e54494e6be2424676babff4 | |
parent | 3b982e1669870485a1b7c799a4324cba7c83e325 (diff) | |
parent | 266aed1e1f1a58fa9387b769da70674d82ef40ce (diff) | |
download | ims-d18ed61a1d7c4e50da55f0d4aa6b792bd7df6544.tar.gz |
Merge Android 14 QPR2 to AOSP main
Bug: 319669529
Merged-In: Idd1de858977ebc2176d22c48c279d87a37002686
Change-Id: I54fbef19d22c4faf3c2bff4ff18e60acebf40d08
-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 acfa5a2a..5126c865 100644 --- a/tests/Android.bp +++ b/tests/Android.bp @@ -38,6 +38,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 -> { |