aboutsummaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorAndroid Build Coastguard Worker <android-build-coastguard-worker@google.com>2024-03-12 23:15:36 +0000
committerAndroid Build Coastguard Worker <android-build-coastguard-worker@google.com>2024-03-12 23:15:36 +0000
commit0a425e88350e44d3b55b5d67ad203b06d57c1287 (patch)
tree4faa8dff31ee5001b2a65c8cfbc4e809077d863e
parent07be1d1194dcfcbdb895b7cd944ff96b7ca76f03 (diff)
parent9c3f809150ef1ec836601ba73e15816c924979df (diff)
downloadims-sdk-release.tar.gz
Snap for 11566117 from 9c3f809150ef1ec836601ba73e15816c924979df to sdk-releasesdk-release
Change-Id: Ia8381c7b8f55839b84ebef5c755e458a1c8268ed
-rw-r--r--Android.bp1
-rw-r--r--src/java/com/android/ims/ImsManager.java10
-rw-r--r--tests/Android.bp2
-rw-r--r--tests/src/com/android/ims/ImsManagerTest.java34
4 files changed, 45 insertions, 2 deletions
diff --git a/Android.bp b/Android.bp
index dea49d7d..82bf3698 100644
--- a/Android.bp
+++ b/Android.bp
@@ -44,6 +44,7 @@ java_library {
],
libs: [
+ "error_prone_annotations",
"unsupportedappusage",
// TODO b/151667108 add "framework-telephony",
// TODO link to framework-minus-apex stub and framework-wifi-stubs
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 -> {