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

Commit 09ee2e53 authored by Nathan Harold's avatar Nathan Harold
Browse files

Extract PLMN from Voice CellIdentity for Locale

The locale tracker needs to know what MCCs are seen,
and it doesn't matter whether the device registers
successfully on a network, simply camping on a tower
(even for emergency services only) is a strong indicator
of the current country. This change tries to use a
registered network operator from the IRadio::getOperator
command, but if that fails, it falls back to using the
PLMN from the voice operator which is reported even when
the device only camps for emergency services.

Bug: 136036974
Test: atest LocaleTrackerTest
Change-Id: I634aeb9fb95cc361b21b79f209a90dddf18f5896
parent be258cdd
Loading
Loading
Loading
Loading
+13 −4
Original line number Diff line number Diff line
@@ -3328,8 +3328,17 @@ public class ServiceStateTracker extends Handler {

            tm.setNetworkOperatorNumericForPhone(mPhone.getPhoneId(), operatorNumeric);

            if (isInvalidOperatorNumeric(operatorNumeric)) {
                if (DBG) log("operatorNumeric " + operatorNumeric + " is invalid");
            // If the OPERATOR command hasn't returned a valid operator, but if the device has
            // camped on a cell either to attempt registration or for emergency services, then
            // for purposes of setting the locale, we don't care if registration fails or is
            // incomplete.
            String localeOperator = isInvalidOperatorNumeric(operatorNumeric)
                    && (mCellIdentity != null)
                    ? mCellIdentity.getMccString() + mCellIdentity.getMncString()
                    : operatorNumeric;

            if (isInvalidOperatorNumeric(localeOperator)) {
                if (DBG) log("localeOperator " + localeOperator + " is invalid");
                // Passing empty string is important for the first update. The initial value of
                // operator numeric in locale tracker is null. The async update will allow getting
                // cell info from the modem instead of using the cached one.
@@ -3341,10 +3350,10 @@ public class ServiceStateTracker extends Handler {

                // Update IDD.
                if (!mPhone.isPhoneTypeGsm()) {
                    setOperatorIdd(operatorNumeric);
                    setOperatorIdd(localeOperator);
                }

                mLocaleTracker.updateOperatorNumeric(operatorNumeric);
                mLocaleTracker.updateOperatorNumeric(localeOperator);
            }

            tm.setNetworkRoamingForPhone(mPhone.getPhoneId(),