pull/123/head
FongMi 4 years ago
parent 0fb8106ebf
commit e8fb13a9eb
  1. 30
      app/src/leanback/java/com/fongmi/android/tv/ui/activity/DetailActivity.java
  2. 4
      app/src/leanback/java/com/fongmi/android/tv/ui/adapter/ChannelAdapter.java
  3. 4
      app/src/leanback/java/com/fongmi/android/tv/ui/adapter/GroupAdapter.java
  4. 6
      app/src/leanback/java/com/fongmi/android/tv/ui/adapter/holder/ChannelHolder.java
  5. 6
      app/src/leanback/java/com/fongmi/android/tv/ui/adapter/holder/GroupHolder.java
  6. 12
      app/src/leanback/java/com/fongmi/android/tv/ui/presenter/ArrayPresenter.java
  7. 2
      app/src/leanback/res/drawable/selector_channel.xml
  8. 2
      app/src/leanback/res/drawable/selector_group.xml
  9. 0
      app/src/leanback/res/drawable/shape_channel.xml
  10. 0
      app/src/leanback/res/drawable/shape_group.xml
  11. 2
      app/src/leanback/res/layout/activity_detail.xml
  12. 4
      app/src/leanback/res/layout/activity_live.xml
  13. 15
      app/src/leanback/res/layout/adapter_array.xml
  14. 2
      app/src/leanback/res/layout/adapter_channel.xml
  15. 2
      app/src/leanback/res/layout/adapter_episode.xml
  16. 40
      app/src/leanback/res/layout/adapter_group.xml
  17. 33
      app/src/leanback/res/layout/adapter_live_group.xml
  18. 2
      app/src/leanback/res/layout/adapter_part.xml

@ -43,7 +43,7 @@ import com.fongmi.android.tv.ui.custom.TrackSelectionDialog;
import com.fongmi.android.tv.ui.custom.dialog.DescDialog;
import com.fongmi.android.tv.ui.presenter.EpisodePresenter;
import com.fongmi.android.tv.ui.presenter.FlagPresenter;
import com.fongmi.android.tv.ui.presenter.GroupPresenter;
import com.fongmi.android.tv.ui.presenter.ArrayPresenter;
import com.fongmi.android.tv.ui.presenter.ParsePresenter;
import com.fongmi.android.tv.ui.presenter.PartPresenter;
import com.fongmi.android.tv.utils.Clock;
@ -66,13 +66,13 @@ import java.util.List;
import okhttp3.Call;
import okhttp3.Response;
public class DetailActivity extends BaseActivity implements CustomKeyDown.Listener, GroupPresenter.OnClickListener, Clock.Callback {
public class DetailActivity extends BaseActivity implements CustomKeyDown.Listener, ArrayPresenter.OnClickListener, Clock.Callback {
private ActivityDetailBinding mBinding;
private ViewControllerBottomBinding mControl;
private ViewGroup.LayoutParams mFrameParams;
private ArrayObjectAdapter mFlagAdapter;
private ArrayObjectAdapter mGroupAdapter;
private ArrayObjectAdapter mArrayAdapter;
private ArrayObjectAdapter mEpisodeAdapter;
private ArrayObjectAdapter mParseAdapter;
private ArrayObjectAdapter mPartAdapter;
@ -170,7 +170,7 @@ public class DetailActivity extends BaseActivity implements CustomKeyDown.Listen
if (mFlagAdapter.size() > 0) setFlagActivated((Vod.Flag) mFlagAdapter.get(position));
}
});
mBinding.group.addOnChildViewHolderSelectedListener(new OnChildViewHolderSelectedListener() {
mBinding.array.addOnChildViewHolderSelectedListener(new OnChildViewHolderSelectedListener() {
@Override
public void onChildViewHolderSelected(@NonNull RecyclerView parent, @Nullable RecyclerView.ViewHolder child, int position, int subposition) {
if (mEpisodeAdapter.size() > 20 && position > 1) mBinding.episode.setSelectedPosition((position - 2) * 20);
@ -185,9 +185,9 @@ public class DetailActivity extends BaseActivity implements CustomKeyDown.Listen
mBinding.episode.setHorizontalSpacing(ResUtil.dp2px(8));
mBinding.episode.setRowHeight(ViewGroup.LayoutParams.WRAP_CONTENT);
mBinding.episode.setAdapter(new ItemBridgeAdapter(mEpisodeAdapter = new ArrayObjectAdapter(mEpisodePresenter = new EpisodePresenter(this::setEpisodeActivated))));
mBinding.group.setHorizontalSpacing(ResUtil.dp2px(8));
mBinding.group.setRowHeight(ViewGroup.LayoutParams.WRAP_CONTENT);
mBinding.group.setAdapter(new ItemBridgeAdapter(mGroupAdapter = new ArrayObjectAdapter(new GroupPresenter(this))));
mBinding.array.setHorizontalSpacing(ResUtil.dp2px(8));
mBinding.array.setRowHeight(ViewGroup.LayoutParams.WRAP_CONTENT);
mBinding.array.setAdapter(new ItemBridgeAdapter(mArrayAdapter = new ArrayObjectAdapter(new ArrayPresenter(this))));
mBinding.part.setHorizontalSpacing(ResUtil.dp2px(8));
mBinding.part.setRowHeight(ViewGroup.LayoutParams.WRAP_CONTENT);
mBinding.part.setAdapter(new ItemBridgeAdapter(mPartAdapter = new ArrayObjectAdapter(mPartPresenter = new PartPresenter(item -> CollectActivity.start(this, item)))));
@ -273,7 +273,7 @@ public class DetailActivity extends BaseActivity implements CustomKeyDown.Listen
if (!flag.isActivated()) continue;
mBinding.flag.setSelectedPosition(i);
mEpisodeAdapter.setItems(flag.getEpisodes(), null);
setGroup(flag.getEpisodes().size());
setArray(flag.getEpisodes().size());
seamless(flag);
}
mFlagAdapter.notifyArrayItemRangeChanged(0, mFlagAdapter.size());
@ -300,7 +300,7 @@ public class DetailActivity extends BaseActivity implements CustomKeyDown.Listen
private void reverseEpisode() {
for (int i = 0; i < mFlagAdapter.size(); i++) Collections.reverse(((Vod.Flag) mFlagAdapter.get(i)).getEpisodes());
mEpisodeAdapter.setItems(getVodFlag().getEpisodes(), null);
setGroup(mEpisodeAdapter.size());
setArray(mEpisodeAdapter.size());
}
private void setParseActivated(Parse item) {
@ -312,16 +312,16 @@ public class DetailActivity extends BaseActivity implements CustomKeyDown.Listen
mParseAdapter.notifyArrayItemRangeChanged(0, mParseAdapter.size());
}
private void setGroup(int size) {
private void setArray(int size) {
List<String> items = new ArrayList<>();
items.add(getString(R.string.play_reverse));
items.add(getString(mHistory.getRevPlayText()));
mEpisodePresenter.setNextFocusDown(size > 1 ? R.id.group : R.id.part);
mPartPresenter.setNextFocusUp(size > 1 ? R.id.group : R.id.episode);
mBinding.group.setVisibility(size > 1 ? View.VISIBLE : View.GONE);
mEpisodePresenter.setNextFocusDown(size > 1 ? R.id.array : R.id.part);
mPartPresenter.setNextFocusUp(size > 1 ? R.id.array : R.id.episode);
mBinding.array.setVisibility(size > 1 ? View.VISIBLE : View.GONE);
if (mHistory.isRevSort()) for (int i = size + 1; i > 0; i -= 20) items.add((i - 1) + "-" + Math.max(i - 20, 1));
else for (int i = 0; i < size; i += 20) items.add((i + 1) + "-" + Math.min(i + 20, size));
mGroupAdapter.setItems(items, null);
mArrayAdapter.setItems(items, null);
}
@Override
@ -468,7 +468,7 @@ public class DetailActivity extends BaseActivity implements CustomKeyDown.Listen
private boolean hasFlag() {
if (mFlagAdapter.size() > 0) return true;
mBinding.flag.setVisibility(View.GONE);
mBinding.group.setVisibility(View.GONE);
mBinding.array.setVisibility(View.GONE);
mBinding.episode.setVisibility(View.GONE);
Notify.show(R.string.error_episode);
return false;

@ -8,7 +8,7 @@ import androidx.recyclerview.widget.RecyclerView;
import com.fongmi.android.tv.bean.Channel;
import com.fongmi.android.tv.bean.Group;
import com.fongmi.android.tv.databinding.AdapterLiveChannelBinding;
import com.fongmi.android.tv.databinding.AdapterChannelBinding;
import com.fongmi.android.tv.ui.adapter.holder.ChannelHolder;
import java.util.ArrayList;
@ -100,7 +100,7 @@ public class ChannelAdapter extends RecyclerView.Adapter<ChannelHolder> {
@NonNull
@Override
public ChannelHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
return new ChannelHolder(this, AdapterLiveChannelBinding.inflate(LayoutInflater.from(parent.getContext()), parent, false));
return new ChannelHolder(this, AdapterChannelBinding.inflate(LayoutInflater.from(parent.getContext()), parent, false));
}
@Override

@ -7,7 +7,7 @@ import androidx.annotation.NonNull;
import androidx.recyclerview.widget.RecyclerView;
import com.fongmi.android.tv.bean.Group;
import com.fongmi.android.tv.databinding.AdapterLiveGroupBinding;
import com.fongmi.android.tv.databinding.AdapterGroupBinding;
import com.fongmi.android.tv.ui.adapter.holder.GroupHolder;
import java.util.ArrayList;
@ -80,7 +80,7 @@ public class GroupAdapter extends RecyclerView.Adapter<GroupHolder> {
@NonNull
@Override
public GroupHolder onCreateViewHolder(@NonNull ViewGroup parent, int viewType) {
return new GroupHolder(this, AdapterLiveGroupBinding.inflate(LayoutInflater.from(parent.getContext()), parent, false));
return new GroupHolder(this, AdapterGroupBinding.inflate(LayoutInflater.from(parent.getContext()), parent, false));
}
@Override

@ -6,15 +6,15 @@ import androidx.annotation.NonNull;
import androidx.recyclerview.widget.RecyclerView;
import com.fongmi.android.tv.bean.Channel;
import com.fongmi.android.tv.databinding.AdapterLiveChannelBinding;
import com.fongmi.android.tv.databinding.AdapterChannelBinding;
import com.fongmi.android.tv.ui.adapter.ChannelAdapter;
public class ChannelHolder extends RecyclerView.ViewHolder implements View.OnClickListener, View.OnLongClickListener {
private final AdapterLiveChannelBinding binding;
private final AdapterChannelBinding binding;
private final ChannelAdapter adapter;
public ChannelHolder(ChannelAdapter adapter, @NonNull AdapterLiveChannelBinding binding) {
public ChannelHolder(ChannelAdapter adapter, @NonNull AdapterChannelBinding binding) {
super(binding.getRoot());
this.binding = binding;
this.adapter = adapter;

@ -5,15 +5,15 @@ import android.view.View;
import androidx.recyclerview.widget.RecyclerView;
import com.fongmi.android.tv.bean.Group;
import com.fongmi.android.tv.databinding.AdapterLiveGroupBinding;
import com.fongmi.android.tv.databinding.AdapterGroupBinding;
import com.fongmi.android.tv.ui.adapter.GroupAdapter;
public class GroupHolder extends RecyclerView.ViewHolder implements View.OnClickListener {
private final AdapterLiveGroupBinding binding;
private final AdapterGroupBinding binding;
private final GroupAdapter adapter;
public GroupHolder(GroupAdapter adapter, AdapterLiveGroupBinding binding) {
public GroupHolder(GroupAdapter adapter, AdapterGroupBinding binding) {
super(binding.getRoot());
this.binding = binding;
this.adapter = adapter;

@ -8,17 +8,17 @@ import androidx.annotation.NonNull;
import androidx.leanback.widget.Presenter;
import com.fongmi.android.tv.R;
import com.fongmi.android.tv.databinding.AdapterGroupBinding;
import com.fongmi.android.tv.databinding.AdapterArrayBinding;
import com.fongmi.android.tv.utils.ResUtil;
public class GroupPresenter extends Presenter {
public class ArrayPresenter extends Presenter {
private final OnClickListener mListener;
private final String backward;
private final String forward;
private final String reverse;
public GroupPresenter(OnClickListener listener) {
public ArrayPresenter(OnClickListener listener) {
this.mListener = listener;
this.backward = ResUtil.getString(R.string.play_backward);
this.forward = ResUtil.getString(R.string.play_forward);
@ -34,7 +34,7 @@ public class GroupPresenter extends Presenter {
@Override
public Presenter.ViewHolder onCreateViewHolder(ViewGroup parent) {
return new ViewHolder(AdapterGroupBinding.inflate(LayoutInflater.from(parent.getContext()), parent, false));
return new ViewHolder(AdapterArrayBinding.inflate(LayoutInflater.from(parent.getContext()), parent, false));
}
@Override
@ -52,9 +52,9 @@ public class GroupPresenter extends Presenter {
public static class ViewHolder extends Presenter.ViewHolder {
private final AdapterGroupBinding binding;
private final AdapterArrayBinding binding;
public ViewHolder(@NonNull AdapterGroupBinding binding) {
public ViewHolder(@NonNull AdapterArrayBinding binding) {
super(binding.getRoot());
this.binding = binding;
}

@ -1,4 +1,4 @@
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:drawable="@drawable/shape_live_group" android:state_selected="true" />
<item android:drawable="@drawable/shape_channel" android:state_selected="true" />
</selector>

@ -1,4 +1,4 @@
<?xml version="1.0" encoding="utf-8"?>
<selector xmlns:android="http://schemas.android.com/apk/res/android">
<item android:drawable="@drawable/shape_live_channel" android:state_selected="true" />
<item android:drawable="@drawable/shape_group" android:state_selected="true" />
</selector>

@ -223,7 +223,7 @@
android:paddingBottom="8dp" />
<com.fongmi.android.tv.ui.custom.CustomHorizontalGridView
android:id="@+id/group"
android:id="@+id/array"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:clipChildren="false"

@ -37,7 +37,7 @@
android:layout_height="match_parent"
app:layoutManager="androidx.recyclerview.widget.LinearLayoutManager"
tools:itemCount="5"
tools:listitem="@layout/adapter_live_group" />
tools:listitem="@layout/adapter_group" />
<View
android:layout_width="0.3dp"
@ -50,7 +50,7 @@
android:layout_height="match_parent"
app:layoutManager="androidx.recyclerview.widget.LinearLayoutManager"
tools:itemCount="5"
tools:listitem="@layout/adapter_live_channel" />
tools:listitem="@layout/adapter_channel" />
</LinearLayout>
</FrameLayout>

@ -0,0 +1,15 @@
<?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/text"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="@drawable/selector_item"
android:focusable="true"
android:focusableInTouchMode="true"
android:gravity="center"
android:nextFocusUp="@id/episode"
android:nextFocusDown="@id/part"
android:textColor="@color/white"
android:textSize="16sp"
tools:text="11" />

@ -3,7 +3,7 @@
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:background="@drawable/selector_live_channel"
android:background="@drawable/selector_channel"
android:focusable="true"
android:gravity="center"
android:orientation="horizontal"

@ -10,7 +10,7 @@
android:focusableInTouchMode="true"
android:gravity="center"
android:nextFocusUp="@id/flag"
android:nextFocusDown="@id/group"
android:nextFocusDown="@id/array"
android:singleLine="true"
android:textColor="@color/white"
android:textSize="16sp"

@ -1,15 +1,33 @@
<?xml version="1.0" encoding="utf-8"?>
<TextView xmlns:android="http://schemas.android.com/apk/res/android"
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:id="@+id/text"
android:layout_width="wrap_content"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="@drawable/selector_item"
android:background="@drawable/selector_group"
android:focusable="true"
android:focusableInTouchMode="true"
android:gravity="center"
android:nextFocusUp="@id/episode"
android:nextFocusDown="@id/part"
android:textColor="@color/white"
android:textSize="16sp"
tools:text="11" />
android:gravity="center_vertical"
android:orientation="horizontal"
android:paddingStart="20dp"
android:paddingTop="12dp"
android:paddingEnd="20dp"
android:paddingBottom="12dp">
<ImageView
android:id="@+id/icon"
android:layout_width="36dp"
android:layout_height="36dp"
android:layout_marginEnd="12dp"
android:scaleType="fitCenter" />
<TextView
android:id="@+id/name"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:letterSpacing="0.05"
android:singleLine="true"
android:textColor="@color/white"
android:textSize="16sp"
android:textStyle="bold"
tools:text="收藏" />
</LinearLayout>

@ -1,33 +0,0 @@
<?xml version="1.0" encoding="utf-8"?>
<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="wrap_content"
android:background="@drawable/selector_live_group"
android:focusable="true"
android:gravity="center_vertical"
android:orientation="horizontal"
android:paddingStart="20dp"
android:paddingTop="12dp"
android:paddingEnd="20dp"
android:paddingBottom="12dp">
<ImageView
android:id="@+id/icon"
android:layout_width="36dp"
android:layout_height="36dp"
android:layout_marginEnd="12dp"
android:scaleType="fitCenter" />
<TextView
android:id="@+id/name"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:letterSpacing="0.05"
android:singleLine="true"
android:textColor="@color/white"
android:textSize="16sp"
android:textStyle="bold"
tools:text="收藏" />
</LinearLayout>

@ -9,7 +9,7 @@
android:focusable="true"
android:focusableInTouchMode="true"
android:gravity="center"
android:nextFocusUp="@id/group"
android:nextFocusUp="@id/array"
android:singleLine="true"
android:textColor="@color/white"
android:textSize="16sp"

Loading…
Cancel
Save