diff --git a/app/src/main/java/com/fongmi/bear/event/PlayerEvent.java b/app/src/main/java/com/fongmi/bear/event/PlayerEvent.java index 690ef019f..62d60382e 100644 --- a/app/src/main/java/com/fongmi/bear/event/PlayerEvent.java +++ b/app/src/main/java/com/fongmi/bear/event/PlayerEvent.java @@ -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; diff --git a/app/src/main/java/com/fongmi/bear/player/Players.java b/app/src/main/java/com/fongmi/bear/player/Players.java index e70e39ea4..844af8d9d 100644 --- a/app/src/main/java/com/fongmi/bear/player/Players.java +++ b/app/src/main/java/com/fongmi/bear/player/Players.java @@ -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 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)); diff --git a/app/src/main/java/com/fongmi/bear/ui/activity/DetailActivity.java b/app/src/main/java/com/fongmi/bear/ui/activity/DetailActivity.java index 8a435b6f5..3887e1567 100644 --- a/app/src/main/java/com/fongmi/bear/ui/activity/DetailActivity.java +++ b/app/src/main/java/com/fongmi/bear/ui/activity/DetailActivity.java @@ -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); } diff --git a/app/src/main/java/com/fongmi/bear/ui/activity/HomeActivity.java b/app/src/main/java/com/fongmi/bear/ui/activity/HomeActivity.java index e650829ae..f19d582fd 100644 --- a/app/src/main/java/com/fongmi/bear/ui/activity/HomeActivity.java +++ b/app/src/main/java/com/fongmi/bear/ui/activity/HomeActivity.java @@ -132,7 +132,7 @@ public class HomeActivity extends BaseActivity implements VodPresenter.OnClickLi @Override protected void onDestroy() { - super.onDestroy(); Players.get().release(); + super.onDestroy(); } } \ No newline at end of file diff --git a/app/src/main/java/com/fongmi/bear/ui/activity/PlayActivity.java b/app/src/main/java/com/fongmi/bear/ui/activity/PlayActivity.java index 4930a9ea7..576417360 100644 --- a/app/src/main/java/com/fongmi/bear/ui/activity/PlayActivity.java +++ b/app/src/main/java/com/fongmi/bear/ui/activity/PlayActivity.java @@ -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 diff --git a/app/src/main/res/values-zh-rCN/strings.xml b/app/src/main/res/values-zh-rCN/strings.xml index 5f2345451..13401121a 100644 --- a/app/src/main/res/values-zh-rCN/strings.xml +++ b/app/src/main/res/values-zh-rCN/strings.xml @@ -48,6 +48,7 @@ 配置解析失败 已经是最后一集了! 已经是第一集了! + 无法解析网址 预设 diff --git a/app/src/main/res/values-zh-rTW/strings.xml b/app/src/main/res/values-zh-rTW/strings.xml index 37a0e02eb..487b2a898 100644 --- a/app/src/main/res/values-zh-rTW/strings.xml +++ b/app/src/main/res/values-zh-rTW/strings.xml @@ -48,6 +48,7 @@ 配置解析失敗 已經是最後一集了! 已經是第一集了! + 無法解析網址 預設 diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 104f60989..5ffc852f5 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -48,6 +48,7 @@ Configuration parse failed It\'s the last episode! It\'s the first episode! + Unable to parse url Default