package com.sregg.android.tv.spotifyPlayer.fragments; import android.content.Intent; import android.os.Bundle; import android.support.annotation.Nullable; import android.support.v17.leanback.widget.Action; import android.support.v17.leanback.widget.OnItemViewClickedListener; import android.support.v17.leanback.widget.Presenter; import android.util.Log; import com.crashlytics.android.answers.Answers; import com.crashlytics.android.answers.ContentViewEvent; import com.sregg.android.tv.spotifyPlayer.Constants; import com.sregg.android.tv.spotifyPlayer.SpotifyTvApplication; import com.sregg.android.tv.spotifyPlayer.activities.PlaylistActivity; import com.sregg.android.tv.spotifyPlayer.events.ContentState; import com.sregg.android.tv.spotifyPlayer.presenters.PlaylistDetailsPresenter; import com.sregg.android.tv.spotifyPlayer.presenters.PlaylistTrackRowPresenter; import java.util.ArrayList; import java.util.List; import kaaes.spotify.webapi.android.models.Playlist; import kaaes.spotify.webapi.android.models.PlaylistTrack; import kaaes.spotify.webapi.android.models.TrackSimple; import retrofit.Callback; import retrofit.RetrofitError; import retrofit.client.Response; public class PlaylistDetailsFragment extends TracksDetailsFragment { private static final String TAG = PlaylistDetailsFragment.class.getSimpleName(); private String mPlaylistId; private String mUserId; private Playlist mPlaylist; private List<String> mPlaylistTrackUris; private List<TrackSimple> mPlaylistTracks; @Override public void onCreate(Bundle savedInstanceState) { Log.d(TAG, "onCreate"); super.onCreate(savedInstanceState); Intent intent = getActivity().getIntent(); mPlaylistId = intent.getStringExtra(PlaylistActivity.ARG_PLAYLIST_ID); mUserId = intent.getStringExtra(PlaylistActivity.ARG_USER_ID); loadPlaylist(); Answers.getInstance().logContentView(new ContentViewEvent() .putContentName(Constants.ANSWERS_CONTENT_NAME) .putContentType(Constants.ANSWERS_CONTENT_TYPE) .putContentId(mPlaylistId)); } @Override List<Action> getDetailActions() { //no extra actions return null; } @Override protected Presenter getDetailsPresenter() { return new PlaylistDetailsPresenter(); } @Override protected Presenter getTrackRowPresenter(OnItemViewClickedListener onTrackRowItemClicked) { return new PlaylistTrackRowPresenter(onTrackRowItemClicked); } @Override @Nullable protected List<TrackSimple> getTracks() { return mPlaylistTracks; } @Override @Nullable protected List<String> getTrackUris() { return mPlaylistTrackUris; } @Override @Nullable protected String getObjectUri() { return null != mPlaylist ? mPlaylist.uri : null; } @Override protected Object getObject() { return mPlaylist; } private void loadPlaylist() { // load artist from API to get their image SpotifyTvApplication.getInstance().getSpotifyService().getPlaylist(mUserId, mPlaylistId, new Callback<Playlist>() { @Override public void success(final Playlist playlist, Response response) { if (!isAdded()) { return; } mPlaylist = playlist; mPlaylistTracks = new ArrayList<>(playlist.tracks.items.size()); mPlaylistTrackUris = new ArrayList<>(playlist.tracks.items.size()); for (PlaylistTrack playlistTrack : playlist.tracks.items) { mPlaylistTracks.add(playlistTrack.track); mPlaylistTrackUris.add(playlistTrack.track.uri); } onContentLoaded(); scrollToCurrentTrack(); } @Override public void failure(RetrofitError error) { } }); } /** * Attempt to scroll to the track row that is currently playing */ protected void scrollToCurrentTrack() { ContentState currentPlayState = playerController.getPlayingState(); if (currentPlayState != null && currentPlayState.isCurrentObject(mPlaylist.uri)) { TrackSimple currentTrack = currentPlayState.getCurrentTrack(); //try to scroll to track row that is currently playing int playingTrackPosition = 0; for (TrackSimple track : mPlaylistTracks) { if (currentTrack != null && track.id.equals(currentTrack.id)) { playingTrackPosition = mPlaylistTracks.indexOf(track); break; } } setSelectedPosition(playingTrackPosition); } } }