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

Commit 08983e1c authored by Jack Yu's avatar Jack Yu Committed by Automerger Merge Worker
Browse files

Hook DataSettingsManager to the new telephony data stack am: 98c9a39c am: 69581775

Original change: https://android-review.googlesource.com/c/platform/frameworks/opt/telephony/+/2017635

Change-Id: I9feeefca4eeeb49761da47fc8abaff92875e7c73
parents 1876b726 69581775
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
@@ -358,6 +358,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),
@@ -2629,6 +2630,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();
        }
@@ -2637,6 +2641,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);
@@ -2691,6 +2699,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 {
@@ -3249,14 +3261,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;
@@ -4889,6 +4890,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