Revert "Revert "Drop experimental touch slop factor setting" (#1162)"

This reverts commit a4619547f1.
This commit is contained in:
FooIbar authored and renovate[bot] committed 2024-05-11 03:21:37 +08:00
1 parent 6298e501cd
commit c750016034
11 files changed
+82 -161

No files matched your search

@@ -171,9 +171,6 @@ object Settings : DataStorePreferences(null) {
var language by stringPref("app_language", "system").observed { updateWhenLocaleChanges() }
var lastUpdateTime by longPref("last_update_time", 0)
// TODO: Remove this after swipe gestures are correctly handled in compose
var touchSlopFactor = intPref("touch_slop", 3)
// Tachiyomi Reader
var newReader by boolPref("new_compose_reader", false)
@@ -97,7 +97,6 @@ import androidx.compose.ui.layout.onGloballyPositioned
import androidx.compose.ui.layout.onSizeChanged
import androidx.compose.ui.platform.LocalConfiguration
import androidx.compose.ui.platform.LocalDensity
import androidx.compose.ui.platform.LocalViewConfiguration
import androidx.compose.ui.res.painterResource
import androidx.compose.ui.res.stringResource
import androidx.compose.ui.unit.Dp
@@ -134,7 +133,6 @@ import com.hippo.ehviewer.ui.settings.showNewVersion
import com.hippo.ehviewer.ui.tools.DialogState
import com.hippo.ehviewer.ui.tools.LabeledCheckbox
import com.hippo.ehviewer.ui.tools.LocalDialogState
import com.hippo.ehviewer.ui.tools.LocalTouchSlopProvider
import com.hippo.ehviewer.ui.tools.LocalWindowSizeClass
import com.hippo.ehviewer.updater.AppUpdater
import com.hippo.ehviewer.util.addTextToClipboard
@@ -353,7 +351,6 @@ class MainActivity : EhActivity() {
val lockDrawerHandle = remember { mutableStateListOf<Int>() }
var snackbarFabPadding by remember { mutableStateOf(0.dp) }
val drawerLocked = lockDrawerHandle.isNotEmpty()
val viewConfiguration = LocalViewConfiguration.current
val density = LocalDensity.current
val windowSizeClass = calculateWindowSizeClass(this)
CompositionLocalProvider(
@@ -376,92 +373,85 @@ class MainActivity : EhActivity() {
)
},
) {
val touchSlopFactor by Settings.touchSlopFactor.collectAsState { it.toFloat() }
LocalTouchSlopProvider(touchSlopFactor) {
var minOffset by remember {
mutableFloatStateOf(-with(density) { DrawerDefaults.MaximumDrawerWidth.toPx() })
}
ModalNavigationDrawer(
drawerContent = {
ModalDrawerSheet(
drawerState = navDrawerState,
modifier = Modifier.widthIn(max = (configuration.screenWidthDp - 56).dp)
.onSizeChanged { minOffset = -it.width.toFloat() },
windowInsets = WindowInsets.systemBars.only(WindowInsetsSides.Start),
var minOffset by remember {
mutableFloatStateOf(-with(density) { DrawerDefaults.MaximumDrawerWidth.toPx() })
}
ModalNavigationDrawer(
drawerContent = {
ModalDrawerSheet(
drawerState = navDrawerState,
modifier = Modifier.widthIn(max = (configuration.screenWidthDp - 56).dp)
.onSizeChanged { minOffset = -it.width.toFloat() },
windowInsets = WindowInsets.systemBars.only(WindowInsetsSides.Start),
) {
val scrollState = rememberScrollState()
Column(
modifier = Modifier.verticalScroll(scrollState)
.windowInsetsPadding(WindowInsets.systemBars.only(WindowInsetsSides.Bottom)),
) {
val scrollState = rememberScrollState()
Column(
modifier = Modifier.verticalScroll(scrollState)
.windowInsetsPadding(WindowInsets.systemBars.only(WindowInsetsSides.Bottom)),
) {
Image(
painter = painterResource(id = R.drawable.sadpanda_low_poly),
contentDescription = null,
modifier = Modifier.fillMaxWidth().padding(bottom = 8.dp),
contentScale = ContentScale.FillWidth,
Image(
painter = painterResource(id = R.drawable.sadpanda_low_poly),
contentDescription = null,
modifier = Modifier.fillMaxWidth().padding(bottom = 8.dp),
contentScale = ContentScale.FillWidth,
)
navItems.forEach { (direction, stringId, icon) ->
NavigationDrawerItem(
label = {
Text(text = stringResource(id = stringId))
},
selected = currentDestination === direction,
onClick = {
navigator.navigate(direction)
closeDrawer()
},
modifier = Modifier.padding(horizontal = 12.dp),
icon = {
Icon(imageVector = icon, contentDescription = null)
},
)
navItems.forEach { (direction, stringId, icon) ->
NavigationDrawerItem(
label = {
Text(text = stringResource(id = stringId))
},
selected = currentDestination === direction,
onClick = {
navigator.navigate(direction)
closeDrawer()
},
modifier = Modifier.padding(horizontal = 12.dp),
icon = {
Icon(imageVector = icon, contentDescription = null)
},
)
}
}
}
}
},
drawerState = navDrawerState,
gesturesEnabled = !drawerLocked || navDrawerState.isOpen,
) {
val sheet = sideSheet.firstOrNull()
val radius by remember {
snapshotFlow {
val step = calculateFraction(minOffset, 0f, navDrawerState.currentOffset)
with(density) { lerp(0, 10, step).dp.toPx() }
}
}.collectAsState(0f)
ModalSideDrawer(
drawerContent = {
if (sheet != null) {
ModalDrawerSheet(
modifier = Modifier.widthIn(max = (configuration.screenWidthDp - 112).dp),
drawerShape = ShapeDefaults.Large.copy(topEnd = CornerSize(0), bottomEnd = CornerSize(0)),
windowInsets = WindowInsets.systemBars.only(WindowInsetsSides.Top + WindowInsetsSides.End),
) {
sheet(sideSheetState)
}
}
},
drawerState = navDrawerState,
gesturesEnabled = !drawerLocked || navDrawerState.isOpen,
modifier = Modifier.graphicsLayer {
if (radius != 0f) {
renderEffect = BlurEffect(radius, radius, TileMode.Clamp)
shape = RectangleShape
clip = true
}
},
drawerState = sideSheetState,
gesturesEnabled = sheet != null && !drawerLocked,
) {
val sheet = sideSheet.firstOrNull()
val radius by remember {
snapshotFlow {
val step = calculateFraction(minOffset, 0f, navDrawerState.currentOffset)
with(density) { lerp(0, 10, step).dp.toPx() }
}
}.collectAsState(0f)
ModalSideDrawer(
drawerContent = {
if (sheet != null) {
ModalDrawerSheet(
modifier = Modifier.widthIn(max = (configuration.screenWidthDp - 112).dp),
drawerShape = ShapeDefaults.Large.copy(topEnd = CornerSize(0), bottomEnd = CornerSize(0)),
windowInsets = WindowInsets.systemBars.only(WindowInsetsSides.Top + WindowInsetsSides.End),
) {
CompositionLocalProvider(LocalViewConfiguration provides viewConfiguration) {
sheet(sideSheetState)
}
}
}
},
modifier = Modifier.graphicsLayer {
if (radius != 0f) {
renderEffect = BlurEffect(radius, radius, TileMode.Clamp)
shape = RectangleShape
clip = true
}
},
drawerState = sideSheetState,
gesturesEnabled = sheet != null && !drawerLocked,
) {
CompositionLocalProvider(LocalViewConfiguration provides viewConfiguration) {
DestinationsNavHost(
navGraph = NavGraphs.root,
startRoute = if (Settings.needSignIn) SignInScreenDestination else StartDestination,
defaultTransitions = rememberEhNavAnim(),
navController = navController,
)
}
}
DestinationsNavHost(
navGraph = NavGraphs.root,
startRoute = if (Settings.needSignIn) SignInScreenDestination else StartDestination,
defaultTransitions = rememberEhNavAnim(),
navController = navController,
)
}
}
}
@@ -48,6 +48,7 @@ import androidx.compose.material3.Icon
import androidx.compose.material3.IconButton
import androidx.compose.material3.ListItem
import androidx.compose.material3.MaterialTheme
import androidx.compose.material3.SwipeToDismissBox
import androidx.compose.material3.SwipeToDismissBoxDefaults
import androidx.compose.material3.SwipeToDismissBoxState
import androidx.compose.material3.SwipeToDismissBoxValue
@@ -110,7 +111,6 @@ import com.hippo.ehviewer.ui.tools.Deferred
import com.hippo.ehviewer.ui.tools.FastScrollLazyColumn
import com.hippo.ehviewer.ui.tools.FastScrollLazyVerticalStaggeredGrid
import com.hippo.ehviewer.ui.tools.HapticFeedbackType
import com.hippo.ehviewer.ui.tools.SwipeToDismissBox2
import com.hippo.ehviewer.ui.tools.delegateSnapshotUpdate
import com.hippo.ehviewer.ui.tools.rememberHapticFeedback
import com.hippo.ehviewer.ui.tools.rememberInVM
@@ -356,9 +356,10 @@ fun DownloadsScreen(navigator: DestinationsNavigator) = composing(navigator) {
}
}
ReorderableItem(reorderableLabelState, enabled = editEnable, key = id) { isDragging ->
SwipeToDismissBox2(
SwipeToDismissBox(
state = dismissState,
backgroundContent = {},
enableDismissFromStartToEnd = false,
gesturesEnabled = editEnable,
) {
val elevation by animateDpAsState(
@@ -44,6 +44,7 @@ import androidx.compose.material3.Icon
import androidx.compose.material3.IconButton
import androidx.compose.material3.ListItem
import androidx.compose.material3.MaterialTheme
import androidx.compose.material3.SwipeToDismissBox
import androidx.compose.material3.SwipeToDismissBoxDefaults
import androidx.compose.material3.SwipeToDismissBoxState
import androidx.compose.material3.SwipeToDismissBoxValue
@@ -123,7 +124,6 @@ import com.hippo.ehviewer.ui.main.ImageSearch
import com.hippo.ehviewer.ui.main.SearchFilter
import com.hippo.ehviewer.ui.tools.Deferred
import com.hippo.ehviewer.ui.tools.HapticFeedbackType
import com.hippo.ehviewer.ui.tools.SwipeToDismissBox2
import com.hippo.ehviewer.ui.tools.animateFloatMergePredictiveBackAsState
import com.hippo.ehviewer.ui.tools.delegateSnapshotUpdate
import com.hippo.ehviewer.ui.tools.foldToLoadResult
@@ -409,9 +409,10 @@ fun GalleryListScreen(lub: ListUrlBuilder, navigator: DestinationsNavigator) = c
}
}
}
SwipeToDismissBox2(
SwipeToDismissBox(
state = dismissState,
backgroundContent = {},
enableDismissFromStartToEnd = false,
) {
val elevation by animateDpAsState(
if (isDragging) {
@@ -13,6 +13,7 @@ import androidx.compose.material.icons.filled.ClearAll
import androidx.compose.material3.Icon
import androidx.compose.material3.IconButton
import androidx.compose.material3.MaterialTheme
import androidx.compose.material3.SwipeToDismissBox
import androidx.compose.material3.SwipeToDismissBoxValue
import androidx.compose.material3.Text
import androidx.compose.material3.rememberSwipeToDismissBoxState
@@ -52,7 +53,6 @@ import com.hippo.ehviewer.ui.main.GalleryInfoListItem
import com.hippo.ehviewer.ui.main.plus
import com.hippo.ehviewer.ui.tools.Deferred
import com.hippo.ehviewer.ui.tools.FastScrollLazyColumn
import com.hippo.ehviewer.ui.tools.SwipeToDismissBox2
import com.hippo.ehviewer.ui.tools.rememberInVM
import com.hippo.ehviewer.ui.tools.thenIf
import com.hippo.ehviewer.util.FavouriteStatusRouter
@@ -141,10 +141,11 @@ fun HistoryScreen(navigator: DestinationsNavigator) = composing(navigator) {
true
},
)
SwipeToDismissBox2(
SwipeToDismissBox(
state = dismissState,
backgroundContent = {},
modifier = Modifier.thenIf(animateItems) { animateItem() },
enableDismissFromStartToEnd = false,
) {
GalleryInfoListItem(
onClick = { navigate(info.asDst()) },
@@ -152,13 +152,6 @@ fun AdvancedScreen(navigator: DestinationsNavigator) {
title = stringResource(id = R.string.animate_items),
summary = stringResource(id = R.string.animate_items_summary),
)
IntSliderPreference(
maxValue = 5,
minValue = 1,
title = stringResource(id = R.string.settings_advanced_touch_slop),
summary = stringResource(id = R.string.settings_advanced_touch_slop_summary),
value = Settings.touchSlopFactor::value,
)
var userAgent by Settings::userAgent.observed
val userAgentTitle = stringResource(id = R.string.user_agent)
Preference(
@@ -1,19 +0,0 @@
package com.hippo.ehviewer.ui.tools
import androidx.compose.runtime.Composable
import androidx.compose.runtime.CompositionLocalProvider
import androidx.compose.ui.platform.LocalViewConfiguration
import androidx.compose.ui.platform.ViewConfiguration
// TODO: https://issuetracker.google.com/issues/269627294
@Composable
fun LocalTouchSlopProvider(factor: Float, content: @Composable () -> Unit) {
val current = LocalViewConfiguration.current
CompositionLocalProvider(
value = LocalViewConfiguration provides object : ViewConfiguration by current {
override val touchSlop: Float
get() = current.touchSlop * factor
},
content = content,
)
}
@@ -1,37 +0,0 @@
package com.hippo.ehviewer.ui.tools
import androidx.compose.foundation.layout.RowScope
import androidx.compose.material3.SwipeToDismissBox
import androidx.compose.material3.SwipeToDismissBoxState
import androidx.compose.runtime.Composable
import androidx.compose.runtime.CompositionLocalProvider
import androidx.compose.runtime.getValue
import androidx.compose.ui.Modifier
import androidx.compose.ui.platform.LocalViewConfiguration
import com.hippo.ehviewer.Settings
import com.hippo.ehviewer.collectAsState
@Composable
fun SwipeToDismissBox2(
state: SwipeToDismissBoxState,
backgroundContent: @Composable RowScope.() -> Unit,
modifier: Modifier = Modifier,
gesturesEnabled: Boolean = true,
content: @Composable RowScope.() -> Unit,
) {
val viewConfiguration = LocalViewConfiguration.current
val touchSlopFactor by Settings.touchSlopFactor.collectAsState { it.toFloat() }
LocalTouchSlopProvider(touchSlopFactor) {
SwipeToDismissBox(
state = state,
backgroundContent = backgroundContent,
modifier = modifier,
enableDismissFromStartToEnd = false,
gesturesEnabled = gesturesEnabled,
) {
CompositionLocalProvider(LocalViewConfiguration provides viewConfiguration) {
content()
}
}
}
}
@@ -355,8 +355,6 @@
<string name="settings_advanced_dump_logcat_to">已保存日志至 %s</string>
<string name="settings_advanced_read_cache_size">阅读缓存大小</string>
<string name="settings_advanced_app_language_title">App 界面语言</string>
<string name="settings_advanced_touch_slop">[实验性] 触摸溢出系数</string>
<string name="settings_advanced_touch_slop_summary">增大此项将降低滑动手势敏感度</string>
<string name="settings_advanced_export_data">导出数据</string>
<string name="settings_advanced_export_data_summary">保存数据至外置存储器,例如下载列表,快速搜索列表</string>
<string name="settings_advanced_export_data_to">已导出数据至 %s</string>
@@ -347,8 +347,6 @@
<string name="settings_advanced_dump_logcat_to">已將紀錄檔儲存至 %s</string>
<string name="settings_advanced_read_cache_size">閱讀快取大小</string>
<string name="settings_advanced_app_language_title">應用程式介面語言</string>
<string name="settings_advanced_touch_slop">[測試] 觸控溢出係數</string>
<string name="settings_advanced_touch_slop_summary">提高係數將降低滑動手勢敏感度</string>
<string name="settings_advanced_export_data">匯出檔案</string>
<string name="settings_advanced_export_data_summary">儲存資料至外接儲存設備,例如下載列表,快速搜尋列表</string>
<string name="settings_advanced_export_data_to">已匯出資料至 %s</string>
-2
View File
@@ -398,8 +398,6 @@
<string name="settings_advanced_dump_logcat_to">Logcat dumped to %s</string>
<string name="settings_advanced_read_cache_size">Read cache size</string>
<string name="settings_advanced_app_language_title">App language</string>
<string name="settings_advanced_touch_slop">[Experimental] Touch slop factor</string>
<string name="settings_advanced_touch_slop_summary">Increasing this will reduce swipe gesture sensitivity</string>
<string name="settings_advanced_export_data">Export data</string>
<string name="settings_advanced_export_data_summary">Save data like download list, quick search list, to external storage</string>
<string name="settings_advanced_export_data_to">Exported data to %s</string>