From 10f519347aa535ff72e7cb196f703699dbfd05bc Mon Sep 17 00:00:00 2001 From: Sunny Shao Date: Wed, 3 Oct 2018 11:01:04 +0800 Subject: [PATCH] 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 --- .../settings/homepage/CardContentProvider.java | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) diff --git a/src/com/android/settings/homepage/CardContentProvider.java b/src/com/android/settings/homepage/CardContentProvider.java index 7b087568ca1..99894459adf 100644 --- a/src/com/android/settings/homepage/CardContentProvider.java +++ b/src/com/android/settings/homepage/CardContentProvider.java @@ -77,8 +77,11 @@ public class CardContentProvider extends ContentProvider { 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 @@ public class CardContentProvider extends ContentProvider { } } database.setTransactionSuccessful(); - getContext().getContentResolver().notifyChange(uri, null); + getContext().getContentResolver().notifyChange(uri, null /* observer */); } finally { database.endTransaction(); StrictMode.setThreadPolicy(oldPolicy); @@ -103,7 +106,7 @@ public class CardContentProvider extends ContentProvider { 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 @@ public class CardContentProvider extends ContentProvider { 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 @@ public class CardContentProvider extends ContentProvider { 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);