|
|
|
|
@ -3,6 +3,8 @@ package com.fongmi.android.tv.player; |
|
|
|
|
import android.app.Activity; |
|
|
|
|
import android.app.PendingIntent; |
|
|
|
|
import android.content.Intent; |
|
|
|
|
import android.graphics.drawable.BitmapDrawable; |
|
|
|
|
import android.graphics.drawable.Drawable; |
|
|
|
|
import android.net.Uri; |
|
|
|
|
import android.os.Bundle; |
|
|
|
|
import android.support.v4.media.MediaMetadataCompat; |
|
|
|
|
@ -627,7 +629,15 @@ public class Players implements Player.Listener, IMediaPlayer.Listener, ParseCal |
|
|
|
|
return bundle; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
public void setMetadata(String title, String artist, String artUri) { |
|
|
|
|
private MediaMetadataCompat.Builder putBitmap(MediaMetadataCompat.Builder builder, Drawable drawable) { |
|
|
|
|
try { |
|
|
|
|
return builder.putBitmap(MediaMetadataCompat.METADATA_KEY_ART, ((BitmapDrawable) drawable).getBitmap()); |
|
|
|
|
} catch (Exception ignored) { |
|
|
|
|
return builder; |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
public void setMetadata(String title, String artist, String artUri, Drawable drawable) { |
|
|
|
|
MediaMetadataCompat.Builder builder = new MediaMetadataCompat.Builder(); |
|
|
|
|
builder.putString(MediaMetadataCompat.METADATA_KEY_TITLE, title); |
|
|
|
|
builder.putString(MediaMetadataCompat.METADATA_KEY_ARTIST, artist); |
|
|
|
|
@ -635,7 +645,7 @@ public class Players implements Player.Listener, IMediaPlayer.Listener, ParseCal |
|
|
|
|
builder.putString(MediaMetadataCompat.METADATA_KEY_ALBUM_ART_URI, artUri); |
|
|
|
|
builder.putString(MediaMetadataCompat.METADATA_KEY_DISPLAY_ICON_URI, artUri); |
|
|
|
|
builder.putLong(MediaMetadataCompat.METADATA_KEY_DURATION, getDuration()); |
|
|
|
|
session.setMetadata(builder.build()); |
|
|
|
|
session.setMetadata(putBitmap(builder, drawable).build()); |
|
|
|
|
ActionEvent.update(); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
@ -697,8 +707,21 @@ public class Players implements Player.Listener, IMediaPlayer.Listener, ParseCal |
|
|
|
|
|
|
|
|
|
@Override |
|
|
|
|
public void onEvents(@NonNull Player player, @NonNull Player.Events events) { |
|
|
|
|
if (!events.containsAny(Player.EVENT_PLAYBACK_STATE_CHANGED, Player.EVENT_PLAY_WHEN_READY_CHANGED, Player.EVENT_IS_PLAYING_CHANGED, Player.EVENT_TIMELINE_CHANGED, Player.EVENT_PLAYBACK_PARAMETERS_CHANGED, Player.EVENT_POSITION_DISCONTINUITY, Player.EVENT_MEDIA_METADATA_CHANGED)) return; |
|
|
|
|
setPlaybackState(isPlaying() ? PlaybackStateCompat.STATE_PLAYING : PlaybackStateCompat.STATE_PAUSED); |
|
|
|
|
if (!events.containsAny(Player.EVENT_TIMELINE_CHANGED, Player.EVENT_IS_PLAYING_CHANGED, Player.EVENT_POSITION_DISCONTINUITY, Player.EVENT_MEDIA_METADATA_CHANGED, Player.EVENT_PLAYBACK_STATE_CHANGED, Player.EVENT_PLAY_WHEN_READY_CHANGED, Player.EVENT_PLAYBACK_PARAMETERS_CHANGED, Player.EVENT_PLAYER_ERROR)) return; |
|
|
|
|
switch (player.getPlaybackState()) { |
|
|
|
|
case Player.STATE_IDLE: |
|
|
|
|
setPlaybackState(events.contains(Player.EVENT_PLAYER_ERROR) ? PlaybackStateCompat.STATE_ERROR : PlaybackStateCompat.STATE_NONE); |
|
|
|
|
break; |
|
|
|
|
case Player.STATE_READY: |
|
|
|
|
setPlaybackState(player.isPlaying() ? PlaybackStateCompat.STATE_PLAYING : PlaybackStateCompat.STATE_PAUSED); |
|
|
|
|
break; |
|
|
|
|
case Player.STATE_BUFFERING: |
|
|
|
|
setPlaybackState(PlaybackStateCompat.STATE_BUFFERING); |
|
|
|
|
break; |
|
|
|
|
case Player.STATE_ENDED: |
|
|
|
|
setPlaybackState(PlaybackStateCompat.STATE_STOPPED); |
|
|
|
|
break; |
|
|
|
|
} |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
@Override |
|
|
|
|
@ -708,24 +731,13 @@ public class Players implements Player.Listener, IMediaPlayer.Listener, ParseCal |
|
|
|
|
|
|
|
|
|
@Override |
|
|
|
|
public void onPlayerError(@NonNull PlaybackException error) { |
|
|
|
|
setPlaybackState(PlaybackStateCompat.STATE_ERROR); |
|
|
|
|
Logger.t(TAG).e(error.errorCode + "," + url); |
|
|
|
|
ErrorEvent.url(ExoUtil.getRetry(error.errorCode), error.errorCode); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
@Override |
|
|
|
|
public void onPlaybackStateChanged(int state) { |
|
|
|
|
switch (state) { |
|
|
|
|
case Player.STATE_IDLE: |
|
|
|
|
case Player.STATE_READY: |
|
|
|
|
case Player.STATE_ENDED: |
|
|
|
|
PlayerEvent.state(state); |
|
|
|
|
break; |
|
|
|
|
case Player.STATE_BUFFERING: |
|
|
|
|
PlayerEvent.state(state); |
|
|
|
|
setPlaybackState(PlaybackStateCompat.STATE_BUFFERING); |
|
|
|
|
break; |
|
|
|
|
} |
|
|
|
|
PlayerEvent.state(state); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
@Override |
|
|
|
|
|