Support play back - part 1

pull/362/head
FongMi 2 years ago
parent 00c82f9241
commit e050fc370a
  1. 9
      app/src/main/java/com/fongmi/android/tv/bean/EpgData.java
  2. 11
      app/src/main/java/com/fongmi/android/tv/model/LiveViewModel.java
  3. 6
      app/src/mobile/java/com/fongmi/android/tv/ui/activity/LiveActivity.java
  4. 23
      app/src/mobile/java/com/fongmi/android/tv/ui/adapter/EpgDataAdapter.java
  5. 9
      app/src/mobile/java/com/fongmi/android/tv/ui/adapter/GroupAdapter.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;
}

@ -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<Group> iterator = item.getGroups().iterator();
while (iterator.hasNext()) if (iterator.next().isEmpty()) iterator.remove();

@ -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) {

@ -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<EpgDataAdapter.ViewHold
public interface OnClickListener {
void onItemClick(Epg item);
void onItemClick(EpgData item);
}
public void clear() {
@ -36,14 +35,29 @@ public class EpgDataAdapter extends RecyclerView.Adapter<EpgDataAdapter.ViewHold
public void addAll(List<EpgData> 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<EpgDataAdapter.ViewHold
EpgData item = mItems.get(position);
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().setOnClickListener(view -> mListener.onItemClick(item));
}
static class ViewHolder extends RecyclerView.ViewHolder {

@ -58,17 +58,16 @@ public class GroupAdapter extends RecyclerView.Adapter<GroupAdapter.ViewHolder>
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();

Loading…
Cancel
Save