From e3ef8415f2674ffd96943fbce218e24fea9ad544 Mon Sep 17 00:00:00 2001 From: FongMi Date: Wed, 1 Mar 2023 09:39:28 +0800 Subject: [PATCH] [mobile] support scroll seek --- .../tv/ui/activity/DetailActivity.java | 19 ++++++++++++- .../tv/ui/custom/CustomKeyDownVod.java | 28 +++++++++++++++++++ 2 files changed, 46 insertions(+), 1 deletion(-) diff --git a/app/src/mobile/java/com/fongmi/android/tv/ui/activity/DetailActivity.java b/app/src/mobile/java/com/fongmi/android/tv/ui/activity/DetailActivity.java index 935950fca..ce6784069 100644 --- a/app/src/mobile/java/com/fongmi/android/tv/ui/activity/DetailActivity.java +++ b/app/src/mobile/java/com/fongmi/android/tv/ui/activity/DetailActivity.java @@ -621,9 +621,13 @@ public class DetailActivity extends BaseActivity implements CustomKeyDownVod.Lis } private void showState(int resId) { + showState(resId, 0); + } + + private void showState(int resId, long time) { mBinding.widget.action.setImageResource(resId); mBinding.widget.state.setVisibility(View.VISIBLE); - mBinding.widget.position.setText(mPlayers.getPositionTime(0)); + mBinding.widget.position.setText(mPlayers.getPositionTime(time)); } private void hideState() { @@ -872,6 +876,19 @@ public class DetailActivity extends BaseActivity implements CustomKeyDownVod.Lis adapter.notifyItemRangeChanged(0, adapter.getItemCount()); } + @Override + public void onSeeking(int time) { + if (!isLock()) showState(time > 0 ? R.drawable.ic_widget_forward : R.drawable.ic_widget_rewind, time); + } + + @Override + public void onSeekTo(int time) { + if (isLock()) return; + mPlayers.seekTo(time); + showProgress(); + onPlay(); + } + @Override public void onSingleTap() { if (isVisible(mBinding.control.getRoot())) hideControl(); diff --git a/app/src/mobile/java/com/fongmi/android/tv/ui/custom/CustomKeyDownVod.java b/app/src/mobile/java/com/fongmi/android/tv/ui/custom/CustomKeyDownVod.java index 786c4ae25..216d68e64 100644 --- a/app/src/mobile/java/com/fongmi/android/tv/ui/custom/CustomKeyDownVod.java +++ b/app/src/mobile/java/com/fongmi/android/tv/ui/custom/CustomKeyDownVod.java @@ -12,6 +12,9 @@ public class CustomKeyDownVod extends GestureDetector.SimpleOnGestureListener { private final GestureDetector detector; private final Listener listener; + private boolean touch; + private boolean seek; + private int time; public static CustomKeyDownVod create(Context context) { return new CustomKeyDownVod(context); @@ -23,9 +26,30 @@ public class CustomKeyDownVod extends GestureDetector.SimpleOnGestureListener { } public boolean onTouchEvent(MotionEvent e) { + if (seek && e.getAction() == MotionEvent.ACTION_UP) listener.onSeekTo(time); return detector.onTouchEvent(e); } + @Override + public boolean onDown(@NonNull MotionEvent e) { + touch = true; + seek = false; + return true; + } + + @Override + public boolean onScroll(@NonNull MotionEvent e1, @NonNull MotionEvent e2, float distanceX, float distanceY) { + int deltaX = (int) (e2.getX() - e1.getX()); + if (touch) { + seek = Math.abs(distanceX) >= Math.abs(distanceY); + touch = false; + } + if (seek) { + listener.onSeeking(time = deltaX * 50); + } + return true; + } + @Override public boolean onDoubleTap(@NonNull MotionEvent e) { int base = ResUtil.getScreenWidthPx() / 3; @@ -46,6 +70,10 @@ public class CustomKeyDownVod extends GestureDetector.SimpleOnGestureListener { public interface Listener { + void onSeeking(int time); + + void onSeekTo(int time); + void onSingleTap(); void onDoubleTapLeft();