From 9afa7d2ac642c3283bd51b7cda386ca947c8ed6d Mon Sep 17 00:00:00 2001 From: LisoUseInAIKyrios <118716522+LisoUseInAIKyrios@users.noreply.github.com> Date: Mon, 4 Aug 2025 15:00:14 -0400 Subject: [PATCH] fix(YouTube - Video quality): Fix 144p default not always used --- .../quality/RememberVideoQualityPatch.java | 18 ++++++++++++++---- .../videoplayer/VideoQualityDialogButton.java | 4 +--- 2 files changed, 15 insertions(+), 7 deletions(-) diff --git a/extensions/youtube/src/main/java/app/revanced/extension/youtube/patches/playback/quality/RememberVideoQualityPatch.java b/extensions/youtube/src/main/java/app/revanced/extension/youtube/patches/playback/quality/RememberVideoQualityPatch.java index 1c6746b3b..5bd7f598d 100644 --- a/extensions/youtube/src/main/java/app/revanced/extension/youtube/patches/playback/quality/RememberVideoQualityPatch.java +++ b/extensions/youtube/src/main/java/app/revanced/extension/youtube/patches/playback/quality/RememberVideoQualityPatch.java @@ -44,6 +44,8 @@ public class RememberVideoQualityPatch { private static final IntegerSetting shortsQualityWifi = Settings.SHORTS_QUALITY_DEFAULT_WIFI; private static final IntegerSetting shortsQualityMobile = Settings.SHORTS_QUALITY_DEFAULT_MOBILE; + private static boolean qualityNeedsUpdating; + /** * The available qualities of the current video. */ @@ -152,18 +154,25 @@ public class RememberVideoQualityPatch { VideoQualityDialogButton.updateButtonIcon(updatedCurrentQuality); } - // After changing videos the qualities can initially be for the prior video. - // If the qualities have changed and the default is not auto then an update is needed. final int preferredQuality = getDefaultQualityResolution(); - if (preferredQuality == AUTOMATIC_VIDEO_QUALITY_VALUE || !availableQualitiesChanged) { + if (preferredQuality == AUTOMATIC_VIDEO_QUALITY_VALUE) { return originalQualityIndex; // Nothing to do. } + // After changing videos the qualities can initially be for the prior video. + // If the qualities have changed and the default is not auto then an update is needed. + if (!qualityNeedsUpdating && !availableQualitiesChanged) { + return originalQualityIndex; + } + qualityNeedsUpdating = false; + // Find the highest quality that is equal to or less than the preferred. int i = 0; for (VideoQuality quality : qualities) { final int qualityResolution = quality.patch_getResolution(); - if (qualityResolution != AUTOMATIC_VIDEO_QUALITY_VALUE && qualityResolution <= preferredQuality) { + if ((qualityResolution != AUTOMATIC_VIDEO_QUALITY_VALUE && qualityResolution <= preferredQuality) + // Use the lowest video quality if the default is lower than all available. + || i == qualities.length - 1) { final boolean qualityNeedsChange = (i != originalQualityIndex); Logger.printDebug(() -> qualityNeedsChange ? "Changing video quality from: " + updatedCurrentQuality + " to: " + quality @@ -235,6 +244,7 @@ public class RememberVideoQualityPatch { currentQualities = null; currentQuality = null; currentMenuInterface = null; + qualityNeedsUpdating = true; // Hide the quality button until playback starts and the qualities are available. VideoQualityDialogButton.updateButtonIcon(null); diff --git a/extensions/youtube/src/main/java/app/revanced/extension/youtube/videoplayer/VideoQualityDialogButton.java b/extensions/youtube/src/main/java/app/revanced/extension/youtube/videoplayer/VideoQualityDialogButton.java index e4f58b42a..c875f9bf7 100644 --- a/extensions/youtube/src/main/java/app/revanced/extension/youtube/videoplayer/VideoQualityDialogButton.java +++ b/extensions/youtube/src/main/java/app/revanced/extension/youtube/videoplayer/VideoQualityDialogButton.java @@ -205,11 +205,9 @@ public class VideoQualityDialogButton { } // -1 adjustment for automatic quality at first index. - int listViewSelectedIndex = 0; + int listViewSelectedIndex = -1; for (VideoQuality quality : currentQualities) { if (quality == currentQuality) { - // -1 adjustment for the missing automatic quality in the dialog list. - listViewSelectedIndex--; break; } listViewSelectedIndex++;