From 2e63f2b400bdacac00627db0d4abc838ed3d9cad Mon Sep 17 00:00:00 2001 From: FongMi Date: Sun, 21 Jul 2024 16:54:16 +0800 Subject: [PATCH] Fix bug --- .../android/tv/ui/activity/CastActivity.java | 2 +- .../android/tv/ui/activity/LiveActivity.java | 2 +- .../android/tv/ui/activity/VideoActivity.java | 2 +- .../com/fongmi/android/tv/player/Players.java | 40 +++++++++---------- .../android/tv/ui/activity/LiveActivity.java | 2 +- .../android/tv/ui/activity/VideoActivity.java | 2 +- 6 files changed, 24 insertions(+), 26 deletions(-) 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 eca9d99ab..34c417b5e 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 @@ -333,7 +333,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(), "", "", mBinding.exo.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 29c49793a..d034e8a56 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 @@ -721,7 +721,7 @@ public class LiveActivity extends BaseActivity implements GroupPresenter.OnClick 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(), mBinding.exo.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 5ca882c44..4648541cf 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 @@ -1128,7 +1128,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(), mBinding.exo.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 1c035e9eb..6ead765d0 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; @@ -296,7 +298,6 @@ public class Players implements Player.Listener, ParseCallback { } public void play() { - session.setActive(true); if (exoPlayer != null) exoPlayer.play(); setPlaybackState(PlaybackStateCompat.STATE_PLAYING); } @@ -307,7 +308,6 @@ public class Players implements Player.Listener, ParseCallback { } public void stop() { - session.setActive(false); if (exoPlayer != null) exoPlayer.stop(); if (exoPlayer != null) exoPlayer.clearMediaItems(); setPlaybackState(PlaybackStateCompat.STATE_STOPPED); @@ -400,6 +400,7 @@ public class Players implements Player.Listener, ParseCallback { if (exoPlayer != null) exoPlayer.prepare(); Logger.t(TAG).d(error + "," + url); App.post(runnable, timeout); + session.setActive(true); PlayerEvent.prepare(); } @@ -432,23 +433,15 @@ public class Players implements Player.Listener, ParseCallback { return scheme.isEmpty() || "file".equals(scheme) ? !Path.exists(url) : host.isEmpty(); } - public Uri getUri() { - return getUrl().startsWith("file://") || getUrl().startsWith("/") ? FileUtil.getShareUri(getUrl()) : Uri.parse(getUrl()); - } - - public String[] getHeaderArray() { - List list = new ArrayList<>(); - for (Map.Entry entry : getHeaders().entrySet()) list.addAll(Arrays.asList(entry.getKey(), entry.getValue())); - return list.toArray(new String[0]); - } - - public Bundle getHeaderBundle() { - Bundle bundle = new Bundle(); - for (Map.Entry entry : getHeaders().entrySet()) bundle.putString(entry.getKey(), entry.getValue()); - return bundle; + 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) { + 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); @@ -456,17 +449,19 @@ public class Players implements Player.Listener, ParseCallback { 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(); } public void share(Activity activity, CharSequence title) { try { if (isEmpty()) return; + Bundle bundle = new Bundle(); + for (Map.Entry entry : getHeaders().entrySet()) bundle.putString(entry.getKey(), entry.getValue()); Intent intent = new Intent(Intent.ACTION_SEND); intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); intent.putExtra(Intent.EXTRA_TEXT, getUrl()); - intent.putExtra("extra_headers", getHeaderBundle()); + intent.putExtra("extra_headers", bundle); intent.putExtra("title", title); intent.putExtra("name", title); intent.setType("text/plain"); @@ -479,13 +474,16 @@ public class Players implements Player.Listener, ParseCallback { public void choose(Activity activity, CharSequence title) { try { if (isEmpty()) return; + List list = new ArrayList<>(); + for (Map.Entry entry : getHeaders().entrySet()) list.addAll(Arrays.asList(entry.getKey(), entry.getValue())); + Uri data = getUrl().startsWith("file://") || getUrl().startsWith("/") ? FileUtil.getShareUri(getUrl()) : Uri.parse(getUrl()); Intent intent = new Intent(Intent.ACTION_VIEW); intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION); - intent.setDataAndType(getUri(), "video/*"); + intent.setDataAndType(data, "video/*"); intent.putExtra("title", title); intent.putExtra("return_result", isVod()); - intent.putExtra("headers", getHeaderArray()); + intent.putExtra("headers", list.toArray(new String[0])); if (isVod()) intent.putExtra("position", (int) getPosition()); activity.startActivityForResult(Util.getChooser(intent), 1001); } catch (Exception e) { 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 3c50b49ab..876857d80 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 @@ -780,7 +780,7 @@ public class LiveActivity extends BaseActivity implements CustomKeyDownLive.List 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(), mBinding.exo.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 6cea84672..4dd4e0da5 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 @@ -1147,7 +1147,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(), mBinding.exo.getDefaultArtwork()); } @Subscribe(threadMode = ThreadMode.MAIN)