Merge "Carrier ID table rollout latest_carrier_list_rollout_20200114"
diff --git a/AndroidManifest.xml b/AndroidManifest.xml
index dbd5436..d8565eb 100644
--- a/AndroidManifest.xml
+++ b/AndroidManifest.xml
@@ -31,6 +31,8 @@
<!-- This permission is only used to send the ACTION_EXTERNAL_PROVIDER_CHANGE intent. -->
<uses-permission android:name="android.permission.MODIFY_PHONE_STATE" />
+ <!-- Allows accessing the messages on ICC -->
+ <uses-permission android:name="android.permission.ACCESS_MESSAGES_ON_ICC" />
<application android:process="com.android.phone"
android:allowClearUserData="false"
diff --git a/src/com/android/providers/telephony/SmsProvider.java b/src/com/android/providers/telephony/SmsProvider.java
index ddfa14c..6cc00d6 100644
--- a/src/com/android/providers/telephony/SmsProvider.java
+++ b/src/com/android/providers/telephony/SmsProvider.java
@@ -47,7 +47,7 @@
import com.android.internal.annotations.VisibleForTesting;
-import java.util.ArrayList;
+import java.util.List;
import java.util.HashMap;
public class SmsProvider extends ContentProvider {
@@ -341,12 +341,12 @@
} catch (NumberFormatException exception) {
throw new IllegalArgumentException("Bad SMS ICC ID: " + messageIndexString);
}
- ArrayList<SmsMessage> messages;
+ List<SmsMessage> messages;
final SmsManager smsManager = SmsManager.getDefault();
// Use phone id to avoid AppOps uid mismatch in telephony
long token = Binder.clearCallingIdentity();
try {
- messages = smsManager.getAllMessagesFromIcc();
+ messages = smsManager.getMessagesFromIcc();
} finally {
Binder.restoreCallingIdentity(token);
}
@@ -368,12 +368,12 @@
*/
private Cursor getAllMessagesFromIcc() {
SmsManager smsManager = SmsManager.getDefault();
- ArrayList<SmsMessage> messages;
+ List<SmsMessage> messages;
// use phone app permissions to avoid UID mismatch in AppOpsManager.noteOp() call
long token = Binder.clearCallingIdentity();
try {
- messages = smsManager.getAllMessagesFromIcc();
+ messages = smsManager.getMessagesFromIcc();
} finally {
Binder.restoreCallingIdentity(token);
}
diff --git a/src/com/android/providers/telephony/TelephonyProvider.java b/src/com/android/providers/telephony/TelephonyProvider.java
index 4bd2c20..6c25832 100644
--- a/src/com/android/providers/telephony/TelephonyProvider.java
+++ b/src/com/android/providers/telephony/TelephonyProvider.java
@@ -3080,25 +3080,31 @@
int mvnoDataIndex = ret.getColumnIndex(MVNO_MATCH_DATA);
int carrierIdIndex = ret.getColumnIndex(CARRIER_ID);
- //Separate the result into MatrixCursor
+ // Separate the result into MatrixCursor
while (ret.moveToNext()) {
List<String> data = new ArrayList<>();
for (String column : columnNames) {
data.add(ret.getString(ret.getColumnIndex(column)));
}
- if (!TextUtils.isEmpty(ret.getString(numericIndex)) &&
- tm.isCurrentSimOperator(ret.getString(numericIndex),
- getMvnoTypeIntFromString(ret.getString(mvnoIndex)),
- ret.getString(mvnoDataIndex))) {
+ boolean isMVNOAPN = !TextUtils.isEmpty(ret.getString(numericIndex))
+ && tm.isCurrentSimOperator(ret.getString(numericIndex),
+ getMvnoTypeIntFromString(ret.getString(mvnoIndex)),
+ ret.getString(mvnoDataIndex));
+ boolean isMNOAPN = !TextUtils.isEmpty(ret.getString(numericIndex))
+ && ret.getString(numericIndex).equals(mccmnc)
+ && TextUtils.isEmpty(ret.getString(mvnoIndex));
+ boolean isCarrierIdAPN = !TextUtils.isEmpty(ret.getString(carrierIdIndex))
+ && ret.getString(carrierIdIndex).equals(String.valueOf(carrierId))
+ && carrierId != TelephonyManager.UNKNOWN_CARRIER_ID;
+
+ if (isMVNOAPN) {
// 1. The APN that query based on legacy SIM MCC/MCC and MVNO
currentCursor.addRow(data);
- } else if (!TextUtils.isEmpty(ret.getString(numericIndex))
- && TextUtils.isEmpty(ret.getString(mvnoIndex))) {
+ } else if (isMNOAPN) {
// 2. The APN that query based on SIM MCC/MNC
parentCursor.addRow(data);
- } else if (!TextUtils.isEmpty(ret.getString(carrierIdIndex))
- && ret.getString(carrierIdIndex).equals(String.valueOf(carrierId))) {
+ } else if (isCarrierIdAPN) {
// The APN that query based on carrier Id (not include the MVNO or MNO APN)
carrierIdCursor.addRow(data);
}
@@ -3128,8 +3134,6 @@
for (String column : to.getColumnNames()) {
int index = to.getColumnIndex(column);
switch (to.getType(index)) {
- case Cursor.FIELD_TYPE_NULL:
- break;
case Cursor.FIELD_TYPE_INTEGER:
data.add(to.getInt(index));
break;
@@ -3140,6 +3144,7 @@
data.add(to.getBlob(index));
break;
case Cursor.FIELD_TYPE_STRING:
+ case Cursor.FIELD_TYPE_NULL:
data.add(to.getString(index));
break;
}