Handle Missing Event Row

When checking for Calendars.CAN_PARTIALLY_UPDATE in duplicateEvent() , don't
crash if there is no matching event id in the db.

Bug: 11392862
Change-Id: I895c3a307b842c4340c851da27c25951d3e7968f
diff --git a/src/com/android/providers/calendar/CalendarDatabaseHelper.java b/src/com/android/providers/calendar/CalendarDatabaseHelper.java
index dc3deba..407e21a 100644
--- a/src/com/android/providers/calendar/CalendarDatabaseHelper.java
+++ b/src/com/android/providers/calendar/CalendarDatabaseHelper.java
@@ -24,6 +24,7 @@
 import android.database.DatabaseUtils;
 import android.database.SQLException;
 import android.database.sqlite.SQLiteDatabase;
+import android.database.sqlite.SQLiteDoneException;
 import android.database.sqlite.SQLiteException;
 import android.database.sqlite.SQLiteOpenHelper;
 import android.os.Bundle;
@@ -3367,12 +3368,21 @@
      */
     protected void duplicateEvent(final long id) {
         final SQLiteDatabase db = getWritableDatabase();
-        final long canPartiallyUpdate = DatabaseUtils.longForQuery(db, "SELECT "
-                + Calendars.CAN_PARTIALLY_UPDATE + " FROM " + Views.EVENTS
-                + " WHERE " + Events._ID + " = ?", new String[] {
-            String.valueOf(id)
-        });
-        if (canPartiallyUpdate == 0) {
+        try {
+            final long canPartiallyUpdate = DatabaseUtils.longForQuery(db, "SELECT "
+                    + Calendars.CAN_PARTIALLY_UPDATE + " FROM " + Views.EVENTS
+                    + " WHERE " + Events._ID + " = ?", new String[] {
+                String.valueOf(id)
+            });
+            if (canPartiallyUpdate == 0) {
+                return;
+            }
+        } catch (SQLiteDoneException e) {
+            // b/11392862
+            // If no results are returned, this will be thrown. This can happen if the Events View
+            // has no rows for the provided id. This might happen for example if someone inserts a
+            // reminder that refers to a non existent event id.
+            // Return without doing anything because there is no event to duplicate.
             return;
         }