Skip to content

Commit 2ebca9f

Browse files
feat(gestures): Customizable Long Press Speed (#202)
* Long Press Speed Adjustment with More Options * Modify the default value of long-press speed to 2x and cancel the 0.25 increment. * Using the '.toFixed' function * Can it solve the build failed?
1 parent 4e9b2be commit 2ebca9f

File tree

8 files changed

+35
-19
lines changed

8 files changed

+35
-19
lines changed

app/src/main/java/live/mehiz/mpvkt/preferences/PlayerPreferences.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ class PlayerPreferences(
1212
val invertDuration = preferenceStore.getBoolean("invert_duration")
1313
val drawOverDisplayCutout = preferenceStore.getBoolean("draw_over_cutout", true)
1414

15-
val holdForDoubleSpeed = preferenceStore.getBoolean("hold_for_double_speed", true)
15+
val holdForMultipleSpeed = preferenceStore.getFloat("hold_for_multiple_speed", 2f)
1616
val horizontalSeekGesture = preferenceStore.getBoolean("horizontal_seek_gesture", true)
1717
val showSeekBarWhenSeeking = preferenceStore.getBoolean("show_seekbar_when_seeking")
1818
val preciseSeeking = preferenceStore.getBoolean("precise_seeking")

app/src/main/java/live/mehiz/mpvkt/ui/player/PlayerEnums.kt

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -76,7 +76,7 @@ enum class Panels {
7676

7777
sealed class PlayerUpdates {
7878
data object None : PlayerUpdates()
79-
data object DoubleSpeed : PlayerUpdates()
79+
data object MultipleSpeed : PlayerUpdates()
8080
data object AspectRatio : PlayerUpdates()
8181
data class ShowText(val value: String) : PlayerUpdates()
8282
}

app/src/main/java/live/mehiz/mpvkt/ui/player/controls/GestureHandler.kt

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -75,7 +75,7 @@ fun GestureHandler(
7575
delay(100)
7676
viewModel.hideSeekBar()
7777
}
78-
val doubleSpeedGesture by playerPreferences.holdForDoubleSpeed.collectAsState()
78+
val multipleSpeedGesture by playerPreferences.holdForMultipleSpeed.collectAsState()
7979
val brightnessGesture = playerPreferences.brightnessGesture.get()
8080
val volumeGesture by playerPreferences.volumeGesture.collectAsState()
8181
val swapVolumeAndBrightness by playerPreferences.swapVolumeAndBrightness.collectAsState()
@@ -142,13 +142,13 @@ fun GestureHandler(
142142
interactionSource.emit(PressInteraction.Release(press))
143143
},
144144
onLongPress = {
145-
if (!doubleSpeedGesture || areControlsLocked) return@detectTapGestures
145+
if (multipleSpeedGesture == 0f || areControlsLocked) return@detectTapGestures
146146
if (!isLongPressing && !viewModel.paused.value) {
147147
originalSpeed = viewModel.playbackSpeed.value
148148
haptics.performHapticFeedback(HapticFeedbackType.LongPress)
149149
isLongPressing = true
150-
MPVLib.setPropertyDouble("speed", 2.0)
151-
viewModel.playerUpdate.update { PlayerUpdates.DoubleSpeed }
150+
MPVLib.setPropertyDouble("speed", multipleSpeedGesture.toDouble())
151+
viewModel.playerUpdate.update { PlayerUpdates.MultipleSpeed }
152152
}
153153
},
154154
)

app/src/main/java/live/mehiz/mpvkt/ui/player/controls/PlayerControls.kt

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -76,7 +76,7 @@ import live.mehiz.mpvkt.ui.player.Sheets
7676
import live.mehiz.mpvkt.ui.player.VideoAspect
7777
import live.mehiz.mpvkt.ui.player.controls.components.BrightnessSlider
7878
import live.mehiz.mpvkt.ui.player.controls.components.ControlsButton
79-
import live.mehiz.mpvkt.ui.player.controls.components.DoubleSpeedPlayerUpdate
79+
import live.mehiz.mpvkt.ui.player.controls.components.MultipleSpeedPlayerUpdate
8080
import live.mehiz.mpvkt.ui.player.controls.components.SeekbarWithTimers
8181
import live.mehiz.mpvkt.ui.player.controls.components.TextPlayerUpdate
8282
import live.mehiz.mpvkt.ui.player.controls.components.VolumeSlider
@@ -288,11 +288,11 @@ fun PlayerControls(
288288
displayAsPercentage = displayVolumeAsPercentage,
289289
)
290290
}
291-
291+
val holdForMultipleSpeed by playerPreferences.holdForMultipleSpeed.collectAsState()
292292
val currentPlayerUpdate by viewModel.playerUpdate.collectAsState()
293293
val aspectRatio by playerPreferences.videoAspect.collectAsState()
294294
LaunchedEffect(currentPlayerUpdate, aspectRatio) {
295-
if (currentPlayerUpdate is PlayerUpdates.DoubleSpeed || currentPlayerUpdate is PlayerUpdates.None) {
295+
if (currentPlayerUpdate is PlayerUpdates.MultipleSpeed || currentPlayerUpdate is PlayerUpdates.None) {
296296
return@LaunchedEffect
297297
}
298298
delay(2000)
@@ -308,7 +308,7 @@ fun PlayerControls(
308308
},
309309
) {
310310
when (currentPlayerUpdate) {
311-
is PlayerUpdates.DoubleSpeed -> DoubleSpeedPlayerUpdate()
311+
is PlayerUpdates.MultipleSpeed -> MultipleSpeedPlayerUpdate(currentSpeed = holdForMultipleSpeed)
312312
is PlayerUpdates.AspectRatio -> TextPlayerUpdate(stringResource(aspectRatio.titleRes))
313313
is PlayerUpdates.ShowText -> TextPlayerUpdate((currentPlayerUpdate as PlayerUpdates.ShowText).value)
314314
else -> {}

app/src/main/java/live/mehiz/mpvkt/ui/player/controls/components/PlayerUpdates.kt

Lines changed: 5 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -50,15 +50,16 @@ fun TextPlayerUpdate(
5050
}
5151

5252
@Composable
53-
fun DoubleSpeedPlayerUpdate(
53+
fun MultipleSpeedPlayerUpdate(
54+
currentSpeed: Float,
5455
modifier: Modifier = Modifier
5556
) {
5657
PlayerUpdate(modifier) {
5758
Row(
5859
verticalAlignment = Alignment.Bottom,
5960
) {
6061
Text(
61-
stringResource(R.string.player_speed, 2f),
62+
stringResource(R.string.player_speed, currentSpeed),
6263
fontWeight = FontWeight.Bold,
6364
fontSize = 20.sp,
6465
)
@@ -72,6 +73,6 @@ fun DoubleSpeedPlayerUpdate(
7273

7374
@Composable
7475
@Preview
75-
private fun PreviewDoubleSpeedPlayerUpdate() {
76-
DoubleSpeedPlayerUpdate()
76+
private fun PreviewMultipleSpeedPlayerUpdate() {
77+
MultipleSpeedPlayerUpdate(currentSpeed = 2f)
7778
}

app/src/main/java/live/mehiz/mpvkt/ui/preferences/PlayerPreferencesScreen.kt

Lines changed: 18 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -27,6 +27,7 @@ import live.mehiz.mpvkt.preferences.PlayerPreferences
2727
import live.mehiz.mpvkt.preferences.preference.collectAsState
2828
import live.mehiz.mpvkt.presentation.Screen
2929
import live.mehiz.mpvkt.ui.player.PlayerOrientation
30+
import live.mehiz.mpvkt.ui.player.controls.components.sheets.toFixed
3031
import me.zhanghai.compose.preference.ListPreference
3132
import me.zhanghai.compose.preference.PreferenceCategory
3233
import me.zhanghai.compose.preference.ProvidePreferenceLocals
@@ -156,11 +157,23 @@ object PlayerPreferencesScreen : Screen() {
156157
onValueChange = preferences.volumeGesture::set,
157158
title = { Text(stringResource(R.string.pref_player_gestures_volume)) },
158159
)
159-
val holdForDoubleSpeed by preferences.holdForDoubleSpeed.collectAsState()
160-
SwitchPreference(
161-
value = holdForDoubleSpeed,
162-
onValueChange = preferences.holdForDoubleSpeed::set,
163-
title = { Text(stringResource(R.string.pref_player_gestures_hold_for_double_speed)) },
160+
val holdForMultipleSpeed by preferences.holdForMultipleSpeed.collectAsState()
161+
SliderPreference(
162+
value = holdForMultipleSpeed,
163+
onValueChange = { preferences.holdForMultipleSpeed.set(it.toFixed(2)) },
164+
title = { Text(stringResource(R.string.pref_player_gestures_hold_for_multiple_speed)) },
165+
valueRange = 0f..6f,
166+
summary = {
167+
Text(
168+
if (holdForMultipleSpeed == 0F) {
169+
stringResource(R.string.generic_disabled)
170+
} else {
171+
"%.2fx".format(holdForMultipleSpeed)
172+
},
173+
)
174+
},
175+
onSliderValueChange = { preferences.holdForMultipleSpeed.set(it.toFixed(2)) },
176+
sliderValue = holdForMultipleSpeed,
164177
)
165178
PreferenceCategory(
166179
title = { Text(stringResource(R.string.pref_player_controls)) },

app/src/main/res/values-zh-rCN/strings.xml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -48,6 +48,7 @@
4848
<string name="pref_player_gestures_brightness">亮度调整手势</string>
4949
<string name="pref_player_gestures_volume">音量调整手势</string>
5050
<string name="pref_player_gestures_hold_for_double_speed">长按二倍速</string>
51+
<string name="pref_player_gestures_hold_for_multiple_speed">长按多倍速</string>
5152
<string name="pref_player_controls">控制</string>
5253
<string name="pref_player_controls_allow_gestures_in_panels">允许在面板中使用手势</string>
5354
<string name="pref_player_controls_show_loading_circle">显示加载动画</string>

app/src/main/res/values/strings.xml

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -56,6 +56,7 @@
5656
<string name="pref_player_gestures_brightness">Brightness gestures</string>
5757
<string name="pref_player_gestures_volume">Volume gestures</string>
5858
<string name="pref_player_gestures_hold_for_double_speed">Hold for 2x speed</string>
59+
<string name="pref_player_gestures_hold_for_multiple_speed">Hold for multi - x speed</string>
5960

6061
<string name="pref_player_controls">Controls</string>
6162
<string name="pref_player_controls_allow_gestures_in_panels">Allow gestures in panels</string>

0 commit comments

Comments
 (0)