From 6d5a5c8281fc13d02ed42f6b93f08932da0d2a56 Mon Sep 17 00:00:00 2001 From: LisoUseInAIKyrios <118716522+LisoUseInAIKyrios@users.noreply.github.com> Date: Fri, 20 Oct 2023 13:18:02 +0300 Subject: [PATCH 01/24] fix(YouTube - Minimized playback): Fix pip incorrectly showing for Short playback (#504) --- .../integrations/patches/MinimizedPlaybackPatch.java | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/app/src/main/java/app/revanced/integrations/patches/MinimizedPlaybackPatch.java b/app/src/main/java/app/revanced/integrations/patches/MinimizedPlaybackPatch.java index 6fcae6bfc5..b30b15544c 100644 --- a/app/src/main/java/app/revanced/integrations/patches/MinimizedPlaybackPatch.java +++ b/app/src/main/java/app/revanced/integrations/patches/MinimizedPlaybackPatch.java @@ -4,10 +4,16 @@ public class MinimizedPlaybackPatch { - public static boolean isPlaybackNotShort() { + /** + * Injection point. + */ + public static boolean videoSupportsMinimizedPlayback() { return !PlayerType.getCurrent().isNoneHiddenOrSlidingMinimized(); } + /** + * Injection point. + */ public static boolean overrideMinimizedPlaybackAvailable() { // This could be done entirely in the patch, // but having a unique method to search for makes manually inspecting the patched apk much easier. From f19f122fee622cd981dce5ca6d26ba098ebb96d4 Mon Sep 17 00:00:00 2001 From: semantic-release-bot Date: Fri, 20 Oct 2023 10:22:43 +0000 Subject: [PATCH 02/24] chore(release): 0.120.1-dev.1 [skip ci] ## [0.120.1-dev.1](https://github.com/ReVanced/revanced-integrations/compare/v0.120.0...v0.120.1-dev.1) (2023-10-20) ### Bug Fixes * **YouTube - Minimized playback:** Fix pip incorrectly showing for Short playback ([#504](https://github.com/ReVanced/revanced-integrations/issues/504)) ([6d5a5c8](https://github.com/ReVanced/revanced-integrations/commit/6d5a5c8281fc13d02ed42f6b93f08932da0d2a56)) --- CHANGELOG.md | 7 +++++++ gradle.properties | 2 +- 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 4b8fcbec96..0b22b90ab0 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,10 @@ +## [0.120.1-dev.1](https://github.com/ReVanced/revanced-integrations/compare/v0.120.0...v0.120.1-dev.1) (2023-10-20) + + +### Bug Fixes + +* **YouTube - Minimized playback:** Fix pip incorrectly showing for Short playback ([#504](https://github.com/ReVanced/revanced-integrations/issues/504)) ([6d5a5c8](https://github.com/ReVanced/revanced-integrations/commit/6d5a5c8281fc13d02ed42f6b93f08932da0d2a56)) + # [0.120.0](https://github.com/ReVanced/revanced-integrations/compare/v0.119.2...v0.120.0) (2023-10-20) diff --git a/gradle.properties b/gradle.properties index 8a6d6c2054..37ca1135c2 100644 --- a/gradle.properties +++ b/gradle.properties @@ -1,4 +1,4 @@ org.gradle.parallel = true org.gradle.caching = true android.useAndroidX = true -version = 0.120.0 +version = 0.120.1-dev.1 From e68f558e9ccac4c6e0d9113b3f134e89edd2233f Mon Sep 17 00:00:00 2001 From: LisoUseInAIKyrios <118716522+LisoUseInAIKyrios@users.noreply.github.com> Date: Fri, 20 Oct 2023 13:35:14 +0300 Subject: [PATCH 03/24] Revert "chore(release): 0.120.1-dev.1 [skip ci]" This reverts commit f19f122fee622cd981dce5ca6d26ba098ebb96d4. --- CHANGELOG.md | 7 ------- gradle.properties | 2 +- 2 files changed, 1 insertion(+), 8 deletions(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 0b22b90ab0..4b8fcbec96 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,10 +1,3 @@ -## [0.120.1-dev.1](https://github.com/ReVanced/revanced-integrations/compare/v0.120.0...v0.120.1-dev.1) (2023-10-20) - - -### Bug Fixes - -* **YouTube - Minimized playback:** Fix pip incorrectly showing for Short playback ([#504](https://github.com/ReVanced/revanced-integrations/issues/504)) ([6d5a5c8](https://github.com/ReVanced/revanced-integrations/commit/6d5a5c8281fc13d02ed42f6b93f08932da0d2a56)) - # [0.120.0](https://github.com/ReVanced/revanced-integrations/compare/v0.119.2...v0.120.0) (2023-10-20) diff --git a/gradle.properties b/gradle.properties index 37ca1135c2..8a6d6c2054 100644 --- a/gradle.properties +++ b/gradle.properties @@ -1,4 +1,4 @@ org.gradle.parallel = true org.gradle.caching = true android.useAndroidX = true -version = 0.120.1-dev.1 +version = 0.120.0 From c1c7e3b5964394de6af39f6fb83d667eba174f0a Mon Sep 17 00:00:00 2001 From: LisoUseInAIKyrios <118716522+LisoUseInAIKyrios@users.noreply.github.com> Date: Fri, 20 Oct 2023 13:35:14 +0300 Subject: [PATCH 04/24] Revert "fix(YouTube - Minimized playback): Fix pip incorrectly showing for Short playback (#504)" This reverts commit 6d5a5c8281fc13d02ed42f6b93f08932da0d2a56. --- .../integrations/patches/MinimizedPlaybackPatch.java | 8 +------- 1 file changed, 1 insertion(+), 7 deletions(-) diff --git a/app/src/main/java/app/revanced/integrations/patches/MinimizedPlaybackPatch.java b/app/src/main/java/app/revanced/integrations/patches/MinimizedPlaybackPatch.java index b30b15544c..6fcae6bfc5 100644 --- a/app/src/main/java/app/revanced/integrations/patches/MinimizedPlaybackPatch.java +++ b/app/src/main/java/app/revanced/integrations/patches/MinimizedPlaybackPatch.java @@ -4,16 +4,10 @@ public class MinimizedPlaybackPatch { - /** - * Injection point. - */ - public static boolean videoSupportsMinimizedPlayback() { + public static boolean isPlaybackNotShort() { return !PlayerType.getCurrent().isNoneHiddenOrSlidingMinimized(); } - /** - * Injection point. - */ public static boolean overrideMinimizedPlaybackAvailable() { // This could be done entirely in the patch, // but having a unique method to search for makes manually inspecting the patched apk much easier. From e68646d4f78038616b2cd08759b7a3a2718313d0 Mon Sep 17 00:00:00 2001 From: semantic-release-bot Date: Fri, 20 Oct 2023 10:40:29 +0000 Subject: [PATCH 05/24] chore(release): 0.120.1-dev.2 [skip ci] ## [0.120.1-dev.2](https://github.com/ReVanced/revanced-integrations/compare/v0.120.1-dev.1...v0.120.1-dev.2) (2023-10-20) ### Reverts * Revert "fix(YouTube - Minimized playback): Fix pip incorrectly showing for Short playback (#504)" ([c1c7e3b](https://github.com/ReVanced/revanced-integrations/commit/c1c7e3b5964394de6af39f6fb83d667eba174f0a)), closes [#504](https://github.com/ReVanced/revanced-integrations/issues/504) * Revert "chore(release): 0.120.1-dev.1 [skip ci]" ([e68f558](https://github.com/ReVanced/revanced-integrations/commit/e68f558e9ccac4c6e0d9113b3f134e89edd2233f)) --- CHANGELOG.md | 8 ++++++++ gradle.properties | 2 +- 2 files changed, 9 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 4b8fcbec96..5df2a3a02c 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,11 @@ +## [0.120.1-dev.2](https://github.com/ReVanced/revanced-integrations/compare/v0.120.1-dev.1...v0.120.1-dev.2) (2023-10-20) + + +### Reverts + +* Revert "fix(YouTube - Minimized playback): Fix pip incorrectly showing for Short playback (#504)" ([c1c7e3b](https://github.com/ReVanced/revanced-integrations/commit/c1c7e3b5964394de6af39f6fb83d667eba174f0a)), closes [#504](https://github.com/ReVanced/revanced-integrations/issues/504) +* Revert "chore(release): 0.120.1-dev.1 [skip ci]" ([e68f558](https://github.com/ReVanced/revanced-integrations/commit/e68f558e9ccac4c6e0d9113b3f134e89edd2233f)) + # [0.120.0](https://github.com/ReVanced/revanced-integrations/compare/v0.119.2...v0.120.0) (2023-10-20) diff --git a/gradle.properties b/gradle.properties index 8a6d6c2054..4816d52dff 100644 --- a/gradle.properties +++ b/gradle.properties @@ -1,4 +1,4 @@ org.gradle.parallel = true org.gradle.caching = true android.useAndroidX = true -version = 0.120.0 +version = 0.120.1-dev.2 From debd0a2e1101e543161390fd3ced6bda19030155 Mon Sep 17 00:00:00 2001 From: LisoUseInAIKyrios <118716522+LisoUseInAIKyrios@users.noreply.github.com> Date: Sat, 21 Oct 2023 15:18:00 +0300 Subject: [PATCH 06/24] fix(YouTube - Custom filter): Fix app crash if invalid character is used in custom filter (#506) --- .../patches/components/LithoFilterPatch.java | 16 +++- .../integrations/utils/ByteTrieSearch.java | 47 ++++------ .../integrations/utils/StringTrieSearch.java | 46 ++++----- .../integrations/utils/TrieSearch.java | 93 +++++++++++-------- 4 files changed, 98 insertions(+), 104 deletions(-) diff --git a/app/src/main/java/app/revanced/integrations/patches/components/LithoFilterPatch.java b/app/src/main/java/app/revanced/integrations/patches/components/LithoFilterPatch.java index a4051c5534..5213025d0e 100644 --- a/app/src/main/java/app/revanced/integrations/patches/components/LithoFilterPatch.java +++ b/app/src/main/java/app/revanced/integrations/patches/components/LithoFilterPatch.java @@ -128,8 +128,20 @@ public FilterGroupResult check(final String string) { final class CustomFilterGroup extends StringFilterGroup { - public CustomFilterGroup(final SettingsEnum setting, final SettingsEnum filter) { - super(setting, filter.getString().split("\\s+")); + private static String[] getFilterPatterns(SettingsEnum setting) { + String[] patterns = setting.getString().split("\\s+"); + for (String pattern : patterns) { + if (!StringTrieSearch.isValidPattern(pattern)) { + ReVancedUtils.showToastLong("Invalid custom filter, resetting to default"); + setting.saveValue(setting.defaultValue); + return getFilterPatterns(setting); + } + } + return patterns; + } + + public CustomFilterGroup(SettingsEnum setting, SettingsEnum filter) { + super(setting, getFilterPatterns(filter)); } } diff --git a/app/src/main/java/app/revanced/integrations/utils/ByteTrieSearch.java b/app/src/main/java/app/revanced/integrations/utils/ByteTrieSearch.java index 02a1ff705c..4e47d5551b 100644 --- a/app/src/main/java/app/revanced/integrations/utils/ByteTrieSearch.java +++ b/app/src/main/java/app/revanced/integrations/utils/ByteTrieSearch.java @@ -1,10 +1,5 @@ package app.revanced.integrations.utils; -import androidx.annotation.NonNull; -import androidx.annotation.Nullable; - -import java.util.Objects; - public final class ByteTrieSearch extends TrieSearch { private static final class ByteTrieNode extends TrieNode { @@ -22,35 +17,25 @@ TrieNode createNode(char nodeCharacterValue) { char getCharValue(byte[] text, int index) { return (char) text[index]; } + @Override + int getTextLength(byte[] text) { + return text.length; + } } - public ByteTrieSearch() { - super(new ByteTrieNode()); - } - - @Override - public void addPattern(@NonNull byte[] pattern) { - super.addPattern(pattern, pattern.length, null); - } - - @Override - public void addPattern(@NonNull byte[] pattern, @NonNull TriePatternMatchedCallback callback) { - super.addPattern(pattern, pattern.length, Objects.requireNonNull(callback)); - } - - @Override - public boolean matches(@NonNull byte[] textToSearch, int startIndex, int endIndex, @Nullable Object callbackParameter) { - return super.matches(textToSearch, textToSearch.length, startIndex, endIndex, callbackParameter); - } - - @Override - public boolean matches(@NonNull byte[] textToSearch, int startIndex) { - return matches(textToSearch, startIndex, textToSearch.length, null); + /** + * @return If the pattern is valid to add to this instance. + */ + public static boolean isValidPattern(byte[] pattern) { + for (byte b : pattern) { + if (TrieNode.isInvalidRange((char) b)) { + return false; + } + } + return true; } - @Override - public boolean matches(@NonNull byte[] textToSearch, @Nullable Object callbackParameter) { - return matches(textToSearch,0, textToSearch.length, callbackParameter); + public ByteTrieSearch() { + super(new ByteTrieNode()); } - } diff --git a/app/src/main/java/app/revanced/integrations/utils/StringTrieSearch.java b/app/src/main/java/app/revanced/integrations/utils/StringTrieSearch.java index 28d960cf98..8c7aeeb103 100644 --- a/app/src/main/java/app/revanced/integrations/utils/StringTrieSearch.java +++ b/app/src/main/java/app/revanced/integrations/utils/StringTrieSearch.java @@ -1,10 +1,5 @@ package app.revanced.integrations.utils; -import androidx.annotation.NonNull; -import androidx.annotation.Nullable; - -import java.util.Objects; - /** * Text pattern searching using a prefix tree (trie). */ @@ -25,34 +20,25 @@ TrieNode createNode(char nodeValue) { char getCharValue(String text, int index) { return text.charAt(index); } + @Override + int getTextLength(String text) { + return text.length(); + } } - public StringTrieSearch() { - super(new StringTrieNode()); - } - - @Override - public void addPattern(@NonNull String pattern) { - super.addPattern(pattern, pattern.length(), null); - } - - @Override - public void addPattern(@NonNull String pattern, @NonNull TriePatternMatchedCallback callback) { - super.addPattern(pattern, pattern.length(), Objects.requireNonNull(callback)); - } - - @Override - public boolean matches(@NonNull String textToSearch, int startIndex, int endIndex, @Nullable Object callbackParameter) { - return super.matches(textToSearch, textToSearch.length(), startIndex, endIndex, callbackParameter); - } - - @Override - public boolean matches(@NonNull String textToSearch, @Nullable Object callbackParameter) { - return matches(textToSearch, 0, textToSearch.length(), callbackParameter); + /** + * @return If the pattern is valid to add to this instance. + */ + public static boolean isValidPattern(String pattern) { + for (int i = 0, length = pattern.length(); i < length; i++) { + if (TrieNode.isInvalidRange(pattern.charAt(i))) { + return false; + } + } + return true; } - @Override - public boolean matches(@NonNull String textToSearch, int startIndex) { - return matches(textToSearch, startIndex, textToSearch.length(), null); + public StringTrieSearch() { + super(new StringTrieNode()); } } diff --git a/app/src/main/java/app/revanced/integrations/utils/TrieSearch.java b/app/src/main/java/app/revanced/integrations/utils/TrieSearch.java index d42c305c94..437c791604 100644 --- a/app/src/main/java/app/revanced/integrations/utils/TrieSearch.java +++ b/app/src/main/java/app/revanced/integrations/utils/TrieSearch.java @@ -86,7 +86,7 @@ static abstract class TrieNode { private static final int CHILDREN_ARRAY_INCREASE_SIZE_INCREMENT = 2; private static final int CHILDREN_ARRAY_MAX_SIZE = MAX_VALID_CHAR - MIN_VALID_CHAR + 1; - private static boolean isInvalidRange(char character) { + static boolean isInvalidRange(char character) { return character < MIN_VALID_CHAR || character > MAX_VALID_CHAR; } @@ -227,7 +227,7 @@ private static boolean addNodeToArray(TrieNode[] array, TrieNode child } private static int hashIndexForTableSize(int arraySize, char nodeValue) { - return (nodeValue - MIN_VALID_CHAR) % arraySize; + return nodeValue % arraySize; } /** @@ -300,6 +300,7 @@ private int estimatedNumberOfPointersUsed() { abstract TrieNode createNode(char nodeValue); abstract char getCharValue(T text, int index); + abstract int getTextLength(T text); } /** @@ -323,6 +324,23 @@ public final void addPatterns(@NonNull T... patterns) { } } + /** + * Adds a pattern that will always return a positive match if found. + * + * @param pattern Pattern to add. Calling this with a zero length pattern does nothing. + */ + public void addPattern(@NonNull T pattern) { + addPattern(pattern, root.getTextLength(pattern), null); + } + + /** + * @param pattern Pattern to add. Calling this with a zero length pattern does nothing. + * @param callback Callback to determine if searching should halt when a match is found. + */ + public void addPattern(@NonNull T pattern, @NonNull TriePatternMatchedCallback callback) { + addPattern(pattern, root.getTextLength(pattern), Objects.requireNonNull(callback)); + } + void addPattern(@NonNull T pattern, int patternLength, @Nullable TriePatternMatchedCallback callback) { if (patternLength == 0) return; // Nothing to match @@ -330,8 +348,38 @@ void addPattern(@NonNull T pattern, int patternLength, @Nullable TriePatternMatc root.addPattern(pattern, patternLength, 0, callback); } - final boolean matches(@NonNull T textToSearch, int textToSearchLength, int startIndex, int endIndex, - @Nullable Object callbackParameter) { + public final boolean matches(@NonNull T textToSearch) { + return matches(textToSearch, 0); + } + + public boolean matches(@NonNull T textToSearch, @NonNull Object callbackParameter) { + return matches(textToSearch, 0, root.getTextLength(textToSearch), + Objects.requireNonNull(callbackParameter)); + } + + public boolean matches(@NonNull T textToSearch, int startIndex) { + return matches(textToSearch, startIndex, root.getTextLength(textToSearch)); + } + + public final boolean matches(@NonNull T textToSearch, int startIndex, int endIndex) { + return matches(textToSearch, startIndex, endIndex, null); + } + + /** + * Searches through text, looking for any substring that matches any pattern in this tree. + * + * @param textToSearch Text to search through. + * @param startIndex Index to start searching, inclusive value. + * @param endIndex Index to stop matching, exclusive value. + * @param callbackParameter Optional parameter passed to the callbacks. + * @return If any pattern matched, and it's callback halted searching. + */ + public boolean matches(@NonNull T textToSearch, int startIndex, int endIndex, @Nullable Object callbackParameter) { + return matches(textToSearch, root.getTextLength(textToSearch), startIndex, endIndex, callbackParameter); + } + + private boolean matches(@NonNull T textToSearch, int textToSearchLength, int startIndex, int endIndex, + @Nullable Object callbackParameter) { if (endIndex > textToSearchLength) { throw new IllegalArgumentException("endIndex: " + endIndex + " is greater than texToSearchLength: " + textToSearchLength); @@ -365,41 +413,4 @@ public int numberOfPatterns() { public List getPatterns() { return Collections.unmodifiableList(patterns); } - - /** - * Adds a pattern that will always return a positive match if found. - * - * @param pattern Pattern to add. Calling this with a zero length pattern does nothing. - */ - public abstract void addPattern(@NonNull T pattern); - - /** - * @param pattern Pattern to add. Calling this with a zero length pattern does nothing. - * @param callback Callback to determine if searching should halt when a match is found. - */ - public abstract void addPattern(@NonNull T pattern, @NonNull TriePatternMatchedCallback callback); - - - /** - * Searches through text, looking for any substring that matches any pattern in this tree. - * - * @param textToSearch Text to search through. - * @param startIndex Index to start searching, inclusive value. - * @param endIndex Index to stop matching, exclusive value. - * @param callbackParameter Optional parameter passed to the callbacks. - * @return If any pattern matched, and it's callback halted searching. - */ - public abstract boolean matches(@NonNull T textToSearch, int startIndex, int endIndex, @Nullable Object callbackParameter); - - public abstract boolean matches(@NonNull T textToSearch, int startIndex); - - public abstract boolean matches(@NonNull T textToSearch, @Nullable Object callbackParameter); - - public final boolean matches(@NonNull T textToSearch, int startIndex, int endIndex) { - return matches(textToSearch, startIndex, endIndex, null); - } - - public final boolean matches(@NonNull T textToSearch) { - return matches(textToSearch, 0); - } } From 3e08847dcecb2c3a50226683670ba182a170dfef Mon Sep 17 00:00:00 2001 From: semantic-release-bot Date: Sat, 21 Oct 2023 12:21:57 +0000 Subject: [PATCH 07/24] chore(release): 0.120.1-dev.3 [skip ci] ## [0.120.1-dev.3](https://github.com/ReVanced/revanced-integrations/compare/v0.120.1-dev.2...v0.120.1-dev.3) (2023-10-21) ### Bug Fixes * **YouTube - Custom filter:** Fix app crash if invalid character is used in custom filter ([#506](https://github.com/ReVanced/revanced-integrations/issues/506)) ([debd0a2](https://github.com/ReVanced/revanced-integrations/commit/debd0a2e1101e543161390fd3ced6bda19030155)) --- CHANGELOG.md | 7 +++++++ gradle.properties | 2 +- 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 5df2a3a02c..d405f7dee5 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,10 @@ +## [0.120.1-dev.3](https://github.com/ReVanced/revanced-integrations/compare/v0.120.1-dev.2...v0.120.1-dev.3) (2023-10-21) + + +### Bug Fixes + +* **YouTube - Custom filter:** Fix app crash if invalid character is used in custom filter ([#506](https://github.com/ReVanced/revanced-integrations/issues/506)) ([debd0a2](https://github.com/ReVanced/revanced-integrations/commit/debd0a2e1101e543161390fd3ced6bda19030155)) + ## [0.120.1-dev.2](https://github.com/ReVanced/revanced-integrations/compare/v0.120.1-dev.1...v0.120.1-dev.2) (2023-10-20) diff --git a/gradle.properties b/gradle.properties index 4816d52dff..13ba035bc6 100644 --- a/gradle.properties +++ b/gradle.properties @@ -1,4 +1,4 @@ org.gradle.parallel = true org.gradle.caching = true android.useAndroidX = true -version = 0.120.1-dev.2 +version = 0.120.1-dev.3 From 04608d32e88d184e4662a71498d7a49c1fbbdb25 Mon Sep 17 00:00:00 2001 From: oSumAtrIX Date: Mon, 23 Oct 2023 21:46:38 +0200 Subject: [PATCH 08/24] feat(YouTube - Hide layout components): Hide video quality menu footer --- .../patches/components/LayoutComponentsFilter.java | 6 ++++++ .../app/revanced/integrations/settings/SettingsEnum.java | 1 + 2 files changed, 7 insertions(+) diff --git a/app/src/main/java/app/revanced/integrations/patches/components/LayoutComponentsFilter.java b/app/src/main/java/app/revanced/integrations/patches/components/LayoutComponentsFilter.java index a5882d2210..21134ae792 100644 --- a/app/src/main/java/app/revanced/integrations/patches/components/LayoutComponentsFilter.java +++ b/app/src/main/java/app/revanced/integrations/patches/components/LayoutComponentsFilter.java @@ -120,6 +120,11 @@ public LayoutComponentsFilter() { "inline_expander" ); + final var videoQualityMenuFooter = new StringFilterGroup( + SettingsEnum.HIDE_VIDEO_QUALITY_MENU_FOOTER, + "quality_sheet_footer" + ); + final var chapters = new StringFilterGroup( SettingsEnum.HIDE_CHAPTERS, "macro_markers_carousel" @@ -196,6 +201,7 @@ public LayoutComponentsFilter() { joinMembership, medicalPanel, notifyMe, + videoQualityMenuFooter, infoPanel, subscribersCommunityGuidelines, channelGuidelines, diff --git a/app/src/main/java/app/revanced/integrations/settings/SettingsEnum.java b/app/src/main/java/app/revanced/integrations/settings/SettingsEnum.java index a6f47755c6..cec7408497 100644 --- a/app/src/main/java/app/revanced/integrations/settings/SettingsEnum.java +++ b/app/src/main/java/app/revanced/integrations/settings/SettingsEnum.java @@ -55,6 +55,7 @@ public enum SettingsEnum { HIDE_CHANNEL_BAR("revanced_hide_channel_bar", BOOLEAN, FALSE), HIDE_CHANNEL_MEMBER_SHELF("revanced_hide_channel_member_shelf", BOOLEAN, TRUE), HIDE_EXPANDABLE_CHIP("revanced_hide_expandable_chip", BOOLEAN, TRUE), + HIDE_VIDEO_QUALITY_MENU_FOOTER("revanced_hide_video_quality_menu_footer", BOOLEAN, TRUE), HIDE_CHAPTERS("revanced_hide_chapters", BOOLEAN, TRUE), HIDE_COMMUNITY_GUIDELINES("revanced_hide_community_guidelines", BOOLEAN, TRUE), HIDE_COMMUNITY_POSTS("revanced_hide_community_posts", BOOLEAN, FALSE), From 959ae4f3be2878a84b08b32ac940fce8164ab4ac Mon Sep 17 00:00:00 2001 From: semantic-release-bot Date: Mon, 23 Oct 2023 19:51:04 +0000 Subject: [PATCH 09/24] chore(release): 0.121.0-dev.1 [skip ci] # [0.121.0-dev.1](https://github.com/ReVanced/revanced-integrations/compare/v0.120.1-dev.3...v0.121.0-dev.1) (2023-10-23) ### Features * **YouTube - Hide layout components:** Hide video quality menu footer ([04608d3](https://github.com/ReVanced/revanced-integrations/commit/04608d32e88d184e4662a71498d7a49c1fbbdb25)) --- CHANGELOG.md | 7 +++++++ gradle.properties | 2 +- 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index d405f7dee5..3c03dfff62 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,10 @@ +# [0.121.0-dev.1](https://github.com/ReVanced/revanced-integrations/compare/v0.120.1-dev.3...v0.121.0-dev.1) (2023-10-23) + + +### Features + +* **YouTube - Hide layout components:** Hide video quality menu footer ([04608d3](https://github.com/ReVanced/revanced-integrations/commit/04608d32e88d184e4662a71498d7a49c1fbbdb25)) + ## [0.120.1-dev.3](https://github.com/ReVanced/revanced-integrations/compare/v0.120.1-dev.2...v0.120.1-dev.3) (2023-10-21) diff --git a/gradle.properties b/gradle.properties index 13ba035bc6..6dc11eb796 100644 --- a/gradle.properties +++ b/gradle.properties @@ -1,4 +1,4 @@ org.gradle.parallel = true org.gradle.caching = true android.useAndroidX = true -version = 0.120.1-dev.3 +version = 0.121.0-dev.1 From 98c91af130b57322aa98a3e66ec0acad26bfc7d6 Mon Sep 17 00:00:00 2001 From: LisoUseInAIKyrios <118716522+LisoUseInAIKyrios@users.noreply.github.com> Date: Tue, 24 Oct 2023 23:34:13 +0300 Subject: [PATCH 10/24] fix(YouTube - ReturnYouTubeDislike): Fix RYD prefetching home feed Shorts (#508) --- .../patches/ReturnYouTubeDislikePatch.java | 14 +++++++++----- .../integrations/patches/VideoInformation.java | 2 +- .../ReturnYouTubeDislikeFilterPatch.java | 4 ++-- 3 files changed, 12 insertions(+), 8 deletions(-) diff --git a/app/src/main/java/app/revanced/integrations/patches/ReturnYouTubeDislikePatch.java b/app/src/main/java/app/revanced/integrations/patches/ReturnYouTubeDislikePatch.java index 7bbcb8b852..cd5ef761bf 100644 --- a/app/src/main/java/app/revanced/integrations/patches/ReturnYouTubeDislikePatch.java +++ b/app/src/main/java/app/revanced/integrations/patches/ReturnYouTubeDislikePatch.java @@ -404,11 +404,14 @@ private static boolean isShortTextViewOnScreen(@NonNull View view) { /** * Injection point. Uses 'playback response' video id hook to preload RYD. */ - public static void preloadVideoId(@NonNull String videoId) { - if (!SettingsEnum.RYD_ENABLED.getBoolean()) { + public static void preloadVideoId(@NonNull String videoId, boolean videoIsOpeningOrPlaying) { + // Shorts shelf in home and subscription feed causes player response hook to be called, + // and the 'is opening/playing' parameter will be false. + // This hook will be called again when the Short is actually opened. + if (!videoIsOpeningOrPlaying || !SettingsEnum.RYD_ENABLED.getBoolean()) { return; } - if (!SettingsEnum.RYD_SHORTS.getBoolean() && PlayerType.getCurrent().isNoneOrHidden()) { + if (!SettingsEnum.RYD_SHORTS.getBoolean() && PlayerType.getCurrent().isNoneHiddenOrSlidingMinimized()) { return; } if (videoId.equals(lastPrefetchedVideoId)) { @@ -471,12 +474,13 @@ public static void newVideoLoaded(@Nullable String videoId, boolean isShortsLith if (videoIdIsSame(currentVideoData, videoId)) { return; } - currentVideoData = ReturnYouTubeDislike.getFetchForVideoId(videoId); + ReturnYouTubeDislike data = ReturnYouTubeDislike.getFetchForVideoId(videoId); // Pre-emptively set the data to short status. // Required to prevent Shorts data from being used on a minimized video in incognito mode. if (isNoneHiddenOrSlidingMinimized) { - currentVideoData.setVideoIdIsShort(true); + data.setVideoIdIsShort(true); } + currentVideoData = data; } LogHelper.printDebug(() -> "New video id: " + videoId + " playerType: " + currentPlayerType diff --git a/app/src/main/java/app/revanced/integrations/patches/VideoInformation.java b/app/src/main/java/app/revanced/integrations/patches/VideoInformation.java index ee9034b0b3..9d18190588 100644 --- a/app/src/main/java/app/revanced/integrations/patches/VideoInformation.java +++ b/app/src/main/java/app/revanced/integrations/patches/VideoInformation.java @@ -69,7 +69,7 @@ public static void setVideoId(@NonNull String newlyLoadedVideoId) { * * @param videoId The id of the last video loaded. */ - public static void setPlayerResponseVideoId(@NonNull String videoId) { + public static void setPlayerResponseVideoId(@NonNull String videoId, boolean videoIsOpeningOrPlaying) { if (!playerResponseVideoId.equals(videoId)) { LogHelper.printDebug(() -> "New player response video id: " + videoId); playerResponseVideoId = videoId; diff --git a/app/src/main/java/app/revanced/integrations/patches/components/ReturnYouTubeDislikeFilterPatch.java b/app/src/main/java/app/revanced/integrations/patches/components/ReturnYouTubeDislikeFilterPatch.java index b52fd486fc..b1ff2d2e18 100644 --- a/app/src/main/java/app/revanced/integrations/patches/components/ReturnYouTubeDislikeFilterPatch.java +++ b/app/src/main/java/app/revanced/integrations/patches/components/ReturnYouTubeDislikeFilterPatch.java @@ -53,9 +53,9 @@ protected boolean removeEldestEntry(Map.Entry eldest) { /** * Injection point. */ - public static void newPlayerResponseVideoId(String videoId) { + public static void newPlayerResponseVideoId(String videoId, boolean videoIsOpeningOrPlaying) { try { - if (!SettingsEnum.RYD_SHORTS.getBoolean()) { + if (!videoIsOpeningOrPlaying || !SettingsEnum.RYD_SHORTS.getBoolean()) { return; } synchronized (lastVideoIds) { From 8cbb50b8ed0a49e52036521759c649175ee63221 Mon Sep 17 00:00:00 2001 From: semantic-release-bot Date: Tue, 24 Oct 2023 20:39:24 +0000 Subject: [PATCH 11/24] chore(release): 0.121.0-dev.2 [skip ci] # [0.121.0-dev.2](https://github.com/ReVanced/revanced-integrations/compare/v0.121.0-dev.1...v0.121.0-dev.2) (2023-10-24) ### Bug Fixes * **YouTube - ReturnYouTubeDislike:** Fix RYD prefetching home feed Shorts ([#508](https://github.com/ReVanced/revanced-integrations/issues/508)) ([98c91af](https://github.com/ReVanced/revanced-integrations/commit/98c91af130b57322aa98a3e66ec0acad26bfc7d6)) --- CHANGELOG.md | 7 +++++++ gradle.properties | 2 +- 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 3c03dfff62..d646c03d8c 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,10 @@ +# [0.121.0-dev.2](https://github.com/ReVanced/revanced-integrations/compare/v0.121.0-dev.1...v0.121.0-dev.2) (2023-10-24) + + +### Bug Fixes + +* **YouTube - ReturnYouTubeDislike:** Fix RYD prefetching home feed Shorts ([#508](https://github.com/ReVanced/revanced-integrations/issues/508)) ([98c91af](https://github.com/ReVanced/revanced-integrations/commit/98c91af130b57322aa98a3e66ec0acad26bfc7d6)) + # [0.121.0-dev.1](https://github.com/ReVanced/revanced-integrations/compare/v0.120.1-dev.3...v0.121.0-dev.1) (2023-10-23) diff --git a/gradle.properties b/gradle.properties index 6dc11eb796..ffafb6bacf 100644 --- a/gradle.properties +++ b/gradle.properties @@ -1,4 +1,4 @@ org.gradle.parallel = true org.gradle.caching = true android.useAndroidX = true -version = 0.121.0-dev.1 +version = 0.121.0-dev.2 From bf5071107b8bc88ac6562d45bfa28bdab8e566c7 Mon Sep 17 00:00:00 2001 From: oSumAtrIX Date: Wed, 25 Oct 2023 01:46:44 +0200 Subject: [PATCH 12/24] feat(YouTube): Add `Disable fullscreen ambient mode` patch --- .../patches/DisableFullscreenAmbientModePatch.java | 10 ++++++++++ .../revanced/integrations/settings/SettingsEnum.java | 2 +- 2 files changed, 11 insertions(+), 1 deletion(-) create mode 100644 app/src/main/java/app/revanced/integrations/patches/DisableFullscreenAmbientModePatch.java diff --git a/app/src/main/java/app/revanced/integrations/patches/DisableFullscreenAmbientModePatch.java b/app/src/main/java/app/revanced/integrations/patches/DisableFullscreenAmbientModePatch.java new file mode 100644 index 0000000000..546880bf8e --- /dev/null +++ b/app/src/main/java/app/revanced/integrations/patches/DisableFullscreenAmbientModePatch.java @@ -0,0 +1,10 @@ +package app.revanced.integrations.patches; + +import app.revanced.integrations.settings.SettingsEnum; + +/** @noinspection unused*/ +public final class DisableFullscreenAmbientModePatch { + public static boolean enableFullScreenAmbientMode() { + return !SettingsEnum.DISABLE_FULLSCREEN_AMBIENT_MODE.getBoolean(); + } +} diff --git a/app/src/main/java/app/revanced/integrations/settings/SettingsEnum.java b/app/src/main/java/app/revanced/integrations/settings/SettingsEnum.java index cec7408497..2d1c21ac34 100644 --- a/app/src/main/java/app/revanced/integrations/settings/SettingsEnum.java +++ b/app/src/main/java/app/revanced/integrations/settings/SettingsEnum.java @@ -147,7 +147,7 @@ public enum SettingsEnum { HIDE_SHORTS_CHANNEL_BAR("revanced_hide_shorts_channel_bar", BOOLEAN, FALSE), HIDE_SHORTS_NAVIGATION_BAR("revanced_hide_shorts_navigation_bar", BOOLEAN, TRUE, true), HIDE_SHORTS("revanced_hide_shorts", BOOLEAN, FALSE, true), - + DISABLE_FULLSCREEN_AMBIENT_MODE("revanced_disable_fullscreen_ambient_mode", BOOLEAN, TRUE, true), ALT_THUMBNAIL("revanced_alt_thumbnail", BOOLEAN, FALSE), ALT_THUMBNAIL_TYPE("revanced_alt_thumbnail_type", INTEGER, 2, parents(ALT_THUMBNAIL)), ALT_THUMBNAIL_FAST_QUALITY("revanced_alt_thumbnail_fast_quality", BOOLEAN, FALSE, parents(ALT_THUMBNAIL)), From 6bd5aae9772e80809dbee9f8fffc1247364a9a13 Mon Sep 17 00:00:00 2001 From: oSumAtrIX Date: Wed, 25 Oct 2023 01:47:03 +0200 Subject: [PATCH 13/24] feat(YouTube): Add `Disable suggested video end screen` patch --- .../DisableSuggestedVideoEndScreenPatch.java | 13 +++++++++++++ .../integrations/settings/SettingsEnum.java | 1 + 2 files changed, 14 insertions(+) create mode 100644 app/src/main/java/app/revanced/integrations/patches/DisableSuggestedVideoEndScreenPatch.java diff --git a/app/src/main/java/app/revanced/integrations/patches/DisableSuggestedVideoEndScreenPatch.java b/app/src/main/java/app/revanced/integrations/patches/DisableSuggestedVideoEndScreenPatch.java new file mode 100644 index 0000000000..9f43581883 --- /dev/null +++ b/app/src/main/java/app/revanced/integrations/patches/DisableSuggestedVideoEndScreenPatch.java @@ -0,0 +1,13 @@ +package app.revanced.integrations.patches; + +import android.widget.ImageView; +import app.revanced.integrations.settings.SettingsEnum; + +/** @noinspection unused*/ +public final class DisableSuggestedVideoEndScreenPatch { + public static void closeEndScreen(ImageView imageView) { + if (!SettingsEnum.DISABLE_SUGGESTED_VIDEO_END_SCREEN.getBoolean()) return; + + imageView.performClick(); + } +} diff --git a/app/src/main/java/app/revanced/integrations/settings/SettingsEnum.java b/app/src/main/java/app/revanced/integrations/settings/SettingsEnum.java index 2d1c21ac34..873d1490b3 100644 --- a/app/src/main/java/app/revanced/integrations/settings/SettingsEnum.java +++ b/app/src/main/java/app/revanced/integrations/settings/SettingsEnum.java @@ -147,6 +147,7 @@ public enum SettingsEnum { HIDE_SHORTS_CHANNEL_BAR("revanced_hide_shorts_channel_bar", BOOLEAN, FALSE), HIDE_SHORTS_NAVIGATION_BAR("revanced_hide_shorts_navigation_bar", BOOLEAN, TRUE, true), HIDE_SHORTS("revanced_hide_shorts", BOOLEAN, FALSE, true), + DISABLE_SUGGESTED_VIDEO_END_SCREEN("revanced_disable_suggested_video_end_screen", BOOLEAN, TRUE), DISABLE_FULLSCREEN_AMBIENT_MODE("revanced_disable_fullscreen_ambient_mode", BOOLEAN, TRUE, true), ALT_THUMBNAIL("revanced_alt_thumbnail", BOOLEAN, FALSE), ALT_THUMBNAIL_TYPE("revanced_alt_thumbnail_type", INTEGER, 2, parents(ALT_THUMBNAIL)), From 0fbf7a34342d17c14dce02ea388ba1b7724041b3 Mon Sep 17 00:00:00 2001 From: semantic-release-bot Date: Tue, 24 Oct 2023 23:51:06 +0000 Subject: [PATCH 14/24] chore(release): 0.121.0-dev.3 [skip ci] # [0.121.0-dev.3](https://github.com/ReVanced/revanced-integrations/compare/v0.121.0-dev.2...v0.121.0-dev.3) (2023-10-24) ### Features * **YouTube:** Add `Disable fullscreen ambient mode` patch ([bf50711](https://github.com/ReVanced/revanced-integrations/commit/bf5071107b8bc88ac6562d45bfa28bdab8e566c7)) * **YouTube:** Add `Disable suggested video end screen` patch ([6bd5aae](https://github.com/ReVanced/revanced-integrations/commit/6bd5aae9772e80809dbee9f8fffc1247364a9a13)) --- CHANGELOG.md | 8 ++++++++ gradle.properties | 2 +- 2 files changed, 9 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index d646c03d8c..320b523256 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,11 @@ +# [0.121.0-dev.3](https://github.com/ReVanced/revanced-integrations/compare/v0.121.0-dev.2...v0.121.0-dev.3) (2023-10-24) + + +### Features + +* **YouTube:** Add `Disable fullscreen ambient mode` patch ([bf50711](https://github.com/ReVanced/revanced-integrations/commit/bf5071107b8bc88ac6562d45bfa28bdab8e566c7)) +* **YouTube:** Add `Disable suggested video end screen` patch ([6bd5aae](https://github.com/ReVanced/revanced-integrations/commit/6bd5aae9772e80809dbee9f8fffc1247364a9a13)) + # [0.121.0-dev.2](https://github.com/ReVanced/revanced-integrations/compare/v0.121.0-dev.1...v0.121.0-dev.2) (2023-10-24) diff --git a/gradle.properties b/gradle.properties index ffafb6bacf..b7d52bab03 100644 --- a/gradle.properties +++ b/gradle.properties @@ -1,4 +1,4 @@ org.gradle.parallel = true org.gradle.caching = true android.useAndroidX = true -version = 0.121.0-dev.2 +version = 0.121.0-dev.3 From 40cfa1e9af2b064b464c4d03d5c28b5932621d62 Mon Sep 17 00:00:00 2001 From: LisoUseInAIKyrios <118716522+LisoUseInAIKyrios@users.noreply.github.com> Date: Wed, 25 Oct 2023 12:53:44 +0300 Subject: [PATCH 15/24] fix(YouTube - ReturnYouTubeDislike): Use API back off if client connection fails for any reason (#509) --- .../ReturnYouTubeDislike.java | 2 +- .../requests/ReturnYouTubeDislikeApi.java | 84 ++++++++----------- 2 files changed, 38 insertions(+), 48 deletions(-) diff --git a/app/src/main/java/app/revanced/integrations/returnyoutubedislike/ReturnYouTubeDislike.java b/app/src/main/java/app/revanced/integrations/returnyoutubedislike/ReturnYouTubeDislike.java index da8cd810a9..9890708622 100644 --- a/app/src/main/java/app/revanced/integrations/returnyoutubedislike/ReturnYouTubeDislike.java +++ b/app/src/main/java/app/revanced/integrations/returnyoutubedislike/ReturnYouTubeDislike.java @@ -80,7 +80,7 @@ public enum Vote { * How long to retain unsuccessful RYD fetches, * and also the minimum time before retrying again. */ - private static final long CACHE_TIMEOUT_FAILURE_MILLISECONDS = 2 * 60 * 1000; // 2 Minutes + private static final long CACHE_TIMEOUT_FAILURE_MILLISECONDS = 3 * 60 * 1000; // 3 Minutes /** * Unique placeholder character, used to detect if a segmented span already has dislikes added to it. diff --git a/app/src/main/java/app/revanced/integrations/returnyoutubedislike/requests/ReturnYouTubeDislikeApi.java b/app/src/main/java/app/revanced/integrations/returnyoutubedislike/requests/ReturnYouTubeDislikeApi.java index f10ed8210f..9403ee0c2c 100644 --- a/app/src/main/java/app/revanced/integrations/returnyoutubedislike/requests/ReturnYouTubeDislikeApi.java +++ b/app/src/main/java/app/revanced/integrations/returnyoutubedislike/requests/ReturnYouTubeDislikeApi.java @@ -32,13 +32,13 @@ public class ReturnYouTubeDislikeApi { /** * {@link #fetchVotes(String)} TCP connection timeout */ - private static final int API_GET_VOTES_TCP_TIMEOUT_MILLISECONDS = 2000; + private static final int API_GET_VOTES_TCP_TIMEOUT_MILLISECONDS = 2 * 1000; // 2 Seconds. /** * {@link #fetchVotes(String)} HTTP read timeout. * To locally debug and force timeouts, change this to a very small number (ie: 100) */ - private static final int API_GET_VOTES_HTTP_TIMEOUT_MILLISECONDS = 5000; + private static final int API_GET_VOTES_HTTP_TIMEOUT_MILLISECONDS = 5 * 1000; // 5 Seconds. /** * Default connection and response timeout for voting and registration. @@ -46,7 +46,7 @@ public class ReturnYouTubeDislikeApi { * Voting and user registration runs in the background and has has no urgency * so this can be a larger value. */ - private static final int API_REGISTER_VOTE_TIMEOUT_MILLISECONDS = 90000; + private static final int API_REGISTER_VOTE_TIMEOUT_MILLISECONDS = 60 * 1000; // 60 Seconds. /** * Response code of a successful API call @@ -54,31 +54,30 @@ public class ReturnYouTubeDislikeApi { private static final int HTTP_STATUS_CODE_SUCCESS = 200; /** - * Response code indicating the video id is not for a video that can be voted for. - * (it's not a Short or a regular video, and it's likely a YouTube Story) + * Indicates a client rate limit has been reached and the client must back off. */ - private static final int HTTP_STATUS_CODE_NOT_FOUND = 404; + private static final int HTTP_STATUS_CODE_RATE_LIMIT = 429; /** - * Indicates a client rate limit has been reached + * How long to wait until API calls are resumed, if the API requested a back off. + * No clear guideline of how long to wait until resuming. */ - private static final int RATE_LIMIT_HTTP_STATUS_CODE = 429; + private static final int BACKOFF_RATE_LIMIT_MILLISECONDS = 4 * 60 * 1000; // 4 Minutes. /** - * How long to wait until API calls are resumed, if a rate limit is hit. - * No clear guideline of how long to backoff. Using 2 minutes for now. + * How long to wait until API calls are resumed, if any connection error occurs. */ - private static final int RATE_LIMIT_BACKOFF_SECONDS = 120; + private static final int BACKOFF_CONNECTION_ERROR_MILLISECONDS = 60 * 1000; // 60 Seconds. /** - * Last time a {@link #RATE_LIMIT_HTTP_STATUS_CODE} was reached. - * zero if has not been reached. + * If non zero, then the system time of when API calls can resume. */ - private static volatile long lastTimeRateLimitWasHit; // must be volatile, since different threads read/write to this + private static volatile long timeToResumeAPICalls; // must be volatile, since different threads read/write to this /** - * Number of times {@link #RATE_LIMIT_HTTP_STATUS_CODE} was requested by RYD api. - * Does not include network calls attempted while rate limit is in effect + * Number of times {@link #HTTP_STATUS_CODE_RATE_LIMIT} was requested by RYD api. + * Does not include network calls attempted while rate limit is in effect, + * and does not include rate limit imposed if a fetch fails. */ private static volatile int numberOfRateLimitRequestsEncountered; @@ -165,16 +164,16 @@ private static long randomlyWaitIfLocallyDebugging() { * @return True, if api rate limit is in effect. */ private static boolean checkIfRateLimitInEffect(String apiEndPointName) { - if (lastTimeRateLimitWasHit == 0) { + if (timeToResumeAPICalls == 0) { return false; } - final long numberOfSecondsSinceLastRateLimit = (System.currentTimeMillis() - lastTimeRateLimitWasHit) / 1000; - if (numberOfSecondsSinceLastRateLimit < RATE_LIMIT_BACKOFF_SECONDS) { - LogHelper.printDebug(() -> "Ignoring api call " + apiEndPointName + " as only " - + numberOfSecondsSinceLastRateLimit + " seconds has passed since last rate limit."); - return true; + final long now = System.currentTimeMillis(); + if (now > timeToResumeAPICalls) { + timeToResumeAPICalls = 0; + return false; } - return false; + LogHelper.printDebug(() -> "Ignoring api call " + apiEndPointName + " as rate limit is in effect"); + return true; } /** @@ -186,37 +185,33 @@ private static boolean checkIfRateLimitWasHit(int httpResponseCode) { final double RANDOM_RATE_LIMIT_PERCENTAGE = 0.2; // 20% chance of a triggering a rate limit if (Math.random() < RANDOM_RATE_LIMIT_PERCENTAGE) { LogHelper.printDebug(() -> "Artificially triggering rate limit for debug purposes"); - httpResponseCode = RATE_LIMIT_HTTP_STATUS_CODE; + httpResponseCode = HTTP_STATUS_CODE_RATE_LIMIT; } } - - if (httpResponseCode == RATE_LIMIT_HTTP_STATUS_CODE) { - lastTimeRateLimitWasHit = System.currentTimeMillis(); - //noinspection NonAtomicOperationOnVolatileField // don't care, field is used only as an estimate - numberOfRateLimitRequestsEncountered++; - LogHelper.printDebug(() -> "API rate limit was hit. Stopping API calls for the next " - + RATE_LIMIT_BACKOFF_SECONDS + " seconds"); - ReVancedUtils.showToastLong(str("revanced_ryd_failure_client_rate_limit_requested")); - return true; - } - return false; + return httpResponseCode == HTTP_STATUS_CODE_RATE_LIMIT; } - @SuppressWarnings("NonAtomicOperationOnVolatileField") // do not want to pay performance cost of full synchronization for debug fields that are only estimates anyways - private static void updateStatistics(long timeNetworkCallStarted, long timeNetworkCallEnded, boolean connectionError, boolean rateLimitHit) { + @SuppressWarnings("NonAtomicOperationOnVolatileField") // Don't care, fields are estimates. + private static void updateRateLimitAndStats(long timeNetworkCallStarted, boolean connectionError, boolean rateLimitHit) { if (connectionError && rateLimitHit) { throw new IllegalArgumentException(); } - final long responseTimeOfFetchCall = timeNetworkCallEnded - timeNetworkCallStarted; + final long responseTimeOfFetchCall = System.currentTimeMillis() - timeNetworkCallStarted; fetchCallResponseTimeTotal += responseTimeOfFetchCall; fetchCallResponseTimeMin = (fetchCallResponseTimeMin == 0) ? responseTimeOfFetchCall : Math.min(responseTimeOfFetchCall, fetchCallResponseTimeMin); fetchCallResponseTimeMax = Math.max(responseTimeOfFetchCall, fetchCallResponseTimeMax); fetchCallCount++; if (connectionError) { + timeToResumeAPICalls = System.currentTimeMillis() + BACKOFF_CONNECTION_ERROR_MILLISECONDS; fetchCallResponseTimeLast = responseTimeOfFetchCall; fetchCallNumberOfFailures++; } else if (rateLimitHit) { + LogHelper.printDebug(() -> "API rate limit was hit. Stopping API calls for the next " + + BACKOFF_RATE_LIMIT_MILLISECONDS + " seconds"); + timeToResumeAPICalls = System.currentTimeMillis() + BACKOFF_RATE_LIMIT_MILLISECONDS; + numberOfRateLimitRequestsEncountered++; fetchCallResponseTimeLast = FETCH_CALL_RESPONSE_TIME_VALUE_RATE_LIMIT; + ReVancedUtils.showToastLong(str("revanced_ryd_failure_client_rate_limit_requested")); } else { fetchCallResponseTimeLast = responseTimeOfFetchCall; } @@ -262,27 +257,22 @@ public static RYDVoteData fetchVotes(String videoId) { final int responseCode = connection.getResponseCode(); if (checkIfRateLimitWasHit(responseCode)) { connection.disconnect(); // rate limit hit, should disconnect - updateStatistics(timeNetworkCallStarted, System.currentTimeMillis(),false, true); + updateRateLimitAndStats(timeNetworkCallStarted, false, true); return null; } if (responseCode == HTTP_STATUS_CODE_SUCCESS) { - final long timeNetworkCallEnded = System.currentTimeMillis(); // record end time before parsing // do not disconnect, the same server connection will likely be used again soon JSONObject json = Requester.parseJSONObject(connection); try { RYDVoteData votingData = new RYDVoteData(json); - updateStatistics(timeNetworkCallStarted, timeNetworkCallEnded, false, false); + updateRateLimitAndStats(timeNetworkCallStarted, false, false); LogHelper.printDebug(() -> "Voting data fetched: " + votingData); return votingData; } catch (JSONException ex) { LogHelper.printException(() -> "Failed to parse video: " + videoId + " json: " + json, ex); // fall thru to update statistics } - } else if (responseCode == HTTP_STATUS_CODE_NOT_FOUND) { - // normal response when viewing YouTube Stories (cannot vote for these) - LogHelper.printDebug(() -> "Video has no like/dislikes (video is a YouTube Story?): " + videoId); - return null; // do not updated connection statistics } else { handleConnectionError(str("revanced_ryd_failure_connection_status_code", responseCode), null); } @@ -296,7 +286,7 @@ public static RYDVoteData fetchVotes(String videoId) { LogHelper.printException(() -> "Failed to fetch votes", ex, str("revanced_ryd_failure_generic", ex.getMessage())); } - updateStatistics(timeNetworkCallStarted, System.currentTimeMillis(), true, false); + updateRateLimitAndStats(timeNetworkCallStarted, true, false); return null; } @@ -311,7 +301,7 @@ public static String registerAsNewUser() { return null; } String userId = randomString(36); - LogHelper.printDebug(() -> "Trying to register new user: " + userId); + LogHelper.printDebug(() -> "Trying to register new user"); HttpURLConnection connection = getRYDConnectionFromRoute(ReturnYouTubeDislikeRoutes.GET_REGISTRATION, userId); connection.setRequestProperty("Accept", "application/json"); From 21bccf6a99116ce435184e6588fcfa17666c0b93 Mon Sep 17 00:00:00 2001 From: semantic-release-bot Date: Wed, 25 Oct 2023 09:58:13 +0000 Subject: [PATCH 16/24] chore(release): 0.121.0-dev.4 [skip ci] # [0.121.0-dev.4](https://github.com/ReVanced/revanced-integrations/compare/v0.121.0-dev.3...v0.121.0-dev.4) (2023-10-25) ### Bug Fixes * **YouTube - ReturnYouTubeDislike:** Use API back off if client connection fails for any reason ([#509](https://github.com/ReVanced/revanced-integrations/issues/509)) ([40cfa1e](https://github.com/ReVanced/revanced-integrations/commit/40cfa1e9af2b064b464c4d03d5c28b5932621d62)) --- CHANGELOG.md | 7 +++++++ gradle.properties | 2 +- 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 320b523256..79993f7825 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,10 @@ +# [0.121.0-dev.4](https://github.com/ReVanced/revanced-integrations/compare/v0.121.0-dev.3...v0.121.0-dev.4) (2023-10-25) + + +### Bug Fixes + +* **YouTube - ReturnYouTubeDislike:** Use API back off if client connection fails for any reason ([#509](https://github.com/ReVanced/revanced-integrations/issues/509)) ([40cfa1e](https://github.com/ReVanced/revanced-integrations/commit/40cfa1e9af2b064b464c4d03d5c28b5932621d62)) + # [0.121.0-dev.3](https://github.com/ReVanced/revanced-integrations/compare/v0.121.0-dev.2...v0.121.0-dev.3) (2023-10-24) diff --git a/gradle.properties b/gradle.properties index b7d52bab03..0d3760bdde 100644 --- a/gradle.properties +++ b/gradle.properties @@ -1,4 +1,4 @@ org.gradle.parallel = true org.gradle.caching = true android.useAndroidX = true -version = 0.121.0-dev.3 +version = 0.121.0-dev.4 From df278222e8814612797e55e616d4ebc075cafb92 Mon Sep 17 00:00:00 2001 From: oSumAtrIX Date: Wed, 25 Oct 2023 18:52:23 +0200 Subject: [PATCH 17/24] fix(YouTube - Disable suggested video end screen): Hide the view once possible Previously the patch tried to hide the screen when it was not visible to begin with. --- .../DisableSuggestedVideoEndScreenPatch.java | 17 +++++++++++++++-- 1 file changed, 15 insertions(+), 2 deletions(-) diff --git a/app/src/main/java/app/revanced/integrations/patches/DisableSuggestedVideoEndScreenPatch.java b/app/src/main/java/app/revanced/integrations/patches/DisableSuggestedVideoEndScreenPatch.java index 9f43581883..6a5c3ca322 100644 --- a/app/src/main/java/app/revanced/integrations/patches/DisableSuggestedVideoEndScreenPatch.java +++ b/app/src/main/java/app/revanced/integrations/patches/DisableSuggestedVideoEndScreenPatch.java @@ -1,13 +1,26 @@ package app.revanced.integrations.patches; +import android.annotation.SuppressLint; +import android.view.View; +import android.view.ViewGroup; import android.widget.ImageView; import app.revanced.integrations.settings.SettingsEnum; /** @noinspection unused*/ public final class DisableSuggestedVideoEndScreenPatch { - public static void closeEndScreen(ImageView imageView) { + @SuppressLint("StaticFieldLeak") + private static View lastView; + + public static void closeEndScreen(final ImageView imageView) { if (!SettingsEnum.DISABLE_SUGGESTED_VIDEO_END_SCREEN.getBoolean()) return; - imageView.performClick(); + // Get the view which can be listened to for layout changes. + final var parent = imageView.getParent().getParent(); + + // Prevent adding the listener multiple times. + if (lastView == parent) return; + + lastView = (ViewGroup)parent; + lastView.addOnLayoutChangeListener((view, i, i1, i2, i3, i4, i5, i6, i7) -> imageView.performClick()); } } From 75297a52c1c5f7c2b928964d08b055380f4a08fe Mon Sep 17 00:00:00 2001 From: oSumAtrIX Date: Wed, 25 Oct 2023 19:28:43 +0200 Subject: [PATCH 18/24] feat(YouTube): Add `Enable old seekbar thumbnails` patch --- .../patches/EnableOldSeekbarThumbnailsPatch.java | 9 +++++++++ .../app/revanced/integrations/settings/SettingsEnum.java | 1 + 2 files changed, 10 insertions(+) create mode 100644 app/src/main/java/app/revanced/integrations/patches/EnableOldSeekbarThumbnailsPatch.java diff --git a/app/src/main/java/app/revanced/integrations/patches/EnableOldSeekbarThumbnailsPatch.java b/app/src/main/java/app/revanced/integrations/patches/EnableOldSeekbarThumbnailsPatch.java new file mode 100644 index 0000000000..a24ba796ce --- /dev/null +++ b/app/src/main/java/app/revanced/integrations/patches/EnableOldSeekbarThumbnailsPatch.java @@ -0,0 +1,9 @@ +package app.revanced.integrations.patches; + +import app.revanced.integrations.settings.SettingsEnum; + +public final class EnableOldSeekbarThumbnailsPatch { + public static boolean enableOldSeekbarThumbnails() { + return !SettingsEnum.ENABLE_OLD_SEEKBAR_THUMBNAILS.getBoolean(); + } +} diff --git a/app/src/main/java/app/revanced/integrations/settings/SettingsEnum.java b/app/src/main/java/app/revanced/integrations/settings/SettingsEnum.java index 873d1490b3..691acea474 100644 --- a/app/src/main/java/app/revanced/integrations/settings/SettingsEnum.java +++ b/app/src/main/java/app/revanced/integrations/settings/SettingsEnum.java @@ -148,6 +148,7 @@ public enum SettingsEnum { HIDE_SHORTS_NAVIGATION_BAR("revanced_hide_shorts_navigation_bar", BOOLEAN, TRUE, true), HIDE_SHORTS("revanced_hide_shorts", BOOLEAN, FALSE, true), DISABLE_SUGGESTED_VIDEO_END_SCREEN("revanced_disable_suggested_video_end_screen", BOOLEAN, TRUE), + ENABLE_OLD_SEEKBAR_THUMBNAILS("revanced_enable_old_seekbar_thumbnails", BOOLEAN, TRUE), DISABLE_FULLSCREEN_AMBIENT_MODE("revanced_disable_fullscreen_ambient_mode", BOOLEAN, TRUE, true), ALT_THUMBNAIL("revanced_alt_thumbnail", BOOLEAN, FALSE), ALT_THUMBNAIL_TYPE("revanced_alt_thumbnail_type", INTEGER, 2, parents(ALT_THUMBNAIL)), From 2453d30970ac59d78647386f4fe5d904dbc145e4 Mon Sep 17 00:00:00 2001 From: oSumAtrIX Date: Wed, 25 Oct 2023 19:33:59 +0200 Subject: [PATCH 19/24] feat(YouTube - Disable precise seeking gesture): Use better patch name The new name now is taken from what YouTube names this feature. --- ...urePatch.java => DisablePreciseSeekingGesturePatch.java} | 6 +++--- .../app/revanced/integrations/settings/SettingsEnum.java | 2 ++ 2 files changed, 5 insertions(+), 3 deletions(-) rename app/src/main/java/app/revanced/integrations/patches/{DisableFineScrubbingGesturePatch.java => DisablePreciseSeekingGesturePatch.java} (70%) diff --git a/app/src/main/java/app/revanced/integrations/patches/DisableFineScrubbingGesturePatch.java b/app/src/main/java/app/revanced/integrations/patches/DisablePreciseSeekingGesturePatch.java similarity index 70% rename from app/src/main/java/app/revanced/integrations/patches/DisableFineScrubbingGesturePatch.java rename to app/src/main/java/app/revanced/integrations/patches/DisablePreciseSeekingGesturePatch.java index 72a6859065..8043bd2114 100644 --- a/app/src/main/java/app/revanced/integrations/patches/DisableFineScrubbingGesturePatch.java +++ b/app/src/main/java/app/revanced/integrations/patches/DisablePreciseSeekingGesturePatch.java @@ -4,14 +4,14 @@ import android.view.VelocityTracker; import app.revanced.integrations.settings.SettingsEnum; -public final class DisableFineScrubbingGesturePatch { +public final class DisablePreciseSeekingGesturePatch { /** - * Disables the fine scrubbing gesture. + * Disables the gesture that is used to seek precisely. * @param tracker The velocity tracker that is used to determine the gesture. * @param event The motion event that is used to determine the gesture. */ public static void disableGesture(VelocityTracker tracker, MotionEvent event) { - if (SettingsEnum.DISABLE_FINE_SCRUBBING_GESTURE.getBoolean()) return; + if (SettingsEnum.DISABLE_PRECISE_SEEKING_GESTURE.getBoolean()) return; tracker.addMovement(event); } diff --git a/app/src/main/java/app/revanced/integrations/settings/SettingsEnum.java b/app/src/main/java/app/revanced/integrations/settings/SettingsEnum.java index 691acea474..9bb2d1b3e6 100644 --- a/app/src/main/java/app/revanced/integrations/settings/SettingsEnum.java +++ b/app/src/main/java/app/revanced/integrations/settings/SettingsEnum.java @@ -172,6 +172,7 @@ public enum SettingsEnum { EXTERNAL_BROWSER("revanced_external_browser", BOOLEAN, TRUE, true), AUTO_REPEAT("revanced_auto_repeat", BOOLEAN, FALSE), SEEKBAR_TAPPING("revanced_seekbar_tapping", BOOLEAN, TRUE), + DISABLE_PRECISE_SEEKING_GESTURE("revanced_disable_precise_seeking_gesture", BOOLEAN, TRUE), DISABLE_FINE_SCRUBBING_GESTURE("revanced_disable_fine_scrubbing_gesture", BOOLEAN, TRUE), SPOOF_SIGNATURE("revanced_spoof_signature_verification_enabled", BOOLEAN, TRUE, true, "revanced_spoof_signature_verification_enabled_user_dialog_message"), @@ -381,6 +382,7 @@ private static void loadAllSettings() { // region Migration migrateOldSettingToNew(HIDE_VIDEO_WATERMARK, HIDE_VIDEO_CHANNEL_WATERMARK); + migrateOldSettingToNew(DISABLE_FINE_SCRUBBING_GESTURE, DISABLE_PRECISE_SEEKING_GESTURE); // Do _not_ delete this SB private user id migration property until sometime in 2024. // This is the only setting that cannot be reconfigured if lost, From 55fe1f0592ea3b3f6dc93c6c7c1b10095c49a036 Mon Sep 17 00:00:00 2001 From: semantic-release-bot Date: Wed, 25 Oct 2023 17:38:04 +0000 Subject: [PATCH 20/24] chore(release): 0.121.0-dev.5 [skip ci] # [0.121.0-dev.5](https://github.com/ReVanced/revanced-integrations/compare/v0.121.0-dev.4...v0.121.0-dev.5) (2023-10-25) ### Bug Fixes * **YouTube - Disable suggested video end screen:** Hide the view once possible ([df27822](https://github.com/ReVanced/revanced-integrations/commit/df278222e8814612797e55e616d4ebc075cafb92)) ### Features * **YouTube - Disable precise seeking gesture:** Use better patch name ([2453d30](https://github.com/ReVanced/revanced-integrations/commit/2453d30970ac59d78647386f4fe5d904dbc145e4)) * **YouTube:** Add `Enable old seekbar thumbnails` patch ([75297a5](https://github.com/ReVanced/revanced-integrations/commit/75297a52c1c5f7c2b928964d08b055380f4a08fe)) --- CHANGELOG.md | 13 +++++++++++++ gradle.properties | 2 +- 2 files changed, 14 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 79993f7825..3e930f2a4e 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,16 @@ +# [0.121.0-dev.5](https://github.com/ReVanced/revanced-integrations/compare/v0.121.0-dev.4...v0.121.0-dev.5) (2023-10-25) + + +### Bug Fixes + +* **YouTube - Disable suggested video end screen:** Hide the view once possible ([df27822](https://github.com/ReVanced/revanced-integrations/commit/df278222e8814612797e55e616d4ebc075cafb92)) + + +### Features + +* **YouTube - Disable precise seeking gesture:** Use better patch name ([2453d30](https://github.com/ReVanced/revanced-integrations/commit/2453d30970ac59d78647386f4fe5d904dbc145e4)) +* **YouTube:** Add `Enable old seekbar thumbnails` patch ([75297a5](https://github.com/ReVanced/revanced-integrations/commit/75297a52c1c5f7c2b928964d08b055380f4a08fe)) + # [0.121.0-dev.4](https://github.com/ReVanced/revanced-integrations/compare/v0.121.0-dev.3...v0.121.0-dev.4) (2023-10-25) diff --git a/gradle.properties b/gradle.properties index 0d3760bdde..1ae93666d7 100644 --- a/gradle.properties +++ b/gradle.properties @@ -1,4 +1,4 @@ org.gradle.parallel = true org.gradle.caching = true android.useAndroidX = true -version = 0.121.0-dev.4 +version = 0.121.0-dev.5 From f2037316d36f99ef79ae5792e34d8616ecd31c80 Mon Sep 17 00:00:00 2001 From: oSumAtrIX Date: Thu, 26 Oct 2023 00:07:02 +0200 Subject: [PATCH 21/24] fix(YouTube - Client spoof): Set the client version correctly Previously the version was hardcoded. --- .../integrations/patches/spoof/requests/PlayerRoutes.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/src/main/java/app/revanced/integrations/patches/spoof/requests/PlayerRoutes.java b/app/src/main/java/app/revanced/integrations/patches/spoof/requests/PlayerRoutes.java index a37dd6f3e8..7a769aa25f 100644 --- a/app/src/main/java/app/revanced/integrations/patches/spoof/requests/PlayerRoutes.java +++ b/app/src/main/java/app/revanced/integrations/patches/spoof/requests/PlayerRoutes.java @@ -31,7 +31,7 @@ final class PlayerRoutes { JSONObject client = new JSONObject(); client.put("clientName", "ANDROID"); - client.put("clientVersion", "18.37.36"); + client.put("clientVersion", ReVancedUtils.getVersionName()); client.put("androidSdkVersion", 34); context.put("client", client); From 1b29b7e11db83ebedb9a8f60a6172829b76bfce8 Mon Sep 17 00:00:00 2001 From: semantic-release-bot Date: Wed, 25 Oct 2023 22:10:56 +0000 Subject: [PATCH 22/24] chore(release): 0.121.0-dev.6 [skip ci] # [0.121.0-dev.6](https://github.com/ReVanced/revanced-integrations/compare/v0.121.0-dev.5...v0.121.0-dev.6) (2023-10-25) ### Bug Fixes * **YouTube - Client spoof:** Set the client version correctly ([f203731](https://github.com/ReVanced/revanced-integrations/commit/f2037316d36f99ef79ae5792e34d8616ecd31c80)) --- CHANGELOG.md | 7 +++++++ gradle.properties | 2 +- 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index 3e930f2a4e..feeb330e07 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,10 @@ +# [0.121.0-dev.6](https://github.com/ReVanced/revanced-integrations/compare/v0.121.0-dev.5...v0.121.0-dev.6) (2023-10-25) + + +### Bug Fixes + +* **YouTube - Client spoof:** Set the client version correctly ([f203731](https://github.com/ReVanced/revanced-integrations/commit/f2037316d36f99ef79ae5792e34d8616ecd31c80)) + # [0.121.0-dev.5](https://github.com/ReVanced/revanced-integrations/compare/v0.121.0-dev.4...v0.121.0-dev.5) (2023-10-25) diff --git a/gradle.properties b/gradle.properties index 1ae93666d7..5b9e784917 100644 --- a/gradle.properties +++ b/gradle.properties @@ -1,4 +1,4 @@ org.gradle.parallel = true org.gradle.caching = true android.useAndroidX = true -version = 0.121.0-dev.5 +version = 0.121.0-dev.6 From c048527dc0bc6b1b3de9c451ca909aab7ad93d0f Mon Sep 17 00:00:00 2001 From: nullptr <107796137+johnconner122@users.noreply.github.com> Date: Fri, 3 Nov 2023 23:27:23 +0500 Subject: [PATCH 23/24] fix(YouTube - Player flyout menu): Restore functionality (#502) --- .../PlayerFlyoutMenuItemsFilter.java | 28 +++++++++++++++---- .../integrations/settings/SettingsEnum.java | 2 +- 2 files changed, 23 insertions(+), 7 deletions(-) diff --git a/app/src/main/java/app/revanced/integrations/patches/components/PlayerFlyoutMenuItemsFilter.java b/app/src/main/java/app/revanced/integrations/patches/components/PlayerFlyoutMenuItemsFilter.java index c394f84f76..4e700028b3 100644 --- a/app/src/main/java/app/revanced/integrations/patches/components/PlayerFlyoutMenuItemsFilter.java +++ b/app/src/main/java/app/revanced/integrations/patches/components/PlayerFlyoutMenuItemsFilter.java @@ -6,26 +6,38 @@ import androidx.annotation.RequiresApi; import app.revanced.integrations.settings.SettingsEnum; +import app.revanced.integrations.shared.PlayerType; public class PlayerFlyoutMenuItemsFilter extends Filter { - // Search the buffer only if the flyout menu identifier is found. + // Search the buffer only if the flyout menu path is found. // Handle the searching in this class instead of adding to the global filter group (which searches all the time) private final ByteArrayFilterGroupList flyoutFilterGroupList = new ByteArrayFilterGroupList(); + private final ByteArrayFilterGroup exception; + @RequiresApi(api = Build.VERSION_CODES.N) public PlayerFlyoutMenuItemsFilter() { - identifierFilterGroupList.addAll(new StringFilterGroup(null, "overflow_menu_item.eml|")); + exception = new ByteArrayAsStringFilterGroup( + // Whitelist Quality menu item when "Hide Additional settings menu" is enabled + SettingsEnum.HIDE_ADDITIONAL_SETTINGS_MENU, + "quality_sheet" + ); + + // Using pathFilterGroupList due to new flyout panel(A/B) + pathFilterGroupList.addAll( + new StringFilterGroup(null, "overflow_menu_item.eml|") + ); flyoutFilterGroupList.addAll( - new ByteArrayAsStringFilterGroup( - SettingsEnum.HIDE_QUALITY_MENU, - "yt_outline_gear" - ), new ByteArrayAsStringFilterGroup( SettingsEnum.HIDE_CAPTIONS_MENU, "closed_caption" ), + new ByteArrayAsStringFilterGroup( + SettingsEnum.HIDE_ADDITIONAL_SETTINGS_MENU, + "yt_outline_gear" + ), new ByteArrayAsStringFilterGroup( SettingsEnum.HIDE_LOOP_VIDEO_MENU, "yt_outline_arrow_repeat_1_" @@ -64,6 +76,10 @@ public PlayerFlyoutMenuItemsFilter() { @Override boolean isFiltered(@Nullable String identifier, String path, byte[] protobufBufferArray, FilterGroupList matchedList, FilterGroup matchedGroup, int matchedIndex) { + // Shorts also use this player flyout panel + if (PlayerType.getCurrent().isNoneOrHidden() || exception.check(protobufBufferArray).isFiltered()) + return false; + // Only 1 group is added to the parent class, so the matched group must be the overflow menu. if (matchedIndex == 0 && flyoutFilterGroupList.check(protobufBufferArray).isFiltered()) { // Super class handles logging. diff --git a/app/src/main/java/app/revanced/integrations/settings/SettingsEnum.java b/app/src/main/java/app/revanced/integrations/settings/SettingsEnum.java index 9bb2d1b3e6..e6fda85426 100644 --- a/app/src/main/java/app/revanced/integrations/settings/SettingsEnum.java +++ b/app/src/main/java/app/revanced/integrations/settings/SettingsEnum.java @@ -155,8 +155,8 @@ public enum SettingsEnum { ALT_THUMBNAIL_FAST_QUALITY("revanced_alt_thumbnail_fast_quality", BOOLEAN, FALSE, parents(ALT_THUMBNAIL)), //Player flyout menu items - HIDE_QUALITY_MENU("revanced_hide_player_flyout_quality", BOOLEAN, FALSE), HIDE_CAPTIONS_MENU("revanced_hide_player_flyout_captions", BOOLEAN, FALSE), + HIDE_ADDITIONAL_SETTINGS_MENU("revanced_hide_player_flyout_additional_settings", BOOLEAN, FALSE), HIDE_LOOP_VIDEO_MENU("revanced_hide_player_flyout_loop_video", BOOLEAN, FALSE), HIDE_AMBIENT_MODE_MENU("revanced_hide_player_flyout_ambient_mode", BOOLEAN, FALSE), HIDE_REPORT_MENU("revanced_hide_player_flyout_report", BOOLEAN, TRUE), From 8d534f05d56540cb034bf79b124e2adab3384b7d Mon Sep 17 00:00:00 2001 From: semantic-release-bot Date: Fri, 3 Nov 2023 18:30:07 +0000 Subject: [PATCH 24/24] chore(release): 0.121.0-dev.7 [skip ci] # [0.121.0-dev.7](https://github.com/ReVanced/revanced-integrations/compare/v0.121.0-dev.6...v0.121.0-dev.7) (2023-11-03) ### Bug Fixes * **YouTube - Player flyout menu:** Restore functionality ([#502](https://github.com/ReVanced/revanced-integrations/issues/502)) ([c048527](https://github.com/ReVanced/revanced-integrations/commit/c048527dc0bc6b1b3de9c451ca909aab7ad93d0f)) --- CHANGELOG.md | 7 +++++++ gradle.properties | 2 +- 2 files changed, 8 insertions(+), 1 deletion(-) diff --git a/CHANGELOG.md b/CHANGELOG.md index feeb330e07..c59933be0d 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -1,3 +1,10 @@ +# [0.121.0-dev.7](https://github.com/ReVanced/revanced-integrations/compare/v0.121.0-dev.6...v0.121.0-dev.7) (2023-11-03) + + +### Bug Fixes + +* **YouTube - Player flyout menu:** Restore functionality ([#502](https://github.com/ReVanced/revanced-integrations/issues/502)) ([c048527](https://github.com/ReVanced/revanced-integrations/commit/c048527dc0bc6b1b3de9c451ca909aab7ad93d0f)) + # [0.121.0-dev.6](https://github.com/ReVanced/revanced-integrations/compare/v0.121.0-dev.5...v0.121.0-dev.6) (2023-10-25) diff --git a/gradle.properties b/gradle.properties index 5b9e784917..d8ef25abb0 100644 --- a/gradle.properties +++ b/gradle.properties @@ -1,4 +1,4 @@ org.gradle.parallel = true org.gradle.caching = true android.useAndroidX = true -version = 0.121.0-dev.6 +version = 0.121.0-dev.7