Add swipe refresh for tv

fongmi
jhengazuki 2 months ago
parent e891c61593
commit 26109ef23e
  1. 6
      app/build.gradle
  2. 4
      app/src/leanback/java/com/fongmi/android/tv/ui/base/BaseFragment.java
  3. 3
      app/src/leanback/java/com/fongmi/android/tv/ui/custom/CustomScroller.java
  4. 23
      app/src/leanback/java/com/fongmi/android/tv/ui/fragment/TypeFragment.java
  5. 34
      app/src/leanback/res/layout/fragment_type.xml
  6. 1
      app/src/mobile/java/com/fongmi/android/tv/ui/activity/VideoActivity.java
  7. 4
      app/src/mobile/java/com/fongmi/android/tv/ui/fragment/TypeFragment.java

@ -95,7 +95,8 @@ dependencies {
implementation 'androidx.core:core-splashscreen:1.0.1'
implementation 'androidx.media:media:1.7.1'
implementation 'androidx.palette:palette:1.0.0'
implementation 'androidx.room:room-runtime:2.8.2'
implementation 'androidx.room:room-runtime:2.8.3'
implementation 'androidx.swiperefreshlayout:swiperefreshlayout:1.1.0'
implementation 'cat.ereza:customactivityoncrash:2.4.0'
implementation 'com.airbnb.android:lottie:6.6.10'
implementation 'com.github.bassaer:materialdesigncolors:1.0.0'
@ -121,10 +122,9 @@ dependencies {
leanbackImplementation 'androidx.leanback:leanback:1.2.0'
leanbackImplementation 'com.github.JessYanCoding:AndroidAutoSize:1.2.1'
mobileImplementation 'androidx.biometric:biometric:1.1.0'
mobileImplementation 'androidx.swiperefreshlayout:swiperefreshlayout:1.1.0'
mobileImplementation 'com.google.android.flexbox:flexbox:3.0.0'
mobileImplementation('com.journeyapps:zxing-android-embedded:4.3.0') { transitive = false }
annotationProcessor 'androidx.room:room-compiler:2.8.2'
annotationProcessor 'androidx.room:room-compiler:2.8.3'
annotationProcessor 'com.github.bumptech.glide:compiler:' + glideVersion
annotationProcessor 'org.greenrobot:eventbus-annotation-processor:3.3.1'
coreLibraryDesugaring 'com.android.tools:desugar_jdk_libs_nio:2.1.5'

@ -23,8 +23,12 @@ public abstract class BaseFragment extends Fragment {
@Override
public void onViewCreated(@NonNull View view, @Nullable Bundle savedInstanceState) {
initView();
initEvent();
}
protected void initView() {
}
protected void initEvent() {
}
}

@ -29,8 +29,7 @@ public class CustomScroller extends RecyclerView.OnScrollListener {
private boolean isBottom(RecyclerView view) {
if (view == null || view.getLayoutManager() == null || view.getLayoutManager().getItemCount() == 0) return false;
View lastChild = view.getLayoutManager().getChildAt(view.getLayoutManager().getChildCount() - 1);
int lastPosition = view.getLayoutManager().getPosition(lastChild);
return lastPosition == view.getLayoutManager().getItemCount() - 1;
return lastChild != null && view.getLayoutManager().getPosition(lastChild) == view.getLayoutManager().getItemCount() - 1;
}
public void reset() {

@ -13,6 +13,7 @@ import androidx.leanback.widget.HorizontalGridView;
import androidx.leanback.widget.ItemBridgeAdapter;
import androidx.leanback.widget.ListRow;
import androidx.lifecycle.ViewModelProvider;
import androidx.swiperefreshlayout.widget.SwipeRefreshLayout;
import androidx.viewbinding.ViewBinding;
import com.fongmi.android.tv.Product;
@ -44,7 +45,7 @@ import java.util.ArrayList;
import java.util.HashMap;
import java.util.List;
public class TypeFragment extends BaseFragment implements CustomScroller.Callback, VodPresenter.OnClickListener {
public class TypeFragment extends BaseFragment implements CustomScroller.Callback, VodPresenter.OnClickListener, SwipeRefreshLayout.OnRefreshListener {
private HashMap<String, String> mExtends;
private FragmentTypeBinding mBinding;
@ -107,6 +108,8 @@ public class TypeFragment extends BaseFragment implements CustomScroller.Callbac
@Override
protected void initView() {
mBinding.swipeLayout.setColorSchemeResources(R.color.accent);
mScroller = new CustomScroller(this);
mExtends = getExtend();
mFilters = getFilter();
setRecyclerView();
@ -115,13 +118,18 @@ public class TypeFragment extends BaseFragment implements CustomScroller.Callbac
getVideo();
}
@Override
protected void initEvent() {
mBinding.swipeLayout.setOnRefreshListener(this);
mBinding.recycler.addOnScrollListener(mScroller);
}
@SuppressLint("RestrictedApi")
private void setRecyclerView() {
CustomSelector selector = new CustomSelector();
selector.addPresenter(Vod.class, new VodPresenter(this, Style.list()));
selector.addPresenter(ListRow.class, new CustomRowPresenter(16), VodPresenter.class);
selector.addPresenter(ListRow.class, new CustomRowPresenter(8, FocusHighlight.ZOOM_FACTOR_NONE, HorizontalGridView.FOCUS_SCROLL_ALIGNED), FilterPresenter.class);
mBinding.recycler.addOnScrollListener(mScroller = new CustomScroller(this));
mBinding.recycler.setAdapter(new ItemBridgeAdapter(mAdapter = new ArrayObjectAdapter(selector)));
mBinding.recycler.setHeader(requireActivity().findViewById(R.id.recycler));
mBinding.recycler.setVerticalSpacing(ResUtil.dp2px(16));
@ -165,6 +173,7 @@ public class TypeFragment extends BaseFragment implements CustomScroller.Callbac
boolean flag = mExtends.isEmpty();
int size = result.getList().size();
mBinding.progressLayout.showContent(first & flag, size);
mBinding.swipeLayout.setRefreshing(false);
if (size > 0) addVideo(result);
mScroller.endLoading(result);
checkMore(size);
@ -210,10 +219,6 @@ public class TypeFragment extends BaseFragment implements CustomScroller.Callbac
return new ListRow(adapter);
}
private void showProgress() {
if (!filterVisible) mBinding.progressLayout.showProgress();
}
private void showFilter() {
List<ListRow> rows = new ArrayList<>();
for (Filter filter : mFilters) rows.add(getRow(filter));
@ -232,9 +237,11 @@ public class TypeFragment extends BaseFragment implements CustomScroller.Callbac
}
private void checkFilter() {
int adapterSize = mAdapter.size();
int filterSize = filterVisible ? mFilters.size() : 0;
if (mAdapter.size() > filterSize) mAdapter.removeItems(filterSize, mAdapter.size() - filterSize);
else showProgress();
if (adapterSize > filterSize) mAdapter.removeItems(filterSize, mAdapter.size() - filterSize);
if (adapterSize == 0) mBinding.progressLayout.showProgress();
else mBinding.swipeLayout.setRefreshing(true);
}
public void onRefresh() {

@ -1,21 +1,27 @@
<?xml version="1.0" encoding="utf-8"?>
<com.fongmi.android.tv.ui.custom.ProgressLayout xmlns:android="http://schemas.android.com/apk/res/android"
<androidx.swiperefreshlayout.widget.SwipeRefreshLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:app="http://schemas.android.com/apk/res-auto"
android:id="@+id/progressLayout"
android:id="@+id/swipeLayout"
android:layout_width="match_parent"
android:layout_height="match_parent">
<com.fongmi.android.tv.ui.custom.CustomVerticalGridView
android:id="@+id/recycler"
<com.fongmi.android.tv.ui.custom.ProgressLayout
android:id="@+id/progressLayout"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:clipChildren="false"
android:clipToPadding="false"
android:paddingStart="24dp"
android:paddingTop="16dp"
android:paddingEnd="24dp"
android:paddingBottom="24dp"
app:focusOutEnd="true"
app:focusOutFront="true" />
android:layout_height="match_parent">
</com.fongmi.android.tv.ui.custom.ProgressLayout>
<com.fongmi.android.tv.ui.custom.CustomVerticalGridView
android:id="@+id/recycler"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:clipChildren="false"
android:clipToPadding="false"
android:paddingStart="24dp"
android:paddingTop="16dp"
android:paddingEnd="24dp"
android:paddingBottom="24dp"
app:focusOutEnd="true"
app:focusOutFront="true" />
</com.fongmi.android.tv.ui.custom.ProgressLayout>
</androidx.swiperefreshlayout.widget.SwipeRefreshLayout>

@ -278,6 +278,7 @@ public class VideoActivity extends BaseActivity implements Clock.Callback, Custo
@Override
protected void initView(Bundle savedInstanceState) {
ViewCompat.setOnApplyWindowInsetsListener(mBinding.getRoot(), (v, insets) -> setStatusBar(insets));
mBinding.swipeLayout.setColorSchemeResources(R.color.accent);
mKeyDown = CustomKeyDown.create(this, mBinding.exo);
mFrameParams = mBinding.video.getLayoutParams();
mBinding.progressLayout.showProgress();

@ -13,6 +13,7 @@ import androidx.swiperefreshlayout.widget.SwipeRefreshLayout;
import androidx.viewbinding.ViewBinding;
import com.fongmi.android.tv.Product;
import com.fongmi.android.tv.R;
import com.fongmi.android.tv.api.config.VodConfig;
import com.fongmi.android.tv.bean.Result;
import com.fongmi.android.tv.bean.Site;
@ -95,6 +96,7 @@ public class TypeFragment extends BaseFragment implements CustomScroller.Callbac
@Override
protected void initView() {
mBinding.swipeLayout.setColorSchemeResources(R.color.accent);
mScroller = new CustomScroller(this);
mExtends = getExtend();
setRecyclerView();
@ -104,7 +106,7 @@ public class TypeFragment extends BaseFragment implements CustomScroller.Callbac
@Override
protected void initEvent() {
mBinding.swipeLayout.setOnRefreshListener(this);
mBinding.recycler.addOnScrollListener(mScroller = new CustomScroller(this));
mBinding.recycler.addOnScrollListener(mScroller);
}
@Override

Loading…
Cancel
Save