From 80f50e8c50ca6a8366b7fd7b01459fb16fa1074a Mon Sep 17 00:00:00 2001
From: MarcaD <152095496+MarcaDian@users.noreply.github.com>
Date: Wed, 28 May 2025 12:54:28 +0300
Subject: [PATCH] feat(YouTube - Swipe controls): Add separate color settings
for the brightness and volume bars (#5043)
---
.../extension/youtube/settings/Settings.java | 12 +-
.../SwipeControlsConfigurationProvider.kt | 124 +++++++++---------
.../views/SwipeControlsOverlayLayout.kt | 123 ++++++++++-------
.../swipecontrols/SwipeControlsPatch.kt | 5 +-
.../resources/addresources/values/strings.xml | 7 +-
5 files changed, 159 insertions(+), 112 deletions(-)
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 b7d1e2aee..92b222161 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
@@ -337,13 +337,17 @@ public class Settings extends BaseSettings {
parentsAny(SWIPE_BRIGHTNESS, SWIPE_VOLUME));
public static final IntegerSetting SWIPE_OVERLAY_OPACITY = new IntegerSetting("revanced_swipe_overlay_background_opacity", 60, true,
parentsAny(SWIPE_BRIGHTNESS, SWIPE_VOLUME));
- public static final StringSetting SWIPE_OVERLAY_PROGRESS_COLOR = new StringSetting("revanced_swipe_overlay_progress_color", "#FFFFFF", true,
- parentsAny(SWIPE_BRIGHTNESS, SWIPE_VOLUME));
+ public static final StringSetting SWIPE_OVERLAY_BRIGHTNESS_COLOR = new StringSetting("revanced_swipe_overlay_progress_brightness_color", "#FFFFFF", true,
+ parent(SWIPE_BRIGHTNESS));
+ public static final StringSetting SWIPE_OVERLAY_VOLUME_COLOR = new StringSetting("revanced_swipe_overlay_progress_volume_color", "#FFFFFF", true,
+ parent(SWIPE_VOLUME));
public static final LongSetting SWIPE_OVERLAY_TIMEOUT = new LongSetting("revanced_swipe_overlay_timeout", 500L, true,
parentsAny(SWIPE_BRIGHTNESS, SWIPE_VOLUME));
- public static final BooleanSetting SWIPE_SAVE_AND_RESTORE_BRIGHTNESS = new BooleanSetting("revanced_swipe_save_and_restore_brightness", TRUE, true, parent(SWIPE_BRIGHTNESS));
+ public static final BooleanSetting SWIPE_SAVE_AND_RESTORE_BRIGHTNESS = new BooleanSetting("revanced_swipe_save_and_restore_brightness", TRUE, true,
+ parent(SWIPE_BRIGHTNESS));
public static final FloatSetting SWIPE_BRIGHTNESS_VALUE = new FloatSetting("revanced_swipe_brightness_value", -1f);
- public static final BooleanSetting SWIPE_LOWEST_VALUE_ENABLE_AUTO_BRIGHTNESS = new BooleanSetting("revanced_swipe_lowest_value_enable_auto_brightness", FALSE, true, parent(SWIPE_BRIGHTNESS));
+ public static final BooleanSetting SWIPE_LOWEST_VALUE_ENABLE_AUTO_BRIGHTNESS = new BooleanSetting("revanced_swipe_lowest_value_enable_auto_brightness", FALSE, true,
+ parent(SWIPE_BRIGHTNESS));
// ReturnYoutubeDislike
public static final BooleanSetting RYD_ENABLED = new BooleanSetting("revanced_ryd_enabled", 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 e8f181936..c5854fd2f 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,10 +1,10 @@
package app.revanced.extension.youtube.swipecontrols
-import android.annotation.SuppressLint
import android.graphics.Color
import app.revanced.extension.shared.Logger
import app.revanced.extension.shared.StringRef.str
import app.revanced.extension.shared.Utils
+import app.revanced.extension.shared.settings.StringSetting
import app.revanced.extension.youtube.settings.Settings
import app.revanced.extension.youtube.shared.PlayerType
@@ -51,105 +51,112 @@ class SwipeControlsConfigurationProvider {
/**
* Indicates whether press-to-swipe mode is enabled, requiring a press before swiping to activate controls.
*/
- val shouldEnablePressToSwipe: Boolean
- get() = Settings.SWIPE_PRESS_TO_ENGAGE.get()
+ val shouldEnablePressToSwipe = Settings.SWIPE_PRESS_TO_ENGAGE.get()
/**
* The threshold for detecting swipe gestures, in pixels.
* Loaded once to ensure consistent behavior during rapid scroll events.
*/
- val swipeMagnitudeThreshold: Int
- get() = Settings.SWIPE_MAGNITUDE_THRESHOLD.get()
+ val swipeMagnitudeThreshold = Settings.SWIPE_MAGNITUDE_THRESHOLD.get()
/**
* The sensitivity of volume swipe gestures, determining how much volume changes per swipe.
* Resets to default if set to 0, as it would disable swiping.
*/
- val volumeSwipeSensitivity: Int
- get() {
- val sensitivity = Settings.SWIPE_VOLUME_SENSITIVITY.get()
+ val volumeSwipeSensitivity: Int by lazy {
+ val sensitivity = Settings.SWIPE_VOLUME_SENSITIVITY.get()
- if (sensitivity < 1) {
- return Settings.SWIPE_VOLUME_SENSITIVITY.resetToDefault()
- }
-
- return sensitivity
+ if (sensitivity < 1) {
+ return@lazy Settings.SWIPE_VOLUME_SENSITIVITY.resetToDefault()
}
+
+ sensitivity
+ }
//endregion
//region overlay adjustments
/**
* Indicates whether haptic feedback should be enabled for swipe control interactions.
*/
- val shouldEnableHapticFeedback: Boolean
- get() = Settings.SWIPE_HAPTIC_FEEDBACK.get()
+ val shouldEnableHapticFeedback = Settings.SWIPE_HAPTIC_FEEDBACK.get()
/**
* The duration in milliseconds that the overlay should remain visible after a change.
*/
- val overlayShowTimeoutMillis: Long
- get() = Settings.SWIPE_OVERLAY_TIMEOUT.get()
+ val overlayShowTimeoutMillis = Settings.SWIPE_OVERLAY_TIMEOUT.get()
/**
* The background opacity of the overlay, converted from a percentage (0-100) to an alpha value (0-255).
* Resets to default and shows a toast if the value is out of range.
*/
- val overlayBackgroundOpacity: Int
- get() {
- var opacity = Settings.SWIPE_OVERLAY_OPACITY.get()
+ val overlayBackgroundOpacity: Int by lazy {
+ var opacity = Settings.SWIPE_OVERLAY_OPACITY.get()
- if (opacity < 0 || opacity > 100) {
- Utils.showToastLong(str("revanced_swipe_overlay_background_opacity_invalid_toast"))
- opacity = Settings.SWIPE_OVERLAY_OPACITY.resetToDefault()
- }
-
- opacity = opacity * 255 / 100
- return Color.argb(opacity, 0, 0, 0)
+ if (opacity < 0 || opacity > 100) {
+ Utils.showToastLong(str("revanced_swipe_overlay_background_opacity_invalid_toast"))
+ opacity = Settings.SWIPE_OVERLAY_OPACITY.resetToDefault()
}
+ opacity = opacity * 255 / 100
+ Color.argb(opacity, 0, 0, 0)
+ }
+
/**
- * The color of the progress bar in the overlay.
+ * The color of the progress bar in the overlay for brightness.
* Resets to default and shows a toast if the color string is invalid or empty.
*/
- val overlayProgressColor: Int
- get() {
- try {
- @SuppressLint("UseKtx")
- val color = Color.parseColor(Settings.SWIPE_OVERLAY_PROGRESS_COLOR.get())
- return (0xBF000000.toInt() or (color and 0xFFFFFF))
- } catch (ex: IllegalArgumentException) {
- Logger.printDebug({ "Could not parse color" }, ex)
- Utils.showToastLong(str("revanced_swipe_overlay_progress_color_invalid_toast"))
- Settings.SWIPE_OVERLAY_PROGRESS_COLOR.resetToDefault()
- return overlayProgressColor // Recursively return.
- }
+ val overlayBrightnessProgressColor: Int by lazy {
+ // Use lazy to avoid repeat parsing. Changing color requires app restart.
+ getSettingColor(Settings.SWIPE_OVERLAY_BRIGHTNESS_COLOR)
+ }
+
+ /**
+ * The color of the progress bar in the overlay for volume.
+ * Resets to default and shows a toast if the color string is invalid or empty.
+ */
+ val overlayVolumeProgressColor: Int by lazy {
+ getSettingColor(Settings.SWIPE_OVERLAY_VOLUME_COLOR)
+ }
+
+ private fun getSettingColor(setting: StringSetting): Int {
+ try {
+ //noinspection UseKtx
+ val color = Color.parseColor(setting.get())
+ return (0xBF000000.toInt() or (color and 0x00FFFFFF))
+ } catch (ex: IllegalArgumentException) {
+ // This code should never be reached.
+ // Color picker rejects and will not save bad colors to a setting.
+ // If a user imports bad data, the color picker preference resets the
+ // bad color before this method can be called.
+ Logger.printDebug({ "Could not parse color: $setting" }, ex)
+ Utils.showToastLong(str("revanced_settings_color_invalid"))
+ setting.resetToDefault()
+ return getSettingColor(setting) // Recursively return.
}
+ }
/**
* The background color used for the filled portion of the progress bar in the overlay.
*/
- val overlayFillBackgroundPaint: Int
- get() = 0x80D3D3D3.toInt()
+ val overlayFillBackgroundPaint = 0x80D3D3D3.toInt()
/**
* The color used for text and icons in the overlay.
*/
- val overlayTextColor: Int
- get() = Color.WHITE
+ val overlayTextColor = Color.WHITE
/**
* The text size in the overlay, in density-independent pixels (dp).
* Must be between 1 and 30 dp; resets to default and shows a toast if invalid.
*/
- val overlayTextSize: Int
- get() {
- val size = Settings.SWIPE_OVERLAY_TEXT_SIZE.get()
- if (size < 1 || size > 30) {
- Utils.showToastLong(str("revanced_swipe_text_overlay_size_invalid_toast"))
- return Settings.SWIPE_OVERLAY_TEXT_SIZE.resetToDefault()
- }
- return size
+ val overlayTextSize: Int by lazy {
+ val size = Settings.SWIPE_OVERLAY_TEXT_SIZE.get()
+ if (size < 1 || size > 30) {
+ Utils.showToastLong(str("revanced_swipe_text_overlay_size_invalid_toast"))
+ return@lazy Settings.SWIPE_OVERLAY_TEXT_SIZE.resetToDefault()
}
+ size
+ }
/**
* Defines the style of the swipe controls overlay, determining its layout and appearance.
@@ -199,28 +206,25 @@ class SwipeControlsConfigurationProvider {
/**
* A minimal vertical progress bar.
*/
- VERTICAL_MINIMAL(isMinimal = true, isVertical = true)
+ VERTICAL_MINIMAL(isMinimal = true, isVertical = true)
}
/**
* The current style of the overlay, determining its layout and appearance.
*/
- val overlayStyle: SwipeOverlayStyle
- get() = Settings.SWIPE_OVERLAY_STYLE.get()
+ val overlayStyle = Settings.SWIPE_OVERLAY_STYLE.get()
//endregion
//region behaviour
/**
* Indicates whether the brightness level should be saved and restored when entering or exiting fullscreen mode.
*/
- val shouldSaveAndRestoreBrightness: Boolean
- get() = Settings.SWIPE_SAVE_AND_RESTORE_BRIGHTNESS.get()
+ val shouldSaveAndRestoreBrightness = Settings.SWIPE_SAVE_AND_RESTORE_BRIGHTNESS.get()
/**
* Indicates whether auto-brightness should be enabled when the brightness gesture reaches its lowest value.
*/
- val shouldLowestValueEnableAutoBrightness: Boolean
- get() = Settings.SWIPE_LOWEST_VALUE_ENABLE_AUTO_BRIGHTNESS.get()
+ val shouldLowestValueEnableAutoBrightness = Settings.SWIPE_LOWEST_VALUE_ENABLE_AUTO_BRIGHTNESS.get()
/**
* The saved brightness value for the swipe gesture, used to restore brightness in fullscreen mode.
@@ -229,4 +233,4 @@ class SwipeControlsConfigurationProvider {
get() = Settings.SWIPE_BRIGHTNESS_VALUE.get()
set(value) = Settings.SWIPE_BRIGHTNESS_VALUE.save(value)
//endregion
-}
\ No newline at end of file
+}
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 6a9044e85..71226c082 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
@@ -39,7 +39,7 @@ class SwipeControlsOverlayLayout(
constructor(context: Context) : this(context, SwipeControlsConfigurationProvider())
- // Drawable icons for brightness and volume
+ // Drawable icons for brightness and volume.
private val autoBrightnessIcon: Drawable = getDrawable("revanced_ic_sc_brightness_auto")
private val lowBrightnessIcon: Drawable = getDrawable("revanced_ic_sc_brightness_low")
private val mediumBrightnessIcon: Drawable = getDrawable("revanced_ic_sc_brightness_medium")
@@ -50,7 +50,7 @@ class SwipeControlsOverlayLayout(
private val normalVolumeIcon: Drawable = getDrawable("revanced_ic_sc_volume_normal")
private val fullVolumeIcon: Drawable = getDrawable("revanced_ic_sc_volume_high")
- // Function to retrieve drawable resources by name
+ // Function to retrieve drawable resources by name.
private fun getDrawable(name: String): Drawable {
val drawable = resources.getDrawable(
Utils.getResourceIdentifier(context, name, "drawable"),
@@ -60,19 +60,19 @@ class SwipeControlsOverlayLayout(
return drawable
}
- // Initialize progress bars
+ // Initialize progress bars.
private val circularProgressView: CircularProgressView
private val horizontalProgressView: HorizontalProgressView
private val verticalBrightnessProgressView: VerticalProgressView
private val verticalVolumeProgressView: VerticalProgressView
init {
- // Initialize circular progress bar
+ // Initialize circular progress bar.
circularProgressView = CircularProgressView(
context,
config.overlayBackgroundOpacity,
config.overlayStyle.isMinimal,
- config.overlayProgressColor,
+ config.overlayBrightnessProgressColor, // Placeholder, updated in showFeedbackView.
config.overlayFillBackgroundPaint,
config.overlayTextColor,
config.overlayTextSize
@@ -80,18 +80,18 @@ class SwipeControlsOverlayLayout(
layoutParams = LayoutParams(100f.toDisplayPixels().toInt(), 100f.toDisplayPixels().toInt()).apply {
addRule(CENTER_IN_PARENT, TRUE)
}
- visibility = GONE // Initially hidden
+ visibility = GONE // Initially hidden.
}
addView(circularProgressView)
- // Initialize horizontal progress bar
+ // Initialize horizontal progress bar.
val screenWidth = resources.displayMetrics.widthPixels
- val layoutWidth = (screenWidth * 4 / 5).toInt() // Cap at ~360dp
+ val layoutWidth = (screenWidth * 4 / 5).toInt() // Cap at ~360dp.
horizontalProgressView = HorizontalProgressView(
context,
config.overlayBackgroundOpacity,
config.overlayStyle.isMinimal,
- config.overlayProgressColor,
+ config.overlayBrightnessProgressColor, // Placeholder, updated in showFeedbackView.
config.overlayFillBackgroundPaint,
config.overlayTextColor,
config.overlayTextSize
@@ -104,16 +104,16 @@ class SwipeControlsOverlayLayout(
topMargin = 20f.toDisplayPixels().toInt()
}
}
- visibility = GONE // Initially hidden
+ visibility = GONE // Initially hidden.
}
addView(horizontalProgressView)
- // Initialize vertical progress bar for brightness (right side)
+ // Initialize vertical progress bar for brightness (right side).
verticalBrightnessProgressView = VerticalProgressView(
context,
config.overlayBackgroundOpacity,
config.overlayStyle.isMinimal,
- config.overlayProgressColor,
+ config.overlayBrightnessProgressColor,
config.overlayFillBackgroundPaint,
config.overlayTextColor,
config.overlayTextSize
@@ -123,16 +123,16 @@ class SwipeControlsOverlayLayout(
rightMargin = 40f.toDisplayPixels().toInt()
addRule(CENTER_VERTICAL)
}
- visibility = GONE // Initially hidden
+ visibility = GONE // Initially hidden.
}
addView(verticalBrightnessProgressView)
- // Initialize vertical progress bar for volume (left side)
+ // Initialize vertical progress bar for volume (left side).
verticalVolumeProgressView = VerticalProgressView(
context,
config.overlayBackgroundOpacity,
config.overlayStyle.isMinimal,
- config.overlayProgressColor,
+ config.overlayVolumeProgressColor,
config.overlayFillBackgroundPaint,
config.overlayTextColor,
config.overlayTextSize
@@ -142,12 +142,12 @@ class SwipeControlsOverlayLayout(
leftMargin = 40f.toDisplayPixels().toInt()
addRule(CENTER_VERTICAL)
}
- visibility = GONE // Initially hidden
+ visibility = GONE // Initially hidden.
}
addView(verticalVolumeProgressView)
}
- // Handler and callback for hiding progress bars
+ // Handler and callback for hiding progress bars.
private val feedbackHideHandler = Handler(Looper.getMainLooper())
private val feedbackHideCallback = Runnable {
circularProgressView.visibility = GONE
@@ -165,29 +165,42 @@ class SwipeControlsOverlayLayout(
val viewToShow = when {
config.overlayStyle.isCircular -> circularProgressView
- config.overlayStyle.isVertical -> if (isBrightness) verticalBrightnessProgressView else verticalVolumeProgressView
+ config.overlayStyle.isVertical ->
+ if (isBrightness)
+ verticalBrightnessProgressView
+ else
+ verticalVolumeProgressView
else -> horizontalProgressView
}
viewToShow.apply {
+ // Set the appropriate progress color.
+ if (this is CircularProgressView || this is HorizontalProgressView) {
+ setProgressColor(
+ if (isBrightness)
+ config.overlayBrightnessProgressColor
+ else
+ config.overlayVolumeProgressColor
+ )
+ }
setProgress(progress, max, value, isBrightness)
this.icon = icon
visibility = VISIBLE
}
}
- // Handle volume change
+ // Handle volume change.
override fun onVolumeChanged(newVolume: Int, maximumVolume: Int) {
val volumePercentage = (newVolume.toFloat() / maximumVolume) * 100
val icon = when {
newVolume == 0 -> mutedVolumeIcon
- volumePercentage < 33 -> lowVolumeIcon
- volumePercentage < 66 -> normalVolumeIcon
+ volumePercentage < 25 -> lowVolumeIcon
+ volumePercentage < 50 -> normalVolumeIcon
else -> fullVolumeIcon
}
showFeedbackView("$newVolume", newVolume, maximumVolume, icon, isBrightness = false)
}
- // Handle brightness change
+ // Handle brightness change.
override fun onBrightnessChanged(brightness: Double) {
if (config.shouldLowestValueEnableAutoBrightness && brightness <= 0) {
val displayText = if (config.overlayStyle.isVertical) "А"
@@ -195,18 +208,19 @@ class SwipeControlsOverlayLayout(
showFeedbackView(displayText, 0, 100, autoBrightnessIcon, isBrightness = true)
} else {
val brightnessValue = round(brightness).toInt()
+ val clampedProgress = max(0, brightnessValue)
val icon = when {
- brightnessValue < 25 -> lowBrightnessIcon
- brightnessValue < 50 -> mediumBrightnessIcon
- brightnessValue < 75 -> highBrightnessIcon
+ clampedProgress < 25 -> lowBrightnessIcon
+ clampedProgress < 50 -> mediumBrightnessIcon
+ clampedProgress < 75 -> highBrightnessIcon
else -> fullBrightnessIcon
}
- val displayText = if (config.overlayStyle.isVertical) "$brightnessValue" else "$brightnessValue%"
- showFeedbackView(displayText, brightnessValue, 100, icon, isBrightness = true)
+ val displayText = if (config.overlayStyle.isVertical) "$clampedProgress" else "$clampedProgress%"
+ showFeedbackView(displayText, clampedProgress, 100, icon, isBrightness = true)
}
}
- // Begin swipe session
+ // Begin swipe session.
override fun onEnterSwipeSession() {
if (config.shouldEnableHapticFeedback) {
@Suppress("DEPRECATION")
@@ -233,25 +247,41 @@ abstract class AbstractProgressView(
defStyleAttr: Int = 0
) : View(context, attrs, defStyleAttr) {
- // Combined paint creation function for both fill and stroke styles
- private fun createPaint(color: Int, style: Paint.Style = Paint.Style.FILL, strokeCap: Paint.Cap = Paint.Cap.BUTT, strokeWidth: Float = 0f) = Paint(Paint.ANTI_ALIAS_FLAG).apply {
+ // Combined paint creation function for both fill and stroke styles.
+ private fun createPaint(
+ color: Int,
+ style: Paint.Style = Paint.Style.FILL,
+ strokeCap: Paint.Cap = Paint.Cap.BUTT,
+ strokeWidth: Float = 0f
+ ) = Paint(Paint.ANTI_ALIAS_FLAG).apply {
this.style = style
this.color = color
this.strokeCap = strokeCap
this.strokeWidth = strokeWidth
}
- // Initialize paints
- val backgroundPaint = createPaint(overlayBackgroundOpacity, style = Paint.Style.FILL)
- val progressPaint = createPaint(overlayProgressColor, style = Paint.Style.STROKE, strokeCap = Paint.Cap.ROUND, strokeWidth = 6f.toDisplayPixels())
- val fillBackgroundPaint = createPaint(overlayFillBackgroundPaint, style = Paint.Style.FILL)
- val textPaint = Paint(Paint.ANTI_ALIAS_FLAG).apply {
- color = overlayTextColor
+ // Initialize paints.
+ val backgroundPaint = createPaint(
+ overlayBackgroundOpacity,
+ style = Paint.Style.FILL
+ )
+ val progressPaint = createPaint(
+ overlayProgressColor,
+ style = Paint.Style.STROKE,
+ strokeCap = Paint.Cap.ROUND,
+ strokeWidth = 6f.toDisplayPixels()
+ )
+ val fillBackgroundPaint = createPaint(
+ overlayFillBackgroundPaint,
+ style = Paint.Style.FILL
+ )
+ val textPaint = Paint(Paint.ANTI_ALIAS_FLAG).apply {
+ color = overlayTextColor
textAlign = Paint.Align.CENTER
- textSize = overlayTextSize.toFloat().toDisplayPixels()
+ textSize = overlayTextSize.toFloat().toDisplayPixels()
}
- // Rect for text measurement
+ // Rect for text measurement.
protected val textBounds = Rect()
protected var progress = 0
@@ -268,13 +298,18 @@ abstract class AbstractProgressView(
invalidate()
}
+ fun setProgressColor(color: Int) {
+ progressPaint.color = color
+ invalidate()
+ }
+
protected fun measureTextWidth(text: String, paint: Paint): Int {
paint.getTextBounds(text, 0, text.length, textBounds)
return textBounds.width()
}
override fun onDraw(canvas: Canvas) {
- // Base class implementation can be empty
+ // Base class implementation can be empty.
}
}
@@ -393,8 +428,8 @@ class HorizontalProgressView(
}
/**
- * Calculate required width based on content
- * @return Required width to display all elements
+ * Calculate required width based on content.
+ * @return Required width to display all elements.
*/
private fun calculateRequiredWidth(): Float {
textWidth = measureTextWidth(displayText, textPaint).toFloat()
@@ -537,8 +572,8 @@ class VerticalProgressView(
}
/**
- * Calculate required height based on content
- * @return Required height to display all elements
+ * Calculate required height based on content.
+ * @return Required height to display all elements.
*/
private fun calculateRequiredHeight(): Float {
return if (!isMinimalStyle) {
@@ -633,4 +668,4 @@ class VerticalProgressView(
super.setProgress(value, max, text, isBrightnessMode)
requestLayout()
}
-}
\ No newline at end of file
+}
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 6c14a93b6..fc9c3dc83 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
@@ -48,7 +48,10 @@ private val swipeControlsResourcePatch = resourcePatch {
summaryKey = null,
),
TextPreference("revanced_swipe_overlay_background_opacity", inputType = InputType.NUMBER),
- TextPreference("revanced_swipe_overlay_progress_color",
+ TextPreference("revanced_swipe_overlay_progress_brightness_color",
+ tag = "app.revanced.extension.shared.settings.preference.ColorPickerPreference",
+ inputType = InputType.TEXT_CAP_CHARACTERS),
+ TextPreference("revanced_swipe_overlay_progress_volume_color",
tag = "app.revanced.extension.shared.settings.preference.ColorPickerPreference",
inputType = InputType.TEXT_CAP_CHARACTERS),
TextPreference("revanced_swipe_text_overlay_size", inputType = InputType.NUMBER),
diff --git a/patches/src/main/resources/addresources/values/strings.xml b/patches/src/main/resources/addresources/values/strings.xml
index 79a52e628..0a51eedb0 100644
--- a/patches/src/main/resources/addresources/values/strings.xml
+++ b/patches/src/main/resources/addresources/values/strings.xml
@@ -553,9 +553,10 @@ Adjust volume by swiping vertically on the right side of the screen"
Swipe overlay background opacity
Opacity value between 0-100
Swipe opacity must be between 0-100
- Swipe overlay progress bar color
- The color of the progress bar for volume and brightness controls
- Invalid progress bar color
+ Swipe overlay brightness color
+ The color of the progress bar for brightness controls
+ Swipe overlay volume color
+ The color of the progress bar for volume controls
Swipe overlay text size
The text size for swipe overlay between 1-30
The text size must be between 1-30