Skip to content

Commit ddb73e8

Browse files
fix(YouTube - Remember video quality): Correctly set default quality when changing from a low quality video (ReVanced#3879)
1 parent c225ef1 commit ddb73e8

File tree

2 files changed

+25
-26
lines changed

2 files changed

+25
-26
lines changed

extensions/shared/src/main/java/app/revanced/extension/youtube/patches/components/ShortsFilter.java

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -416,7 +416,6 @@ public static void hideShortsShareButton(final View shareButtonView) {
416416
// endregion
417417

418418
public static void setNavigationBar(PivotBar view) {
419-
Logger.printDebug(() -> "Setting navigation bar");
420419
pivotBarRef = new WeakReference<>(view);
421420
}
422421

extensions/shared/src/main/java/app/revanced/extension/youtube/patches/playback/quality/RememberVideoQualityPatch.java

Lines changed: 25 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -62,19 +62,12 @@ private static void changeDefaultQuality(int defaultQuality) {
6262
*/
6363
public static int setVideoQuality(Object[] qualities, final int originalQualityIndex, Object qInterface, String qIndexMethod) {
6464
try {
65-
if (!(qualityNeedsUpdating || userChangedDefaultQuality) || qInterface == null) {
66-
return originalQualityIndex;
67-
}
68-
qualityNeedsUpdating = false;
65+
final int preferredQuality = Utils.getNetworkType() == NetworkType.MOBILE
66+
? mobileQualitySetting.get()
67+
: wifiQualitySetting.get();
6968

70-
final int preferredQuality;
71-
if (Utils.getNetworkType() == NetworkType.MOBILE) {
72-
preferredQuality = mobileQualitySetting.get();
73-
} else {
74-
preferredQuality = wifiQualitySetting.get();
75-
}
7669
if (!userChangedDefaultQuality && preferredQuality == AUTOMATIC_VIDEO_QUALITY_VALUE) {
77-
return originalQualityIndex; // nothing to do
70+
return originalQualityIndex; // Nothing to do.
7871
}
7972

8073
if (videoQualities == null || videoQualities.size() != qualities.length) {
@@ -87,7 +80,11 @@ public static int setVideoQuality(Object[] qualities, final int originalQualityI
8780
}
8881
}
8982
}
90-
Logger.printDebug(() -> "videoQualities: " + videoQualities);
83+
84+
// After changing videos the qualities can initially be for the prior video.
85+
// So if the qualities have changed an update is needed.
86+
qualityNeedsUpdating = true;
87+
Logger.printDebug(() -> "VideoQualities: " + videoQualities);
9188
}
9289

9390
if (userChangedDefaultQuality) {
@@ -98,7 +95,12 @@ public static int setVideoQuality(Object[] qualities, final int originalQualityI
9895
return userSelectedQualityIndex;
9996
}
10097

101-
// find the highest quality that is equal to or less than the preferred
98+
if (!qualityNeedsUpdating) {
99+
return originalQualityIndex;
100+
}
101+
qualityNeedsUpdating = false;
102+
103+
// Find the highest quality that is equal to or less than the preferred.
102104
int qualityToUse = videoQualities.get(0); // first element is automatic mode
103105
int qualityIndexToUse = 0;
104106
int i = 0;
@@ -112,20 +114,18 @@ public static int setVideoQuality(Object[] qualities, final int originalQualityI
112114

113115
// If the desired quality index is equal to the original index,
114116
// then the video is already set to the desired default quality.
115-
//
116-
// The method could return here, but the UI video quality flyout will still
117-
// show 'Auto' (ie: Auto (480p))
118-
// It appears that "Auto" picks the resolution on video load,
119-
// and it does not appear to change the resolution during playback.
120-
//
121-
// To prevent confusion, set the video index anyways (even if it matches the existing index)
122-
// As that will force the UI picker to not display "Auto" which may confuse the user.
117+
final int qualityToUseFinal = qualityToUse;
123118
if (qualityIndexToUse == originalQualityIndex) {
124-
Logger.printDebug(() -> "Video is already preferred quality: " + preferredQuality);
119+
// On first load of a new video, if the UI video quality flyout menu
120+
// is not updated then it will still show 'Auto' (ie: Auto (480p)),
121+
// even though it's already set to the desired resolution.
122+
//
123+
// To prevent confusion, set the video index anyways (even if it matches the existing index)
124+
// as that will force the UI picker to not display "Auto".
125+
Logger.printDebug(() -> "Video is already preferred quality: " + qualityToUseFinal);
125126
} else {
126-
final int qualityToUseLog = qualityToUse;
127-
Logger.printDebug(() -> "Quality changed from: "
128-
+ videoQualities.get(originalQualityIndex) + " to: " + qualityToUseLog);
127+
Logger.printDebug(() -> "Changing video quality from: "
128+
+ videoQualities.get(originalQualityIndex) + " to: " + qualityToUseFinal);
129129
}
130130

131131
Method m = qInterface.getClass().getMethod(qIndexMethod, Integer.TYPE);

0 commit comments

Comments
 (0)