auto import from //depot/cupcake/@132589
diff --git a/AndroidManifest.xml b/AndroidManifest.xml
index c1af548..dfbf918 100644
--- a/AndroidManifest.xml
+++ b/AndroidManifest.xml
@@ -29,9 +29,7 @@
             android:writePermission="android.permission.WRITE_SMS" />
         <provider android:name="MmsProvider" android:authorities="mms" android:multiprocess="true" 
             android:readPermission="android.permission.READ_SMS"
-            android:writePermission="android.permission.WRITE_SMS">
-            <grant-uri-permission android:pathPrefix="/part/" />
-        </provider>
+            android:writePermission="android.permission.WRITE_SMS" />
         <provider android:name="MmsSmsProvider" android:authorities="mms-sms" android:multiprocess="true" 
             android:readPermission="android.permission.READ_SMS"
             android:writePermission="android.permission.WRITE_SMS" />
diff --git a/src/com/android/providers/telephony/MmsSmsDatabaseHelper.java b/src/com/android/providers/telephony/MmsSmsDatabaseHelper.java
index 31d7cb7..1644186 100644
--- a/src/com/android/providers/telephony/MmsSmsDatabaseHelper.java
+++ b/src/com/android/providers/telephony/MmsSmsDatabaseHelper.java
@@ -230,10 +230,6 @@
             }
             c.close();
         }
-        // remove orphaned threads
-        db.delete("threads",
-                "_id NOT IN (SELECT DISTINCT thread_id FROM sms " +
-                "UNION SELECT DISTINCT thread_id FROM pdu)", null);
     }
     
     public static int deleteOneSms(SQLiteDatabase db, int message_id) {
diff --git a/src/com/android/providers/telephony/SmsProvider.java b/src/com/android/providers/telephony/SmsProvider.java
index ee60142..56b39de 100644
--- a/src/com/android/providers/telephony/SmsProvider.java
+++ b/src/com/android/providers/telephony/SmsProvider.java
@@ -46,9 +46,7 @@
     private static final Uri NOTIFICATION_URI = Uri.parse("content://sms");
     private static final Uri SIM_URI = Uri.parse("content://sms/sim");
     static final String TABLE_SMS = "sms";
-    private static final String TABLE_RAW = "raw";
-    private static final String TABLE_SR_PENDING = "sr_pending";
-    
+
     private static final Integer ONE = Integer.valueOf(1);
 
     /**
@@ -246,12 +244,7 @@
             ArrayList<SmsMessage> messages = smsManager.getAllMessagesFromSim();
             ArrayList<ArrayList> singleRow = new ArrayList<ArrayList>();
 
-            SmsMessage message = messages.get(messageIndex);
-            if (message == null) {
-                throw new IllegalArgumentException(
-                        "Message not retrieved. ID: " + messageIndexString);
-            }
-            singleRow.add(convertSimToSms(message));
+            singleRow.add(convertSimToSms(messages.get(messageIndex)));
             return withSimNotificationUri(
                     new ArrayListCursor(SIM_COLUMNS, singleRow));
         } catch (NumberFormatException exception) {
@@ -269,10 +262,7 @@
         ArrayList<ArrayList> rows = new ArrayList<ArrayList>();
 
         for (int count = messages.size(), i = 0; i < count; i++) {
-            SmsMessage message = messages.get(i);
-            if (message != null) {
-                rows.add(convertSimToSms(message));
-            }
+            rows.add(convertSimToSms(messages.get(i)));
         }
         return withSimNotificationUri(new ArrayListCursor(SIM_COLUMNS, rows));
     }
@@ -562,17 +552,14 @@
     public int update(
             Uri url, ContentValues values, String where, String[] whereArgs) {
         int count = 0;
-        String table = TABLE_SMS;
-        String extraWhere = null;
         SQLiteDatabase db = mOpenHelper.getWritableDatabase();
-
         switch (sURLMatcher.match(url)) {
             case SMS_RAW_MESSAGE:
-                table = TABLE_RAW;
+                count = db.update("raw", values, where, whereArgs);
                 break;
 
             case SMS_STATUS_PENDING:
-                table = TABLE_SR_PENDING;
+                count = db.update("sr_pending", values, where, whereArgs);
                 break;
 
             case SMS_ALL:
@@ -583,10 +570,17 @@
             case SMS_DRAFT:
             case SMS_OUTBOX:
             case SMS_CONVERSATIONS:
+                count = db.update(
+                        TABLE_SMS, values, where, whereArgs);
                 break;
 
             case SMS_ALL_ID:
-                extraWhere = "_id=" + url.getPathSegments().get(0);
+                if (where != null) {
+                    throw new UnsupportedOperationException(
+                            "WHERE not supported");
+                }
+                count = db.update(TABLE_SMS, values, "_id="
+                        + url.getPathSegments().get(0), null);
                 break;
 
             case SMS_INBOX_ID:
@@ -594,25 +588,40 @@
             case SMS_SENT_ID:
             case SMS_DRAFT_ID:
             case SMS_OUTBOX_ID:
-                extraWhere = "_id=" + url.getPathSegments().get(1);
+                if (where != null) {
+                    throw new UnsupportedOperationException(
+                            "WHERE not supported for this URI");
+                }
+                count = db.update(TABLE_SMS, values, "_id="
+                        + url.getPathSegments().get(1), null);
                 break;
 
             case SMS_CONVERSATIONS_ID: {
-                String threadId = url.getPathSegments().get(1);
+                int threadId;
 
                 try {
-                    Integer.parseInt(threadId);
+                    threadId = Integer.parseInt(url.getPathSegments().get(1));
                 } catch (Exception ex) {
-                    Log.e(TAG, "Bad conversation thread id: " + threadId);
+                    Log.e(TAG, "Bad conversation thread id: "
+                            + url.getPathSegments().get(1));
+                    count = 0;
                     break;
                 }
 
-                extraWhere = "thread_id=" + threadId;
+                if (where != null) {
+                    throw new UnsupportedOperationException(
+                            "WHERE not supported for this URI");
+                }
+                count = db.update(
+                        TABLE_SMS, values, "thread_id = " + threadId,
+                        null);
                 break;
             }
 
             case SMS_STATUS_ID:
-                extraWhere = "_id=" + url.getPathSegments().get(1);
+                String idString = url.getPathSegments().get(1); 
+
+                count = db.update(TABLE_SMS, values, "_id=" + idString, null);
                 break;  
                     
             default:
@@ -620,9 +629,6 @@
                         "URI " + url + " not supported");
         }
 
-        where = DatabaseUtils.concatenateWhere(where, extraWhere);
-        count = db.update(table, values, where, whereArgs);
-
         if (count > 0) {
             notifyChange(url);
         }
diff --git a/src/com/android/providers/telephony/TelephonyProvider.java b/src/com/android/providers/telephony/TelephonyProvider.java
index 324d007..95018be 100644
--- a/src/com/android/providers/telephony/TelephonyProvider.java
+++ b/src/com/android/providers/telephony/TelephonyProvider.java
@@ -48,7 +48,6 @@
     private static final int URL_TELEPHONY = 1;
     private static final int URL_CURRENT = 2;
     private static final int URL_ID = 3;
-    private static final int URL_RESTOREAPN = 4;
 
     private static final String TAG = "TelephonyProvider";
     private static final String CARRIERS_TABLE = "carriers";
@@ -63,7 +62,6 @@
         s_urlMatcher.addURI("telephony", "carriers", URL_TELEPHONY);
         s_urlMatcher.addURI("telephony", "carriers/current", URL_CURRENT);
         s_urlMatcher.addURI("telephony", "carriers/#", URL_ID);
-        s_urlMatcher.addURI("telephony", "carriers/restore", URL_RESTOREAPN);
 
         s_currentNullMap = new ContentValues(1);
         s_currentNullMap.put("current", (Long) null);
@@ -124,10 +122,6 @@
                     "type TEXT," +
                     "current INTEGER);");
 
-            initDatabase(db);
-        }
-
-        private void initDatabase(SQLiteDatabase db) {
             // Read internal APNS data
             Resources r = mContext.getResources();
             XmlResourceParser parser = r.getXml(com.android.internal.R.xml.apns);
@@ -435,12 +429,6 @@
                 break;
             }
 
-            case URL_RESTOREAPN: {
-                count = 1;
-                restoreDefaultAPN();
-                break;
-            }
-
             default: {
                 throw new UnsupportedOperationException("Cannot delete that URL: " + url);
             }
@@ -486,7 +474,7 @@
                         new String[] { url.getLastPathSegment() });
                 break;
             }
-
+            
             default: {
                 throw new UnsupportedOperationException("Cannot update that URL: " + url);
             }
@@ -506,11 +494,4 @@
     }
 
     private SQLiteOpenHelper mOpenHelper;
-
-    private void restoreDefaultAPN() {
-        SQLiteDatabase db = mOpenHelper.getWritableDatabase();
-
-        db.delete(CARRIERS_TABLE, null, null);
-        ((DatabaseHelper) mOpenHelper).initDatabase(db);
-    }
 }