Optimize metadata

pull/499/head
okjack 2 years ago
parent e092fd069f
commit 4114be32cb
  1. 11
      app/src/leanback/java/com/fongmi/android/tv/ui/activity/CastActivity.java
  2. 20
      app/src/leanback/java/com/fongmi/android/tv/ui/activity/LiveActivity.java
  3. 22
      app/src/leanback/java/com/fongmi/android/tv/ui/activity/VideoActivity.java
  4. 50
      app/src/main/java/com/fongmi/android/tv/player/Players.java
  5. 5
      app/src/mobile/java/com/fongmi/android/tv/service/PlaybackService.java
  6. 32
      app/src/mobile/java/com/fongmi/android/tv/ui/activity/LiveActivity.java
  7. 35
      app/src/mobile/java/com/fongmi/android/tv/ui/activity/VideoActivity.java
  8. 19
      app/src/mobile/java/com/fongmi/android/tv/ui/dialog/InfoDialog.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)

@ -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)

@ -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)

@ -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;

@ -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);

@ -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);
}

@ -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);
}

@ -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);
}
}

Loading…
Cancel
Save