diff --git a/extensions/youtube/src/main/java/app/revanced/extension/youtube/settings/Settings.java b/extensions/youtube/src/main/java/app/revanced/extension/youtube/settings/Settings.java index 75128e3dd..dfc727bda 100644 --- a/extensions/youtube/src/main/java/app/revanced/extension/youtube/settings/Settings.java +++ b/extensions/youtube/src/main/java/app/revanced/extension/youtube/settings/Settings.java @@ -319,6 +319,7 @@ public class Settings extends BaseSettings { parentsAny(SWIPE_BRIGHTNESS, SWIPE_VOLUME)); public static final IntegerSetting SWIPE_MAGNITUDE_THRESHOLD = new IntegerSetting("revanced_swipe_threshold", 30, true, parentsAny(SWIPE_BRIGHTNESS, SWIPE_VOLUME)); + public static final IntegerSetting SWIPE_VOLUME_SENSITIVITY = new IntegerSetting("revanced_swipe_volume_sensitivity", 1, true, parent(SWIPE_VOLUME)); public static final BooleanSetting SWIPE_SHOW_CIRCULAR_OVERLAY = new BooleanSetting("revanced_swipe_show_circular_overlay", FALSE, true, parentsAny(SWIPE_BRIGHTNESS, SWIPE_VOLUME)); public static final BooleanSetting SWIPE_OVERLAY_MINIMAL_STYLE = new BooleanSetting("revanced_swipe_overlay_minimal_style", FALSE, true, diff --git a/extensions/youtube/src/main/java/app/revanced/extension/youtube/swipecontrols/SwipeControlsConfigurationProvider.kt b/extensions/youtube/src/main/java/app/revanced/extension/youtube/swipecontrols/SwipeControlsConfigurationProvider.kt index 08e7e0480..697926244 100644 --- a/extensions/youtube/src/main/java/app/revanced/extension/youtube/swipecontrols/SwipeControlsConfigurationProvider.kt +++ b/extensions/youtube/src/main/java/app/revanced/extension/youtube/swipecontrols/SwipeControlsConfigurationProvider.kt @@ -1,6 +1,5 @@ package app.revanced.extension.youtube.swipecontrols -import android.content.Context import android.graphics.Color import app.revanced.extension.shared.StringRef.str import app.revanced.extension.shared.Utils @@ -9,12 +8,8 @@ import app.revanced.extension.youtube.shared.PlayerType /** * provider for configuration for volume and brightness swipe controls - * - * @param context the context to create in */ -class SwipeControlsConfigurationProvider( - private val context: Context, -) { +class SwipeControlsConfigurationProvider { //region swipe enable /** * should swipe controls be enabled? (global setting) @@ -60,6 +55,23 @@ class SwipeControlsConfigurationProvider( */ val swipeMagnitudeThreshold: Int get() = Settings.SWIPE_MAGNITUDE_THRESHOLD.get() + + /** + * How much volume will change by single swipe. + * If it is set to 0, it will reset to the default value because 0 would disable swiping. + * */ + val volumeSwipeSensitivity: Int + get() { + val sensitivity = Settings.SWIPE_VOLUME_SENSITIVITY.get() + + if (sensitivity < 1) { + Settings.SWIPE_VOLUME_SENSITIVITY.resetToDefault() + + return Settings.SWIPE_VOLUME_SENSITIVITY.get() + } + + return sensitivity + } //endregion //region overlay adjustments diff --git a/extensions/youtube/src/main/java/app/revanced/extension/youtube/swipecontrols/SwipeControlsHostActivity.kt b/extensions/youtube/src/main/java/app/revanced/extension/youtube/swipecontrols/SwipeControlsHostActivity.kt index c889c6d4c..10b70ed95 100644 --- a/extensions/youtube/src/main/java/app/revanced/extension/youtube/swipecontrols/SwipeControlsHostActivity.kt +++ b/extensions/youtube/src/main/java/app/revanced/extension/youtube/swipecontrols/SwipeControlsHostActivity.kt @@ -127,7 +127,7 @@ class SwipeControlsHostActivity : Activity() { private fun initialize() { // create controllers printDebug { "initializing swipe controls controllers" } - config = SwipeControlsConfigurationProvider(this) + config = SwipeControlsConfigurationProvider() keys = VolumeKeysController(this) audio = createAudioController() screen = createScreenController() diff --git a/extensions/youtube/src/main/java/app/revanced/extension/youtube/swipecontrols/controller/VolumeKeysController.kt b/extensions/youtube/src/main/java/app/revanced/extension/youtube/swipecontrols/controller/VolumeKeysController.kt index d2b8788df..5d206dfa9 100644 --- a/extensions/youtube/src/main/java/app/revanced/extension/youtube/swipecontrols/controller/VolumeKeysController.kt +++ b/extensions/youtube/src/main/java/app/revanced/extension/youtube/swipecontrols/controller/VolumeKeysController.kt @@ -41,7 +41,7 @@ class VolumeKeysController( private fun handleVolumeKeyEvent(event: KeyEvent, volumeUp: Boolean): Boolean { if (event.action == KeyEvent.ACTION_DOWN) { controller.audio?.apply { - volume += if (volumeUp) 1 else -1 + volume += controller.config.volumeSwipeSensitivity * if (volumeUp) 1 else -1 controller.overlay.onVolumeChanged(volume, maxVolume) } } diff --git a/extensions/youtube/src/main/java/app/revanced/extension/youtube/swipecontrols/controller/gesture/core/BaseGestureController.kt b/extensions/youtube/src/main/java/app/revanced/extension/youtube/swipecontrols/controller/gesture/core/BaseGestureController.kt index 286a6fe43..a07cf7490 100644 --- a/extensions/youtube/src/main/java/app/revanced/extension/youtube/swipecontrols/controller/gesture/core/BaseGestureController.kt +++ b/extensions/youtube/src/main/java/app/revanced/extension/youtube/swipecontrols/controller/gesture/core/BaseGestureController.kt @@ -24,6 +24,7 @@ abstract class BaseGestureController( controller.overlay, 10, 1, + controller.config.volumeSwipeSensitivity, ) { /** diff --git a/extensions/youtube/src/main/java/app/revanced/extension/youtube/swipecontrols/controller/gesture/core/VolumeAndBrightnessScroller.kt b/extensions/youtube/src/main/java/app/revanced/extension/youtube/swipecontrols/controller/gesture/core/VolumeAndBrightnessScroller.kt index e398696df..ec50aedd7 100644 --- a/extensions/youtube/src/main/java/app/revanced/extension/youtube/swipecontrols/controller/gesture/core/VolumeAndBrightnessScroller.kt +++ b/extensions/youtube/src/main/java/app/revanced/extension/youtube/swipecontrols/controller/gesture/core/VolumeAndBrightnessScroller.kt @@ -41,6 +41,7 @@ interface VolumeAndBrightnessScroller { * @param overlayController overlay controller instance * @param volumeDistance unit distance for volume scrolling, in dp * @param brightnessDistance unit distance for brightness scrolling, in dp + * @param volumeSwipeSensitivity how much volume will change by single swipe */ class VolumeAndBrightnessScrollerImpl( context: Context, @@ -49,6 +50,7 @@ class VolumeAndBrightnessScrollerImpl( private val overlayController: SwipeControlsOverlay, volumeDistance: Int = 10, brightnessDistance: Int = 1, + private val volumeSwipeSensitivity: Int, ) : VolumeAndBrightnessScroller { // region volume @@ -60,7 +62,7 @@ class VolumeAndBrightnessScrollerImpl( ), ) { _, _, direction -> volumeController?.run { - volume += direction + volume += direction * volumeSwipeSensitivity overlayController.onVolumeChanged(volume, maxVolume) } } diff --git a/extensions/youtube/src/main/java/app/revanced/extension/youtube/swipecontrols/views/SwipeControlsOverlayLayout.kt b/extensions/youtube/src/main/java/app/revanced/extension/youtube/swipecontrols/views/SwipeControlsOverlayLayout.kt index 2874303f7..8df6aeeee 100644 --- a/extensions/youtube/src/main/java/app/revanced/extension/youtube/swipecontrols/views/SwipeControlsOverlayLayout.kt +++ b/extensions/youtube/src/main/java/app/revanced/extension/youtube/swipecontrols/views/SwipeControlsOverlayLayout.kt @@ -25,7 +25,7 @@ class SwipeControlsOverlayLayout( private val config: SwipeControlsConfigurationProvider, ) : RelativeLayout(context), SwipeControlsOverlay { - constructor(context: Context) : this(context, SwipeControlsConfigurationProvider(context)) + constructor(context: Context) : this(context, SwipeControlsConfigurationProvider()) // Drawable icons for brightness and volume private val autoBrightnessIcon: Drawable = getDrawable("revanced_ic_sc_brightness_auto") diff --git a/patches/src/main/kotlin/app/revanced/patches/youtube/interaction/swipecontrols/SwipeControlsPatch.kt b/patches/src/main/kotlin/app/revanced/patches/youtube/interaction/swipecontrols/SwipeControlsPatch.kt index a22537c3e..d20ebf9a7 100644 --- a/patches/src/main/kotlin/app/revanced/patches/youtube/interaction/swipecontrols/SwipeControlsPatch.kt +++ b/patches/src/main/kotlin/app/revanced/patches/youtube/interaction/swipecontrols/SwipeControlsPatch.kt @@ -47,6 +47,7 @@ private val swipeControlsResourcePatch = resourcePatch { TextPreference("revanced_swipe_overlay_background_opacity", inputType = InputType.NUMBER), TextPreference("revanced_swipe_overlay_timeout", inputType = InputType.NUMBER), TextPreference("revanced_swipe_threshold", inputType = InputType.NUMBER), + TextPreference("revanced_swipe_volume_sensitivity", inputType = InputType.NUMBER), ) copyResources( diff --git a/patches/src/main/resources/addresources/values/strings.xml b/patches/src/main/resources/addresources/values/strings.xml index 3d8330396..af43602b4 100644 --- a/patches/src/main/resources/addresources/values/strings.xml +++ b/patches/src/main/resources/addresources/values/strings.xml @@ -527,6 +527,8 @@ Adjust volume by swiping vertically on the right side of the screen" Swipe opacity must be between 0-100 Swipe magnitude threshold The amount of threshold for swipe to occur + Volume swipe sensitivity + How much the volume changes per swipe Show circular overlay Circular overlay is shown Horizontal overlay is shown