package com.ideabag.playtunes.fragment;
import com.google.android.gms.analytics.HitBuilders;
import com.google.android.gms.analytics.Tracker;
import com.ideabag.playtunes.R;
import com.ideabag.playtunes.activity.MainActivity;
import com.ideabag.playtunes.adapter.ArtistAlbumsAdapter;
import com.ideabag.playtunes.adapter.ArtistAllSongsAdapter;
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.Categories;
import com.ideabag.playtunes.util.GAEvent.Playlist;
import com.ideabag.playtunes.util.IMusicBrowser;
import com.ideabag.playtunes.util.MergeAdapter;
import com.ideabag.playtunes.util.TrackerSingleton;
import android.app.Activity;
import android.database.Cursor;
import android.os.Bundle;
import android.provider.MediaStore;
import android.support.v4.app.FragmentTransaction;
import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.AdapterView;
import android.widget.ListView;
import android.widget.TextView;
import android.widget.ToggleButton;
public class ArtistsOneFragment extends SaveScrollListFragment implements IMusicBrowser {
public static final String TAG = "One Artist Fragment";
private ViewGroup Singles = null;
ArtistAlbumsAdapter mAlbumsAdapter;
ArtistAllSongsAdapter mSongsAdapter;
MergeAdapter adapter;
private MainActivity mActivity;
private Tracker mTracker;
private String ARTIST_ID = "";
int singlesCount;
@Override public void setMediaID( String media_id ) {
ARTIST_ID = media_id;
}
@Override public String getMediaID() { return ARTIST_ID; }
@Override public void onAttach( Activity activity ) {
super.onAttach( activity );
mActivity = ( MainActivity ) activity;
mTracker = TrackerSingleton.getDefaultTracker( mActivity );
mTracker.setScreenName( TAG );
mActivity.setActionbarSubtitle( getString( R.string.artist_singular ) );
MediaQuery mGetArtistName = new MediaQuery(
MediaStore.Audio.Artists.EXTERNAL_CONTENT_URI,
new String[] {
MediaStore.Audio.Artists.ARTIST,
MediaStore.Audio.Artists._ID
},
MediaStore.Audio.Artists._ID + " =?",
new String[] {
ARTIST_ID
},
null
);
MediaQuery.executeAsync( getActivity(), mGetArtistName, new MediaQuery.OnQueryCompletedListener() {
@Override public void onQueryCompleted(MediaQuery mQuery, Cursor mResult) {
if ( mResult != null && mResult.getCount() > 0 ) {
mResult.moveToFirst();
try {
mActivity.setActionbarTitle( mResult.getString( mResult.getColumnIndexOrThrow( MediaStore.Audio.Artists.ARTIST ) ) );
//mActivity.setActionbarSubtitle( mResult.getCount() + " " + ( mResult.getCount() == 1 ? getString( R.string.song_singular) : getString( R.string.songs_plural) ) );
} catch( Exception e ) {
mActivity.setActionbarTitle( null );
//mActivity.setActionbarSubtitle( null );
}
restoreScrollPosition();
}
if ( mResult != null && !mResult.isClosed() ) {
mResult.close();
}
}
});
}
@Override public void onSaveInstanceState( Bundle outState ) {
super.onSaveInstanceState( outState );
outState.putString( getString( R.string.key_state_media_id ), ARTIST_ID );
}
@Override public void onActivityCreated( Bundle savedInstanceState ) {
super.onActivityCreated( savedInstanceState );
adapter = new MergeAdapter();
if ( null != savedInstanceState ) {
ARTIST_ID = savedInstanceState.getString( getString( R.string.key_state_media_id ) );
}
LayoutInflater inflater = mActivity.getLayoutInflater();
mAlbumsAdapter = new ArtistAlbumsAdapter( getActivity(), ARTIST_ID, null );
adapter.addAdapter( mAlbumsAdapter );
Cursor singlesCountCursor = getActivity().getContentResolver().query(
MediaStore.Audio.Media.EXTERNAL_CONTENT_URI,
new String[] {
MediaStore.Audio.Media.ARTIST_ID,
MediaStore.Audio.Media._ID
},
MediaStore.Audio.Media.ARTIST_ID + "=? AND " + MediaStore.Audio.Media.ALBUM + "=?",
new String[] {
ARTIST_ID,
getString( R.string.no_album_string )
},
null
);
getView().setBackgroundColor( getResources().getColor( android.R.color.white ) );
singlesCount = singlesCountCursor.getCount();
singlesCountCursor.close();
if ( singlesCount > 0) {
Singles = ( ViewGroup ) inflater.inflate( R.layout.list_item_navigation_title, null );
( ( TextView ) Singles.findViewById( R.id.BadgeCount ) ).setText( "" + singlesCount );
( ( TextView ) Singles.findViewById( R.id.Title ) ).setText( getString( R.string.artist_singles ) );
//getListView().addHeaderView( Singles, null, true );
adapter.addView( Singles );
}
mSongsAdapter = new ArtistAllSongsAdapter( getActivity(), ARTIST_ID, songMenuClickListener, null );
adapter.addAdapter( mSongsAdapter );
getListView().setDivider( getResources().getDrawable( R.drawable.list_divider ) );
getListView().setDividerHeight( 1 );
getListView().setOnItemLongClickListener( mSongMenuLongClickListener );
setListAdapter( adapter );
}
@Override public void onResume() {
super.onResume();
mActivity.addPlaybackListener( mPlaybackListener );
mTracker.send( new HitBuilders.AppViewBuilder().build() );
mTracker.send( new HitBuilders.EventBuilder()
.setCategory( Categories.PLAYLIST )
.setAction( Playlist.ACTION_SHOWLIST )
.setValue( adapter.getCount() )
.build());
}
@Override public void onPause() {
super.onPause();
mActivity.removePlaybackListener( mPlaybackListener );
}
@Override public void onDestroyView() {
super.onDestroyView();
//setListAdapter( null );
}
@Override public void onListItemClick( ListView l, View v, int position, long id ) {
int mAlbumCount = mAlbumsAdapter.getCount();
if ( position < mAlbumCount ) {
String albumID = ( String ) v.getTag( R.id.tag_album_id );
AlbumsOneFragment albumFragment = new AlbumsOneFragment( );
albumFragment.setMediaID( albumID );
mActivity.transactFragment( albumFragment );
mTracker.send( new HitBuilders.EventBuilder()
.setCategory( Categories.PLAYLIST )
.setAction( Playlist.ACTION_CLICK )
.setValue( position )
.setLabel( "album" )
.build());
} else if ( singlesCount > 0 && position == mAlbumCount ) {
// Singles
ArtistSinglesFragment singlesFragment = new ArtistSinglesFragment();
singlesFragment.setMediaID( ARTIST_ID );
mActivity.transactFragment( singlesFragment );
} else if ( singlesCount == 0 && position >= mAlbumCount ) {
String playlistName = mActivity.getSupportActionBar().getTitle().toString();
mActivity.mBoundService.setPlaylist( mSongsAdapter.getQuery(), playlistName, ArtistsOneFragment.class, ARTIST_ID );
//mActivity.mBoundService.setPlaylistCursor( adapter.getCursor() );
mActivity.mBoundService.setPlaylistPosition( position - mAlbumCount );
mActivity.mBoundService.play();
mTracker.send( new HitBuilders.EventBuilder()
.setCategory( Categories.PLAYLIST )
.setAction( Playlist.ACTION_CLICK )
.setValue( position - mAlbumsAdapter.getCount() )
.setLabel( "song" )
.build());
} else if ( singlesCount > 0 && position > mAlbumCount ) {
String playlistName = mActivity.getSupportActionBar().getTitle().toString();
mActivity.mBoundService.setPlaylist( mSongsAdapter.getQuery(), playlistName, ArtistsOneFragment.class, ARTIST_ID );
//mActivity.mBoundService.setPlaylistCursor( adapter.getCursor() );
mActivity.mBoundService.setPlaylistPosition( position - ( mAlbumCount + 1 ) );
mActivity.mBoundService.play();
mTracker.send( new HitBuilders.EventBuilder()
.setCategory( Categories.PLAYLIST )
.setAction( Playlist.ACTION_CLICK )
.setValue( position - mAlbumsAdapter.getCount() )
.setLabel( "song" )
.build());
}
}
protected AdapterView.OnItemLongClickListener mSongMenuLongClickListener = new AdapterView.OnItemLongClickListener() {
@Override public boolean onItemLongClick(AdapterView<?> arg0, View v, int position, long id) {
if ( position >= mAlbumsAdapter.getCount() ) {
int absPosition = position - mAlbumsAdapter.getCount();
showSongMenuDialog( "" + mSongsAdapter.getItemId( absPosition ) );
mTracker.send( new HitBuilders.EventBuilder()
.setCategory( Categories.PLAYLIST )
.setAction( Playlist.ACTION_LONGCLICK )
.setValue( position - mAlbumsAdapter.getCount() )
.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 ) {
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 ) {
showSongMenuDialog( songID );
}
}
};
protected void showSongMenuDialog( String songID ) {
FragmentTransaction ft = getActivity().getSupportFragmentManager().beginTransaction();
SongMenuDialogFragment newFragment = new SongMenuDialogFragment();
newFragment.setMediaID( songID );
newFragment.show( ft, "dialog" );
}
private PlaybackListener mPlaybackListener = new PlaybackListener() {
@Override public void onTrackChanged( String media_id ) {
mSongsAdapter.setNowPlayingMedia( media_id );
}
@Override public void onPlaylistDone() {
mSongsAdapter.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 ) { }
};
}