mirror of https://github.com/FongMi/TV.git
parent
91f41186cc
commit
4d325410ad
@ -1,76 +0,0 @@ |
||||
package com.fongmi.bear.ui.adapter; |
||||
|
||||
import android.view.LayoutInflater; |
||||
import android.view.View; |
||||
import android.view.ViewGroup; |
||||
|
||||
import androidx.annotation.NonNull; |
||||
import androidx.recyclerview.widget.RecyclerView; |
||||
|
||||
import com.fongmi.bear.R; |
||||
import com.fongmi.bear.bean.Func; |
||||
import com.fongmi.bear.databinding.AdapterFuncBinding; |
||||
|
||||
import java.util.ArrayList; |
||||
import java.util.List; |
||||
|
||||
public class FuncAdapter extends RecyclerView.Adapter<FuncAdapter.ViewHolder> { |
||||
|
||||
private OnItemClickListener mListener; |
||||
private List<Func> mItems; |
||||
|
||||
public FuncAdapter() { |
||||
addAll(); |
||||
} |
||||
|
||||
public interface OnItemClickListener { |
||||
void onItemClick(Func item); |
||||
} |
||||
|
||||
public void setOnItemClickListener(OnItemClickListener listener) { |
||||
this.mListener = listener; |
||||
} |
||||
|
||||
class ViewHolder extends RecyclerView.ViewHolder implements View.OnClickListener { |
||||
|
||||
private final AdapterFuncBinding binding; |
||||
|
||||
public ViewHolder(@NonNull AdapterFuncBinding binding) { |
||||
super(binding.getRoot()); |
||||
this.binding = binding; |
||||
itemView.setOnClickListener(this); |
||||
} |
||||
|
||||
@Override |
||||
public void onClick(View view) { |
||||
mListener.onItemClick(mItems.get(getLayoutPosition())); |
||||
} |
||||
} |
||||
|
||||
public void addAll() { |
||||
mItems = new ArrayList<>(); |
||||
mItems.add(Func.create(R.string.home_vod)); |
||||
mItems.add(Func.create(R.string.home_live)); |
||||
mItems.add(Func.create(R.string.home_search)); |
||||
mItems.add(Func.create(R.string.home_push)); |
||||
mItems.add(Func.create(R.string.home_setting)); |
||||
} |
||||
|
||||
@Override |
||||
public int getItemCount() { |
||||
return mItems.size(); |
||||
} |
||||
|
||||
@NonNull |
||||
@Override |
||||
public FuncAdapter.ViewHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) { |
||||
return new ViewHolder(AdapterFuncBinding.inflate(LayoutInflater.from(parent.getContext()), parent, false)); |
||||
} |
||||
|
||||
@Override |
||||
public void onBindViewHolder(@NonNull FuncAdapter.ViewHolder holder, int position) { |
||||
Func item = mItems.get(position); |
||||
holder.binding.icon.setImageResource(item.getDrawable()); |
||||
holder.binding.text.setText(item.getText()); |
||||
} |
||||
} |
||||
@ -0,0 +1,66 @@ |
||||
package com.fongmi.bear.ui.custom; |
||||
|
||||
import androidx.collection.ArrayMap; |
||||
import androidx.leanback.widget.ListRow; |
||||
import androidx.leanback.widget.Presenter; |
||||
import androidx.leanback.widget.PresenterSelector; |
||||
|
||||
import java.util.ArrayList; |
||||
import java.util.List; |
||||
|
||||
public class CustomSelector extends PresenterSelector { |
||||
|
||||
private final List<Presenter> mPresenters; |
||||
private final ArrayMap<Class<?>, Presenter> mSingleMap; |
||||
private final ArrayMap<Class<?>, ArrayMap<Class<?>, Presenter>> mClassMap; |
||||
|
||||
public CustomSelector() { |
||||
super(); |
||||
mPresenters = new ArrayList<>(); |
||||
mSingleMap = new ArrayMap<>(); |
||||
mClassMap = new ArrayMap<>(); |
||||
} |
||||
|
||||
public void addPresenter(Class<?> cls, Presenter presenter) { |
||||
mSingleMap.put(cls, presenter); |
||||
if (!mPresenters.contains(presenter)) { |
||||
mPresenters.add(presenter); |
||||
} |
||||
} |
||||
|
||||
public void addPresenter(Class<?> cls, Presenter presenter, Class<?> childType) { |
||||
ArrayMap<Class<?>, Presenter> classPresenterArrayMap = mClassMap.get(cls); |
||||
if (classPresenterArrayMap == null) classPresenterArrayMap = new ArrayMap<>(); |
||||
classPresenterArrayMap.put(childType, presenter); |
||||
mClassMap.put(cls, classPresenterArrayMap); |
||||
if (!mPresenters.contains(presenter)) { |
||||
mPresenters.add(presenter); |
||||
} |
||||
} |
||||
|
||||
@Override |
||||
public Presenter getPresenter(Object item) { |
||||
Class<?> cls = item.getClass(); |
||||
Presenter presenter; |
||||
presenter = mSingleMap.get(cls); |
||||
if (presenter != null) return presenter; |
||||
ArrayMap<Class<?>, Presenter> presenters = mClassMap.get(cls); |
||||
assert presenters != null; |
||||
if (presenters.size() == 1) return presenters.valueAt(0); |
||||
if (item instanceof ListRow) { |
||||
ListRow listRow = (ListRow) item; |
||||
Presenter childPresenter = listRow.getAdapter().getPresenter(listRow); |
||||
Class<?> childCls = childPresenter.getClass(); |
||||
do { |
||||
presenter = presenters.get(childCls); |
||||
childCls = childCls.getSuperclass(); |
||||
} while (presenter == null && childCls != null); |
||||
} |
||||
return presenter; |
||||
} |
||||
|
||||
@Override |
||||
public Presenter[] getPresenters() { |
||||
return mPresenters.toArray(new Presenter[]{}); |
||||
} |
||||
} |
||||
@ -0,0 +1,52 @@ |
||||
package com.fongmi.bear.ui.presenter; |
||||
|
||||
import android.view.LayoutInflater; |
||||
import android.view.ViewGroup; |
||||
|
||||
import androidx.annotation.NonNull; |
||||
import androidx.leanback.widget.Presenter; |
||||
|
||||
import com.fongmi.bear.bean.Func; |
||||
import com.fongmi.bear.databinding.AdapterFuncBinding; |
||||
|
||||
public class FuncPresenter extends Presenter { |
||||
|
||||
private OnClickListener mListener; |
||||
|
||||
public interface OnClickListener { |
||||
void onItemClick(Func item); |
||||
} |
||||
|
||||
public void setOnClickListener(OnClickListener listener) { |
||||
this.mListener = listener; |
||||
} |
||||
|
||||
@Override |
||||
public Presenter.ViewHolder onCreateViewHolder(ViewGroup parent) { |
||||
return new ViewHolder(AdapterFuncBinding.inflate(LayoutInflater.from(parent.getContext()), parent, false)); |
||||
} |
||||
|
||||
@Override |
||||
public void onBindViewHolder(Presenter.ViewHolder viewHolder, Object object) { |
||||
Func item = (Func) object; |
||||
ViewHolder holder = (ViewHolder) viewHolder; |
||||
holder.binding.text.setText(item.getText()); |
||||
holder.binding.icon.setImageResource(item.getDrawable()); |
||||
setOnClickListener(holder, view -> mListener.onItemClick(item)); |
||||
} |
||||
|
||||
@Override |
||||
public void onUnbindViewHolder(Presenter.ViewHolder viewHolder) { |
||||
|
||||
} |
||||
|
||||
public static class ViewHolder extends Presenter.ViewHolder { |
||||
|
||||
private final AdapterFuncBinding binding; |
||||
|
||||
public ViewHolder(@NonNull AdapterFuncBinding binding) { |
||||
super(binding.getRoot()); |
||||
this.binding = binding; |
||||
} |
||||
} |
||||
} |
||||
@ -0,0 +1,27 @@ |
||||
package com.fongmi.bear.ui.presenter; |
||||
|
||||
import android.annotation.SuppressLint; |
||||
|
||||
import androidx.leanback.widget.HorizontalGridView; |
||||
import androidx.leanback.widget.ListRowPresenter; |
||||
import androidx.leanback.widget.RowPresenter; |
||||
|
||||
import com.fongmi.bear.utils.ResUtil; |
||||
|
||||
public class FuncRowPresenter extends ListRowPresenter { |
||||
|
||||
public FuncRowPresenter() { |
||||
setShadowEnabled(false); |
||||
setSelectEffectEnabled(false); |
||||
setKeepChildForeground(false); |
||||
} |
||||
|
||||
@Override |
||||
@SuppressLint("RestrictedApi") |
||||
protected void initializeRowViewHolder(RowPresenter.ViewHolder holder) { |
||||
super.initializeRowViewHolder(holder); |
||||
ViewHolder vh = (ViewHolder) holder; |
||||
vh.getGridView().setItemSpacing(ResUtil.dp2px(16)); |
||||
vh.getGridView().setFocusScrollStrategy(HorizontalGridView.FOCUS_SCROLL_ITEM); |
||||
} |
||||
} |
||||
@ -0,0 +1,37 @@ |
||||
package com.fongmi.bear.ui.presenter; |
||||
|
||||
import android.view.LayoutInflater; |
||||
import android.view.ViewGroup; |
||||
|
||||
import androidx.annotation.NonNull; |
||||
import androidx.leanback.widget.Presenter; |
||||
|
||||
import com.fongmi.bear.databinding.AdapterTitleBinding; |
||||
|
||||
public class TitlePresenter extends Presenter { |
||||
|
||||
@Override |
||||
public Presenter.ViewHolder onCreateViewHolder(ViewGroup parent) { |
||||
return new TitlePresenter.ViewHolder(AdapterTitleBinding.inflate(LayoutInflater.from(parent.getContext()), parent, false)); |
||||
} |
||||
|
||||
@Override |
||||
public void onBindViewHolder(Presenter.ViewHolder viewHolder, Object object) { |
||||
TitlePresenter.ViewHolder holder = (TitlePresenter.ViewHolder) viewHolder; |
||||
holder.binding.header.setText(object.toString()); |
||||
} |
||||
|
||||
@Override |
||||
public void onUnbindViewHolder(Presenter.ViewHolder viewHolder) { |
||||
} |
||||
|
||||
public static class ViewHolder extends Presenter.ViewHolder { |
||||
|
||||
private final AdapterTitleBinding binding; |
||||
|
||||
public ViewHolder(@NonNull AdapterTitleBinding binding) { |
||||
super(binding.getRoot()); |
||||
this.binding = binding; |
||||
} |
||||
} |
||||
} |
||||
@ -0,0 +1,55 @@ |
||||
package com.fongmi.bear.ui.presenter; |
||||
|
||||
import android.view.LayoutInflater; |
||||
import android.view.ViewGroup; |
||||
|
||||
import androidx.annotation.NonNull; |
||||
import androidx.leanback.widget.Presenter; |
||||
|
||||
import com.fongmi.bear.bean.Func; |
||||
import com.fongmi.bear.bean.Vod; |
||||
import com.fongmi.bear.databinding.AdapterVodBinding; |
||||
import com.fongmi.bear.utils.Utils; |
||||
|
||||
public class VodPresenter extends Presenter { |
||||
|
||||
private OnClickListener mListener; |
||||
|
||||
public interface OnClickListener { |
||||
void onItemClick(Func item); |
||||
} |
||||
|
||||
public void setOnClickListener(OnClickListener listener) { |
||||
this.mListener = listener; |
||||
} |
||||
|
||||
@Override |
||||
public Presenter.ViewHolder onCreateViewHolder(ViewGroup parent) { |
||||
return new ViewHolder(AdapterVodBinding.inflate(LayoutInflater.from(parent.getContext()), parent, false)); |
||||
} |
||||
|
||||
@Override |
||||
public void onBindViewHolder(Presenter.ViewHolder viewHolder, Object object) { |
||||
Vod item = (Vod) object; |
||||
ViewHolder holder = (ViewHolder) viewHolder; |
||||
holder.binding.name.setText(item.getVodName()); |
||||
holder.binding.remark.setText(item.getVodRemarks()); |
||||
holder.binding.remark.setVisibility(item.getRemarkVisible()); |
||||
Utils.loadImage(item.getVodPic(), holder.binding.image); |
||||
} |
||||
|
||||
@Override |
||||
public void onUnbindViewHolder(Presenter.ViewHolder viewHolder) { |
||||
|
||||
} |
||||
|
||||
public static class ViewHolder extends Presenter.ViewHolder { |
||||
|
||||
private final AdapterVodBinding binding; |
||||
|
||||
public ViewHolder(@NonNull AdapterVodBinding binding) { |
||||
super(binding.getRoot()); |
||||
this.binding = binding; |
||||
} |
||||
} |
||||
} |
||||
@ -0,0 +1,27 @@ |
||||
package com.fongmi.bear.ui.presenter; |
||||
|
||||
import android.annotation.SuppressLint; |
||||
|
||||
import androidx.leanback.widget.HorizontalGridView; |
||||
import androidx.leanback.widget.ListRowPresenter; |
||||
import androidx.leanback.widget.RowPresenter; |
||||
|
||||
import com.fongmi.bear.utils.ResUtil; |
||||
|
||||
public class VodRowPresenter extends ListRowPresenter { |
||||
|
||||
public VodRowPresenter() { |
||||
setShadowEnabled(false); |
||||
setSelectEffectEnabled(false); |
||||
setKeepChildForeground(false); |
||||
} |
||||
|
||||
@Override |
||||
@SuppressLint("RestrictedApi") |
||||
protected void initializeRowViewHolder(RowPresenter.ViewHolder holder) { |
||||
super.initializeRowViewHolder(holder); |
||||
ViewHolder vh = (ViewHolder) holder; |
||||
vh.getGridView().setItemSpacing(ResUtil.dp2px(16)); |
||||
vh.getGridView().setFocusScrollStrategy(HorizontalGridView.FOCUS_SCROLL_ITEM); |
||||
} |
||||
} |
||||
@ -1,66 +1,15 @@ |
||||
<?xml version="1.0" encoding="utf-8"?> |
||||
<androidx.core.widget.NestedScrollView xmlns:android="http://schemas.android.com/apk/res/android" |
||||
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" |
||||
android:layout_width="match_parent" |
||||
android:layout_height="match_parent" |
||||
android:fillViewport="true"> |
||||
android:orientation="vertical"> |
||||
|
||||
<LinearLayout |
||||
<androidx.leanback.widget.VerticalGridView |
||||
android:id="@+id/recycler" |
||||
android:layout_width="match_parent" |
||||
android:layout_height="match_parent" |
||||
android:orientation="vertical" |
||||
android:padding="16dp"> |
||||
android:clipChildren="false" |
||||
android:clipToPadding="false" |
||||
android:padding="24dp" /> |
||||
|
||||
<TextView |
||||
android:layout_width="wrap_content" |
||||
android:layout_height="wrap_content" |
||||
android:text="@string/app_name" |
||||
android:textColor="@color/white" |
||||
android:textSize="24sp" /> |
||||
|
||||
<androidx.leanback.widget.HorizontalGridView |
||||
android:id="@+id/func" |
||||
android:layout_width="match_parent" |
||||
android:layout_height="wrap_content" |
||||
android:layout_marginTop="16dp" |
||||
android:nestedScrollingEnabled="false" |
||||
android:overScrollMode="never" /> |
||||
|
||||
<TextView |
||||
android:layout_width="wrap_content" |
||||
android:layout_height="wrap_content" |
||||
android:layout_marginTop="16dp" |
||||
android:text="@string/home_recent" |
||||
android:textColor="@color/white" |
||||
android:textSize="24sp" /> |
||||
|
||||
<androidx.leanback.widget.VerticalGridView |
||||
android:id="@+id/recent" |
||||
android:layout_width="match_parent" |
||||
android:layout_height="wrap_content" |
||||
android:layout_marginTop="16dp" |
||||
android:nestedScrollingEnabled="false" |
||||
android:visibility="gone" /> |
||||
|
||||
<TextView |
||||
android:layout_width="wrap_content" |
||||
android:layout_height="wrap_content" |
||||
android:layout_marginTop="16dp" |
||||
android:text="@string/home_recommend" |
||||
android:textColor="@color/white" |
||||
android:textSize="24sp" /> |
||||
|
||||
<com.fongmi.bear.ui.custom.ProgressLayout |
||||
android:id="@+id/progress" |
||||
android:layout_width="match_parent" |
||||
android:layout_height="match_parent" |
||||
android:layout_marginTop="16dp"> |
||||
|
||||
<androidx.leanback.widget.VerticalGridView |
||||
android:id="@+id/recommend" |
||||
android:layout_width="match_parent" |
||||
android:layout_height="match_parent" |
||||
android:nestedScrollingEnabled="false" /> |
||||
|
||||
</com.fongmi.bear.ui.custom.ProgressLayout> |
||||
</LinearLayout> |
||||
</androidx.core.widget.NestedScrollView> |
||||
</LinearLayout> |
||||
@ -0,0 +1,9 @@ |
||||
<?xml version="1.0" encoding="utf-8"?> |
||||
<TextView xmlns:android="http://schemas.android.com/apk/res/android" |
||||
xmlns:tools="http://schemas.android.com/tools" |
||||
android:id="@+id/header" |
||||
android:layout_width="wrap_content" |
||||
android:layout_height="wrap_content" |
||||
android:textColor="@color/white" |
||||
android:textSize="24sp" |
||||
tools:text="@string/app_name" /> |
||||
Loading…
Reference in new issue