package com.ideabag.playtunes.adapter; import com.ideabag.playtunes.R; import com.ideabag.playtunes.database.MediaQuery; import com.ideabag.playtunes.util.AlbumSongsCountTask; import android.content.Context; import android.provider.MediaStore; import android.view.LayoutInflater; import android.view.View; import android.view.ViewGroup; import android.widget.TextView; public class GenresAllAdapter extends AsyncQueryAdapter { private LayoutInflater inflater; public static final String[] SELECTION = new String[] { MediaStore.Audio.Genres.NAME, MediaStore.Audio.Genres._ID }; public GenresAllAdapter( Context context, MediaQuery.OnQueryCompletedListener listener ) { super( context ); inflater = ( LayoutInflater ) context.getSystemService( Context.LAYOUT_INFLATER_SERVICE ); mQuery = new MediaQuery( MediaStore.Audio.Genres.EXTERNAL_CONTENT_URI, SELECTION, null, null, MediaStore.Audio.Genres.DEFAULT_SORT_ORDER ); setOnQueryCompletedListener( listener ); requery(); } @Override public View getView( int position, View convertView, ViewGroup parent ) { ViewHolder holder; if ( null == convertView ) { holder = new ViewHolder(); convertView = inflater.inflate( R.layout.list_item_genre, null ); holder.genreName = ( TextView ) convertView.findViewById( R.id.Title ); holder.subtitle = ( TextView ) convertView.findViewById( R.id.Subtitle ); convertView.setTag( holder ); } else { holder = ( ViewHolder ) convertView.getTag(); } mCursor.moveToPosition( position ); String genre_id = mCursor.getString( mCursor.getColumnIndexOrThrow( MediaStore.Audio.Genres._ID ) ); new AlbumSongsCountTask( holder.subtitle ).execute( new MediaQuery( // First songs MediaStore.Audio.Genres.Members.getContentUri( "external", Long.parseLong( genre_id ) ), new String[] { MediaStore.Audio.Genres.Members._ID }, null, null, null ), new MediaQuery( // Then albums MediaStore.Audio.Genres.Members.getContentUri( "external", Long.parseLong( genre_id ) ), new String[] { "DISTINCT " + MediaStore.Audio.Genres.Members.ALBUM_ID }, null, null, null ) ); String genreName = mCursor.getString( mCursor.getColumnIndexOrThrow( MediaStore.Audio.Genres.NAME ) ); convertView.setTag( R.id.tag_genre_id, mCursor.getString( mCursor.getColumnIndexOrThrow( MediaStore.Audio.Genres._ID ) ) ); holder.genreName.setText( genreName ); return convertView; } static class ViewHolder { TextView genreName; TextView subtitle; } }