Fix clock bug

pull/137/head
FongMi 3 years ago
parent 06e86826d2
commit cd66536221
  1. 18
      app/src/leanback/java/com/fongmi/android/tv/ui/activity/DetailActivity.java
  2. 16
      app/src/leanback/java/com/fongmi/android/tv/ui/activity/HomeActivity.java
  3. 6
      app/src/leanback/java/com/fongmi/android/tv/ui/activity/LiveActivity.java
  4. 58
      app/src/main/java/com/fongmi/android/tv/utils/Clock.java
  5. 18
      app/src/mobile/java/com/fongmi/android/tv/ui/activity/DetailActivity.java
  6. 14
      app/src/mobile/java/com/fongmi/android/tv/ui/activity/LiveActivity.java

@ -123,6 +123,7 @@ public class DetailActivity extends BaseActivity implements CustomKeyDownVod.Lis
private Runnable mR1;
private Runnable mR2;
private Runnable mR3;
private Clock mClock;
public static void push(FragmentActivity activity, Uri uri) {
if (Sniffer.isPush(uri)) push(activity, uri.toString(), true);
@ -254,6 +255,7 @@ public class DetailActivity extends BaseActivity implements CustomKeyDownVod.Lis
protected void initView() {
mKeyDown = CustomKeyDownVod.create(this, mBinding.video);
mFrameParams = mBinding.video.getLayoutParams();
mClock = Clock.create(mBinding.widget.time);
mPlayers = new Players().init();
mBroken = new ArrayList<>();
mR1 = this::hideControl;
@ -389,7 +391,7 @@ public class DetailActivity extends BaseActivity implements CustomKeyDownVod.Lis
getIntent().putExtra("key", item.getSiteKey());
getIntent().putExtra("id", item.getVodId());
mBinding.scroll.scrollTo(0, 0);
Clock.get().setCallback(null);
mClock.setCallback(null);
mPlayers.stop();
getDetail();
}
@ -672,7 +674,7 @@ public class DetailActivity extends BaseActivity implements CustomKeyDownVod.Lis
}
private void onReset(boolean replay) {
Clock.get().setCallback(null);
mClock.setCallback(null);
if (mFlagAdapter.size() == 0) return;
if (mEpisodeAdapter.size() == 0) return;
getPlayer(getFlag(), getEpisode(), replay);
@ -937,7 +939,7 @@ public class DetailActivity extends BaseActivity implements CustomKeyDownVod.Lis
mHistory.setDuration(duration = mPlayers.getDuration());
if (position >= 0 && duration > 0 && getSite().isRecordable()) App.execute(() -> mHistory.update());
if (mHistory.getEnding() > 0 && duration > 0 && mHistory.getEnding() + position >= duration) {
Clock.get().setCallback(null);
mClock.setCallback(null);
checkNext();
}
}
@ -949,7 +951,7 @@ public class DetailActivity extends BaseActivity implements CustomKeyDownVod.Lis
setPosition();
setInitTrack(true);
setTrackVisible(false);
Clock.get().setCallback(this);
mClock.setCallback(this);
break;
case Player.STATE_IDLE:
break;
@ -1020,8 +1022,8 @@ public class DetailActivity extends BaseActivity implements CustomKeyDownVod.Lis
}
private void onError(ErrorEvent event) {
Clock.get().setCallback(null);
showError(event.getMsg());
mClock.setCallback(null);
mPlayers.stop();
startFlow();
}
@ -1314,7 +1316,7 @@ public class DetailActivity extends BaseActivity implements CustomKeyDownVod.Lis
@Override
protected void onResume() {
super.onResume();
Clock.start(mBinding.widget.time);
mClock.start();
onPlay();
}
@ -1322,7 +1324,7 @@ public class DetailActivity extends BaseActivity implements CustomKeyDownVod.Lis
protected void onPause() {
super.onPause();
onPause(false);
Clock.stop();
mClock.stop();
}
@Override
@ -1343,9 +1345,9 @@ public class DetailActivity extends BaseActivity implements CustomKeyDownVod.Lis
protected void onDestroy() {
super.onDestroy();
stopSearch();
mClock.release();
mPlayers.release();
Source.get().stop();
Clock.get().release();
RefreshEvent.history();
App.removeCallbacks(mR1, mR2, mR3);
}

@ -67,7 +67,8 @@ public class HomeActivity extends BaseActivity implements CustomTitleView.Listen
private ArrayObjectAdapter mAdapter;
private SiteViewModel mViewModel;
private boolean confirm;
private Result result;
private Result mResult;
private Clock mClock;
@Override
protected ViewBinding getBinding() {
@ -82,6 +83,7 @@ public class HomeActivity extends BaseActivity implements CustomTitleView.Listen
@Override
protected void initView() {
mClock = Clock.create(mBinding.time).format("MM/dd HH:mm:ss");
mBinding.progressLayout.showProgress();
Updater.get().release().start();
Server.get().start();
@ -130,7 +132,7 @@ public class HomeActivity extends BaseActivity implements CustomTitleView.Listen
mViewModel = new ViewModelProvider(this).get(SiteViewModel.class);
mViewModel.result.observe(this, result -> {
mAdapter.remove("progress");
addVideo(this.result = result);
addVideo(mResult = result);
});
}
@ -161,7 +163,7 @@ public class HomeActivity extends BaseActivity implements CustomTitleView.Listen
@Override
public void error(String msg) {
mBinding.progressLayout.showContent();
result = Result.empty();
mResult = Result.empty();
Notify.show(msg);
setFocus();
}
@ -183,7 +185,7 @@ public class HomeActivity extends BaseActivity implements CustomTitleView.Listen
}
private void getVideo() {
this.result = Result.empty();
mResult = Result.empty();
int index = getRecommendIndex();
String home = ApiConfig.get().getHome().getName();
mBinding.title.setText(home.isEmpty() ? ResUtil.getString(R.string.app_name) : home);
@ -259,7 +261,7 @@ public class HomeActivity extends BaseActivity implements CustomTitleView.Listen
public void onItemClick(Func item) {
switch (item.getResId()) {
case R.string.home_vod:
VodActivity.start(this, result.clear());
VodActivity.start(this, mResult.clear());
break;
case R.string.home_live:
LiveActivity.start(this);
@ -392,13 +394,13 @@ public class HomeActivity extends BaseActivity implements CustomTitleView.Listen
@Override
protected void onResume() {
super.onResume();
Clock.start(mBinding.time, "MM/dd HH:mm:ss");
mClock.start();
}
@Override
protected void onPause() {
super.onPause();
Clock.stop();
mClock.stop();
}
@Override

@ -89,6 +89,7 @@ public class LiveActivity extends BaseActivity implements GroupPresenter.OnClick
private Runnable mR2;
private Runnable mR3;
private Runnable mR4;
private Clock mClock;
private boolean confirm;
private int toggleCount;
private int count;
@ -137,6 +138,7 @@ public class LiveActivity extends BaseActivity implements GroupPresenter.OnClick
mHides = new ArrayList<>();
mPlayers = new Players().init();
mKeyDown = CustomKeyDownLive.create(this);
mClock = Clock.create(mBinding.widget.time);
mFormatDate = new SimpleDateFormat("yyyy-MM-dd", Locale.getDefault());
mFormatTime = new SimpleDateFormat("yyyy-MM-ddHH:mm", Locale.getDefault());
setRecyclerView();
@ -800,15 +802,15 @@ public class LiveActivity extends BaseActivity implements GroupPresenter.OnClick
@Override
protected void onResume() {
super.onResume();
Clock.start(mBinding.widget.time);
mPlayers.play();
mClock.start();
}
@Override
protected void onPause() {
super.onPause();
mPlayers.pause();
Clock.stop();
mClock.stop();
}
@Override

@ -12,70 +12,66 @@ import java.util.TimerTask;
public class Clock {
private SimpleDateFormat formatter;
private SimpleDateFormat format;
private Callback callback;
private final Date date;
private TextView view;
private Timer timer;
private Date date;
private static class Loader {
static volatile Clock INSTANCE = new Clock();
public static Clock create() {
return new Clock();
}
public static Clock get() {
return Loader.INSTANCE;
public static Clock create(TextView view) {
return new Clock().view(view).format("HH:mm:ss");
}
public void init(String format) {
this.formatter = new SimpleDateFormat(format, Locale.getDefault());
public Clock() {
this.date = new Date();
this.callback = null;
}
public static void stop() {
if (get().timer != null) get().timer.cancel();
public Clock view(TextView view) {
this.view = view;
return this;
}
public static void start() {
start(null);
}
public static void start(TextView view) {
start(view, "HH:mm:ss");
}
public static void start(TextView view, String format) {
get().init(format);
get().run(view);
public Clock format(String format) {
this.format = new SimpleDateFormat(format, Locale.getDefault());
return this;
}
public void setCallback(Callback callback) {
this.callback = callback;
}
public void release() {
if (timer != null) timer.cancel();
if (callback != null) callback = null;
}
private void run(TextView view) {
public void start() {
timer = new Timer();
timer.schedule(new TimerTask() {
@Override
public void run() {
App.post(() -> doJob(view));
App.post(() -> doJob());
}
}, 0, 1000);
}
private void doJob(TextView view) {
private void doJob() {
try {
date.setTime(System.currentTimeMillis());
if (callback != null) callback.onTimeChanged();
if (view != null) view.setText(formatter.format(date));
if (view != null) view.setText(format.format(date));
} catch (Exception ignored) {
}
}
public void stop() {
if (timer != null) timer.cancel();
}
public void release() {
if (timer != null) timer.cancel();
if (callback != null) callback = null;
}
public interface Callback {
void onTimeChanged();

@ -133,6 +133,7 @@ public class DetailActivity extends BaseActivity implements Clock.Callback, Cust
private Runnable mR2;
private Runnable mR3;
private Runnable mR4;
private Clock mClock;
private String url;
private PiP mPiP;
@ -259,6 +260,7 @@ public class DetailActivity extends BaseActivity implements Clock.Callback, Cust
mPlayers = new Players().init();
mDialogs = new ArrayList<>();
mBroken = new ArrayList<>();
mClock = Clock.create();
mR1 = this::hideControl;
mR2 = this::setTraffic;
mR3 = this::setOrient;
@ -389,7 +391,7 @@ public class DetailActivity extends BaseActivity implements Clock.Callback, Cust
mBinding.swipeLayout.setRefreshing(true);
mBinding.swipeLayout.setEnabled(false);
mBinding.scroll.scrollTo(0, 0);
Clock.get().setCallback(null);
mClock.setCallback(null);
mPlayers.stop();
getDetail();
}
@ -684,7 +686,7 @@ public class DetailActivity extends BaseActivity implements Clock.Callback, Cust
}
private void onReset(boolean replay) {
Clock.get().setCallback(null);
mClock.setCallback(null);
if (mFlagAdapter.getItemCount() == 0) return;
if (mEpisodeAdapter.getItemCount() == 0) return;
getPlayer(getFlag(), getEpisode(), replay);
@ -975,7 +977,7 @@ public class DetailActivity extends BaseActivity implements Clock.Callback, Cust
mHistory.setDuration(duration = mPlayers.getDuration());
if (position >= 0 && duration > 0) App.execute(() -> mHistory.update());
if (mHistory.getEnding() > 0 && duration > 0 && mHistory.getEnding() + position >= duration) {
Clock.get().setCallback(null);
mClock.setCallback(null);
checkNext();
}
}
@ -988,7 +990,7 @@ public class DetailActivity extends BaseActivity implements Clock.Callback, Cust
setInitTrack(true);
setTrackVisible(false);
setUrl(event.getUrl());
Clock.get().setCallback(this);
mClock.setCallback(this);
break;
case Player.STATE_IDLE:
break;
@ -1071,8 +1073,8 @@ public class DetailActivity extends BaseActivity implements Clock.Callback, Cust
private void onError(ErrorEvent event) {
mBinding.swipeLayout.setEnabled(true);
Clock.get().setCallback(null);
showError(event.getMsg());
mClock.setCallback(null);
mPlayers.stop();
startFlow();
}
@ -1420,7 +1422,7 @@ public class DetailActivity extends BaseActivity implements Clock.Callback, Cust
PlaybackService.stop();
} else {
mPlayers.play();
Clock.start();
mClock.start();
}
}
@ -1432,7 +1434,7 @@ public class DetailActivity extends BaseActivity implements Clock.Callback, Cust
PlaybackService.start();
} else {
mPlayers.pause();
Clock.stop();
mClock.stop();
}
}
@ -1452,9 +1454,9 @@ public class DetailActivity extends BaseActivity implements Clock.Callback, Cust
protected void onDestroy() {
super.onDestroy();
stopSearch();
mClock.release();
mPlayers.release();
Source.get().stop();
Clock.get().release();
RefreshEvent.history();
PlaybackService.stop();
App.removeCallbacks(mR1, mR2, mR3, mR4);

@ -89,12 +89,13 @@ public class LiveActivity extends BaseActivity implements CustomKeyDownLive.List
private Runnable mR1;
private Runnable mR2;
private Runnable mR3;
private int toggleCount;
private Clock mClock;
private boolean rotate;
private boolean stop;
private boolean lock;
private int toggleCount;
private int passCount;
private String url;
private int count;
private PiP mPiP;
public static void start(Activity activity) {
@ -142,6 +143,7 @@ public class LiveActivity extends BaseActivity implements CustomKeyDownLive.List
mFormatTime = new SimpleDateFormat("yyyy-MM-ddHH:mm", Locale.getDefault());
mFormatDate = new SimpleDateFormat("yyyy-MM-dd", Locale.getDefault());
mKeyDown = CustomKeyDownLive.create(this, mBinding.video);
mClock = Clock.create(mBinding.widget.time);
mReceiver = new PiPReceiver(this);
mPlayers = new Players().init();
mHides = new ArrayList<>();
@ -442,7 +444,7 @@ public class LiveActivity extends BaseActivity implements CustomKeyDownLive.List
}
private void resetPass() {
this.count = 0;
this.passCount = 0;
}
@Override
@ -451,7 +453,7 @@ public class LiveActivity extends BaseActivity implements CustomKeyDownLive.List
mChannelAdapter.addAll(item.getChannel());
mChannelAdapter.setSelected(item.getPosition());
mBinding.channel.scrollToPosition(Math.max(item.getPosition(), 0));
if (!item.isKeep() || ++count < 5 || mHides.isEmpty()) return;
if (!item.isKeep() || ++passCount < 5 || mHides.isEmpty()) return;
if (Biometric.enable()) Biometric.show(this);
else PassDialog.create().show(this);
resetPass();
@ -908,13 +910,13 @@ public class LiveActivity extends BaseActivity implements CustomKeyDownLive.List
@Override
protected void onResume() {
super.onResume();
Clock.start(mBinding.widget.time);
mClock.start();
}
@Override
protected void onPause() {
super.onPause();
Clock.stop();
mClock.stop();
}
@Override

Loading…
Cancel
Save