diff options
author | Muhammed Siju <msiju@codeaurora.org> | 2016-03-11 13:26:23 +0530 |
---|---|---|
committer | Steve Kondik <steve@cyngn.com> | 2016-07-02 10:55:01 -0700 |
commit | 0f88ef6b7d8f96d7fae7b628d71b6aece8d586ba (patch) | |
tree | d7c099033c13db22c6166d7d5e88ae4223df066f | |
parent | 7e642723d7bb97b4074f8f2962a51b38a7aa529b (diff) | |
download | android_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.java | 4 | ||||
-rw-r--r-- | src/java/com/android/internal/telephony/dataconnection/DctController.java | 21 |
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 { |