From 9a88b4239fd63d5f91105fec8e7d59d318a5d09a Mon Sep 17 00:00:00 2001 From: LisoUseInAIKyrios <118716522+LisoUseInAIKyrios@users.noreply.github.com> Date: Tue, 11 Feb 2025 12:12:24 +0200 Subject: [PATCH] feat(Return YouTube Dislike): add `Show estimated likes` setting (#4443) --- .../ReturnYouTubeDislike.java | 15 +++++++++++++++ .../extension/youtube/settings/Settings.java | 1 + ...eturnYouTubeDislikePreferenceFragment.java | 19 +++++++++++++++++++ .../resources/addresources/values/strings.xml | 5 +++++ 4 files changed, 40 insertions(+) diff --git a/extensions/youtube/src/main/java/app/revanced/extension/youtube/returnyoutubedislike/ReturnYouTubeDislike.java b/extensions/youtube/src/main/java/app/revanced/extension/youtube/returnyoutubedislike/ReturnYouTubeDislike.java index 002fc0b6f..91b04bde7 100644 --- a/extensions/youtube/src/main/java/app/revanced/extension/youtube/returnyoutubedislike/ReturnYouTubeDislike.java +++ b/extensions/youtube/src/main/java/app/revanced/extension/youtube/returnyoutubedislike/ReturnYouTubeDislike.java @@ -234,6 +234,12 @@ public class ReturnYouTubeDislike { // example video: https://www.youtube.com/watch?v=UnrU5vxCHxw // RYD data: https://returnyoutubedislikeapi.com/votes?videoId=UnrU5vxCHxw // + if (!Settings.RYD_ESTIMATED_LIKE.get()) { + // Change the "Likes" string to show that likes and dislikes are hidden. + String hiddenMessageString = str("revanced_ryd_video_likes_hidden_by_video_owner"); + return newSpanUsingStylingOfAnotherSpan(oldSpannable, hiddenMessageString); + } + Logger.printDebug(() -> "Using estimated likes"); oldLikes = formatDislikeCount(voteData.getLikeCount()); } @@ -542,6 +548,15 @@ public class ReturnYouTubeDislike { } if (spanIsForLikes) { + if (!Utils.containsNumber(original)) { + if (!Settings.RYD_ESTIMATED_LIKE.get()) { + Logger.printDebug(() -> "Likes are hidden"); + return original; + } else { + Logger.printDebug(() -> "Using estimated likes"); + } + } + // Scrolling Shorts does not cause the Spans to be reloaded, // so there is no need to cache the likes for this situations. Logger.printDebug(() -> "Creating likes span for: " + votingData.videoId); 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 e72135f21..ec5b813f3 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 @@ -333,6 +333,7 @@ public class Settings extends BaseSettings { public static final BooleanSetting RYD_SHORTS = new BooleanSetting("ryd_shorts", TRUE, parent(RYD_ENABLED)); public static final BooleanSetting RYD_DISLIKE_PERCENTAGE = new BooleanSetting("ryd_dislike_percentage", FALSE, parent(RYD_ENABLED)); public static final BooleanSetting RYD_COMPACT_LAYOUT = new BooleanSetting("ryd_compact_layout", FALSE, parent(RYD_ENABLED)); + public static final BooleanSetting RYD_ESTIMATED_LIKE = new BooleanSetting("ryd_estimated_like", TRUE, parent(RYD_ENABLED)); public static final BooleanSetting RYD_TOAST_ON_CONNECTION_ERROR = new BooleanSetting("ryd_toast_on_connection_error", TRUE, parent(RYD_ENABLED)); // SponsorBlock diff --git a/extensions/youtube/src/main/java/app/revanced/extension/youtube/settings/preference/ReturnYouTubeDislikePreferenceFragment.java b/extensions/youtube/src/main/java/app/revanced/extension/youtube/settings/preference/ReturnYouTubeDislikePreferenceFragment.java index 66bcf29e2..5e234ec28 100644 --- a/extensions/youtube/src/main/java/app/revanced/extension/youtube/settings/preference/ReturnYouTubeDislikePreferenceFragment.java +++ b/extensions/youtube/src/main/java/app/revanced/extension/youtube/settings/preference/ReturnYouTubeDislikePreferenceFragment.java @@ -39,6 +39,11 @@ public class ReturnYouTubeDislikePreferenceFragment extends PreferenceFragment { */ private SwitchPreference compactLayoutPreference; + /** + * If hidden likes are replaced with an estimated value. + */ + private SwitchPreference estimatedLikesPreference; + /** * If segmented like/dislike button uses smaller compact layout. */ @@ -48,6 +53,7 @@ public class ReturnYouTubeDislikePreferenceFragment extends PreferenceFragment { shortsPreference.setEnabled(Settings.RYD_SHORTS.isAvailable()); percentagePreference.setEnabled(Settings.RYD_DISLIKE_PERCENTAGE.isAvailable()); compactLayoutPreference.setEnabled(Settings.RYD_COMPACT_LAYOUT.isAvailable()); + estimatedLikesPreference.setEnabled(Settings.RYD_ESTIMATED_LIKE.isAvailable()); toastOnRYDNotAvailable.setEnabled(Settings.RYD_TOAST_ON_CONNECTION_ERROR.isAvailable()); } @@ -117,6 +123,19 @@ public class ReturnYouTubeDislikePreferenceFragment extends PreferenceFragment { }); preferenceScreen.addPreference(compactLayoutPreference); + estimatedLikesPreference = new SwitchPreference(context); + estimatedLikesPreference.setChecked(Settings.RYD_ESTIMATED_LIKE.get()); + estimatedLikesPreference.setTitle(str("revanced_ryd_estimated_like_title")); + estimatedLikesPreference.setSummaryOn(str("revanced_ryd_estimated_like_summary_on")); + estimatedLikesPreference.setSummaryOff(str("revanced_ryd_estimated_like_summary_off")); + estimatedLikesPreference.setOnPreferenceChangeListener((pref, newValue) -> { + Settings.RYD_ESTIMATED_LIKE.save((Boolean) newValue); + ReturnYouTubeDislike.clearAllUICaches(); + updateUIState(); + return true; + }); + preferenceScreen.addPreference(estimatedLikesPreference); + toastOnRYDNotAvailable = new SwitchPreference(context); toastOnRYDNotAvailable.setChecked(Settings.RYD_TOAST_ON_CONNECTION_ERROR.get()); toastOnRYDNotAvailable.setTitle(str("revanced_ryd_toast_on_connection_error_title")); diff --git a/patches/src/main/resources/addresources/values/strings.xml b/patches/src/main/resources/addresources/values/strings.xml index 4b1dfe61e..a02157997 100644 --- a/patches/src/main/resources/addresources/values/strings.xml +++ b/patches/src/main/resources/addresources/values/strings.xml @@ -841,6 +841,8 @@ Note: Enabling this also forcibly hides video ads" Dislikes not available (%s) Reload video to vote using Return YouTube Dislike + + Hidden by owner Return YouTube Dislike Dislikes are shown Dislikes are not shown @@ -857,6 +859,9 @@ Limitation: Dislikes may not appear in incognito mode" Compact Like button Like button styled for minimum width Like button styled for best appearance + Show estimated likes + Estimated likes are shown + Estimated likes are hidden Show a toast if API is not available Toast is shown if Return YouTube Dislike is not available Toast is not shown if Return YouTube Dislike is not available