From 4114be32cb7181b4a8fbc6be0a583c47837ae55e Mon Sep 17 00:00:00 2001 From: okjack Date: Mon, 10 Jun 2024 19:33:21 +0800 Subject: [PATCH] Optimize metadata --- .../android/tv/ui/activity/CastActivity.java | 11 +--- .../android/tv/ui/activity/LiveActivity.java | 20 +------- .../android/tv/ui/activity/VideoActivity.java | 22 +------- .../com/fongmi/android/tv/player/Players.java | 50 +++++++++++++++++++ .../android/tv/service/PlaybackService.java | 5 ++ .../android/tv/ui/activity/LiveActivity.java | 32 ++---------- .../android/tv/ui/activity/VideoActivity.java | 35 ++----------- .../android/tv/ui/dialog/InfoDialog.java | 19 +++---- 8 files changed, 77 insertions(+), 117 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 8debd5ab0..7144c47f2 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 @@ -350,16 +350,7 @@ public class CastActivity extends BaseActivity implements CustomKeyDownCast.List } private void setMetadata() { - String title = mBinding.widget.title.getText().toString(); - MediaMetadataCompat.Builder builder = new MediaMetadataCompat.Builder(); - builder.putString(MediaMetadataCompat.METADATA_KEY_TITLE, title); - try { - builder.putBitmap(MediaMetadataCompat.METADATA_KEY_ART, getIjk().getDefaultArtwork()); - } catch (Exception e) { - e.printStackTrace(); - } - builder.putLong(MediaMetadataCompat.METADATA_KEY_DURATION, mPlayers.getDuration()); - mPlayers.setMetadata(builder.build()); + mPlayers.setMetadata(mBinding.widget.title.getText().toString(), "", mBinding.exo); } @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 826c5f0dd..95ad21da3 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 @@ -4,7 +4,6 @@ import android.annotation.SuppressLint; import android.content.Context; import android.content.Intent; import android.graphics.drawable.Drawable; -import android.support.v4.media.MediaMetadataCompat; import android.view.KeyEvent; import android.view.View; @@ -407,13 +406,7 @@ public class LiveActivity extends BaseActivity implements Clock.Callback, GroupP private boolean onChoose() { if (mPlayers.isEmpty()) return false; - Intent intent = new Intent(Intent.ACTION_VIEW); - intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); - intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION); - intent.putExtra("headers", mPlayers.getHeaderArray()); - intent.putExtra("title", mBinding.widget.name.getText()); - intent.setDataAndType(mPlayers.getUri(), "video/*"); - startActivity(Util.getChooser(intent)); + mPlayers.choose(this, mBinding.widget.title.getText()); return true; } @@ -779,16 +772,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(); - MediaMetadataCompat.Builder builder = new MediaMetadataCompat.Builder(); - builder.putString(MediaMetadataCompat.METADATA_KEY_TITLE, title); - builder.putString(MediaMetadataCompat.METADATA_KEY_ARTIST, artist); - try { - builder.putBitmap(MediaMetadataCompat.METADATA_KEY_ART, getIjk().getDefaultArtwork()); - } catch (Exception e) { - e.printStackTrace(); - } - builder.putLong(MediaMetadataCompat.METADATA_KEY_DURATION, mPlayers.getDuration()); - mPlayers.setMetadata(builder.build()); + mPlayers.setMetadata(title, artist, mBinding.exo); } @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 0e085dd2b..f2fa60cf0 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 @@ -6,7 +6,6 @@ import android.app.Activity; import android.content.Intent; import android.graphics.drawable.Drawable; import android.net.Uri; -import android.support.v4.media.MediaMetadataCompat; import android.text.Html; import android.text.SpannableStringBuilder; import android.text.Spanned; @@ -1020,15 +1019,7 @@ public class VideoActivity extends BaseActivity implements CustomKeyDownVod.List private boolean onChoose() { if (mPlayers.isEmpty()) return false; - Intent intent = new Intent(Intent.ACTION_VIEW); - intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); - intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION); - intent.putExtra("return_result", true); - intent.putExtra("headers", mPlayers.getHeaderArray()); - intent.putExtra("position", (int) mPlayers.getPosition()); - intent.putExtra("title", mBinding.widget.title.getText()); - intent.setDataAndType(mPlayers.getUri(), "video/*"); - startActivityForResult(Util.getChooser(intent), 1001); + mPlayers.choose(this, mBinding.widget.title.getText()); return true; } @@ -1374,16 +1365,7 @@ public class VideoActivity extends BaseActivity implements CustomKeyDownVod.List String title = mHistory == null ? getName() : mHistory.getVodName(); String artist = mEpisodeAdapter.size() == 0 ? "" : getEpisode().getName(); artist = title.equals(artist) ? "" : getString(R.string.play_now, artist); - MediaMetadataCompat.Builder builder = new MediaMetadataCompat.Builder(); - builder.putString(MediaMetadataCompat.METADATA_KEY_TITLE, title); - builder.putString(MediaMetadataCompat.METADATA_KEY_ARTIST, artist); - try { - builder.putBitmap(MediaMetadataCompat.METADATA_KEY_ART, getIjk().getDefaultArtwork()); - } catch (Exception e) { - e.printStackTrace(); - } - builder.putLong(MediaMetadataCompat.METADATA_KEY_DURATION, mPlayers.getDuration()); - mPlayers.setMetadata(builder.build()); + mPlayers.setMetadata(title, artist, mBinding.exo); } @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 23d59e26f..3cc0e9068 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.Bitmap; +import android.graphics.drawable.BitmapDrawable; import android.net.Uri; import android.os.Bundle; import android.support.v4.media.MediaMetadataCompat; @@ -600,6 +602,54 @@ public class Players implements Player.Listener, IMediaPlayer.Listener, Analytic return bundle; } + public void setMetadata(String title, String artist, PlayerView view) { + try { + Bitmap bitmap = ((BitmapDrawable) view.getDefaultArtwork()).getBitmap(); + MediaMetadataCompat.Builder builder = new MediaMetadataCompat.Builder(); + builder.putString(MediaMetadataCompat.METADATA_KEY_TITLE, title); + builder.putString(MediaMetadataCompat.METADATA_KEY_ARTIST, artist); + builder.putBitmap(MediaMetadataCompat.METADATA_KEY_ART, bitmap); + builder.putLong(MediaMetadataCompat.METADATA_KEY_DURATION, getDuration()); + session.setMetadata(builder.build()); + ActionEvent.update(); + } catch (Exception e) { + e.printStackTrace(); + } + } + + public void share(Activity activity, CharSequence title) { + try { + if (isEmpty()) return; + 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("title", title); + intent.putExtra("name", title); + intent.setType("text/plain"); + activity.startActivity(Util.getChooser(intent)); + } catch (Exception e) { + e.printStackTrace(); + } + } + + public void choose(Activity activity, CharSequence title) { + try { + if (isEmpty()) return; + 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.putExtra("title", title); + intent.putExtra("return_result", isVod()); + intent.putExtra("headers", getHeaderArray()); + if (isVod()) intent.putExtra("position", (int) getPosition()); + activity.startActivityForResult(Util.getChooser(intent), 1001); + } catch (Exception e) { + e.printStackTrace(); + } + } + public void checkData(Intent data) { try { if (data == null || data.getExtras() == null) return; diff --git a/app/src/mobile/java/com/fongmi/android/tv/service/PlaybackService.java b/app/src/mobile/java/com/fongmi/android/tv/service/PlaybackService.java index 0496309f9..e44ee9fe8 100644 --- a/app/src/mobile/java/com/fongmi/android/tv/service/PlaybackService.java +++ b/app/src/mobile/java/com/fongmi/android/tv/service/PlaybackService.java @@ -141,6 +141,11 @@ public class PlaybackService extends Service { return START_NOT_STICKY; } + @Override + public void onTaskRemoved(Intent rootIntent) { + stopSelf(); + } + @Override public void onDestroy() { EventBus.getDefault().unregister(this); 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 d34afa7eb..4758a4528 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 @@ -8,7 +8,6 @@ import android.content.res.Configuration; import android.graphics.drawable.Drawable; import android.os.Build; import android.os.Bundle; -import android.support.v4.media.MediaMetadataCompat; import android.view.MotionEvent; import android.view.View; @@ -463,13 +462,7 @@ public class LiveActivity extends BaseActivity implements Clock.Callback, Custom private boolean onChoose() { if (mPlayers.isEmpty()) return false; - Intent intent = new Intent(Intent.ACTION_VIEW); - intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); - intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION); - intent.putExtra("headers", mPlayers.getHeaderArray()); - intent.putExtra("title", mBinding.control.title.getText()); - intent.setDataAndType(mPlayers.getUri(), "video/*"); - startActivity(Util.getChooser(intent)); + mPlayers.choose(this, mBinding.control.title.getText()); setRedirect(true); return true; } @@ -843,17 +836,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(); - MediaMetadataCompat.Builder builder = new MediaMetadataCompat.Builder(); - builder.putString(MediaMetadataCompat.METADATA_KEY_TITLE, title); - builder.putString(MediaMetadataCompat.METADATA_KEY_ARTIST, artist); - try { - builder.putBitmap(MediaMetadataCompat.METADATA_KEY_ART, getIjk().getDefaultArtwork()); - } catch (Exception e) { - e.printStackTrace(); - } - builder.putLong(MediaMetadataCompat.METADATA_KEY_DURATION, mPlayers.getDuration()); - mPlayers.setMetadata(builder.build()); - ActionEvent.update(); + mPlayers.setMetadata(title, artist, mBinding.exo); } @Subscribe(threadMode = ThreadMode.MAIN) @@ -1130,15 +1113,8 @@ public class LiveActivity extends BaseActivity implements Clock.Callback, Custom } @Override - public void onShare(CharSequence title, String url) { - Intent intent = new Intent(Intent.ACTION_SEND); - intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); - intent.putExtra(Intent.EXTRA_TEXT, url); - intent.putExtra("extra_headers", mPlayers.getHeaderBundle()); - intent.putExtra("title", title); - intent.putExtra("name", title); - intent.setType("text/plain"); - startActivity(Util.getChooser(intent)); + public void onShare(CharSequence title) { + mPlayers.share(this, title); setRedirect(true); } 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 316e9b0e1..86bd40ba5 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 @@ -12,7 +12,6 @@ import android.net.Uri; import android.os.Build; import android.os.Bundle; import android.provider.Settings; -import android.support.v4.media.MediaMetadataCompat; import android.text.Html; import android.text.SpannableStringBuilder; import android.text.Spanned; @@ -911,15 +910,7 @@ public class VideoActivity extends BaseActivity implements Clock.Callback, Custo private boolean onChoose() { if (mPlayers.isEmpty()) return false; - Intent intent = new Intent(Intent.ACTION_VIEW); - intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); - intent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION); - intent.putExtra("return_result", true); - intent.putExtra("headers", mPlayers.getHeaderArray()); - intent.putExtra("position", (int) mPlayers.getPosition()); - intent.putExtra("title", mBinding.control.title.getText()); - intent.setDataAndType(mPlayers.getUri(), "video/*"); - startActivityForResult(Util.getChooser(intent), 1001); + mPlayers.choose(this, mBinding.control.title.getText()); setRedirect(true); return true; } @@ -1319,17 +1310,7 @@ public class VideoActivity extends BaseActivity implements Clock.Callback, Custo String title = mHistory == null ? getName() : mHistory.getVodName(); String artist = mEpisodeAdapter.isEmpty() ? "" : getEpisode().getName(); artist = title.equals(artist) ? "" : getString(R.string.play_now, artist); - MediaMetadataCompat.Builder builder = new MediaMetadataCompat.Builder(); - builder.putString(MediaMetadataCompat.METADATA_KEY_TITLE, title); - builder.putString(MediaMetadataCompat.METADATA_KEY_ARTIST, artist); - try { - builder.putBitmap(MediaMetadataCompat.METADATA_KEY_ART, getIjk().getDefaultArtwork()); - } catch (Exception e) { - e.printStackTrace(); - } - builder.putLong(MediaMetadataCompat.METADATA_KEY_DURATION, mPlayers.getDuration()); - mPlayers.setMetadata(builder.build()); - ActionEvent.update(); + mPlayers.setMetadata(title, artist, mBinding.exo); } @Subscribe(threadMode = ThreadMode.MAIN) @@ -1682,15 +1663,9 @@ public class VideoActivity extends BaseActivity implements Clock.Callback, Custo } @Override - public void onShare(CharSequence title, String url) { - if (IDMUtil.downloadFile(this, url, title.toString(), mPlayers.getHeaders(), false, false)) return; - Intent intent = new Intent(Intent.ACTION_SEND); - intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK); - intent.putExtra(Intent.EXTRA_TEXT, url); - intent.putExtra("name", title); - intent.putExtra("title", title); - intent.setType("text/plain"); - startActivity(Util.getChooser(intent)); + public void onShare(CharSequence title) { + if (IDMUtil.downloadFile(this, mPlayers.getUrl(), title.toString(), mPlayers.getHeaders(), false, false)) return; + mPlayers.share(this, title); setRedirect(true); } diff --git a/app/src/mobile/java/com/fongmi/android/tv/ui/dialog/InfoDialog.java b/app/src/mobile/java/com/fongmi/android/tv/ui/dialog/InfoDialog.java index 0bfdeb43f..7e86f59dd 100644 --- a/app/src/mobile/java/com/fongmi/android/tv/ui/dialog/InfoDialog.java +++ b/app/src/mobile/java/com/fongmi/android/tv/ui/dialog/InfoDialog.java @@ -1,7 +1,6 @@ package com.fongmi.android.tv.ui.dialog; import android.app.Activity; -import android.net.Uri; import android.text.TextUtils; import android.view.LayoutInflater; import android.view.View; @@ -47,8 +46,7 @@ public class InfoDialog { } public InfoDialog url(String url) { - if (TextUtils.isEmpty(url)) url = ""; - this.url = url.startsWith("data") ? url.substring(0, Math.min(url.length(), 128)).concat("...") : url; + this.url = url; return this; } @@ -65,8 +63,8 @@ public class InfoDialog { } private void initView() { - binding.url.setText(url); binding.title.setText(title); + binding.url.setText(fixUrl()); binding.header.setText(header); binding.url.setVisibility(TextUtils.isEmpty(url) ? View.GONE : View.VISIBLE); binding.header.setVisibility(TextUtils.isEmpty(header) ? View.GONE : View.VISIBLE); @@ -78,8 +76,12 @@ public class InfoDialog { binding.header.setOnLongClickListener(v -> onCopy(header)); } + private String fixUrl() { + return TextUtils.isEmpty(url) ? "" : url.startsWith("data") ? url.substring(0, Math.min(url.length(), 128)).concat("...") : url; + } + private void onShare(View view) { - callback.onShare(title, convert(url)); + callback.onShare(title); dialog.dismiss(); } @@ -89,13 +91,8 @@ public class InfoDialog { return true; } - private String convert(String url) { - if (TextUtils.isEmpty(url)) url = ""; - return url.startsWith("http://127.0.0.1:7777") ? Uri.parse(url).getQueryParameter("url") : url; - } - public interface Listener { - void onShare(CharSequence title, String url); + void onShare(CharSequence title); } }