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

Commit cdd0ef91 authored by Chris Manton's avatar Chris Manton
Browse files

Add override check for home network carrier service API

Bug: 20828356
Change-Id: I620d513445de65fee47016a6b8791f7e0d502b94
parent 1d7647ae
Loading
Loading
Loading
Loading
+16 −6
Original line number Diff line number Diff line
@@ -1090,15 +1090,25 @@ public abstract class ServiceStateTracker extends Handler {
        }
    }

    /**
     * Check if device is non-roaming and always on home network.
     *
     * @param b carrier config bundle obtained from CarrierConfigManager
     * @return true if network is always on home network, false otherwise
     * @see CarrierConfigManager
     */
    protected final boolean alwaysOnHomeNetwork(BaseBundle b) {
        return b.getBoolean(CarrierConfigManager.KEY_FORCE_HOME_NETWORK_BOOL);
    }

    /**
     * Check if the network identifier has membership in the set of
     * network identifiers stored in the carrier config bundle.
     *
     * @param b a carrier config bundle object
     * @param b carrier config bundle obtained from CarrierConfigManager
     * @param network The network identifier to check network existence in bundle
     * @param key The key to index into the bundle presenting a string array of
     *            networks to check membership
     *
     * @return true if network has membership in bundle networks, false otherwise
     * @see CarrierConfigManager
     */
@@ -1111,19 +1121,19 @@ public abstract class ServiceStateTracker extends Handler {
        return false;
    }

    protected boolean isRoamingInGsmNetwork(BaseBundle b, String network) {
    protected final boolean isRoamingInGsmNetwork(BaseBundle b, String network) {
        return isInNetwork(b, network, CarrierConfigManager.KEY_GSM_ROAMING_NETWORKS_STRING_ARRAY);
    }

    protected boolean isNonRoamingInGsmNetwork(BaseBundle b, String network) {
    protected final boolean isNonRoamingInGsmNetwork(BaseBundle b, String network) {
        return isInNetwork(b, network, CarrierConfigManager.KEY_GSM_NONROAMING_NETWORKS_STRING_ARRAY);
    }

    protected boolean isRoamingInCdmaNetwork(BaseBundle b, String network) {
    protected final boolean isRoamingInCdmaNetwork(BaseBundle b, String network) {
        return isInNetwork(b, network, CarrierConfigManager.KEY_CDMA_ROAMING_NETWORKS_STRING_ARRAY);
    }

    protected boolean isNonRoamingInCdmaNetwork(BaseBundle b, String network) {
    protected final boolean isNonRoamingInCdmaNetwork(BaseBundle b, String network) {
        return isInNetwork(b, network, CarrierConfigManager.KEY_CDMA_NONROAMING_NETWORKS_STRING_ARRAY);
    }
}
+19 −8
Original line number Diff line number Diff line
@@ -1120,21 +1120,19 @@ public class CdmaServiceStateTracker extends ServiceStateTracker {
                PersistableBundle b = configLoader.getConfigForSubId(mPhone.getSubId());
                String systemId = Integer.toString(mNewSS.getSystemId());

                if (isNonRoamingInGsmNetwork(b, mNewSS.getOperatorNumeric())
                if (alwaysOnHomeNetwork(b)) {
                    log("updateRoamingState: carrier config override always on home network");
                    setRoamingOff();
                } else if (isNonRoamingInGsmNetwork(b, mNewSS.getOperatorNumeric())
                        || isNonRoamingInCdmaNetwork(b, systemId)) {
                    log("updateRoamingState: carrier config override set non-roaming:"
                            + mNewSS.getOperatorNumeric() + ", " + systemId);
                    mNewSS.setVoiceRoaming(false);
                    mNewSS.setDataRoaming(false);
                    mNewSS.setCdmaEriIconIndex(EriInfo.ROAMING_INDICATOR_OFF);
                    setRoamingOff();
                } else if (isRoamingInGsmNetwork(b, mNewSS.getOperatorNumeric())
                        || isRoamingInCdmaNetwork(b, systemId)) {
                    log("updateRoamingState: carrier config override set roaming:"
                            + mNewSS.getOperatorNumeric() + ", " + systemId);
                    mNewSS.setVoiceRoaming(true);
                    mNewSS.setDataRoaming(true);
                    mNewSS.setCdmaEriIconIndex(EriInfo.ROAMING_INDICATOR_ON);
                    mNewSS.setCdmaEriIconMode(EriInfo.ROAMING_ICON_MODE_NORMAL);
                    setRoamingOn();
                }
            } catch (RemoteException e) {
                loge("updateRoamingState: unable to access carrier config service");
@@ -1149,6 +1147,19 @@ public class CdmaServiceStateTracker extends ServiceStateTracker {
        }
    }

    private void setRoamingOn() {
        mNewSS.setVoiceRoaming(true);
        mNewSS.setDataRoaming(true);
        mNewSS.setCdmaEriIconIndex(EriInfo.ROAMING_INDICATOR_ON);
        mNewSS.setCdmaEriIconMode(EriInfo.ROAMING_ICON_MODE_NORMAL);
    }

    private void setRoamingOff() {
        mNewSS.setVoiceRoaming(false);
        mNewSS.setDataRoaming(false);
        mNewSS.setCdmaEriIconIndex(EriInfo.ROAMING_INDICATOR_OFF);
    }

    protected void pollStateDone() {
        if (DBG) log("pollStateDone: cdma oldSS=[" + mSS + "] newSS=[" + mNewSS + "]");

+4 −1
Original line number Diff line number Diff line
@@ -880,7 +880,10 @@ final class GsmServiceStateTracker extends ServiceStateTracker {
            try {
                PersistableBundle b = configLoader.getConfigForSubId(mPhone.getSubId());

                if (isNonRoamingInGsmNetwork(b, mNewSS.getOperatorNumeric())) {
                if (alwaysOnHomeNetwork(b)) {
                    log("updateRoamingState: carrier config override always on home network");
                    roaming = false;
                } else if (isNonRoamingInGsmNetwork(b, mNewSS.getOperatorNumeric())) {
                    log("updateRoamingState: carrier config override set non roaming:"
                            + mNewSS.getOperatorNumeric());
                    roaming = false;