Merge cherrypicks of [9428684, 9428685, 9428686, 9428687, 9428607, 9428608, 9428514, 9428272, 9428273, 9428275, 9428276, 9428277, 9428278, 9428689, 9428690, 9428691, 9428478, 9428702, 9428692, 9428479, 9428720, 9428721, 9428722, 9428723, 9428703, 9426151, 9428693, 9428724, 9428725, 9428726, 9428727, 9428728, 9428729, 9428730, 9428731, 9428732, 9428733, 9428734, 9428704, 9428609, 9428610, 9428611, 9428612, 9428613, 9428614, 9428615, 9426152, 9426153, 9426154, 9426155, 9426156, 9426157, 9426158, 9426159, 9428740, 9428409, 9428694, 9428695, 9428735] into sparse-5888870-L93800000368094851
Change-Id: Id2990f95cba6b4d61e48d79a3db09a61215dff4e
diff --git a/src/java/com/android/internal/telephony/dataconnection/TelephonyNetworkFactory.java b/src/java/com/android/internal/telephony/dataconnection/TelephonyNetworkFactory.java
index d60efaf..382c1d6 100644
--- a/src/java/com/android/internal/telephony/dataconnection/TelephonyNetworkFactory.java
+++ b/src/java/com/android/internal/telephony/dataconnection/TelephonyNetworkFactory.java
@@ -357,6 +357,7 @@
+ "connection. Just move the request to transport "
+ AccessNetworkConstants.transportTypeToString(targetTransport)
+ ", dc=" + dc);
+ entry.setValue(targetTransport);
releaseNetworkInternal(networkRequest, DcTracker.RELEASE_TYPE_NORMAL,
currentTransport);
requestNetworkInternal(networkRequest, DcTracker.REQUEST_TYPE_NORMAL,
diff --git a/src/java/com/android/internal/telephony/dataconnection/TransportManager.java b/src/java/com/android/internal/telephony/dataconnection/TransportManager.java
index ea11223..5fb14af 100644
--- a/src/java/com/android/internal/telephony/dataconnection/TransportManager.java
+++ b/src/java/com/android/internal/telephony/dataconnection/TransportManager.java
@@ -208,7 +208,9 @@
public final @ApnType int apnType;
public final int targetTransport;
public final HandoverCallback callback;
- HandoverParams(int apnType, int targetTransport, HandoverCallback callback) {
+
+ @VisibleForTesting
+ public HandoverParams(int apnType, int targetTransport, HandoverCallback callback) {
this.apnType = apnType;
this.targetTransport = targetTransport;
this.callback = callback;
diff --git a/tests/telephonytests/src/com/android/internal/telephony/dataconnection/TelephonyNetworkFactoryTest.java b/tests/telephonytests/src/com/android/internal/telephony/dataconnection/TelephonyNetworkFactoryTest.java
index b624679..1b67149 100644
--- a/tests/telephonytests/src/com/android/internal/telephony/dataconnection/TelephonyNetworkFactoryTest.java
+++ b/tests/telephonytests/src/com/android/internal/telephony/dataconnection/TelephonyNetworkFactoryTest.java
@@ -23,6 +23,8 @@
import static org.mockito.ArgumentMatchers.anyInt;
import static org.mockito.ArgumentMatchers.anyString;
import static org.mockito.Mockito.doAnswer;
+import static org.mockito.Mockito.doReturn;
+import static org.mockito.Mockito.mock;
import android.content.Context;
import android.net.ConnectivityManager;
@@ -30,11 +32,15 @@
import android.net.NetworkCapabilities;
import android.net.NetworkRequest;
import android.net.StringNetworkSpecifier;
+import android.os.AsyncResult;
import android.os.Binder;
+import android.os.Handler;
import android.os.HandlerThread;
import android.os.Looper;
import android.os.Messenger;
+import android.telephony.AccessNetworkConstants;
import android.telephony.Rlog;
+import android.telephony.data.ApnSetting;
import android.test.suitebuilder.annotation.SmallTest;
import androidx.test.filters.FlakyTest;
@@ -43,6 +49,8 @@
import com.android.internal.telephony.RadioConfig;
import com.android.internal.telephony.SubscriptionController;
import com.android.internal.telephony.TelephonyTest;
+import com.android.internal.telephony.dataconnection.TransportManager.HandoverParams;
+import com.android.internal.telephony.dataconnection.TransportManager.HandoverParams.HandoverCallback;
import com.android.internal.telephony.mocks.ConnectivityServiceMock;
import com.android.internal.telephony.mocks.PhoneSwitcherMock;
import com.android.internal.telephony.mocks.SubscriptionControllerMock;
@@ -54,6 +62,7 @@
import org.junit.Test;
import org.mockito.Mock;
+import java.lang.reflect.Field;
import java.util.ArrayList;
public class TelephonyNetworkFactoryTest extends TelephonyTest {
@@ -303,4 +312,45 @@
waitForMs(250);
assertEquals(3, mNetworkRequestList.size());
}
+
+ /**
+ * Test handover when there is no live data connection
+ */
+ @Test
+ @SmallTest
+ public void testHandoverNoLiveData() throws Exception {
+ createMockedTelephonyComponents(1);
+ mPhoneSwitcherMock.setPreferredDataPhoneId(0);
+ mSubscriptionControllerMock.setDefaultDataSubId(0);
+ mSubscriptionControllerMock.setSlotSubId(0, 0);
+ mSubscriptionMonitorMock.notifySubscriptionChanged(0);
+
+ mPhoneSwitcherMock.setPhoneActive(0, true);
+ mConnectivityServiceMock.addDefaultRequest();
+
+ makeSubSpecificMmsRequest(0);
+
+ waitForMs(100);
+
+ Field f = TelephonyNetworkFactory.class.getDeclaredField("mInternalHandler");
+ f.setAccessible(true);
+ Handler h = (Handler) f.get(mTelephonyNetworkFactoryUT);
+
+ HandoverCallback handoverCallback = mock(HandoverCallback.class);
+
+ HandoverParams hp = new HandoverParams(ApnSetting.TYPE_MMS,
+ AccessNetworkConstants.TRANSPORT_TYPE_WLAN, handoverCallback);
+ AsyncResult ar = new AsyncResult(null, hp, null);
+ h.sendMessage(h.obtainMessage(5, ar));
+ waitForMs(100);
+
+ doReturn(AccessNetworkConstants.TRANSPORT_TYPE_WLAN).when(mTransportManager)
+ .getCurrentTransport(anyInt());
+
+ hp = new HandoverParams(ApnSetting.TYPE_MMS, AccessNetworkConstants.TRANSPORT_TYPE_WWAN,
+ handoverCallback);
+ ar = new AsyncResult(null, hp, null);
+ h.sendMessage(h.obtainMessage(5, ar));
+ waitForMs(100);
+ }
}