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 8b6357e1a..da82ad1ec 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 @@ -341,7 +341,7 @@ public class CastActivity extends BaseActivity implements CustomKeyDownVod.Liste } private void setMetadata() { - mPlayers.setMetadata(mBinding.widget.title.getText().toString(), "", "", mBinding.exo.getDefaultArtwork()); + mPlayers.setMetadata(mBinding.widget.title.getText().toString(), "", ""); } @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 2e83bc33b..6a552ec7d 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 @@ -521,17 +521,15 @@ public class LiveActivity extends BaseActivity implements GroupPresenter.OnClick } private void setArtwork() { - ImgUtil.load(this, mChannel.getLogo(), new CustomTarget<>(ResUtil.getScreenWidth(), ResUtil.getScreenHeight()) { + ImgUtil.load(this, mChannel.getLogo(), new CustomTarget<>() { @Override public void onResourceReady(@NonNull Drawable resource, @Nullable Transition transition) { mBinding.exo.setDefaultArtwork(resource); - setMetadata(); } @Override public void onLoadFailed(@Nullable Drawable errorDrawable) { mBinding.exo.setDefaultArtwork(errorDrawable); - setMetadata(); } }); } @@ -597,6 +595,7 @@ public class LiveActivity extends BaseActivity implements GroupPresenter.OnClick private void setChannel(Channel item) { App.post(mR0, 100); mChannel = item; + setMetadata(); setArtwork(); showInfo(); } @@ -774,7 +773,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(), mBinding.exo.getDefaultArtwork()); + mPlayers.setMetadata(title, artist, mChannel.getLogo()); } @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 f3bc54706..95c0d9a71 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 @@ -913,17 +913,15 @@ public class VideoActivity extends BaseActivity implements CustomKeyDownVod.List } private void setArtwork() { - ImgUtil.load(this, mHistory.getVodPic(), new CustomTarget<>(ResUtil.getScreenWidth(), ResUtil.getScreenHeight()) { + ImgUtil.load(this, mHistory.getVodPic(), new CustomTarget<>() { @Override public void onResourceReady(@NonNull Drawable resource, @Nullable Transition transition) { mBinding.exo.setDefaultArtwork(resource); - setMetadata(); } @Override public void onLoadFailed(@Nullable Drawable errorDrawable) { mBinding.exo.setDefaultArtwork(errorDrawable); - setMetadata(); } }); } @@ -957,6 +955,7 @@ public class VideoActivity extends BaseActivity implements CustomKeyDownVod.List mHistory.setVodPic(item.getVodPic()); setScale(getScale()); setPartAdapter(); + setMetadata(); setArtwork(); } @@ -1023,8 +1022,9 @@ public class VideoActivity extends BaseActivity implements CustomKeyDownVod.List setText(mBinding.director, R.string.detail_director, item.getVodDirector()); mBinding.content.setMaxLines(getMaxLines()); setPartAdapter(); - setArtwork(); updateKeep(); + setArtwork(); + setMetadata(); } @Override @@ -1119,7 +1119,7 @@ public class VideoActivity extends BaseActivity implements CustomKeyDownVod.List String episode = getEpisode().getName(); boolean empty = title.equals(episode) || episode == null; String artist = empty ? "" : getString(R.string.play_now, episode); - mPlayers.setMetadata(title, artist, mHistory.getVodPic(), mBinding.exo.getDefaultArtwork()); + mPlayers.setMetadata(title, artist, mHistory.getVodPic()); } @Subscribe(threadMode = ThreadMode.MAIN) diff --git a/app/src/main/java/com/fongmi/android/tv/api/config/WallConfig.java b/app/src/main/java/com/fongmi/android/tv/api/config/WallConfig.java index 24f4e9bf4..74a11df02 100644 --- a/app/src/main/java/com/fongmi/android/tv/api/config/WallConfig.java +++ b/app/src/main/java/com/fongmi/android/tv/api/config/WallConfig.java @@ -98,7 +98,7 @@ public class WallConfig { } } - private void download() throws Exception { + private void download() throws Throwable { Path.clear(FileUtil.getWall(0)); File file = FileUtil.getWall(0); Path.clear(FileUtil.getWallCache()); @@ -111,8 +111,8 @@ public class WallConfig { else if (isVideo(file)) Setting.putWallType(2); } - private void createSnapshot(File file) throws Exception { - Bitmap bitmap = Glide.with(App.get()).asBitmap().frame(0).load(file).skipMemoryCache(true).diskCacheStrategy(DiskCacheStrategy.NONE).submit(ResUtil.getScreenWidth(), ResUtil.getScreenHeight()).get(); + private void createSnapshot(File file) throws Throwable { + Bitmap bitmap = Glide.with(App.get()).asBitmap().frame(0).load(file).override(ResUtil.getScreenWidth(), ResUtil.getScreenHeight()).skipMemoryCache(true).diskCacheStrategy(DiskCacheStrategy.NONE).submit().get(); try (FileOutputStream fos = new FileOutputStream(FileUtil.getWallCache())) { bitmap.compress(Bitmap.CompressFormat.JPEG, 100, fos); } 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 4a985c5ae..1fdccb987 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 @@ -21,6 +21,7 @@ import android.support.v4.media.session.PlaybackStateCompat; import android.text.TextUtils; import androidx.annotation.NonNull; +import androidx.annotation.Nullable; import androidx.media3.common.AudioAttributes; import androidx.media3.common.C; import androidx.media3.common.PlaybackException; @@ -32,7 +33,7 @@ import androidx.media3.exoplayer.drm.FrameworkMediaDrm; import androidx.media3.exoplayer.util.EventLogger; import androidx.media3.ui.PlayerView; -import com.bumptech.glide.Glide; +import com.bumptech.glide.request.transition.Transition; import com.fongmi.android.tv.App; import com.fongmi.android.tv.Constant; import com.fongmi.android.tv.R; @@ -46,6 +47,7 @@ import com.fongmi.android.tv.bean.Track; import com.fongmi.android.tv.event.ActionEvent; import com.fongmi.android.tv.event.ErrorEvent; import com.fongmi.android.tv.event.PlayerEvent; +import com.fongmi.android.tv.impl.CustomTarget; import com.fongmi.android.tv.impl.ParseCallback; import com.fongmi.android.tv.impl.SessionCallback; import com.fongmi.android.tv.player.danmaku.DanPlayer; @@ -54,6 +56,7 @@ import com.fongmi.android.tv.player.exo.ErrorMsgProvider; import com.fongmi.android.tv.player.exo.ExoUtil; import com.fongmi.android.tv.server.Server; import com.fongmi.android.tv.utils.FileUtil; +import com.fongmi.android.tv.utils.ImgUtil; import com.fongmi.android.tv.utils.Notify; import com.fongmi.android.tv.utils.ResUtil; import com.fongmi.android.tv.utils.UrlUtil; @@ -548,7 +551,7 @@ public class Players implements Player.Listener, ParseCallback { return scheme.isEmpty() || "file".equals(scheme) ? !Path.exists(url) : host.isEmpty(); } - public void setMetadata(String title, String artist, String artUri, Drawable drawable) { + public void setMetadata(String title, String artist, String artUri) { MediaMetadataCompat.Builder builder = new MediaMetadataCompat.Builder(); builder.putString(MediaMetadataCompat.METADATA_KEY_TITLE, title); builder.putString(MediaMetadataCompat.METADATA_KEY_ARTIST, artist); @@ -556,24 +559,25 @@ 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()); - App.execute(() -> putBitmap(builder, drawable)); - } - - private void putBitmap(MediaMetadataCompat.Builder builder, Drawable drawable) { - if (drawable == null) { - session.setMetadata(builder.build()); - ActionEvent.update(); - return; - } - try { - Bitmap bitmap = ((BitmapDrawable) drawable).getBitmap(); - bitmap = Glide.with(App.get()).asBitmap().load(bitmap).submit(512, 512).get(); - builder.putBitmap(MediaMetadataCompat.METADATA_KEY_ART, bitmap); - session.setMetadata(builder.build()); - ActionEvent.update(); - } catch (Exception e) { - e.printStackTrace(); - } + putBitmap(builder, artUri); + } + + private void putBitmap(MediaMetadataCompat.Builder builder, String artUri) { + ImgUtil.load(artUri, new CustomTarget<>() { + @Override + public void onResourceReady(@NonNull Bitmap resource, @Nullable Transition transition) { + builder.putBitmap(MediaMetadataCompat.METADATA_KEY_ART, resource); + session.setMetadata(builder.build()); + ActionEvent.update(); + } + + @Override + public void onLoadFailed(@Nullable Drawable errorDrawable) { + builder.putBitmap(MediaMetadataCompat.METADATA_KEY_ART, ((BitmapDrawable) errorDrawable).getBitmap()); + session.setMetadata(builder.build()); + ActionEvent.update(); + } + }); } public void share(Activity activity, CharSequence title) { diff --git a/app/src/main/java/com/fongmi/android/tv/utils/ImgUtil.java b/app/src/main/java/com/fongmi/android/tv/utils/ImgUtil.java index dc427ff41..7a526f8d6 100644 --- a/app/src/main/java/com/fongmi/android/tv/utils/ImgUtil.java +++ b/app/src/main/java/com/fongmi/android/tv/utils/ImgUtil.java @@ -4,6 +4,7 @@ import static android.widget.ImageView.ScaleType.CENTER_CROP; import static android.widget.ImageView.ScaleType.FIT_CENTER; import android.content.Context; +import android.graphics.Bitmap; import android.graphics.drawable.Drawable; import android.text.TextUtils; import android.view.View; @@ -20,6 +21,7 @@ import com.bumptech.glide.load.model.GlideUrl; import com.bumptech.glide.load.model.LazyHeaders; import com.bumptech.glide.request.RequestListener; import com.bumptech.glide.request.target.Target; +import com.fongmi.android.tv.App; import com.fongmi.android.tv.R; import com.fongmi.android.tv.impl.CustomTarget; import com.github.catvod.utils.Json; @@ -35,10 +37,18 @@ public class ImgUtil { private static final Set failed = new HashSet<>(); + public static void load(String url, CustomTarget target) { + try { + Glide.with(App.get()).asBitmap().load(getUrl(url)).override(ResUtil.dp2px(96), ResUtil.dp2px(96)).error(R.drawable.artwork).into(target); + } catch (Throwable e) { + e.printStackTrace(); + } + } + public static void load(Context context, String url, CustomTarget target) { try { - Glide.with(context).load(getUrl(url)).error(R.drawable.artwork).into(target); - } catch (Exception e) { + Glide.with(context).load(getUrl(url)).override(ResUtil.getScreenWidth(), ResUtil.getScreenHeight()).error(R.drawable.artwork).into(target); + } catch (Throwable e) { e.printStackTrace(); } } @@ -55,7 +65,7 @@ public class ImgUtil { RequestBuilder builder = Glide.with(view).load(getUrl(url)).listener(getListener(text, url, view, vod)); if (vod) builder.centerCrop().into(view); else builder.fitCenter().into(view); - } catch (Exception e) { + } catch (Throwable e) { e.printStackTrace(); } } 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 27de3ac99..8f284e586 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 @@ -536,17 +536,15 @@ public class LiveActivity extends BaseActivity implements CustomKeyDown.Listener } private void setArtwork() { - ImgUtil.load(this, mChannel.getLogo(), new CustomTarget<>(ResUtil.getScreenWidth(), ResUtil.getScreenHeight()) { + ImgUtil.load(this, mChannel.getLogo(), new CustomTarget<>() { @Override public void onResourceReady(@NonNull Drawable resource, @Nullable Transition transition) { mBinding.exo.setDefaultArtwork(resource); - setMetadata(); } @Override public void onLoadFailed(@Nullable Drawable errorDrawable) { mBinding.exo.setDefaultArtwork(errorDrawable); - setMetadata(); } }); } @@ -570,6 +568,7 @@ public class LiveActivity extends BaseActivity implements CustomKeyDown.Listener } else { mGroup.setPosition(mChannelAdapter.setSelected(item.group(mGroup))); mChannel = item; + setMetadata(); setArtwork(); showInfo(); hideUI(); @@ -801,7 +800,7 @@ public class LiveActivity extends BaseActivity implements CustomKeyDown.Listener private void setMetadata() { String title = mBinding.widget.name.getText().toString(); String artist = mBinding.widget.play.getText().toString(); - mPlayers.setMetadata(title, artist, mChannel.getLogo(), mBinding.exo.getDefaultArtwork()); + mPlayers.setMetadata(title, artist, mChannel.getLogo()); } @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 5d91e4a72..eea1b00e2 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 @@ -1000,17 +1000,15 @@ public class VideoActivity extends BaseActivity implements Clock.Callback, Custo } private void setArtwork() { - ImgUtil.load(this, mHistory.getVodPic(), new CustomTarget<>(ResUtil.getScreenWidth(), ResUtil.getScreenHeight()) { + ImgUtil.load(this, mHistory.getVodPic(), new CustomTarget<>() { @Override public void onResourceReady(@NonNull Drawable resource, @Nullable Transition transition) { mBinding.exo.setDefaultArtwork(resource); - setMetadata(); } @Override public void onLoadFailed(@Nullable Drawable errorDrawable) { mBinding.exo.setDefaultArtwork(errorDrawable); - setMetadata(); } }); } @@ -1037,6 +1035,7 @@ public class VideoActivity extends BaseActivity implements Clock.Callback, Custo mHistory.setVodName(item.getVodName()); mHistory.setVodPic(item.getVodPic()); setScale(getScale()); + setMetadata(); setArtwork(); } @@ -1119,8 +1118,9 @@ public class VideoActivity extends BaseActivity implements Clock.Callback, Custo setText(mBinding.content, 0, item.getVodContent()); setText(mBinding.director, R.string.detail_director, item.getVodDirector()); mBinding.contentLayout.setVisibility(mBinding.content.getVisibility()); - setArtwork(); updateKeep(); + setArtwork(); + setMetadata(); } @Override @@ -1257,7 +1257,7 @@ public class VideoActivity extends BaseActivity implements Clock.Callback, Custo String episode = getEpisode().getName(); boolean empty = title.equals(episode) || episode == null; String artist = empty ? "" : getString(R.string.play_now, episode); - mPlayers.setMetadata(title, artist, mHistory.getVodPic(), mBinding.exo.getDefaultArtwork()); + mPlayers.setMetadata(title, artist, mHistory.getVodPic()); } @Subscribe(threadMode = ThreadMode.MAIN)