Loading src/java/com/android/internal/telephony/GsmCdmaCallTracker.java +9 −3 Original line number Diff line number Diff line Loading @@ -183,8 +183,10 @@ public class GsmCdmaCallTracker extends CallTracker { // Prior to phone switch to GSM, if CDMA has any emergency call // data will be in disabled state, after switching to GSM enable data. if (mIsInEmergencyCall) { if (!mPhone.isUsingNewDataStack()) { mPhone.getDataEnabledSettings().setInternalDataEnabled(true); } } } else { mConnections = new GsmCdmaConnection[MAX_CONNECTIONS_CDMA]; mPendingCallInEcm = false; Loading Loading @@ -398,7 +400,9 @@ public class GsmCdmaCallTracker extends CallTracker { //CDMA public void setIsInEmergencyCall() { mIsInEmergencyCall = true; if (!mPhone.isUsingNewDataStack()) { mPhone.getDataEnabledSettings().setInternalDataEnabled(false); } mPhone.notifyEmergencyCallRegistrants(true); mPhone.sendEmergencyCallStateChange(true); } Loading Loading @@ -1750,7 +1754,9 @@ public class GsmCdmaCallTracker extends CallTracker { } if (!inEcm) { // Re-initiate data connection if (!mPhone.isUsingNewDataStack()) { mPhone.getDataEnabledSettings().setInternalDataEnabled(true); } mPhone.notifyEmergencyCallRegistrants(false); } mPhone.sendEmergencyCallStateChange(false); Loading src/java/com/android/internal/telephony/GsmCdmaPhone.java +26 −3 Original line number Diff line number Diff line Loading @@ -361,6 +361,7 @@ public class GsmCdmaPhone extends Phone { mSST.registerForNetworkAttached(this, EVENT_REGISTERED_TO_NETWORK, null); mSST.registerForVoiceRegStateOrRatChanged(this, EVENT_VRS_OR_RAT_CHANGED, null); // TODO: Remove SettingsObserver and provisioning events when DataEnabledSettings is removed mSettingsObserver = new SettingsObserver(context, this); mSettingsObserver.observe( Settings.Global.getUriFor(Settings.Global.DEVICE_PROVISIONED), Loading Loading @@ -2645,6 +2646,9 @@ public class GsmCdmaPhone extends Phone { @Override public boolean getDataRoamingEnabled() { if (isUsingNewDataStack()) { return getDataSettingsManager().isDataRoamingEnabled(); } if (getDcTracker(AccessNetworkConstants.TRANSPORT_TYPE_WWAN) != null) { return getDcTracker(AccessNetworkConstants.TRANSPORT_TYPE_WWAN).getDataRoamingEnabled(); } Loading @@ -2653,6 +2657,10 @@ public class GsmCdmaPhone extends Phone { @Override public void setDataRoamingEnabled(boolean enable) { if (isUsingNewDataStack()) { getDataSettingsManager().setDataRoamingEnabled(enable); return; } if (getDcTracker(AccessNetworkConstants.TRANSPORT_TYPE_WWAN) != null) { getDcTracker(AccessNetworkConstants.TRANSPORT_TYPE_WWAN) .setDataRoamingEnabledByUser(enable); Loading Loading @@ -2707,6 +2715,10 @@ public class GsmCdmaPhone extends Phone { */ @Override public boolean isUserDataEnabled() { if (isUsingNewDataStack()) { return getDataSettingsManager().isDataEnabledForReason( TelephonyManager.DATA_ENABLED_REASON_USER); } if (mDataEnabledSettings.isProvisioning()) { return mDataEnabledSettings.isProvisioningDataEnabled(); } else { Loading Loading @@ -3245,14 +3257,23 @@ public class GsmCdmaPhone extends Phone { case EVENT_SET_CARRIER_DATA_ENABLED: ar = (AsyncResult) msg.obj; boolean enabled = (boolean) ar.result; if (isUsingNewDataStack()) { getDataSettingsManager().setDataEnabled( TelephonyManager.DATA_ENABLED_REASON_CARRIER, enabled); return; } mDataEnabledSettings.setDataEnabled(TelephonyManager.DATA_ENABLED_REASON_CARRIER, enabled); break; case EVENT_DEVICE_PROVISIONED_CHANGE: if (!isUsingNewDataStack()) { mDataEnabledSettings.updateProvisionedChanged(); } break; case EVENT_DEVICE_PROVISIONING_DATA_SETTING_CHANGE: if (!isUsingNewDataStack()) { mDataEnabledSettings.updateProvisioningDataEnabled(); } break; case EVENT_GET_AVAILABLE_NETWORKS_DONE: ar = (AsyncResult) msg.obj; Loading Loading @@ -3748,7 +3769,9 @@ public class GsmCdmaPhone extends Phone { // send an Intent sendEmergencyCallbackModeChange(); // Re-initiate data connection if (!isUsingNewDataStack()) { mDataEnabledSettings.setInternalDataEnabled(true); } notifyEmergencyCallRegistrants(false); } mIsTestingEmergencyCallbackMode = false; Loading src/java/com/android/internal/telephony/MultiSimSettingController.java +15 −5 Original line number Diff line number Diff line Loading @@ -790,11 +790,16 @@ public class MultiSimSettingController extends Handler { && phone.isUserDataEnabled() && !areSubscriptionsInSameGroup(defaultDataSub, phone.getSubId())) { log("setting data to false on " + phone.getSubId()); if (phone.isUsingNewDataStack()) { phone.getDataSettingsManager().setDataEnabled( TelephonyManager.DATA_ENABLED_REASON_USER, false); } else { phone.getDataEnabledSettings().setDataEnabled( TelephonyManager.DATA_ENABLED_REASON_USER, false); } } } } private boolean areSubscriptionsInSameGroup(int subId1, int subId2) { if (!SubscriptionManager.isUsableSubscriptionId(subId1) Loading Loading @@ -822,13 +827,18 @@ public class MultiSimSettingController extends Handler { int currentSubId = info.getSubscriptionId(); // TODO: simplify when setUserDataEnabled becomes singleton if (mSubController.isActiveSubId(currentSubId)) { // For active subscription, call setUserDataEnabled through DataEnabledSettings. // For active subscription, call setUserDataEnabled through DataSettingsManager. Phone phone = PhoneFactory.getPhone(mSubController.getPhoneId(currentSubId)); // If enable is true and it's not opportunistic subscription, we don't enable it, // as there can't e two // as there can't be two if (phone != null) { if (phone.isUsingNewDataStack()) { phone.getDataSettingsManager().setDataEnabled( TelephonyManager.DATA_ENABLED_REASON_USER, enable); } else { phone.getDataEnabledSettings().setUserDataEnabled(enable, false); } } } else { // For inactive subscription, directly write into global settings. GlobalSettingsHelper.setBoolean( Loading src/java/com/android/internal/telephony/Phone.java +9 −0 Original line number Diff line number Diff line Loading @@ -78,6 +78,7 @@ import com.android.internal.R; import com.android.internal.annotations.VisibleForTesting; import com.android.internal.telephony.data.AccessNetworksManager; import com.android.internal.telephony.data.DataNetworkController; import com.android.internal.telephony.data.DataSettingsManager; import com.android.internal.telephony.data.LinkBandwidthEstimator; import com.android.internal.telephony.dataconnection.DataConnectionReasons; import com.android.internal.telephony.dataconnection.DataEnabledSettings; Loading Loading @@ -4990,6 +4991,14 @@ public abstract class Phone extends Handler implements PhoneInternalInterface { return mDataNetworkController; } /** * @return The data settings manager */ public @Nullable DataSettingsManager getDataSettingsManager() { if (mDataNetworkController == null) return null; return mDataNetworkController.getDataSettingsManager(); } /** * Used in unit tests to set whether the AllowedNetworkTypes is loaded from Db. Should not * be used otherwise. Loading src/java/com/android/internal/telephony/PhoneSwitcher.java +57 −11 Original line number Diff line number Diff line Loading @@ -30,6 +30,7 @@ import static android.telephony.ims.stub.ImsRegistrationImplBase.REGISTRATION_TE import static java.util.Arrays.copyOf; import android.annotation.NonNull; import android.compat.annotation.UnsupportedAppUsage; import android.content.BroadcastReceiver; import android.content.Context; Loading Loading @@ -64,12 +65,14 @@ import android.telephony.ims.ImsReasonInfo; import android.telephony.ims.ImsRegistrationAttributes; import android.telephony.ims.RegistrationManager; import android.telephony.ims.stub.ImsRegistrationImplBase; import android.util.ArrayMap; import android.util.LocalLog; import com.android.ims.ImsException; import com.android.ims.ImsManager; import com.android.internal.annotations.VisibleForTesting; import com.android.internal.telephony.SubscriptionController.WatchedInt; import com.android.internal.telephony.data.DataSettingsManager.DataSettingsManagerCallback; import com.android.internal.telephony.dataconnection.ApnConfigTypeRepository; import com.android.internal.telephony.dataconnection.DcRequest; import com.android.internal.telephony.metrics.TelephonyMetrics; Loading @@ -86,6 +89,7 @@ import java.util.Calendar; import java.util.Collections; import java.util.HashSet; import java.util.List; import java.util.Map; import java.util.Set; import java.util.concurrent.CompletableFuture; Loading Loading @@ -309,6 +313,10 @@ public class PhoneSwitcher extends Handler { private List<Set<CommandException.Error>> mCurrentDdsSwitchFailure; /** Data settings manager callback. Key is the phone id. */ private final @NonNull Map<Integer, DataSettingsManagerCallback> mDataSettingsManagerCallbacks = new ArrayMap<>(); private class DefaultNetworkCallback extends ConnectivityManager.NetworkCallback { public int mExpectedSubId = SubscriptionManager.INVALID_SUBSCRIPTION_ID; public int mSwitchReason = TelephonyEvent.DataSwitch.Reason.DATA_SWITCH_REASON_UNKNOWN; Loading Loading @@ -477,18 +485,32 @@ public class PhoneSwitcher extends Handler { mActivePhoneRegistrants = new RegistrantList(); for (int i = 0; i < mActiveModemCount; i++) { mPhoneStates[i] = new PhoneState(); if (PhoneFactory.getPhone(i) != null) { PhoneFactory.getPhone(i).registerForEmergencyCallToggle( Phone phone = PhoneFactory.getPhone(i); if (phone != null) { phone.registerForEmergencyCallToggle( this, EVENT_EMERGENCY_TOGGLE, null); // TODO (b/135566422): combine register for both GsmCdmaPhone and ImsPhone. PhoneFactory.getPhone(i).registerForPreciseCallStateChanged( phone.registerForPreciseCallStateChanged( this, EVENT_PRECISE_CALL_STATE_CHANGED, null); if (PhoneFactory.getPhone(i).getImsPhone() != null) { PhoneFactory.getPhone(i).getImsPhone().registerForPreciseCallStateChanged( if (phone.getImsPhone() != null) { phone.getImsPhone().registerForPreciseCallStateChanged( this, EVENT_PRECISE_CALL_STATE_CHANGED, null); } PhoneFactory.getPhone(i).getDataEnabledSettings().registerForDataEnabledChanged( if (phone.isUsingNewDataStack()) { mDataSettingsManagerCallbacks.computeIfAbsent(phone.getPhoneId(), v -> new DataSettingsManagerCallback(this::post) { @Override public void onDataEnabledChanged(boolean enabled, @TelephonyManager.DataEnabledChangedReason int reason) { evaluateIfDataSwitchIsNeeded("EVENT_DATA_ENABLED_CHANGED"); }}); phone.getDataSettingsManager().registerCallback( mDataSettingsManagerCallbacks.get(phone.getPhoneId())); } else { phone.getDataEnabledSettings().registerForDataEnabledChanged( this, EVENT_DATA_ENABLED_CHANGED, null); } registerForImsRadioTechChange(context, i); } Set<CommandException.Error> ddsFailure = new HashSet<CommandException.Error>(); Loading Loading @@ -837,8 +859,22 @@ public class PhoneSwitcher extends Handler { phone.getImsPhone().registerForPreciseCallStateChanged( this, EVENT_PRECISE_CALL_STATE_CHANGED, null); } if (phone.isUsingNewDataStack()) { mDataSettingsManagerCallbacks.computeIfAbsent(phone.getPhoneId(), v -> new DataSettingsManagerCallback(this::post) { @Override public void onDataEnabledChanged(boolean enabled, @TelephonyManager.DataEnabledChangedReason int reason) { evaluateIfDataSwitchIsNeeded("EVENT_DATA_ENABLED_CHANGED"); } }); phone.getDataSettingsManager().registerCallback( mDataSettingsManagerCallbacks.get(phone.getPhoneId())); } else { phone.getDataEnabledSettings().registerForDataEnabledChanged( this, EVENT_DATA_ENABLED_CHANGED, null); } Set<CommandException.Error> ddsFailure = new HashSet<CommandException.Error>(); mCurrentDdsSwitchFailure.add(ddsFailure); Loading Loading @@ -1262,6 +1298,17 @@ public class PhoneSwitcher extends Handler { // requests. protected void updatePreferredDataPhoneId() { Phone voicePhone = findPhoneById(mPhoneIdInVoiceCall); boolean isDataEnabled = false; if (voicePhone != null) { if (voicePhone.isUsingNewDataStack()) { isDataEnabled = voicePhone.getDataSettingsManager() .isDataEnabled(ApnSetting.TYPE_DEFAULT); } else { isDataEnabled = voicePhone.getDataEnabledSettings() .isDataEnabled(ApnSetting.TYPE_DEFAULT); } } if (mEmergencyOverride != null && findPhoneById(mEmergencyOverride.mPhoneId) != null) { // Override DDS for emergency even if user data is not enabled, since it is an // emergency. Loading @@ -1270,8 +1317,7 @@ public class PhoneSwitcher extends Handler { log("updatePreferredDataPhoneId: preferred data overridden for emergency." + " phoneId = " + mEmergencyOverride.mPhoneId); mPreferredDataPhoneId = mEmergencyOverride.mPhoneId; } else if (voicePhone != null && voicePhone.getDataEnabledSettings().isDataEnabled( ApnSetting.TYPE_DEFAULT)) { } else if (isDataEnabled) { // If a phone is in call and user enabled its mobile data, we // should switch internet connection to it. Because the other modem // will lose data connection anyway. Loading Loading
src/java/com/android/internal/telephony/GsmCdmaCallTracker.java +9 −3 Original line number Diff line number Diff line Loading @@ -183,8 +183,10 @@ public class GsmCdmaCallTracker extends CallTracker { // Prior to phone switch to GSM, if CDMA has any emergency call // data will be in disabled state, after switching to GSM enable data. if (mIsInEmergencyCall) { if (!mPhone.isUsingNewDataStack()) { mPhone.getDataEnabledSettings().setInternalDataEnabled(true); } } } else { mConnections = new GsmCdmaConnection[MAX_CONNECTIONS_CDMA]; mPendingCallInEcm = false; Loading Loading @@ -398,7 +400,9 @@ public class GsmCdmaCallTracker extends CallTracker { //CDMA public void setIsInEmergencyCall() { mIsInEmergencyCall = true; if (!mPhone.isUsingNewDataStack()) { mPhone.getDataEnabledSettings().setInternalDataEnabled(false); } mPhone.notifyEmergencyCallRegistrants(true); mPhone.sendEmergencyCallStateChange(true); } Loading Loading @@ -1750,7 +1754,9 @@ public class GsmCdmaCallTracker extends CallTracker { } if (!inEcm) { // Re-initiate data connection if (!mPhone.isUsingNewDataStack()) { mPhone.getDataEnabledSettings().setInternalDataEnabled(true); } mPhone.notifyEmergencyCallRegistrants(false); } mPhone.sendEmergencyCallStateChange(false); Loading
src/java/com/android/internal/telephony/GsmCdmaPhone.java +26 −3 Original line number Diff line number Diff line Loading @@ -361,6 +361,7 @@ public class GsmCdmaPhone extends Phone { mSST.registerForNetworkAttached(this, EVENT_REGISTERED_TO_NETWORK, null); mSST.registerForVoiceRegStateOrRatChanged(this, EVENT_VRS_OR_RAT_CHANGED, null); // TODO: Remove SettingsObserver and provisioning events when DataEnabledSettings is removed mSettingsObserver = new SettingsObserver(context, this); mSettingsObserver.observe( Settings.Global.getUriFor(Settings.Global.DEVICE_PROVISIONED), Loading Loading @@ -2645,6 +2646,9 @@ public class GsmCdmaPhone extends Phone { @Override public boolean getDataRoamingEnabled() { if (isUsingNewDataStack()) { return getDataSettingsManager().isDataRoamingEnabled(); } if (getDcTracker(AccessNetworkConstants.TRANSPORT_TYPE_WWAN) != null) { return getDcTracker(AccessNetworkConstants.TRANSPORT_TYPE_WWAN).getDataRoamingEnabled(); } Loading @@ -2653,6 +2657,10 @@ public class GsmCdmaPhone extends Phone { @Override public void setDataRoamingEnabled(boolean enable) { if (isUsingNewDataStack()) { getDataSettingsManager().setDataRoamingEnabled(enable); return; } if (getDcTracker(AccessNetworkConstants.TRANSPORT_TYPE_WWAN) != null) { getDcTracker(AccessNetworkConstants.TRANSPORT_TYPE_WWAN) .setDataRoamingEnabledByUser(enable); Loading Loading @@ -2707,6 +2715,10 @@ public class GsmCdmaPhone extends Phone { */ @Override public boolean isUserDataEnabled() { if (isUsingNewDataStack()) { return getDataSettingsManager().isDataEnabledForReason( TelephonyManager.DATA_ENABLED_REASON_USER); } if (mDataEnabledSettings.isProvisioning()) { return mDataEnabledSettings.isProvisioningDataEnabled(); } else { Loading Loading @@ -3245,14 +3257,23 @@ public class GsmCdmaPhone extends Phone { case EVENT_SET_CARRIER_DATA_ENABLED: ar = (AsyncResult) msg.obj; boolean enabled = (boolean) ar.result; if (isUsingNewDataStack()) { getDataSettingsManager().setDataEnabled( TelephonyManager.DATA_ENABLED_REASON_CARRIER, enabled); return; } mDataEnabledSettings.setDataEnabled(TelephonyManager.DATA_ENABLED_REASON_CARRIER, enabled); break; case EVENT_DEVICE_PROVISIONED_CHANGE: if (!isUsingNewDataStack()) { mDataEnabledSettings.updateProvisionedChanged(); } break; case EVENT_DEVICE_PROVISIONING_DATA_SETTING_CHANGE: if (!isUsingNewDataStack()) { mDataEnabledSettings.updateProvisioningDataEnabled(); } break; case EVENT_GET_AVAILABLE_NETWORKS_DONE: ar = (AsyncResult) msg.obj; Loading Loading @@ -3748,7 +3769,9 @@ public class GsmCdmaPhone extends Phone { // send an Intent sendEmergencyCallbackModeChange(); // Re-initiate data connection if (!isUsingNewDataStack()) { mDataEnabledSettings.setInternalDataEnabled(true); } notifyEmergencyCallRegistrants(false); } mIsTestingEmergencyCallbackMode = false; Loading
src/java/com/android/internal/telephony/MultiSimSettingController.java +15 −5 Original line number Diff line number Diff line Loading @@ -790,11 +790,16 @@ public class MultiSimSettingController extends Handler { && phone.isUserDataEnabled() && !areSubscriptionsInSameGroup(defaultDataSub, phone.getSubId())) { log("setting data to false on " + phone.getSubId()); if (phone.isUsingNewDataStack()) { phone.getDataSettingsManager().setDataEnabled( TelephonyManager.DATA_ENABLED_REASON_USER, false); } else { phone.getDataEnabledSettings().setDataEnabled( TelephonyManager.DATA_ENABLED_REASON_USER, false); } } } } private boolean areSubscriptionsInSameGroup(int subId1, int subId2) { if (!SubscriptionManager.isUsableSubscriptionId(subId1) Loading Loading @@ -822,13 +827,18 @@ public class MultiSimSettingController extends Handler { int currentSubId = info.getSubscriptionId(); // TODO: simplify when setUserDataEnabled becomes singleton if (mSubController.isActiveSubId(currentSubId)) { // For active subscription, call setUserDataEnabled through DataEnabledSettings. // For active subscription, call setUserDataEnabled through DataSettingsManager. Phone phone = PhoneFactory.getPhone(mSubController.getPhoneId(currentSubId)); // If enable is true and it's not opportunistic subscription, we don't enable it, // as there can't e two // as there can't be two if (phone != null) { if (phone.isUsingNewDataStack()) { phone.getDataSettingsManager().setDataEnabled( TelephonyManager.DATA_ENABLED_REASON_USER, enable); } else { phone.getDataEnabledSettings().setUserDataEnabled(enable, false); } } } else { // For inactive subscription, directly write into global settings. GlobalSettingsHelper.setBoolean( Loading
src/java/com/android/internal/telephony/Phone.java +9 −0 Original line number Diff line number Diff line Loading @@ -78,6 +78,7 @@ import com.android.internal.R; import com.android.internal.annotations.VisibleForTesting; import com.android.internal.telephony.data.AccessNetworksManager; import com.android.internal.telephony.data.DataNetworkController; import com.android.internal.telephony.data.DataSettingsManager; import com.android.internal.telephony.data.LinkBandwidthEstimator; import com.android.internal.telephony.dataconnection.DataConnectionReasons; import com.android.internal.telephony.dataconnection.DataEnabledSettings; Loading Loading @@ -4990,6 +4991,14 @@ public abstract class Phone extends Handler implements PhoneInternalInterface { return mDataNetworkController; } /** * @return The data settings manager */ public @Nullable DataSettingsManager getDataSettingsManager() { if (mDataNetworkController == null) return null; return mDataNetworkController.getDataSettingsManager(); } /** * Used in unit tests to set whether the AllowedNetworkTypes is loaded from Db. Should not * be used otherwise. Loading
src/java/com/android/internal/telephony/PhoneSwitcher.java +57 −11 Original line number Diff line number Diff line Loading @@ -30,6 +30,7 @@ import static android.telephony.ims.stub.ImsRegistrationImplBase.REGISTRATION_TE import static java.util.Arrays.copyOf; import android.annotation.NonNull; import android.compat.annotation.UnsupportedAppUsage; import android.content.BroadcastReceiver; import android.content.Context; Loading Loading @@ -64,12 +65,14 @@ import android.telephony.ims.ImsReasonInfo; import android.telephony.ims.ImsRegistrationAttributes; import android.telephony.ims.RegistrationManager; import android.telephony.ims.stub.ImsRegistrationImplBase; import android.util.ArrayMap; import android.util.LocalLog; import com.android.ims.ImsException; import com.android.ims.ImsManager; import com.android.internal.annotations.VisibleForTesting; import com.android.internal.telephony.SubscriptionController.WatchedInt; import com.android.internal.telephony.data.DataSettingsManager.DataSettingsManagerCallback; import com.android.internal.telephony.dataconnection.ApnConfigTypeRepository; import com.android.internal.telephony.dataconnection.DcRequest; import com.android.internal.telephony.metrics.TelephonyMetrics; Loading @@ -86,6 +89,7 @@ import java.util.Calendar; import java.util.Collections; import java.util.HashSet; import java.util.List; import java.util.Map; import java.util.Set; import java.util.concurrent.CompletableFuture; Loading Loading @@ -309,6 +313,10 @@ public class PhoneSwitcher extends Handler { private List<Set<CommandException.Error>> mCurrentDdsSwitchFailure; /** Data settings manager callback. Key is the phone id. */ private final @NonNull Map<Integer, DataSettingsManagerCallback> mDataSettingsManagerCallbacks = new ArrayMap<>(); private class DefaultNetworkCallback extends ConnectivityManager.NetworkCallback { public int mExpectedSubId = SubscriptionManager.INVALID_SUBSCRIPTION_ID; public int mSwitchReason = TelephonyEvent.DataSwitch.Reason.DATA_SWITCH_REASON_UNKNOWN; Loading Loading @@ -477,18 +485,32 @@ public class PhoneSwitcher extends Handler { mActivePhoneRegistrants = new RegistrantList(); for (int i = 0; i < mActiveModemCount; i++) { mPhoneStates[i] = new PhoneState(); if (PhoneFactory.getPhone(i) != null) { PhoneFactory.getPhone(i).registerForEmergencyCallToggle( Phone phone = PhoneFactory.getPhone(i); if (phone != null) { phone.registerForEmergencyCallToggle( this, EVENT_EMERGENCY_TOGGLE, null); // TODO (b/135566422): combine register for both GsmCdmaPhone and ImsPhone. PhoneFactory.getPhone(i).registerForPreciseCallStateChanged( phone.registerForPreciseCallStateChanged( this, EVENT_PRECISE_CALL_STATE_CHANGED, null); if (PhoneFactory.getPhone(i).getImsPhone() != null) { PhoneFactory.getPhone(i).getImsPhone().registerForPreciseCallStateChanged( if (phone.getImsPhone() != null) { phone.getImsPhone().registerForPreciseCallStateChanged( this, EVENT_PRECISE_CALL_STATE_CHANGED, null); } PhoneFactory.getPhone(i).getDataEnabledSettings().registerForDataEnabledChanged( if (phone.isUsingNewDataStack()) { mDataSettingsManagerCallbacks.computeIfAbsent(phone.getPhoneId(), v -> new DataSettingsManagerCallback(this::post) { @Override public void onDataEnabledChanged(boolean enabled, @TelephonyManager.DataEnabledChangedReason int reason) { evaluateIfDataSwitchIsNeeded("EVENT_DATA_ENABLED_CHANGED"); }}); phone.getDataSettingsManager().registerCallback( mDataSettingsManagerCallbacks.get(phone.getPhoneId())); } else { phone.getDataEnabledSettings().registerForDataEnabledChanged( this, EVENT_DATA_ENABLED_CHANGED, null); } registerForImsRadioTechChange(context, i); } Set<CommandException.Error> ddsFailure = new HashSet<CommandException.Error>(); Loading Loading @@ -837,8 +859,22 @@ public class PhoneSwitcher extends Handler { phone.getImsPhone().registerForPreciseCallStateChanged( this, EVENT_PRECISE_CALL_STATE_CHANGED, null); } if (phone.isUsingNewDataStack()) { mDataSettingsManagerCallbacks.computeIfAbsent(phone.getPhoneId(), v -> new DataSettingsManagerCallback(this::post) { @Override public void onDataEnabledChanged(boolean enabled, @TelephonyManager.DataEnabledChangedReason int reason) { evaluateIfDataSwitchIsNeeded("EVENT_DATA_ENABLED_CHANGED"); } }); phone.getDataSettingsManager().registerCallback( mDataSettingsManagerCallbacks.get(phone.getPhoneId())); } else { phone.getDataEnabledSettings().registerForDataEnabledChanged( this, EVENT_DATA_ENABLED_CHANGED, null); } Set<CommandException.Error> ddsFailure = new HashSet<CommandException.Error>(); mCurrentDdsSwitchFailure.add(ddsFailure); Loading Loading @@ -1262,6 +1298,17 @@ public class PhoneSwitcher extends Handler { // requests. protected void updatePreferredDataPhoneId() { Phone voicePhone = findPhoneById(mPhoneIdInVoiceCall); boolean isDataEnabled = false; if (voicePhone != null) { if (voicePhone.isUsingNewDataStack()) { isDataEnabled = voicePhone.getDataSettingsManager() .isDataEnabled(ApnSetting.TYPE_DEFAULT); } else { isDataEnabled = voicePhone.getDataEnabledSettings() .isDataEnabled(ApnSetting.TYPE_DEFAULT); } } if (mEmergencyOverride != null && findPhoneById(mEmergencyOverride.mPhoneId) != null) { // Override DDS for emergency even if user data is not enabled, since it is an // emergency. Loading @@ -1270,8 +1317,7 @@ public class PhoneSwitcher extends Handler { log("updatePreferredDataPhoneId: preferred data overridden for emergency." + " phoneId = " + mEmergencyOverride.mPhoneId); mPreferredDataPhoneId = mEmergencyOverride.mPhoneId; } else if (voicePhone != null && voicePhone.getDataEnabledSettings().isDataEnabled( ApnSetting.TYPE_DEFAULT)) { } else if (isDataEnabled) { // If a phone is in call and user enabled its mobile data, we // should switch internet connection to it. Because the other modem // will lose data connection anyway. Loading