Support play back - part 3

pull/362/head
FongMi 2 years ago
parent 741caeb701
commit fcca13ddb4
  1. 25
      app/src/leanback/java/com/fongmi/android/tv/ui/activity/LiveActivity.java
  2. 2
      app/src/leanback/java/com/fongmi/android/tv/ui/presenter/EpgDataPresenter.java
  3. 11
      app/src/main/java/com/fongmi/android/tv/bean/Epg.java
  4. 4
      app/src/main/java/com/fongmi/android/tv/bean/EpgData.java
  5. 6
      app/src/main/java/com/fongmi/android/tv/model/LiveViewModel.java
  6. 14
      app/src/mobile/java/com/fongmi/android/tv/ui/activity/LiveActivity.java
  7. 22
      app/src/mobile/java/com/fongmi/android/tv/ui/adapter/EpgDataAdapter.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();

@ -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));
}

@ -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;
}
}

@ -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;
}

@ -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();
});
}

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

@ -35,7 +35,6 @@ public class EpgDataAdapter extends RecyclerView.Adapter<EpgDataAdapter.ViewHold
public void addAll(List<EpgData> items) {
mItems.clear();
mItems.addAll(items);
setSelected(current());
notifyDataSetChanged();
}
@ -48,27 +47,6 @@ public class EpgDataAdapter extends RecyclerView.Adapter<EpgDataAdapter.ViewHold
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;
}
public boolean hasNext() {
return getItemCount() > 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();

Loading…
Cancel
Save