summaryrefslogtreecommitdiffhomepage
path: root/android/src/main
diff options
context:
space:
mode:
Diffstat (limited to 'android/src/main')
-rw-r--r--android/src/main/kotlin/net/mullvad/mullvadvpn/ui/widget/CustomItemAnimator.kt22
-rw-r--r--android/src/main/kotlin/net/mullvad/mullvadvpn/ui/widget/CustomRecyclerView.kt11
2 files changed, 24 insertions, 9 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
index e35f4283b2..06244067b8 100644
--- a/android/src/main/kotlin/net/mullvad/mullvadvpn/ui/widget/CustomItemAnimator.kt
+++ b/android/src/main/kotlin/net/mullvad/mullvadvpn/ui/widget/CustomItemAnimator.kt
@@ -1,10 +1,13 @@
package net.mullvad.mullvadvpn.ui.widget
import android.support.v7.widget.DefaultItemAnimator
+import android.support.v7.widget.RecyclerView.LayoutManager
import android.support.v7.widget.RecyclerView.ViewHolder
import kotlin.math.round
class CustomItemAnimator : DefaultItemAnimator() {
+ var layoutManager: LayoutManager? = null
+
var onMove: ((Int, Int) -> Unit)? = null
override fun animateMove(
@@ -16,17 +19,20 @@ class CustomItemAnimator : DefaultItemAnimator() {
): 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)
+ if (view == layoutManager?.getChildAt(0)) {
+ 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())
+ onMove?.invoke(deltaX.toInt(), deltaY.toInt())
- translationX -= deltaX
- translationY -= deltaY
+ translationX -= deltaX
+ translationY -= deltaY
+ }
}
return true
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 ac97b4d831..3e0c4d1d70 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
@@ -2,10 +2,13 @@ package net.mullvad.mullvadvpn.ui.widget
import android.content.Context
import android.support.v7.widget.RecyclerView
+import android.support.v7.widget.RecyclerView.LayoutManager
import android.util.AttributeSet
import net.mullvad.mullvadvpn.util.ListenableScrollableView
class CustomRecyclerView : RecyclerView, ListenableScrollableView {
+ private val customItemAnimator = CustomItemAnimator()
+
override var horizontalScrollOffset = 0
override var verticalScrollOffset = 0
@@ -20,13 +23,19 @@ class CustomRecyclerView : RecyclerView, ListenableScrollableView {
}
init {
- itemAnimator = CustomItemAnimator().apply {
+ itemAnimator = customItemAnimator.apply {
onMove = { horizontalDelta, verticalDelta ->
dispatchScrollEvent(horizontalDelta, verticalDelta)
}
}
}
+ override fun setLayoutManager(layoutManager: LayoutManager?) {
+ super.setLayoutManager(layoutManager)
+
+ customItemAnimator.layoutManager = layoutManager
+ }
+
override fun onScrolled(horizontalDelta: Int, verticalDelta: Int) {
super.onScrolled(horizontalDelta, verticalDelta)