Merge "Added the bulkInsert for CardContentProvider"

This commit is contained in:
Sunny Shao
2018-09-11 03:32:34 +00:00
committed by Android (Google) Code Review
2 changed files with 65 additions and 23 deletions

View File

@@ -61,23 +61,38 @@ public class CardContentProvider extends ContentProvider {
@Override @Override
public Uri insert(Uri uri, ContentValues values) { public Uri insert(Uri uri, ContentValues values) {
final ContentValues[] cvs = {values};
bulkInsert(uri, cvs);
return uri;
}
@Override
public int bulkInsert(Uri uri, ContentValues[] values) {
final StrictMode.ThreadPolicy oldPolicy = StrictMode.getThreadPolicy(); final StrictMode.ThreadPolicy oldPolicy = StrictMode.getThreadPolicy();
int numInserted = 0;
final SQLiteDatabase database = mDBHelper.getWritableDatabase();
try { try {
maybeEnableStrictMode(); maybeEnableStrictMode();
final SQLiteDatabase database = mDBHelper.getWritableDatabase();
final String table = getTableFromMatch(uri); final String table = getTableFromMatch(uri);
final long ret = database.insert(table, null, values); database.beginTransaction();
if (ret != -1) { for (ContentValues value : values) {
getContext().getContentResolver().notifyChange(uri, null); long ret = database.insert(table, null, value);
if (ret != -1L) {
numInserted++;
} else { } else {
Log.e(TAG, "The CardContentProvider insertion failed! Plase check SQLiteDatabase's " Log.e(TAG, "The row " + value.getAsString(CardDatabaseHelper.CardColumns.NAME)
+ "message."); + " insertion failed! Please check your data.");
} }
}
database.setTransactionSuccessful();
getContext().getContentResolver().notifyChange(uri, null);
} finally { } finally {
database.endTransaction();
StrictMode.setThreadPolicy(oldPolicy); StrictMode.setThreadPolicy(oldPolicy);
} }
return uri; return numInserted;
} }
@Override @Override

View File

@@ -72,16 +72,25 @@ public class CardContentProviderTest {
@Test @Test
public void cardData_insert() { public void cardData_insert() {
final int cnt_before_instert = getRowCount(); final int rowsBeforeInsert = getRowCount();
mResolver.insert(mUri, insertOneRow()); mResolver.insert(mUri, generateOneRow());
final int cnt_after_instert = getRowCount(); final int rowsAfterInsert = getRowCount();
assertThat(cnt_after_instert - cnt_before_instert).isEqualTo(1); assertThat(rowsAfterInsert - rowsBeforeInsert).isEqualTo(1);
}
@Test
public void cardData_bulkInsert_twoRows() {
final int rowsBeforeInsert = getRowCount();
mResolver.bulkInsert(mUri, generateTwoRows());
final int rowsAfterInsert = getRowCount();
assertThat(rowsAfterInsert - rowsBeforeInsert).isEqualTo(2);
} }
@Test @Test
public void cardData_query() { public void cardData_query() {
mResolver.insert(mUri, insertOneRow()); mResolver.insert(mUri, generateOneRow());
final int count = getRowCount(); final int count = getRowCount();
assertThat(count).isGreaterThan(0); assertThat(count).isGreaterThan(0);
@@ -89,24 +98,24 @@ public class CardContentProviderTest {
@Test @Test
public void cardData_delete() { public void cardData_delete() {
mResolver.insert(mUri, insertOneRow()); mResolver.insert(mUri, generateOneRow());
final int del_count = mResolver.delete(mUri, null, null); final int delCount = mResolver.delete(mUri, null, null);
assertThat(del_count).isGreaterThan(0); assertThat(delCount).isGreaterThan(0);
} }
@Test @Test
public void cardData_update() { public void cardData_update() {
mResolver.insert(mUri, insertOneRow()); mResolver.insert(mUri, generateOneRow());
final double updatingScore = 0.87; final double updatingScore = 0.87;
final ContentValues values = new ContentValues(); final ContentValues values = new ContentValues();
values.put(CardDatabaseHelper.CardColumns.SCORE, updatingScore); values.put(CardDatabaseHelper.CardColumns.SCORE, updatingScore);
final String strWhere = CardDatabaseHelper.CardColumns.NAME + "=?"; final String strWhere = CardDatabaseHelper.CardColumns.NAME + "=?";
final String[] selectionArgs = {"auto_rotate"}; final String[] selectionArgs = {"auto_rotate"};
final int update_count = mResolver.update(mUri, values, strWhere, selectionArgs); final int updateCount = mResolver.update(mUri, values, strWhere, selectionArgs);
assertThat(update_count).isGreaterThan(0); assertThat(updateCount).isGreaterThan(0);
final String[] columns = {CardDatabaseHelper.CardColumns.SCORE}; final String[] columns = {CardDatabaseHelper.CardColumns.SCORE};
final Cursor cr = mResolver.query(mUri, columns, strWhere, selectionArgs, null); final Cursor cr = mResolver.query(mUri, columns, strWhere, selectionArgs, null);
@@ -122,7 +131,7 @@ public class CardContentProviderTest {
ShadowThreadUtils.setIsMainThread(true); ShadowThreadUtils.setIsMainThread(true);
ReflectionHelpers.setStaticField(Build.class, "IS_DEBUGGABLE", true); ReflectionHelpers.setStaticField(Build.class, "IS_DEBUGGABLE", true);
mProvider.insert(mUri, insertOneRow()); mProvider.insert(mUri, generateOneRow());
verify(mProvider).enableStrictMode(); verify(mProvider).enableStrictMode();
} }
@@ -164,7 +173,7 @@ public class CardContentProviderTest {
ShadowThreadUtils.setIsMainThread(false); ShadowThreadUtils.setIsMainThread(false);
ReflectionHelpers.setStaticField(Build.class, "IS_DEBUGGABLE", true); ReflectionHelpers.setStaticField(Build.class, "IS_DEBUGGABLE", true);
mProvider.insert(mUri, insertOneRow()); mProvider.insert(mUri, generateOneRow());
verify(mProvider, never()).enableStrictMode(); verify(mProvider, never()).enableStrictMode();
} }
@@ -217,10 +226,10 @@ public class CardContentProviderTest {
mProvider.getTableFromMatch(invalid_Uri); mProvider.getTableFromMatch(invalid_Uri);
} }
private ContentValues insertOneRow() { private ContentValues generateOneRow() {
final ContentValues values = new ContentValues(); final ContentValues values = new ContentValues();
values.put(CardDatabaseHelper.CardColumns.NAME, "auto_rotate"); values.put(CardDatabaseHelper.CardColumns.NAME, "auto_rotate");
values.put(CardDatabaseHelper.CardColumns.TYPE, 0); values.put(CardDatabaseHelper.CardColumns.TYPE, 1);
values.put(CardDatabaseHelper.CardColumns.SCORE, 0.9); values.put(CardDatabaseHelper.CardColumns.SCORE, 0.9);
values.put(CardDatabaseHelper.CardColumns.SLICE_URI, values.put(CardDatabaseHelper.CardColumns.SLICE_URI,
"content://com.android.settings.slices/action/auto_rotate"); "content://com.android.settings.slices/action/auto_rotate");
@@ -231,6 +240,24 @@ public class CardContentProviderTest {
return values; return values;
} }
private ContentValues[] generateTwoRows() {
final ContentValues[] twoRows = new ContentValues[2];
twoRows[0] = generateOneRow();
final ContentValues values = new ContentValues();
values.put(CardDatabaseHelper.CardColumns.NAME, "toggle_airplane");
values.put(CardDatabaseHelper.CardColumns.TYPE, 1);
values.put(CardDatabaseHelper.CardColumns.SCORE, 0.95);
values.put(CardDatabaseHelper.CardColumns.SLICE_URI,
"content://com.android.settings.slices/action/toggle_airplane");
values.put(CardDatabaseHelper.CardColumns.CATEGORY, 2);
values.put(CardDatabaseHelper.CardColumns.PACKAGE_NAME, "com.android.settings");
values.put(CardDatabaseHelper.CardColumns.APP_VERSION, "1.0.0");
twoRows[1] = values;
return twoRows;
}
private int getRowCount() { private int getRowCount() {
final Cursor cr = mResolver.query(mUri, null, null, null); final Cursor cr = mResolver.query(mUri, null, null, null);
final int count = cr.getCount(); final int count = cr.getCount();