package com.wigwamlabs.spotify.ui; import android.content.Context; import android.media.AudioManager; import android.view.View; import android.widget.ProgressBar; import android.widget.SeekBar; import android.widget.TextView; import com.wigwamlabs.spotify.Player; import com.wigwamlabs.spotify.Session; import com.wigwamlabs.spotify.Track; public abstract class SpotifyPlayerActivity extends SpotifyActivity implements Player.Callback { private Player mPlayer; private SpotifyImageView mTrackImage; private TextView mTrackArtists; private TextView mTrackName; private View mResumeButton; private View mPauseButton; private View mNextButton; private ProgressBar mTrackProgress; private boolean mTrackProgressIsBeingManipulated; private int mTrackImageSize; @Override protected void onResume() { super.onResume(); if (mPlayer != null) { mPlayer.addCallback(this, true); } } @Override protected void onPause() { super.onPause(); if (mPlayer != null) { mPlayer.removeCallback(this); } } @Override protected void onDestroy() { if (mPlayer != null) { mPlayer.removeCallback(this); mPlayer = null; } super.onDestroy(); } protected void setTrackImage(SpotifyImageView image, int size) { mTrackImageSize = size; if (image != null) { final Session session = getSpotifySession(); if (session != null) { image.setImageProvider(session.getImageProvider()); } } mTrackImage = image; } protected void setTrackArtists(TextView trackArtists) { mTrackArtists = trackArtists; } protected void setTrackName(TextView trackName) { mTrackName = trackName; } protected void setResumeButton(View button) { mResumeButton = button; mResumeButton.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { mPlayer.resume(); } }); } protected void setPauseButton(View button) { mPauseButton = button; mPauseButton.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { mPlayer.pause(); } }); } protected void setNextButton(View button) { mNextButton = button; mNextButton.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { mPlayer.next(); } }); } protected void setTrackProgress(ProgressBar progressBar) { mTrackProgress = progressBar; if (progressBar != null && progressBar instanceof SeekBar) { final SeekBar seekBar = (SeekBar) progressBar; seekBar.setOnSeekBarChangeListener(new SeekBar.OnSeekBarChangeListener() { @Override public void onProgressChanged(SeekBar seekBar, int progress, boolean fromUser) { } @Override public void onStartTrackingTouch(SeekBar seekBar) { mTrackProgressIsBeingManipulated = true; } @Override public void onStopTrackingTouch(SeekBar seekBar) { mTrackProgressIsBeingManipulated = false; onSeekToPosition(seekBar.getProgress()); } }); } } protected Player getPlayer() { return mPlayer; } @Override protected void onSpotifySessionAttached(Session spotifySession) { mPlayer = spotifySession.getPlayer(); mPlayer.addCallback(this, true); if (mTrackImage != null) { mTrackImage.setImageProvider(spotifySession.getImageProvider()); } } @Override public void onStateChanged(int state) { //TODO update seekbar switch (state) { case Player.STATE_STARTED: case Player.STATE_STOPPED: if (mPauseButton != null) { mPauseButton.setVisibility(View.GONE); } if (mResumeButton != null) { mResumeButton.setVisibility(View.GONE); } if (mNextButton != null) { mNextButton.setVisibility(View.GONE); } break; case Player.STATE_PLAYING: if (mPauseButton != null) { mPauseButton.setVisibility(View.VISIBLE); } if (mResumeButton != null) { mResumeButton.setVisibility(View.GONE); } if (mNextButton != null) { mNextButton.setVisibility(View.VISIBLE); } break; case Player.STATE_PAUSED_USER: case Player.STATE_PAUSED_AUDIOFOCUS: case Player.STATE_PAUSED_NOISY: if (mPauseButton != null) { mPauseButton.setVisibility(View.GONE); } if (mResumeButton != null) { mResumeButton.setVisibility(View.VISIBLE); } if (mNextButton != null) { mNextButton.setVisibility(View.VISIBLE); } break; } } @Override public void onCurrentTrackUpdated(Track track) { if (track != null) { if (mTrackImage != null) { mTrackImage.setImageLink(track.getImageLink(mTrackImageSize)); } if (mTrackArtists != null) { mTrackArtists.setText(track.getArtistsString()); } if (mTrackName != null) { mTrackName.setText(track.getName()); } } } @Override public void onTrackProgress(int secondsPlayed, int secondsDuration) { if (mTrackProgress != null && !mTrackProgressIsBeingManipulated) { mTrackProgress.setMax(secondsDuration); mTrackProgress.setProgress(secondsPlayed); } } private void onSeekToPosition(int progressSeconds) { mPlayer.seek(progressSeconds * 1000); } protected AudioManager getAudioManager() { return (AudioManager) getSystemService(Context.AUDIO_SERVICE); } }