diff --git a/app/src/leanback/java/com/fongmi/android/tv/ui/activity/LiveActivity.java b/app/src/leanback/java/com/fongmi/android/tv/ui/activity/LiveActivity.java index 9599c882c..94bfbb8e1 100644 --- a/app/src/leanback/java/com/fongmi/android/tv/ui/activity/LiveActivity.java +++ b/app/src/leanback/java/com/fongmi/android/tv/ui/activity/LiveActivity.java @@ -25,7 +25,7 @@ import com.fongmi.android.tv.model.LiveViewModel; import com.fongmi.android.tv.player.Players; import com.fongmi.android.tv.player.source.Force; import com.fongmi.android.tv.ui.custom.CustomKeyDownLive; -import com.fongmi.android.tv.ui.custom.CustomScrollerLive; +import com.fongmi.android.tv.ui.custom.CustomLiveGridView; import com.fongmi.android.tv.ui.presenter.ChannelPresenter; import com.fongmi.android.tv.ui.presenter.GroupPresenter; import com.fongmi.android.tv.utils.Clock; @@ -37,7 +37,10 @@ import org.greenrobot.eventbus.EventBus; import org.greenrobot.eventbus.Subscribe; import org.greenrobot.eventbus.ThreadMode; -public class LiveActivity extends BaseActivity implements GroupPresenter.OnClickListener, ChannelPresenter.OnClickListener, CustomKeyDownLive.Listener { +import java.util.ArrayList; +import java.util.List; + +public class LiveActivity extends BaseActivity implements GroupPresenter.OnClickListener, ChannelPresenter.OnClickListener, CustomKeyDownLive.Listener, CustomLiveGridView.Callback { private ActivityLiveBinding mBinding; private ArrayObjectAdapter mChannelAdapter; @@ -91,10 +94,10 @@ public class LiveActivity extends BaseActivity implements GroupPresenter.OnClick @Override protected void initEvent() { + mBinding.group.setListener(this); + mBinding.channel.setListener(this); EventBus.getDefault().register(this); getPlayerView().setOnClickListener(view -> toggle()); - mBinding.group.addOnScrollListener(new CustomScrollerLive(this::setUITimer)); - mBinding.channel.addOnScrollListener(new CustomScrollerLive(this::setUITimer)); mBinding.group.addOnChildViewHolderSelectedListener(new OnChildViewHolderSelectedListener() { @Override public void onChildViewHolderSelected(@NonNull RecyclerView parent, @Nullable RecyclerView.ViewHolder child, int position, int subposition) { @@ -122,7 +125,9 @@ public class LiveActivity extends BaseActivity implements GroupPresenter.OnClick } private void getLive() { - mGroupAdapter.setItems(LiveConfig.get().getHome().getGroups(), null); + List items = new ArrayList<>(); + items.addAll(LiveConfig.get().getHome().getGroups()); + mGroupAdapter.setItems(items, null); mBinding.group.setVisibility(mGroupAdapter.size() == 1 ? View.GONE : View.VISIBLE); setPosition(LiveConfig.get().getKeep()); } @@ -146,7 +151,6 @@ public class LiveActivity extends BaseActivity implements GroupPresenter.OnClick mOldView = child.itemView; mOldView.setSelected(true); onItemClick(group); - setUITimer(); } private void setChannelActivated() { @@ -162,7 +166,6 @@ public class LiveActivity extends BaseActivity implements GroupPresenter.OnClick } private void hideUI() { - mHandler.removeCallbacks(mR0); if (isGone(mBinding.recycler)) return; mBinding.recycler.setVisibility(View.GONE); setPosition(); @@ -173,12 +176,6 @@ public class LiveActivity extends BaseActivity implements GroupPresenter.OnClick mBinding.recycler.setVisibility(View.VISIBLE); mBinding.channel.requestFocus(); setPosition(); - setUITimer(); - } - - private void setUITimer() { - mHandler.removeCallbacks(mR0); - mHandler.postDelayed(mR0, 5000); } private void hideInfo() { @@ -242,7 +239,13 @@ public class LiveActivity extends BaseActivity implements GroupPresenter.OnClick @Override public boolean dispatchKeyEvent(KeyEvent event) { if (isGone(mBinding.recycler) && mKeyDown.hasEvent(event)) return mKeyDown.onKeyDown(event); - else return super.dispatchKeyEvent(event); + return super.dispatchKeyEvent(event); + } + + @Override + public void setUITimer() { + mHandler.removeCallbacks(mR0); + mHandler.postDelayed(mR0, 5000); } @Override @@ -363,8 +366,6 @@ public class LiveActivity extends BaseActivity implements GroupPresenter.OnClick super.onDestroy(); mPlayers.release(); Force.get().stop(); - mGroup.setSelected(false); - mChannel.setSelected(false); EventBus.getDefault().unregister(this); } } diff --git a/app/src/leanback/java/com/fongmi/android/tv/ui/custom/CustomLiveGridView.java b/app/src/leanback/java/com/fongmi/android/tv/ui/custom/CustomLiveGridView.java new file mode 100644 index 000000000..6876ff45f --- /dev/null +++ b/app/src/leanback/java/com/fongmi/android/tv/ui/custom/CustomLiveGridView.java @@ -0,0 +1,56 @@ +package com.fongmi.android.tv.ui.custom; + +import android.content.Context; +import android.util.AttributeSet; +import android.view.KeyEvent; +import android.view.View; + +import androidx.annotation.NonNull; +import androidx.annotation.Nullable; +import androidx.leanback.widget.VerticalGridView; + +import com.fongmi.android.tv.utils.Utils; + +public class CustomLiveGridView extends VerticalGridView { + + private Callback listener; + + public CustomLiveGridView(@NonNull Context context) { + super(context); + } + + public CustomLiveGridView(@NonNull Context context, @Nullable AttributeSet attrs) { + super(context, attrs); + } + + public CustomLiveGridView(@NonNull Context context, @Nullable AttributeSet attrs, int defStyle) { + super(context, attrs, defStyle); + } + + public void setListener(Callback listener) { + this.listener = listener; + } + + private void moveTop() { + if (getSelectedPosition() == getAdapter().getItemCount() - 1) setSelectedPosition(0); + listener.setUITimer(); + } + + private void moveBottom() { + if (getSelectedPosition() == 0) setSelectedPosition(getAdapter().getItemCount()); + listener.setUITimer(); + } + + @Override + public boolean dispatchKeyEvent(KeyEvent event) { + if (getVisibility() == View.GONE || event.getAction() != KeyEvent.ACTION_DOWN) return super.dispatchKeyEvent(event); + if (Utils.isUpKey(event)) moveBottom(); + else if (Utils.isDownKey(event)) moveTop(); + return super.dispatchKeyEvent(event); + } + + public interface Callback { + + void setUITimer(); + } +} diff --git a/app/src/leanback/res/layout/activity_live.xml b/app/src/leanback/res/layout/activity_live.xml index c79dd4bf1..80fa09f34 100644 --- a/app/src/leanback/res/layout/activity_live.xml +++ b/app/src/leanback/res/layout/activity_live.xml @@ -59,7 +59,7 @@ android:orientation="horizontal" android:visibility="gone"> - -