Loading src/java/com/android/internal/telephony/gsm/GsmDataConnectionTracker.java +105 −29 Original line number Original line Diff line number Diff line Loading @@ -951,10 +951,52 @@ public final class GsmDataConnectionTracker extends DataConnectionTracker { return result; return result; } } private ArrayList<ApnSetting> createApnList(Cursor cursor) { private boolean imsiMatches(String imsiDB, String imsiSIM) { ArrayList<ApnSetting> result = new ArrayList<ApnSetting>(); // Note: imsiDB value has digit number or 'x' character for seperating USIM information if (cursor.moveToFirst()) { // for MVNO operator. And then digit number is matched at same order and 'x' character do { // could replace by any digit number. // ex) if imsiDB inserted '310260x10xxxxxx' for GG Operator, // that means first 6 digits, 8th and 9th digit // should be set in USIM for GG Operator. int len = imsiDB.length(); int idxCompare = 0; if (len <= 0) return false; if (len > imsiSIM.length()) return false; for (int idx=0; idx<len; idx++) { char c = imsiDB.charAt(idx); if ((c == 'x') || (c == 'X') || (c == imsiSIM.charAt(idx))) { continue; } else { return false; } } return true; } private boolean mvnoMatches(IccRecords r, String mvno_type, String mvno_match_data) { if (mvno_type.equalsIgnoreCase("spn")) { if ((r.getServiceProviderName() != null) && r.getServiceProviderName().equalsIgnoreCase(mvno_match_data)) { return true; } } else if (mvno_type.equalsIgnoreCase("imsi")) { String imsiSIM = r.getIMSI(); if ((imsiSIM != null) && imsiMatches(mvno_match_data, imsiSIM)) { return true; } } else if (mvno_type.equalsIgnoreCase("gid")) { String gid1 = r.getGid1(); if ((gid1 != null) && gid1.substring(0, mvno_match_data.length()).equalsIgnoreCase(mvno_match_data)) { return true; } } return false; } private ApnSetting makeApnSetting(Cursor cursor) { String[] types = parseTypes( String[] types = parseTypes( cursor.getString(cursor.getColumnIndexOrThrow(Telephony.Carriers.TYPE))); cursor.getString(cursor.getColumnIndexOrThrow(Telephony.Carriers.TYPE))); ApnSetting apn = new ApnSetting( ApnSetting apn = new ApnSetting( Loading Loading @@ -983,7 +1025,41 @@ public final class GsmDataConnectionTracker extends DataConnectionTracker { cursor.getInt(cursor.getColumnIndexOrThrow( cursor.getInt(cursor.getColumnIndexOrThrow( Telephony.Carriers.CARRIER_ENABLED)) == 1, Telephony.Carriers.CARRIER_ENABLED)) == 1, cursor.getInt(cursor.getColumnIndexOrThrow(Telephony.Carriers.BEARER))); cursor.getInt(cursor.getColumnIndexOrThrow(Telephony.Carriers.BEARER))); result.add(apn); return apn; } private ArrayList<ApnSetting> createApnList(Cursor cursor) { ArrayList<ApnSetting> result = new ArrayList<ApnSetting>(); IccRecords r = mIccRecords.get(); if (cursor.moveToFirst()) { String mvnoType = null; String mvnoMatchData = null; do { String cursorMvnoType = cursor.getString( cursor.getColumnIndexOrThrow(Telephony.Carriers.MVNO_TYPE)); String cursorMvnoMatchData = cursor.getString( cursor.getColumnIndexOrThrow(Telephony.Carriers.MVNO_MATCH_DATA)); if (mvnoType != null) { if (mvnoType.equals(cursorMvnoType) && mvnoMatchData.equals(cursorMvnoMatchData)) { result.add(makeApnSetting(cursor)); } } else { // no mvno match yet if (mvnoMatches(r, cursorMvnoType, cursorMvnoMatchData)) { // first match - toss out non-mvno data result.clear(); mvnoType = cursorMvnoType; mvnoMatchData = cursorMvnoMatchData; result.add(makeApnSetting(cursor)); } else { // add only non-mvno data if (cursorMvnoType.equals("")) { result.add(makeApnSetting(cursor)); } } } } while (cursor.moveToNext()); } while (cursor.moveToNext()); } } if (DBG) log("createApnList: X result=" + result); if (DBG) log("createApnList: X result=" + result); Loading Loading
src/java/com/android/internal/telephony/gsm/GsmDataConnectionTracker.java +105 −29 Original line number Original line Diff line number Diff line Loading @@ -951,10 +951,52 @@ public final class GsmDataConnectionTracker extends DataConnectionTracker { return result; return result; } } private ArrayList<ApnSetting> createApnList(Cursor cursor) { private boolean imsiMatches(String imsiDB, String imsiSIM) { ArrayList<ApnSetting> result = new ArrayList<ApnSetting>(); // Note: imsiDB value has digit number or 'x' character for seperating USIM information if (cursor.moveToFirst()) { // for MVNO operator. And then digit number is matched at same order and 'x' character do { // could replace by any digit number. // ex) if imsiDB inserted '310260x10xxxxxx' for GG Operator, // that means first 6 digits, 8th and 9th digit // should be set in USIM for GG Operator. int len = imsiDB.length(); int idxCompare = 0; if (len <= 0) return false; if (len > imsiSIM.length()) return false; for (int idx=0; idx<len; idx++) { char c = imsiDB.charAt(idx); if ((c == 'x') || (c == 'X') || (c == imsiSIM.charAt(idx))) { continue; } else { return false; } } return true; } private boolean mvnoMatches(IccRecords r, String mvno_type, String mvno_match_data) { if (mvno_type.equalsIgnoreCase("spn")) { if ((r.getServiceProviderName() != null) && r.getServiceProviderName().equalsIgnoreCase(mvno_match_data)) { return true; } } else if (mvno_type.equalsIgnoreCase("imsi")) { String imsiSIM = r.getIMSI(); if ((imsiSIM != null) && imsiMatches(mvno_match_data, imsiSIM)) { return true; } } else if (mvno_type.equalsIgnoreCase("gid")) { String gid1 = r.getGid1(); if ((gid1 != null) && gid1.substring(0, mvno_match_data.length()).equalsIgnoreCase(mvno_match_data)) { return true; } } return false; } private ApnSetting makeApnSetting(Cursor cursor) { String[] types = parseTypes( String[] types = parseTypes( cursor.getString(cursor.getColumnIndexOrThrow(Telephony.Carriers.TYPE))); cursor.getString(cursor.getColumnIndexOrThrow(Telephony.Carriers.TYPE))); ApnSetting apn = new ApnSetting( ApnSetting apn = new ApnSetting( Loading Loading @@ -983,7 +1025,41 @@ public final class GsmDataConnectionTracker extends DataConnectionTracker { cursor.getInt(cursor.getColumnIndexOrThrow( cursor.getInt(cursor.getColumnIndexOrThrow( Telephony.Carriers.CARRIER_ENABLED)) == 1, Telephony.Carriers.CARRIER_ENABLED)) == 1, cursor.getInt(cursor.getColumnIndexOrThrow(Telephony.Carriers.BEARER))); cursor.getInt(cursor.getColumnIndexOrThrow(Telephony.Carriers.BEARER))); result.add(apn); return apn; } private ArrayList<ApnSetting> createApnList(Cursor cursor) { ArrayList<ApnSetting> result = new ArrayList<ApnSetting>(); IccRecords r = mIccRecords.get(); if (cursor.moveToFirst()) { String mvnoType = null; String mvnoMatchData = null; do { String cursorMvnoType = cursor.getString( cursor.getColumnIndexOrThrow(Telephony.Carriers.MVNO_TYPE)); String cursorMvnoMatchData = cursor.getString( cursor.getColumnIndexOrThrow(Telephony.Carriers.MVNO_MATCH_DATA)); if (mvnoType != null) { if (mvnoType.equals(cursorMvnoType) && mvnoMatchData.equals(cursorMvnoMatchData)) { result.add(makeApnSetting(cursor)); } } else { // no mvno match yet if (mvnoMatches(r, cursorMvnoType, cursorMvnoMatchData)) { // first match - toss out non-mvno data result.clear(); mvnoType = cursorMvnoType; mvnoMatchData = cursorMvnoMatchData; result.add(makeApnSetting(cursor)); } else { // add only non-mvno data if (cursorMvnoType.equals("")) { result.add(makeApnSetting(cursor)); } } } } while (cursor.moveToNext()); } while (cursor.moveToNext()); } } if (DBG) log("createApnList: X result=" + result); if (DBG) log("createApnList: X result=" + result); Loading