package com.glasstunes; import java.util.ArrayList; import java.util.List; import android.app.LoaderManager.LoaderCallbacks; import android.content.CursorLoader; import android.content.Loader; import android.database.Cursor; import android.net.Uri; import android.os.Bundle; import android.util.Log; import android.widget.ViewAnimator; import com.glasstunes.screenslide.BasicCardPagerAdapter; import com.glasstunes.screenslide.CardFragment; import com.glasstunes.screenslide.ScreenSlideActivity; import com.glasstunes.screenslide.ScreenSlidePagerAdapter; public abstract class BaseContentCardActivity extends ScreenSlideActivity implements LoaderCallbacks<Cursor> { protected BasicCardPagerAdapter mAdapter; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setResult(RESULT_CANCELED); } @Override protected ScreenSlidePagerAdapter onCreatePagerAdapter() { mAdapter = new BasicCardPagerAdapter(getFragmentManager()); getLoaderManager().initLoader(0, null, this); return mAdapter; } @Override public Loader<Cursor> onCreateLoader(int id, Bundle args) { getSwitcher().setDisplayedChild(1); if (Debug.LOG_CONTENT) { Log.d("Uri", getContentUri().toString()); } return new CursorLoader(this, getContentUri(), null, null, null, null); } protected abstract Uri getContentUri(); @Override public void onLoadFinished(Loader<Cursor> arg0, Cursor cursor) { List<CardFragment> cards = new ArrayList<CardFragment>(); if (cursor != null && cursor.moveToFirst()) { if (Debug.LOG_CONTENT) { Log.v("Cursor Count", "" + cursor.getCount()); List<String> columns = new ArrayList<String>(); for (int i = 0; i < cursor.getColumnCount(); i++) { columns.add(cursor.getColumnName(i)); } Log.v("Column Names", Debug.buildConcatString(", ", columns.toArray(new String[columns.size()]))); } do { if (Debug.LOG_CONTENT) { List<String> row = new ArrayList<String>(); for (int i = 0; i < cursor.getColumnCount(); i++) { row.add(cursor.getString(i)); } Log.v("Row " + cursor.getPosition(), Debug.buildConcatString(", ", row.toArray(new String[row.size()]))); } if (cursor.getPosition() >= getNumSkippedCards() && (getLimitCards() == -1 || cards.size() < getLimitCards())) { cards.add(getCardFromCursor(cursor)); } } while (cursor.moveToNext()); getSwitcher().setDisplayedChild(0); } else { getSwitcher().setDisplayedChild(2); } mAdapter.setCards(cards.toArray(new CardFragment[cards.size()])); } protected ViewAnimator getSwitcher() { return (ViewAnimator) findViewById(R.id.switcher); } protected abstract CardFragment getCardFromCursor(Cursor cursor); @Override public void onLoaderReset(Loader<Cursor> arg0) { mAdapter.setCards(); } @Override public void select() { if (getSwitcher().getDisplayedChild() == 0) { super.select(); } } protected int getNumSkippedCards() { return 0; } protected int getLimitCards() { return -1; } }