aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorSusheel nyamala <snyamala@codeaurora.org>2016-03-23 23:44:11 +0530
committerSteve Kondik <steve@cyngn.com>2016-07-02 10:55:01 -0700
commita8208a51278a86fe62a5187d4a93c3e59f49b521 (patch)
tree8fb7836b8202845eb59841b0d94d52839e42f6bf
parentb6d95be167664c9bc81bfbb0d1f487f2926cbf84 (diff)
downloadandroid_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.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) {