am 6be6a05f: am db88fac6: am 0ca252ef: am eb47d5d0: Add clear/restore calling identity for ICC message operations
* commit '6be6a05f7c7bcdcfa3e5453c9d45be594e5411e8':
Add clear/restore calling identity for ICC message operations
diff --git a/src/com/android/providers/telephony/SmsProvider.java b/src/com/android/providers/telephony/SmsProvider.java
index 83a4463..5f0a8af 100644
--- a/src/com/android/providers/telephony/SmsProvider.java
+++ b/src/com/android/providers/telephony/SmsProvider.java
@@ -257,23 +257,32 @@
* Return a Cursor containing just one message from the ICC.
*/
private Cursor getSingleMessageFromIcc(String messageIndexString) {
+ int messageIndex = -1;
try {
- int messageIndex = Integer.parseInt(messageIndexString);
- SmsManager smsManager = SmsManager.getDefault();
- ArrayList<SmsMessage> messages = smsManager.getAllMessagesFromIcc();
-
- SmsMessage message = messages.get(messageIndex);
- if (message == null) {
- throw new IllegalArgumentException(
- "Message not retrieved. ID: " + messageIndexString);
- }
- MatrixCursor cursor = new MatrixCursor(ICC_COLUMNS, 1);
- cursor.addRow(convertIccToSms(message, 0));
- return withIccNotificationUri(cursor);
+ Integer.parseInt(messageIndexString);
} catch (NumberFormatException exception) {
- throw new IllegalArgumentException(
- "Bad SMS ICC ID: " + messageIndexString);
+ throw new IllegalArgumentException("Bad SMS ICC ID: " + messageIndexString);
}
+ ArrayList<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();
+ } finally {
+ Binder.restoreCallingIdentity(token);
+ }
+ if (messages == null) {
+ throw new IllegalArgumentException("ICC message not retrieved");
+ }
+ final SmsMessage message = messages.get(messageIndex);
+ if (message == null) {
+ throw new IllegalArgumentException(
+ "Message not retrieved. ID: " + messageIndexString);
+ }
+ MatrixCursor cursor = new MatrixCursor(ICC_COLUMNS, 1);
+ cursor.addRow(convertIccToSms(message, 0));
+ return withIccNotificationUri(cursor);
}
/**
@@ -608,7 +617,8 @@
*/
private int deleteMessageFromIcc(String messageIndexString) {
SmsManager smsManager = SmsManager.getDefault();
-
+ // Use phone id to avoid AppOps uid mismatch in telephony
+ long token = Binder.clearCallingIdentity();
try {
return smsManager.deleteMessageFromIcc(
Integer.parseInt(messageIndexString))
@@ -618,8 +628,9 @@
"Bad SMS ICC ID: " + messageIndexString);
} finally {
ContentResolver cr = getContext().getContentResolver();
-
cr.notifyChange(ICC_URI, null, true, UserHandle.USER_ALL);
+
+ Binder.restoreCallingIdentity(token);
}
}