package com.ideabag.playtunes.adapter;
import com.ideabag.playtunes.R;
import com.ideabag.playtunes.PlaylistManager;
import com.ideabag.playtunes.util.StarToggleTask;
import com.ideabag.playtunes.widget.StarButton;
import android.content.Context;
import android.provider.MediaStore;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.Button;
import android.widget.ImageButton;
import android.widget.LinearLayout;
import android.widget.TextView;
import android.widget.ToggleButton;
public class SongListAdapter extends AsyncQueryAdapter {
protected LayoutInflater inflater;
String mNowPlayingMediaID = null;
protected PlaylistManager PlaylistManager;
View.OnClickListener songMenuClickListener;
public SongListAdapter( Context context, View.OnClickListener menuClickListener) {
super( context );
PlaylistManager = new PlaylistManager( mContext );
this.songMenuClickListener = menuClickListener;
inflater = ( LayoutInflater ) mContext.getSystemService( Context.LAYOUT_INFLATER_SERVICE );
}
public void setNowPlayingMedia( String media_id ) {
mNowPlayingMediaID = media_id;
notifyDataSetChanged();
}
@Override public long getItemId( int position ) {
int mID = -1;
if ( mCursor != null ) {
mCursor.moveToPosition( position );
if ( !(mCursor.isAfterLast() || mCursor.isBeforeFirst() ) ) {
// TODO: Remember, in any playlist or song query, the first field _MUST_ be a media _id
mID = mCursor.getInt( 0 );
}
}
return mID;
}
@Override public boolean hasStableIds() {
return true;
}
@Override public View getView( int position, View convertView, ViewGroup parent ) {
ViewHolder holder;
if ( null == convertView ) {
convertView = inflater.inflate( R.layout.list_item_song_no_album, null );
holder = new ViewHolder();
holder.starButton = ( StarButton ) convertView.findViewById( R.id.StarButton );
holder.menuButton = ( ImageButton ) convertView.findViewById( R.id.MenuButton );
holder.songTitle = ( TextView ) convertView.findViewById( R.id.SongTitle );
holder.row = ( LinearLayout ) convertView;
//holder.indicator = convertView.findViewById( R.id.NowPlayingIndicator );
holder.songArtist = ( TextView ) convertView.findViewById( R.id.SongArtist );
holder.songAlbum = ( TextView ) convertView.findViewById( R.id.SongAlbum );
holder.artistButton = ( Button ) convertView.findViewById( R.id.SongArtistButton );
holder.albumButton = ( Button ) convertView.findViewById( R.id.SongAlbumButton );
if ( holder.artistButton != null ) {
holder.artistButton.setOnClickListener( songMenuClickListener );
}
if ( holder.albumButton != null ) {
holder.albumButton.setOnClickListener( songMenuClickListener );
}
holder.starButton.setOnClickListener( songMenuClickListener );
holder.menuButton.setOnClickListener( songMenuClickListener );
convertView.setTag( holder );
} else {
holder = ( ViewHolder ) convertView.getTag();
StarToggleTask starTask = ( StarToggleTask ) holder.starButton.getTag();
if ( starTask != null && !starTask.isCancelled() ) {
starTask.cancel( true );
}
}
mCursor.moveToPosition( position );
String songTitle = mCursor.getString( mCursor.getColumnIndexOrThrow( MediaStore.Audio.Media.TITLE ) );
String songArtist = mCursor.getString( mCursor.getColumnIndexOrThrow( MediaStore.Audio.Media.ARTIST ) );
String songAlbum = mCursor.getString( mCursor.getColumnIndexOrThrow( MediaStore.Audio.Media.ALBUM ) );
String song_id = mCursor.getString( mCursor.getColumnIndexOrThrow( MediaStore.Audio.Media._ID ) );
StarToggleTask starTask = new StarToggleTask( holder.starButton );
holder.starButton.setTag( R.id.tag_song_id, song_id );
holder.starButton.setTag( starTask );
starTask.execute( song_id );
holder.songTitle.setText( songTitle );
if ( holder.songArtist != null ) {
holder.songArtist.setText( songArtist );
} else {
String artist_id = mCursor.getString( mCursor.getColumnIndexOrThrow( MediaStore.Audio.Media.ARTIST_ID ) );
holder.artistButton.setText( songArtist );
holder.artistButton.setTag( R.id.tag_artist_id, artist_id );
}
if ( holder.songAlbum != null ) {
holder.songAlbum.setText( songAlbum );
} else {
String album_id = mCursor.getString( mCursor.getColumnIndexOrThrow( MediaStore.Audio.Media.ALBUM_ID ) );
holder.albumButton.setText( songAlbum );
holder.albumButton.setTag( R.id.tag_album_id, album_id );
}
holder.menuButton.setTag( R.id.tag_song_id, song_id );
// TODO: Add now playing indicator
if ( null != mNowPlayingMediaID && mNowPlayingMediaID.equals( song_id ) ) {
// Is now playing
holder.row.setBackgroundResource( R.drawable.indicator );
} else {
holder.row.setBackgroundResource( android.R.color.transparent );
}
return convertView;
}
static class ViewHolder {
LinearLayout row;
StarButton starButton;
ImageButton menuButton;
TextView songTitle;
TextView songArtist;
TextView songAlbum;
Button artistButton;
Button albumButton;
}
}