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 caa0fd4cb..883d7aba9 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 @@ -338,6 +338,11 @@ public class LiveActivity extends BaseActivity implements GroupPresenter.OnClick fetch(); } + private void setActivated(EpgData item) { + for (int i = 0; i < mEpgDataAdapter.size(); i++) ((EpgData) mEpgDataAdapter.get(i)).setSelected(item); + notifyItemChanged(mBinding.widget.epgData, mEpgDataAdapter); + } + private void checkPlay() { if (mPlayers.isPlaying()) mPlayers.pause(); else mPlayers.play(); @@ -440,7 +445,7 @@ public class LiveActivity extends BaseActivity implements GroupPresenter.OnClick @Override public void showEpg(Channel item) { if (mChannel == null || mChannel.getData().getList().isEmpty() || mEpgDataAdapter.size() == 0 || !mChannel.equals(item)) return; - mBinding.widget.epgData.setSelectedPosition(mChannel.getData().getIndex()); + mBinding.widget.epgData.setSelectedPosition(mChannel.getData().getSelected()); mBinding.widget.epg.setVisibility(View.VISIBLE); mBinding.widget.epg.requestFocus(); hideUI(); @@ -496,6 +501,7 @@ public class LiveActivity extends BaseActivity implements GroupPresenter.OnClick private void showInfo() { mBinding.widget.bottom.setVisibility(View.VISIBLE); setR3Callback(); + hideEpg(); setInfo(); } @@ -580,7 +586,11 @@ public class LiveActivity extends BaseActivity implements GroupPresenter.OnClick @Override public void onItemClick(EpgData item) { - + if (item.isFuture() || !mChannel.hasCatchup()) return; + Notify.show(getString(R.string.play_ready, item.getTitle())); + mViewModel.getUrl(mChannel, item); + setActivated(item); + hideEpg(); } private void addKeep(Channel item) { @@ -617,8 +627,6 @@ public class LiveActivity extends BaseActivity implements GroupPresenter.OnClick mBinding.control.line.setText(mChannel.getLineText()); mBinding.widget.line.setVisibility(mChannel.getLineVisible()); mBinding.control.line.setVisibility(mChannel.getLineVisible()); - hideEpg(); - setEpg(); } private void setEpg() { @@ -729,7 +737,7 @@ public class LiveActivity extends BaseActivity implements GroupPresenter.OnClick mBinding.widget.size.setText(mPlayers.getSizeText()); break; case Player.STATE_ENDED: - nextChannel(); + nextEpg(); break; } } @@ -811,6 +819,13 @@ public class LiveActivity extends BaseActivity implements GroupPresenter.OnClick if (!mGroup.isEmpty()) setChannel(mGroup.current()); } + public void nextEpg() { + int position = mChannel.getData().getSelected() + 1; + boolean limit = position > mEpgDataAdapter.size() - 1; + if (!limit) onItemClick(mChannel.getData().getList().get(position)); + else nextChannel(); + } + private void prevLine() { if (mChannel == null) return; mChannel.prevLine(); diff --git a/app/src/leanback/java/com/fongmi/android/tv/ui/presenter/EpgDataPresenter.java b/app/src/leanback/java/com/fongmi/android/tv/ui/presenter/EpgDataPresenter.java index 186e1a960..c93d8e4f3 100644 --- a/app/src/leanback/java/com/fongmi/android/tv/ui/presenter/EpgDataPresenter.java +++ b/app/src/leanback/java/com/fongmi/android/tv/ui/presenter/EpgDataPresenter.java @@ -35,7 +35,7 @@ public class EpgDataPresenter extends Presenter { ViewHolder holder = (ViewHolder) viewHolder; holder.binding.time.setText(item.getTime()); holder.binding.title.setText(item.getTitle()); - holder.binding.getRoot().setSelected(item.isInRange()); + holder.binding.getRoot().setSelected(item.isSelected()); holder.binding.getRoot().setLeftListener(mListener::showUI); setOnClickListener(holder, view -> mListener.onItemClick(item)); } diff --git a/app/src/main/java/com/fongmi/android/tv/bean/Epg.java b/app/src/main/java/com/fongmi/android/tv/bean/Epg.java index ca1a498dc..e5f1b977e 100644 --- a/app/src/main/java/com/fongmi/android/tv/bean/Epg.java +++ b/app/src/main/java/com/fongmi/android/tv/bean/Epg.java @@ -78,7 +78,16 @@ public class Epg { public String getEpg() { for (EpgData item : getList()) if (item.isSelected()) return item.format(); - for (EpgData item : getList()) if (item.isInRange()) return item.format(); return ""; } + + public Epg selected() { + for (EpgData item : getList()) item.setSelected(item.isInRange()); + return this; + } + + public int getSelected() { + for (int i = 0; i < getList().size(); i++) if (getList().get(i).isSelected()) return i; + return -1; + } } diff --git a/app/src/main/java/com/fongmi/android/tv/bean/EpgData.java b/app/src/main/java/com/fongmi/android/tv/bean/EpgData.java index e41829665..e3b29c602 100644 --- a/app/src/main/java/com/fongmi/android/tv/bean/EpgData.java +++ b/app/src/main/java/com/fongmi/android/tv/bean/EpgData.java @@ -48,6 +48,10 @@ public class EpgData { this.selected = selected; } + public void setSelected(EpgData item) { + this.selected = item.equals(this); + } + public long getStartTime() { return startTime; } diff --git a/app/src/main/java/com/fongmi/android/tv/model/LiveViewModel.java b/app/src/main/java/com/fongmi/android/tv/model/LiveViewModel.java index 73d87a33f..e28dd197e 100644 --- a/app/src/main/java/com/fongmi/android/tv/model/LiveViewModel.java +++ b/app/src/main/java/com/fongmi/android/tv/model/LiveViewModel.java @@ -60,12 +60,10 @@ public class LiveViewModel extends ViewModel { public void getEpg(Channel item) { String date = formatDate.format(new Date()); - if (item.getData().equal(date)) return; String url = item.getEpg().replace("{date}", date); execute(EPG, () -> { - Epg epg = Epg.objectFrom(OkHttp.string(url), item.getName(), formatTime); - item.setData(epg); - return epg; + if (!item.getData().equal(date)) item.setData(Epg.objectFrom(OkHttp.string(url), item.getName(), formatTime)); + return item.getData().selected(); }); } diff --git a/app/src/mobile/java/com/fongmi/android/tv/ui/activity/LiveActivity.java b/app/src/mobile/java/com/fongmi/android/tv/ui/activity/LiveActivity.java index f9230baf7..9183ffccb 100644 --- a/app/src/mobile/java/com/fongmi/android/tv/ui/activity/LiveActivity.java +++ b/app/src/mobile/java/com/fongmi/android/tv/ui/activity/LiveActivity.java @@ -491,7 +491,7 @@ public class LiveActivity extends BaseActivity implements CustomKeyDownLive.List } private void showEpg() { - mBinding.widget.epgData.scrollToPosition(mEpgDataAdapter.getPosition()); + mBinding.widget.epgData.scrollToPosition(mChannel.getData().getSelected()); mBinding.widget.epg.setVisibility(View.VISIBLE); hideUI(); } @@ -548,6 +548,7 @@ public class LiveActivity extends BaseActivity implements CustomKeyDownLive.List mBinding.widget.info.setVisibility(pip ? View.GONE : View.VISIBLE); setR3Callback(); hideControl(); + hideEpg(); setInfo(); } @@ -673,8 +674,6 @@ public class LiveActivity extends BaseActivity implements CustomKeyDownLive.List mBinding.widget.line.setVisibility(mChannel.getLineVisible()); mBinding.control.action.line.setText(mBinding.widget.line.getText()); mBinding.control.action.line.setVisibility(mBinding.widget.line.getVisibility()); - hideEpg(); - setEpg(); } private void setEpg() { @@ -908,11 +907,10 @@ public class LiveActivity extends BaseActivity implements CustomKeyDownLive.List } public void nextEpg() { - if (mEpgDataAdapter.hasNext()) { - onItemClick(mEpgDataAdapter.getNext()); - } else { - nextChannel(); - } + int position = mChannel.getData().getSelected() + 1; + boolean limit = position > mEpgDataAdapter.getItemCount() - 1; + if (!limit) onItemClick(mChannel.getData().getList().get(position)); + else nextChannel(); } private void prevLine() { diff --git a/app/src/mobile/java/com/fongmi/android/tv/ui/adapter/EpgDataAdapter.java b/app/src/mobile/java/com/fongmi/android/tv/ui/adapter/EpgDataAdapter.java index c17f9de29..fef519595 100644 --- a/app/src/mobile/java/com/fongmi/android/tv/ui/adapter/EpgDataAdapter.java +++ b/app/src/mobile/java/com/fongmi/android/tv/ui/adapter/EpgDataAdapter.java @@ -35,7 +35,6 @@ public class EpgDataAdapter extends RecyclerView.Adapter items) { mItems.clear(); mItems.addAll(items); - setSelected(current()); notifyDataSetChanged(); } @@ -48,27 +47,6 @@ public class EpgDataAdapter extends RecyclerView.Adapter 0 || getPosition() + 1 < getItemCount(); - } - - public EpgData getNext() { - int current = getPosition(); - int max = getItemCount() - 1; - current = ++current > max ? max : current; - return mItems.get(current); - } - @Override public int getItemCount() { return mItems.size();