Loading src/java/com/android/internal/telephony/CallTracker.java +73 −0 Original line number Diff line number Diff line Loading @@ -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; Loading Loading @@ -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); Loading src/java/com/android/internal/telephony/Connection.java +10 −0 Original line number Diff line number Diff line Loading @@ -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; Loading Loading @@ -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. Loading src/java/com/android/internal/telephony/PhoneBase.java +11 −0 Original line number Diff line number Diff line Loading @@ -237,6 +237,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(); Loading src/java/com/android/internal/telephony/cdma/CDMAPhone.java +9 −0 Original line number Diff line number Diff line Loading @@ -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. * Loading src/java/com/android/internal/telephony/cdma/CdmaCallTracker.java +25 −0 Original line number Diff line number Diff line Loading @@ -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; Loading Loading @@ -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 = Loading Loading @@ -224,6 +244,11 @@ public final class CdmaCallTracker extends CallTracker { } } if (mNumberConverted) { mPendingMO.setConverted(origNumber); mNumberConverted = false; } updatePhoneState(); mPhone.notifyPreciseCallStateChanged(); Loading Loading
src/java/com/android/internal/telephony/CallTracker.java +73 −0 Original line number Diff line number Diff line Loading @@ -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; Loading Loading @@ -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); Loading
src/java/com/android/internal/telephony/Connection.java +10 −0 Original line number Diff line number Diff line Loading @@ -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; Loading Loading @@ -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. Loading
src/java/com/android/internal/telephony/PhoneBase.java +11 −0 Original line number Diff line number Diff line Loading @@ -237,6 +237,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(); Loading
src/java/com/android/internal/telephony/cdma/CDMAPhone.java +9 −0 Original line number Diff line number Diff line Loading @@ -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. * Loading
src/java/com/android/internal/telephony/cdma/CdmaCallTracker.java +25 −0 Original line number Diff line number Diff line Loading @@ -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; Loading Loading @@ -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 = Loading Loading @@ -224,6 +244,11 @@ public final class CdmaCallTracker extends CallTracker { } } if (mNumberConverted) { mPendingMO.setConverted(origNumber); mNumberConverted = false; } updatePhoneState(); mPhone.notifyPreciseCallStateChanged(); Loading