Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 9616626c authored by TreeHugger Robot's avatar TreeHugger Robot Committed by Android (Google) Code Review
Browse files

Merge "Hook DataSettingsManager to the new telephony data stack"

parents f52a8ed3 45d5f58d
Loading
Loading
Loading
Loading
+9 −3
Original line number Diff line number Diff line
@@ -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;
@@ -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);
    }
@@ -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);
+26 −3
Original line number Diff line number Diff line
@@ -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),
@@ -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();
        }
@@ -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);
@@ -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 {
@@ -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;
@@ -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;
+15 −5
Original line number Diff line number Diff line
@@ -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)
@@ -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(
+9 −0
Original line number Diff line number Diff line
@@ -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;
@@ -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.
+57 −11
Original line number Diff line number Diff line
@@ -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;
@@ -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;
@@ -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;

@@ -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;
@@ -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>();
@@ -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);
@@ -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.
@@ -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