package tv.emby.embyatv.ui;
import android.content.Context;
import android.content.Intent;
import android.graphics.Rect;
import android.graphics.Typeface;
import android.util.AttributeSet;
import android.view.LayoutInflater;
import android.view.View;
import android.widget.FrameLayout;
import android.widget.ImageView;
import android.widget.TextView;
import com.squareup.picasso.Picasso;
import mediabrowser.model.dto.BaseItemDto;
import tv.emby.embyatv.R;
import tv.emby.embyatv.TvApp;
import tv.emby.embyatv.itemhandling.BaseRowItem;
import tv.emby.embyatv.playback.AudioEventListener;
import tv.emby.embyatv.playback.AudioNowPlayingActivity;
import tv.emby.embyatv.playback.MediaManager;
import tv.emby.embyatv.playback.PlaybackController;
import tv.emby.embyatv.util.Utils;
/**
* Created by Eric on 7/22/2015.
*/
public class NowPlayingBug extends FrameLayout {
ImageView npIcon;
TextView npDesc;
TextView npStatus;
String currentDuration;
Context context;
public NowPlayingBug(Context context) {
super(context);
init(context);
}
public NowPlayingBug(Context context, AttributeSet attrs) {
super(context, attrs);
init(context);
}
private void init(Context context) {
this.context = context;
LayoutInflater inflater = LayoutInflater.from(context);
View v = inflater.inflate(R.layout.now_playing_bug, null, false);
this.addView(v);
if (!isInEditMode()) {
Typeface font = TvApp.getApplication().getDefaultFont();
npIcon = (ImageView)v.findViewById(R.id.npIcon);
npDesc = ((TextView) v.findViewById(R.id.npDesc));
npDesc.setTypeface(font);
npStatus = ((TextView) v.findViewById(R.id.npStatus));
npStatus.setTypeface(font);
this.setFocusable(true);
this.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
if (TvApp.getApplication().getCurrentActivity() != null) {
Intent np = new Intent(TvApp.getApplication(), AudioNowPlayingActivity.class);
TvApp.getApplication().getCurrentActivity().startActivity(np);
}
}
});
}
}
@Override
protected void onFocusChanged(boolean gainFocus, int direction, Rect previouslyFocusedRect) {
super.onFocusChanged(gainFocus, direction, previouslyFocusedRect);
if (gainFocus) {
this.setBackgroundResource(R.color.lb_default_brand_color);
} else {
this.setBackground(null);
}
}
AudioEventListener listener = new AudioEventListener() {
@Override
public void onPlaybackStateChange(PlaybackController.PlaybackState newState, BaseItemDto currentItem) {
if (newState == PlaybackController.PlaybackState.PLAYING && currentItem != null) setInfo(currentItem);
}
@Override
public void onProgress(long pos) {
if (isShown()) npStatus.setText(Utils.formatMillis(pos) + "/" + currentDuration);
}
@Override
public void onQueueStatusChanged(boolean hasQueue) {
if (hasQueue) {
// may have just added one so update display
setInfo(MediaManager.getCurrentAudioItem());
npStatus.setText(Utils.formatMillis(MediaManager.getCurrentAudioPosition()) + "/" + currentDuration);
setVisibility(VISIBLE);
} else {
setVisibility(GONE);
}
}
};
@Override
protected void onAttachedToWindow() {
super.onAttachedToWindow();
if (!isInEditMode()) {
// hook our events
MediaManager.addAudioEventListener(listener);
if (manageVisibility()) {
setInfo(MediaManager.getCurrentAudioItem());
npStatus.setText(Utils.formatMillis(MediaManager.getCurrentAudioPosition()) + "/" + currentDuration);
}
}
}
@Override
protected void onDetachedFromWindow() {
super.onDetachedFromWindow();
if (!isInEditMode()) {
// unhook our events
MediaManager.removeAudioEventListener(listener);
}
}
private void setInfo(BaseItemDto item) {
if (item == null) return;
Picasso.with(context).load(Utils.getPrimaryImageUrl(item, TvApp.getApplication().getApiClient())).error(R.drawable.audioicon).resize(35,35).centerInside().into(npIcon);
currentDuration = Utils.formatMillis(item.getRunTimeTicks() != null ? item.getRunTimeTicks() / 10000 : 0);
npDesc.setText(item.getAlbumArtist() != null ? item.getAlbumArtist() : item.getName());
}
public boolean manageVisibility() {
this.setVisibility(MediaManager.hasAudioQueueItems() ? VISIBLE : GONE);
return MediaManager.hasAudioQueueItems();
}
public void showDescription(boolean show) {
npDesc.setVisibility(show ? VISIBLE : GONE);
}
}