From e4f6a6ca7850f301d58fdadbbd7cc9e2a212af9c Mon Sep 17 00:00:00 2001 From: FongMi Date: Thu, 4 Aug 2022 14:39:54 +0800 Subject: [PATCH] Support history - part 4 --- .../tv/ui/activity/DetailActivity.java | 50 ++++++++++++------- .../com/fongmi/android/tv/player/Players.java | 15 +++++- 2 files changed, 46 insertions(+), 19 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 bf0054f2c..ac99284f0 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 @@ -71,6 +71,10 @@ public class DetailActivity extends BaseActivity implements KeyDown.Listener { return getIntent().getStringExtra("id"); } + private String getHistoryKey() { + return getKey().concat("_").concat(getId()); + } + private Vod.Flag getVodFlag() { return (Vod.Flag) mFlagAdapter.get(mBinding.flag.getSelectedPosition()); } @@ -166,7 +170,8 @@ public class DetailActivity extends BaseActivity implements KeyDown.Listener { if (mFullscreen) Notify.show(ResUtil.getString(R.string.play_ready, item.getName())); mSiteViewModel.playerContent(getKey(), getVodFlag().getFlag(), item.getUrl()); mBinding.progress.getRoot().setVisibility(View.VISIBLE); - addHistory(item); + Players.get().setKey(getHistoryKey()); + updateHistory(item); } private void setViewModel() { @@ -199,17 +204,6 @@ public class DetailActivity extends BaseActivity implements KeyDown.Listener { else view.setText(ResUtil.getString(resId, text)); } - private void checkHistory() { - History history = AppDatabase.get().getHistoryDao().find(getKey() + "_" + getId()); - if (history != null) { - setFlagActivated(history.getFlag()); - setEpisodeActivated(history.getEpisode()); - } else { - setFlagActivated((Vod.Flag) mFlagAdapter.get(0)); - setEpisodeActivated((Vod.Flag.Episode) mEpisodeAdapter.get(0)); - } - } - private void setFlagActivated(Vod.Flag item) { if (mBinding.flag.isComputingLayout()) return; for (int i = 0; i < mFlagAdapter.size(); i++) { @@ -283,21 +277,40 @@ public class DetailActivity extends BaseActivity implements KeyDown.Listener { Prefers.putScale(scale); } - private void addHistory(Vod.Flag.Episode item) { + private void checkHistory() { + History history = AppDatabase.get().getHistoryDao().find(getHistoryKey()); + if (history != null) { + setFlagActivated(history.getFlag()); + setEpisodeActivated(history.getEpisode()); + } else { + createHistory(); + setFlagActivated((Vod.Flag) mFlagAdapter.get(0)); + setEpisodeActivated((Vod.Flag.Episode) mEpisodeAdapter.get(0)); + } + } + + private void createHistory() { History history = new History(); - history.setKey(getKey() + "_" + getId()); + history.setKey(getHistoryKey()); + history.setVodPic(mBinding.video.getTag().toString()); + history.setVodName(mBinding.name.getText().toString()); + AppDatabase.get().getHistoryDao().insertOrUpdate(history); + } + + private void updateHistory(Vod.Flag.Episode item) { + History history = AppDatabase.get().getHistoryDao().find(getHistoryKey()); history.setVodFlag(getVodFlag().getFlag()); history.setEpisodeUrl(item.getUrl()); history.setVodRemarks(item.getName()); history.setCreateTime(System.currentTimeMillis()); - history.setVodPic(mBinding.video.getTag().toString()); - history.setVodName(mBinding.name.getText().toString()); - AppDatabase.get().getHistoryDao().insertOrUpdate(history); + AppDatabase.get().getHistoryDao().update(history); EventBus.getDefault().post(RefreshEvent.history()); } private void updateHistory() { - + History history = AppDatabase.get().getHistoryDao().find(getHistoryKey()); + history.setDuration(Players.get().getCurrentPosition()); + AppDatabase.get().getHistoryDao().update(history); } @Subscribe(threadMode = ThreadMode.MAIN) @@ -361,6 +374,7 @@ public class DetailActivity extends BaseActivity implements KeyDown.Listener { @Override protected void onDestroy() { super.onDestroy(); + updateHistory(); Players.get().stop(); EventBus.getDefault().unregister(this); } diff --git a/app/src/main/java/com/fongmi/android/tv/player/Players.java b/app/src/main/java/com/fongmi/android/tv/player/Players.java index ac3c70db3..85c4b1b4b 100644 --- a/app/src/main/java/com/fongmi/android/tv/player/Players.java +++ b/app/src/main/java/com/fongmi/android/tv/player/Players.java @@ -7,7 +7,9 @@ import androidx.annotation.NonNull; import com.fongmi.android.tv.App; import com.fongmi.android.tv.R; +import com.fongmi.android.tv.bean.History; import com.fongmi.android.tv.bean.Result; +import com.fongmi.android.tv.db.AppDatabase; import com.fongmi.android.tv.event.PlayerEvent; import com.fongmi.android.tv.ui.custom.CustomWebView; import com.fongmi.android.tv.utils.ResUtil; @@ -33,6 +35,7 @@ public class Players implements Player.Listener { private Formatter formatter; private ExoPlayer exoPlayer; private Handler handler; + private String key; private static class Loader { static volatile Players INSTANCE = new Players(); @@ -55,6 +58,14 @@ public class Players implements Player.Listener { return exoPlayer; } + public String getKey() { + return key; + } + + public void setKey(String key) { + this.key = key; + } + public String getSpeed() { return String.format(Locale.getDefault(), "%.2f", exoPlayer.getPlaybackParameters().speed); } @@ -127,7 +138,9 @@ public class Players implements Player.Listener { } private void checkPosition() { - + History history = AppDatabase.get().getHistoryDao().find(getKey()); + if (history == null) return; + seekTo(history.getDuration()); } public void pause() {