From d26924d8d7c29cbcbfaf43c408d3b54e50b7a7ce Mon Sep 17 00:00:00 2001 From: Fredrik Jagenheim Date: Fri, 12 Feb 2010 15:52:39 +0100 Subject: [PATCH] Corrected SPN and PLMN name handling SPDI-file on SIM and BCD encoded PLMN-entries wasn't parsed correctly causing us to display wrong networknames. Change-Id: I09d80deec45b4b3ad525a9359b4866de7549e39e --- .../java/com/android/internal/telephony/IccUtils.java | 2 ++ .../com/android/internal/telephony/gsm/SIMRecords.java | 7 ++++++- 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/telephony/java/com/android/internal/telephony/IccUtils.java b/telephony/java/com/android/internal/telephony/IccUtils.java index 3e7094e606cb8..1034bda11912a 100644 --- a/telephony/java/com/android/internal/telephony/IccUtils.java +++ b/telephony/java/com/android/internal/telephony/IccUtils.java @@ -51,6 +51,8 @@ public class IccUtils { ret.append((char)('0' + v)); v = (data[i] >> 4) & 0xf; + // Some PLMNs have 'f' as high nibble, ignore it + if (v == 0xf) continue; if (v > 9) break; ret.append((char)('0' + v)); } diff --git a/telephony/java/com/android/internal/telephony/gsm/SIMRecords.java b/telephony/java/com/android/internal/telephony/gsm/SIMRecords.java index d711a80872626..d99a348674f41 100644 --- a/telephony/java/com/android/internal/telephony/gsm/SIMRecords.java +++ b/telephony/java/com/android/internal/telephony/gsm/SIMRecords.java @@ -93,6 +93,7 @@ public final class SIMRecords extends IccRecords { static final int SPN_RULE_SHOW_PLMN = 0x02; // From TS 51.011 EF[SPDI] section + static final int TAG_SPDI = 0xA3; static final int TAG_SPDI_PLMN_LIST = 0x80; // Full Name IEI from TS 24.008 @@ -1426,8 +1427,12 @@ public final class SIMRecords extends IccRecords { byte[] plmnEntries = null; - // There should only be one TAG_SPDI_PLMN_LIST for ( ; tlv.isValidObject() ; tlv.nextObject()) { + // Skip SPDI tag, if existant + if (tlv.getTag() == TAG_SPDI) { + tlv = new SimTlv(tlv.getData(), 0, tlv.getData().length); + } + // There should only be one TAG_SPDI_PLMN_LIST if (tlv.getTag() == TAG_SPDI_PLMN_LIST) { plmnEntries = tlv.getData(); break;