Loading src/java/com/android/internal/telephony/MultiSimSettingController.java +12 −3 Original line number Diff line number Diff line Loading @@ -108,6 +108,14 @@ public class MultiSimSettingController extends Handler { /** The singleton instance. */ private static MultiSimSettingController sInstance = null; // This will be set true when handling EVENT_ALL_SUBSCRIPTIONS_LOADED. The reason of keeping // a local variable instead of calling SubscriptionInfoUpdater#isSubInfoInitialized is, there // might be a race condition that we receive EVENT_SUBSCRIPTION_INFO_CHANGED first, then // EVENT_ALL_SUBSCRIPTIONS_LOADED. And calling SubscriptionInfoUpdater#isSubInfoInitialized // will make us handle EVENT_SUBSCRIPTION_INFO_CHANGED unexpectedly and causing us to believe // the SIMs are newly inserted instead of being initialized. private boolean mSubInfoInitialized = false; /** * Return the singleton or create one if not existed. */ Loading Loading @@ -250,6 +258,7 @@ public class MultiSimSettingController extends Handler { */ private void onAllSubscriptionsLoaded() { if (DBG) log("onAllSubscriptionsLoaded"); mSubInfoInitialized = true; updateDefaults(/*init*/ true); disableDataForNonDefaultNonOpportunisticSubscriptions(); } Loading @@ -261,7 +270,7 @@ public class MultiSimSettingController extends Handler { */ private void onSubscriptionsChanged() { if (DBG) log("onSubscriptionsChanged"); if (!SubscriptionInfoUpdater.isSubInfoInitialized()) return; if (!mSubInfoInitialized) return; updateDefaults(/*init*/ false); disableDataForNonDefaultNonOpportunisticSubscriptions(); } Loading Loading @@ -345,7 +354,7 @@ public class MultiSimSettingController extends Handler { private void updateDefaults(boolean init) { if (DBG) log("updateDefaults"); if (!SubscriptionInfoUpdater.isSubInfoInitialized()) return; if (!mSubInfoInitialized) return; List<SubscriptionInfo> activeSubInfos = mSubController .getActiveSubscriptionInfoList(mContext.getOpPackageName()); Loading Loading @@ -541,7 +550,7 @@ public class MultiSimSettingController extends Handler { } private void disableDataForNonDefaultNonOpportunisticSubscriptions() { if (!SubscriptionInfoUpdater.isSubInfoInitialized()) return; if (!mSubInfoInitialized) return; int defaultDataSub = mSubController.getDefaultDataSubId(); Loading src/java/com/android/internal/telephony/dataconnection/DataConnection.java +18 −4 Original line number Diff line number Diff line Loading @@ -47,6 +47,7 @@ import android.telephony.DataFailCause; import android.telephony.NetworkRegistrationInfo; import android.telephony.Rlog; import android.telephony.ServiceState; import android.telephony.SubscriptionManager; import android.telephony.TelephonyManager; import android.telephony.data.ApnSetting; import android.telephony.data.DataCallResponse; Loading Loading @@ -154,6 +155,9 @@ public class DataConnection extends StateMachine { // The score we report to connectivity service private int mScore; // The subscription id associated with this data connection. private int mSubId; // The data connection controller private DcController mDcController; Loading Loading @@ -182,16 +186,18 @@ public class DataConnection extends StateMachine { final int mConnectionGeneration; @RequestNetworkType final int mRequestType; final int mSubId; ConnectionParams(ApnContext apnContext, int profileId, int rilRadioTechnology, Message onCompletedMsg, int connectionGeneration, @RequestNetworkType int requestType) { @RequestNetworkType int requestType, int subId) { mApnContext = apnContext; mProfileId = profileId; mRilRat = rilRadioTechnology; mOnCompletedMsg = onCompletedMsg; mConnectionGeneration = connectionGeneration; mRequestType = requestType; mSubId = subId; } @Override Loading @@ -201,6 +207,7 @@ public class DataConnection extends StateMachine { + " mRat=" + mRilRat + " mOnCompletedMsg=" + msgToString(mOnCompletedMsg) + " mRequestType=" + DcTracker.requestTypeToString(mRequestType) + " mSubId=" + mSubId + "}"; } } Loading Loading @@ -872,6 +879,7 @@ public class DataConnection extends StateMachine { mRestrictedNetworkOverride = false; mDcFailCause = DataFailCause.NONE; mDisabledApnTypeBitMask = 0; mSubId = SubscriptionManager.INVALID_SUBSCRIPTION_ID; } /** Loading Loading @@ -1253,7 +1261,7 @@ public class DataConnection extends StateMachine { result.setLinkUpstreamBandwidthKbps(up); result.setLinkDownstreamBandwidthKbps(down); result.setNetworkSpecifier(new StringNetworkSpecifier(Integer.toString(mPhone.getSubId()))); result.setNetworkSpecifier(new StringNetworkSpecifier(Integer.toString(mSubId))); result.setCapability(NetworkCapabilities.NET_CAPABILITY_NOT_ROAMING, !mPhone.getServiceState().getDataRoaming()); Loading Loading @@ -1723,6 +1731,10 @@ public class DataConnection extends StateMachine { return HANDLED; } if (mSubId == SubscriptionManager.INVALID_SUBSCRIPTION_ID) { mSubId = cp.mSubId; } transitionTo(mActivatingState); return HANDLED; case EVENT_DISCONNECT: Loading Loading @@ -2412,16 +2424,17 @@ public class DataConnection extends StateMachine { * @param connectionGeneration used to track a single connection request so disconnects can get * ignored if obsolete. * @param requestType Data request type * @param subId the subscription id associated with this data connection. */ public void bringUp(ApnContext apnContext, int profileId, int rilRadioTechnology, Message onCompletedMsg, int connectionGeneration, @RequestNetworkType int requestType) { @RequestNetworkType int requestType, int subId) { if (DBG) { log("bringUp: apnContext=" + apnContext + " onCompletedMsg=" + onCompletedMsg); } sendMessage(DataConnection.EVENT_CONNECT, new ConnectionParams(apnContext, profileId, rilRadioTechnology, onCompletedMsg, connectionGeneration, requestType)); connectionGeneration, requestType, subId)); } /** Loading Loading @@ -2769,6 +2782,7 @@ public class DataConnection extends StateMachine { pw.println("mDisconnectParams=" + mDisconnectParams); pw.println("mDcFailCause=" + mDcFailCause); pw.println("mPhone=" + mPhone); pw.println("mSubId=" + mSubId); pw.println("mLinkProperties=" + mLinkProperties); pw.flush(); pw.println("mDataRegState=" + mDataRegState); Loading src/java/com/android/internal/telephony/dataconnection/DataEnabledOverride.java +1 −1 Original line number Diff line number Diff line Loading @@ -349,7 +349,7 @@ public class DataEnabledOverride { if (phone != null) { // Check if the device is on voice call if (phone.getCallTracker().getState() != PhoneConstants.State.IDLE) { if (phone.getState() != PhoneConstants.State.IDLE) { conditions |= OverrideConditions.CONDITION_IN_VOICE_CALL; } Loading src/java/com/android/internal/telephony/dataconnection/DataEnabledSettings.java +34 −3 Original line number Diff line number Diff line Loading @@ -17,6 +17,9 @@ package com.android.internal.telephony.dataconnection; import static android.telephony.PhoneStateListener.LISTEN_CALL_STATE; import static android.telephony.PhoneStateListener.LISTEN_NONE; import android.annotation.IntDef; import android.content.ContentResolver; import android.content.Context; Loading @@ -25,9 +28,11 @@ import android.os.RegistrantList; import android.os.SystemProperties; import android.provider.Settings; import android.telephony.CarrierConfigManager; import android.telephony.PhoneStateListener; import android.telephony.Rlog; import android.telephony.SubscriptionInfo; import android.telephony.SubscriptionManager; import android.telephony.TelephonyManager; import android.telephony.data.ApnSetting; import android.util.LocalLog; import android.util.Pair; Loading Loading @@ -60,7 +65,9 @@ public class DataEnabledSettings { REASON_POLICY_DATA_ENABLED, REASON_DATA_ENABLED_BY_CARRIER, REASON_PROVISIONED_CHANGED, REASON_PROVISIONING_DATA_ENABLED_CHANGED REASON_PROVISIONING_DATA_ENABLED_CHANGED, REASON_OVERRIDE_RULE_CHANGED, REASON_OVERRIDE_CONDITION_CHANGED }) public @interface DataEnabledChangedReason {} Loading @@ -78,6 +85,10 @@ public class DataEnabledSettings { public static final int REASON_PROVISIONING_DATA_ENABLED_CHANGED = 6; public static final int REASON_OVERRIDE_RULE_CHANGED = 7; public static final int REASON_OVERRIDE_CONDITION_CHANGED = 8; /** * responds to the setInternalDataEnabled call - used internally to turn off data. * For example during emergency calls Loading Loading @@ -114,6 +125,8 @@ public class DataEnabledSettings { private DataEnabledOverride mDataEnabledOverride; private TelephonyManager mTelephonyManager; // for msim, user data enabled setting depends on subId. private final SubscriptionManager.OnSubscriptionsChangedListener mOnSubscriptionsChangeListener = Loading @@ -126,6 +139,7 @@ public class DataEnabledSettings { + mPhone.getSubId()); mSubId = mPhone.getSubId(); mDataEnabledOverride = getDataEnabledOverride(); updatePhoneStateListener(); updateDataEnabledAndNotify(REASON_USER_DATA_ENABLED); mPhone.notifyUserMobileDataStateChanged(isUserDataEnabled()); } Loading @@ -133,6 +147,21 @@ public class DataEnabledSettings { } }; private void updatePhoneStateListener() { mTelephonyManager.listen(mPhoneStateListener, LISTEN_NONE); if (SubscriptionManager.isUsableSubscriptionId(mSubId)) { mTelephonyManager = mTelephonyManager.createForSubscriptionId(mSubId); } mTelephonyManager.listen(mPhoneStateListener, LISTEN_CALL_STATE); } private final PhoneStateListener mPhoneStateListener = new PhoneStateListener() { @Override public void onCallStateChanged(@TelephonyManager.CallState int state, String phoneNumber) { updateDataEnabledAndNotify(REASON_OVERRIDE_CONDITION_CHANGED); } }; @Override public String toString() { return "[mInternalDataEnabled=" + mInternalDataEnabled Loading @@ -151,6 +180,8 @@ public class DataEnabledSettings { SubscriptionManager subscriptionManager = (SubscriptionManager) mPhone.getContext() .getSystemService(Context.TELEPHONY_SUBSCRIPTION_SERVICE); subscriptionManager.addOnSubscriptionsChangedListener(mOnSubscriptionsChangeListener); mTelephonyManager = (TelephonyManager) mPhone.getContext() .getSystemService(Context.TELEPHONY_SERVICE); mDataEnabledOverride = getDataEnabledOverride(); updateDataEnabled(); } Loading Loading @@ -210,7 +241,7 @@ public class DataEnabledSettings { boolean changed = SubscriptionController.getInstance() .setDataEnabledOverrideRules(mPhone.getSubId(), mDataEnabledOverride.getRules()); if (changed) { updateDataEnabled(); updateDataEnabledAndNotify(REASON_OVERRIDE_RULE_CHANGED); notifyDataEnabledOverrideChanged(); } Loading @@ -231,7 +262,7 @@ public class DataEnabledSettings { boolean changed = SubscriptionController.getInstance() .setDataEnabledOverrideRules(mPhone.getSubId(), mDataEnabledOverride.getRules()); if (changed) { updateDataEnabled(); updateDataEnabledAndNotify(REASON_OVERRIDE_RULE_CHANGED); notifyDataEnabledOverrideChanged(); } Loading src/java/com/android/internal/telephony/dataconnection/DcTracker.java +2 −1 Original line number Diff line number Diff line Loading @@ -1965,7 +1965,8 @@ public class DcTracker extends Handler { Message msg = obtainMessage(); msg.what = DctConstants.EVENT_DATA_SETUP_COMPLETE; msg.obj = new Pair<ApnContext, Integer>(apnContext, generation); dataConnection.bringUp(apnContext, profileId, radioTech, msg, generation, requestType); dataConnection.bringUp(apnContext, profileId, radioTech, msg, generation, requestType, mPhone.getSubId()); if (DBG) log("setupData: initing!"); return true; Loading Loading
src/java/com/android/internal/telephony/MultiSimSettingController.java +12 −3 Original line number Diff line number Diff line Loading @@ -108,6 +108,14 @@ public class MultiSimSettingController extends Handler { /** The singleton instance. */ private static MultiSimSettingController sInstance = null; // This will be set true when handling EVENT_ALL_SUBSCRIPTIONS_LOADED. The reason of keeping // a local variable instead of calling SubscriptionInfoUpdater#isSubInfoInitialized is, there // might be a race condition that we receive EVENT_SUBSCRIPTION_INFO_CHANGED first, then // EVENT_ALL_SUBSCRIPTIONS_LOADED. And calling SubscriptionInfoUpdater#isSubInfoInitialized // will make us handle EVENT_SUBSCRIPTION_INFO_CHANGED unexpectedly and causing us to believe // the SIMs are newly inserted instead of being initialized. private boolean mSubInfoInitialized = false; /** * Return the singleton or create one if not existed. */ Loading Loading @@ -250,6 +258,7 @@ public class MultiSimSettingController extends Handler { */ private void onAllSubscriptionsLoaded() { if (DBG) log("onAllSubscriptionsLoaded"); mSubInfoInitialized = true; updateDefaults(/*init*/ true); disableDataForNonDefaultNonOpportunisticSubscriptions(); } Loading @@ -261,7 +270,7 @@ public class MultiSimSettingController extends Handler { */ private void onSubscriptionsChanged() { if (DBG) log("onSubscriptionsChanged"); if (!SubscriptionInfoUpdater.isSubInfoInitialized()) return; if (!mSubInfoInitialized) return; updateDefaults(/*init*/ false); disableDataForNonDefaultNonOpportunisticSubscriptions(); } Loading Loading @@ -345,7 +354,7 @@ public class MultiSimSettingController extends Handler { private void updateDefaults(boolean init) { if (DBG) log("updateDefaults"); if (!SubscriptionInfoUpdater.isSubInfoInitialized()) return; if (!mSubInfoInitialized) return; List<SubscriptionInfo> activeSubInfos = mSubController .getActiveSubscriptionInfoList(mContext.getOpPackageName()); Loading Loading @@ -541,7 +550,7 @@ public class MultiSimSettingController extends Handler { } private void disableDataForNonDefaultNonOpportunisticSubscriptions() { if (!SubscriptionInfoUpdater.isSubInfoInitialized()) return; if (!mSubInfoInitialized) return; int defaultDataSub = mSubController.getDefaultDataSubId(); Loading
src/java/com/android/internal/telephony/dataconnection/DataConnection.java +18 −4 Original line number Diff line number Diff line Loading @@ -47,6 +47,7 @@ import android.telephony.DataFailCause; import android.telephony.NetworkRegistrationInfo; import android.telephony.Rlog; import android.telephony.ServiceState; import android.telephony.SubscriptionManager; import android.telephony.TelephonyManager; import android.telephony.data.ApnSetting; import android.telephony.data.DataCallResponse; Loading Loading @@ -154,6 +155,9 @@ public class DataConnection extends StateMachine { // The score we report to connectivity service private int mScore; // The subscription id associated with this data connection. private int mSubId; // The data connection controller private DcController mDcController; Loading Loading @@ -182,16 +186,18 @@ public class DataConnection extends StateMachine { final int mConnectionGeneration; @RequestNetworkType final int mRequestType; final int mSubId; ConnectionParams(ApnContext apnContext, int profileId, int rilRadioTechnology, Message onCompletedMsg, int connectionGeneration, @RequestNetworkType int requestType) { @RequestNetworkType int requestType, int subId) { mApnContext = apnContext; mProfileId = profileId; mRilRat = rilRadioTechnology; mOnCompletedMsg = onCompletedMsg; mConnectionGeneration = connectionGeneration; mRequestType = requestType; mSubId = subId; } @Override Loading @@ -201,6 +207,7 @@ public class DataConnection extends StateMachine { + " mRat=" + mRilRat + " mOnCompletedMsg=" + msgToString(mOnCompletedMsg) + " mRequestType=" + DcTracker.requestTypeToString(mRequestType) + " mSubId=" + mSubId + "}"; } } Loading Loading @@ -872,6 +879,7 @@ public class DataConnection extends StateMachine { mRestrictedNetworkOverride = false; mDcFailCause = DataFailCause.NONE; mDisabledApnTypeBitMask = 0; mSubId = SubscriptionManager.INVALID_SUBSCRIPTION_ID; } /** Loading Loading @@ -1253,7 +1261,7 @@ public class DataConnection extends StateMachine { result.setLinkUpstreamBandwidthKbps(up); result.setLinkDownstreamBandwidthKbps(down); result.setNetworkSpecifier(new StringNetworkSpecifier(Integer.toString(mPhone.getSubId()))); result.setNetworkSpecifier(new StringNetworkSpecifier(Integer.toString(mSubId))); result.setCapability(NetworkCapabilities.NET_CAPABILITY_NOT_ROAMING, !mPhone.getServiceState().getDataRoaming()); Loading Loading @@ -1723,6 +1731,10 @@ public class DataConnection extends StateMachine { return HANDLED; } if (mSubId == SubscriptionManager.INVALID_SUBSCRIPTION_ID) { mSubId = cp.mSubId; } transitionTo(mActivatingState); return HANDLED; case EVENT_DISCONNECT: Loading Loading @@ -2412,16 +2424,17 @@ public class DataConnection extends StateMachine { * @param connectionGeneration used to track a single connection request so disconnects can get * ignored if obsolete. * @param requestType Data request type * @param subId the subscription id associated with this data connection. */ public void bringUp(ApnContext apnContext, int profileId, int rilRadioTechnology, Message onCompletedMsg, int connectionGeneration, @RequestNetworkType int requestType) { @RequestNetworkType int requestType, int subId) { if (DBG) { log("bringUp: apnContext=" + apnContext + " onCompletedMsg=" + onCompletedMsg); } sendMessage(DataConnection.EVENT_CONNECT, new ConnectionParams(apnContext, profileId, rilRadioTechnology, onCompletedMsg, connectionGeneration, requestType)); connectionGeneration, requestType, subId)); } /** Loading Loading @@ -2769,6 +2782,7 @@ public class DataConnection extends StateMachine { pw.println("mDisconnectParams=" + mDisconnectParams); pw.println("mDcFailCause=" + mDcFailCause); pw.println("mPhone=" + mPhone); pw.println("mSubId=" + mSubId); pw.println("mLinkProperties=" + mLinkProperties); pw.flush(); pw.println("mDataRegState=" + mDataRegState); Loading
src/java/com/android/internal/telephony/dataconnection/DataEnabledOverride.java +1 −1 Original line number Diff line number Diff line Loading @@ -349,7 +349,7 @@ public class DataEnabledOverride { if (phone != null) { // Check if the device is on voice call if (phone.getCallTracker().getState() != PhoneConstants.State.IDLE) { if (phone.getState() != PhoneConstants.State.IDLE) { conditions |= OverrideConditions.CONDITION_IN_VOICE_CALL; } Loading
src/java/com/android/internal/telephony/dataconnection/DataEnabledSettings.java +34 −3 Original line number Diff line number Diff line Loading @@ -17,6 +17,9 @@ package com.android.internal.telephony.dataconnection; import static android.telephony.PhoneStateListener.LISTEN_CALL_STATE; import static android.telephony.PhoneStateListener.LISTEN_NONE; import android.annotation.IntDef; import android.content.ContentResolver; import android.content.Context; Loading @@ -25,9 +28,11 @@ import android.os.RegistrantList; import android.os.SystemProperties; import android.provider.Settings; import android.telephony.CarrierConfigManager; import android.telephony.PhoneStateListener; import android.telephony.Rlog; import android.telephony.SubscriptionInfo; import android.telephony.SubscriptionManager; import android.telephony.TelephonyManager; import android.telephony.data.ApnSetting; import android.util.LocalLog; import android.util.Pair; Loading Loading @@ -60,7 +65,9 @@ public class DataEnabledSettings { REASON_POLICY_DATA_ENABLED, REASON_DATA_ENABLED_BY_CARRIER, REASON_PROVISIONED_CHANGED, REASON_PROVISIONING_DATA_ENABLED_CHANGED REASON_PROVISIONING_DATA_ENABLED_CHANGED, REASON_OVERRIDE_RULE_CHANGED, REASON_OVERRIDE_CONDITION_CHANGED }) public @interface DataEnabledChangedReason {} Loading @@ -78,6 +85,10 @@ public class DataEnabledSettings { public static final int REASON_PROVISIONING_DATA_ENABLED_CHANGED = 6; public static final int REASON_OVERRIDE_RULE_CHANGED = 7; public static final int REASON_OVERRIDE_CONDITION_CHANGED = 8; /** * responds to the setInternalDataEnabled call - used internally to turn off data. * For example during emergency calls Loading Loading @@ -114,6 +125,8 @@ public class DataEnabledSettings { private DataEnabledOverride mDataEnabledOverride; private TelephonyManager mTelephonyManager; // for msim, user data enabled setting depends on subId. private final SubscriptionManager.OnSubscriptionsChangedListener mOnSubscriptionsChangeListener = Loading @@ -126,6 +139,7 @@ public class DataEnabledSettings { + mPhone.getSubId()); mSubId = mPhone.getSubId(); mDataEnabledOverride = getDataEnabledOverride(); updatePhoneStateListener(); updateDataEnabledAndNotify(REASON_USER_DATA_ENABLED); mPhone.notifyUserMobileDataStateChanged(isUserDataEnabled()); } Loading @@ -133,6 +147,21 @@ public class DataEnabledSettings { } }; private void updatePhoneStateListener() { mTelephonyManager.listen(mPhoneStateListener, LISTEN_NONE); if (SubscriptionManager.isUsableSubscriptionId(mSubId)) { mTelephonyManager = mTelephonyManager.createForSubscriptionId(mSubId); } mTelephonyManager.listen(mPhoneStateListener, LISTEN_CALL_STATE); } private final PhoneStateListener mPhoneStateListener = new PhoneStateListener() { @Override public void onCallStateChanged(@TelephonyManager.CallState int state, String phoneNumber) { updateDataEnabledAndNotify(REASON_OVERRIDE_CONDITION_CHANGED); } }; @Override public String toString() { return "[mInternalDataEnabled=" + mInternalDataEnabled Loading @@ -151,6 +180,8 @@ public class DataEnabledSettings { SubscriptionManager subscriptionManager = (SubscriptionManager) mPhone.getContext() .getSystemService(Context.TELEPHONY_SUBSCRIPTION_SERVICE); subscriptionManager.addOnSubscriptionsChangedListener(mOnSubscriptionsChangeListener); mTelephonyManager = (TelephonyManager) mPhone.getContext() .getSystemService(Context.TELEPHONY_SERVICE); mDataEnabledOverride = getDataEnabledOverride(); updateDataEnabled(); } Loading Loading @@ -210,7 +241,7 @@ public class DataEnabledSettings { boolean changed = SubscriptionController.getInstance() .setDataEnabledOverrideRules(mPhone.getSubId(), mDataEnabledOverride.getRules()); if (changed) { updateDataEnabled(); updateDataEnabledAndNotify(REASON_OVERRIDE_RULE_CHANGED); notifyDataEnabledOverrideChanged(); } Loading @@ -231,7 +262,7 @@ public class DataEnabledSettings { boolean changed = SubscriptionController.getInstance() .setDataEnabledOverrideRules(mPhone.getSubId(), mDataEnabledOverride.getRules()); if (changed) { updateDataEnabled(); updateDataEnabledAndNotify(REASON_OVERRIDE_RULE_CHANGED); notifyDataEnabledOverrideChanged(); } Loading
src/java/com/android/internal/telephony/dataconnection/DcTracker.java +2 −1 Original line number Diff line number Diff line Loading @@ -1965,7 +1965,8 @@ public class DcTracker extends Handler { Message msg = obtainMessage(); msg.what = DctConstants.EVENT_DATA_SETUP_COMPLETE; msg.obj = new Pair<ApnContext, Integer>(apnContext, generation); dataConnection.bringUp(apnContext, profileId, radioTech, msg, generation, requestType); dataConnection.bringUp(apnContext, profileId, radioTech, msg, generation, requestType, mPhone.getSubId()); if (DBG) log("setupData: initing!"); return true; Loading