diff options
author | Susheel nyamala <snyamala@codeaurora.org> | 2016-03-23 23:44:11 +0530 |
---|---|---|
committer | Steve Kondik <steve@cyngn.com> | 2016-07-02 10:55:01 -0700 |
commit | a8208a51278a86fe62a5187d4a93c3e59f49b521 (patch) | |
tree | 8fb7836b8202845eb59841b0d94d52839e42f6bf | |
parent | b6d95be167664c9bc81bfbb0d1f487f2926cbf84 (diff) | |
download | android_frameworks_opt_telephony-a8208a51278a86fe62a5187d4a93c3e59f49b521.tar.gz android_frameworks_opt_telephony-a8208a51278a86fe62a5187d4a93c3e59f49b521.tar.bz2 android_frameworks_opt_telephony-a8208a51278a86fe62a5187d4a93c3e59f49b521.zip |
Fix Dds switch issue for wifi and IWLAN scenarios
In wifi on case, internet requests are released and there are
no oustanding requests to process, so user triggered Dds switch will
be blocked. Add a dummy network request to force Dds switch.
If IWLAN is reported on non dds sub, move state machine to Attached
state, to process any on demand network requests possible over IWLAN
Change-Id: I38a917906808511705eedb7d39534781759296cb
CRs-Fixed: 993272
-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) { |