diff --git a/app/src/leanback/java/com/fongmi/android/tv/ui/activity/CastActivity.java b/app/src/leanback/java/com/fongmi/android/tv/ui/activity/CastActivity.java index 53d41e6b7..522b385d7 100644 --- a/app/src/leanback/java/com/fongmi/android/tv/ui/activity/CastActivity.java +++ b/app/src/leanback/java/com/fongmi/android/tv/ui/activity/CastActivity.java @@ -5,6 +5,7 @@ import android.content.ComponentName; import android.content.Context; import android.content.Intent; import android.content.ServiceConnection; +import android.graphics.drawable.Drawable; import android.os.IBinder; import android.view.KeyEvent; import android.view.View; @@ -75,6 +76,11 @@ public class CastActivity extends BaseActivity implements CustomKeyDownCast.List return mBinding.ijk; } + private Drawable getDefaultArtwork() { + if (mPlayers.isExo()) return getExo().getDefaultArtwork(); + return getIjk().getDefaultArtwork(); + } + @Override protected ViewBinding getBinding() { return mBinding = ActivityCastBinding.inflate(getLayoutInflater()); @@ -359,7 +365,7 @@ public class CastActivity extends BaseActivity implements CustomKeyDownCast.List } private void setMetadata() { - mPlayers.setMetadata(mBinding.widget.title.getText().toString(), "", ""); + mPlayers.setMetadata(mBinding.widget.title.getText().toString(), "", "", getDefaultArtwork()); } @Subscribe(threadMode = ThreadMode.MAIN) diff --git a/app/src/leanback/java/com/fongmi/android/tv/ui/activity/LiveActivity.java b/app/src/leanback/java/com/fongmi/android/tv/ui/activity/LiveActivity.java index f0116398b..c7f3d91b6 100644 --- a/app/src/leanback/java/com/fongmi/android/tv/ui/activity/LiveActivity.java +++ b/app/src/leanback/java/com/fongmi/android/tv/ui/activity/LiveActivity.java @@ -111,6 +111,11 @@ public class LiveActivity extends BaseActivity implements Clock.Callback, GroupP return mBinding.ijk; } + private Drawable getDefaultArtwork() { + if (mPlayers.isExo()) return getExo().getDefaultArtwork(); + return getIjk().getDefaultArtwork(); + } + private Group getKeep() { return (Group) mGroupAdapter.get(0); } @@ -793,7 +798,7 @@ public class LiveActivity extends BaseActivity implements Clock.Callback, GroupP private void setMetadata() { String title = mBinding.widget.name.getText().toString(); String artist = mBinding.widget.play.getText().toString(); - mPlayers.setMetadata(title, artist, mChannel.getLogo()); + mPlayers.setMetadata(title, artist, mChannel.getLogo(), getDefaultArtwork()); } @Subscribe(threadMode = ThreadMode.MAIN) diff --git a/app/src/leanback/java/com/fongmi/android/tv/ui/activity/VideoActivity.java b/app/src/leanback/java/com/fongmi/android/tv/ui/activity/VideoActivity.java index 3ba29317e..75714c695 100644 --- a/app/src/leanback/java/com/fongmi/android/tv/ui/activity/VideoActivity.java +++ b/app/src/leanback/java/com/fongmi/android/tv/ui/activity/VideoActivity.java @@ -287,6 +287,11 @@ public class VideoActivity extends BaseActivity implements CustomKeyDownVod.List return mBinding.ijk; } + private Drawable getDefaultArtwork() { + if (mPlayers.isExo()) return getExo().getDefaultArtwork(); + return getIjk().getDefaultArtwork(); + } + private BaseGridView getEpisodeView() { return Setting.getEpisode() == 0 ? mBinding.episodeHori : mBinding.episodeVert; } @@ -1421,7 +1426,7 @@ public class VideoActivity extends BaseActivity implements CustomKeyDownVod.List String title = mHistory.getVodName(); String episode = getEpisode().getName(); String artist = title.equals(episode) ? "" : getString(R.string.play_now, episode); - mPlayers.setMetadata(title, artist, mHistory.getVodPic()); + mPlayers.setMetadata(title, artist, mHistory.getVodPic(), getDefaultArtwork()); } @Subscribe(threadMode = ThreadMode.MAIN) diff --git a/app/src/main/java/com/fongmi/android/tv/player/Players.java b/app/src/main/java/com/fongmi/android/tv/player/Players.java index aa096b7af..548755fe4 100644 --- a/app/src/main/java/com/fongmi/android/tv/player/Players.java +++ b/app/src/main/java/com/fongmi/android/tv/player/Players.java @@ -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 diff --git a/app/src/mobile/java/com/fongmi/android/tv/ui/activity/LiveActivity.java b/app/src/mobile/java/com/fongmi/android/tv/ui/activity/LiveActivity.java index 9b5fcd9e1..4da4f325c 100644 --- a/app/src/mobile/java/com/fongmi/android/tv/ui/activity/LiveActivity.java +++ b/app/src/mobile/java/com/fongmi/android/tv/ui/activity/LiveActivity.java @@ -126,6 +126,11 @@ public class LiveActivity extends BaseActivity implements Clock.Callback, Custom return mBinding.ijk; } + private Drawable getDefaultArtwork() { + if (mPlayers.isExo()) return getExo().getDefaultArtwork(); + return getIjk().getDefaultArtwork(); + } + private Group getKeep() { return mGroupAdapter.get(0); } @@ -860,7 +865,7 @@ public class LiveActivity extends BaseActivity implements Clock.Callback, Custom private void setMetadata() { String title = mBinding.widget.name.getText().toString(); String artist = mBinding.widget.play.getText().toString(); - mPlayers.setMetadata(title, artist, mChannel.getLogo()); + mPlayers.setMetadata(title, artist, mChannel.getLogo(), getDefaultArtwork()); } @Subscribe(threadMode = ThreadMode.MAIN) diff --git a/app/src/mobile/java/com/fongmi/android/tv/ui/activity/VideoActivity.java b/app/src/mobile/java/com/fongmi/android/tv/ui/activity/VideoActivity.java index 088396853..293577f23 100644 --- a/app/src/mobile/java/com/fongmi/android/tv/ui/activity/VideoActivity.java +++ b/app/src/mobile/java/com/fongmi/android/tv/ui/activity/VideoActivity.java @@ -270,6 +270,11 @@ public class VideoActivity extends BaseActivity implements Clock.Callback, Custo return mBinding.ijk; } + private Drawable getDefaultArtwork() { + if (mPlayers.isExo()) return getExo().getDefaultArtwork(); + return getIjk().getDefaultArtwork(); + } + private boolean isReplay() { return Setting.getReset() == 1; } @@ -1373,7 +1378,7 @@ public class VideoActivity extends BaseActivity implements Clock.Callback, Custo String title = mHistory.getVodName(); String episode = getEpisode().getName(); String artist = title.equals(episode) ? "" : getString(R.string.play_now, episode); - mPlayers.setMetadata(title, artist, mHistory.getVodPic()); + mPlayers.setMetadata(title, artist, mHistory.getVodPic(), getDefaultArtwork()); } @Subscribe(threadMode = ThreadMode.MAIN) diff --git a/ijkplayer/src/main/java/tv/danmaku/ijk/media/player/ui/IjkVideoView.java b/ijkplayer/src/main/java/tv/danmaku/ijk/media/player/ui/IjkVideoView.java index 82c3cdd6d..25804304c 100644 --- a/ijkplayer/src/main/java/tv/danmaku/ijk/media/player/ui/IjkVideoView.java +++ b/ijkplayer/src/main/java/tv/danmaku/ijk/media/player/ui/IjkVideoView.java @@ -427,8 +427,8 @@ public class IjkVideoView extends FrameLayout implements MediaController.MediaPl } } - public Bitmap getDefaultArtwork() { - return ((BitmapDrawable) mDefaultArtwork).getBitmap(); + public Drawable getDefaultArtwork() { + return mDefaultArtwork; } private void updateForCurrentTrackSelections() {