diff options
-rw-r--r-- | src/java/com/android/internal/telephony/RIL.java | 13 |
1 files changed, 9 insertions, 4 deletions
diff --git a/src/java/com/android/internal/telephony/RIL.java b/src/java/com/android/internal/telephony/RIL.java index b7d576a4f..0bb3802cc 100644 --- a/src/java/com/android/internal/telephony/RIL.java +++ b/src/java/com/android/internal/telephony/RIL.java @@ -304,6 +304,11 @@ public final class RIL extends BaseCommands implements CommandsInterface { private TelephonyMetrics mMetrics = TelephonyMetrics.getInstance(); + // Number of per-network elements expected in QUERY_AVAILABLE_NETWORKS's response. + // 4 elements is default, but many RILs actually return 5, making it impossible to + // divide the response array without prior knowledge of the number of elements. + protected int mQANElements = SystemProperties.getInt("ro.ril.telephony.mqanelements", 4); + //***** Events static final int EVENT_SEND = 1; @@ -4109,15 +4114,15 @@ public final class RIL extends BaseCommands implements CommandsInterface { String strings[] = (String [])responseStrings(p); ArrayList<OperatorInfo> ret; - if (strings.length % 4 != 0) { + if (strings.length % mQANElements != 0) { throw new RuntimeException( "RIL_REQUEST_QUERY_AVAILABLE_NETWORKS: invalid response. Got " - + strings.length + " strings, expected multible of 4"); + + strings.length + " strings, expected multiple of " + mQANElements); } - ret = new ArrayList<OperatorInfo>(strings.length / 4); + ret = new ArrayList<OperatorInfo>(strings.length / mQANElements); - for (int i = 0 ; i < strings.length ; i += 4) { + for (int i = 0 ; i < strings.length ; i += mQANElements) { ret.add ( new OperatorInfo( strings[i+0], |