Clear original connection before reselecting domain
The original connection is already disconnected.
Refering mOriginalConnection can cause abnormal behavior.
So mOriginalConnection should be cleared before reselecting domain.
Bug: 266522840
Test: atest TelephonyConnectionTest
Change-Id: I88cc25067ba043ffde0f783cf2382612d9e86353
diff --git a/src/com/android/services/telephony/TelephonyConnection.java b/src/com/android/services/telephony/TelephonyConnection.java
index 1cf35a5..e278240 100644
--- a/src/com/android/services/telephony/TelephonyConnection.java
+++ b/src/com/android/services/telephony/TelephonyConnection.java
@@ -2494,6 +2494,7 @@
if (mTelephonyConnectionService.maybeReselectDomain(this,
mOriginalConnection.getPreciseDisconnectCause(), reasonInfo)) {
+ clearOriginalConnection();
break;
}
}
diff --git a/tests/src/com/android/services/telephony/TelephonyConnectionTest.java b/tests/src/com/android/services/telephony/TelephonyConnectionTest.java
index 3c309ba..758ded7 100644
--- a/tests/src/com/android/services/telephony/TelephonyConnectionTest.java
+++ b/tests/src/com/android/services/telephony/TelephonyConnectionTest.java
@@ -294,13 +294,16 @@
public void testDomainSelectionDisconnected_Redial() {
TestTelephonyConnection c = new TestTelephonyConnection();
c.setOriginalConnection(mImsPhoneConnection);
+
doReturn(Call.State.DISCONNECTED).when(mImsPhoneConnection)
.getState();
c.setTelephonyConnectionService(mTelephonyConnectionService);
doReturn(true).when(mTelephonyConnectionService)
.maybeReselectDomain(any(), anyInt(), any());
+ c.resetOriginalConnectionCleared();
c.updateState();
assertNotEquals(STATE_DISCONNECTED, c.getState());
+ assertTrue(c.isOriginalConnectionCleared());
}
}
diff --git a/tests/src/com/android/services/telephony/TestTelephonyConnection.java b/tests/src/com/android/services/telephony/TestTelephonyConnection.java
index e149d3b..d91435c 100644
--- a/tests/src/com/android/services/telephony/TestTelephonyConnection.java
+++ b/tests/src/com/android/services/telephony/TestTelephonyConnection.java
@@ -50,8 +50,6 @@
import org.mockito.Mock;
import org.mockito.MockitoAnnotations;
-import org.mockito.invocation.InvocationOnMock;
-import org.mockito.stubbing.Answer;
import java.util.ArrayList;
import java.util.List;
@@ -107,6 +105,7 @@
private List<Bundle> mLastConnectionEventExtras = new ArrayList<>();
private Object mLock = new Object();
private PersistableBundle mCarrierConfig = new PersistableBundle();
+ private boolean mOriginalConnectionCleared;
@Override
public com.android.internal.telephony.Connection getOriginalConnection() {
@@ -211,7 +210,15 @@
@Override
void clearOriginalConnection() {
- // Do nothing since the original connection is mock object
+ mOriginalConnectionCleared = true;
+ }
+
+ boolean isOriginalConnectionCleared() {
+ return mOriginalConnectionCleared;
+ }
+
+ void resetOriginalConnectionCleared() {
+ mOriginalConnectionCleared = false;
}
@Override