package com.ideabag.playtunes.dialog;
import android.app.Activity;
import android.content.Context;
import android.os.Bundle;
import android.provider.MediaStore;
import android.support.v4.app.DialogFragment;
import android.support.v4.app.Fragment;
import android.support.v4.app.FragmentTransaction;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.view.Window;
import android.widget.AdapterView;
import android.widget.AdapterView.OnItemClickListener;
import android.widget.ImageButton;
import android.widget.LinearLayout;
import android.widget.ListView;
import android.widget.TextView;
import android.widget.Toast;
import com.ideabag.playtunes.PlaylistManager;
import com.ideabag.playtunes.R;
import com.ideabag.playtunes.adapter.AsyncQueryAdapter;
import com.ideabag.playtunes.database.MediaQuery;
import com.ideabag.playtunes.util.QueryCountTask;
public class AddToPlaylistDialogFragment extends DialogFragment implements OnItemClickListener {
String mMediaID;
PlaylistManager mPlaylistManager;
public AddToPlaylistDialogFragment() {
setStyle( STYLE_NORMAL , 0 );
}
public void setMediaID( String media_id ) {
this.mMediaID = media_id;
}
@Override public void onAttach( Activity activity ) {
super.onAttach( activity );
mPlaylistManager = new PlaylistManager( activity );
}
@Override public View onCreateView( LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
View view = inflater.inflate(R.layout.dialog_fragment_addtoplaylist, container);
getDialog().requestWindowFeature( Window.FEATURE_NO_TITLE );
ListView lv = ( ListView ) view.findViewById( R.id.AddToPlaylistSelection );
lv.setDivider( getResources().getDrawable( R.drawable.list_divider ) );
lv.setDividerHeight( 1 );
lv.setSelector( R.drawable.list_item_background );
LinearLayout starredHeader = ( LinearLayout ) inflater.inflate( R.layout.list_item_playlist_starred, null );
starredHeader.findViewById(R.id.SongCount).setVisibility( View.GONE );
TextView createPlaylistHeader = ( TextView ) inflater.inflate( R.layout.list_item_new_playlist, null );
lv.addHeaderView( createPlaylistHeader, null, true );
lv.addHeaderView( starredHeader, null, true );
lv.setOnItemClickListener( this );
lv.setAdapter( new ChoosePlaylistAdapter( getActivity() ) );
view.findViewById( R.id.ButtonCancel ).setOnClickListener( headerButtonClickListener );
return view;
}
@Override public void onStart() {
super.onStart();
if ( android.os.Build.VERSION.SDK_INT < android.os.Build.VERSION_CODES.HONEYCOMB ) {
getDialog().getWindow().setBackgroundDrawableResource( R.drawable.gb_dialog_background );
}
}
@Override public void onItemClick( AdapterView<?> parent, View view, int position, long id ) {
if ( 0 == position ) { // New playlist
FragmentTransaction ft = getActivity().getSupportFragmentManager().beginTransaction();
Fragment prev = getActivity().getSupportFragmentManager().findFragmentByTag("dialog");
if ( prev != null ) {
ft.remove( prev );
}
CreatePlaylistDialogFragment newFragment = new CreatePlaylistDialogFragment();
newFragment.setMediaID( mMediaID );
newFragment.show( ft, "dialog" );
} else if ( 1 == position ) { //starred
mPlaylistManager.addFavorite( mMediaID );
Toast.makeText( getActivity(), getString( R.string.playlist_did_star ), Toast.LENGTH_SHORT ).show();
} else {
String playlist_id = "" + view.getTag( R.id.tag_playlist_id );
mPlaylistManager.addSong( playlist_id, mMediaID );
Toast.makeText( getActivity(), getString( R.string.playlist_added ), Toast.LENGTH_SHORT ).show();
}
dismiss();
}
public class ChoosePlaylistAdapter extends AsyncQueryAdapter {
View.OnClickListener playlistMenuClickListener;
private final String[] allPlaylistsSelection = new String[] {
MediaStore.Audio.Playlists.NAME,
MediaStore.Audio.Playlists.DATE_MODIFIED,
MediaStore.Audio.Playlists._ID
};
public ChoosePlaylistAdapter( Context context ) {
super( context );
String starred_id = new PlaylistManager( context ).createStarredIfNotExist();
mQuery = new MediaQuery(
MediaStore.Audio.Playlists.EXTERNAL_CONTENT_URI,
allPlaylistsSelection,
MediaStore.Audio.Playlists._ID + " !=?",
new String[] {
starred_id
},
MediaStore.Audio.Playlists.DATE_MODIFIED + " DESC"
);
requery();
}
@Override public View getView( int position, View convertView, ViewGroup parent ) {
ViewHolder holder;
if ( null == convertView ) {
holder = new ViewHolder();
LayoutInflater inflater = ( LayoutInflater ) mContext.getSystemService( Context.LAYOUT_INFLATER_SERVICE );
convertView = inflater.inflate( R.layout.list_item_playlist, null );
holder.menuButton = ( ImageButton ) convertView.findViewById( R.id.PlaylistMenuButton );
holder.menuButton.setVisibility( View.GONE );
holder.playlistName = ( TextView ) convertView.findViewById( R.id.PlaylistTitle );
holder.songCount = ( TextView ) convertView.findViewById( R.id.SongCount );
convertView.setTag( holder );
} else {
holder = ( ViewHolder ) convertView.getTag();
}
mCursor.moveToPosition( position );
String playlist_id = mCursor.getString( mCursor.getColumnIndexOrThrow( MediaStore.Audio.Playlists._ID ) );
MediaQuery mSongCountQuery = new MediaQuery(
MediaStore.Audio.Playlists.Members.getContentUri( "external", Long.parseLong( playlist_id ) ),
new String[] {
MediaStore.Audio.Playlists.Members._ID
},
null,
null,
null
);
new QueryCountTask( holder.songCount ).execute( mSongCountQuery );
convertView.setTag( R.id.tag_playlist_id, playlist_id );
String playlistTitle = mCursor.getString( mCursor.getColumnIndexOrThrow( MediaStore.Audio.Playlists.NAME ) );
holder.playlistName.setText( playlistTitle );
return convertView;
}
}
static class ViewHolder {
TextView playlistName;
TextView songCount;
ImageButton menuButton;
}
private View.OnClickListener headerButtonClickListener = new View.OnClickListener() {
@Override public void onClick(View v) {
int id = v.getId();
if ( id == R.id.ButtonCancel ) {
dismiss();
}
}
};
}