Add webView parse timeout

pull/3/head
FongMi 4 years ago
parent 916e3b2be7
commit a242c32475
  1. 2
      app/src/main/java/com/fongmi/bear/event/PlayerEvent.java
  2. 35
      app/src/main/java/com/fongmi/bear/player/Players.java
  3. 6
      app/src/main/java/com/fongmi/bear/ui/activity/DetailActivity.java
  4. 2
      app/src/main/java/com/fongmi/bear/ui/activity/HomeActivity.java
  5. 8
      app/src/main/java/com/fongmi/bear/ui/activity/PlayActivity.java
  6. 1
      app/src/main/res/values-zh-rCN/strings.xml
  7. 1
      app/src/main/res/values-zh-rTW/strings.xml
  8. 1
      app/src/main/res/values/strings.xml

@ -2,7 +2,7 @@ package com.fongmi.bear.event;
public class PlayerEvent {
private int state;
private final int state;
public PlayerEvent(int state) {
this.state = state;

@ -1,6 +1,7 @@
package com.fongmi.bear.player;
import android.app.Activity;
import android.os.Handler;
import android.os.Looper;
import com.fongmi.bear.App;
import com.fongmi.bear.event.PlayerEvent;
@ -17,9 +18,9 @@ import java.util.Map;
public class Players implements Player.Listener {
private final CustomWebView webView;
private final ExoPlayer exoPlayer;
private CustomWebView webView;
private Activity activity;
private final Handler handler;
private static class Loader {
static volatile Players INSTANCE = new Players();
@ -31,15 +32,11 @@ public class Players implements Player.Listener {
public Players() {
webView = new CustomWebView(App.get());
handler = new Handler(Looper.getMainLooper());
exoPlayer = new ExoPlayer.Builder(App.get()).build();
exoPlayer.addListener(this);
}
public Players activity(Activity activity) {
this.activity = activity;
return this;
}
public ExoPlayer exo() {
return exoPlayer;
}
@ -74,13 +71,14 @@ public class Players implements Player.Listener {
}
private void loadWebView(String url) {
activity.runOnUiThread(() -> {
webView.start(url);
});
handler.removeCallbacks(mTimer);
handler.postDelayed(mTimer, 5000);
handler.post(() -> webView.start(url));
}
public void setMediaSource(Map<String, String> headers, String url) {
activity.runOnUiThread(() -> {
handler.post(() -> {
handler.removeCallbacks(mTimer);
exoPlayer.setMediaSource(ExoUtil.getSource(headers, url));
exoPlayer.prepare();
exoPlayer.play();
@ -89,8 +87,8 @@ public class Players implements Player.Listener {
}
public void toggle() {
if (exoPlayer.isPlaying()) exoPlayer.pause();
else exoPlayer.play();
if (exoPlayer.isPlaying()) pause();
else play();
}
public void pause() {
@ -119,6 +117,15 @@ public class Players implements Player.Listener {
}
}
private final Runnable mTimer = new Runnable() {
@Override
public void run() {
EventBus.getDefault().post(new PlayerEvent(-1));
exoPlayer.stop();
webView.stop();
}
};
@Override
public void onPlaybackStateChanged(int state) {
EventBus.getDefault().post(new PlayerEvent(state));

@ -25,6 +25,7 @@ import com.fongmi.bear.player.Players;
import com.fongmi.bear.ui.presenter.EpisodePresenter;
import com.fongmi.bear.ui.presenter.FlagPresenter;
import com.fongmi.bear.ui.presenter.GroupPresenter;
import com.fongmi.bear.utils.Notify;
import com.fongmi.bear.utils.Prefers;
import com.fongmi.bear.utils.ResUtil;
import com.google.android.exoplayer2.Player;
@ -68,7 +69,7 @@ public class DetailActivity extends BaseActivity {
@Override
protected void initView() {
mBinding.progressLayout.showProgress();
mBinding.video.setPlayer(Players.get().activity(this).exo());
mBinding.video.setPlayer(Players.get().exo());
mBinding.video.setResizeMode(Prefers.getScale());
setRecyclerView();
setViewModel();
@ -185,13 +186,14 @@ public class DetailActivity extends BaseActivity {
@Subscribe(threadMode = ThreadMode.MAIN)
public void onPlaybackStateChanged(PlayerEvent event) {
mBinding.progress.getRoot().setVisibility(event.getState() == Player.STATE_BUFFERING ? View.VISIBLE : View.GONE);
if (event.getState() == -1) Notify.show(R.string.error_play_parse);
}
@Override
protected void onActivityResult(int requestCode, int resultCode, @Nullable Intent data) {
super.onActivityResult(requestCode, resultCode, data);
mBinding.video.setResizeMode(Prefers.getScale());
mBinding.video.setPlayer(Players.get().activity(this).exo());
mBinding.video.setPlayer(Players.get().exo());
if (data != null) checkResult(data);
}

@ -132,7 +132,7 @@ public class HomeActivity extends BaseActivity implements VodPresenter.OnClickLi
@Override
protected void onDestroy() {
super.onDestroy();
Players.get().release();
super.onDestroy();
}
}

@ -57,11 +57,11 @@ public class PlayActivity extends BaseActivity implements KeyDownImpl {
mVodFlag = Vod.Flag.objectFrom(getFlag());
mControl = ViewControllerBinding.bind(mBinding.video.findViewById(R.id.control));
mControl.scale.setText(ResUtil.getStringArray(R.array.select_scale)[Prefers.getScale()]);
mBinding.video.setPlayer(Players.get().activity(this).exo());
mControl.speed.setText(Players.get().getSpeed());
mBinding.video.setResizeMode(Prefers.getScale());
mBinding.video.setControllerHideOnTouch(false);
mBinding.video.setControllerShowTimeoutMs(0);
mBinding.video.setResizeMode(Prefers.getScale());
mControl.speed.setText(Players.get().getSpeed());
mBinding.video.setPlayer(Players.get().exo());
if (Players.get().isIdle()) showProgress();
setViewModel();
findCurrent();
@ -135,6 +135,7 @@ public class PlayActivity extends BaseActivity implements KeyDownImpl {
@Subscribe(threadMode = ThreadMode.MAIN)
public void onPlaybackStateChanged(PlayerEvent event) {
if (event.getState() == -1) Notify.show(R.string.error_play_parse);
if (event.getState() == Player.STATE_BUFFERING) showProgress();
else hideProgress();
}
@ -158,6 +159,7 @@ public class PlayActivity extends BaseActivity implements KeyDownImpl {
@Override
public void onKeyDown() {
mBinding.video.showController();
mControl.next.requestFocus();
}
@Override

@ -48,6 +48,7 @@
<string name="error_config_parse">配置解析失败</string>
<string name="error_play_next">已经是最后一集了!</string>
<string name="error_play_prev">已经是第一集了!</string>
<string name="error_play_parse">无法解析网址</string>
<string-array name="select_scale">
<item>预设</item>

@ -48,6 +48,7 @@
<string name="error_config_parse">配置解析失敗</string>
<string name="error_play_next">已經是最後一集了!</string>
<string name="error_play_prev">已經是第一集了!</string>
<string name="error_play_parse">無法解析網址</string>
<string-array name="select_scale">
<item>預設</item>

@ -48,6 +48,7 @@
<string name="error_config_parse">Configuration parse failed</string>
<string name="error_play_next">It\'s the last episode!</string>
<string name="error_play_prev">It\'s the first episode!</string>
<string name="error_play_parse">Unable to parse url</string>
<string-array name="select_scale">
<item>Default</item>

Loading…
Cancel
Save