diff --git a/app/src/leanback/java/com/fongmi/android/tv/ui/activity/DetailActivity.java b/app/src/leanback/java/com/fongmi/android/tv/ui/activity/DetailActivity.java
index 741a17ed9..1d61edcf8 100644
--- a/app/src/leanback/java/com/fongmi/android/tv/ui/activity/DetailActivity.java
+++ b/app/src/leanback/java/com/fongmi/android/tv/ui/activity/DetailActivity.java
@@ -44,6 +44,7 @@ import com.fongmi.android.tv.ui.presenter.FlagPresenter;
import com.fongmi.android.tv.ui.presenter.GroupPresenter;
import com.fongmi.android.tv.ui.presenter.ParsePresenter;
import com.fongmi.android.tv.ui.presenter.PartPresenter;
+import com.fongmi.android.tv.utils.Clock;
import com.fongmi.android.tv.utils.Notify;
import com.fongmi.android.tv.utils.Prefers;
import com.fongmi.android.tv.utils.ResUtil;
@@ -63,7 +64,7 @@ import java.util.List;
import okhttp3.Call;
import okhttp3.Response;
-public class DetailActivity extends BaseActivity implements CustomKeyDown.Listener, GroupPresenter.OnClickListener {
+public class DetailActivity extends BaseActivity implements CustomKeyDown.Listener, GroupPresenter.OnClickListener, Clock.Callback {
private ActivityDetailBinding mBinding;
private ViewControllerBottomBinding mControl;
@@ -234,7 +235,6 @@ public class DetailActivity extends BaseActivity implements CustomKeyDown.Listen
}
private void setDetail(Vod item) {
- Players.get().setKey(getHistoryKey());
mBinding.progressLayout.showContent();
mBinding.video.setTag(item.getVodPic());
mBinding.name.setText(item.getVodName());
@@ -275,7 +275,6 @@ public class DetailActivity extends BaseActivity implements CustomKeyDown.Listen
for (int i = 0; i < mFlagAdapter.size(); i++) ((Vod.Flag) mFlagAdapter.get(i)).toggle(mCurrent == i, item);
mEpisodeAdapter.notifyArrayItemRangeChanged(0, mEpisodeAdapter.size());
mHandler.post(() -> mBinding.episode.setSelectedPosition(getEpisodePosition()));
- mBinding.widget.title.setText(getString(R.string.detail_title, mBinding.name.getText(), item.getName()));
if (mEpisodeAdapter.size() == 0) return;
getPlayer(false);
}
@@ -336,7 +335,7 @@ public class DetailActivity extends BaseActivity implements CustomKeyDown.Listen
}
private void exitFullscreen() {
- mBinding.widget.title.setVisibility(View.GONE);
+ mBinding.widget.top.setVisibility(View.GONE);
mBinding.widget.center.setVisibility(View.GONE);
mBinding.video.setForeground(ResUtil.getDrawable(R.drawable.selector_video));
mBinding.video.setLayoutParams(mFrameParams);
@@ -398,7 +397,6 @@ public class DetailActivity extends BaseActivity implements CustomKeyDown.Listen
private boolean onOpeningReset() {
mHistory.setOpening(0);
mControl.opening.setText(Players.get().getStringForTime(mHistory.getOpening()));
- mHistory.update();
return true;
}
@@ -411,7 +409,6 @@ public class DetailActivity extends BaseActivity implements CustomKeyDown.Listen
private boolean onEndingReset() {
mHistory.setEnding(0);
mControl.ending.setText(Players.get().getStringForTime(mHistory.getEnding()));
- mHistory.update();
return true;
}
@@ -427,7 +424,6 @@ public class DetailActivity extends BaseActivity implements CustomKeyDown.Listen
mHistory.setOpening(0);
mControl.ending.setText(Players.get().getStringForTime(mHistory.getEnding()));
mControl.opening.setText(Players.get().getStringForTime(mHistory.getOpening()));
- mHistory.update();
}
private void onTracks() {
@@ -450,6 +446,9 @@ public class DetailActivity extends BaseActivity implements CustomKeyDown.Listen
private void checkHistory() {
mHistory = History.find(getHistoryKey());
if (mFlagAdapter.size() == 0) {
+ mBinding.flag.setVisibility(View.GONE);
+ mBinding.group.setVisibility(View.GONE);
+ mBinding.episode.setVisibility(View.GONE);
Notify.show(R.string.error_episode);
return;
}
@@ -474,7 +473,7 @@ public class DetailActivity extends BaseActivity implements CustomKeyDown.Listen
history.setCid(ApiConfig.getCid());
history.setVodPic(mBinding.video.getTag().toString());
history.setVodName(mBinding.name.getText().toString());
- return history.save();
+ return history;
}
private void updateHistory(Vod.Flag.Episode item, boolean replay) {
@@ -488,9 +487,7 @@ public class DetailActivity extends BaseActivity implements CustomKeyDown.Listen
}
private void updateHistory() {
- if (mHistory == null) return;
- mHistory.setDuration(Players.get().getCurrentPosition());
- mHistory.update();
+ if (mHistory != null) mHistory.update();
}
private final Runnable mHideCenter = new Runnable() {
@@ -498,24 +495,20 @@ public class DetailActivity extends BaseActivity implements CustomKeyDown.Listen
public void run() {
mBinding.widget.action.setImageResource(R.drawable.ic_play);
mBinding.widget.center.setVisibility(View.GONE);
- mBinding.widget.title.setVisibility(View.GONE);
+ mBinding.widget.top.setVisibility(View.GONE);
}
};
- private final Runnable mProgress = new Runnable() {
- @Override
- public void run() {
- boolean keep = true;
- long duration = Players.get().getDuration();
- long current = Players.get().getCurrentPosition();
- if (mHistory.getOpening() >= current) Players.get().seekTo(mHistory.getOpening());
- if (mHistory.getEnding() > 0 && duration > 0 && mHistory.getEnding() + current >= duration) {
- keep = false;
- checkNext();
- }
- if (keep) mHandler.postDelayed(mProgress, 1000);
+ @Override
+ public void onTimeChanged() {
+ long duration = Players.get().getDuration();
+ long current = Players.get().getCurrentPosition();
+ if (mHistory.getOpening() >= current) Players.get().seekTo(mHistory.getOpening());
+ if (mHistory.getEnding() > 0 && duration > 0 && mHistory.getEnding() + current >= duration) {
+ Clock.get().setCallback(null);
+ checkNext();
}
- };
+ }
@Subscribe(threadMode = ThreadMode.MAIN)
public void onPlayerEvent(PlayerEvent event) {
@@ -545,20 +538,11 @@ public class DetailActivity extends BaseActivity implements CustomKeyDown.Listen
private void checkPosition() {
Players.get().seekTo(mHistory.getDuration());
- stopTimer();
- setTimer();
- }
-
- private void stopTimer() {
- mHandler.removeCallbacks(mProgress);
- }
-
- private void setTimer() {
- mHandler.postDelayed(mProgress, 1000);
+ Clock.get().setCallback(this);
}
private void onRetry() {
- updateHistory();
+ mHistory.setDuration(Players.get().getCurrentPosition());
getPlayer(false);
}
@@ -566,14 +550,14 @@ public class DetailActivity extends BaseActivity implements CustomKeyDown.Listen
mBinding.widget.progress.getRoot().setVisibility(View.GONE);
mBinding.widget.error.setVisibility(View.VISIBLE);
mBinding.widget.text.setText(msg);
+ Clock.get().setCallback(null);
Players.get().stop();
- stopTimer();
}
private void onPause(boolean visible) {
mBinding.widget.exoPosition.setText(Players.get().getTime(0));
mBinding.widget.exoDuration.setText(mControl.exoDuration.getText());
- mBinding.widget.title.setVisibility(visible ? View.VISIBLE : View.GONE);
+ mBinding.widget.top.setVisibility(visible ? View.VISIBLE : View.GONE);
mBinding.widget.center.setVisibility(visible ? View.VISIBLE : View.GONE);
Players.get().pause();
}
@@ -616,16 +600,20 @@ public class DetailActivity extends BaseActivity implements CustomKeyDown.Listen
else onPlay(0);
}
- @Override
- protected void onPause() {
- super.onPause();
- onPause(false);
- }
-
@Override
protected void onResume() {
super.onResume();
onPlay(0);
+ Clock.start(mBinding.widget.time);
+ }
+
+ @Override
+ protected void onPause() {
+ super.onPause();
+ onPause(false);
+ updateHistory();
+ RefreshEvent.history();
+ Clock.get().release();
}
@Override
@@ -635,16 +623,14 @@ public class DetailActivity extends BaseActivity implements CustomKeyDown.Listen
} else if (mFullscreen) {
exitFullscreen();
} else {
- destroy();
super.onBackPressed();
}
}
- private void destroy() {
- stopTimer();
- updateHistory();
+ @Override
+ protected void onDestroy() {
+ super.onDestroy();
Players.get().stop();
- RefreshEvent.history();
EventBus.getDefault().unregister(this);
}
}
diff --git a/app/src/leanback/java/com/fongmi/android/tv/ui/activity/HomeActivity.java b/app/src/leanback/java/com/fongmi/android/tv/ui/activity/HomeActivity.java
index 55a23b180..cfde5ba1e 100644
--- a/app/src/leanback/java/com/fongmi/android/tv/ui/activity/HomeActivity.java
+++ b/app/src/leanback/java/com/fongmi/android/tv/ui/activity/HomeActivity.java
@@ -75,7 +75,6 @@ public class HomeActivity extends BaseActivity implements CustomTitleView.Listen
protected void initView() {
mHandler = new Handler(Looper.getMainLooper());
Updater.create(this).start();
- Clock.start(mBinding.time);
Server.get().start();
Players.get().init();
setRecyclerView();
@@ -264,6 +263,18 @@ public class HomeActivity extends BaseActivity implements CustomTitleView.Listen
}
}
+ @Override
+ protected void onResume() {
+ super.onResume();
+ Clock.start(mBinding.time);
+ }
+
+ @Override
+ protected void onPause() {
+ super.onPause();
+ Clock.get().release();
+ }
+
@Override
public void onBackPressed() {
if (mHistoryPresenter.isDelete()) {
@@ -283,7 +294,6 @@ public class HomeActivity extends BaseActivity implements CustomTitleView.Listen
private void destroy() {
Server.get().stop();
- Clock.get().release();
Players.get().release();
EventBus.getDefault().unregister(this);
}
diff --git a/app/src/leanback/res/layout/activity_home.xml b/app/src/leanback/res/layout/activity_home.xml
index 5f4e2ad56..a992ab94d 100644
--- a/app/src/leanback/res/layout/activity_home.xml
+++ b/app/src/leanback/res/layout/activity_home.xml
@@ -30,7 +30,6 @@
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:layout_gravity="end"
- android:letterSpacing="0.02"
android:textColor="@color/white"
android:textSize="24sp"
tools:text="07/25 09:20:00" />
diff --git a/app/src/leanback/res/layout/view_controller_widget.xml b/app/src/leanback/res/layout/view_controller_widget.xml
index 42c68cdba..473504dc0 100644
--- a/app/src/leanback/res/layout/view_controller_widget.xml
+++ b/app/src/leanback/res/layout/view_controller_widget.xml
@@ -4,24 +4,45 @@
android:layout_width="match_parent"
android:layout_height="match_parent">
-
+ tools:visibility="visible">
+
+
+
+
+
+
headers, String url) {
exo().setMediaSource(ExoUtil.getSource(headers, url));
PlayerEvent.state(0);
exo().prepare();
- exo().play();
+ }
+
+ public void play() {
+ if (exo() != null) exo().play();
}
public void pause() {
- exo().pause();
+ if (exo() != null) exo().pause();
}
public void stop() {
@@ -164,10 +157,6 @@ public class Players implements Player.Listener, ParseTask.Callback {
if (webView != null) webView.stop(false);
}
- public void play() {
- exo().play();
- }
-
public void release() {
if (exoPlayer != null) {
exoPlayer.removeListener(this);
diff --git a/app/src/main/java/com/fongmi/android/tv/utils/Clock.java b/app/src/main/java/com/fongmi/android/tv/utils/Clock.java
index 1b6de0022..57d99893b 100644
--- a/app/src/main/java/com/fongmi/android/tv/utils/Clock.java
+++ b/app/src/main/java/com/fongmi/android/tv/utils/Clock.java
@@ -13,8 +13,10 @@ import java.util.TimerTask;
public class Clock {
private SimpleDateFormat formatter;
+ private Callback callback;
private Handler handler;
private Timer timer;
+ private Date date;
private static class Loader {
static volatile Clock INSTANCE = new Clock();
@@ -27,6 +29,7 @@ public class Clock {
public void init() {
this.formatter = new SimpleDateFormat("MM/dd HH:mm:ss", Locale.getDefault());
this.handler = new Handler(Looper.getMainLooper());
+ this.date = new Date();
}
public static void start(TextView view) {
@@ -34,21 +37,39 @@ public class Clock {
get().run(view);
}
+ public void setCallback(Callback callback) {
+ this.callback = callback;
+ }
+
private void run(TextView view) {
timer = new Timer();
timer.schedule(new TimerTask() {
@Override
public void run() {
- if (handler == null || view == null || formatter == null) return;
- handler.post(() -> view.setText(formatter.format(new Date())));
+ handler.post(() -> doJob(view));
}
}, 0, 1000);
}
+ private void doJob(TextView view) {
+ try {
+ date.setTime(System.currentTimeMillis());
+ view.setText(formatter.format(date));
+ if (callback != null) callback.onTimeChanged();
+ } catch (Exception ignored) {
+ }
+ }
+
public void release() {
if (timer != null) timer.cancel();
formatter = null;
handler = null;
timer = null;
+ date = null;
+ }
+
+ public interface Callback {
+
+ void onTimeChanged();
}
}