From 705e2ea9b5c8de9fcebad39e4a0624fbd9f94963 Mon Sep 17 00:00:00 2001 From: FongMi Date: Fri, 28 Jul 2023 11:59:07 +0800 Subject: [PATCH] Optimize vod display style --- .../android/tv/ui/fragment/VodFragment.java | 42 +++++++++---------- .../java/com/fongmi/android/tv/bean/Vod.java | 12 ++++++ .../android/tv/ui/fragment/TypeFragment.java | 23 ++++++---- 3 files changed, 48 insertions(+), 29 deletions(-) diff --git a/app/src/leanback/java/com/fongmi/android/tv/ui/fragment/VodFragment.java b/app/src/leanback/java/com/fongmi/android/tv/ui/fragment/VodFragment.java index 41701e320..b7516d4e6 100644 --- a/app/src/leanback/java/com/fongmi/android/tv/ui/fragment/VodFragment.java +++ b/app/src/leanback/java/com/fongmi/android/tv/ui/fragment/VodFragment.java @@ -69,7 +69,7 @@ public class VodFragment extends BaseFragment implements CustomScroller.Callback } private String getTypeId() { - return getArguments().getString("typeId"); + return mPages.isEmpty() ? getArguments().getString("typeId") : getLastPage().getVodId(); } private String getFilter() { @@ -139,19 +139,6 @@ public class VodFragment extends BaseFragment implements CustomScroller.Callback getVideo(getTypeId(), "1"); } - private void checkPosition() { - if (mPage != null && mPage.getPosition() > 0) mBinding.recycler.hideHeader(); - if (mPage != null && mPage.getPosition() < 1) mBinding.recycler.showHeader(); - if (mPage != null) mBinding.recycler.setSelectedPosition(mPage.getPosition()); - else if (isFolder() && !mOpen) mBinding.recycler.moveToTop(); - mPage = null; - } - - private void checkPage(int count) { - if (count == 0 || mAdapter.size() >= 4 || isFolder()) return; - getVideo(getTypeId(), String.valueOf(mScroller.addPage())); - } - private void getVideo(String typeId, String page) { boolean first = page.equals("1"); if (first) mLast = null; @@ -163,11 +150,23 @@ public class VodFragment extends BaseFragment implements CustomScroller.Callback } private void addVideo(List items) { - if (isFolder()) { - mAdapter.addAll(mAdapter.size(), items); - } else { - addGrid(items); - } + if (items.isEmpty()) return; + boolean list = isFolder() || mPages.size() > 0 && items.get(0).isFile(); + if (list) mAdapter.addAll(mAdapter.size(), items); + else addGrid(items); + } + + private void checkPosition() { + if (mPage != null && mPage.getPosition() > 0) mBinding.recycler.hideHeader(); + if (mPage != null && mPage.getPosition() < 1) mBinding.recycler.showHeader(); + if (mPage != null) mBinding.recycler.setSelectedPosition(mPage.getPosition()); + else if (isFolder() && !mOpen) mBinding.recycler.moveToTop(); + mPage = null; + } + + private void checkPage(int count) { + if (count == 0 || mAdapter.size() >= 4 || isFolder()) return; + getVideo(getTypeId(), String.valueOf(mScroller.addPage())); } private boolean checkLastSize(List items) { @@ -226,8 +225,7 @@ public class VodFragment extends BaseFragment implements CustomScroller.Callback } public void onRefresh() { - if (mPages.isEmpty()) getVideo(); - else getVideo(getLastPage().getVodId(), "1"); + getVideo(); } public boolean canGoBack() { @@ -242,7 +240,7 @@ public class VodFragment extends BaseFragment implements CustomScroller.Callback @Override public void onItemClick(Vod item) { - if (item.isFolder()) { + if (item.isFolder() || item.isCover()) { mPages.add(Page.get(item.getVodId(), mBinding.recycler.getSelectedPosition())); mBinding.recycler.setMoveTop(false); getVideo(item.getVodId(), "1"); diff --git a/app/src/main/java/com/fongmi/android/tv/bean/Vod.java b/app/src/main/java/com/fongmi/android/tv/bean/Vod.java index 097cd5895..09a079d4d 100644 --- a/app/src/main/java/com/fongmi/android/tv/bean/Vod.java +++ b/app/src/main/java/com/fongmi/android/tv/bean/Vod.java @@ -193,6 +193,10 @@ public class Vod { return getVodTag().equals("folder"); } + public boolean isCover() { + return getVodTag().equals("cover"); + } + public boolean isFile() { return getVodTag().equals("file"); } @@ -228,6 +232,14 @@ public class Vod { } } + @Override + public boolean equals(Object obj) { + if (this == obj) return true; + if (!(obj instanceof Vod)) return false; + Vod it = (Vod) obj; + return getVodId().equals(it.getVodId()); + } + public static class Flag { @Attribute(name = "flag", required = false) diff --git a/app/src/mobile/java/com/fongmi/android/tv/ui/fragment/TypeFragment.java b/app/src/mobile/java/com/fongmi/android/tv/ui/fragment/TypeFragment.java index 9dc59b0e8..192f42a7c 100644 --- a/app/src/mobile/java/com/fongmi/android/tv/ui/fragment/TypeFragment.java +++ b/app/src/mobile/java/com/fongmi/android/tv/ui/fragment/TypeFragment.java @@ -54,7 +54,7 @@ public class TypeFragment extends BaseFragment implements CustomScroller.Callbac } private String getTypeId() { - return getArguments().getString("typeId"); + return mPages.isEmpty() ? getArguments().getString("typeId") : getLastPage().getVodId(); } private boolean isFolder() { @@ -103,18 +103,19 @@ public class TypeFragment extends BaseFragment implements CustomScroller.Callbac private void setRecyclerView() { mBinding.recycler.setHasFixedSize(true); mBinding.recycler.setAdapter(mAdapter = new VodAdapter(this)); - mBinding.recycler.setLayoutManager(isFolder() ? new LinearLayoutManager(getActivity()) : new GridLayoutManager(getContext(), Product.getColumn())); - mAdapter.setViewType(isFolder() ? ViewType.FOLDER : ViewType.GRID); mAdapter.setSize(Product.getSpec(getActivity())); } + private void setViewType(boolean list) { + + } + private void setViewModel() { mViewModel = new ViewModelProvider(this).get(SiteViewModel.class); mViewModel.result.observe(getViewLifecycleOwner(), this::setAdapter); } private void getVideo() { - mPages.clear(); mScroller.reset(); getVideo(getTypeId(), "1"); } @@ -132,10 +133,19 @@ public class TypeFragment extends BaseFragment implements CustomScroller.Callbac mBinding.swipeLayout.setRefreshing(false); mScroller.endLoading(size == 0); mAdapter.addAll(result.getList()); + addVideo(result.getList()); checkPosition(); checkPage(size); } + private void addVideo(List items) { + if (items.isEmpty()) return; + boolean list = isFolder() || mPages.size() > 0 && items.get(0).isFile(); + mBinding.recycler.setLayoutManager(list ? new LinearLayoutManager(getActivity()) : new GridLayoutManager(getContext(), Product.getColumn())); + mAdapter.setViewType(list ? ViewType.FOLDER : ViewType.GRID); + mAdapter.addAll(items); + } + private void checkPosition() { if (mPage != null) scrollToPosition(mPage.getPosition()); else if (isFolder()) mBinding.recycler.scrollToPosition(0); @@ -172,8 +182,7 @@ public class TypeFragment extends BaseFragment implements CustomScroller.Callbac @Override public void onRefresh() { - if (mPages.isEmpty()) getVideo(); - else getVideo(getLastPage().getVodId(), "1"); + getVideo(); } @Override @@ -185,7 +194,7 @@ public class TypeFragment extends BaseFragment implements CustomScroller.Callbac @Override public void onItemClick(Vod item) { - if (item.isFolder()) { + if (item.isFolder() || item.isCover()) { mPages.add(Page.get(item.getVodId(), findPosition())); getVideo(item.getVodId(), "1"); } else {