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