aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
-rw-r--r--src/java/com/android/internal/telephony/dataconnection/DcSwitchStateMachine.java24
-rw-r--r--src/java/com/android/internal/telephony/dataconnection/DctController.java6
2 files changed, 28 insertions, 2 deletions
diff --git a/src/java/com/android/internal/telephony/dataconnection/DcSwitchStateMachine.java b/src/java/com/android/internal/telephony/dataconnection/DcSwitchStateMachine.java
index ff9fd14f3..6caf20d92 100644
--- a/src/java/com/android/internal/telephony/dataconnection/DcSwitchStateMachine.java
+++ b/src/java/com/android/internal/telephony/dataconnection/DcSwitchStateMachine.java
@@ -138,7 +138,13 @@ public class DcSwitchStateMachine extends StateMachine {
log("IdleState: EVENT_DATA_ATTACHED");
}
- if (DctController.getInstance().isDataAllowedOnPhoneId(mId)) {
+ int dataRat = mPhone.getServiceState().getRilDataRadioTechnology();
+ if (dataRat == ServiceState.RIL_RADIO_TECHNOLOGY_IWLAN) {
+ if (DBG) {
+ log("IdleState: IWLAN reported in IDLE state");
+ }
+ transitionTo(mAttachedState);
+ } else if (DctController.getInstance().isDataAllowedOnPhoneId(mId)) {
if (DBG) {
log("IdleState: DDS sub reported ATTACHed in IDLE state");
}
@@ -447,7 +453,21 @@ public class DcSwitchStateMachine extends StateMachine {
apnRequest.log("DcSwitchStateMachine.AttachedState: REQ_CONNECT");
if (DBG) log("AttachedState: REQ_CONNECT, apnRequest=" + apnRequest);
- DctController.getInstance().executeRequest(apnRequest);
+ int dataRat = mPhone.getServiceState().getRilDataRadioTechnology();
+ if (dataRat == ServiceState.RIL_RADIO_TECHNOLOGY_IWLAN) {
+ SubscriptionController subController = SubscriptionController.getInstance();
+ int ddsSubId = subController.getDefaultDataSubId();
+ int ddsPhoneId = subController.getPhoneId(ddsSubId);
+ if (mId == ddsPhoneId) {
+ logd("AttachedState: Already attached on IWLAN. " +
+ "Retry Allow Data for Dds switch");
+ transitionTo(mAttachingState);
+ } else {
+ DctController.getInstance().executeRequest(apnRequest);
+ }
+ } else {
+ DctController.getInstance().executeRequest(apnRequest);
+ }
retVal = HANDLED;
break;
}
diff --git a/src/java/com/android/internal/telephony/dataconnection/DctController.java b/src/java/com/android/internal/telephony/dataconnection/DctController.java
index 28262fcad..fdc5145a0 100644
--- a/src/java/com/android/internal/telephony/dataconnection/DctController.java
+++ b/src/java/com/android/internal/telephony/dataconnection/DctController.java
@@ -570,6 +570,7 @@ public class DctController extends Handler {
if (requestInfo.priority > priority) {
priority = requestInfo.priority;
topSubId = requestInfo.request.networkCapabilities.getNetworkSpecifier();
+ retRequestInfo = requestInfo;
} else if (priority == requestInfo.priority) {
if (requestInfo.executedPhoneId == activePhoneId) {
topSubId = requestInfo.request.networkCapabilities.getNetworkSpecifier();
@@ -580,6 +581,11 @@ public class DctController extends Handler {
subId = mSubController.getDefaultDataSubId();
} else {
subId = Integer.parseInt(topSubId);
+ if (apnForNetworkRequest(retRequestInfo.request).equals(
+ PhoneConstants.APN_TYPE_IMS) && mNeedsDdsSwitch.get()) {
+ logd("getTopPriorityRequestPhoneId: ims request, use dds phone id");
+ subId = mSubController.getDefaultDataSubId();
+ }
}
final int phoneId = mSubController.getPhoneId(subId);
if (phoneId == DEFAULT_PHONE_INDEX) {