/**
*
*/
package gilday.android.powerhour.view.fragment;
import gilday.android.powerhour.data.PowerHour.NowPlaying;
import gilday.android.powerhour.data.PreferenceRepository;
import gilday.android.powerhour.view.PlaylistCursorAdapter;
import gilday.android.powerhour.view.PlaylistCursorAdapter.SongOmitHandler;
import android.content.ContentUris;
import android.content.ContentValues;
import android.database.Cursor;
import android.net.Uri;
import android.os.Bundle;
import android.support.v4.app.ListFragment;
import android.support.v4.app.LoaderManager;
import android.support.v4.content.CursorLoader;
import android.support.v4.content.Loader;
import android.util.Log;
/**
* @author jgilday
*
*/
public class PlaylistListFragment extends ListFragment
implements LoaderManager.LoaderCallbacks<Cursor>, SongOmitHandler {
private PlaylistCursorAdapter adapter;
@Override
public void onActivityCreated(Bundle savedState) {
super.onActivityCreated(savedState);
// Set properties for ListView
getListView().setFastScrollEnabled(true);
// Initialize Loader
getLoaderManager().initLoader(0, null, this);
}
/**
* Called when this Fragment needs a new loader
* will load the remainder of the NowPlaying playlist (songs which have not been played yet)
*/
public Loader<Cursor> onCreateLoader(int arg0, Bundle arg1) {
PreferenceRepository preferenceRepository = new PreferenceRepository(getActivity());
boolean shuffle = preferenceRepository.isShuffle();
String sortOrder = shuffle ? NowPlaying.SHUFFLE_POSITION + " asc" : NowPlaying.POSITION + " asc";
return new CursorLoader(
getActivity(),
NowPlaying.CONTENT_URI,
new String[] {
NowPlaying._ID,
NowPlaying.TITLE,
NowPlaying.ARTIST,
NowPlaying.OMIT,
NowPlaying.POSITION,
NowPlaying.SHUFFLE_POSITION,
NowPlaying.PLAYED },
// Ask for songs which have not been played
null,
null,
sortOrder);
}
public void onLoadFinished(Loader<Cursor> loader, Cursor cursor) {
// if the list adapter has not been instantiated yet
if(adapter == null) {
Log.d("PlaylistFragment", "Loader retrieved " + cursor.getCount() + " songs");
// Create and set the new adapter
adapter = new PlaylistCursorAdapter(getActivity(), cursor, 0);
adapter.setOmitToggleListener(this);
setListAdapter(adapter);
}
else {
// Swap in the new cursor
adapter.swapCursor(cursor);
}
}
public void onLoaderReset(Loader<Cursor> arg0) {
// Cursor will be closed so flush it out of the adapter
adapter.swapCursor(null);
}
public void onSongOmissionChanged(int songId, boolean isOmitted) {
int omit = isOmitted ? 1 : 0;
ContentValues values = new ContentValues();
values.put(NowPlaying.OMIT, omit);
Uri updateUri = ContentUris.withAppendedId(NowPlaying.CONTENT_URI, songId);
getActivity().getContentResolver().update(updateUri, values, null, null);
}
}