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 4cb5badcc..02a9a2bbc 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
@@ -78,6 +78,7 @@ public class LiveActivity extends BaseActivity implements GroupPresenter.OnClick
private Runnable mR0;
private Runnable mR1;
private Runnable mR2;
+ private Runnable mR3;
private int count;
public static void start(Activity activity) {
@@ -111,7 +112,8 @@ public class LiveActivity extends BaseActivity implements GroupPresenter.OnClick
protected void initView() {
mR0 = this::hideUI;
mR1 = this::hideInfo;
- mR2 = this::setChannelActivated;
+ mR2 = this::hideCenter;
+ mR3 = this::setChannelActivated;
mPlayers = new Players().init();
mKeyDown = CustomKeyDownLive.create(this);
mFormatDate = new SimpleDateFormat("yyyy-MM-dd", Locale.getDefault());
@@ -131,6 +133,7 @@ public class LiveActivity extends BaseActivity implements GroupPresenter.OnClick
mControl.scale.setOnClickListener(view -> onScale());
mControl.speed.setOnClickListener(view -> onSpeed());
mControl.tracks.setOnClickListener(view -> onTracks());
+ mControl.line.setOnClickListener(view -> nextLine(false));
mControl.speed.setOnLongClickListener(view -> onSpeedLong());
mBinding.group.addOnChildViewHolderSelectedListener(new OnChildViewHolderSelectedListener() {
@Override
@@ -270,43 +273,23 @@ public class LiveActivity extends BaseActivity implements GroupPresenter.OnClick
}
private void showInfo() {
- mChannel.loadLogo(mBinding.widget.logo);
- mControl.name.setText(mChannel.getName());
- mControl.number.setText(mChannel.getNumber());
- mBinding.widget.name.setText(mChannel.getName());
mBinding.widget.info.setVisibility(View.VISIBLE);
- mBinding.widget.line.setText(mChannel.getLineText());
- mBinding.widget.number.setText(mChannel.getNumber());
- mBinding.widget.logo.setVisibility(mChannel.getVisible());
App.post(mR1, 5000);
- checkEpg();
- }
-
- private void resetPass() {
- this.count = 0;
+ setInfo();
}
- private void checkEpg() {
- if (mChannel.getEpg().isEmpty()) return;
- String date = mFormatDate.format(new Date());
- String epg = mChannel.getEpg().replace("{date}", date);
- if (mChannel.getData().equal(date)) showEpg();
- else getEpg(epg, mChannel);
+ private void showEpg() {
+ mControl.play.setText(mChannel.getData().getEpg());
+ mBinding.widget.play.setText(mChannel.getData().getEpg());
}
- private void getEpg(String epg, Channel channel) {
- OKHttp.newCall(epg).enqueue(new Callback() {
- @Override
- public void onResponse(@NonNull Call call, @NonNull Response response) throws IOException {
- channel.setData(Epg.objectFrom(response.body().string(), mFormatTime));
- if (mChannel.equals(channel)) App.post(() -> showEpg());
- }
- });
+ private void hideCenter() {
+ mBinding.widget.action.setImageResource(R.drawable.ic_play);
+ mBinding.widget.center.setVisibility(View.GONE);
}
- private void showEpg() {
- mControl.play.setText(mChannel.getData().getEpg());
- mBinding.widget.play.setText(mChannel.getData().getEpg());
+ private void resetPass() {
+ this.count = 0;
}
@Override
@@ -353,15 +336,61 @@ public class LiveActivity extends BaseActivity implements GroupPresenter.OnClick
private void setChannel(Channel item) {
LiveConfig.get().setKeep(mGroup, mChannel = item);
- App.post(mR2, 100);
+ App.post(mR3, 100);
showInfo();
}
+ private void setInfo() {
+ mChannel.loadLogo(mBinding.widget.logo);
+ mControl.name.setText(mChannel.getName());
+ mControl.line.setText(mChannel.getLineText());
+ mControl.number.setText(mChannel.getNumber());
+ mBinding.widget.name.setText(mChannel.getName());
+ mBinding.widget.line.setText(mChannel.getLineText());
+ mBinding.widget.number.setText(mChannel.getNumber());
+ mControl.line.setVisibility(mChannel.getLineVisible());
+ mBinding.widget.logo.setVisibility(mChannel.getLogoVisible());
+ mBinding.widget.line.setVisibility(mChannel.getLineVisible());
+ checkEpg();
+ }
+
+ private void checkEpg() {
+ if (mChannel.getEpg().isEmpty()) return;
+ String date = mFormatDate.format(new Date());
+ String epg = mChannel.getEpg().replace("{date}", date);
+ if (mChannel.getData().equal(date)) showEpg();
+ else getEpg(epg, mChannel);
+ }
+
+ private void getEpg(String epg, Channel channel) {
+ OKHttp.newCall(epg).enqueue(new Callback() {
+ @Override
+ public void onResponse(@NonNull Call call, @NonNull Response response) throws IOException {
+ channel.setData(Epg.objectFrom(response.body().string(), mFormatTime));
+ if (mChannel.equals(channel)) App.post(() -> showEpg());
+ }
+ });
+ }
+
private void getUrl() {
mBinding.widget.progress.getRoot().setVisibility(View.VISIBLE);
mViewModel.getUrl(mChannel);
}
+ private void prevLine(boolean show) {
+ mChannel.prevLine();
+ if (show) showInfo();
+ else setInfo();
+ getUrl();
+ }
+
+ private void nextLine(boolean show) {
+ mChannel.nextLine();
+ if (show) showInfo();
+ else setInfo();
+ getUrl();
+ }
+
@Override
public boolean nextGroup(boolean skip) {
int position = mBinding.group.getSelectedPosition() + 1;
@@ -411,6 +440,23 @@ public class LiveActivity extends BaseActivity implements GroupPresenter.OnClick
setPosition(LiveConfig.get().find(number, mGroupAdapter.unmodifiableList()));
}
+ @Override
+ public void onSeeking(int time) {
+ if (!mPlayers.isVod()) return;
+ mBinding.widget.exoDuration.setText(mControl.exoDuration.getText());
+ mBinding.widget.exoPosition.setText(mPlayers.getTime(time));
+ mBinding.widget.action.setImageResource(time > 0 ? R.drawable.ic_forward : R.drawable.ic_rewind);
+ mBinding.widget.center.setVisibility(View.VISIBLE);
+ }
+
+ @Override
+ public void onSeekTo(int time) {
+ if (!mPlayers.isVod()) return;
+ mPlayers.seekTo(time);
+ mKeyDown.resetTime();
+ App.post(mR2, 500);
+ }
+
@Override
public void onKeyUp() {
int position = mGroup.getPosition() - 1;
@@ -430,17 +476,13 @@ public class LiveActivity extends BaseActivity implements GroupPresenter.OnClick
@Override
public void onKeyLeft() {
if (mChannel.getUrls().size() == 1) return;
- mChannel.prevLine();
- showInfo();
- getUrl();
+ prevLine(true);
}
@Override
public void onKeyRight() {
if (mChannel.getUrls().size() == 1) return;
- mChannel.nextLine();
- showInfo();
- getUrl();
+ nextLine(true);
}
@Override
diff --git a/app/src/leanback/java/com/fongmi/android/tv/ui/custom/CustomKeyDownLive.java b/app/src/leanback/java/com/fongmi/android/tv/ui/custom/CustomKeyDownLive.java
index a8d14417e..ad2c918df 100644
--- a/app/src/leanback/java/com/fongmi/android/tv/ui/custom/CustomKeyDownLive.java
+++ b/app/src/leanback/java/com/fongmi/android/tv/ui/custom/CustomKeyDownLive.java
@@ -10,6 +10,7 @@ public class CustomKeyDownLive {
private final Listener listener;
private final StringBuilder text;
private boolean press;
+ private int holdTime;
private final Runnable runnable = new Runnable() {
@Override
@@ -36,14 +37,20 @@ public class CustomKeyDownLive {
}
public boolean onKeyDown(KeyEvent event) {
- if (event.getAction() == KeyEvent.ACTION_DOWN && Utils.isUpKey(event)) {
+ if (event.getAction() == KeyEvent.ACTION_DOWN && Utils.isLeftKey(event)) {
+ listener.onSeeking(subTime());
+ } else if (event.getAction() == KeyEvent.ACTION_DOWN && Utils.isRightKey(event)) {
+ listener.onSeeking(addTime());
+ } else if (event.getAction() == KeyEvent.ACTION_DOWN && Utils.isUpKey(event)) {
listener.onKeyUp();
} else if (event.getAction() == KeyEvent.ACTION_DOWN && Utils.isDownKey(event)) {
listener.onKeyDown();
} else if (event.getAction() == KeyEvent.ACTION_UP && Utils.isLeftKey(event)) {
listener.onKeyLeft();
+ listener.onSeekTo(holdTime);
} else if (event.getAction() == KeyEvent.ACTION_UP && Utils.isRightKey(event)) {
listener.onKeyRight();
+ listener.onSeekTo(holdTime);
} else if (event.getAction() == KeyEvent.ACTION_UP && Utils.isDigitKey(event)) {
onKeyDown(event.getKeyCode());
} else if (Utils.isEnterKey(event)) {
@@ -70,12 +77,28 @@ public class CustomKeyDownLive {
return keyCode >= 144 ? keyCode - 144 : keyCode - 7;
}
+ private int addTime() {
+ return holdTime = holdTime + 10000;
+ }
+
+ private int subTime() {
+ return holdTime = holdTime - 10000;
+ }
+
+ public void resetTime() {
+ holdTime = 0;
+ }
+
public interface Listener {
void onShow(String number);
void onFind(String number);
+ void onSeeking(int time);
+
+ void onSeekTo(int time);
+
void onKeyUp();
void onKeyDown();
diff --git a/app/src/leanback/java/com/fongmi/android/tv/ui/custom/CustomKeyDownVod.java b/app/src/leanback/java/com/fongmi/android/tv/ui/custom/CustomKeyDownVod.java
index bdc7d868a..7a3aa09e1 100644
--- a/app/src/leanback/java/com/fongmi/android/tv/ui/custom/CustomKeyDownVod.java
+++ b/app/src/leanback/java/com/fongmi/android/tv/ui/custom/CustomKeyDownVod.java
@@ -34,6 +34,10 @@ public class CustomKeyDownVod {
return true;
}
+ public boolean hasEvent(KeyEvent event) {
+ return Utils.isEnterKey(event) || Utils.isUpKey(event) || Utils.isDownKey(event) || Utils.isLeftKey(event) || Utils.isRightKey(event);
+ }
+
private int addTime() {
return holdTime = holdTime + 10000;
}
@@ -46,10 +50,6 @@ public class CustomKeyDownVod {
holdTime = 0;
}
- public boolean hasEvent(KeyEvent event) {
- return Utils.isEnterKey(event) || Utils.isUpKey(event) || Utils.isDownKey(event) || Utils.isLeftKey(event) || Utils.isRightKey(event);
- }
-
public interface Listener {
void onSeeking(int time);
diff --git a/app/src/leanback/java/com/fongmi/android/tv/ui/presenter/ChannelPresenter.java b/app/src/leanback/java/com/fongmi/android/tv/ui/presenter/ChannelPresenter.java
index 099b7d283..a054f77c0 100644
--- a/app/src/leanback/java/com/fongmi/android/tv/ui/presenter/ChannelPresenter.java
+++ b/app/src/leanback/java/com/fongmi/android/tv/ui/presenter/ChannelPresenter.java
@@ -36,8 +36,7 @@ public class ChannelPresenter extends Presenter {
item.loadLogo(holder.binding.logo);
holder.binding.name.setText(item.getName());
holder.binding.number.setText(item.getNumber());
- holder.binding.logo.setVisibility(item.getVisible());
- holder.binding.getRoot().setSelected(item.isSelected());
+ holder.binding.logo.setVisibility(item.getLogoVisible());
setOnClickListener(holder, view -> mListener.onItemClick(item));
holder.view.setOnLongClickListener(view -> mListener.onLongClick(item));
}
diff --git a/app/src/leanback/res/layout/view_controller_live.xml b/app/src/leanback/res/layout/view_controller_live.xml
index c787a8aeb..5425858ab 100644
--- a/app/src/leanback/res/layout/view_controller_live.xml
+++ b/app/src/leanback/res/layout/view_controller_live.xml
@@ -36,8 +36,7 @@
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_marginEnd="12dp"
- android:marqueeRepeatLimit="marquee_forever"
- android:scrollHorizontally="true"
+ android:maxEms="30"
android:singleLine="true"
android:textColor="@color/grey_800"
android:textSize="18sp"
@@ -67,6 +66,18 @@
android:textSize="14sp"
tools:text="首頁" />
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
5 * 60 * 1000;
+ }
+
public boolean canNext() {
return getCurrentPosition() >= getDuration();
}