Skip to content

Commit

Permalink
Use Density hack to improve swipe dismiss
Browse files Browse the repository at this point in the history
  • Loading branch information
jocmp committed Oct 20, 2024
1 parent b5788ec commit 211df80
Show file tree
Hide file tree
Showing 2 changed files with 30 additions and 4 deletions.
Original file line number Diff line number Diff line change
@@ -1,11 +1,8 @@
package com.capyreader.app.ui.articles.list

import android.content.Context
import androidx.compose.material.icons.Icons
import androidx.compose.material.icons.automirrored.rounded.OpenInNew
import androidx.compose.material3.SwipeToDismissBoxState
import androidx.compose.material3.SwipeToDismissBoxValue
import androidx.compose.material3.rememberSwipeToDismissBoxState
import androidx.compose.runtime.Composable
import androidx.compose.runtime.getValue
import androidx.compose.runtime.remember
Expand All @@ -17,6 +14,7 @@ import com.capyreader.app.common.openLinkExternally
import com.capyreader.app.ui.articles.LocalArticleActions
import com.capyreader.app.ui.components.ArticleAction
import com.capyreader.app.ui.components.readAction
import com.capyreader.app.ui.components.rememberNoFlingSwipeToDismissBoxState
import com.capyreader.app.ui.components.starAction
import com.capyreader.app.ui.settings.panels.RowSwipeOption
import com.jocmp.capy.Article
Expand All @@ -37,7 +35,7 @@ internal fun rememberArticleRowSwipeState(
appPreferences: AppPreferences = koinInject(),
): ArticleRowSwipeState {
val actions = LocalArticleActions.current
val state = rememberSwipeToDismissBoxState()
val state = rememberNoFlingSwipeToDismissBoxState()
val context = LocalContext.current
val swipeStart by appPreferences.articleListOptions.swipeStart.asState()
val swipeEnd by appPreferences.articleListOptions.swipeEnd.asState()
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,28 @@
package com.capyreader.app.ui.components

import androidx.compose.material3.SwipeToDismissBoxDefaults
import androidx.compose.material3.SwipeToDismissBoxState
import androidx.compose.material3.SwipeToDismissBoxValue
import androidx.compose.runtime.Composable
import androidx.compose.runtime.saveable.rememberSaveable
import androidx.compose.ui.unit.Density

// https://issuetracker.google.com/issues/252334353#comment16
@Composable
fun rememberNoFlingSwipeToDismissBoxState(
initialValue: SwipeToDismissBoxValue = SwipeToDismissBoxValue.Settled,
confirmValueChange: (SwipeToDismissBoxValue) -> Boolean = { true },
positionalThreshold: (totalDistance: Float) -> Float =
SwipeToDismissBoxDefaults.positionalThreshold,
): SwipeToDismissBoxState {
val density = Density(Float.POSITIVE_INFINITY) // LocalDensity.current
return rememberSaveable(
saver = SwipeToDismissBoxState.Saver(
confirmValueChange = confirmValueChange,
density = density,
positionalThreshold = positionalThreshold
)
) {
SwipeToDismissBoxState(initialValue, density, confirmValueChange, positionalThreshold)
}
}

0 comments on commit 211df80

Please sign in to comment.