Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit 45a3919c authored by Sunny Shao's avatar Sunny Shao
Browse files

Added the bulkInsert for CardContentProvider

- Modified CardContentProvider and added bulkInsert
- Modified CardContentProviderTest
- Moved the endTransaction to finally clause
- Let insert call bulkinsert

Bug: 111820446
Test: robotest
Change-Id: Ie84fe1143abc28bb60f261ce763051bedd469100
parent cfa39d3b
Loading
Loading
Loading
Loading
+23 −8
Original line number Diff line number Diff line
@@ -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
+42 −15
Original line number Diff line number Diff line
@@ -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();