package com.ponyvillelive.pvlmobile.ui;
import android.content.Intent;
import android.graphics.drawable.Drawable;
import android.os.Bundle;
import android.os.RemoteException;
import android.support.v4.media.MediaDescriptionCompat;
import android.support.v4.media.MediaMetadataCompat;
import android.support.v4.media.session.MediaControllerCompat;
import android.support.v4.media.session.MediaSessionCompat;
import android.support.v4.media.session.PlaybackStateCompat;
import android.view.View;
import android.widget.ImageView;
import android.widget.ProgressBar;
import android.widget.TextView;
import com.ponyvillelive.pvlmobile.R;
import com.ponyvillelive.pvlmobile.service.MusicService;
import com.squareup.picasso.Picasso;
import butterknife.ButterKnife;
import butterknife.OnClick;
import timber.log.Timber;
/**
* Created by berwyn on 31/03/15.
*/
public class FullScreenPlayerActivity extends ActionBarCastActivity {
private static final String TAG = FullScreenPlayerActivity.class.getSimpleName();
ImageView thumbsUp;
ImageView thumbsDown;
ImageView playPause;
TextView line1;
TextView line2;
TextView line3;
ImageView artwork;
ProgressBar loadingProgress;
private Drawable playDrawable;
private Drawable stopDrawable;
private PlaybackStateCompat lastPlaybackState;
private MediaControllerCompat.Callback callback = new MediaControllerCompat.Callback() {
@Override
public void onPlaybackStateChanged(PlaybackStateCompat state) {
Timber.d(TAG, "onPlaybackStateChanged", state);
updatePlaybackState(state);
}
@Override
public void onMetadataChanged(MediaMetadataCompat metadata) {
if (metadata != null) {
updateMediaDescription(metadata.getDescription());
}
}
};
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_full_player);
initializeToolbar();
ButterKnife.inject(this);
getSupportActionBar().setDisplayHomeAsUpEnabled(true);
getSupportActionBar().setTitle("");
playDrawable = getResources().getDrawable(R.drawable.ic_play_arrow_white_48dp);
stopDrawable = getResources().getDrawable(R.drawable.ic_pause_white_48dp);
if (savedInstanceState == null) {
updateFromParams(getIntent());
}
}
private void updateFromParams(Intent intent) {
if (intent != null) {
MediaDescriptionCompat description =
intent.getParcelableExtra(MediaPlayerActivity.EXTRA_CURRENT_MEDIA_DESCRIPTION);
if (description != null) {
updateMediaDescription(description);
}
}
}
private void updateMediaDescription(MediaDescriptionCompat description) {
if (description == null) {
return;
}
Timber.d(TAG, "updateMediaDescription called");
line1.setText(description.getTitle());
line2.setText(description.getSubtitle());
Picasso.with(this)
.load(description.getIconUri())
.centerInside()
.into(artwork);
}
@Override
protected void onStop() {
super.onStop();
if (getMediaControllerCompat() != null) {
getMediaControllerCompat().unregisterCallback(callback);
}
}
@OnClick(R.id.play_pause)
public void playPausePressed(View v) {
PlaybackStateCompat state = getMediaControllerCompat().getPlaybackState();
MediaControllerCompat.TransportControls controls =
getMediaControllerCompat().getTransportControls();
switch (state.getState()) {
case PlaybackStateCompat.STATE_PLAYING:
case PlaybackStateCompat.STATE_BUFFERING:
controls.stop();
break;
case PlaybackStateCompat.STATE_PAUSED:
case PlaybackStateCompat.STATE_STOPPED:
controls.play();
break;
default:
Timber.d(TAG, "onClick with state ", state.getState());
}
}
private void connectToSession(MediaSessionCompat.Token token) {
MediaControllerCompat controller = null;
try {
controller = new MediaControllerCompat(FullScreenPlayerActivity.this, token);
} catch (RemoteException e) {
Timber.e(TAG, "connectToSession", e);
finish();
return;
}
if (controller.getMetadata() == null) {
finish();
return;
}
setMediaControllerCompat(controller);
controller.registerCallback(callback);
PlaybackStateCompat state = controller.getPlaybackState();
updatePlaybackState(state);
MediaMetadataCompat metadata = controller.getMetadata();
if (metadata != null) {
updateMediaDescription(metadata.getDescription());
}
}
private void updatePlaybackState(PlaybackStateCompat state) {
if (state == null) {
return;
}
lastPlaybackState = state;
String castName = getMediaControllerCompat()
.getExtras().getString(MusicService.EXTRA_CONNECTED_CAST);
String line3Text = "";
if (castName != null) {
line3Text = getResources().getString(R.string.casting_to_device, castName);
}
line3.setText(line3Text);
switch (state.getState()) {
case PlaybackStateCompat.STATE_PLAYING:
loadingProgress.setVisibility(View.INVISIBLE);
playPause.setVisibility(View.VISIBLE);
playPause.setImageDrawable(stopDrawable);
break;
case PlaybackStateCompat.STATE_NONE:
case PlaybackStateCompat.STATE_STOPPED:
loadingProgress.setVisibility(View.INVISIBLE);
playPause.setVisibility(View.VISIBLE);
playPause.setImageDrawable(playDrawable);
break;
case PlaybackStateCompat.STATE_BUFFERING:
loadingProgress.setVisibility(View.VISIBLE);
playPause.setVisibility(View.INVISIBLE);
playPause.setImageDrawable(playDrawable);
line3.setText(R.string.loading);
break;
default:
Timber.d(TAG, "updatePlaybackState called with unhandled state", state.getState());
}
}
}