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

Commit 6dbb75fd authored by Jack Yu's avatar Jack Yu Committed by Gerrit Code Review
Browse files

Merge "Get rid of SIM record access in DcTracker"

parents a375b067 214b9fc6
Loading
Loading
Loading
Loading
+6 −7
Original line number Original line Diff line number Diff line
@@ -91,6 +91,7 @@ import com.android.internal.telephony.dataconnection.TransportManager;
import com.android.internal.telephony.emergency.EmergencyNumberTracker;
import com.android.internal.telephony.emergency.EmergencyNumberTracker;
import com.android.internal.telephony.gsm.GsmMmiCode;
import com.android.internal.telephony.gsm.GsmMmiCode;
import com.android.internal.telephony.gsm.SuppServiceNotification;
import com.android.internal.telephony.gsm.SuppServiceNotification;
import com.android.internal.telephony.imsphone.ImsPhoneMmiCode;
import com.android.internal.telephony.test.SimulatedRadioControl;
import com.android.internal.telephony.test.SimulatedRadioControl;
import com.android.internal.telephony.uicc.IccCardApplicationStatus.AppType;
import com.android.internal.telephony.uicc.IccCardApplicationStatus.AppType;
import com.android.internal.telephony.uicc.IccCardStatus;
import com.android.internal.telephony.uicc.IccCardStatus;
@@ -109,7 +110,6 @@ import com.android.internal.telephony.uicc.UiccProfile;
import com.android.internal.telephony.uicc.UiccSlot;
import com.android.internal.telephony.uicc.UiccSlot;
import com.android.internal.telephony.util.ArrayUtils;
import com.android.internal.telephony.util.ArrayUtils;
import com.android.telephony.Rlog;
import com.android.telephony.Rlog;
import com.android.internal.telephony.imsphone.ImsPhoneMmiCode;


import java.io.FileDescriptor;
import java.io.FileDescriptor;
import java.io.PrintWriter;
import java.io.PrintWriter;
@@ -3159,7 +3159,7 @@ public class GsmCdmaPhone extends Phone {
                                simOperatorNumeric);
                                simOperatorNumeric);
                    }
                    }
                }
                }
                updateDataConnectionTracker();
                updateCurrentCarrierInProvider();
            }
            }
        }
        }


@@ -4029,10 +4029,9 @@ public class GsmCdmaPhone extends Phone {
        return dialString;
        return dialString;
    }
    }


    /**
    @Override
     * @return operator numeric.
    @NonNull
     */
    public String getOperatorNumeric() {
    private String getOperatorNumeric() {
        String operatorNumeric = null;
        String operatorNumeric = null;
        if (isPhoneTypeGsm()) {
        if (isPhoneTypeGsm()) {
            IccRecords r = mIccRecords.get();
            IccRecords r = mIccRecords.get();
@@ -4074,7 +4073,7 @@ public class GsmCdmaPhone extends Phone {
                    + " operatorNumeric = " + operatorNumeric);
                    + " operatorNumeric = " + operatorNumeric);


        }
        }
        return operatorNumeric;
        return TextUtils.emptyIfNull(operatorNumeric);
    }
    }


    /**
    /**
+10 −10
Original line number Original line Diff line number Diff line
@@ -4044,16 +4044,6 @@ public abstract class Phone extends Handler implements PhoneInternalInterface {
        return getLocaleFromCarrierProperties();
        return getLocaleFromCarrierProperties();
    }
    }


    public void updateDataConnectionTracker() {
        if (mTransportManager != null) {
            for (int transport : mTransportManager.getAvailableTransports()) {
                if (getDcTracker(transport) != null) {
                    getDcTracker(transport).update();
                }
            }
        }
    }

    public boolean updateCurrentCarrierInProvider() {
    public boolean updateCurrentCarrierInProvider() {
        return false;
        return false;
    }
    }
@@ -4257,6 +4247,16 @@ public abstract class Phone extends Handler implements PhoneInternalInterface {
        return false;
        return false;
    }
    }


    /**
     * Get the SIM's MCC/MNC
     *
     * @return MCC/MNC in string format, empty string if not available.
     */
    @NonNull
    public String getOperatorNumeric() {
        return "";
    }

    public void dump(FileDescriptor fd, PrintWriter pw, String[] args) {
    public void dump(FileDescriptor fd, PrintWriter pw, String[] args) {
        pw.println("Phone: subId=" + getSubId());
        pw.println("Phone: subId=" + getSubId());
        pw.println(" mPhoneId=" + mPhoneId);
        pw.println(" mPhoneId=" + mPhoneId);
+0 −17
Original line number Original line Diff line number Diff line
@@ -1247,9 +1247,6 @@ public class SubscriptionController extends ISub.Stub {
                    if (DBG) logdl("[addSubInfoRecord] sim name = " + nameToSet);
                    if (DBG) logdl("[addSubInfoRecord] sim name = " + nameToSet);
                }
                }


                // Once the records are loaded, notify DcTracker
                PhoneFactory.getPhone(slotIndex).updateDataConnectionTracker();

                if (DBG) logdl("[addSubInfoRecord]- info size=" + sSlotIndexToSubIds.size());
                if (DBG) logdl("[addSubInfoRecord]- info size=" + sSlotIndexToSubIds.size());
            }
            }


@@ -2361,9 +2358,6 @@ public class SubscriptionController extends ISub.Stub {
                }
                }
            }
            }


            // FIXME is this still needed?
            updateAllDataConnectionTrackers();

            int previousDefaultSub = getDefaultSubId();
            int previousDefaultSub = getDefaultSubId();
            Settings.Global.putInt(mContext.getContentResolver(),
            Settings.Global.putInt(mContext.getContentResolver(),
                    Settings.Global.MULTI_SIM_DATA_CALL_SUBSCRIPTION, subId);
                    Settings.Global.MULTI_SIM_DATA_CALL_SUBSCRIPTION, subId);
@@ -2377,17 +2371,6 @@ public class SubscriptionController extends ISub.Stub {
        }
        }
    }
    }


    @UnsupportedAppUsage
    private void updateAllDataConnectionTrackers() {
        // Tell Phone Proxies to update data connection tracker
        int len = TelephonyManager.from(mContext).getActiveModemCount();
        if (DBG) logd("[updateAllDataConnectionTrackers] activeModemCount=" + len);
        for (int phoneId = 0; phoneId < len; phoneId++) {
            if (DBG) logd("[updateAllDataConnectionTrackers] phoneId=" + phoneId);
            PhoneFactory.getPhone(phoneId).updateDataConnectionTracker();
        }
    }

    @UnsupportedAppUsage
    @UnsupportedAppUsage
    private void broadcastDefaultDataSubIdChanged(int subId) {
    private void broadcastDefaultDataSubIdChanged(int subId) {
        // Broadcast an Intent for default data sub change
        // Broadcast an Intent for default data sub change
+1 −1
Original line number Original line Diff line number Diff line
@@ -106,7 +106,7 @@ public class DataConnectionReasons {


        // Belows are all hard failure reasons.
        // Belows are all hard failure reasons.
        NOT_ATTACHED(true),
        NOT_ATTACHED(true),
        RECORD_NOT_LOADED(true),
        SIM_NOT_READY(true),
        INVALID_PHONE_STATE(true),
        INVALID_PHONE_STATE(true),
        CONCURRENT_VOICE_DATA_NOT_ALLOWED(true),
        CONCURRENT_VOICE_DATA_NOT_ALLOWED(true),
        PS_RESTRICTED(true),
        PS_RESTRICTED(true),
+89 −178
Original line number Original line Diff line number Diff line
@@ -80,7 +80,6 @@ import android.telephony.PreciseDataConnectionState;
import android.telephony.ServiceState;
import android.telephony.ServiceState;
import android.telephony.ServiceState.RilRadioTechnology;
import android.telephony.ServiceState.RilRadioTechnology;
import android.telephony.SubscriptionManager;
import android.telephony.SubscriptionManager;
import android.telephony.SubscriptionManager.OnSubscriptionsChangedListener;
import android.telephony.SubscriptionPlan;
import android.telephony.SubscriptionPlan;
import android.telephony.TelephonyManager;
import android.telephony.TelephonyManager;
import android.telephony.cdma.CdmaCellLocation;
import android.telephony.cdma.CdmaCellLocation;
@@ -109,8 +108,6 @@ import com.android.internal.telephony.dataconnection.DataConnectionReasons.DataA
import com.android.internal.telephony.dataconnection.DataConnectionReasons.DataDisallowedReasonType;
import com.android.internal.telephony.dataconnection.DataConnectionReasons.DataDisallowedReasonType;
import com.android.internal.telephony.dataconnection.DataEnabledSettings.DataEnabledChangedReason;
import com.android.internal.telephony.dataconnection.DataEnabledSettings.DataEnabledChangedReason;
import com.android.internal.telephony.metrics.TelephonyMetrics;
import com.android.internal.telephony.metrics.TelephonyMetrics;
import com.android.internal.telephony.uicc.IccRecords;
import com.android.internal.telephony.uicc.UiccController;
import com.android.internal.telephony.util.ArrayUtils;
import com.android.internal.telephony.util.ArrayUtils;
import com.android.internal.telephony.util.TelephonyUtils;
import com.android.internal.telephony.util.TelephonyUtils;
import com.android.internal.util.AsyncChannel;
import com.android.internal.util.AsyncChannel;
@@ -132,7 +129,6 @@ import java.util.Set;
import java.util.concurrent.ConcurrentHashMap;
import java.util.concurrent.ConcurrentHashMap;
import java.util.concurrent.atomic.AtomicBoolean;
import java.util.concurrent.atomic.AtomicBoolean;
import java.util.concurrent.atomic.AtomicInteger;
import java.util.concurrent.atomic.AtomicInteger;
import java.util.concurrent.atomic.AtomicReference;
import java.util.regex.Matcher;
import java.util.regex.Matcher;
import java.util.regex.Pattern;
import java.util.regex.Pattern;
import java.util.stream.Collectors;
import java.util.stream.Collectors;
@@ -340,6 +336,8 @@ public class DcTracker extends Handler {
    private final Map<String, Integer> m5GIconMapping = new HashMap<>();
    private final Map<String, Integer> m5GIconMapping = new HashMap<>();
    private String mDataIconPattern = "";
    private String mDataIconPattern = "";


    private int mSubId = SubscriptionManager.INVALID_SUBSCRIPTION_ID;

    private final BroadcastReceiver mIntentReceiver = new BroadcastReceiver () {
    private final BroadcastReceiver mIntentReceiver = new BroadcastReceiver () {
        @Override
        @Override
        public void onReceive(Context context, Intent intent) {
        public void onReceive(Context context, Intent intent) {
@@ -368,54 +366,9 @@ public class DcTracker extends Handler {
                if (DBG) log("Provisioning apn alarm");
                if (DBG) log("Provisioning apn alarm");
                onActionIntentProvisioningApnAlarm(intent);
                onActionIntentProvisioningApnAlarm(intent);
            } else if (action.equals(CarrierConfigManager.ACTION_CARRIER_CONFIG_CHANGED)) {
            } else if (action.equals(CarrierConfigManager.ACTION_CARRIER_CONFIG_CHANGED)) {
                if (DBG) log("received carrier config change");
                sendMessage(obtainMessage(DctConstants.EVENT_CARRIER_CONFIG_CHANGED,
                if (mIccRecords.get() != null && mIccRecords.get().getRecordsLoaded()) {
                        intent.getIntExtra(SubscriptionManager.EXTRA_SUBSCRIPTION_INDEX,
                    setDefaultDataRoamingEnabled();
                                SubscriptionManager.INVALID_SUBSCRIPTION_ID), 0));
                }
                String nr5GIconConfiguration = CarrierConfigManager.getDefaultConfig().getString(
                        CarrierConfigManager.KEY_5G_ICON_CONFIGURATION_STRING);
                String[] bandwidths = CarrierConfigManager.getDefaultConfig().getStringArray(
                        CarrierConfigManager.KEY_BANDWIDTH_STRING_ARRAY);
                boolean useLte = false;
                mDataIconPattern = CarrierConfigManager.getDefaultConfig().getString(
                        CarrierConfigManager.KEY_SHOW_CARRIER_DATA_ICON_PATTERN_STRING);
                CarrierConfigManager configManager = (CarrierConfigManager) mPhone.getContext()
                        .getSystemService(Context.CARRIER_CONFIG_SERVICE);
                if (configManager != null) {
                    PersistableBundle b = configManager.getConfigForSubId(mPhone.getSubId());
                    if (b != null) {
                        if (b.getString(CarrierConfigManager.KEY_5G_ICON_CONFIGURATION_STRING)
                                != null) {
                            nr5GIconConfiguration = b.getString(
                                    CarrierConfigManager.KEY_5G_ICON_CONFIGURATION_STRING);
                        }
                        if (b.getString(CarrierConfigManager
                                .KEY_SHOW_CARRIER_DATA_ICON_PATTERN_STRING) != null) {
                            mDataIconPattern = b.getString(
                                    CarrierConfigManager.KEY_SHOW_CARRIER_DATA_ICON_PATTERN_STRING);
                        }
                        if (b.getStringArray(CarrierConfigManager.KEY_BANDWIDTH_STRING_ARRAY)
                                != null) {
                            bandwidths = b.getStringArray(
                                    CarrierConfigManager.KEY_BANDWIDTH_STRING_ARRAY);
                        }
                        useLte = b.getBoolean(CarrierConfigManager
                                .KEY_BANDWIDTH_NR_NSA_USE_LTE_VALUE_FOR_UPSTREAM_BOOL);
                        mHysteresisTimeSec = b.getInt(
                                CarrierConfigManager.KEY_5G_ICON_DISPLAY_GRACE_PERIOD_SEC_INT);
                        mWatchdogTimeMs = b.getLong(
                                CarrierConfigManager.KEY_5G_WATCHDOG_TIME_MS_LONG);
                        mAllUnmetered = b.getBoolean(
                                CarrierConfigManager.KEY_UNMETERED_NR_NSA_BOOL);
                        mMmwaveUnmetered = b.getBoolean(
                                CarrierConfigManager.KEY_UNMETERED_NR_NSA_MMWAVE_BOOL);
                        mSub6Unmetered = b.getBoolean(
                                CarrierConfigManager.KEY_UNMETERED_NR_NSA_SUB6_BOOL);
                    }
                }
                sendMessage(obtainMessage(DctConstants.EVENT_UPDATE_CARRIER_CONFIGS,
                        useLte ? 1 : 0, 0 /* unused */,
                        new Pair<>(bandwidths, nr5GIconConfiguration)));
            } else {
            } else {
                if (DBG) log("onReceive: Unknown action=" + action);
                if (DBG) log("onReceive: Unknown action=" + action);
            }
            }
@@ -442,33 +395,6 @@ public class DcTracker extends Handler {
        }
        }
    };
    };


    private SubscriptionManager mSubscriptionManager;
    private final DctOnSubscriptionsChangedListener
            mOnSubscriptionsChangedListener = new DctOnSubscriptionsChangedListener();

    private class DctOnSubscriptionsChangedListener extends OnSubscriptionsChangedListener {
        public final AtomicInteger mPreviousSubId =
                new AtomicInteger(SubscriptionManager.INVALID_SUBSCRIPTION_ID);

        /**
         * Callback invoked when there is any change to any SubscriptionInfo. Typically
         * this method invokes {@link SubscriptionManager#getActiveSubscriptionInfoList}
         */
        @Override
        public void onSubscriptionsChanged() {
            if (DBG) log("SubscriptionListener.onSubscriptionInfoChanged");
            // Set the network type, in case the radio does not restore it.
            int subId = mPhone.getSubId();
            if (SubscriptionManager.isValidSubscriptionId(subId)) {
                registerSettingsObserver();
            }
            if (SubscriptionManager.isValidSubscriptionId(subId) &&
                    mPreviousSubId.getAndSet(subId) != subId) {
                onRecordsLoadedOrSubIdChanged();
            }
        }
    };

    private NetworkPolicyManager mNetworkPolicyManager;
    private NetworkPolicyManager mNetworkPolicyManager;
    private final NetworkPolicyManager.SubscriptionCallback mSubscriptionCallback =
    private final NetworkPolicyManager.SubscriptionCallback mSubscriptionCallback =
            new NetworkPolicyManager.SubscriptionCallback() {
            new NetworkPolicyManager.SubscriptionCallback() {
@@ -611,8 +537,6 @@ public class DcTracker extends Handler {


    // member variables
    // member variables
    protected final Phone mPhone;
    protected final Phone mPhone;
    private final UiccController mUiccController;
    protected final AtomicReference<IccRecords> mIccRecords = new AtomicReference<IccRecords>();
    private DctConstants.Activity mActivity = DctConstants.Activity.NONE;
    private DctConstants.Activity mActivity = DctConstants.Activity.NONE;
    private DctConstants.State mState = DctConstants.State.IDLE;
    private DctConstants.State mState = DctConstants.State.IDLE;
    private final Handler mDataConnectionTracker;
    private final Handler mDataConnectionTracker;
@@ -746,8 +670,6 @@ public class DcTracker extends Handler {
        mDataServiceManager = new DataServiceManager(phone, transportType, tagSuffix);
        mDataServiceManager = new DataServiceManager(phone, transportType, tagSuffix);


        mResolver = mPhone.getContext().getContentResolver();
        mResolver = mPhone.getContext().getContentResolver();
        mUiccController = UiccController.getInstance();
        mUiccController.registerForIccChanged(this, DctConstants.EVENT_ICC_CHANGED, null);
        mAlarmManager =
        mAlarmManager =
                (AlarmManager) mPhone.getContext().getSystemService(Context.ALARM_SERVICE);
                (AlarmManager) mPhone.getContext().getSystemService(Context.ALARM_SERVICE);


@@ -772,9 +694,6 @@ public class DcTracker extends Handler {
        SharedPreferences sp = PreferenceManager.getDefaultSharedPreferences(mPhone.getContext());
        SharedPreferences sp = PreferenceManager.getDefaultSharedPreferences(mPhone.getContext());
        mAutoAttachEnabled.set(sp.getBoolean(Phone.DATA_DISABLED_ON_BOOT_KEY, false));
        mAutoAttachEnabled.set(sp.getBoolean(Phone.DATA_DISABLED_ON_BOOT_KEY, false));


        mSubscriptionManager = SubscriptionManager.from(mPhone.getContext());
        mSubscriptionManager.addOnSubscriptionsChangedListener(mOnSubscriptionsChangedListener);

        mNetworkPolicyManager = (NetworkPolicyManager) mPhone.getContext()
        mNetworkPolicyManager = (NetworkPolicyManager) mPhone.getContext()
                .getSystemService(Context.NETWORK_POLICY_SERVICE);
                .getSystemService(Context.NETWORK_POLICY_SERVICE);
        mNetworkPolicyManager.registerSubscriptionCallback(mSubscriptionCallback);
        mNetworkPolicyManager.registerSubscriptionCallback(mSubscriptionCallback);
@@ -787,7 +706,6 @@ public class DcTracker extends Handler {


        mDataConnectionTracker = this;
        mDataConnectionTracker = this;
        registerForAllEvents();
        registerForAllEvents();
        update();
        mApnObserver = new ApnChangeObserver();
        mApnObserver = new ApnChangeObserver();
        phone.getContext().getContentResolver().registerContentObserver(
        phone.getContext().getContentResolver().registerContentObserver(
                Telephony.Carriers.CONTENT_URI, true, mApnObserver);
                Telephony.Carriers.CONTENT_URI, true, mApnObserver);
@@ -809,7 +727,6 @@ public class DcTracker extends Handler {
        mTelephonyManager = null;
        mTelephonyManager = null;
        mAlarmManager = null;
        mAlarmManager = null;
        mPhone = null;
        mPhone = null;
        mUiccController = null;
        mDataConnectionTracker = null;
        mDataConnectionTracker = null;
        mProvisionActionName = null;
        mProvisionActionName = null;
        mSettingsObserver = new SettingsObserver(null, this);
        mSettingsObserver = new SettingsObserver(null, this);
@@ -887,11 +804,8 @@ public class DcTracker extends Handler {


        mIsDisposed = true;
        mIsDisposed = true;
        mPhone.getContext().unregisterReceiver(mIntentReceiver);
        mPhone.getContext().unregisterReceiver(mIntentReceiver);
        mUiccController.unregisterForIccChanged(this);
        mSettingsObserver.unobserve();
        mSettingsObserver.unobserve();


        mSubscriptionManager
                .removeOnSubscriptionsChangedListener(mOnSubscriptionsChangedListener);
        mNetworkPolicyManager.unregisterSubscriptionCallback(mSubscriptionCallback);
        mNetworkPolicyManager.unregisterSubscriptionCallback(mSubscriptionCallback);
        mDcc.dispose();
        mDcc.dispose();
        mDcTesterFailBringUpAll.dispose();
        mDcTesterFailBringUpAll.dispose();
@@ -913,11 +827,6 @@ public class DcTracker extends Handler {
            mPhone.mCi.unregisterForPcoData(this);
            mPhone.mCi.unregisterForPcoData(this);
        }
        }


        IccRecords r = mIccRecords.get();
        if (r != null) {
            r.unregisterForRecordsLoaded(this);
            mIccRecords.set(null);
        }
        mPhone.getCallTracker().unregisterForVoiceCallEnded(this);
        mPhone.getCallTracker().unregisterForVoiceCallEnded(this);
        mPhone.getCallTracker().unregisterForVoiceCallStarted(this);
        mPhone.getCallTracker().unregisterForVoiceCallStarted(this);
        unregisterServiceStateTrackerEvents();
        unregisterServiceStateTrackerEvents();
@@ -1349,8 +1258,6 @@ public class DcTracker extends Handler {
            radioStateFromCarrier = true;
            radioStateFromCarrier = true;
        }
        }


        boolean recordsLoaded = mIccRecords.get() != null && mIccRecords.get().getRecordsLoaded();

        boolean defaultDataSelected = SubscriptionManager.isValidSubscriptionId(
        boolean defaultDataSelected = SubscriptionManager.isValidSubscriptionId(
                SubscriptionManager.getDefaultDataSubscriptionId());
                SubscriptionManager.getDefaultDataSubscriptionId());


@@ -1404,8 +1311,8 @@ public class DcTracker extends Handler {
        if (!attachedState && !shouldAutoAttach() && requestType != REQUEST_TYPE_HANDOVER) {
        if (!attachedState && !shouldAutoAttach() && requestType != REQUEST_TYPE_HANDOVER) {
            reasons.add(DataDisallowedReasonType.NOT_ATTACHED);
            reasons.add(DataDisallowedReasonType.NOT_ATTACHED);
        }
        }
        if (!recordsLoaded) {
        if (mPhone.getSubId() == SubscriptionManager.INVALID_SUBSCRIPTION_ID) {
            reasons.add(DataDisallowedReasonType.RECORD_NOT_LOADED);
            reasons.add(DataDisallowedReasonType.SIM_NOT_READY);
        }
        }
        if (phoneState != PhoneConstants.State.IDLE
        if (phoneState != PhoneConstants.State.IDLE
                && !mPhone.getServiceStateTracker().isConcurrentVoiceAndDataAllowed()) {
                && !mPhone.getServiceStateTracker().isConcurrentVoiceAndDataAllowed()) {
@@ -2289,17 +2196,24 @@ public class DcTracker extends Handler {
        removeMessages(DctConstants.EVENT_DATA_RECONNECT, apnContext);
        removeMessages(DctConstants.EVENT_DATA_RECONNECT, apnContext);
    }
    }


    protected void onRecordsLoadedOrSubIdChanged() {
    private void onSubscriptionChanged() {
        if (DBG) log("onRecordsLoadedOrSubIdChanged: createAllApnList");
        if (DBG) log("onSubscriptionChanged");
        if (mTransportType == AccessNetworkConstants.TRANSPORT_TYPE_WWAN) {
        if (mTransportType == AccessNetworkConstants.TRANSPORT_TYPE_WWAN) {
            // Auto attach is for cellular only.
            // Auto attach is for cellular only.
            mAutoAttachOnCreationConfig = mPhone.getContext().getResources()
            mAutoAttachOnCreationConfig = mPhone.getContext().getResources()
                    .getBoolean(com.android.internal.R.bool.config_auto_attach_data_on_creation);
                    .getBoolean(com.android.internal.R.bool.config_auto_attach_data_on_creation);
        }
        }


        mAutoAttachEnabled.set(false);
        setDefaultDataRoamingEnabled();
        read5GConfiguration();
        registerSettingsObserver();

        createAllApnList();
        createAllApnList();
        setDataProfilesAsNeeded();
        setDataProfilesAsNeeded();
        if (mPhone.getSubId() != SubscriptionManager.INVALID_SUBSCRIPTION_ID) {
            setInitialAttachApn();
            setInitialAttachApn();
        }
        mPhone.notifyAllActiveDataConnections();
        mPhone.notifyAllActiveDataConnections();
        setupDataOnAllConnectableApns(Phone.REASON_SIM_LOADED, RetryFailures.ALWAYS);
        setupDataOnAllConnectableApns(Phone.REASON_SIM_LOADED, RetryFailures.ALWAYS);
    }
    }
@@ -2312,8 +2226,6 @@ public class DcTracker extends Handler {
        mAutoAttachOnCreationConfig = false;
        mAutoAttachOnCreationConfig = false;
        // Clear auto attach as modem is expected to do a new attach once SIM is ready
        // Clear auto attach as modem is expected to do a new attach once SIM is ready
        mAutoAttachEnabled.set(false);
        mAutoAttachEnabled.set(false);
        mOnSubscriptionsChangedListener.mPreviousSubId.set(
                SubscriptionManager.INVALID_SUBSCRIPTION_ID);
        // In no-sim case, we should still send the emergency APN to the modem, if there is any.
        // In no-sim case, we should still send the emergency APN to the modem, if there is any.
        createAllApnList();
        createAllApnList();
        setDataProfilesAsNeeded();
        setDataProfilesAsNeeded();
@@ -3152,8 +3064,7 @@ public class DcTracker extends Handler {
     */
     */
    protected void createAllApnList() {
    protected void createAllApnList() {
        mAllApnSettings.clear();
        mAllApnSettings.clear();
        IccRecords r = mIccRecords.get();
        String operator = mPhone.getOperatorNumeric();
        String operator = (r != null) ? r.getOperatorNumeric() : "";


        // ORDER BY Telephony.Carriers._ID ("_id")
        // ORDER BY Telephony.Carriers._ID ("_id")
        Cursor cursor = mPhone.getContext().getContentResolver().query(
        Cursor cursor = mPhone.getContext().getContentResolver().query(
@@ -3296,8 +3207,7 @@ public class DcTracker extends Handler {
            }
            }
        }
        }


        IccRecords r = mIccRecords.get();
        String operator = mPhone.getOperatorNumeric();
        String operator = (r != null) ? r.getOperatorNumeric() : "";


        // This is a workaround for a bug (7305641) where we don't failover to other
        // This is a workaround for a bug (7305641) where we don't failover to other
        // suitable APNs if our preferred APN fails.  On prepaid ATT sims we need to
        // suitable APNs if our preferred APN fails.  On prepaid ATT sims we need to
@@ -3319,8 +3229,7 @@ public class DcTracker extends Handler {
            log("buildWaitingApns: usePreferred=" + usePreferred
            log("buildWaitingApns: usePreferred=" + usePreferred
                    + " canSetPreferApn=" + mCanSetPreferApn
                    + " canSetPreferApn=" + mCanSetPreferApn
                    + " mPreferredApn=" + mPreferredApn
                    + " mPreferredApn=" + mPreferredApn
                    + " operator=" + operator + " radioTech=" + radioTech
                    + " operator=" + operator + " radioTech=" + radioTech);
                    + " IccRecords r=" + r);
        }
        }


        if (usePreferred && mCanSetPreferApn && mPreferredApn != null &&
        if (usePreferred && mCanSetPreferApn && mPreferredApn != null &&
@@ -3490,17 +3399,6 @@ public class DcTracker extends Handler {
        int generation;
        int generation;
        int requestType;
        int requestType;
        switch (msg.what) {
        switch (msg.what) {
            case DctConstants.EVENT_RECORDS_LOADED:
                // If onRecordsLoadedOrSubIdChanged() is not called here, it should be called on
                // onSubscriptionsChanged() when a valid subId is available.
                int subId = mPhone.getSubId();
                if (SubscriptionManager.isValidSubscriptionId(subId)) {
                    onRecordsLoadedOrSubIdChanged();
                } else {
                    log("Ignoring EVENT_RECORDS_LOADED as subId is not valid: " + subId);
                }
                break;

            case DctConstants.EVENT_DATA_CONNECTION_DETACHED:
            case DctConstants.EVENT_DATA_CONNECTION_DETACHED:
                onDataConnectionDetached();
                onDataConnectionDetached();
                break;
                break;
@@ -3802,10 +3700,6 @@ public class DcTracker extends Handler {
                        isProvApn ? DctConstants.ENABLED : DctConstants.DISABLED);
                        isProvApn ? DctConstants.ENABLED : DctConstants.DISABLED);
                break;
                break;
            }
            }
            case DctConstants.EVENT_ICC_CHANGED: {
                onUpdateIcc();
                break;
            }
            case DctConstants.EVENT_RESTART_RADIO: {
            case DctConstants.EVENT_RESTART_RADIO: {
                restartRadio();
                restartRadio();
                break;
                break;
@@ -3856,10 +3750,8 @@ public class DcTracker extends Handler {
                mWatchdog = false;
                mWatchdog = false;
                reevaluateUnmeteredConnections();
                reevaluateUnmeteredConnections();
                break;
                break;
            case DctConstants.EVENT_UPDATE_CARRIER_CONFIGS:
            case DctConstants.EVENT_CARRIER_CONFIG_CHANGED:
                Pair<String[], String> configPair = (Pair<String[], String>) msg.obj;
                onCarrierConfigChanged(msg.arg1);
                updateLinkBandwidths(configPair.first, msg.arg1 == 1);
                update5GIconMapping(configPair.second);
                break;
                break;
            default:
            default:
                Rlog.e("DcTracker", "Unhandled event=" + msg);
                Rlog.e("DcTracker", "Unhandled event=" + msg);
@@ -3898,38 +3790,6 @@ public class DcTracker extends Handler {
        return cid;
        return cid;
    }
    }


    private IccRecords getUiccRecords(int appFamily) {
        return mUiccController.getIccRecords(mPhone.getPhoneId(), appFamily);
    }


    private void onUpdateIcc() {
        if (mUiccController == null ) {
            return;
        }

        IccRecords newIccRecords = getUiccRecords(UiccController.APP_FAM_3GPP);

        IccRecords r = mIccRecords.get();
        if (r != newIccRecords) {
            if (r != null) {
                log("Removing stale icc objects.");
                r.unregisterForRecordsLoaded(this);
                mIccRecords.set(null);
            }
            if (newIccRecords != null) {
                if (SubscriptionManager.isValidSubscriptionId(mPhone.getSubId())) {
                    log("New records found.");
                    mIccRecords.set(newIccRecords);
                    newIccRecords.registerForRecordsLoaded(
                            this, DctConstants.EVENT_RECORDS_LOADED, null);
                }
            } else {
                onSimNotReady();
            }
        }
    }

    /**
    /**
     * Update link bandwidth estimate default values from carrier config.
     * Update link bandwidth estimate default values from carrier config.
     * @param bandwidths String array of "RAT:upstream,downstream" for each RAT
     * @param bandwidths String array of "RAT:upstream,downstream" for each RAT
@@ -4001,21 +3861,6 @@ public class DcTracker extends Handler {
        }
        }
    }
    }


    /**
     * Update DcTracker.
     *
     * TODO: This should be cleaned up. DcTracker should listen to those events.
     */
    public void update() {
        log("update sub = " + mPhone.getSubId());
        log("update(): Active DDS, register for all events now!");
        onUpdateIcc();

        mAutoAttachEnabled.set(false);

        mPhone.updateCurrentCarrierInProvider();
    }

    @VisibleForTesting
    @VisibleForTesting
    public boolean shouldAutoAttach() {
    public boolean shouldAutoAttach() {
        if (mAutoAttachEnabled.get()) return true;
        if (mAutoAttachEnabled.get()) return true;
@@ -4091,6 +3936,7 @@ public class DcTracker extends Handler {
    }
    }


    private boolean reevaluateUnmeteredConnections() {
    private boolean reevaluateUnmeteredConnections() {
        log("reevaluateUnmeteredConnections");
        if (isNetworkTypeUnmetered(NETWORK_TYPE_NR) || isFrequencyRangeUnmetered()) {
        if (isNetworkTypeUnmetered(NETWORK_TYPE_NR) || isFrequencyRangeUnmetered()) {
            if (DBG) log("NR NSA is unmetered");
            if (DBG) log("NR NSA is unmetered");
            if (mPhone.getServiceState().getNrState()
            if (mPhone.getServiceState().getNrState()
@@ -4427,7 +4273,7 @@ public class DcTracker extends Handler {
     * PLMN name,APN name are not mandatory parameters
     * PLMN name,APN name are not mandatory parameters
     */
     */
    private void initEmergencyApnSetting() {
    private void initEmergencyApnSetting() {
        // Operator Numeric is not available when sim records are not loaded.
        // Operator Numeric is not available when SIM is not ready.
        // Query Telephony.db with APN type as EPDN request does not
        // Query Telephony.db with APN type as EPDN request does not
        // require APN name, plmn and all operators support same APN config.
        // require APN name, plmn and all operators support same APN config.
        // DB will contain only one entry for Emergency APN
        // DB will contain only one entry for Emergency APN
@@ -5228,4 +5074,69 @@ public class DcTracker extends Handler {
        }
        }
        return ServiceState.RIL_RADIO_TECHNOLOGY_UNKNOWN;
        return ServiceState.RIL_RADIO_TECHNOLOGY_UNKNOWN;
    }
    }

    // TODO: Move icon related to display info controller.
    private void read5GConfiguration() {
        if (DBG) log("read5GConfiguration");
        String nr5GIconConfiguration = CarrierConfigManager.getDefaultConfig().getString(
                CarrierConfigManager.KEY_5G_ICON_CONFIGURATION_STRING);
        String[] bandwidths = CarrierConfigManager.getDefaultConfig().getStringArray(
                CarrierConfigManager.KEY_BANDWIDTH_STRING_ARRAY);
        boolean useLte = false;
        mDataIconPattern = CarrierConfigManager.getDefaultConfig().getString(
                CarrierConfigManager.KEY_SHOW_CARRIER_DATA_ICON_PATTERN_STRING);
        CarrierConfigManager configManager = (CarrierConfigManager) mPhone.getContext()
                .getSystemService(Context.CARRIER_CONFIG_SERVICE);
        if (configManager != null) {
            PersistableBundle b = configManager.getConfigForSubId(mPhone.getSubId());
            if (b != null) {
                if (b.getString(CarrierConfigManager.KEY_5G_ICON_CONFIGURATION_STRING)
                        != null) {
                    nr5GIconConfiguration = b.getString(
                            CarrierConfigManager.KEY_5G_ICON_CONFIGURATION_STRING);
                }
                if (b.getString(CarrierConfigManager
                        .KEY_SHOW_CARRIER_DATA_ICON_PATTERN_STRING) != null) {
                    mDataIconPattern = b.getString(
                            CarrierConfigManager.KEY_SHOW_CARRIER_DATA_ICON_PATTERN_STRING);
                }
                if (b.getStringArray(CarrierConfigManager.KEY_BANDWIDTH_STRING_ARRAY)
                        != null) {
                    bandwidths = b.getStringArray(
                            CarrierConfigManager.KEY_BANDWIDTH_STRING_ARRAY);
                }
                useLte = b.getBoolean(CarrierConfigManager
                        .KEY_BANDWIDTH_NR_NSA_USE_LTE_VALUE_FOR_UPSTREAM_BOOL);
                mHysteresisTimeSec = b.getInt(
                        CarrierConfigManager.KEY_5G_ICON_DISPLAY_GRACE_PERIOD_SEC_INT);
                mWatchdogTimeMs = b.getLong(
                        CarrierConfigManager.KEY_5G_WATCHDOG_TIME_MS_LONG);
                mAllUnmetered = b.getBoolean(
                        CarrierConfigManager.KEY_UNMETERED_NR_NSA_BOOL);
                mMmwaveUnmetered = b.getBoolean(
                        CarrierConfigManager.KEY_UNMETERED_NR_NSA_MMWAVE_BOOL);
                mSub6Unmetered = b.getBoolean(
                        CarrierConfigManager.KEY_UNMETERED_NR_NSA_SUB6_BOOL);
            }
        }

        updateLinkBandwidths(bandwidths, useLte);
        update5GIconMapping(nr5GIconConfiguration);
    }

    // This handles carrier config changed event. We intentionally to use this for SIM loaded/absent
    // event. There are several data setup related configuration stored in carrier config. We have
    // to wait carrier config ready before we can setup a data.
    private void onCarrierConfigChanged(int subId) {
        // TODO: Remove this check after b/152149072 is fixed because carrier config might
        // actually change without sub id change.
        if (mSubId == subId) return;
        mSubId = subId;
        if (DBG) log("onCarrierConfigChanged subId=" + subId);
        if (SubscriptionManager.isValidSubscriptionId(subId)) {
            onSubscriptionChanged();
        } else {
            onSimNotReady();
        }
    }
}
}
Loading