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

Commit 4bd290e3 authored by w19976's avatar w19976 Committed by Amit Mahajan
Browse files

Handling service number convert while roaming.

Bug: 17202092
Change-Id: I57221b314cd9136a19216119911e3342d42cdfde
parent d1f95a9e
Loading
Loading
Loading
Loading
+79 −0
Original line number Diff line number Diff line
@@ -51,6 +51,7 @@ import java.io.FileDescriptor;
import java.io.PrintWriter;
import java.util.List;
import java.util.ArrayList;
import java.util.HashMap;

/**
 * {@hide}
@@ -92,6 +93,8 @@ public final class GsmCallTracker extends CallTracker {

    Call.SrvccState mSrvccState = Call.SrvccState.NONE;

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

    //***** Events

@@ -176,6 +179,9 @@ public final class GsmCallTracker extends CallTracker {
            throw new CallStateException("cannot dial in current state");
        }

        String origNumber = dialString;
        dialString = convertNumberIfNecessary(dialString);

        // The new call must be assigned to the foreground call.
        // That call must be idle, so place anything that's
        // there on hold
@@ -218,6 +224,11 @@ public final class GsmCallTracker extends CallTracker {
            mCi.dial(mPendingMO.getAddress(), clirMode, uusInfo, obtainCompleteMessage());
        }

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

        updatePhoneState();
        mPhone.notifyPreciseCallStateChanged();

@@ -939,6 +950,74 @@ public final class GsmCallTracker extends CallTracker {
        }
    }

    // TODO: This conversion should be applicable to CDMA roaming as well.
    private String convertNumberIfNecessary(String dialNumber) {
        if (dialNumber == null) {
            return dialNumber;
        }
        String[] convertMaps = mPhone.getContext().getResources().getStringArray(
                com.android.internal.R.array.dial_string_replace);
        log("convertNumberIfNecessary Roaming" + mPhone.getServiceState().getRoaming()
            + " 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) {
            entry = convertMap.split(":");
            if (entry.length > 1) {
                tmpArray = entry[1].split(",");
                if (!entry[0].isEmpty() && dialNumber.equals(entry[0])) {
                    log("convertNumberIfNecessary " + entry[0] + " , " + tmpArray[0] + " " + tmpArray[1]);
                    if (!tmpArray[1].isEmpty()) {
                        if (compareGid1(tmpArray[1])) {
                            outNumber = tmpArray[0];
                            mNumberConverted = true;
                        }
                    } else if (outNumber.isEmpty()) {
                        outNumber = tmpArray[0];
                        mNumberConverted = true;
                    }
                }
            }
        }

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

        return dialNumber;

    }

    private boolean compareGid1(String serviceGid1) {
        String gid1 = mPhone.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;
    }

    @Override
    protected void log(String msg) {
        Rlog.d(LOG_TAG, "[GsmCallTracker] " + msg);
+12 −1
Original line number Diff line number Diff line
@@ -49,6 +49,9 @@ public class GsmConnection extends Connection {
    String mPostDialString;      // outgoing calls only
    boolean mDisconnected;

    boolean mNumberConverted = false;
    String mConvertedNumber;

    int mIndex;          // index in GsmCallTracker.connections[], -1 if unassigned
                        // The GSM index is 1 + this

@@ -416,7 +419,9 @@ public class GsmConnection extends Connection {
        if (mOrigConnection != null) {
            if (Phone.DEBUG_PHONE) log("update: mOrigConnection is not null");
        } else {
            if (!equalsHandlesNulls(mAddress, dc.number)) {
            log(" mNumberConverted " + mNumberConverted);
            if (!equalsHandlesNulls(mAddress, dc.number) && (!mNumberConverted
                    || !equalsHandlesNulls(mConvertedNumber, dc.number))) {
                if (Phone.DEBUG_PHONE) log("update: phone # changed!");
                mAddress = dc.number;
                changed = true;
@@ -765,4 +770,10 @@ public class GsmConnection extends Connection {

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