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 e3f2008d7..6b47882e4 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 @@ -96,6 +96,7 @@ import java.util.Map; import java.util.Objects; import java.util.UUID; import java.util.regex.Matcher; +import java.util.stream.IntStream; public class VideoActivity extends BaseActivity implements CustomKeyDownVod.Listener, TrackDialog.Listener, ArrayPresenter.OnClickListener, Clock.Callback { @@ -443,9 +444,19 @@ public class VideoActivity extends BaseActivity implements CustomKeyDownVod.List private void setDetail(Vod item) { item.checkPic(getPic()); item.checkName(getName()); - mBinding.name.setText(item.getName()); mBinding.progressLayout.showContent(); - setText(mBinding.remark, 0, item.getRemarks()); + mBinding.name.setText(item.getName()); + mFlagAdapter.setItems(item.getFlags(), null); + mBinding.video.requestFocus(); + App.removeCallbacks(mR4); + checkHistory(item); + checkFlag(item); + checkKeepImg(); + setText(item); + updateKeep(); + } + + private void setText(Vod item) { setText(mBinding.year, R.string.detail_year, item.getYear()); setText(mBinding.area, R.string.detail_area, item.getArea()); setText(mBinding.type, R.string.detail_type, item.getTypeName()); @@ -453,14 +464,8 @@ public class VideoActivity extends BaseActivity implements CustomKeyDownVod.List setText(mBinding.content, R.string.detail_content, item.getContent()); setText(mBinding.director, R.string.detail_director, item.getDirector()); setText(mBinding.actor, R.string.detail_actor, item.getActor()); - mFlagAdapter.setItems(item.getFlags(), null); + setText(mBinding.remark, 0, item.getRemarks()); mBinding.content.setMaxLines(getMaxLines()); - mBinding.video.requestFocus(); - App.removeCallbacks(mR4); - checkHistory(item); - checkFlag(item); - checkKeepImg(); - updateKeep(); } private int getMaxLines() { @@ -1022,18 +1027,20 @@ public class VideoActivity extends BaseActivity implements CustomKeyDownVod.List if (name) mHistory.setVodName(item.getName()); if (name) mBinding.name.setText(item.getName()); if (name) mBinding.widget.title.setText(item.getName()); - setText(mBinding.year, R.string.detail_year, item.getYear()); - setText(mBinding.area, R.string.detail_area, item.getArea()); - setText(mBinding.type, R.string.detail_type, item.getTypeName()); - setText(mBinding.content, R.string.detail_content, item.getContent()); - setText(mBinding.director, R.string.detail_director, item.getDirector()); - setText(mBinding.actor, R.string.detail_actor, item.getActor()); - setText(mBinding.remark, 0, item.getRemarks()); - mBinding.content.setMaxLines(getMaxLines()); - setPartAdapter(); - updateKeep(); - setArtwork(); - setMetadata(); + updateFlag(getFlag(), item.getFlags()); + if (pic || name) setMetadata(); + if (pic || name) updateKeep(); + if (name) setPartAdapter(); + if (pic) setArtwork(); + setText(item); + } + + private void updateFlag(Flag activated, List items) { + items.forEach(item -> IntStream.range(0, mFlagAdapter.size()).mapToObj(i -> (Flag) mFlagAdapter.get(i)) + .filter(item::equals).findFirst().ifPresentOrElse(target -> { + target.mergeEpisodes(item.getEpisodes(), mHistory.isRevSort()); + if (target.equals(activated)) setEpisodeAdapter(target.getEpisodes()); + }, () -> mFlagAdapter.add(item))); } @Override diff --git a/app/src/main/java/com/fongmi/android/tv/bean/Flag.java b/app/src/main/java/com/fongmi/android/tv/bean/Flag.java index 233d91677..abad0f219 100644 --- a/app/src/main/java/com/fongmi/android/tv/bean/Flag.java +++ b/app/src/main/java/com/fongmi/android/tv/bean/Flag.java @@ -126,6 +126,14 @@ public class Flag implements Parcelable, Diffable { } } + public void mergeEpisodes(List items, boolean rev) { + for (Episode item : items) { + if (episodes.contains(item)) continue; + if (rev) episodes.add(0, item); + else episodes.add(item); + } + } + public Flag trans() { if (Trans.pass()) return this; this.show = Trans.s2t(flag); 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 bb1185cbd..c8f037968 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 @@ -475,22 +475,26 @@ public class VideoActivity extends BaseActivity implements Clock.Callback, Custo private void setDetail(Vod item) { item.checkPic(getPic()); item.checkName(getName()); - mBinding.name.setText(item.getName()); mBinding.progressLayout.showContent(); - setText(mBinding.remark, 0, item.getRemarks()); - setText(mBinding.content, 0, item.getContent()); - setText(mBinding.site, R.string.detail_site, getSite().getName()); - setText(mBinding.director, R.string.detail_director, item.getDirector()); - setText(mBinding.actor, R.string.detail_actor, item.getActor()); + mBinding.name.setText(item.getName()); mFlagAdapter.addAll(item.getFlags()); - setOther(mBinding.other, item); App.removeCallbacks(mR4); checkHistory(item); checkFlag(item); checkKeepImg(); + setText(item); updateKeep(); } + private void setText(Vod item) { + setText(mBinding.site, R.string.detail_site, getSite().getName()); + setText(mBinding.director, R.string.detail_director, item.getDirector()); + setText(mBinding.actor, R.string.detail_actor, item.getActor()); + setText(mBinding.content, 0, item.getContent()); + setText(mBinding.remark, 0, item.getRemarks()); + setOther(mBinding.other, item); + } + private void setText(TextView view, int resId, String text) { if (TextUtils.isEmpty(text) && !TextUtils.isEmpty(view.getText())) return; view.setText(getSpan(resId, text), TextView.BufferType.SPANNABLE); @@ -1124,14 +1128,19 @@ public class VideoActivity extends BaseActivity implements Clock.Callback, Custo if (name) mHistory.setVodName(item.getName()); if (name) mBinding.name.setText(item.getName()); if (name) mBinding.control.title.setText(item.getName()); - setText(mBinding.director, R.string.detail_director, item.getDirector()); - setText(mBinding.actor, R.string.detail_actor, item.getActor()); - setText(mBinding.content, 0, item.getContent()); - setText(mBinding.remark, 0, item.getRemarks()); - setOther(mBinding.other, item); - updateKeep(); - setArtwork(); - setMetadata(); + updateFlag(getFlag(), item.getFlags()); + if (pic || name) setMetadata(); + if (pic || name) updateKeep(); + if (pic) setArtwork(); + setText(item); + } + + private void updateFlag(Flag activated, List items) { + items.forEach(item -> mFlagAdapter.getItems().stream() + .filter(item::equals).findFirst().ifPresentOrElse(target -> { + target.mergeEpisodes(item.getEpisodes(), mHistory.isRevSort()); + if (target.equals(activated)) setEpisodeAdapter(target.getEpisodes()); + }, () -> mFlagAdapter.add(item))); } @Override diff --git a/app/src/mobile/java/com/fongmi/android/tv/ui/adapter/FlagAdapter.java b/app/src/mobile/java/com/fongmi/android/tv/ui/adapter/FlagAdapter.java index a33e7b834..bcf045c05 100644 --- a/app/src/mobile/java/com/fongmi/android/tv/ui/adapter/FlagAdapter.java +++ b/app/src/mobile/java/com/fongmi/android/tv/ui/adapter/FlagAdapter.java @@ -35,6 +35,11 @@ public class FlagAdapter extends RecyclerView.Adapter { notifyDataSetChanged(); } + public void add(Flag item) { + mItems.add(item); + notifyItemInserted(mItems.size() - 1); + } + public int getPosition() { for (int i = 0; i < mItems.size(); i++) if (mItems.get(i).isActivated()) return i; return 0; @@ -44,6 +49,10 @@ public class FlagAdapter extends RecyclerView.Adapter { return mItems.get(position); } + public List getItems() { + return mItems; + } + public Flag getActivated() { return mItems.get(getPosition()); }