From 945b91eebb251e24d40d85621cc044b9bf7cad7b Mon Sep 17 00:00:00 2001
From: inotia00 <108592928+inotia00@users.noreply.github.com>
Date: Fri, 3 Jan 2025 22:04:27 +0900
Subject: [PATCH] feat(YouTube - Hide layout components): Add `Disable
translucent status bar` setting
---
.../youtube/patches/general/GeneralPatch.java | 9 +++++++
.../extension/youtube/settings/Settings.java | 1 +
.../general/components/Fingerprints.kt | 9 +++++++
.../components/LayoutComponentsPatch.kt | 27 ++++++++++++++++---
.../youtube/settings/host/values/strings.xml | 3 +++
.../youtube/settings/xml/revanced_prefs.xml | 3 +++
6 files changed, 48 insertions(+), 4 deletions(-)
diff --git a/extensions/shared/src/main/java/app/revanced/extension/youtube/patches/general/GeneralPatch.java b/extensions/shared/src/main/java/app/revanced/extension/youtube/patches/general/GeneralPatch.java
index f1dd20b99..9ce634720 100644
--- a/extensions/shared/src/main/java/app/revanced/extension/youtube/patches/general/GeneralPatch.java
+++ b/extensions/shared/src/main/java/app/revanced/extension/youtube/patches/general/GeneralPatch.java
@@ -128,6 +128,15 @@ public class GeneralPatch {
// region [Hide layout components] patch
+ public static boolean disableTranslucentStatusBar(boolean original) {
+ try {
+ return !Settings.DISABLE_TRANSLUCENT_STATUS_BAR.get() && original;
+ } catch (Exception ex) {
+ Logger.printException(() -> "Failed to load disableTranslucentStatusBar", ex);
+ }
+ return original;
+ }
+
private static String[] accountMenuBlockList;
static {
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 6a4c79418..043af0fee 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
@@ -148,6 +148,7 @@ public class Settings extends BaseSettings {
new ChangeStartPagePatch.ChangeStartPageTypeAvailability());
public static final BooleanSetting DISABLE_AUTO_AUDIO_TRACKS = new BooleanSetting("revanced_disable_auto_audio_tracks", FALSE);
public static final BooleanSetting DISABLE_SPLASH_ANIMATION = new BooleanSetting("revanced_disable_splash_animation", FALSE, true);
+ public static final BooleanSetting DISABLE_TRANSLUCENT_STATUS_BAR = new BooleanSetting("revanced_disable_translucent_status_bar", TRUE, true);
public static final BooleanSetting ENABLE_GRADIENT_LOADING_SCREEN = new BooleanSetting("revanced_enable_gradient_loading_screen", FALSE, true);
public static final BooleanSetting HIDE_FLOATING_MICROPHONE = new BooleanSetting("revanced_hide_floating_microphone", TRUE, true);
public static final BooleanSetting HIDE_GRAY_SEPARATOR = new BooleanSetting("revanced_hide_gray_separator", TRUE);
diff --git a/patches/src/main/kotlin/app/revanced/patches/youtube/general/components/Fingerprints.kt b/patches/src/main/kotlin/app/revanced/patches/youtube/general/components/Fingerprints.kt
index e37d96d1d..0acbf1fa6 100644
--- a/patches/src/main/kotlin/app/revanced/patches/youtube/general/components/Fingerprints.kt
+++ b/patches/src/main/kotlin/app/revanced/patches/youtube/general/components/Fingerprints.kt
@@ -134,3 +134,12 @@ internal val tooltipContentViewFingerprint = legacyFingerprint(
literals = listOf(toolTipContentView),
)
+internal const val TRANSLUCENT_STATUS_BAR_FEATURE_FLAG = 45400535L
+
+internal val translucentStatusBarFeatureFlagFingerprint = legacyFingerprint(
+ name = "translucentStatusBarFeatureFlagFingerprint",
+ accessFlags = AccessFlags.PUBLIC or AccessFlags.FINAL,
+ returnType = "Z",
+ literals = listOf(TRANSLUCENT_STATUS_BAR_FEATURE_FLAG)
+)
+
diff --git a/patches/src/main/kotlin/app/revanced/patches/youtube/general/components/LayoutComponentsPatch.kt b/patches/src/main/kotlin/app/revanced/patches/youtube/general/components/LayoutComponentsPatch.kt
index a80c7b44b..05b29167a 100644
--- a/patches/src/main/kotlin/app/revanced/patches/youtube/general/components/LayoutComponentsPatch.kt
+++ b/patches/src/main/kotlin/app/revanced/patches/youtube/general/components/LayoutComponentsPatch.kt
@@ -17,10 +17,13 @@ import app.revanced.patches.youtube.utils.extension.Constants.COMPONENTS_PATH
import app.revanced.patches.youtube.utils.extension.Constants.GENERAL_CLASS_DESCRIPTOR
import app.revanced.patches.youtube.utils.extension.Constants.GENERAL_PATH
import app.revanced.patches.youtube.utils.patch.PatchList.HIDE_LAYOUT_COMPONENTS
+import app.revanced.patches.youtube.utils.playservice.is_19_25_or_greater
+import app.revanced.patches.youtube.utils.playservice.versionCheckPatch
import app.revanced.patches.youtube.utils.resourceid.accountSwitcherAccessibility
import app.revanced.patches.youtube.utils.resourceid.sharedResourceIdPatch
import app.revanced.patches.youtube.utils.settings.ResourceUtils.addPreference
import app.revanced.patches.youtube.utils.settings.settingsPatch
+import app.revanced.util.fingerprint.injectLiteralInstructionBooleanCall
import app.revanced.util.fingerprint.matchOrThrow
import app.revanced.util.fingerprint.methodOrThrow
import app.revanced.util.fingerprint.mutableClassOrThrow
@@ -55,10 +58,16 @@ val layoutComponentsPatch = bytecodePatch(
sharedResourceIdPatch,
settingsMenuPatch,
viewGroupMarginLayoutParamsHookPatch,
+ versionCheckPatch,
)
execute {
+ var settingArray = arrayOf(
+ "PREFERENCE_SCREEN: GENERAL",
+ "SETTINGS: HIDE_LAYOUT_COMPONENTS"
+ )
+
// region patch for disable pip notification
pipNotificationFingerprint.matchOrThrow().let {
@@ -86,6 +95,19 @@ val layoutComponentsPatch = bytecodePatch(
// endregion
+ // region patch for disable translucent status bar
+
+ if (is_19_25_or_greater) {
+ translucentStatusBarFeatureFlagFingerprint.injectLiteralInstructionBooleanCall(
+ TRANSLUCENT_STATUS_BAR_FEATURE_FLAG,
+ "$GENERAL_CLASS_DESCRIPTOR->disableTranslucentStatusBar(Z)Z"
+ )
+
+ settingArray += "SETTINGS: DISABLE_TRANSLUCENT_STATUS_BAR"
+ }
+
+ // endregion
+
// region patch for disable update screen
appBlockingCheckResultToStringFingerprint.mutableClassOrThrow().methods.first { method ->
@@ -234,10 +256,7 @@ val layoutComponentsPatch = bytecodePatch(
// region add settings
addPreference(
- arrayOf(
- "PREFERENCE_SCREEN: GENERAL",
- "SETTINGS: HIDE_LAYOUT_COMPONENTS"
- ),
+ settingArray,
HIDE_LAYOUT_COMPONENTS
)
diff --git a/patches/src/main/resources/youtube/settings/host/values/strings.xml b/patches/src/main/resources/youtube/settings/host/values/strings.xml
index b26b9bafb..d60cd55a4 100644
--- a/patches/src/main/resources/youtube/settings/host/values/strings.xml
+++ b/patches/src/main/resources/youtube/settings/host/values/strings.xml
@@ -352,6 +352,9 @@ Limitation: Back button on the toolbar may not work."
Disable splash animation
Splash animation is disabled.
Splash animation is enabled.
+ Disable translucent status bar
+ Status bar is opaque.
+ Status bar is opaque or translucent.
Enable gradient loading screen
Gradient loading screen is enabled.
Gradient loading screen is disabled.
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 22284a761..f3124f384 100644
--- a/patches/src/main/resources/youtube/settings/xml/revanced_prefs.xml
+++ b/patches/src/main/resources/youtube/settings/xml/revanced_prefs.xml
@@ -281,6 +281,9 @@
+
+