am 9b625616: am 78917c29: am a5f8bac8: am 7ed9c338: Unhide android.provider.Telephony.Sms.SUB_ID

* commit '9b625616c4380691d8994a21801867bd1ffffc59':
  Unhide android.provider.Telephony.Sms.SUB_ID
diff --git a/res/values-hi/strings.xml b/res/values-hi/strings.xml
index f018658..4eedae0 100644
--- a/res/values-hi/strings.xml
+++ b/res/values-hi/strings.xml
@@ -17,5 +17,5 @@
 <resources xmlns:android="http://schemas.android.com/apk/res/android"
     xmlns:xliff="urn:oasis:names:tc:xliff:document:1.2">
     <string name="app_label" product="tablet" msgid="9194799012395299737">"मोबाइल नेटवर्क कॉन्फ़िगरेशन"</string>
-    <string name="app_label" product="default" msgid="4282451239358791628">"फ़ोन/संदेश संग्रहण"</string>
+    <string name="app_label" product="default" msgid="4282451239358791628">"फ़ोन/संदेश मेमोरी"</string>
 </resources>
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);
         }
     }