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 1067847b4..eb233af3e 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
@@ -68,12 +68,13 @@ import org.greenrobot.eventbus.Subscribe;
import org.greenrobot.eventbus.ThreadMode;
import java.util.ArrayList;
+import java.util.Arrays;
import java.util.Iterator;
import java.util.List;
import tv.danmaku.ijk.media.player.ui.IjkVideoView;
-public class LiveActivity extends BaseActivity implements GroupPresenter.OnClickListener, ChannelPresenter.OnClickListener, CustomKeyDownLive.Listener, CustomLiveListView.Callback, TrackDialog.Listener, Biometric.Callback, PassCallback, LiveCallback, SubtitleCallback {
+public class LiveActivity extends BaseActivity implements Clock.Callback, GroupPresenter.OnClickListener, ChannelPresenter.OnClickListener, CustomKeyDownLive.Listener, CustomLiveListView.Callback, TrackDialog.Listener, Biometric.Callback, PassCallback, LiveCallback, SubtitleCallback {
private ActivityLiveBinding mBinding;
private ArrayObjectAdapter mChannelAdapter;
@@ -139,7 +140,7 @@ public class LiveActivity extends BaseActivity implements GroupPresenter.OnClick
@Override
protected void initView() {
- mClock = Clock.create(mBinding.widget.time);
+ mClock = Clock.create(Arrays.asList(mBinding.widget.time, mBinding.display.time));
mKeyDown = CustomKeyDownLive.create(this);
mPlayers = new Players().init(this);
mHides = new ArrayList<>();
@@ -151,6 +152,7 @@ public class LiveActivity extends BaseActivity implements GroupPresenter.OnClick
Server.get().start();
setRecyclerView();
setVideoView();
+ setDisplayView();
setViewModel();
checkLive();
}
@@ -217,6 +219,11 @@ public class LiveActivity extends BaseActivity implements GroupPresenter.OnClick
mBinding.control.home.setVisibility(LiveConfig.isOnly() ? View.GONE : View.VISIBLE);
}
+ private void setDisplayView() {
+ mBinding.display.getRoot().setVisibility(View.VISIBLE);
+ showDisplayInfo();
+ }
+
private void setScale(int scale) {
getExo().setResizeMode(scale);
getIjk().setResizeMode(scale);
@@ -449,6 +456,21 @@ public class LiveActivity extends BaseActivity implements GroupPresenter.OnClick
App.removeCallbacks(mR1);
}
+ private void showDisplayInfo() {
+ boolean controlVisible = isVisible(mBinding.control.getRoot());
+ boolean visible = !controlVisible;
+ mBinding.display.time.setVisibility(Setting.isDisplayTime() && visible ? View.VISIBLE : View.GONE);
+ mBinding.display.netspeed.setVisibility(Setting.isDisplaySpeed() && visible ? View.VISIBLE : View.GONE);
+ mBinding.display.duration.setVisibility(View.GONE);
+ }
+
+ private void onTimeChangeDisplaySpeed() {
+ boolean controlVisible = isVisible(mBinding.control.getRoot());
+ boolean visible = !controlVisible;
+ if (Setting.isDisplaySpeed() && visible) Traffic.setSpeed(mBinding.display.netspeed);
+ showDisplayInfo();
+ }
+
private void hideCenter() {
mBinding.widget.action.setImageResource(R.drawable.ic_widget_play);
mBinding.widget.center.setVisibility(View.GONE);
@@ -608,6 +630,11 @@ public class LiveActivity extends BaseActivity implements GroupPresenter.OnClick
public void onTrackClick(Track item) {
}
+ @Override
+ public void onTimeChanged() {
+ onTimeChangeDisplaySpeed();
+ }
+
@Override
public void setLive(Live item) {
LiveConfig.get().setHome(item);
@@ -660,6 +687,7 @@ public class LiveActivity extends BaseActivity implements GroupPresenter.OnClick
switch (event.getState()) {
case 0:
setTrackVisible(false);
+ mClock.setCallback(this);
break;
case Player.STATE_IDLE:
break;
diff --git a/app/src/leanback/java/com/fongmi/android/tv/ui/activity/SettingCustomActivity.java b/app/src/leanback/java/com/fongmi/android/tv/ui/activity/SettingCustomActivity.java
index ab5370dc7..b9e5bef44 100644
--- a/app/src/leanback/java/com/fongmi/android/tv/ui/activity/SettingCustomActivity.java
+++ b/app/src/leanback/java/com/fongmi/android/tv/ui/activity/SettingCustomActivity.java
@@ -41,6 +41,7 @@ public class SettingCustomActivity extends BaseActivity {
mBinding.episodeText.setText((episode = ResUtil.getStringArray(R.array.select_episode))[Setting.getEpisode()]);
mBinding.displayTimeText.setText(getSwitch(Setting.isDisplayTime()));
mBinding.displayNetspeedText.setText(getSwitch(Setting.isDisplaySpeed()));
+ mBinding.displayDurationText.setText(getSwitch(Setting.isDisplayDuration()));
}
@Override
@@ -50,6 +51,7 @@ public class SettingCustomActivity extends BaseActivity {
mBinding.episode.setOnClickListener(this::setEpisode);
mBinding.displayTime.setOnClickListener(this::setDisplayTime);
mBinding.displayNetspeed.setOnClickListener(this::setDisplaySpeed);
+ mBinding.displayDuration.setOnClickListener(this::setDisplayDuration);
}
private void setQuality(View view) {
@@ -82,4 +84,9 @@ public class SettingCustomActivity extends BaseActivity {
mBinding.displayNetspeedText.setText(getSwitch(Setting.isDisplaySpeed()));
}
+ private void setDisplayDuration(View view) {
+ Setting.putDisplayDuration(!Setting.isDisplayDuration());
+ mBinding.displayDurationText.setText(getSwitch(Setting.isDisplayDuration()));
+ }
+
}
diff --git a/app/src/leanback/java/com/fongmi/android/tv/ui/activity/VideoActivity.java b/app/src/leanback/java/com/fongmi/android/tv/ui/activity/VideoActivity.java
index 3544d3fa9..444bcca33 100644
--- a/app/src/leanback/java/com/fongmi/android/tv/ui/activity/VideoActivity.java
+++ b/app/src/leanback/java/com/fongmi/android/tv/ui/activity/VideoActivity.java
@@ -748,11 +748,15 @@ public class VideoActivity extends BaseActivity implements CustomKeyDownVod.List
private void showDisplayInfo() {
mBinding.display.time.setVisibility(Setting.isDisplayTime() || isVisible(mBinding.widget.info) ? View.VISIBLE : View.GONE);
mBinding.display.netspeed.setVisibility(Setting.isDisplaySpeed() && !isVisible(mBinding.control.getRoot()) ? View.VISIBLE : View.GONE);
+ mBinding.display.duration.setVisibility(Setting.isDisplayDuration() && !isVisible(mBinding.control.getRoot()) ? View.VISIBLE : View.GONE);
}
private void onTimeChangeDisplaySpeed() {
- if (isVisible(mBinding.control.getRoot())) showDisplayInfo();
- else if (Setting.isDisplaySpeed()) Traffic.setSpeed(mBinding.display.netspeed);
+ boolean visible = isVisible(mBinding.control.getRoot());
+ long position = mPlayers.getPosition();
+ if (Setting.isDisplaySpeed() && !visible) Traffic.setSpeed(mBinding.display.netspeed);
+ if (Setting.isDisplayDuration() && !visible && position > 0) mBinding.display.duration.setText(mPlayers.getPositionTime(0) + "/" + mPlayers.getDurationTime());
+ showDisplayInfo();
}
@Override
diff --git a/app/src/leanback/res/drawable/shape_controller.xml b/app/src/leanback/res/drawable/shape_controller.xml
index 2278e6de7..928fd7ab5 100644
--- a/app/src/leanback/res/drawable/shape_controller.xml
+++ b/app/src/leanback/res/drawable/shape_controller.xml
@@ -4,8 +4,8 @@
-
-
-
-
-
-
-
\ No newline at end of file
diff --git a/app/src/leanback/res/drawable/shape_text_activated.xml b/app/src/leanback/res/drawable/shape_text_activated.xml
index bad85c441..28ed9761a 100644
--- a/app/src/leanback/res/drawable/shape_text_activated.xml
+++ b/app/src/leanback/res/drawable/shape_text_activated.xml
@@ -2,7 +2,7 @@
-
+
diff --git a/app/src/leanback/res/drawable/shape_text_normal.xml b/app/src/leanback/res/drawable/shape_text_normal.xml
index bad85c441..28ed9761a 100644
--- a/app/src/leanback/res/drawable/shape_text_normal.xml
+++ b/app/src/leanback/res/drawable/shape_text_normal.xml
@@ -2,7 +2,7 @@
-
+
diff --git a/app/src/leanback/res/layout/activity_live.xml b/app/src/leanback/res/layout/activity_live.xml
index 8efaf333a..5fa9f4ffa 100644
--- a/app/src/leanback/res/layout/activity_live.xml
+++ b/app/src/leanback/res/layout/activity_live.xml
@@ -45,6 +45,13 @@
android:layout_width="match_parent"
android:layout_height="match_parent" />
+
+
+
+
+
+
+
+
+
+
\ No newline at end of file
diff --git a/app/src/leanback/res/layout/view_widget_display.xml b/app/src/leanback/res/layout/view_widget_display.xml
index 5f3b5d59e..21f2aafb1 100644
--- a/app/src/leanback/res/layout/view_widget_display.xml
+++ b/app/src/leanback/res/layout/view_widget_display.xml
@@ -19,15 +19,36 @@
android:textSize="20sp"
tools:text="10:20:00" />
+
+
\ No newline at end of file
diff --git a/app/src/leanback/res/layout/view_widget_vod.xml b/app/src/leanback/res/layout/view_widget_vod.xml
index 93d594565..9507a3b72 100644
--- a/app/src/leanback/res/layout/view_widget_vod.xml
+++ b/app/src/leanback/res/layout/view_widget_vod.xml
@@ -7,7 +7,6 @@
views;
private Timer timer;
public static Clock create() {
@@ -26,12 +28,22 @@ public class Clock {
return new Clock().view(view).format("HH:mm:ss");
}
+ public static Clock create(List views) {
+ return new Clock().view(views).format("HH:mm:ss");
+ }
+
public Clock() {
this.date = new Date();
+ this.views = new ArrayList<>();
}
public Clock view(TextView view) {
- this.view = view;
+ this.views.add(view);
+ return this;
+ }
+
+ public Clock view(List views) {
+ this.views = views;
return this;
}
@@ -58,7 +70,9 @@ public class Clock {
try {
date.setTime(System.currentTimeMillis());
if (callback != null) callback.onTimeChanged();
- if (view != null) view.setText(format.format(date));
+ for(TextView view : views) {
+ if (view != null) view.setText(format.format(date));
+ }
} catch (Exception ignored) {
}
}
diff --git a/app/src/main/res/values-zh-rCN/strings.xml b/app/src/main/res/values-zh-rCN/strings.xml
index b5d1ffd9a..7bf872aca 100644
--- a/app/src/main/res/values-zh-rCN/strings.xml
+++ b/app/src/main/res/values-zh-rCN/strings.xml
@@ -37,6 +37,7 @@
定时
时间
网速
+ 进度
弹幕
换源
→
diff --git a/app/src/main/res/values-zh-rTW/strings.xml b/app/src/main/res/values-zh-rTW/strings.xml
index 454c092f8..6c9990711 100644
--- a/app/src/main/res/values-zh-rTW/strings.xml
+++ b/app/src/main/res/values-zh-rTW/strings.xml
@@ -37,6 +37,7 @@
定時
時間
網速
+ 進度
彈幕
換源
→
diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml
index 23a597076..13409e0cd 100644
--- a/app/src/main/res/values/strings.xml
+++ b/app/src/main/res/values/strings.xml
@@ -37,6 +37,7 @@
Timer
Time
Net Speed
+ Duration
Danmu
Change
→
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 1b51295ba..215315c31 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
@@ -73,12 +73,13 @@ import org.greenrobot.eventbus.Subscribe;
import org.greenrobot.eventbus.ThreadMode;
import java.util.ArrayList;
+import java.util.Arrays;
import java.util.Iterator;
import java.util.List;
import tv.danmaku.ijk.media.player.ui.IjkVideoView;
-public class LiveActivity extends BaseActivity implements CustomKeyDownLive.Listener, TrackDialog.Listener, Biometric.Callback, PassCallback, LiveCallback, GroupAdapter.OnClickListener, ChannelAdapter.OnClickListener, SubtitleCallback, CastDialog.Listener, InfoDialog.Listener {
+public class LiveActivity extends BaseActivity implements Clock.Callback, CustomKeyDownLive.Listener, TrackDialog.Listener, Biometric.Callback, PassCallback, LiveCallback, GroupAdapter.OnClickListener, ChannelAdapter.OnClickListener, SubtitleCallback, CastDialog.Listener, InfoDialog.Listener {
private ActivityLiveBinding mBinding;
private ChannelAdapter mChannelAdapter;
@@ -156,7 +157,7 @@ public class LiveActivity extends BaseActivity implements CustomKeyDownLive.List
@Override
protected void initView(Bundle savedInstanceState) {
mKeyDown = CustomKeyDownLive.create(this, mBinding.video);
- mClock = Clock.create(mBinding.widget.time);
+ mClock = Clock.create(Arrays.asList(mBinding.widget.time, mBinding.display.time));
setPadding(mBinding.control.getRoot());
setPadding(mBinding.recycler, true);
mPlayers = new Players().init(this);
@@ -172,6 +173,7 @@ public class LiveActivity extends BaseActivity implements CustomKeyDownLive.List
setForeground(true);
setRecyclerView();
setVideoView();
+ setDisplayView();
setViewModel();
checkLive();
}
@@ -236,6 +238,11 @@ public class LiveActivity extends BaseActivity implements CustomKeyDownLive.List
mBinding.control.action.home.setVisibility(LiveConfig.isOnly() ? View.GONE : View.VISIBLE);
}
+ private void setDisplayView() {
+ mBinding.display.getRoot().setVisibility(View.VISIBLE);
+ showDisplayInfo();
+ }
+
@Override
public void setSubtitle(int size) {
getExo().getSubtitleView().setFixedTextSize(Dimension.SP, size);
@@ -501,6 +508,21 @@ public class LiveActivity extends BaseActivity implements CustomKeyDownLive.List
App.removeCallbacks(mR1);
}
+ private void showDisplayInfo() {
+ boolean controlVisible = isVisible(mBinding.control.getRoot());
+ boolean visible = (!controlVisible || isLock());
+ mBinding.display.time.setVisibility(Setting.isDisplayTime() && visible ? View.VISIBLE : View.GONE);
+ mBinding.display.netspeed.setVisibility(Setting.isDisplaySpeed() && visible ? View.VISIBLE : View.GONE);
+ mBinding.display.duration.setVisibility(View.GONE);
+ }
+
+ private void onTimeChangeDisplaySpeed() {
+ boolean controlVisible = isVisible(mBinding.control.getRoot());
+ boolean visible = (!controlVisible || isLock());
+ if (Setting.isDisplaySpeed() && visible) Traffic.setSpeed(mBinding.display.netspeed);
+ showDisplayInfo();
+ }
+
private void showInfo() {
boolean pip = Build.VERSION.SDK_INT >= android.os.Build.VERSION_CODES.N && isInPictureInPictureMode();
mBinding.widget.infoPip.setVisibility(pip ? View.VISIBLE : View.GONE);
@@ -670,6 +692,11 @@ public class LiveActivity extends BaseActivity implements CustomKeyDownLive.List
public void onTrackClick(Track item) {
}
+ @Override
+ public void onTimeChanged() {
+ onTimeChangeDisplaySpeed();
+ }
+
@Override
public void setLive(Live item) {
LiveConfig.get().setHome(item);
@@ -720,6 +747,7 @@ public class LiveActivity extends BaseActivity implements CustomKeyDownLive.List
switch (event.getState()) {
case 0:
setTrackVisible(false);
+ mClock.setCallback(this);
break;
case Player.STATE_IDLE:
break;
diff --git a/app/src/mobile/java/com/fongmi/android/tv/ui/activity/VideoActivity.java b/app/src/mobile/java/com/fongmi/android/tv/ui/activity/VideoActivity.java
index 83dfc378c..7735884e9 100644
--- a/app/src/mobile/java/com/fongmi/android/tv/ui/activity/VideoActivity.java
+++ b/app/src/mobile/java/com/fongmi/android/tv/ui/activity/VideoActivity.java
@@ -942,10 +942,16 @@ public class VideoActivity extends BaseActivity implements Clock.Callback, Custo
boolean visible = (!controlVisible || isLock());
mBinding.display.time.setVisibility(Setting.isDisplayTime() && visible ? View.VISIBLE : View.GONE);
mBinding.display.netspeed.setVisibility(Setting.isDisplaySpeed() && visible ? View.VISIBLE : View.GONE);
+ mBinding.display.duration.setVisibility(Setting.isDisplayDuration() && visible ? View.VISIBLE : View.GONE);
}
private void onTimeChangeDisplaySpeed() {
- if (Setting.isDisplaySpeed() && (!isVisible(mBinding.control.getRoot()) || isLock())) Traffic.setSpeed(mBinding.display.netspeed);
+ boolean controlVisible = isVisible(mBinding.control.getRoot());
+ boolean visible = (!controlVisible || isLock());
+ long position = mPlayers.getPosition();
+ if (Setting.isDisplaySpeed() && visible) Traffic.setSpeed(mBinding.display.netspeed);
+ if (Setting.isDisplayDuration() && visible && position > 0) mBinding.display.duration.setText(mPlayers.getPositionTime(0) + "/" + mPlayers.getDurationTime());
+ showDisplayInfo();
}
private void toggleFullscreen() {
diff --git a/app/src/mobile/java/com/fongmi/android/tv/ui/dialog/ControlDialog.java b/app/src/mobile/java/com/fongmi/android/tv/ui/dialog/ControlDialog.java
index 5e0590152..47dd29930 100644
--- a/app/src/mobile/java/com/fongmi/android/tv/ui/dialog/ControlDialog.java
+++ b/app/src/mobile/java/com/fongmi/android/tv/ui/dialog/ControlDialog.java
@@ -98,6 +98,7 @@ public class ControlDialog extends BaseDialog implements ParseAdapter.OnClickLis
binding.timer.setActivated(Timer.get().isRunning());
binding.dptime.setActivated(Setting.isDisplayTime());
binding.dpspeed.setActivated(Setting.isDisplaySpeed());
+ binding.dpduration.setActivated(Setting.isDisplayDuration());
setTrackVisible();
setScaleText();
setParse();
@@ -121,6 +122,7 @@ public class ControlDialog extends BaseDialog implements ParseAdapter.OnClickLis
binding.opening.setOnLongClickListener(v -> longClick(binding.opening, parent.control.action.opening));
binding.dptime.setOnClickListener(v -> displayTime());
binding.dpspeed.setOnClickListener(v -> displaySpeed());
+ binding.dpduration.setOnClickListener(v -> displayDuration());
}
private void displayTime() {
@@ -137,6 +139,13 @@ public class ControlDialog extends BaseDialog implements ParseAdapter.OnClickLis
binding.dpspeed.setActivated(!display);
}
+ private void displayDuration() {
+ boolean display = Setting.isDisplayDuration();
+ parent.display.duration.setVisibility(!display ? View.VISIBLE : View.GONE);
+ Setting.putDisplayDuration(!display);
+ binding.dpduration.setActivated(!display);
+ }
+
private void onTimer(View view) {
App.post(() -> TimerDialog.create().show(activity), 200);
dismiss();
diff --git a/app/src/mobile/res/layout/activity_live.xml b/app/src/mobile/res/layout/activity_live.xml
index bc82cf86e..431adc381 100644
--- a/app/src/mobile/res/layout/activity_live.xml
+++ b/app/src/mobile/res/layout/activity_live.xml
@@ -45,6 +45,13 @@
android:layout_width="match_parent"
android:layout_height="match_parent" />
+
+
+
+
+
+
+