From 4021e387b23e2b1c87eee0b16a33dcdf7d92621f Mon Sep 17 00:00:00 2001 From: jhengazuki Date: Sat, 18 Oct 2025 16:53:17 +0800 Subject: [PATCH] Optimize history save --- .../android/tv/ui/activity/VideoActivity.java | 25 +++++++++++-------- .../com/fongmi/android/tv/bean/History.java | 3 ++- .../android/tv/ui/activity/VideoActivity.java | 25 +++++++++++-------- 3 files changed, 32 insertions(+), 21 deletions(-) diff --git a/app/src/leanback/java/com/fongmi/android/tv/ui/activity/VideoActivity.java b/app/src/leanback/java/com/fongmi/android/tv/ui/activity/VideoActivity.java index f6c34b4db..ee8b6dd19 100644 --- a/app/src/leanback/java/com/fongmi/android/tv/ui/activity/VideoActivity.java +++ b/app/src/leanback/java/com/fongmi/android/tv/ui/activity/VideoActivity.java @@ -759,6 +759,7 @@ public class VideoActivity extends BaseActivity implements CustomKeyDownVod.List } private void onReset(boolean replay) { + saveHistory(); mPlayers.stop(); mPlayers.clear(); mClock.setCallback(null); @@ -968,6 +969,17 @@ public class VideoActivity extends BaseActivity implements CustomKeyDownVod.List return history; } + private void saveHistory() { + if (mHistory == null) return; + long position = mPlayers.getPosition(); + long duration = mPlayers.getDuration(); + if (position >= 0 && duration > 0 && !Setting.isIncognito()) { + mHistory.setPosition(position); + mHistory.setDuration(duration); + App.execute(() -> mHistory.merge().save()); + } + } + private void updateHistory(Episode item, boolean replay) { replay = replay || !item.equals(mHistory.getEpisode()); mHistory.setEpisodeUrl(item.getUrl()); @@ -1022,10 +1034,8 @@ public class VideoActivity extends BaseActivity implements CustomKeyDownVod.List @Override public void onTimeChanged() { - long position, duration; - mHistory.setPosition(position = mPlayers.getPosition()); - mHistory.setDuration(duration = mPlayers.getDuration()); - if (position >= 0 && duration > 0 && !Setting.isIncognito()) App.execute(() -> mHistory.save()); + long position = mPlayers.getPosition(); + long duration = mPlayers.getDuration(); if (mHistory.getEnding() > 0 && duration > 0 && mHistory.getEnding() + position >= duration) { checkEnded(false); } @@ -1075,7 +1085,6 @@ public class VideoActivity extends BaseActivity implements CustomKeyDownVod.List break; case PlayerEvent.TRACK: setMetadata(); - mergeHistory(); setTrackVisible(); mClock.setCallback(this); break; @@ -1098,11 +1107,6 @@ public class VideoActivity extends BaseActivity implements CustomKeyDownVod.List } } - private void mergeHistory() { - mHistory.setDuration(mPlayers.getDuration()); - App.execute(() -> mHistory.merge()); - } - private void setTrackVisible() { mBinding.control.text.setVisibility(mPlayers.haveTrack(C.TRACK_TYPE_TEXT) || mPlayers.isVod() ? View.VISIBLE : View.GONE); mBinding.control.audio.setVisibility(mPlayers.haveTrack(C.TRACK_TYPE_AUDIO) ? View.VISIBLE : View.GONE); @@ -1409,6 +1413,7 @@ public class VideoActivity extends BaseActivity implements CustomKeyDownVod.List protected void onPause() { super.onPause(); if (isRedirect()) onPaused(); + saveHistory(); } @Override diff --git a/app/src/main/java/com/fongmi/android/tv/bean/History.java b/app/src/main/java/com/fongmi/android/tv/bean/History.java index 7211fb873..0bd3898a5 100644 --- a/app/src/main/java/com/fongmi/android/tv/bean/History.java +++ b/app/src/main/java/com/fongmi/android/tv/bean/History.java @@ -284,8 +284,9 @@ public class History implements Diffable { return this; } - public void merge() { + public History merge() { merge(false); + return this; } private History merge(boolean force) { diff --git a/app/src/mobile/java/com/fongmi/android/tv/ui/activity/VideoActivity.java b/app/src/mobile/java/com/fongmi/android/tv/ui/activity/VideoActivity.java index ed93831c4..1b3ffe186 100644 --- a/app/src/mobile/java/com/fongmi/android/tv/ui/activity/VideoActivity.java +++ b/app/src/mobile/java/com/fongmi/android/tv/ui/activity/VideoActivity.java @@ -793,6 +793,7 @@ public class VideoActivity extends BaseActivity implements Clock.Callback, Custo } private void onReset(boolean replay) { + saveHistory(); mPlayers.stop(); mPlayers.clear(); mClock.setCallback(null); @@ -1048,6 +1049,17 @@ public class VideoActivity extends BaseActivity implements Clock.Callback, Custo return history; } + private void saveHistory() { + if (mHistory == null) return; + long position = mPlayers.getPosition(); + long duration = mPlayers.getDuration(); + if (position >= 0 && duration > 0 && !Setting.isIncognito()) { + mHistory.setPosition(position); + mHistory.setDuration(duration); + App.execute(() -> mHistory.merge().save()); + } + } + private void updateHistory(Episode item, boolean replay) { replay = replay || !item.equals(mHistory.getEpisode()); mHistory.setEpisodeUrl(item.getUrl()); @@ -1118,10 +1130,8 @@ public class VideoActivity extends BaseActivity implements Clock.Callback, Custo @Override public void onTimeChanged() { - long position, duration; - mHistory.setPosition(position = mPlayers.getPosition()); - mHistory.setDuration(duration = mPlayers.getDuration()); - if (position >= 0 && duration > 0 && !Setting.isIncognito()) App.execute(() -> mHistory.save()); + long position = mPlayers.getPosition(); + long duration = mPlayers.getDuration(); if (mHistory.getEnding() > 0 && duration > 0 && mHistory.getEnding() + position >= duration) { checkEnded(false); } @@ -1184,7 +1194,6 @@ public class VideoActivity extends BaseActivity implements Clock.Callback, Custo break; case PlayerEvent.TRACK: setMetadata(); - mergeHistory(); setTrackVisible(); mClock.setCallback(this); break; @@ -1235,11 +1244,6 @@ public class VideoActivity extends BaseActivity implements Clock.Callback, Custo } } - private void mergeHistory() { - mHistory.setDuration(mPlayers.getDuration()); - App.execute(() -> mHistory.merge()); - } - private void setTrackVisible() { mBinding.control.action.text.setVisibility(mPlayers.haveTrack(C.TRACK_TYPE_TEXT) || mPlayers.isVod() ? View.VISIBLE : View.GONE); mBinding.control.action.audio.setVisibility(mPlayers.haveTrack(C.TRACK_TYPE_AUDIO) ? View.VISIBLE : View.GONE); @@ -1652,6 +1656,7 @@ public class VideoActivity extends BaseActivity implements Clock.Callback, Custo protected void onPause() { super.onPause(); if (isRedirect()) onPaused(); + saveHistory(); } @Override