From 78db9c53fdaef3206d7daf593d2a9526f33c74d3 Mon Sep 17 00:00:00 2001 From: FongMi Date: Sat, 13 Aug 2022 16:27:02 +0800 Subject: [PATCH] Fix vod not loading more --- .../android/tv/ui/fragment/VodFragment.java | 13 +- .../android/tv/ui/custom/CustomScroller.java | 8 ++ .../android/tv/ui/custom/ProgressLayout.java | 122 +++++++----------- 3 files changed, 64 insertions(+), 79 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 98bf12529..42ca5be8f 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 @@ -24,6 +24,7 @@ import com.fongmi.android.tv.ui.custom.CustomRowPresenter; import com.fongmi.android.tv.ui.custom.CustomScroller; import com.fongmi.android.tv.ui.custom.CustomSelector; import com.fongmi.android.tv.ui.presenter.FilterPresenter; +import com.fongmi.android.tv.ui.presenter.ProgressPresenter; import com.fongmi.android.tv.ui.presenter.VodPresenter; import com.fongmi.android.tv.utils.ResUtil; import com.google.common.collect.Lists; @@ -78,6 +79,7 @@ public class VodFragment extends Fragment implements CustomScroller.Callback, Vo private void setRecyclerView() { CustomSelector selector = new CustomSelector(); + selector.addPresenter(String.class, new ProgressPresenter()); selector.addPresenter(ListRow.class, new CustomRowPresenter(16), VodPresenter.class); selector.addPresenter(ListRow.class, new CustomRowPresenter(8), FilterPresenter.class); mBinding.recycler.addOnScrollListener(mScroller = new CustomScroller(this)); @@ -90,7 +92,9 @@ public class VodFragment extends Fragment implements CustomScroller.Callback, Vo mSiteViewModel = new ViewModelProvider(this).get(SiteViewModel.class); mSiteViewModel.result.observe(getViewLifecycleOwner(), result -> { mScroller.endLoading(result.getList().isEmpty()); - if (result.getList().size() > 0) addVideo(result); + mAdapter.remove("progress"); + addVideo(result); + checkSize(); }); } @@ -107,10 +111,17 @@ public class VodFragment extends Fragment implements CustomScroller.Callback, Vo getVideo("1"); } + private void checkSize() { + if (mScroller.getPage() != 1 || mAdapter.size() >= 4) return; + mScroller.addPage(); + getVideo("2"); + } + private void getVideo(String page) { boolean clear = page.equals("1") && mAdapter.size() > mFilters.size(); if (clear) mAdapter.removeItems(mFilters.size(), mAdapter.size() - mFilters.size()); mSiteViewModel.categoryContent(getTypeId(), page, true, mExtend); + if (!page.equals("1")) mAdapter.add("progress"); } private void addVideo(Result result) { diff --git a/app/src/main/java/com/fongmi/android/tv/ui/custom/CustomScroller.java b/app/src/main/java/com/fongmi/android/tv/ui/custom/CustomScroller.java index 764eb2745..b56c22d55 100644 --- a/app/src/main/java/com/fongmi/android/tv/ui/custom/CustomScroller.java +++ b/app/src/main/java/com/fongmi/android/tv/ui/custom/CustomScroller.java @@ -24,6 +24,14 @@ public class CustomScroller extends RecyclerView.OnScrollListener { page = 1; } + public void addPage() { + page++; + } + + public int getPage() { + return page; + } + public boolean isLoading() { return loading; } diff --git a/app/src/main/java/com/fongmi/android/tv/ui/custom/ProgressLayout.java b/app/src/main/java/com/fongmi/android/tv/ui/custom/ProgressLayout.java index d291e39fd..3682530fd 100644 --- a/app/src/main/java/com/fongmi/android/tv/ui/custom/ProgressLayout.java +++ b/app/src/main/java/com/fongmi/android/tv/ui/custom/ProgressLayout.java @@ -11,23 +11,20 @@ import com.fongmi.android.tv.databinding.ViewEmptyBinding; import com.fongmi.android.tv.databinding.ViewProgressBinding; import java.util.ArrayList; -import java.util.Collections; import java.util.List; public class ProgressLayout extends RelativeLayout { private static final String TAG_PROGRESS = "ProgressLayout.TAG_PROGRESS"; - private static final String TAG_ERROR = "ProgressLayout.TAG_ERROR"; public enum State { - CONTENT, PROGRESS, ERROR + CONTENT, PROGRESS, EMPTY } - private View mErrorView; + private List mContentViews; private View mProgressView; - private List mContentViews = new ArrayList<>(); - - private ProgressLayout.State mState = ProgressLayout.State.CONTENT; + private View mEmptyView; + private State mState; public ProgressLayout(Context context) { super(context); @@ -44,111 +41,80 @@ public class ProgressLayout extends RelativeLayout { } private void init() { + mState = State.CONTENT; + mContentViews = new ArrayList<>(); + initView(); + } + + private void initView() { + mEmptyView = ViewEmptyBinding.inflate(LayoutInflater.from(getContext())).getRoot(); + mEmptyView.setTag(TAG_PROGRESS); + mEmptyView.setVisibility(GONE); mProgressView = ViewProgressBinding.inflate(LayoutInflater.from(getContext())).getRoot(); - LayoutParams layoutParams = new LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT); - layoutParams.addRule(CENTER_IN_PARENT); mProgressView.setTag(TAG_PROGRESS); - addView(mProgressView, layoutParams); - mErrorView = ViewEmptyBinding.inflate(LayoutInflater.from(getContext())).getRoot(); - mErrorView.setTag(TAG_ERROR); - addView(mErrorView, layoutParams); mProgressView.setVisibility(GONE); + LayoutParams params = new LayoutParams(ViewGroup.LayoutParams.WRAP_CONTENT, ViewGroup.LayoutParams.WRAP_CONTENT); + params.addRule(CENTER_IN_PARENT); + addView(mProgressView, params); + addView(mEmptyView, params); } @Override public void addView(View child, int index, ViewGroup.LayoutParams params) { super.addView(child, index, params); - if (child.getTag() == null || (!child.getTag().equals(TAG_PROGRESS) && !child.getTag().equals(TAG_ERROR))) { + if (child.getTag() == null || !child.getTag().equals(TAG_PROGRESS)) { mContentViews.add(child); } } public void showProgress() { - switchState(ProgressLayout.State.PROGRESS, null, Collections.emptyList()); - } - - public void showProgress(List skipIds) { - switchState(ProgressLayout.State.PROGRESS, null, skipIds); + switchState(State.PROGRESS); } public void showEmpty() { - switchState(ProgressLayout.State.ERROR, null, Collections.emptyList()); - } - - public void showEmpty(List skipIds) { - switchState(ProgressLayout.State.ERROR, null, skipIds); - } - - public void showEmpty(String error) { - switchState(ProgressLayout.State.ERROR, error, Collections.emptyList()); - } - - public void showEmpty(String error, List skipIds) { - switchState(ProgressLayout.State.ERROR, error, skipIds); + switchState(State.EMPTY); } public void showContent() { - switchState(ProgressLayout.State.CONTENT, null, Collections.emptyList()); - } - - public void showContent(List skipIds) { - switchState(ProgressLayout.State.CONTENT, null, skipIds); + switchState(State.CONTENT); } - public void switchState(ProgressLayout.State state) { - switchState(state, null, Collections.emptyList()); - } - - public void switchState(ProgressLayout.State state, String errorText) { - switchState(state, errorText, Collections.emptyList()); - } - - public void switchState(ProgressLayout.State state, List skipIds) { - switchState(state, null, skipIds); - } - - public void switchState(ProgressLayout.State state, String errorText, List skipIds) { + public void switchState(State state) { + if (mState == state) return; mState = state; switch (state) { case CONTENT: - mErrorView.setVisibility(View.GONE); - mProgressView.setVisibility(View.GONE); - setContentVisibility(true, skipIds); + mEmptyView.setVisibility(GONE); + mProgressView.setVisibility(GONE); + setContentVisibility(true); break; case PROGRESS: - mErrorView.setVisibility(View.GONE); - mProgressView.setVisibility(View.VISIBLE); - setContentVisibility(false, skipIds); + mEmptyView.setVisibility(GONE); + mProgressView.setVisibility(VISIBLE); + setContentVisibility(false); break; - case ERROR: - mErrorView.setVisibility(View.VISIBLE); - mProgressView.setVisibility(View.GONE); - setContentVisibility(false, skipIds); + case EMPTY: + mEmptyView.setVisibility(VISIBLE); + mProgressView.setVisibility(GONE); + setContentVisibility(false); break; } } - public ProgressLayout.State getState() { - return mState; - } - - public boolean isProgress() { - return mState == ProgressLayout.State.PROGRESS; - } - - public boolean isContent() { - return mState == ProgressLayout.State.CONTENT; + private void setContentVisibility(boolean visible) { + for (View view : mContentViews) { + if (visible) showView(view); + else hideView(view); + } } - public boolean isError() { - return mState == ProgressLayout.State.ERROR; + private void showView(View view) { + view.setAlpha(0f); + view.setVisibility(VISIBLE); + view.animate().alpha(1f).setStartDelay(250).setDuration(250).setListener(null); } - private void setContentVisibility(boolean visible, List skipIds) { - for (View v : mContentViews) { - if (!skipIds.contains(v.getId())) { - v.setVisibility(visible ? View.VISIBLE : View.GONE); - } - } + private void hideView(View view) { + view.setVisibility(INVISIBLE); } }