From cd665362217dffec5985ee198923618d5766da16 Mon Sep 17 00:00:00 2001 From: FongMi Date: Sat, 26 Aug 2023 10:26:53 +0800 Subject: [PATCH] Fix clock bug --- .../tv/ui/activity/DetailActivity.java | 18 +++--- .../android/tv/ui/activity/HomeActivity.java | 16 ++--- .../android/tv/ui/activity/LiveActivity.java | 6 +- .../com/fongmi/android/tv/utils/Clock.java | 58 +++++++++---------- .../tv/ui/activity/DetailActivity.java | 18 +++--- .../android/tv/ui/activity/LiveActivity.java | 14 +++-- 6 files changed, 68 insertions(+), 62 deletions(-) diff --git a/app/src/leanback/java/com/fongmi/android/tv/ui/activity/DetailActivity.java b/app/src/leanback/java/com/fongmi/android/tv/ui/activity/DetailActivity.java index 82b3fc43c..c9b7bb4d2 100644 --- a/app/src/leanback/java/com/fongmi/android/tv/ui/activity/DetailActivity.java +++ b/app/src/leanback/java/com/fongmi/android/tv/ui/activity/DetailActivity.java @@ -123,6 +123,7 @@ public class DetailActivity extends BaseActivity implements CustomKeyDownVod.Lis private Runnable mR1; private Runnable mR2; private Runnable mR3; + private Clock mClock; public static void push(FragmentActivity activity, Uri uri) { if (Sniffer.isPush(uri)) push(activity, uri.toString(), true); @@ -254,6 +255,7 @@ public class DetailActivity extends BaseActivity implements CustomKeyDownVod.Lis protected void initView() { mKeyDown = CustomKeyDownVod.create(this, mBinding.video); mFrameParams = mBinding.video.getLayoutParams(); + mClock = Clock.create(mBinding.widget.time); mPlayers = new Players().init(); mBroken = new ArrayList<>(); mR1 = this::hideControl; @@ -389,7 +391,7 @@ public class DetailActivity extends BaseActivity implements CustomKeyDownVod.Lis getIntent().putExtra("key", item.getSiteKey()); getIntent().putExtra("id", item.getVodId()); mBinding.scroll.scrollTo(0, 0); - Clock.get().setCallback(null); + mClock.setCallback(null); mPlayers.stop(); getDetail(); } @@ -672,7 +674,7 @@ public class DetailActivity extends BaseActivity implements CustomKeyDownVod.Lis } private void onReset(boolean replay) { - Clock.get().setCallback(null); + mClock.setCallback(null); if (mFlagAdapter.size() == 0) return; if (mEpisodeAdapter.size() == 0) return; getPlayer(getFlag(), getEpisode(), replay); @@ -937,7 +939,7 @@ public class DetailActivity extends BaseActivity implements CustomKeyDownVod.Lis mHistory.setDuration(duration = mPlayers.getDuration()); if (position >= 0 && duration > 0 && getSite().isRecordable()) App.execute(() -> mHistory.update()); if (mHistory.getEnding() > 0 && duration > 0 && mHistory.getEnding() + position >= duration) { - Clock.get().setCallback(null); + mClock.setCallback(null); checkNext(); } } @@ -949,7 +951,7 @@ public class DetailActivity extends BaseActivity implements CustomKeyDownVod.Lis setPosition(); setInitTrack(true); setTrackVisible(false); - Clock.get().setCallback(this); + mClock.setCallback(this); break; case Player.STATE_IDLE: break; @@ -1020,8 +1022,8 @@ public class DetailActivity extends BaseActivity implements CustomKeyDownVod.Lis } private void onError(ErrorEvent event) { - Clock.get().setCallback(null); showError(event.getMsg()); + mClock.setCallback(null); mPlayers.stop(); startFlow(); } @@ -1314,7 +1316,7 @@ public class DetailActivity extends BaseActivity implements CustomKeyDownVod.Lis @Override protected void onResume() { super.onResume(); - Clock.start(mBinding.widget.time); + mClock.start(); onPlay(); } @@ -1322,7 +1324,7 @@ public class DetailActivity extends BaseActivity implements CustomKeyDownVod.Lis protected void onPause() { super.onPause(); onPause(false); - Clock.stop(); + mClock.stop(); } @Override @@ -1343,9 +1345,9 @@ public class DetailActivity extends BaseActivity implements CustomKeyDownVod.Lis protected void onDestroy() { super.onDestroy(); stopSearch(); + mClock.release(); mPlayers.release(); Source.get().stop(); - Clock.get().release(); RefreshEvent.history(); App.removeCallbacks(mR1, mR2, mR3); } diff --git a/app/src/leanback/java/com/fongmi/android/tv/ui/activity/HomeActivity.java b/app/src/leanback/java/com/fongmi/android/tv/ui/activity/HomeActivity.java index 2fa0d53a2..c68823f82 100644 --- a/app/src/leanback/java/com/fongmi/android/tv/ui/activity/HomeActivity.java +++ b/app/src/leanback/java/com/fongmi/android/tv/ui/activity/HomeActivity.java @@ -67,7 +67,8 @@ public class HomeActivity extends BaseActivity implements CustomTitleView.Listen private ArrayObjectAdapter mAdapter; private SiteViewModel mViewModel; private boolean confirm; - private Result result; + private Result mResult; + private Clock mClock; @Override protected ViewBinding getBinding() { @@ -82,6 +83,7 @@ public class HomeActivity extends BaseActivity implements CustomTitleView.Listen @Override protected void initView() { + mClock = Clock.create(mBinding.time).format("MM/dd HH:mm:ss"); mBinding.progressLayout.showProgress(); Updater.get().release().start(); Server.get().start(); @@ -130,7 +132,7 @@ public class HomeActivity extends BaseActivity implements CustomTitleView.Listen mViewModel = new ViewModelProvider(this).get(SiteViewModel.class); mViewModel.result.observe(this, result -> { mAdapter.remove("progress"); - addVideo(this.result = result); + addVideo(mResult = result); }); } @@ -161,7 +163,7 @@ public class HomeActivity extends BaseActivity implements CustomTitleView.Listen @Override public void error(String msg) { mBinding.progressLayout.showContent(); - result = Result.empty(); + mResult = Result.empty(); Notify.show(msg); setFocus(); } @@ -183,7 +185,7 @@ public class HomeActivity extends BaseActivity implements CustomTitleView.Listen } private void getVideo() { - this.result = Result.empty(); + mResult = Result.empty(); int index = getRecommendIndex(); String home = ApiConfig.get().getHome().getName(); mBinding.title.setText(home.isEmpty() ? ResUtil.getString(R.string.app_name) : home); @@ -259,7 +261,7 @@ public class HomeActivity extends BaseActivity implements CustomTitleView.Listen public void onItemClick(Func item) { switch (item.getResId()) { case R.string.home_vod: - VodActivity.start(this, result.clear()); + VodActivity.start(this, mResult.clear()); break; case R.string.home_live: LiveActivity.start(this); @@ -392,13 +394,13 @@ public class HomeActivity extends BaseActivity implements CustomTitleView.Listen @Override protected void onResume() { super.onResume(); - Clock.start(mBinding.time, "MM/dd HH:mm:ss"); + mClock.start(); } @Override protected void onPause() { super.onPause(); - Clock.stop(); + mClock.stop(); } @Override diff --git a/app/src/leanback/java/com/fongmi/android/tv/ui/activity/LiveActivity.java b/app/src/leanback/java/com/fongmi/android/tv/ui/activity/LiveActivity.java index 6611d9f1e..72df953c7 100644 --- a/app/src/leanback/java/com/fongmi/android/tv/ui/activity/LiveActivity.java +++ b/app/src/leanback/java/com/fongmi/android/tv/ui/activity/LiveActivity.java @@ -89,6 +89,7 @@ public class LiveActivity extends BaseActivity implements GroupPresenter.OnClick private Runnable mR2; private Runnable mR3; private Runnable mR4; + private Clock mClock; private boolean confirm; private int toggleCount; private int count; @@ -137,6 +138,7 @@ public class LiveActivity extends BaseActivity implements GroupPresenter.OnClick mHides = new ArrayList<>(); mPlayers = new Players().init(); mKeyDown = CustomKeyDownLive.create(this); + mClock = Clock.create(mBinding.widget.time); mFormatDate = new SimpleDateFormat("yyyy-MM-dd", Locale.getDefault()); mFormatTime = new SimpleDateFormat("yyyy-MM-ddHH:mm", Locale.getDefault()); setRecyclerView(); @@ -800,15 +802,15 @@ public class LiveActivity extends BaseActivity implements GroupPresenter.OnClick @Override protected void onResume() { super.onResume(); - Clock.start(mBinding.widget.time); mPlayers.play(); + mClock.start(); } @Override protected void onPause() { super.onPause(); mPlayers.pause(); - Clock.stop(); + mClock.stop(); } @Override diff --git a/app/src/main/java/com/fongmi/android/tv/utils/Clock.java b/app/src/main/java/com/fongmi/android/tv/utils/Clock.java index 359a3eb03..f4f1e4013 100644 --- a/app/src/main/java/com/fongmi/android/tv/utils/Clock.java +++ b/app/src/main/java/com/fongmi/android/tv/utils/Clock.java @@ -12,70 +12,66 @@ import java.util.TimerTask; public class Clock { - private SimpleDateFormat formatter; + private SimpleDateFormat format; private Callback callback; + private final Date date; + private TextView view; private Timer timer; - private Date date; - private static class Loader { - static volatile Clock INSTANCE = new Clock(); + public static Clock create() { + return new Clock(); } - public static Clock get() { - return Loader.INSTANCE; + public static Clock create(TextView view) { + return new Clock().view(view).format("HH:mm:ss"); } - public void init(String format) { - this.formatter = new SimpleDateFormat(format, Locale.getDefault()); + public Clock() { this.date = new Date(); - this.callback = null; } - public static void stop() { - if (get().timer != null) get().timer.cancel(); + public Clock view(TextView view) { + this.view = view; + return this; } - public static void start() { - start(null); - } - - public static void start(TextView view) { - start(view, "HH:mm:ss"); - } - - public static void start(TextView view, String format) { - get().init(format); - get().run(view); + public Clock format(String format) { + this.format = new SimpleDateFormat(format, Locale.getDefault()); + return this; } public void setCallback(Callback callback) { this.callback = callback; } - public void release() { - if (timer != null) timer.cancel(); - if (callback != null) callback = null; - } - - private void run(TextView view) { + public void start() { timer = new Timer(); timer.schedule(new TimerTask() { @Override public void run() { - App.post(() -> doJob(view)); + App.post(() -> doJob()); } }, 0, 1000); } - private void doJob(TextView view) { + private void doJob() { try { date.setTime(System.currentTimeMillis()); if (callback != null) callback.onTimeChanged(); - if (view != null) view.setText(formatter.format(date)); + if (view != null) view.setText(format.format(date)); } catch (Exception ignored) { } } + public void stop() { + if (timer != null) timer.cancel(); + } + + public void release() { + if (timer != null) timer.cancel(); + if (callback != null) callback = null; + } + public interface Callback { void onTimeChanged(); diff --git a/app/src/mobile/java/com/fongmi/android/tv/ui/activity/DetailActivity.java b/app/src/mobile/java/com/fongmi/android/tv/ui/activity/DetailActivity.java index 74caa5cf4..ddb34fbc6 100644 --- a/app/src/mobile/java/com/fongmi/android/tv/ui/activity/DetailActivity.java +++ b/app/src/mobile/java/com/fongmi/android/tv/ui/activity/DetailActivity.java @@ -133,6 +133,7 @@ public class DetailActivity extends BaseActivity implements Clock.Callback, Cust private Runnable mR2; private Runnable mR3; private Runnable mR4; + private Clock mClock; private String url; private PiP mPiP; @@ -259,6 +260,7 @@ public class DetailActivity extends BaseActivity implements Clock.Callback, Cust mPlayers = new Players().init(); mDialogs = new ArrayList<>(); mBroken = new ArrayList<>(); + mClock = Clock.create(); mR1 = this::hideControl; mR2 = this::setTraffic; mR3 = this::setOrient; @@ -389,7 +391,7 @@ public class DetailActivity extends BaseActivity implements Clock.Callback, Cust mBinding.swipeLayout.setRefreshing(true); mBinding.swipeLayout.setEnabled(false); mBinding.scroll.scrollTo(0, 0); - Clock.get().setCallback(null); + mClock.setCallback(null); mPlayers.stop(); getDetail(); } @@ -684,7 +686,7 @@ public class DetailActivity extends BaseActivity implements Clock.Callback, Cust } private void onReset(boolean replay) { - Clock.get().setCallback(null); + mClock.setCallback(null); if (mFlagAdapter.getItemCount() == 0) return; if (mEpisodeAdapter.getItemCount() == 0) return; getPlayer(getFlag(), getEpisode(), replay); @@ -975,7 +977,7 @@ public class DetailActivity extends BaseActivity implements Clock.Callback, Cust mHistory.setDuration(duration = mPlayers.getDuration()); if (position >= 0 && duration > 0) App.execute(() -> mHistory.update()); if (mHistory.getEnding() > 0 && duration > 0 && mHistory.getEnding() + position >= duration) { - Clock.get().setCallback(null); + mClock.setCallback(null); checkNext(); } } @@ -988,7 +990,7 @@ public class DetailActivity extends BaseActivity implements Clock.Callback, Cust setInitTrack(true); setTrackVisible(false); setUrl(event.getUrl()); - Clock.get().setCallback(this); + mClock.setCallback(this); break; case Player.STATE_IDLE: break; @@ -1071,8 +1073,8 @@ public class DetailActivity extends BaseActivity implements Clock.Callback, Cust private void onError(ErrorEvent event) { mBinding.swipeLayout.setEnabled(true); - Clock.get().setCallback(null); showError(event.getMsg()); + mClock.setCallback(null); mPlayers.stop(); startFlow(); } @@ -1420,7 +1422,7 @@ public class DetailActivity extends BaseActivity implements Clock.Callback, Cust PlaybackService.stop(); } else { mPlayers.play(); - Clock.start(); + mClock.start(); } } @@ -1432,7 +1434,7 @@ public class DetailActivity extends BaseActivity implements Clock.Callback, Cust PlaybackService.start(); } else { mPlayers.pause(); - Clock.stop(); + mClock.stop(); } } @@ -1452,9 +1454,9 @@ public class DetailActivity extends BaseActivity implements Clock.Callback, Cust protected void onDestroy() { super.onDestroy(); stopSearch(); + mClock.release(); mPlayers.release(); Source.get().stop(); - Clock.get().release(); RefreshEvent.history(); PlaybackService.stop(); App.removeCallbacks(mR1, mR2, mR3, mR4); diff --git a/app/src/mobile/java/com/fongmi/android/tv/ui/activity/LiveActivity.java b/app/src/mobile/java/com/fongmi/android/tv/ui/activity/LiveActivity.java index 09067e2ac..943ad45d4 100644 --- a/app/src/mobile/java/com/fongmi/android/tv/ui/activity/LiveActivity.java +++ b/app/src/mobile/java/com/fongmi/android/tv/ui/activity/LiveActivity.java @@ -89,12 +89,13 @@ public class LiveActivity extends BaseActivity implements CustomKeyDownLive.List private Runnable mR1; private Runnable mR2; private Runnable mR3; - private int toggleCount; + private Clock mClock; private boolean rotate; private boolean stop; private boolean lock; + private int toggleCount; + private int passCount; private String url; - private int count; private PiP mPiP; public static void start(Activity activity) { @@ -142,6 +143,7 @@ public class LiveActivity extends BaseActivity implements CustomKeyDownLive.List mFormatTime = new SimpleDateFormat("yyyy-MM-ddHH:mm", Locale.getDefault()); mFormatDate = new SimpleDateFormat("yyyy-MM-dd", Locale.getDefault()); mKeyDown = CustomKeyDownLive.create(this, mBinding.video); + mClock = Clock.create(mBinding.widget.time); mReceiver = new PiPReceiver(this); mPlayers = new Players().init(); mHides = new ArrayList<>(); @@ -442,7 +444,7 @@ public class LiveActivity extends BaseActivity implements CustomKeyDownLive.List } private void resetPass() { - this.count = 0; + this.passCount = 0; } @Override @@ -451,7 +453,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() || ++count < 5 || mHides.isEmpty()) return; + if (!item.isKeep() || ++passCount < 5 || mHides.isEmpty()) return; if (Biometric.enable()) Biometric.show(this); else PassDialog.create().show(this); resetPass(); @@ -908,13 +910,13 @@ public class LiveActivity extends BaseActivity implements CustomKeyDownLive.List @Override protected void onResume() { super.onResume(); - Clock.start(mBinding.widget.time); + mClock.start(); } @Override protected void onPause() { super.onPause(); - Clock.stop(); + mClock.stop(); } @Override