Support playerType

pull/123/head
FongMi 3 years ago
parent 064ac352a8
commit 2a2a38aee8
  1. 41
      app/src/leanback/java/com/fongmi/android/tv/ui/activity/DetailActivity.java
  2. 44
      app/src/leanback/java/com/fongmi/android/tv/ui/activity/LiveActivity.java
  3. 12
      app/src/leanback/java/com/fongmi/android/tv/ui/activity/SettingActivity.java
  4. 10
      app/src/main/java/com/fongmi/android/tv/bean/Site.java
  5. 1
      app/src/main/java/com/fongmi/android/tv/db/AppDatabase.java
  6. 5
      app/src/main/java/com/fongmi/android/tv/player/ExoUtil.java
  7. 61
      app/src/main/java/com/fongmi/android/tv/player/Players.java
  8. 8
      app/src/main/java/com/fongmi/android/tv/utils/Prefers.java
  9. 2
      app/src/main/java/com/fongmi/android/tv/utils/ResUtil.java

@ -26,6 +26,7 @@ import com.fongmi.android.tv.bean.Keep;
import com.fongmi.android.tv.bean.Parse;
import com.fongmi.android.tv.bean.Part;
import com.fongmi.android.tv.bean.Result;
import com.fongmi.android.tv.bean.Site;
import com.fongmi.android.tv.bean.Vod;
import com.fongmi.android.tv.databinding.ActivityDetailBinding;
import com.fongmi.android.tv.db.AppDatabase;
@ -113,6 +114,10 @@ public class DetailActivity extends BaseActivity implements CustomKeyDownVod.Lis
return getKey().concat(AppDatabase.SYMBOL).concat(getId());
}
private Site getSite() {
return ApiConfig.get().getSite(getKey());
}
private Vod.Flag getVodFlag() {
return (Vod.Flag) mFlagAdapter.get(mBinding.flag.getSelectedPosition());
}
@ -122,6 +127,10 @@ public class DetailActivity extends BaseActivity implements CustomKeyDownVod.Lis
return 0;
}
private int getPlayerType() {
return mHistory != null && mHistory.getPlayer() != -1 ? mHistory.getPlayer() : getSite().getPlayerType() != -1 ? getSite().getPlayerType() : Prefers.getPlayer();
}
private StyledPlayerView getExo() {
return Prefers.getRender() == 0 ? mBinding.surface : mBinding.texture;
}
@ -152,7 +161,6 @@ public class DetailActivity extends BaseActivity implements CustomKeyDownVod.Lis
mR1 = this::hideControl;
mR2 = this::hideCenter;
setRecyclerView();
setPlayerView();
setVideoView();
setViewModel();
getDetail();
@ -211,19 +219,21 @@ public class DetailActivity extends BaseActivity implements CustomKeyDownVod.Lis
}
private void setPlayerView() {
mBinding.control.player.setText(mPlayers.getPlayerText());
getExo().setVisibility(mPlayers.isExo() ? View.VISIBLE : View.GONE);
getIjk().setVisibility(mPlayers.isIjk() ? View.VISIBLE : View.GONE);
}
private void setDecodeView() {
mBinding.control.decode.setText(mPlayers.getDecodeText());
}
private void setVideoView() {
mPlayers.setupIjk(getIjk());
mPlayers.setupExo(getExo());
setScale(Prefers.getVodScale());
getExo().setPlayer(mPlayers.exo());
getIjk().setRender(Prefers.getRender());
getIjk().setDecode(Prefers.getDecode());
getExo().getSubtitleView().setStyle(ExoUtil.getCaptionStyle());
mBinding.control.player.setText(ResUtil.getStringArray(R.array.select_player)[Prefers.getPlayer()]);
mBinding.control.decode.setText(ResUtil.getStringArray(R.array.select_decode)[Prefers.getDecode()]);
}
private void setScale(int scale) {
@ -275,7 +285,7 @@ public class DetailActivity extends BaseActivity implements CustomKeyDownVod.Lis
setText(mBinding.year, R.string.detail_year, item.getVodYear());
setText(mBinding.area, R.string.detail_area, item.getVodArea());
setText(mBinding.type, R.string.detail_type, item.getTypeName());
setText(mBinding.site, R.string.detail_site, ApiConfig.getSiteName(getKey()));
setText(mBinding.site, R.string.detail_site, getSite().getName());
setText(mBinding.actor, R.string.detail_actor, Html.fromHtml(item.getVodActor()).toString());
setText(mBinding.content, R.string.detail_content, Html.fromHtml(item.getVodContent()).toString());
setText(mBinding.director, R.string.detail_director, Html.fromHtml(item.getVodDirector()).toString());
@ -429,7 +439,7 @@ public class DetailActivity extends BaseActivity implements CustomKeyDownVod.Lis
private void onScale() {
int index = mHistory.getScale();
if (index == -1) index = Prefers.getVodScale();
CharSequence[] array = ResUtil.getStringArray(R.array.select_scale);
String[] array = ResUtil.getStringArray(R.array.select_scale);
mHistory.setScale(index = index == array.length - 1 ? 0 : ++index);
setScale(index);
}
@ -474,16 +484,20 @@ public class DetailActivity extends BaseActivity implements CustomKeyDownVod.Lis
}
private void onPlayer() {
mPlayers.stop();
mPlayers.togglePlayer();
mHistory.setPlayer(mPlayers.getPlayer());
mBinding.control.tracks.setVisibility(View.GONE);
mBinding.control.player.setText(mPlayers.togglePlayer());
App.post(() -> getPlayer(false), 250);
getPlayer(false);
setPlayerView();
}
private void onDecode() {
mBinding.control.decode.setText(mPlayers.toggleDecode());
if (mPlayers.isExo()) getExo().setPlayer(mPlayers.exo());
mPlayers.toggleDecode();
mPlayers.setupIjk(getIjk());
mPlayers.setupExo(getExo());
getPlayer(false);
setDecodeView();
}
private void onTracks() {
@ -579,6 +593,9 @@ public class DetailActivity extends BaseActivity implements CustomKeyDownVod.Lis
mBinding.control.opening.setText(mPlayers.stringToTime(mHistory.getOpening()));
mBinding.control.ending.setText(mPlayers.stringToTime(mHistory.getEnding()));
mBinding.control.speed.setText(mPlayers.setSpeed(mHistory.getSpeed()));
mPlayers.setPlayer(getPlayerType());
setPlayerView();
setDecodeView();
}
private History createHistory() {
@ -609,7 +626,7 @@ public class DetailActivity extends BaseActivity implements CustomKeyDownVod.Lis
Keep keep = new Keep();
keep.setKey(getHistoryKey());
keep.setCid(ApiConfig.getCid());
keep.setSiteName(ApiConfig.getSiteName(getKey()));
keep.setSiteName(getSite().getName());
keep.setVodPic(mBinding.video.getTag().toString());
keep.setVodName(mBinding.name.getText().toString());
keep.setCreateTime(System.currentTimeMillis());

@ -126,7 +126,6 @@ public class LiveActivity extends BaseActivity implements GroupPresenter.OnClick
mFormatTime = new SimpleDateFormat("yyyy-MM-ddHH:mm", Locale.getDefault());
mHides = new ArrayList<>();
setRecyclerView();
setPlayerView();
setVideoView();
setViewModel();
getLive();
@ -161,26 +160,34 @@ public class LiveActivity extends BaseActivity implements GroupPresenter.OnClick
}
private void setPlayerView() {
mBinding.control.player.setText(mPlayers.getPlayerText());
getExo().setVisibility(mPlayers.isExo() ? View.VISIBLE : View.GONE);
getIjk().setVisibility(mPlayers.isIjk() ? View.VISIBLE : View.GONE);
}
private void setDecodeView() {
mBinding.control.decode.setText(mPlayers.getDecodeText());
}
private void setVideoView() {
mPlayers.setupIjk(getIjk());
getExo().setPlayer(mPlayers.exo());
getExo().setResizeMode(Prefers.getLiveScale());
getExo().setOnClickListener(view -> onToggle());
getExo().setOnLongClickListener(view -> onLongPress());
getIjk().setResizeMode(Prefers.getLiveScale());
mPlayers.setupExo(getExo());
setScale(Prefers.getLiveScale());
getIjk().setRender(Prefers.getRender());
getIjk().setDecode(Prefers.getDecode());
getExo().setOnClickListener(view -> onToggle());
getIjk().setOnClickListener(view -> onToggle());
getExo().setOnLongClickListener(view -> onLongPress());
getIjk().setOnLongClickListener(view -> onLongPress());
mBinding.control.speed.setText(mPlayers.getSpeedText());
mBinding.control.home.setVisibility(LiveConfig.isOnly() ? View.GONE : View.VISIBLE);
mBinding.control.player.setText(ResUtil.getStringArray(R.array.select_player)[Prefers.getPlayer()]);
mBinding.control.decode.setText(ResUtil.getStringArray(R.array.select_decode)[Prefers.getDecode()]);
mBinding.control.scale.setText(ResUtil.getStringArray(R.array.select_scale)[Prefers.getLiveScale()]);
setPlayerView();
setDecodeView();
}
private void setScale(int scale) {
getExo().setResizeMode(scale);
getIjk().setResizeMode(scale);
mBinding.control.scale.setText(ResUtil.getStringArray(R.array.select_scale)[scale]);
}
private void setViewModel() {
@ -256,11 +263,9 @@ public class LiveActivity extends BaseActivity implements GroupPresenter.OnClick
private void onScale() {
int index = Prefers.getLiveScale();
CharSequence[] array = ResUtil.getStringArray(R.array.select_scale);
String[] array = ResUtil.getStringArray(R.array.select_scale);
Prefers.putLiveScale(index = index == array.length - 1 ? 0 : ++index);
mBinding.control.scale.setText(array[index]);
getExo().setResizeMode(index);
getIjk().setResizeMode(index);
setScale(index);
}
private void onSpeed() {
@ -273,15 +278,18 @@ public class LiveActivity extends BaseActivity implements GroupPresenter.OnClick
}
private void onPlayer() {
mPlayers.stop();
mPlayers.togglePlayer();
mBinding.control.tracks.setVisibility(View.GONE);
mBinding.control.player.setText(mPlayers.togglePlayer());
App.post(this::getUrl, 250);
setPlayerView();
getUrl();
}
private void onDecode() {
mBinding.control.decode.setText(mPlayers.toggleDecode());
if (mPlayers.isExo()) getExo().setPlayer(mPlayers.exo());
mPlayers.toggleDecode();
mPlayers.setupIjk(getIjk());
mPlayers.setupExo(getExo());
setDecodeView();
getUrl();
}

@ -180,7 +180,7 @@ public class SettingActivity extends BaseActivity implements ConfigCallback, Sit
private void setQuality() {
int index = Prefers.getQuality();
CharSequence[] array = ResUtil.getStringArray(R.array.select_quality);
String[] array = ResUtil.getStringArray(R.array.select_quality);
Prefers.putQuality(index = index == array.length - 1 ? 0 : ++index);
mBinding.qualityText.setText(array[index]);
RefreshEvent.image();
@ -188,35 +188,35 @@ public class SettingActivity extends BaseActivity implements ConfigCallback, Sit
private void setPlayer() {
int index = Prefers.getPlayer();
CharSequence[] array = ResUtil.getStringArray(R.array.select_player);
String[] array = ResUtil.getStringArray(R.array.select_player);
Prefers.putPlayer(index = index == array.length - 1 ? 0 : ++index);
mBinding.playerText.setText(array[index]);
}
private void setDecode() {
int index = Prefers.getDecode();
CharSequence[] array = ResUtil.getStringArray(R.array.select_decode);
String[] array = ResUtil.getStringArray(R.array.select_decode);
Prefers.putDecode(index = index == array.length - 1 ? 0 : ++index);
mBinding.decodeText.setText(array[index]);
}
private void setRender() {
int index = Prefers.getRender();
CharSequence[] array = ResUtil.getStringArray(R.array.select_render);
String[] array = ResUtil.getStringArray(R.array.select_render);
Prefers.putRender(index = index == array.length - 1 ? 0 : ++index);
mBinding.renderText.setText(array[index]);
}
private void setScale() {
int index = Prefers.getVodScale();
CharSequence[] array = ResUtil.getStringArray(R.array.select_scale);
String[] array = ResUtil.getStringArray(R.array.select_scale);
Prefers.putVodScale(index = index == array.length - 1 ? 0 : ++index);
mBinding.scaleText.setText(array[index]);
}
private void setSize() {
int index = Prefers.getSize();
CharSequence[] array = ResUtil.getStringArray(R.array.select_size);
String[] array = ResUtil.getStringArray(R.array.select_size);
Prefers.putSize(index = index == array.length - 1 ? 0 : ++index);
mBinding.sizeText.setText(array[index]);
RefreshEvent.size();

@ -102,10 +102,6 @@ public class Site {
return playUrl;
}
public Integer getPlayerType() {
return playerType;
}
public Integer getSearchable() {
return searchable;
}
@ -180,6 +176,12 @@ public class Site {
return isFilterable() ? R.drawable.ic_filter_on : R.drawable.ic_filter_off;
}
public int getPlayerType() {
if (playerType == null) return -1;
if (playerType == 1) return 1;
return 0;
}
public static Site find(String key) {
return AppDatabase.get().getSiteDao().find(key);
}

@ -87,7 +87,6 @@ public abstract class AppDatabase extends RoomDatabase {
public void migrate(@NonNull SupportSQLiteDatabase database) {
database.execSQL("ALTER TABLE History ADD COLUMN speed REAL DEFAULT 1 NOT NULL");
database.execSQL("ALTER TABLE History ADD COLUMN player INTEGER DEFAULT -1 NOT NULL");
database.execSQL("ALTER TABLE History ADD COLUMN decode INTEGER DEFAULT -1 NOT NULL");
}
};
}

@ -7,7 +7,6 @@ import android.text.TextUtils;
import com.fongmi.android.tv.App;
import com.fongmi.android.tv.bean.Result;
import com.fongmi.android.tv.utils.FileUtil;
import com.fongmi.android.tv.utils.Prefers;
import com.google.android.exoplayer2.DefaultRenderersFactory;
import com.google.android.exoplayer2.MediaItem;
import com.google.android.exoplayer2.PlaybackException;
@ -51,8 +50,8 @@ public class ExoUtil {
return trackSelector;
}
public static RenderersFactory buildRenderersFactory() {
return new DefaultRenderersFactory(App.get()).setExtensionRendererMode(Math.abs(Prefers.getDecode() - 2));
public static RenderersFactory buildRenderersFactory(int decode) {
return new DefaultRenderersFactory(App.get()).setExtensionRendererMode(Math.abs(decode - 2));
}
public static CaptionStyleCompat getCaptionStyle() {

@ -16,6 +16,7 @@ import com.google.android.exoplayer2.ExoPlayer;
import com.google.android.exoplayer2.PlaybackException;
import com.google.android.exoplayer2.Player;
import com.google.android.exoplayer2.analytics.AnalyticsListener;
import com.google.android.exoplayer2.ui.StyledPlayerView;
import com.google.android.exoplayer2.util.Util;
import java.util.Formatter;
@ -34,42 +35,55 @@ public class Players implements Player.Listener, IMediaPlayer.OnInfoListener, IM
private ExoPlayer exoPlayer;
private int errorCode;
private int retry;
private int decode;
private int player;
public boolean isExo() {
return Prefers.isExo();
return player == 0;
}
public boolean isIjk() {
return Prefers.isIjk();
return player == 1;
}
public Players init() {
player = Prefers.getPlayer();
decode = Prefers.getDecode();
builder = new StringBuilder();
formatter = new Formatter(builder, Locale.getDefault());
setupExo();
return this;
}
public void setupIjk(IjkVideoView view) {
ijkPlayer = view;
ijkPlayer.setDecode(decode);
ijkPlayer.setOnInfoListener(this);
ijkPlayer.setOnErrorListener(this);
ijkPlayer.setOnPreparedListener(this);
ijkPlayer.setOnCompletionListener(this);
}
public void setupExo() {
public void setupExo(StyledPlayerView view) {
if (exoPlayer != null) releaseExo();
exoPlayer = new ExoPlayer.Builder(App.get()).setLoadControl(new DefaultLoadControl()).setRenderersFactory(ExoUtil.buildRenderersFactory()).setTrackSelector(ExoUtil.buildTrackSelector()).build();
exoPlayer = new ExoPlayer.Builder(App.get()).setLoadControl(new DefaultLoadControl()).setRenderersFactory(ExoUtil.buildRenderersFactory(decode)).setTrackSelector(ExoUtil.buildTrackSelector()).build();
exoPlayer.addAnalyticsListener(this);
exoPlayer.setPlayWhenReady(true);
exoPlayer.addListener(this);
view.setPlayer(exoPlayer);
}
public ExoPlayer exo() {
return exoPlayer;
}
public int getPlayer() {
return player;
}
public int getDecode() {
return decode;
}
public void reset() {
this.errorCode = 0;
this.retry = 0;
@ -124,6 +138,14 @@ public class Players implements Player.Listener, IMediaPlayer.OnInfoListener, IM
return String.format(Locale.getDefault(), "%.2f", getSpeed());
}
public String getPlayerText() {
return ResUtil.getStringArray(R.array.select_player)[player];
}
public String getDecodeText() {
return ResUtil.getStringArray(R.array.select_decode)[decode];
}
public String setSpeed(float speed) {
exoPlayer.setPlaybackSpeed(speed);
ijkPlayer.setSpeed(speed);
@ -147,17 +169,22 @@ public class Players implements Player.Listener, IMediaPlayer.OnInfoListener, IM
return getSpeedText();
}
public String togglePlayer() {
stop();
int index = Prefers.getPlayer();
Prefers.putPlayer(index = index == 0 ? 1 : 0);
return ResUtil.getStringArray(R.array.select_player)[index].toString();
public void setPlayer(int player) {
this.player = player;
Prefers.putPlayer(player);
}
public void togglePlayer() {
setPlayer(player == 0 ? 1 : 0);
}
public void setDecode(int decode) {
this.decode = decode;
Prefers.putDecode(decode);
}
public String toggleDecode() {
int index = Prefers.getDecode();
setDecode(index = index == 0 ? 1 : 0);
return ResUtil.getStringArray(R.array.select_decode)[index].toString();
public void toggleDecode() {
setDecode(decode == 0 ? 1 : 0);
}
public String getPositionTime(long time) {
@ -173,12 +200,6 @@ public class Players implements Player.Listener, IMediaPlayer.OnInfoListener, IM
return stringToTime(time);
}
public void setDecode(int decode) {
Prefers.putDecode(decode);
ijkPlayer.setDecode(decode);
if (isExo()) setupExo();
}
public void seekTo(int time) {
if (time == 0) return;
if (isExo()) exoPlayer.seekTo(getPosition() + time);

@ -154,12 +154,4 @@ public class Prefers {
public static int getColumn() {
return Math.abs(getSize() - 7);
}
public static boolean isExo() {
return getPlayer() == 0;
}
public static boolean isIjk() {
return getPlayer() == 1;
}
}

@ -52,7 +52,7 @@ public class ResUtil {
return App.get().getString(resId, formatArgs);
}
public static CharSequence[] getStringArray(@ArrayRes int resId) {
public static String[] getStringArray(@ArrayRes int resId) {
return App.get().getResources().getStringArray(resId);
}

Loading…
Cancel
Save