diff options
| -rw-r--r-- | src/java/com/android/internal/telephony/dataconnection/DcSwitchStateMachine.java | 24 | ||||
| -rw-r--r-- | src/java/com/android/internal/telephony/dataconnection/DctController.java | 6 |
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) { |
