From e050fc370ab8bb84fb56391b852fb13104a0ef30 Mon Sep 17 00:00:00 2001 From: FongMi Date: Sat, 3 Feb 2024 00:59:44 +0800 Subject: [PATCH] Support play back - part 1 --- .../com/fongmi/android/tv/bean/EpgData.java | 9 ++++++++ .../android/tv/model/LiveViewModel.java | 11 +++++++++ .../android/tv/ui/activity/LiveActivity.java | 6 +++-- .../android/tv/ui/adapter/EpgDataAdapter.java | 23 +++++++++++++++---- .../android/tv/ui/adapter/GroupAdapter.java | 9 ++++---- 5 files changed, 47 insertions(+), 11 deletions(-) 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 c34944690..323334ba4 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 @@ -17,6 +17,7 @@ public class EpgData { @SerializedName("end") private String end; + private boolean selected; private long startTime; private long endTime; @@ -36,6 +37,14 @@ public class EpgData { return TextUtils.isEmpty(end) ? "" : end; } + public boolean isSelected() { + return selected; + } + + public void setSelected(boolean selected) { + this.selected = selected; + } + 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 e78c4d1d3..f77260cd3 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 @@ -8,6 +8,7 @@ import com.fongmi.android.tv.api.LiveParser; import com.fongmi.android.tv.api.config.VodConfig; import com.fongmi.android.tv.bean.Channel; import com.fongmi.android.tv.bean.Epg; +import com.fongmi.android.tv.bean.EpgData; import com.fongmi.android.tv.bean.Group; import com.fongmi.android.tv.bean.Live; import com.fongmi.android.tv.exception.ExtractException; @@ -77,6 +78,16 @@ public class LiveViewModel extends ViewModel { }); } + public void getUrl(Channel item, EpgData data) { + execute(URL, () -> { + item.setMsg(null); + Source.get().stop(); + SimpleDateFormat format = new SimpleDateFormat("yyyyMMddHHmmss", Locale.getDefault()); + item.setUrl(item.getCurrent() + "?playseek=" + format.format(new Date(data.getStartTime())) + "-" + format.format(new Date(data.getEndTime()))); + return item; + }); + } + private void verify(Live item) { Iterator iterator = item.getGroups().iterator(); while (iterator.hasNext()) if (iterator.next().isEmpty()) iterator.remove(); 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 92b28a26a..e416deb39 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 @@ -212,6 +212,7 @@ public class LiveActivity extends BaseActivity implements CustomKeyDownLive.List private void setRecyclerView() { mBinding.group.setItemAnimator(null); mBinding.channel.setItemAnimator(null); + mBinding.widget.epgData.setItemAnimator(null); mBinding.group.setAdapter(mGroupAdapter = new GroupAdapter(this)); mBinding.channel.setAdapter(mChannelAdapter = new ChannelAdapter(this)); mBinding.widget.epgData.setAdapter(mEpgDataAdapter = new EpgDataAdapter(this)); @@ -637,8 +638,9 @@ public class LiveActivity extends BaseActivity implements CustomKeyDownLive.List } @Override - public void onItemClick(Epg item) { - + public void onItemClick(EpgData item) { + mEpgDataAdapter.setSelected(item); + mViewModel.getUrl(mChannel, item); } private void addKeep(Channel item) { 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 ba35b3fdd..9e35eb9cc 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 @@ -6,7 +6,6 @@ import android.view.ViewGroup; import androidx.annotation.NonNull; import androidx.recyclerview.widget.RecyclerView; -import com.fongmi.android.tv.bean.Epg; import com.fongmi.android.tv.bean.EpgData; import com.fongmi.android.tv.databinding.AdapterEpgDataBinding; @@ -25,7 +24,7 @@ public class EpgDataAdapter extends RecyclerView.Adapter items) { mItems.clear(); mItems.addAll(items); + setSelected(current()); notifyDataSetChanged(); } - public int getPosition() { + public void setSelected(EpgData item) { + setSelected(mItems.indexOf(item)); + } + + public void setSelected(int position) { + for (int i = 0; i < mItems.size(); i++) mItems.get(i).setSelected(i == position); + notifyItemRangeChanged(0, getItemCount()); + } + + public int current() { for (int i = 0; i < mItems.size(); i++) if (mItems.get(i).isInRange()) return i; return 0; } + public int getPosition() { + for (int i = 0; i < mItems.size(); i++) if (mItems.get(i).isSelected()) return i; + return 0; + } + @Override public int getItemCount() { return mItems.size(); @@ -60,7 +74,8 @@ public class EpgDataAdapter extends RecyclerView.Adapter mListener.onItemClick(item)); } static class ViewHolder extends RecyclerView.ViewHolder { diff --git a/app/src/mobile/java/com/fongmi/android/tv/ui/adapter/GroupAdapter.java b/app/src/mobile/java/com/fongmi/android/tv/ui/adapter/GroupAdapter.java index 2f8e7fadd..4555cc6f2 100644 --- a/app/src/mobile/java/com/fongmi/android/tv/ui/adapter/GroupAdapter.java +++ b/app/src/mobile/java/com/fongmi/android/tv/ui/adapter/GroupAdapter.java @@ -58,17 +58,16 @@ public class GroupAdapter extends RecyclerView.Adapter return mItems.indexOf(group); } + public void setSelected(Group group) { + setSelected(indexOf(group)); + } + public void setSelected(int position) { for (int i = 0; i < mItems.size(); i++) mItems.get(i).setSelected(i == position); notifyItemRangeChanged(0, getItemCount()); mListener.setWidth(mItems.get(position)); } - public void setSelected(Group group) { - int position = mItems.indexOf(group); - setSelected(position); - } - @Override public int getItemCount() { return mItems.size();