From 969e845a871d8b15b46c05082ae143944774b9bf Mon Sep 17 00:00:00 2001
From: inotia00 <108592928+inotia00@users.noreply.github.com>
Date: Sun, 15 Dec 2024 14:21:40 +0900
Subject: [PATCH] fix(YouTube/Hide player flyout menu): `Sleep timer menu`
always hidden in YouTube 19.34.42
---
.../extension/youtube/settings/Settings.java | 2 +-
.../youtube/utils/ExtendedUtils.java | 2 --
.../player/flyoutmenu/hide/Fingerprints.kt | 17 ++++++++++++++++
.../flyoutmenu/hide/PlayerFlyoutMenuPatch.kt | 20 +++++++++++++++++++
.../utils/playservice/VersionCheckPatch.kt | 3 +++
.../youtube/settings/xml/revanced_prefs.xml | 3 +++
6 files changed, 44 insertions(+), 3 deletions(-)
diff --git a/extensions/shared/src/main/java/app/revanced/extension/youtube/settings/Settings.java b/extensions/shared/src/main/java/app/revanced/extension/youtube/settings/Settings.java
index a8bde8272..99cd0c2ec 100644
--- a/extensions/shared/src/main/java/app/revanced/extension/youtube/settings/Settings.java
+++ b/extensions/shared/src/main/java/app/revanced/extension/youtube/settings/Settings.java
@@ -319,6 +319,7 @@ public class Settings extends BaseSettings {
public static final BooleanSetting HIDE_PLAYER_FLYOUT_MENU_QUALITY_HEADER = new BooleanSetting("revanced_hide_player_flyout_menu_quality_header", FALSE);
public static final BooleanSetting HIDE_PLAYER_FLYOUT_MENU_QUALITY_FOOTER = new BooleanSetting("revanced_hide_player_flyout_menu_quality_footer", TRUE, true);
public static final BooleanSetting HIDE_PLAYER_FLYOUT_MENU_REPORT = new BooleanSetting("revanced_hide_player_flyout_menu_report", TRUE);
+ public static final BooleanSetting HIDE_PLAYER_FLYOUT_MENU_SLEEP_TIMER = new BooleanSetting("revanced_hide_player_flyout_menu_sleep_timer", FALSE);
public static final BooleanSetting HIDE_PLAYER_FLYOUT_MENU_ADDITIONAL_SETTINGS = new BooleanSetting("revanced_hide_player_flyout_menu_additional_settings", FALSE);
public static final BooleanSetting HIDE_PLAYER_FLYOUT_MENU_AMBIENT = new BooleanSetting("revanced_hide_player_flyout_menu_ambient_mode", FALSE);
@@ -326,7 +327,6 @@ public class Settings extends BaseSettings {
public static final BooleanSetting HIDE_PLAYER_FLYOUT_MENU_LOOP = new BooleanSetting("revanced_hide_player_flyout_menu_loop_video", FALSE);
public static final BooleanSetting HIDE_PLAYER_FLYOUT_MENU_PIP = new BooleanSetting("revanced_hide_player_flyout_menu_pip", TRUE, true);
public static final BooleanSetting HIDE_PLAYER_FLYOUT_MENU_PREMIUM_CONTROLS = new BooleanSetting("revanced_hide_player_flyout_menu_premium_controls", TRUE);
- public static final BooleanSetting HIDE_PLAYER_FLYOUT_MENU_SLEEP_TIMER = new BooleanSetting("revanced_hide_player_flyout_menu_sleep_timer", TRUE);
public static final BooleanSetting HIDE_PLAYER_FLYOUT_MENU_STABLE_VOLUME = new BooleanSetting("revanced_hide_player_flyout_menu_stable_volume", FALSE);
public static final BooleanSetting HIDE_PLAYER_FLYOUT_MENU_STATS_FOR_NERDS = new BooleanSetting("revanced_hide_player_flyout_menu_stats_for_nerds", FALSE);
public static final BooleanSetting HIDE_PLAYER_FLYOUT_MENU_WATCH_IN_VR = new BooleanSetting("revanced_hide_player_flyout_menu_watch_in_vr", TRUE);
diff --git a/extensions/shared/src/main/java/app/revanced/extension/youtube/utils/ExtendedUtils.java b/extensions/shared/src/main/java/app/revanced/extension/youtube/utils/ExtendedUtils.java
index b92b4f09b..77f328b52 100644
--- a/extensions/shared/src/main/java/app/revanced/extension/youtube/utils/ExtendedUtils.java
+++ b/extensions/shared/src/main/java/app/revanced/extension/youtube/utils/ExtendedUtils.java
@@ -70,7 +70,6 @@ public class ExtendedUtils extends PackageUtils {
Settings.HIDE_PLAYER_FLYOUT_MENU_LOOP,
Settings.HIDE_PLAYER_FLYOUT_MENU_PIP,
Settings.HIDE_PLAYER_FLYOUT_MENU_PREMIUM_CONTROLS,
- Settings.HIDE_PLAYER_FLYOUT_MENU_SLEEP_TIMER,
Settings.HIDE_PLAYER_FLYOUT_MENU_STABLE_VOLUME,
Settings.HIDE_PLAYER_FLYOUT_MENU_STATS_FOR_NERDS,
Settings.HIDE_PLAYER_FLYOUT_MENU_WATCH_IN_VR,
@@ -103,7 +102,6 @@ public class ExtendedUtils extends PackageUtils {
Settings.HIDE_PLAYER_FLYOUT_MENU_LOOP,
Settings.HIDE_PLAYER_FLYOUT_MENU_PIP,
Settings.HIDE_PLAYER_FLYOUT_MENU_PREMIUM_CONTROLS,
- Settings.HIDE_PLAYER_FLYOUT_MENU_SLEEP_TIMER,
Settings.HIDE_PLAYER_FLYOUT_MENU_STABLE_VOLUME,
Settings.HIDE_PLAYER_FLYOUT_MENU_STATS_FOR_NERDS,
Settings.HIDE_PLAYER_FLYOUT_MENU_WATCH_IN_VR,
diff --git a/patches/src/main/kotlin/app/revanced/patches/youtube/player/flyoutmenu/hide/Fingerprints.kt b/patches/src/main/kotlin/app/revanced/patches/youtube/player/flyoutmenu/hide/Fingerprints.kt
index 254670acd..19470906e 100644
--- a/patches/src/main/kotlin/app/revanced/patches/youtube/player/flyoutmenu/hide/Fingerprints.kt
+++ b/patches/src/main/kotlin/app/revanced/patches/youtube/player/flyoutmenu/hide/Fingerprints.kt
@@ -61,6 +61,23 @@ internal val pipModeConfigFingerprint = legacyFingerprint(
literals = listOf(45427407L),
)
+internal const val SLEEP_TIMER_CONSTRUCTOR_FEATURE_FLAG = 45640654L
+
+internal val sleepTimerConstructorFingerprint = legacyFingerprint(
+ name = "sleepTimerConstructorFingerprint",
+ returnType = "V",
+ accessFlags = AccessFlags.PUBLIC or AccessFlags.CONSTRUCTOR,
+ literals = listOf(SLEEP_TIMER_CONSTRUCTOR_FEATURE_FLAG),
+)
+
+internal const val SLEEP_TIMER_FEATURE_FLAG = 45630421L
+
+internal val sleepTimerFingerprint = legacyFingerprint(
+ name = "sleepTimerConstructorFingerprint",
+ returnType = "Z",
+ literals = listOf(SLEEP_TIMER_FEATURE_FLAG),
+)
+
internal val videoQualityArrayFingerprint = legacyFingerprint(
name = "videoQualityArrayFingerprint",
returnType = "[Lcom/google/android/libraries/youtube/innertube/model/media/VideoQuality;",
diff --git a/patches/src/main/kotlin/app/revanced/patches/youtube/player/flyoutmenu/hide/PlayerFlyoutMenuPatch.kt b/patches/src/main/kotlin/app/revanced/patches/youtube/player/flyoutmenu/hide/PlayerFlyoutMenuPatch.kt
index 03c96914c..b0d6a62f7 100644
--- a/patches/src/main/kotlin/app/revanced/patches/youtube/player/flyoutmenu/hide/PlayerFlyoutMenuPatch.kt
+++ b/patches/src/main/kotlin/app/revanced/patches/youtube/player/flyoutmenu/hide/PlayerFlyoutMenuPatch.kt
@@ -13,6 +13,7 @@ import app.revanced.patches.youtube.utils.extension.Constants.PLAYER_CLASS_DESCR
import app.revanced.patches.youtube.utils.patch.PatchList.HIDE_PLAYER_FLYOUT_MENU
import app.revanced.patches.youtube.utils.playertype.playerTypeHookPatch
import app.revanced.patches.youtube.utils.playservice.is_18_39_or_greater
+import app.revanced.patches.youtube.utils.playservice.is_19_30_or_greater
import app.revanced.patches.youtube.utils.playservice.versionCheckPatch
import app.revanced.patches.youtube.utils.qualityMenuViewInflateFingerprint
import app.revanced.patches.youtube.utils.resourceid.bottomSheetFooterText
@@ -125,6 +126,25 @@ val playerFlyoutMenuPatch = bytecodePatch(
// endregion
+ // region patch for hide sleep timer menu
+
+ if (is_19_30_or_greater) {
+ // Sleep timer menu in Additional settings (deprecated)
+ // TODO: A patch will be implemented to assign this deprecated menu to another action.
+ // mapOf(
+ // sleepTimerConstructorFingerprint to SLEEP_TIMER_CONSTRUCTOR_FEATURE_FLAG,
+ // sleepTimerFingerprint to SLEEP_TIMER_FEATURE_FLAG
+ // ).forEach { (fingerprint, literal) ->
+ // fingerprint.injectLiteralInstructionBooleanCall(
+ // literal,
+ // "$PLAYER_CLASS_DESCRIPTOR->hideDeprecatedSleepTimerMenu(Z)Z"
+ // )
+ // }
+ settingArray += "SETTINGS: HIDE_SLEEP_TIMER_MENU"
+ }
+
+ // endregion
+
addLithoFilter(PANELS_FILTER_CLASS_DESCRIPTOR)
// region add settings
diff --git a/patches/src/main/kotlin/app/revanced/patches/youtube/utils/playservice/VersionCheckPatch.kt b/patches/src/main/kotlin/app/revanced/patches/youtube/utils/playservice/VersionCheckPatch.kt
index 5dc7c5d7a..6e42b8a41 100644
--- a/patches/src/main/kotlin/app/revanced/patches/youtube/utils/playservice/VersionCheckPatch.kt
+++ b/patches/src/main/kotlin/app/revanced/patches/youtube/utils/playservice/VersionCheckPatch.kt
@@ -29,6 +29,8 @@ var is_19_28_or_greater = false
private set
var is_19_29_or_greater = false
private set
+var is_19_30_or_greater = false
+ private set
var is_19_32_or_greater = false
private set
var is_19_34_or_greater = false
@@ -68,6 +70,7 @@ val versionCheckPatch = resourcePatch(
is_19_26_or_greater = 242705000 <= playStoreServicesVersion
is_19_28_or_greater = 242905000 <= playStoreServicesVersion
is_19_29_or_greater = 243005000 <= playStoreServicesVersion
+ is_19_30_or_greater = 243105000 <= playStoreServicesVersion
is_19_32_or_greater = 243305000 <= playStoreServicesVersion
is_19_34_or_greater = 243499000 <= playStoreServicesVersion
is_19_36_or_greater = 243705000 <= playStoreServicesVersion
diff --git a/patches/src/main/resources/youtube/settings/xml/revanced_prefs.xml b/patches/src/main/resources/youtube/settings/xml/revanced_prefs.xml
index 33ce4dbb9..bbec93d49 100644
--- a/patches/src/main/resources/youtube/settings/xml/revanced_prefs.xml
+++ b/patches/src/main/resources/youtube/settings/xml/revanced_prefs.xml
@@ -373,6 +373,9 @@
SETTINGS: HIDE_PLAYER_FLYOUT_MENU -->
+
+