From ebbfad252401564db331583088f0221c10fc3c51 Mon Sep 17 00:00:00 2001 From: ajp_anton Date: Sun, 7 Jun 2026 03:02:40 +0000 Subject: [PATCH] Follow applied status bar tint --- .../layout/DarkIconDispatcherGuard.java | 22 +++++++++++++++++++ .../layout/StockLayoutCanvasController.java | 6 ----- .../runtime/render/StatusBarTintTarget.java | 4 ++++ 3 files changed, 26 insertions(+), 6 deletions(-) diff --git a/app/src/main/java/se/ajpanton/statusbartweak/runtime/layout/DarkIconDispatcherGuard.java b/app/src/main/java/se/ajpanton/statusbartweak/runtime/layout/DarkIconDispatcherGuard.java index f0517a0..4652e40 100644 --- a/app/src/main/java/se/ajpanton/statusbartweak/runtime/layout/DarkIconDispatcherGuard.java +++ b/app/src/main/java/se/ajpanton/statusbartweak/runtime/layout/DarkIconDispatcherGuard.java @@ -12,6 +12,7 @@ import java.util.function.BooleanSupplier; import se.ajpanton.statusbartweak.runtime.features.RuntimeContext; import se.ajpanton.statusbartweak.runtime.hooks.ReflectionSupport; import se.ajpanton.statusbartweak.runtime.hooks.XposedHookSupport; +import se.ajpanton.statusbartweak.runtime.render.StatusBarTintTarget; final class DarkIconDispatcherGuard { private final RuntimeContext runtimeContext; @@ -51,6 +52,7 @@ final class DarkIconDispatcherGuard { forceLightState(dispatcher); } Object result = chain.proceed(); + updateTintTarget(dispatcher); refreshAllRoots.run(); return result; }); @@ -89,6 +91,26 @@ final class DarkIconDispatcherGuard { } } + private void updateTintTarget(Object dispatcher) { + Object intensity = ReflectionSupport.getFieldValue(dispatcher, "mDarkIntensity"); + if (intensity instanceof Number number) { + StatusBarTintTarget.setDarkIcons(number.floatValue() > 0.5f); + return; + } + Object tint = ReflectionSupport.getFieldValue(dispatcher, "mIconTint"); + if (tint instanceof Integer color) { + StatusBarTintTarget.setColor(isDarkColor(color) ? Color.BLACK : Color.WHITE); + } + } + + private boolean isDarkColor(int color) { + int red = Color.red(color); + int green = Color.green(color); + int blue = Color.blue(color); + double luminance = 0.2126d * red + 0.7152d * green + 0.0722d * blue; + return luminance < 128d; + } + private State captureState(Object dispatcher) { return dispatcher != null ? new State( diff --git a/app/src/main/java/se/ajpanton/statusbartweak/runtime/layout/StockLayoutCanvasController.java b/app/src/main/java/se/ajpanton/statusbartweak/runtime/layout/StockLayoutCanvasController.java index c3d9846..2739947 100644 --- a/app/src/main/java/se/ajpanton/statusbartweak/runtime/layout/StockLayoutCanvasController.java +++ b/app/src/main/java/se/ajpanton/statusbartweak/runtime/layout/StockLayoutCanvasController.java @@ -49,7 +49,6 @@ import se.ajpanton.statusbartweak.runtime.render.LockscreenCardsNotificationStri import se.ajpanton.statusbartweak.runtime.notifications.NotificationActiveKeyStore; import se.ajpanton.statusbartweak.runtime.notifications.NotificationUnreadTracker; import se.ajpanton.statusbartweak.runtime.render.OwnedIconHostManager; -import se.ajpanton.statusbartweak.runtime.render.StatusBarTintTarget; import se.ajpanton.statusbartweak.runtime.render.UnlockedIconSnapshotRenderController; import se.ajpanton.statusbartweak.runtime.render.UnlockedIconSnapshotRenderController.RenderResult; import se.ajpanton.statusbartweak.runtime.settings.RuntimeSettingsCache; @@ -570,11 +569,6 @@ final class StockLayoutCanvasController { chain -> { List args = chain.getArgs(); Object result = chain.proceed(); - if (args.size() >= 1 - && args.get(0) instanceof Boolean value - && StatusBarTintTarget.setDarkIcons(value)) { - scheduleUnlockedAppearanceRefreshForAllRoots(true); - } return result; }); } diff --git a/app/src/main/java/se/ajpanton/statusbartweak/runtime/render/StatusBarTintTarget.java b/app/src/main/java/se/ajpanton/statusbartweak/runtime/render/StatusBarTintTarget.java index 37dc12c..4565488 100644 --- a/app/src/main/java/se/ajpanton/statusbartweak/runtime/render/StatusBarTintTarget.java +++ b/app/src/main/java/se/ajpanton/statusbartweak/runtime/render/StatusBarTintTarget.java @@ -11,6 +11,10 @@ public final class StatusBarTintTarget { public static boolean setDarkIcons(boolean darkIcons) { int nextColor = darkIcons ? Color.BLACK : Color.WHITE; + return setColor(nextColor); + } + + public static boolean setColor(int nextColor) { if (color == nextColor) { return false; }