aboutsummaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorMuhammed Siju <msiju@codeaurora.org>2016-03-11 13:26:23 +0530
committerSteve Kondik <steve@cyngn.com>2016-07-02 10:55:01 -0700
commit0f88ef6b7d8f96d7fae7b628d71b6aece8d586ba (patch)
treed7c099033c13db22c6166d7d5e88ae4223df066f
parent7e642723d7bb97b4074f8f2962a51b38a7aa529b (diff)
downloadandroid_frameworks_opt_telephony-0f88ef6b7d8f96d7fae7b628d71b6aece8d586ba.tar.gz
android_frameworks_opt_telephony-0f88ef6b7d8f96d7fae7b628d71b6aece8d586ba.tar.bz2
android_frameworks_opt_telephony-0f88ef6b7d8f96d7fae7b628d71b6aece8d586ba.zip
Fix DDS switch issues for CDMA and IWLAN scenarios.
Maintain data allowed flags for each phone, based on the current DDS switch scenerio. Ignore ATTACHed event in DcSSM IdleState, if data is not allowed on that phone. This helps to prevent unnecessary ALLOW_DATA(T) requests when CDMA or IWLAN data registration is reported after PS detach is initiated for the phone. It also helps to avoid wrong DDS switch in case of race condition between PS detach and data registration indication. Change-Id: I4bb1923e39182dd3df80207fcd6841273c67d75c CRs-Fixed: 986052
-rw-r--r--src/java/com/android/internal/telephony/dataconnection/DcSwitchStateMachine.java4
-rw-r--r--src/java/com/android/internal/telephony/dataconnection/DctController.java21
2 files changed, 24 insertions, 1 deletions
diff --git a/src/java/com/android/internal/telephony/dataconnection/DcSwitchStateMachine.java b/src/java/com/android/internal/telephony/dataconnection/DcSwitchStateMachine.java
index 9ec9f058e..b16d0571a 100644
--- a/src/java/com/android/internal/telephony/dataconnection/DcSwitchStateMachine.java
+++ b/src/java/com/android/internal/telephony/dataconnection/DcSwitchStateMachine.java
@@ -138,7 +138,7 @@ public class DcSwitchStateMachine extends StateMachine {
log("IdleState: EVENT_DATA_ATTACHED");
}
- if (ddsPhoneId == mId) {
+ if (DctController.getInstance().isDataAllowedOnPhoneId(mId)) {
if (DBG) {
log("IdleState: DDS sub reported ATTACHed in IDLE state");
}
@@ -147,6 +147,8 @@ public class DcSwitchStateMachine extends StateMachine {
*/
deferMessage(msg);
transitionTo(mAttachingState);
+ } else {
+ if (DBG) log("IdleState: ignore ATATCHed event as data is not allowed");
}
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 ea2b2f385..a20600cef 100644
--- a/src/java/com/android/internal/telephony/dataconnection/DctController.java
+++ b/src/java/com/android/internal/telephony/dataconnection/DctController.java
@@ -53,6 +53,7 @@ import com.android.internal.util.IndentingPrintWriter;
import java.io.FileDescriptor;
import java.io.PrintWriter;
import java.util.ArrayDeque;
+import java.util.concurrent.atomic.AtomicBoolean;
import java.util.HashMap;
import java.util.Iterator;
import java.util.Map.Entry;
@@ -94,6 +95,8 @@ public class DctController extends Handler {
private SubscriptionManager mSubMgr;
+ protected AtomicBoolean[] mIsDataAllowed;
+
private OnSubscriptionsChangedListener mOnSubscriptionsChangedListener =
new OnSubscriptionsChangedListener() {
@Override
@@ -234,9 +237,16 @@ public class DctController extends Handler {
mNetworkFactoryMessenger = new Messenger[mPhoneNum];
mNetworkFactory = new NetworkFactory[mPhoneNum];
mNetworkFilter = new NetworkCapabilities[mPhoneNum];
+ mIsDataAllowed = new AtomicBoolean[mPhoneNum];
for (int i = 0; i < mPhoneNum; ++i) {
int phoneId = i;
+ if (mPhoneNum == 1) {
+ // For single SIM mode allow data by default
+ mIsDataAllowed[i] = new AtomicBoolean(true);
+ } else {
+ mIsDataAllowed[i] = new AtomicBoolean(false);
+ }
mDcSwitchStateMachine[i] = new DcSwitchStateMachine(mPhones[i],
"DcSwitchStateMachine-" + phoneId, phoneId);
mDcSwitchStateMachine[i].start();
@@ -849,6 +859,17 @@ public class DctController extends Handler {
}
}
+ protected void setDataAllowedOnPhoneId(int phoneId, boolean dataAllowed) {
+ if (SubscriptionManager.isValidPhoneId(phoneId)) {
+ mIsDataAllowed[phoneId].set(dataAllowed);
+ }
+ }
+
+ public boolean isDataAllowedOnPhoneId(int phoneId) {
+ return SubscriptionManager.isValidPhoneId(phoneId) &&
+ mIsDataAllowed[phoneId].get();
+ }
+
public void dump(FileDescriptor fd, PrintWriter pw, String[] args) {
pw.println("DctController:");
try {