Merge "Added the bulkInsert for CardContentProvider"
This commit is contained in:
@@ -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
|
||||||
|
@@ -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();
|
||||||
|
Reference in New Issue
Block a user