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

Commit 2d265969 authored by Xia Ying's avatar Xia Ying Committed by Amit Mahajan
Browse files

Handling service number convert while roaming.

When roaming in GSM/UMTS and internal CDMA network,
(1)change VZW custumer service numeber *611 to +19085594899.
(2)change VZW voice mail number *86 to +1MDN.

Change-Id: I69f69fb698f059b7a2365d2906fe0f7cc41636d7
parent 1de01965
Loading
Loading
Loading
Loading
+73 −0
Original line number Diff line number Diff line
@@ -45,6 +45,9 @@ public abstract class CallTracker extends Handler {

    public CommandsInterface mCi;

    protected boolean mNumberConverted = false;
    private final int VALID_COMPARE_LENGTH   = 3;

    //***** Events

    protected static final int EVENT_POLL_CALLS_RESULT             = 1;
@@ -171,6 +174,76 @@ public abstract class CallTracker extends Handler {
        return dialString;
    }

    protected String convertNumberIfNecessary(PhoneBase phoneBase, String dialNumber) {
        if (dialNumber == null) {
            return dialNumber;
        }
        String[] convertMaps = phoneBase.getContext().getResources().getStringArray(
                com.android.internal.R.array.dial_string_replace);
        log("convertNumberIfNecessary Roaming"
            + " convertMaps.length " + convertMaps.length
            + " dialNumber.length() " + dialNumber.length());

        if (convertMaps.length < 1 || dialNumber.length() < VALID_COMPARE_LENGTH) {
            return dialNumber;
        }

        String[] entry;
        String[] tmpArray;
        String outNumber = "";
        for(String convertMap : convertMaps) {
            log("convertNumberIfNecessary: " + convertMap);
            entry = convertMap.split(":");
            if (entry.length > 1) {
                tmpArray = entry[1].split(",");
                if (!TextUtils.isEmpty(entry[0]) && dialNumber.equals(entry[0])) {
                    if (tmpArray.length >= 2 && !TextUtils.isEmpty(tmpArray[1])) {
                        if (compareGid1(phoneBase, tmpArray[1])) {
                            mNumberConverted = true;
                        }
                    } else if (outNumber.isEmpty()) {
                        mNumberConverted = true;
                    }
                    if (mNumberConverted) {
                        if(!TextUtils.isEmpty(tmpArray[0]) && tmpArray[0].endsWith("MDN")) {
                            String prefix = tmpArray[0].substring(0, tmpArray[0].length() -3);
                            outNumber = prefix + phoneBase.getLine1Number();
                        } else {
                            outNumber = tmpArray[0];
                        }
                    }
                }
            }
        }

        if (mNumberConverted) {
            log("convertNumberIfNecessary: convert service number");
            return outNumber;
        }

        return dialNumber;

    }

    private boolean compareGid1(PhoneBase phoneBase, String serviceGid1) {
        String gid1 = phoneBase.getGroupIdLevel1();
        int gid_length = serviceGid1.length();
        boolean ret = true;

        if (serviceGid1 == null || serviceGid1.equals("")) {
            log("compareGid1 serviceGid is empty, return " + ret);
            return ret;
        }
        // Check if gid1 match service GID1
        if (!((gid1 != null) && (gid1.length() >= gid_length) &&
                gid1.substring(0, gid_length).equalsIgnoreCase(serviceGid1))) {
            log(" gid1 " + gid1 + " serviceGid1 " + serviceGid1);
            ret = false;
        }
        log("compareGid1 is " + (ret?"Same":"Different"));
        return ret;
    }

    //***** Overridden from Handler
    @Override
    public abstract void handleMessage (Message msg);
+10 −0
Original line number Diff line number Diff line
@@ -93,6 +93,9 @@ public abstract class Connection {
    private List<PostDialListener> mPostDialListeners = new ArrayList<>();
    public Set<Listener> mListeners = new CopyOnWriteArraySet<>();

    protected boolean mNumberConverted = false;
    protected String mConvertedNumber;

    private static String LOG_TAG = "Connection";

    Object mUserData;
@@ -532,6 +535,13 @@ public abstract class Connection {
        }
    }

    public void setConverted(String oriNumber) {
        mNumberConverted = true;
        mConvertedNumber = mAddress;
        mAddress = oriNumber;
        mDialString = oriNumber;
    }

    /**
     * Build a human representation of a connection instance, suitable for debugging.
     * Don't log personal stuff unless in debug mode.
+11 −0
Original line number Diff line number Diff line
@@ -238,6 +238,17 @@ public abstract class PhoneBase extends Handler implements Phone {
        SystemProperties.set(property, value);
    }

    /**
     * Set a system property, unless we're in unit test mode
     */
    // CAF_MSIM TODO this need to be replated with TelephonyManager API ?
    public String getSystemProperty(String property, String defValue) {
        if(getUnitTestMode()) {
            return null;
        }
        return SystemProperties.get(property, defValue);
    }


    protected final RegistrantList mPreciseCallStateRegistrants
            = new RegistrantList();
+9 −0
Original line number Diff line number Diff line
@@ -1393,6 +1393,15 @@ public class CDMAPhone extends PhoneBase {
        super.setSystemProperty(property, value);
    }

    // override for allowing access from other classes of this package
    /**
     * {@inheritDoc}
     */
    @Override
    public String getSystemProperty(String property, String defValue) {
        return super.getSystemProperty(property, defValue);
    }

    /**
     * Activate or deactivate cell broadcast SMS.
     *
+25 −0
Original line number Diff line number Diff line
@@ -26,6 +26,7 @@ import android.telephony.PhoneNumberUtils;
import android.telephony.ServiceState;
import android.telephony.Rlog;
import android.os.SystemProperties;
import android.text.TextUtils;

import com.android.internal.telephony.CallStateException;
import com.android.internal.telephony.CallTracker;
@@ -172,6 +173,25 @@ public final class CdmaCallTracker extends CallTracker {
            throw new CallStateException("cannot dial in current state");
        }

        String origNumber = dialString;
        String operatorIsoContry = mPhone.getSystemProperty(
                TelephonyProperties.PROPERTY_OPERATOR_ISO_COUNTRY, "");
        String simIsoContry = mPhone.getSystemProperty(
                TelephonyProperties.PROPERTY_ICC_OPERATOR_ISO_COUNTRY, "");
        boolean internationalRoaming = !TextUtils.isEmpty(operatorIsoContry)
                && !TextUtils.isEmpty(simIsoContry)
                && !simIsoContry.equals(operatorIsoContry);
        if (internationalRoaming) {
            if ("us".equals(simIsoContry)) {
                internationalRoaming = internationalRoaming && !"vi".equals(operatorIsoContry);
            } else if ("vi".equals(simIsoContry)) {
                internationalRoaming = internationalRoaming && !"us".equals(operatorIsoContry);
            }
        }
        if (internationalRoaming) {
            dialString = convertNumberIfNecessary(mPhone, dialString);
        }

        String inEcm=SystemProperties.get(TelephonyProperties.PROPERTY_INECM_MODE, "false");
        boolean isPhoneInEcmMode = inEcm.equals("true");
        boolean isEmergencyCall =
@@ -224,6 +244,11 @@ public final class CdmaCallTracker extends CallTracker {
            }
        }

        if (mNumberConverted) {
            mPendingMO.setConverted(origNumber);
            mNumberConverted = false;
        }

        updatePhoneState();
        mPhone.notifyPreciseCallStateChanged();

Loading