|
|
|
|
@ -9,18 +9,21 @@ import androidx.annotation.Nullable; |
|
|
|
|
import androidx.leanback.widget.ArrayObjectAdapter; |
|
|
|
|
import androidx.leanback.widget.ItemBridgeAdapter; |
|
|
|
|
import androidx.leanback.widget.ListRow; |
|
|
|
|
import androidx.lifecycle.ViewModelProvider; |
|
|
|
|
import androidx.viewbinding.ViewBinding; |
|
|
|
|
|
|
|
|
|
import com.fongmi.android.tv.App; |
|
|
|
|
import com.fongmi.android.tv.Product; |
|
|
|
|
import com.fongmi.android.tv.R; |
|
|
|
|
import com.fongmi.android.tv.bean.Result; |
|
|
|
|
import com.fongmi.android.tv.bean.Site; |
|
|
|
|
import com.fongmi.android.tv.bean.Vod; |
|
|
|
|
import com.fongmi.android.tv.databinding.FragmentVodBinding; |
|
|
|
|
import com.fongmi.android.tv.model.SiteViewModel; |
|
|
|
|
import com.fongmi.android.tv.ui.activity.DetailActivity; |
|
|
|
|
import com.fongmi.android.tv.ui.activity.VodActivity; |
|
|
|
|
import com.fongmi.android.tv.ui.base.BaseFragment; |
|
|
|
|
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.VodPresenter; |
|
|
|
|
import com.fongmi.android.tv.utils.ResUtil; |
|
|
|
|
@ -29,22 +32,40 @@ import com.google.common.collect.Lists; |
|
|
|
|
import java.util.ArrayList; |
|
|
|
|
import java.util.List; |
|
|
|
|
|
|
|
|
|
public class CollectFragment extends BaseFragment implements VodPresenter.OnClickListener { |
|
|
|
|
public class CollectFragment extends BaseFragment implements CustomScroller.Callback, VodPresenter.OnClickListener { |
|
|
|
|
|
|
|
|
|
private FragmentVodBinding mBinding; |
|
|
|
|
private ArrayObjectAdapter mAdapter; |
|
|
|
|
private ArrayObjectAdapter mLast; |
|
|
|
|
private String json; |
|
|
|
|
private CustomScroller mScroller; |
|
|
|
|
private SiteViewModel mViewModel; |
|
|
|
|
private List<Vod> mItems; |
|
|
|
|
private String mKeyword; |
|
|
|
|
private Site mSite; |
|
|
|
|
|
|
|
|
|
public static CollectFragment newInstance(String keyword, Site site, List<Vod> items) { |
|
|
|
|
return new CollectFragment().setKeyword(keyword).setSite(site).setItems(items); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
public static CollectFragment newInstance(List<Vod> items) { |
|
|
|
|
return new CollectFragment().setJson(App.gson().toJson(items)); |
|
|
|
|
private CollectFragment setKeyword(String keyword) { |
|
|
|
|
this.mKeyword = keyword; |
|
|
|
|
return this; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
private CollectFragment setJson(String json) { |
|
|
|
|
this.json = json; |
|
|
|
|
private CollectFragment setSite(Site site) { |
|
|
|
|
this.mSite = site; |
|
|
|
|
return this; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
private CollectFragment setItems(List<Vod> items) { |
|
|
|
|
this.mItems = items; |
|
|
|
|
return this; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
private boolean isAll() { |
|
|
|
|
return mSite.getKey().equals("all"); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
@Override |
|
|
|
|
protected ViewBinding getBinding(@NonNull LayoutInflater inflater, @Nullable ViewGroup container) { |
|
|
|
|
return mBinding = FragmentVodBinding.inflate(inflater, container, false); |
|
|
|
|
@ -52,16 +73,32 @@ public class CollectFragment extends BaseFragment implements VodPresenter.OnClic |
|
|
|
|
|
|
|
|
|
@Override |
|
|
|
|
protected void initView() { |
|
|
|
|
mScroller = new CustomScroller(this); |
|
|
|
|
setRecyclerView(); |
|
|
|
|
setViewModel(); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
private void setRecyclerView() { |
|
|
|
|
CustomSelector selector = new CustomSelector(); |
|
|
|
|
if (!isAll()) mBinding.recycler.addOnScrollListener(mScroller); |
|
|
|
|
selector.addPresenter(ListRow.class, new CustomRowPresenter(16), VodPresenter.class); |
|
|
|
|
mBinding.recycler.setAdapter(new ItemBridgeAdapter(mAdapter = new ArrayObjectAdapter(selector))); |
|
|
|
|
mBinding.recycler.setHeader(getActivity().findViewById(R.id.result), getActivity().findViewById(R.id.recycler)); |
|
|
|
|
mBinding.recycler.setVerticalSpacing(ResUtil.dp2px(16)); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
private void setViewModel() { |
|
|
|
|
mViewModel = new ViewModelProvider(this).get(SiteViewModel.class); |
|
|
|
|
mViewModel.search.observe(this, result -> { |
|
|
|
|
int size = result.getList().size(); |
|
|
|
|
mScroller.endLoading(size == 0); |
|
|
|
|
addVideo(result.getList()); |
|
|
|
|
}); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
@Override |
|
|
|
|
protected void initData() { |
|
|
|
|
addVideo(Vod.arrayFrom(json)); |
|
|
|
|
addVideo(mItems); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
private boolean checkLastSize(List<Vod> items) { |
|
|
|
|
@ -97,6 +134,12 @@ public class CollectFragment extends BaseFragment implements VodPresenter.OnClic |
|
|
|
|
return false; |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
@Override |
|
|
|
|
public void onLoadMore(String page) { |
|
|
|
|
mViewModel.searchContent(mSite, mKeyword, page); |
|
|
|
|
mScroller.setLoading(true); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
@Override |
|
|
|
|
public void setUserVisibleHint(boolean isVisibleToUser) { |
|
|
|
|
super.setUserVisibleHint(isVisibleToUser); |
|
|
|
|
|