summaryrefslogtreecommitdiff
path: root/app/src/main/java/de/danoeh/antennapod/view/LockableBottomSheetBehavior.java
diff options
context:
space:
mode:
Diffstat (limited to 'app/src/main/java/de/danoeh/antennapod/view/LockableBottomSheetBehavior.java')
-rw-r--r--app/src/main/java/de/danoeh/antennapod/view/LockableBottomSheetBehavior.java86
1 files changed, 86 insertions, 0 deletions
diff --git a/app/src/main/java/de/danoeh/antennapod/view/LockableBottomSheetBehavior.java b/app/src/main/java/de/danoeh/antennapod/view/LockableBottomSheetBehavior.java
new file mode 100644
index 000000000..8e8d98fc9
--- /dev/null
+++ b/app/src/main/java/de/danoeh/antennapod/view/LockableBottomSheetBehavior.java
@@ -0,0 +1,86 @@
+package de.danoeh.antennapod.view;
+
+import android.content.Context;
+import android.util.AttributeSet;
+import android.view.MotionEvent;
+import android.view.View;
+import androidx.coordinatorlayout.widget.CoordinatorLayout;
+import com.google.android.material.bottomsheet.ViewPagerBottomSheetBehavior;
+
+/**
+ * Based on https://stackoverflow.com/a/40798214
+ */
+public class LockableBottomSheetBehavior<V extends View> extends ViewPagerBottomSheetBehavior<V> {
+ private boolean isLocked = false;
+
+ public LockableBottomSheetBehavior() {}
+
+ public LockableBottomSheetBehavior(Context context, AttributeSet attrs) {
+ super(context, attrs);
+ }
+
+ public void setLocked(boolean locked) {
+ isLocked = locked;
+ }
+
+ @Override
+ public boolean onInterceptTouchEvent(CoordinatorLayout parent, V child, MotionEvent event) {
+ boolean handled = false;
+
+ if (!isLocked) {
+ handled = super.onInterceptTouchEvent(parent, child, event);
+ }
+
+ return handled;
+ }
+
+ @Override
+ public boolean onTouchEvent(CoordinatorLayout parent, V child, MotionEvent event) {
+ boolean handled = false;
+
+ if (!isLocked) {
+ handled = super.onTouchEvent(parent, child, event);
+ }
+
+ return handled;
+ }
+
+ @Override
+ public boolean onStartNestedScroll(CoordinatorLayout coordinatorLayout, V child, View directTargetChild,
+ View target, int nestedScrollAxes) {
+ boolean handled = false;
+
+ if (!isLocked) {
+ handled = super.onStartNestedScroll(coordinatorLayout, child, directTargetChild, target, nestedScrollAxes);
+ }
+
+ return handled;
+ }
+
+ @Override
+ public void onNestedPreScroll(CoordinatorLayout coordinatorLayout, V child, View target,
+ int dx, int dy, int[] consumed) {
+ if (!isLocked) {
+ super.onNestedPreScroll(coordinatorLayout, child, target, dx, dy, consumed);
+ }
+ }
+
+ @Override
+ public void onStopNestedScroll(CoordinatorLayout coordinatorLayout, V child, View target) {
+ if (!isLocked) {
+ super.onStopNestedScroll(coordinatorLayout, child, target);
+ }
+ }
+
+ @Override
+ public boolean onNestedPreFling(CoordinatorLayout coordinatorLayout, V child, View target,
+ float velocityX, float velocityY) {
+ boolean handled = false;
+
+ if (!isLocked) {
+ handled = super.onNestedPreFling(coordinatorLayout, child, target, velocityX, velocityY);
+ }
+
+ return handled;
+ }
+}