@Test(expected = NullPointerException.class) public void shouldThrowIfConstructorArgumentIsNull() { new MergeCursor(null); }
@Test public void testCloseCursors() throws Exception { Cursor[] cursors = new Cursor[2]; cursors[0] = dbCursor1; cursors[1] = dbCursor2; cursor = new MergeCursor( cursors ); assertThat(cursor.isClosed()).isFalse(); assertThat(dbCursor1.isClosed()).isFalse(); assertThat(dbCursor2.isClosed()).isFalse(); cursor.close(); assertThat(cursor.isClosed()).isTrue(); assertThat(dbCursor1.isClosed()).isTrue(); assertThat(dbCursor2.isClosed()).isTrue(); }
@Test public void testMoveToPositionEmptyCursor() throws Exception { Cursor[] cursors = new Cursor[2]; cursors[0] = null; cursors[1] = null; cursor = new MergeCursor( cursors ); assertThat(cursor.getCount()).isEqualTo(0); assertThat(cursor.getColumnNames()).isNotNull(); cursor.moveToPosition(0); assertThat(cursor.getColumnNames()).isNotNull(); }
@Test public void testColumnNamesSingleCursor() throws Exception { Cursor[] cursors = new Cursor[1]; cursors[0] = dbCursor1; cursor = new MergeCursor( cursors ); for ( int i = 0; i < TABLE_1_INSERTS.length; i++ ) { cursor.moveToPosition(i); String[] columnNames = cursor.getColumnNames(); assertColumnNamesCursor1(columnNames); } }
private void assertBounds( Cursor[] cursors, int expectedLength ) { cursor = new MergeCursor( cursors ); assertThat(cursor.getCount()).isEqualTo(expectedLength); assertThat(cursor.moveToFirst()).isTrue(); for ( int i = 0; i < expectedLength; i++ ) { assertThat(cursor.moveToPosition(i)).isTrue(); assertThat(cursor.isAfterLast()).isFalse(); } assertThat(cursor.moveToNext()).isFalse(); assertThat(cursor.isAfterLast()).isTrue(); assertThat(cursor.moveToPosition(expectedLength)).isFalse(); }
@Test public void testEmptyCursors() throws Exception { // cursor list with null contents cursor = new MergeCursor( new Cursor[1] ); assertThat(cursor.getCount()).isEqualTo(0); assertThat(cursor.moveToFirst()).isFalse(); assertThat(cursor.getColumnNames()).isNotNull(); // cursor list with partially null contents Cursor[] cursors = new Cursor[2]; cursors[0] = null; cursors[1] = dbCursor1; cursor = new MergeCursor( cursors ); assertThat(cursor.getCount()).isEqualTo(TABLE_1_INSERTS.length); assertThat(cursor.moveToFirst()).isTrue(); assertThat(cursor.getColumnNames()).isNotNull(); }
@Test public void testGetDataMultipleCursor() throws Exception { Cursor[] cursors = new Cursor[2]; cursors[0] = dbCursor1; cursors[1] = dbCursor2; cursor = new MergeCursor( cursors ); cursor.moveToFirst(); assertDataCursor1(); cursor.moveToNext(); assertDataCursor2(); }
@Test public void testGetDataSingleCursor() throws Exception { Cursor[] cursors = new Cursor[1]; cursors[0] = dbCursor1; cursor = new MergeCursor( cursors ); cursor.moveToFirst(); assertDataCursor1(); }
@Test public void testColumnNamesMultipleCursors() throws Exception { Cursor[] cursors = new Cursor[2]; cursors[0] = dbCursor1; cursors[1] = dbCursor2; cursor = new MergeCursor( cursors ); for ( int i = 0; i < TABLE_1_INSERTS.length; i++ ) { cursor.moveToPosition(i); String[] columnNames = cursor.getColumnNames(); assertColumnNamesCursor1(columnNames); } for ( int i = 0; i < TABLE_2_INSERTS.length; i++ ) { cursor.moveToPosition(i + TABLE_1_INSERTS.length); String[] columnNames = cursor.getColumnNames(); assertColumnNamesCursor2(columnNames); } }
selectionArgs, null, null, sortOrder); cursor = new MergeCursor(new Cursor[]{cursor1, cursor2}); } else {
@NonNull public Cursor mergeCursors(@NonNull Cursor... cursors) { return new MergeCursor(cursors); }
@Override public Cursor loadInBackground() { Cursor albums = super.loadInBackground(); MatrixCursor allAlbum = new MatrixCursor(COLUMNS); int totalCount = 0; String allAlbumCoverPath = ""; if (albums != null) { while (albums.moveToNext()) { totalCount += albums.getInt(albums.getColumnIndex(COLUMN_COUNT)); } if (albums.moveToFirst()) { allAlbumCoverPath = albums.getString(albums.getColumnIndex(MediaStore.MediaColumns.DATA)); } } allAlbum.addRow(new String[]{Album.ALBUM_ID_ALL, Album.ALBUM_ID_ALL, Album.ALBUM_NAME_ALL, allAlbumCoverPath, String.valueOf(totalCount)}); return new MergeCursor(new Cursor[]{allAlbum, albums}); }
@Override public Cursor loadInBackground() { Cursor albums = super.loadInBackground(); MatrixCursor allAlbum = new MatrixCursor(COLUMNS); int totalCount = 0; String allAlbumCoverPath = ""; if (albums != null) { while (albums.moveToNext()) { totalCount += albums.getInt(albums.getColumnIndex(COLUMN_COUNT)); } if (albums.moveToFirst()) { allAlbumCoverPath = albums.getString(albums.getColumnIndex(MediaStore.MediaColumns.DATA)); } } allAlbum.addRow(new String[]{ALBUM_ID_ALL, ALBUM_ID_ALL, ALBUM_NAME_ALL, allAlbumCoverPath, String.valueOf(totalCount)}); return new MergeCursor(new Cursor[]{allAlbum, albums}); }
@Override public Cursor loadInBackground() { Cursor albums = super.loadInBackground(); MatrixCursor allAlbum = new MatrixCursor(COLUMNS); int totalCount = 0; String allAlbumCoverPath = ""; if (albums != null) { while (albums.moveToNext()) { totalCount += albums.getInt(albums.getColumnIndex(COLUMN_COUNT)); } if (albums.moveToFirst()) { allAlbumCoverPath = albums.getString(albums.getColumnIndex(MediaStore.MediaColumns.DATA)); } } allAlbum.addRow(new String[]{Album.ALBUM_ID_ALL, Album.ALBUM_ID_ALL, Album.ALBUM_NAME_ALL, allAlbumCoverPath, String.valueOf(totalCount)}); return new MergeCursor(new Cursor[]{allAlbum, albums}); }
@Override public Cursor loadInBackground() { Cursor albums = super.loadInBackground(); MatrixCursor allAlbum = new MatrixCursor(COLUMNS); int totalCount = 0; String allAlbumCoverPath = ""; if (albums != null) { while (albums.moveToNext()) { totalCount += albums.getInt(albums.getColumnIndex(COLUMN_COUNT)); } if (albums.moveToFirst()) { allAlbumCoverPath = albums.getString(albums.getColumnIndex(MediaStore.MediaColumns.DATA)); } } allAlbum.addRow(new String[]{Album.ALBUM_ID_ALL, Album.ALBUM_ID_ALL, Album.ALBUM_NAME_ALL, allAlbumCoverPath, String.valueOf(totalCount)}); return new MergeCursor(new Cursor[]{allAlbum, albums}); }
@Override public Cursor loadInBackground() { Cursor albums = super.loadInBackground(); MatrixCursor allAlbum = new MatrixCursor(COLUMNS); int totalCount = 0; String allAlbumCoverPath = ""; if (albums != null) { while (albums.moveToNext()) { totalCount += albums.getInt(albums.getColumnIndex(COLUMN_COUNT)); } if (albums.moveToFirst()) { allAlbumCoverPath = albums.getString(albums.getColumnIndex(MediaStore.MediaColumns.DATA)); } } allAlbum.addRow(new String[]{Album.ALBUM_ID_ALL, Album.ALBUM_ID_ALL, Album.ALBUM_NAME_ALL, allAlbumCoverPath, String.valueOf(totalCount)}); return new MergeCursor(new Cursor[]{allAlbum, albums}); }
@Override public void subscribe(@NonNull SingleEmitter<Cursor> e) throws Exception { e.onSuccess(new MergeCursor(cursors)); } });
@Override public void onLoadFinished(Loader<Cursor> loader, Cursor data) { switch (loader.getId()) { case INTERNAL_CURSOR_ID: mInternalCursor = data; break; case EXTERNAL_CURSOR_ID: mExternalCursor = data; break; default: return; } // TODO: should I use a mutex/synchronized block here? if (mInternalCursor != null && mExternalCursor != null) { Cursor mergeCursor = new MergeCursor(new Cursor[] {mInternalCursor, mExternalCursor}); mAdapter.swapCursor(mergeCursor); } }
@Override public Cursor loadInBackground() { Cursor result = super.loadInBackground(); if (!mEnableCapture || !MediaStoreCompat.hasCameraFeature(getContext())) { return result; } MatrixCursor dummy = new MatrixCursor(PROJECTION); dummy.addRow(new Object[]{"-1", "capture", "", 0, ""}); return new MergeCursor(new Cursor[]{dummy, result}); }
@Override public Cursor loadInBackground() { Cursor result = super.loadInBackground(); if (!mEnableCapture || !MediaStoreCompat.hasCameraFeature(getContext())) { return result; } MatrixCursor dummy = new MatrixCursor(PROJECTION); dummy.addRow(new Object[]{"-1", "capture", "", 0, ""}); return new MergeCursor(new Cursor[]{dummy, result}); }