Loading src/com/android/settings/homepage/CardContentProvider.java +23 −8 Original line number Diff line number Diff line Loading @@ -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); database.beginTransaction(); for (ContentValues value : values) { long ret = database.insert(table, null, value); if (ret != -1L) { numInserted++; } else { Log.e(TAG, "The CardContentProvider insertion failed! Plase check SQLiteDatabase's " + "message."); 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 Loading tests/robotests/src/com/android/settings/homepage/CardContentProviderTest.java +42 −15 Original line number Diff line number Diff line Loading @@ -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); Loading @@ -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); Loading @@ -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(); } Loading Loading @@ -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(); } Loading Loading @@ -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"); Loading @@ -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(); Loading Loading
src/com/android/settings/homepage/CardContentProvider.java +23 −8 Original line number Diff line number Diff line Loading @@ -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); database.beginTransaction(); for (ContentValues value : values) { long ret = database.insert(table, null, value); if (ret != -1L) { numInserted++; } else { Log.e(TAG, "The CardContentProvider insertion failed! Plase check SQLiteDatabase's " + "message."); 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 Loading
tests/robotests/src/com/android/settings/homepage/CardContentProviderTest.java +42 −15 Original line number Diff line number Diff line Loading @@ -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); Loading @@ -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); Loading @@ -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(); } Loading Loading @@ -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(); } Loading Loading @@ -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"); Loading @@ -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(); Loading