package com.ideabag.playtunes.fragment; import com.google.android.gms.analytics.HitBuilders; import com.google.android.gms.analytics.Tracker; import com.ideabag.playtunes.PlaylistManager; import com.ideabag.playtunes.R; import com.ideabag.playtunes.activity.MainActivity; import com.ideabag.playtunes.adapter.SongsAllAdapter; import com.ideabag.playtunes.database.MediaQuery; import com.ideabag.playtunes.dialog.SongMenuDialogFragment; import com.ideabag.playtunes.media.PlaylistMediaPlayer.PlaybackListener; import com.ideabag.playtunes.util.GAEvent.Playlist; import com.ideabag.playtunes.util.IMusicBrowser; import com.ideabag.playtunes.util.TrackerSingleton; import com.ideabag.playtunes.util.GAEvent.Categories; import com.ideabag.playtunes.widget.StarButton; import android.app.Activity; import android.content.ContentResolver; import android.database.ContentObserver; import android.database.Cursor; import android.os.Bundle; import android.os.Handler; import android.provider.MediaStore; import android.support.v4.app.FragmentTransaction; import android.view.View; import android.widget.AdapterView; import android.widget.ListView; import android.widget.ToggleButton; public class SongsFragment extends SaveScrollListFragment implements IMusicBrowser { public static final String TAG = "All Songs Fragment"; private MainActivity mActivity; private Tracker mTracker; ContentResolver mResolver; SongsAllAdapter adapter; private PlaylistManager mPlaylistManager; @Override public void onAttach( Activity activity ) { super.onAttach( activity ); mActivity = ( MainActivity ) activity; mTracker = TrackerSingleton.getDefaultTracker( mActivity ); mTracker.setScreenName( TAG ); mResolver = activity.getContentResolver(); mActivity.setActionbarTitle( getString( R.string.all_songs ) ); } @Override public void onActivityCreated( Bundle savedInstanceState ) { super.onActivityCreated( savedInstanceState ); mActivity.setActionbarTitle( getString( R.string.all_songs ) ); adapter = new SongsAllAdapter( getActivity(), songMenuClickListener, new MediaQuery.OnQueryCompletedListener() { @Override public void onQueryCompleted( MediaQuery mQuery, Cursor mResult ) { mActivity.setActionbarSubtitle( mResult.getCount() + " " + ( mResult.getCount() == 1 ? getString( R.string.song_singular ) : getString( R.string.songs_plural ) ) ); restoreScrollPosition(); mTracker.send( new HitBuilders.EventBuilder() .setCategory( Categories.PLAYLIST ) .setAction( Playlist.ACTION_SHOWLIST ) .setValue( mResult.getCount() ) .build()); } }); mPlaylistManager = new PlaylistManager( getActivity() ); 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 ); if ( android.os.Build.VERSION.SDK_INT < android.os.Build.VERSION_CODES.HONEYCOMB ) { getListView().setSelector( R.drawable.list_item_background ); } getListView().setOnItemLongClickListener( mSongMenuLongClickListener ); setListAdapter( adapter ); mResolver.registerContentObserver( MediaStore.Audio.Media.EXTERNAL_CONTENT_URI, true, mediaStoreChanged ); mResolver.registerContentObserver( MediaStore.Audio.Playlists.Members.getContentUri( "external", Long.parseLong( mPlaylistManager.createStarredIfNotExist() ) ), true, mediaStoreChanged ); } @Override public void onResume() { super.onResume(); mActivity.setActionbarTitle( getString( R.string.all_songs ) ); mTracker.send( new HitBuilders.AppViewBuilder().build() ); mActivity.addPlaybackListener( mPlaybackListener ); android.util.Log.i( TAG, "onResume"); } @Override public void onPause() { super.onPause(); //mActivity.AdView.pause(); mActivity.removePlaybackListener( mPlaybackListener ); android.util.Log.i( TAG, "onPause"); } @Override public void onDestroyView() { super.onDestroyView(); //setListAdapter( null ); } @Override public void onDestroy() { super.onDestroy(); mResolver.unregisterContentObserver( mediaStoreChanged ); } @Override public void onListItemClick( ListView l, View v, int position, long id ) { String playlistName = mActivity.getSupportActionBar().getTitle().toString(); mActivity.mBoundService.setPlaylist( adapter.getQuery(), playlistName, SongsFragment.class, null ); //mActivity.mBoundService.setPlaylistCursor( adapter.getCursor() ); mActivity.mBoundService.setPlaylistPosition( position ); mActivity.mBoundService.play(); mTracker.send( new HitBuilders.EventBuilder() .setCategory( Categories.PLAYLIST ) .setAction( Playlist.ACTION_CLICK ) .setValue( position ) .build()); } protected AdapterView.OnItemLongClickListener mSongMenuLongClickListener = new AdapterView.OnItemLongClickListener() { @Override public boolean onItemLongClick( AdapterView<?> arg0, View v, int position, long id ) { showSongMenuDialog( "" + id ); mTracker.send( new HitBuilders.EventBuilder() .setCategory( Categories.PLAYLIST ) .setAction( Playlist.ACTION_LONGCLICK ) .setValue( position ) .build()); return true; } }; protected 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 ) { StarButton starButton = ( StarButton ) 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 ) { showSongMenuDialog( songID ); } } }; protected void showSongMenuDialog( String songID ) { FragmentTransaction ft = getActivity().getSupportFragmentManager().beginTransaction(); SongMenuDialogFragment newFragment = new SongMenuDialogFragment(); newFragment.setMediaID( songID ); newFragment.show( ft, "dialog" ); } // PlaylistBrowser interface methods @Override public void setMediaID(String media_id) { /* ... */ } @Override public String getMediaID() { return ""; } ContentObserver mediaStoreChanged = new ContentObserver(new Handler()) { @Override public void onChange( boolean selfChange ) { mActivity.runOnUiThread( new Runnable() { @Override public void run() { saveScrollPosition(); adapter.requery(); } }); super.onChange( selfChange ); } }; private PlaybackListener mPlaybackListener = new PlaybackListener() { @Override public void onTrackChanged( String media_id ) { adapter.setNowPlayingMedia( media_id ); } @Override public void onPlaylistDone() { adapter.setNowPlayingMedia( null ); } @Override public void onPlay() { } @Override public void onPause() { } @Override public void onLoopingChanged(int loop) { } @Override public void onShuffleChanged(boolean isShuffling) { } @Override public void onDurationChanged( int position, int duration ) { } }; }