package com.zulip.android.activities;
import android.content.Context;
import android.database.Cursor;
import android.database.MatrixCursor;
import android.support.v4.widget.SimpleCursorAdapter;
import com.zulip.android.networking.AsyncCursorAdapterUpdater;
import java.util.concurrent.Callable;
/**
* An adapter that can be refreshed by any object that has a reference to it.
* <p/>
* This is useful when you don't want to have to encode knowledge of how to
* refresh an adapter into any function that might want to do so.
*/
public class RefreshableCursorAdapter extends SimpleCursorAdapter {
private Callable<Cursor> cursorGenerator;
public RefreshableCursorAdapter(Context context, int layout,
Cursor initialCursor, Callable<Cursor> cursorGenerator,
String[] from, int[] to, int flags) {
super(context, layout, initialCursor, from, to, flags);
this.cursorGenerator = cursorGenerator;
}
/**
* Asynchronously updates the CursorAdapter
* <p/>
* Immediately on invocation, the CursorAdapter is blanked. It is updated
* once the refresh completes.
*/
public void refresh() {
this.changeCursor(new MatrixCursor(this.getCursor().getColumnNames()));
this.notifyDataSetChanged();
(new AsyncCursorAdapterUpdater()).execute(cursorGenerator, this);
}
}