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
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();
int numInserted = 0;
final SQLiteDatabase database = mDBHelper.getWritableDatabase();
try {
maybeEnableStrictMode();
final SQLiteDatabase database = mDBHelper.getWritableDatabase();
final String table = getTableFromMatch(uri);
final long ret = database.insert(table, null, values);
if (ret != -1) {
getContext().getContentResolver().notifyChange(uri, null);
} else {
Log.e(TAG, "The CardContentProvider insertion failed! Plase check SQLiteDatabase's "
+ "message.");
database.beginTransaction();
for (ContentValues value : values) {
long ret = database.insert(table, null, value);
if (ret != -1L) {
numInserted++;
} else {
Log.e(TAG, "The row " + value.getAsString(CardDatabaseHelper.CardColumns.NAME)
+ " insertion failed! Please check your data.");
}
}
database.setTransactionSuccessful();
getContext().getContentResolver().notifyChange(uri, null);
} finally {
database.endTransaction();
StrictMode.setThreadPolicy(oldPolicy);
}
return uri;
return numInserted;
}
@Override

View File

@@ -72,16 +72,25 @@ public class CardContentProviderTest {
@Test
public void cardData_insert() {
final int cnt_before_instert = getRowCount();
mResolver.insert(mUri, insertOneRow());
final int cnt_after_instert = getRowCount();
final int rowsBeforeInsert = getRowCount();
mResolver.insert(mUri, generateOneRow());
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
public void cardData_query() {
mResolver.insert(mUri, insertOneRow());
mResolver.insert(mUri, generateOneRow());
final int count = getRowCount();
assertThat(count).isGreaterThan(0);
@@ -89,24 +98,24 @@ public class CardContentProviderTest {
@Test
public void cardData_delete() {
mResolver.insert(mUri, insertOneRow());
final int del_count = mResolver.delete(mUri, null, null);
mResolver.insert(mUri, generateOneRow());
final int delCount = mResolver.delete(mUri, null, null);
assertThat(del_count).isGreaterThan(0);
assertThat(delCount).isGreaterThan(0);
}
@Test
public void cardData_update() {
mResolver.insert(mUri, insertOneRow());
mResolver.insert(mUri, generateOneRow());
final double updatingScore = 0.87;
final ContentValues values = new ContentValues();
values.put(CardDatabaseHelper.CardColumns.SCORE, updatingScore);
final String strWhere = CardDatabaseHelper.CardColumns.NAME + "=?";
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 Cursor cr = mResolver.query(mUri, columns, strWhere, selectionArgs, null);
@@ -122,7 +131,7 @@ public class CardContentProviderTest {
ShadowThreadUtils.setIsMainThread(true);
ReflectionHelpers.setStaticField(Build.class, "IS_DEBUGGABLE", true);
mProvider.insert(mUri, insertOneRow());
mProvider.insert(mUri, generateOneRow());
verify(mProvider).enableStrictMode();
}
@@ -164,7 +173,7 @@ public class CardContentProviderTest {
ShadowThreadUtils.setIsMainThread(false);
ReflectionHelpers.setStaticField(Build.class, "IS_DEBUGGABLE", true);
mProvider.insert(mUri, insertOneRow());
mProvider.insert(mUri, generateOneRow());
verify(mProvider, never()).enableStrictMode();
}
@@ -217,10 +226,10 @@ public class CardContentProviderTest {
mProvider.getTableFromMatch(invalid_Uri);
}
private ContentValues insertOneRow() {
private ContentValues generateOneRow() {
final ContentValues values = new ContentValues();
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.SLICE_URI,
"content://com.android.settings.slices/action/auto_rotate");
@@ -231,6 +240,24 @@ public class CardContentProviderTest {
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() {
final Cursor cr = mResolver.query(mUri, null, null, null);
final int count = cr.getCount();