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 6b0eb741e..15f23fab4 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 @@ -250,8 +250,8 @@ public class DetailActivity extends BaseActivity implements CustomKeyDown.Listen setText(mBinding.director, R.string.detail_director, Html.fromHtml(item.getVodDirector()).toString()); mFlagAdapter.setItems(item.getVodFlags(), null); mBinding.video.requestFocus(); + if (hasFlag()) checkHistory(); getPart(item.getVodName()); - checkHistory(); checkKeep(); } @@ -417,7 +417,10 @@ public class DetailActivity extends BaseActivity implements CustomKeyDown.Listen } private void onOpening() { - mHistory.setOpening(mPlayers.getCurrentPosition()); + long current = mPlayers.getCurrentPosition(); + long duration = mPlayers.getDuration(); + if (current > duration / 2) return; + mHistory.setOpening(current); mControl.opening.setText(mPlayers.getStringForTime(mHistory.getOpening())); } @@ -428,7 +431,10 @@ public class DetailActivity extends BaseActivity implements CustomKeyDown.Listen } private void onEnding() { - mHistory.setEnding(mPlayers.getCurrentPosition()); + long current = mPlayers.getCurrentPosition(); + long duration = mPlayers.getDuration(); + if (current < duration / 2) return; + mHistory.setEnding(duration - current); mControl.ending.setText(mPlayers.getStringForTime(mHistory.getEnding())); } @@ -455,26 +461,22 @@ public class DetailActivity extends BaseActivity implements CustomKeyDown.Listen }); } + private boolean hasFlag() { + if (mFlagAdapter.size() > 0) return true; + mBinding.flag.setVisibility(View.GONE); + mBinding.group.setVisibility(View.GONE); + mBinding.episode.setVisibility(View.GONE); + Notify.show(R.string.error_episode); + return false; + } + private void checkHistory() { mHistory = History.find(getHistoryKey()); - if (mFlagAdapter.size() == 0) { - mBinding.flag.setVisibility(View.GONE); - mBinding.group.setVisibility(View.GONE); - mBinding.episode.setVisibility(View.GONE); - Notify.show(R.string.error_episode); - return; - } - if (mHistory != null) { - setFlagActivated(mHistory.getFlag()); - if (mHistory.isRevSort()) reverseEpisode(); - mControl.opening.setText(mPlayers.getStringForTime(mHistory.getOpening())); - mControl.ending.setText(mPlayers.getStringForTime(mHistory.getEnding())); - } else { - mHistory = createHistory(); - setFlagActivated(mHistory.getFlag()); - mControl.opening.setText(mPlayers.getStringForTime(0)); - mControl.ending.setText(mPlayers.getStringForTime(0)); - } + mHistory = mHistory == null ? createHistory() : mHistory; + mControl.opening.setText(mPlayers.getStringForTime(mHistory.getOpening())); + mControl.ending.setText(mPlayers.getStringForTime(mHistory.getEnding())); + if (mHistory.isRevSort()) reverseEpisode(); + setFlagActivated(mHistory.getFlag()); } private History createHistory() { @@ -529,9 +531,10 @@ public class DetailActivity extends BaseActivity implements CustomKeyDown.Listen @Override public void onTimeChanged() { + long duration = mPlayers.getDuration(); long current = mPlayers.getCurrentPosition(); if (mHistory.getOpening() >= current) mPlayers.seekTo(mHistory.getOpening()); - if (mHistory.getEnding() > 0 && mHistory.getEnding() <= current) { + if (mHistory.getEnding() > 0 && duration > 0 && mHistory.getEnding() + current >= duration) { Clock.get().setCallback(null); checkNext(); } 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 10000e2c4..47dfbfb57 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 @@ -183,11 +183,15 @@ public class History { AppDatabase.get().getHistoryDao().delete(cid); } + private void checkOpEd(History item) { + if (getOpening() == 0) setOpening(item.getOpening()); + if (getEnding() == 0) setEnding(item.getEnding()); + } + private void checkMerge(List items) { for (History item : items) { if (getKey().equals(item.getKey()) || Math.abs(item.getDuration() - getDuration()) > 10 * 60 * 1000) continue; - if (getOpening() == 0) setOpening(item.getOpening()); - if (getEnding() == 0) setEnding(item.getEnding()); + checkOpEd(item); item.delete(); } } @@ -218,6 +222,7 @@ public class History { setVodFlag(flag.getFlag()); setPosition(item.getPosition()); setVodRemarks(episode.getName()); + checkOpEd(item); break; } } diff --git a/app/src/main/java/com/fongmi/android/tv/db/AppDatabase.java b/app/src/main/java/com/fongmi/android/tv/db/AppDatabase.java index ee8f66cca..724f539ac 100644 --- a/app/src/main/java/com/fongmi/android/tv/db/AppDatabase.java +++ b/app/src/main/java/com/fongmi/android/tv/db/AppDatabase.java @@ -22,7 +22,7 @@ import com.fongmi.android.tv.db.dao.SiteDao; @Database(entities = {Config.class, Site.class, History.class, Keep.class}, version = AppDatabase.VERSION, exportSchema = false) public abstract class AppDatabase extends RoomDatabase { - public static final int VERSION = 10; + public static final int VERSION = 11; public static final String SYMBOL = "@@@"; private static volatile AppDatabase instance; @@ -33,7 +33,7 @@ public abstract class AppDatabase extends RoomDatabase { } private static AppDatabase create(Context context) { - return Room.databaseBuilder(context, AppDatabase.class, "tv").addMigrations(MIGRATION_8_9).addMigrations(MIGRATION_9_10).allowMainThreadQueries().fallbackToDestructiveMigration().build(); + return Room.databaseBuilder(context, AppDatabase.class, "tv").addMigrations(MIGRATION_9_11).allowMainThreadQueries().fallbackToDestructiveMigration().build(); } public abstract KeepDao getKeepDao(); @@ -44,17 +44,9 @@ public abstract class AppDatabase extends RoomDatabase { public abstract HistoryDao getHistoryDao(); - static final Migration MIGRATION_8_9 = new Migration(8, 9) { + static final Migration MIGRATION_9_11 = new Migration(9, 11) { @Override public void migrate(@NonNull SupportSQLiteDatabase database) { - database.execSQL("CREATE TABLE IF NOT EXISTS `Keep` (`key` TEXT NOT NULL, `siteName` TEXT, `vodName` TEXT, `vodPic` TEXT, `createTime` INTEGER NOT NULL, `cid` INTEGER NOT NULL, PRIMARY KEY(`key`))"); - } - }; - - static final Migration MIGRATION_9_10 = new Migration(9, 10) { - @Override - public void migrate(@NonNull SupportSQLiteDatabase database) { - database.execSQL("UPDATE `History` SET ending = 0;"); } }; }