package com.ideabag.playtunes.fragment.search; import android.app.Activity; import android.database.ContentObserver; import android.database.Cursor; import android.database.DataSetObserver; import android.os.Bundle; import android.os.Handler; import android.support.v4.app.FragmentTransaction; import android.view.LayoutInflater; import android.view.View; import android.widget.ImageView; import android.widget.LinearLayout; import android.widget.ListView; import android.widget.TextView; import android.widget.ToggleButton; import com.ideabag.playtunes.R; import com.ideabag.playtunes.activity.MainActivity; import com.ideabag.playtunes.adapter.search.SearchAlbumsAdapter; import com.ideabag.playtunes.adapter.search.SearchArtistsAdapter; import com.ideabag.playtunes.adapter.search.SearchSongsAdapter; import com.ideabag.playtunes.database.MediaQuery; import com.ideabag.playtunes.dialog.SongMenuDialogFragment; import com.ideabag.playtunes.fragment.AlbumsOneFragment; import com.ideabag.playtunes.fragment.ArtistsOneFragment; import com.ideabag.playtunes.fragment.SaveScrollListFragment; import com.ideabag.playtunes.util.MergeAdapter; import com.ideabag.playtunes.util.ISearchableAdapter; public class SearchAllFragment extends SaveScrollListFragment implements ISearchableAdapter { public static final String TAG = "SearchAllFragment"; private static int SEARCH_RESULT_LIMIT = 3; // The adapters MergeAdapter adapter; protected SearchSongsAdapter mSearchSongs; protected SearchAlbumsAdapter mSearchAlbums; protected SearchArtistsAdapter mSearchArtists; // Headers/dividers LinearLayout mSongsHeader; LinearLayout mAlbumsHeader; LinearLayout mArtistsHeader; TextView mSongsCount; TextView mAlbumsCount; TextView mArtistsCount; MainActivity mActivity; protected String mQueryString; SearchFragment mSearchFragment; public SearchAllFragment() { } public void setSearchFragment( SearchFragment fragment ) { mSearchFragment = fragment; } @Override public void onAttach( Activity activity ) { super.onAttach( activity ); mActivity = ( MainActivity ) activity; } @Override public void onSaveInstanceState( Bundle outState ) { super.onSaveInstanceState( outState ); outState.putString( getString( R.string.key_state_query_string ), mQueryString ); } @Override public void onActivityCreated( Bundle savedInstanceState ) { super.onActivityCreated( savedInstanceState ); if ( null != savedInstanceState ) { mQueryString = savedInstanceState.getString( getString( R.string.key_state_query_string ) ); } adapter = new MergeAdapter(); mSearchSongs = new SearchSongsAdapter( getActivity(), songMenuClickListener, mQueryString, SEARCH_RESULT_LIMIT, new MediaQuery.OnQueryCompletedListener() { @Override public void onQueryCompleted(MediaQuery mQuery, Cursor mResult) { int mSongCount = mResult.getCount(); mSongsCount.setText( "" + mSongCount ); } }); mSearchAlbums = new SearchAlbumsAdapter( getActivity(), mQueryString, SEARCH_RESULT_LIMIT, new MediaQuery.OnQueryCompletedListener() { @Override public void onQueryCompleted( MediaQuery mQuery, Cursor mResult ) { int mAlbumCount = mResult.getCount(); mAlbumsCount.setText( "" + mAlbumCount ); } }); mSearchArtists = new SearchArtistsAdapter( getActivity(), mQueryString, SEARCH_RESULT_LIMIT, new MediaQuery.OnQueryCompletedListener() { @Override public void onQueryCompleted( MediaQuery mQuery, Cursor mResult ) { int mArtistCount = mResult.getCount(); mArtistsCount.setText( "" + mArtistCount ); } }); LayoutInflater inflater = getActivity().getLayoutInflater(); mSongsHeader = ( LinearLayout ) inflater.inflate( R.layout.list_item_group_header, null ); mAlbumsHeader = ( LinearLayout ) inflater.inflate( R.layout.list_item_group_header, null ); mArtistsHeader = ( LinearLayout ) inflater.inflate( R.layout.list_item_group_header, null ); ( ( TextView ) mSongsHeader.findViewById( R.id.Title ) ).setText( getString( R.string.songs_plural ) ); ( ( TextView ) mAlbumsHeader.findViewById( R.id.Title ) ).setText( getString( R.string.albums_plural ) ); ( ( TextView ) mArtistsHeader.findViewById( R.id.Title ) ).setText( getString( R.string.artists_plural ) ); //ImageView iv; ( ( ImageView ) mArtistsHeader.findViewById( R.id.BadgeIcon ) ).setImageResource( R.drawable.ic_action_mic ); ( ( ImageView ) mAlbumsHeader.findViewById( R.id.BadgeIcon ) ).setImageResource( R.drawable.ic_action_record ); mSongsCount = ( TextView ) mSongsHeader.findViewById( R.id.Count ); mAlbumsCount = ( TextView ) mAlbumsHeader.findViewById( R.id.Count ); mArtistsCount = ( TextView ) mArtistsHeader.findViewById( R.id.Count ); // Songs adapter.addView( mSongsHeader, true ); adapter.addAdapter( mSearchSongs ); // Albums adapter.addView( mAlbumsHeader, true ); adapter.addAdapter( mSearchAlbums ); // Artists adapter.addView( mArtistsHeader, true ); adapter.addAdapter( mSearchArtists ); setListAdapter( adapter ); getView().setBackgroundColor( getResources().getColor( android.R.color.white ) ); getListView().setDivider( getResources().getDrawable( R.drawable.list_divider ) ); getListView().setDividerHeight( 1 ); getListView().setSelector( R.drawable.list_item_background ); } @Override public void onDestroyView() { super.onDestroyView(); setListAdapter( null ); } @Override public void onDestroy() { super.onDestroy(); } @Override public void setSearchTerms( String queryString ) { if ( null != queryString ) { if ( !queryString.equals( mQueryString ) ) { mQueryString = queryString; if ( null != mSearchSongs ) { mSearchSongs.setSearchTerms( queryString ); } if ( null != mSearchArtists ) { mSearchArtists.setSearchTerms( queryString ); } if ( null != mSearchAlbums ) { mSearchAlbums.setSearchTerms( queryString ); } } } } ContentObserver mediaStoreChanged = new ContentObserver(new Handler()) { @Override public void onChange( boolean selfChange ) { mActivity.runOnUiThread( new Runnable() { @Override public void run() { mSearchSongs.requery(); mSearchAlbums.requery(); mSearchArtists.requery(); } }); super.onChange( selfChange ); } }; View.OnClickListener songMenuClickListener = new View.OnClickListener() { @Override public void onClick( View v ) { int viewID = v.getId(); String songID = "" + v.getTag( R.id.tag_song_id ); if ( viewID == R.id.StarButton ) { ToggleButton starButton = ( ToggleButton ) v; if ( starButton.isChecked() ) { mActivity.PlaylistManager.addFavorite( songID ); //android.util.Log.i( "starred", songID ); } else { mActivity.PlaylistManager.removeFavorite( songID ); //android.util.Log.i( "unstarred", songID ); } } else if ( viewID == R.id.MenuButton ) { FragmentTransaction ft = getActivity().getSupportFragmentManager().beginTransaction(); SongMenuDialogFragment newFragment = new SongMenuDialogFragment(); newFragment.setMediaID( songID ); newFragment.show( ft, "dialog" ); } } }; @Override public void onListItemClick( ListView l, View v, int position, long id ) { //convertView.setTag( R.id.tag_album_id, cursor.getString( cursor.getColumnIndexOrThrow( MediaStore.Audio.Albums.ALBUM ) ) ); int mSongSection = mSearchSongs.getCount() + 1; int mAlbumsSection = mSongSection + mSearchAlbums.getCount() + 1; int mArtistsSection = mAlbumsSection + mSearchArtists.getCount(); if ( position == 0 ) { // Songs header SearchSongsFragment songFragment = new SearchSongsFragment( mSearchSongs ); //SearchSongsAdapter. mSearchFragment.transactFragment( songFragment ); } else if ( position > 0 && position < mSongSection ) { // Play song String playlistName = getString( R.string.search ) + " \"" + mQueryString + "\""; // // A bit of explanation is required here. // The setPlaylist method takes a Fragment class and a media id // When the user wants to return to "now playing", this information is used to regenerate the playing fragment // In this case, the media_id is the search query instead of a normal media id for an album, playlist, or artist // mActivity.mBoundService.setPlaylist( mSearchSongs.getQuery(), playlistName, SearchFragment.class, mQueryString ); mActivity.mBoundService.setPlaylistPosition( position - 1 ); // subtract one for the SONGS header mActivity.mBoundService.play(); } else if ( position == mSongSection ) { // Album Header SearchAlbumsFragment albumFragment = new SearchAlbumsFragment( mSearchAlbums ); mSearchFragment.transactFragment( albumFragment ); } else if ( position > mSongSection && position < mAlbumsSection ) { // Show Album String albumID = ( String ) v.getTag( R.id.tag_album_id ); AlbumsOneFragment albumFragment = new AlbumsOneFragment( ); albumFragment.setMediaID( albumID ); mActivity.NavigationFragment.transactFragment( albumFragment ); //mSearchFragment.transactFragment( albumFragment ); } else if ( position == mAlbumsSection ) { // Artists Header SearchArtistsFragment artistFragment = new SearchArtistsFragment( mSearchArtists ); mSearchFragment.transactFragment( artistFragment ); } else if ( position > mAlbumsSection && position <= mArtistsSection ) { // Show Artist String artistID = ( String ) v.getTag( R.id.tag_artist_id ); ArtistsOneFragment artistFragment = new ArtistsOneFragment(); artistFragment.setMediaID( artistID ); mActivity.NavigationFragment.transactFragment( artistFragment ); } } }