Delete provider data before insert

- Updated CardContentProvider and deleted exist data first to avoid redundant insertion in bulkInsert

Bug: 115575311
Test: robotest
Change-Id: I58b7b26f18bfdb8a59ebc61d7abb478390c58e4c
diff --git a/src/com/android/settings/homepage/CardContentProvider.java b/src/com/android/settings/homepage/CardContentProvider.java
index 7b08756..9989445 100644
--- a/src/com/android/settings/homepage/CardContentProvider.java
+++ b/src/com/android/settings/homepage/CardContentProvider.java
@@ -77,8 +77,11 @@
 
             final String table = getTableFromMatch(uri);
             database.beginTransaction();
+
+            // Here deletion first is avoiding redundant insertion. According to cl/215350754
+            database.delete(table, null /* whereClause */, null /* whereArgs */);
             for (ContentValues value : values) {
-                long ret = database.insert(table, null, value);
+                long ret = database.insert(table, null /* nullColumnHack */, value);
                 if (ret != -1L) {
                     numInserted++;
                 } else {
@@ -87,7 +90,7 @@
                 }
             }
             database.setTransactionSuccessful();
-            getContext().getContentResolver().notifyChange(uri, null);
+            getContext().getContentResolver().notifyChange(uri, null /* observer */);
         } finally {
             database.endTransaction();
             StrictMode.setThreadPolicy(oldPolicy);
@@ -103,7 +106,7 @@
             final SQLiteDatabase database = mDBHelper.getWritableDatabase();
             final String table = getTableFromMatch(uri);
             final int rowsDeleted = database.delete(table, selection, selectionArgs);
-            getContext().getContentResolver().notifyChange(uri, null);
+            getContext().getContentResolver().notifyChange(uri, null /* observer */);
             return rowsDeleted;
         } finally {
             StrictMode.setThreadPolicy(oldPolicy);
@@ -127,7 +130,8 @@
             queryBuilder.setTables(table);
             final SQLiteDatabase database = mDBHelper.getReadableDatabase();
             final Cursor cursor = queryBuilder.query(database,
-                    projection, selection, selectionArgs, null, null, sortOrder);
+                    projection, selection, selectionArgs, null /* groupBy */, null /* having */,
+                    sortOrder);
 
             cursor.setNotificationUri(getContext().getContentResolver(), uri);
             return cursor;
@@ -145,7 +149,7 @@
             final SQLiteDatabase database = mDBHelper.getWritableDatabase();
             final String table = getTableFromMatch(uri);
             final int rowsUpdated = database.update(table, values, selection, selectionArgs);
-            getContext().getContentResolver().notifyChange(uri, null);
+            getContext().getContentResolver().notifyChange(uri, null /* observer */);
             return rowsUpdated;
         } finally {
             StrictMode.setThreadPolicy(oldPolicy);