From da099341fa2869434cd0431bff2c8102015a3be7 Mon Sep 17 00:00:00 2001 From: MarcaD <152095496+MarcaDian@users.noreply.github.com> Date: Tue, 29 Apr 2025 22:27:14 +0300 Subject: [PATCH] bug(YouTube - Theme): Fix white system navigation bar in the ReVanced settings (#4875) --- .../extension/youtube/ThemeHelper.java | 19 +++++++++++++++++++ .../youtube/settings/LicenseActivityHook.java | 6 +++--- .../ReVancedPreferenceFragment.java | 3 +++ 3 files changed, 25 insertions(+), 3 deletions(-) diff --git a/extensions/youtube/src/main/java/app/revanced/extension/youtube/ThemeHelper.java b/extensions/youtube/src/main/java/app/revanced/extension/youtube/ThemeHelper.java index 80b9b583c..f541b2347 100644 --- a/extensions/youtube/src/main/java/app/revanced/extension/youtube/ThemeHelper.java +++ b/extensions/youtube/src/main/java/app/revanced/extension/youtube/ThemeHelper.java @@ -2,6 +2,8 @@ package app.revanced.extension.youtube; import android.app.Activity; import android.graphics.Color; +import android.os.Build; +import android.view.Window; import androidx.annotation.Nullable; @@ -102,4 +104,21 @@ public class ThemeHelper { return Utils.getColorFromString(colorName); } + + /** + * Sets the system navigation bar color for the activity. + * Applies the background color obtained from {@link #getBackgroundColor()} to the navigation bar. + * For Android 10 (API 29) and above, enforces navigation bar contrast to ensure visibility. + */ + public static void setNavigationBarColor(@Nullable Window window) { + if (window == null) { + Logger.printDebug(() -> "Cannot set navigation bar color, window is null"); + return; + } + + window.setNavigationBarColor(getBackgroundColor()); + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) { + window.setNavigationBarContrastEnforced(true); + } + } } diff --git a/extensions/youtube/src/main/java/app/revanced/extension/youtube/settings/LicenseActivityHook.java b/extensions/youtube/src/main/java/app/revanced/extension/youtube/settings/LicenseActivityHook.java index 294bc079e..b9c193d1a 100644 --- a/extensions/youtube/src/main/java/app/revanced/extension/youtube/settings/LicenseActivityHook.java +++ b/extensions/youtube/src/main/java/app/revanced/extension/youtube/settings/LicenseActivityHook.java @@ -84,6 +84,7 @@ public class LicenseActivityHook { public static void initialize(Activity licenseActivity) { try { ThemeHelper.setActivityTheme(licenseActivity); + ThemeHelper.setNavigationBarColor(licenseActivity.getWindow()); licenseActivity.setContentView(getResourceIdentifier( "revanced_settings_with_toolbar", "layout")); @@ -126,7 +127,7 @@ public class LicenseActivityHook { // This is required to fix submenu title alignment issue with Android ASOP 15+ ViewGroup toolBarParent = activity.findViewById( getResourceIdentifier("revanced_toolbar_parent", "id")); - ViewGroup dummyToolbar = Utils.getChildViewByResourceName(toolBarParent,"revanced_toolbar"); + ViewGroup dummyToolbar = Utils.getChildViewByResourceName(toolBarParent, "revanced_toolbar"); toolbarLayoutParams = dummyToolbar.getLayoutParams(); toolBarParent.removeView(dummyToolbar); @@ -149,5 +150,4 @@ public class LicenseActivityHook { toolBarParent.addView(toolbar, 0); } - -} +} \ No newline at end of file diff --git a/extensions/youtube/src/main/java/app/revanced/extension/youtube/settings/preference/ReVancedPreferenceFragment.java b/extensions/youtube/src/main/java/app/revanced/extension/youtube/settings/preference/ReVancedPreferenceFragment.java index a972a4198..a2b6dbbfb 100644 --- a/extensions/youtube/src/main/java/app/revanced/extension/youtube/settings/preference/ReVancedPreferenceFragment.java +++ b/extensions/youtube/src/main/java/app/revanced/extension/youtube/settings/preference/ReVancedPreferenceFragment.java @@ -138,6 +138,9 @@ public class ReVancedPreferenceFragment extends AbstractPreferenceFragment { .findViewById(android.R.id.content) .getParent(); + // Fix the system navigation bar color for submenus. + ThemeHelper.setNavigationBarColor(preferenceScreenDialog.getWindow()); + // Fix edge-to-edge screen with Android 15 and YT 19.45+ // https://developer.android.com/develop/ui/views/layout/edge-to-edge#system-bars-insets if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.R) {