From 9726d55ec4502eb462f9fe7d62763731e3a580cd Mon Sep 17 00:00:00 2001 From: rimthekid Date: Fri, 18 Mar 2022 06:03:54 -0700 Subject: [PATCH] CustomSwipeToRefresh --- .../github/libretube/CustomSwipeToRefresh.kt | 58 +++++++++++++++++++ .../res/layout/fragment_subscriptions.xml | 4 +- 2 files changed, 60 insertions(+), 2 deletions(-) create mode 100644 app/src/main/java/com/github/libretube/CustomSwipeToRefresh.kt diff --git a/app/src/main/java/com/github/libretube/CustomSwipeToRefresh.kt b/app/src/main/java/com/github/libretube/CustomSwipeToRefresh.kt new file mode 100644 index 000000000..ade59a814 --- /dev/null +++ b/app/src/main/java/com/github/libretube/CustomSwipeToRefresh.kt @@ -0,0 +1,58 @@ +package com.github.libretube + +import android.content.Context +import android.util.AttributeSet +import android.view.KeyEvent.ACTION_DOWN +import android.view.KeyEvent.ACTION_UP +import android.view.MotionEvent +import android.view.MotionEvent.ACTION_CANCEL +import android.view.MotionEvent.ACTION_MOVE +import android.view.View +import android.view.ViewConfiguration +import androidx.swiperefreshlayout.widget.SwipeRefreshLayout +import kotlin.math.abs + +class CustomSwipeToRefresh +@JvmOverloads +constructor( + context: Context, + attrs: AttributeSet? = null +) : SwipeRefreshLayout(context, attrs) { + + private val touchSlop: Int = ViewConfiguration.get(context).scaledTouchSlop + private var startX = 0f + private var startY = 0f + private var forbidSwipe = false + private var isStartScrolledByY = false + + override fun onInterceptTouchEvent(event: MotionEvent): Boolean { + when (event.action) { + ACTION_DOWN -> { + startX = event.x + startY = event.y + } + ACTION_MOVE -> { + val isScrolledByX = abs(event.x - startX) > touchSlop + val isScrolledByY = abs(event.y - startY) > touchSlop + if (!forbidSwipe && isScrolledByY) { + isStartScrolledByY = true + } + if ((isScrolledByX || forbidSwipe) && !isStartScrolledByY) { + forbidSwipe = true + return false + } + } + ACTION_CANCEL, ACTION_UP -> { + forbidSwipe = false + isStartScrolledByY = false + } + } + return super.onInterceptTouchEvent(event) + } + + override fun onNestedScroll(target: View, dxConsumed: Int, dyConsumed: Int, dxUnconsumed: Int, dyUnconsumed: Int) { + if (forbidSwipe) return + super.onNestedScroll(target, dxConsumed, dyConsumed, dxUnconsumed, dyUnconsumed) + } + +} \ No newline at end of file diff --git a/app/src/main/res/layout/fragment_subscriptions.xml b/app/src/main/res/layout/fragment_subscriptions.xml index a27f4ddb0..78c7e1c20 100644 --- a/app/src/main/res/layout/fragment_subscriptions.xml +++ b/app/src/main/res/layout/fragment_subscriptions.xml @@ -40,7 +40,7 @@ android:textStyle="bold" /> - @@ -80,5 +80,5 @@ - +