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);
         }
     }