Fix event bug

pull/589/head
FongMi 1 year ago
parent 9ad2304c8d
commit f224f5183e
  1. 6
      app/src/leanback/java/com/fongmi/android/tv/ui/activity/CastActivity.java
  2. 7
      app/src/leanback/java/com/fongmi/android/tv/ui/activity/LiveActivity.java
  3. 11
      app/src/leanback/java/com/fongmi/android/tv/ui/activity/VideoActivity.java
  4. 37
      app/src/main/java/com/fongmi/android/tv/event/ErrorEvent.java
  5. 24
      app/src/main/java/com/fongmi/android/tv/event/PlayerEvent.java
  6. 37
      app/src/main/java/com/fongmi/android/tv/player/Players.java
  7. 13
      app/src/mobile/java/com/fongmi/android/tv/ui/activity/LiveActivity.java
  8. 11
      app/src/mobile/java/com/fongmi/android/tv/ui/activity/VideoActivity.java

@ -48,6 +48,8 @@ import org.fourthline.cling.support.contentdirectory.DIDLParser;
import org.greenrobot.eventbus.Subscribe;
import org.greenrobot.eventbus.ThreadMode;
import java.util.UUID;
public class CastActivity extends BaseActivity implements CustomKeyDownCast.Listener, TrackDialog.Listener, RenderControl, ServiceConnection, Clock.Callback {
private ActivityCastBinding mBinding;
@ -62,6 +64,7 @@ public class CastActivity extends BaseActivity implements CustomKeyDownCast.List
private boolean redirect;
private long position;
private long duration;
private String tag;
private int scale;
public static void start(Activity activity) {
@ -141,6 +144,7 @@ public class CastActivity extends BaseActivity implements CustomKeyDownCast.List
PlaybackService.start(mPlayers);
setScale(scale = Setting.getScale());
ExoUtil.setSubtitleView(mBinding.exo);
mPlayers.setTag(tag = UUID.randomUUID().toString());
findViewById(R.id.timeBar).setNextFocusUpId(R.id.reset);
mBinding.control.speed.setText(mPlayers.getSpeedText());
mBinding.control.decode.setText(mPlayers.getDecodeText());
@ -295,6 +299,7 @@ public class CastActivity extends BaseActivity implements CustomKeyDownCast.List
@Subscribe(threadMode = ThreadMode.MAIN)
public void onPlayerEvent(PlayerEvent event) {
if (!event.getTag().equals(tag)) return;
switch (event.getState()) {
case PlayerEvent.PREPARE:
setDecode();
@ -340,6 +345,7 @@ public class CastActivity extends BaseActivity implements CustomKeyDownCast.List
@Subscribe(threadMode = ThreadMode.MAIN)
public void onErrorEvent(ErrorEvent event) {
if (!event.getTag().equals(tag)) return;
if (mPlayers.retried()) onError(event);
else onReset();
}

@ -68,6 +68,7 @@ import org.greenrobot.eventbus.ThreadMode;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import java.util.UUID;
public class LiveActivity extends BaseActivity implements GroupPresenter.OnClickListener, ChannelPresenter.OnClickListener, EpgDataPresenter.OnClickListener, CustomKeyDownLive.Listener, CustomLiveListView.Callback, TrackDialog.Listener, PassCallback, LiveCallback {
@ -91,6 +92,7 @@ public class LiveActivity extends BaseActivity implements GroupPresenter.OnClick
private Runnable mR4;
private Clock mClock;
private boolean redirect;
private String tag;
private int count;
public static void start(Context context) {
@ -189,6 +191,7 @@ public class LiveActivity extends BaseActivity implements GroupPresenter.OnClick
PlaybackService.start(mPlayers);
setScale(Setting.getLiveScale());
ExoUtil.setSubtitleView(mBinding.exo);
mPlayers.setTag(tag = UUID.randomUUID().toString());
findViewById(R.id.timeBar).setNextFocusUpId(R.id.player);
mBinding.control.invert.setActivated(Setting.isInvert());
mBinding.control.across.setActivated(Setting.isAcross());
@ -595,7 +598,7 @@ public class LiveActivity extends BaseActivity implements GroupPresenter.OnClick
private void setEpg() {
String epg = mChannel.getData().getEpg();
if (epg.length() > 0) mBinding.widget.name.setMaxEms(12);
if (!epg.isEmpty()) mBinding.widget.name.setMaxEms(12);
mEpgDataAdapter.setItems(mChannel.getData().getList(), null);
mBinding.widget.play.setText(epg);
setWidth(mChannel.getData());
@ -712,6 +715,7 @@ public class LiveActivity extends BaseActivity implements GroupPresenter.OnClick
@Subscribe(threadMode = ThreadMode.MAIN)
public void onPlayerEvent(PlayerEvent event) {
if (!event.getTag().equals(tag)) return;
switch (event.getState()) {
case PlayerEvent.PREPARE:
setDecode();
@ -752,6 +756,7 @@ public class LiveActivity extends BaseActivity implements GroupPresenter.OnClick
@Subscribe(threadMode = ThreadMode.MAIN)
public void onErrorEvent(ErrorEvent event) {
if (!event.getTag().equals(tag)) return;
if (mPlayers.retried()) onError(event);
else fetch();
}

@ -98,6 +98,7 @@ import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.Objects;
import java.util.UUID;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.regex.Matcher;
@ -137,6 +138,7 @@ public class VideoActivity extends BaseActivity implements CustomKeyDownVod.List
private Clock mClock;
private View mFocus1;
private View mFocus2;
private String tag;
public static void push(FragmentActivity activity, String text) {
if (FileChooser.isValid(activity, Uri.parse(text))) file(activity, FileChooser.getPathFromUri(activity, Uri.parse(text)));
@ -374,6 +376,7 @@ public class VideoActivity extends BaseActivity implements CustomKeyDownVod.List
PlaybackService.start(mPlayers);
ExoUtil.setSubtitleView(mBinding.exo);
mPlayers.setDanmakuView(mBinding.danmaku);
mPlayers.setTag(tag = UUID.randomUUID().toString());
mBinding.control.decode.setText(mPlayers.getDecodeText());
mBinding.control.danmaku.setVisibility(Setting.isDanmakuLoad() ? View.VISIBLE : View.GONE);
mBinding.control.reset.setText(ResUtil.getStringArray(R.array.select_reset)[Setting.getReset()]);
@ -577,7 +580,7 @@ public class VideoActivity extends BaseActivity implements CustomKeyDownVod.List
try {
mPlayers.start(result, isUseParse(), getSite().isChangeable() ? getSite().getTimeout() : -1);
} catch (Exception e) {
ErrorEvent.extract(e.getMessage());
ErrorEvent.extract(tag, e.getMessage());
e.printStackTrace();
}
}
@ -951,7 +954,7 @@ public class VideoActivity extends BaseActivity implements CustomKeyDownVod.List
boolean empty = item.getVodFlags().isEmpty();
mBinding.flag.setVisibility(empty ? View.GONE : View.VISIBLE);
if (empty) {
ErrorEvent.flag();
ErrorEvent.flag(tag);
} else {
setFlagActivated(mHistory.getFlag());
if (mHistory.isRevSort()) reverseEpisode(true);
@ -1049,7 +1052,7 @@ public class VideoActivity extends BaseActivity implements CustomKeyDownVod.List
@Subscribe(threadMode = ThreadMode.MAIN)
public void onPlayerEvent(PlayerEvent event) {
if (isRedirect()) return;
if (!event.getTag().equals(tag)) return;
switch (event.getState()) {
case PlayerEvent.PREPARE:
setDecode();
@ -1106,7 +1109,7 @@ public class VideoActivity extends BaseActivity implements CustomKeyDownVod.List
@Subscribe(threadMode = ThreadMode.MAIN)
public void onErrorEvent(ErrorEvent event) {
if (isRedirect()) return;
if (!event.getTag().equals(tag)) return;
if (mPlayers.retried()) onError(event);
else onRefresh();
}

@ -7,46 +7,53 @@ import org.greenrobot.eventbus.EventBus;
public class ErrorEvent {
private final String tag;
private final Type type;
private String msg;
public static void url() {
EventBus.getDefault().post(new ErrorEvent(Type.URL));
public static void url(String tag) {
EventBus.getDefault().post(new ErrorEvent(tag, Type.URL));
}
public static void drm() {
EventBus.getDefault().post(new ErrorEvent(Type.DRM));
public static void drm(String tag) {
EventBus.getDefault().post(new ErrorEvent(tag, Type.DRM));
}
public static void flag() {
EventBus.getDefault().post(new ErrorEvent(Type.FLAG));
public static void flag(String tag) {
EventBus.getDefault().post(new ErrorEvent(tag, Type.FLAG));
}
public static void parse() {
EventBus.getDefault().post(new ErrorEvent(Type.PARSE));
public static void parse(String tag) {
EventBus.getDefault().post(new ErrorEvent(tag, Type.PARSE));
}
public static void timeout() {
EventBus.getDefault().post(new ErrorEvent(Type.TIMEOUT));
public static void timeout(String tag) {
EventBus.getDefault().post(new ErrorEvent(tag, Type.TIMEOUT));
}
public static void extract(String msg) {
EventBus.getDefault().post(new ErrorEvent(Type.EXTRACT, msg));
public static void extract(String tag, String msg) {
EventBus.getDefault().post(new ErrorEvent(tag, Type.EXTRACT, msg));
}
public ErrorEvent(Type type) {
public ErrorEvent(String tag, Type type) {
this.type = type;
this.tag = tag;
}
public ErrorEvent(Type type, String msg) {
this.msg = msg;
public ErrorEvent(String tag, Type type, String msg) {
this.type = type;
this.tag = tag;
this.msg = msg;
}
public Type getType() {
return type;
}
public String getTag() {
return tag;
}
public String getMsg() {
if (type == Type.URL) return ResUtil.getString(R.string.error_play_url);
if (type == Type.DRM) return ResUtil.getString(R.string.error_play_drm_scheme);

@ -8,26 +8,32 @@ public class PlayerEvent {
public static final int TRACK = 21;
public static final int SIZE = 11;
private final String tag;
private final int state;
public static void prepare() {
EventBus.getDefault().post(new PlayerEvent(PREPARE));
public static void prepare(String tag) {
EventBus.getDefault().post(new PlayerEvent(tag, PREPARE));
}
public static void track() {
EventBus.getDefault().post(new PlayerEvent(TRACK));
public static void track(String tag) {
EventBus.getDefault().post(new PlayerEvent(tag, TRACK));
}
public static void size() {
EventBus.getDefault().post(new PlayerEvent(SIZE));
public static void size(String tag) {
EventBus.getDefault().post(new PlayerEvent(tag, SIZE));
}
public static void state(int state) {
EventBus.getDefault().post(new PlayerEvent(state));
public static void state(String tag, int state) {
EventBus.getDefault().post(new PlayerEvent(tag, state));
}
private PlayerEvent(int state) {
private PlayerEvent(String tag, int state) {
this.state = state;
this.tag = tag;
}
public String getTag() {
return tag;
}
public int getState() {

@ -87,6 +87,7 @@ public class Players implements Player.Listener, ParseCallback {
private VideoSize size;
private List<Sub> subs;
private String format;
private String tag;
private String key;
private String url;
private Drm drm;
@ -104,7 +105,7 @@ public class Players implements Player.Listener, ParseCallback {
private Players(Activity activity) {
decode = Setting.getDecode();
builder = new StringBuilder();
runnable = ErrorEvent::timeout;
runnable = () -> ErrorEvent.timeout(tag);
formatter = new Formatter(builder, Locale.getDefault());
createSession(activity);
}
@ -179,6 +180,14 @@ public class Players implements Player.Listener, ParseCallback {
this.key = key;
}
public String getTag() {
return tag;
}
public void setTag(String tag) {
this.tag = tag;
}
public void reset() {
removeTimeoutCheck();
retry = 0;
@ -392,13 +401,13 @@ public class Players implements Player.Listener, ParseCallback {
public void start(Channel channel, int timeout) {
if (channel.hasMsg()) {
ErrorEvent.extract(channel.getMsg());
ErrorEvent.extract(tag, channel.getMsg());
} else if (isIllegal(channel.getUrl())) {
ErrorEvent.url();
ErrorEvent.url(tag);
} else if (channel.getParse() == 1) {
startParse(channel.result(), false);
} else if (channel.getDrm() != null && !FrameworkMediaDrm.isCryptoSchemeSupported(channel.getDrm().getUUID())) {
ErrorEvent.drm();
ErrorEvent.drm(tag);
} else {
setMediaItem(channel, timeout);
}
@ -406,13 +415,13 @@ public class Players implements Player.Listener, ParseCallback {
public void start(Result result, boolean useParse, int timeout) {
if (result.hasMsg()) {
ErrorEvent.extract(result.getMsg());
ErrorEvent.extract(tag, result.getMsg());
} else if (isIllegal(result.getRealUrl())) {
ErrorEvent.url();
ErrorEvent.url(tag);
} else if (result.getParse(1) == 1 || result.getJx() == 1) {
startParse(result, useParse);
} else if (result.getDrm() != null && !FrameworkMediaDrm.isCryptoSchemeSupported(result.getDrm().getUUID())) {
ErrorEvent.drm();
ErrorEvent.drm(tag);
} else {
setMediaItem(result, timeout);
}
@ -464,8 +473,8 @@ public class Players implements Player.Listener, ParseCallback {
private void setMediaItem(Map<String, String> headers, String url, String format, Drm drm, List<Sub> subs, int timeout) {
if (exoPlayer != null) exoPlayer.setMediaItem(ExoUtil.getMediaItem(this.headers = checkUa(headers), UrlUtil.uri(this.url = url), this.format = format, this.drm = drm, checkSub(this.subs = subs), decode));
App.post(runnable, timeout);
PlayerEvent.prepare(tag);
session.setActive(true);
PlayerEvent.prepare();
Logger.t(TAG).d(url);
prepare();
}
@ -595,7 +604,7 @@ public class Players implements Player.Listener, ParseCallback {
@Override
public void onParseError() {
ErrorEvent.parse();
ErrorEvent.parse(tag);
}
@Override
@ -620,26 +629,26 @@ public class Players implements Player.Listener, ParseCallback {
@Override
public void onPlaybackStateChanged(int state) {
if (danPlayer != null) danPlayer.check(state);
PlayerEvent.state(state);
PlayerEvent.state(tag, state);
}
@Override
public void onVideoSizeChanged(@NonNull VideoSize videoSize) {
this.size = videoSize;
PlayerEvent.size();
PlayerEvent.size(tag);
}
@Override
public void onTracksChanged(@NonNull Tracks tracks) {
if (tracks.isEmpty()) return;
setTrack(Track.find(getKey()));
PlayerEvent.track();
PlayerEvent.track(tag);
}
@Override
public void onPlayerError(@NonNull PlaybackException error) {
Logger.t(TAG).e(error.errorCode + "," + url);
if (retried()) ErrorEvent.extract(error.getErrorCodeName());
if (retried()) ErrorEvent.extract(tag, error.getErrorCodeName());
else switch (error.errorCode) {
case PlaybackException.ERROR_CODE_BEHIND_LIVE_WINDOW:
seekToDefaultPosition();
@ -657,7 +666,7 @@ public class Players implements Player.Listener, ParseCallback {
setFormat(ExoUtil.getMimeType(error.errorCode));
break;
default:
ErrorEvent.extract(error.getErrorCodeName());
ErrorEvent.extract(tag, error.getErrorCodeName());
break;
}
}

@ -72,6 +72,7 @@ import org.greenrobot.eventbus.ThreadMode;
import java.util.ArrayList;
import java.util.Iterator;
import java.util.List;
import java.util.UUID;
public class LiveActivity extends BaseActivity implements CustomKeyDownLive.Listener, TrackDialog.Listener, Biometric.Callback, PassCallback, LiveCallback, GroupAdapter.OnClickListener, ChannelAdapter.OnClickListener, EpgDataAdapter.OnClickListener, CastDialog.Listener, InfoDialog.Listener {
@ -95,7 +96,8 @@ public class LiveActivity extends BaseActivity implements CustomKeyDownLive.List
private boolean rotate;
private boolean stop;
private boolean lock;
private int passCount;
private String tag;
private int count;
private PiP mPiP;
public static void start(Context context) {
@ -197,6 +199,7 @@ public class LiveActivity extends BaseActivity implements CustomKeyDownLive.List
PlaybackService.start(mPlayers);
setScale(Setting.getLiveScale());
ExoUtil.setSubtitleView(mBinding.exo);
mPlayers.setTag(tag = UUID.randomUUID().toString());
mBinding.control.action.invert.setActivated(Setting.isInvert());
mBinding.control.action.across.setActivated(Setting.isAcross());
mBinding.control.action.change.setActivated(Setting.isChange());
@ -514,7 +517,7 @@ public class LiveActivity extends BaseActivity implements CustomKeyDownLive.List
}
private void resetPass() {
this.passCount = 0;
this.count = 0;
}
private void setArtwork(String url) {
@ -541,7 +544,7 @@ public class LiveActivity extends BaseActivity implements CustomKeyDownLive.List
mChannelAdapter.addAll(item.getChannel());
mChannelAdapter.setSelected(item.getPosition());
mBinding.channel.scrollToPosition(Math.max(item.getPosition(), 0));
if (!item.isKeep() || ++passCount < 5 || mHides.isEmpty()) return;
if (!item.isKeep() || ++count < 5 || mHides.isEmpty()) return;
if (Biometric.enable()) Biometric.show(this);
else PassDialog.create().show(this);
resetPass();
@ -618,7 +621,7 @@ public class LiveActivity extends BaseActivity implements CustomKeyDownLive.List
private void setEpg() {
String epg = mChannel.getData().getEpg();
List<EpgData> data = mChannel.getData().getList();
if (epg.length() > 0) mBinding.widget.name.setMaxEms(12);
if (!epg.isEmpty()) mBinding.widget.name.setMaxEms(12);
mBinding.widget.play.setText(epg);
mChannelAdapter.changed(mChannel);
mEpgDataAdapter.addAll(data);
@ -748,6 +751,7 @@ public class LiveActivity extends BaseActivity implements CustomKeyDownLive.List
@Subscribe(threadMode = ThreadMode.MAIN)
public void onPlayerEvent(PlayerEvent event) {
if (!event.getTag().equals(tag)) return;
switch (event.getState()) {
case PlayerEvent.PREPARE:
setDecode();
@ -789,6 +793,7 @@ public class LiveActivity extends BaseActivity implements CustomKeyDownLive.List
@Subscribe(threadMode = ThreadMode.MAIN)
public void onErrorEvent(ErrorEvent event) {
if (!event.getTag().equals(tag)) return;
if (mPlayers.retried()) onError(event);
else fetch();
}

@ -108,6 +108,7 @@ import java.util.Iterator;
import java.util.List;
import java.util.Map;
import java.util.Objects;
import java.util.UUID;
import java.util.concurrent.ExecutorService;
import java.util.concurrent.Executors;
import java.util.regex.Matcher;
@ -145,6 +146,7 @@ public class VideoActivity extends BaseActivity implements Clock.Callback, Custo
private Runnable mR3;
private Runnable mR4;
private Clock mClock;
private String tag;
private PiP mPiP;
public static void push(FragmentActivity activity, String text) {
@ -371,6 +373,7 @@ public class VideoActivity extends BaseActivity implements Clock.Callback, Custo
PlaybackService.start(mPlayers);
ExoUtil.setSubtitleView(mBinding.exo);
mPlayers.setDanmakuView(mBinding.danmaku);
mPlayers.setTag(tag = UUID.randomUUID().toString());
if (isPort() && ResUtil.isLand(this)) enterFullscreen();
mBinding.control.action.decode.setText(mPlayers.getDecodeText());
mBinding.control.action.danmaku.setVisibility(Setting.isDanmakuLoad() ? View.VISIBLE : View.GONE);
@ -568,7 +571,7 @@ public class VideoActivity extends BaseActivity implements Clock.Callback, Custo
try {
mPlayers.start(result, isUseParse(), getSite().isChangeable() ? getSite().getTimeout() : -1);
} catch (Exception e) {
ErrorEvent.extract(e.getMessage());
ErrorEvent.extract(tag, e.getMessage());
e.printStackTrace();
}
}
@ -993,7 +996,7 @@ public class VideoActivity extends BaseActivity implements Clock.Callback, Custo
boolean empty = item.getVodFlags().isEmpty();
mBinding.flag.setVisibility(empty ? View.GONE : View.VISIBLE);
if (empty) {
ErrorEvent.flag();
ErrorEvent.flag(tag);
} else {
onItemClick(mHistory.getFlag());
if (mHistory.isRevSort()) reverseEpisode(true);
@ -1111,7 +1114,7 @@ public class VideoActivity extends BaseActivity implements Clock.Callback, Custo
@Subscribe(threadMode = ThreadMode.MAIN)
public void onPlayerEvent(PlayerEvent event) {
if (isRedirect()) return;
if (!event.getTag().equals(tag)) return;
switch (event.getState()) {
case PlayerEvent.PREPARE:
setDecode();
@ -1181,7 +1184,7 @@ public class VideoActivity extends BaseActivity implements Clock.Callback, Custo
@Subscribe(threadMode = ThreadMode.MAIN)
public void onErrorEvent(ErrorEvent event) {
if (isRedirect()) return;
if (!event.getTag().equals(tag)) return;
if (mPlayers.retried()) onError(event);
else onRefresh();
}

Loading…
Cancel
Save