summaryrefslogtreecommitdiffhomepage
diff options
context:
space:
mode:
authorJanito Vaqueiro Ferreira Filho <janito@mullvad.net>2020-10-23 10:43:08 -0300
committerJanito Vaqueiro Ferreira Filho <janito@mullvad.net>2020-10-23 10:43:08 -0300
commitc843c69863f89d01923dce546148724daab8bb89 (patch)
tree5d621fa1d47c33b46a54e2e673f50b4cc9d933f3
parent64f6c93f0c6a19647e8b656cdfa4126da3563ac0 (diff)
parent844b9a932a4d782a302b2f021011c990e695223d (diff)
downloadmullvadvpn-c843c69863f89d01923dce546148724daab8bb89.tar.xz
mullvadvpn-c843c69863f89d01923dce546148724daab8bb89.zip
Merge branch 'fix-recycler-view-scroll-events'
-rw-r--r--android/src/main/kotlin/net/mullvad/mullvadvpn/ui/widget/CustomItemAnimator.kt37
-rw-r--r--android/src/main/kotlin/net/mullvad/mullvadvpn/ui/widget/CustomRecyclerView.kt12
2 files changed, 49 insertions, 0 deletions
diff --git a/android/src/main/kotlin/net/mullvad/mullvadvpn/ui/widget/CustomItemAnimator.kt b/android/src/main/kotlin/net/mullvad/mullvadvpn/ui/widget/CustomItemAnimator.kt
new file mode 100644
index 0000000000..e35f4283b2
--- /dev/null
+++ b/android/src/main/kotlin/net/mullvad/mullvadvpn/ui/widget/CustomItemAnimator.kt
@@ -0,0 +1,37 @@
+package net.mullvad.mullvadvpn.ui.widget
+
+import android.support.v7.widget.DefaultItemAnimator
+import android.support.v7.widget.RecyclerView.ViewHolder
+import kotlin.math.round
+
+class CustomItemAnimator : DefaultItemAnimator() {
+ var onMove: ((Int, Int) -> Unit)? = null
+
+ override fun animateMove(
+ holder: ViewHolder,
+ fromX: Int,
+ fromY: Int,
+ toX: Int,
+ toY: Int
+ ): Boolean {
+ if (super.animateMove(holder, fromX, fromY, toX, toY)) {
+ var view = holder.itemView
+ var translationX = view.translationX
+ var translationY = view.translationY
+
+ view.animate().setUpdateListener { _ ->
+ val deltaX = round(translationX - view.translationX)
+ val deltaY = round(translationY - view.translationY)
+
+ onMove?.invoke(deltaX.toInt(), deltaY.toInt())
+
+ translationX -= deltaX
+ translationY -= deltaY
+ }
+
+ return true
+ } else {
+ return false
+ }
+ }
+}
diff --git a/android/src/main/kotlin/net/mullvad/mullvadvpn/ui/widget/CustomRecyclerView.kt b/android/src/main/kotlin/net/mullvad/mullvadvpn/ui/widget/CustomRecyclerView.kt
index 710bb834d0..ac97b4d831 100644
--- a/android/src/main/kotlin/net/mullvad/mullvadvpn/ui/widget/CustomRecyclerView.kt
+++ b/android/src/main/kotlin/net/mullvad/mullvadvpn/ui/widget/CustomRecyclerView.kt
@@ -19,9 +19,21 @@ class CustomRecyclerView : RecyclerView, ListenableScrollableView {
super(context, attributes, defaultStyleAttribute) {
}
+ init {
+ itemAnimator = CustomItemAnimator().apply {
+ onMove = { horizontalDelta, verticalDelta ->
+ dispatchScrollEvent(horizontalDelta, verticalDelta)
+ }
+ }
+ }
+
override fun onScrolled(horizontalDelta: Int, verticalDelta: Int) {
super.onScrolled(horizontalDelta, verticalDelta)
+ dispatchScrollEvent(horizontalDelta, verticalDelta)
+ }
+
+ private fun dispatchScrollEvent(horizontalDelta: Int, verticalDelta: Int) {
val oldHorizontalScrollOffset = horizontalScrollOffset
val oldVerticalScrollOffset = verticalScrollOffset