From 2d00e217dfeb6cd4d39209703f7bd5ce1f010bc2 Mon Sep 17 00:00:00 2001 From: Kudo Chien Date: Tue, 23 Jan 2024 18:20:13 +0800 Subject: [PATCH] Fix appearance changed into wrong activity (#34) the original `AppCompatDelegate.setDefaultNightMode()` is a global setup. when changing the night mode, it will actually call HomeActivity's `onConfigurationChanged`. this pr tries to set night mode to current activity by using the `setLocalNightMode()` (cherry picked from commit cf55a593438ea5650b9c087bb77e79e8af5ccd3a) --- .../react/modules/appearance/AppearanceModule.java | 14 +++++++++++--- 1 file changed, 11 insertions(+), 3 deletions(-) diff --git a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/modules/appearance/AppearanceModule.java b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/modules/appearance/AppearanceModule.java index 56e01d0a8f9009..b951511ba178a7 100644 --- a/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/modules/appearance/AppearanceModule.java +++ b/packages/react-native/ReactAndroid/src/main/java/com/facebook/react/modules/appearance/AppearanceModule.java @@ -84,12 +84,20 @@ private String colorSchemeForCurrentConfiguration(Context context) { @Override public void setColorScheme(String style) { + int nightMode = AppCompatDelegate.MODE_NIGHT_FOLLOW_SYSTEM; if (style.equals("dark")) { - AppCompatDelegate.setDefaultNightMode(AppCompatDelegate.MODE_NIGHT_YES); + nightMode = AppCompatDelegate.MODE_NIGHT_YES; } else if (style.equals("light")) { - AppCompatDelegate.setDefaultNightMode(AppCompatDelegate.MODE_NIGHT_NO); + nightMode = AppCompatDelegate.MODE_NIGHT_NO; } else if (style.equals("unspecified")) { - AppCompatDelegate.setDefaultNightMode(AppCompatDelegate.MODE_NIGHT_FOLLOW_SYSTEM); + nightMode = AppCompatDelegate.MODE_NIGHT_FOLLOW_SYSTEM; + } + + Activity activity = getCurrentActivity(); + if (activity instanceof AppCompatActivity) { + ((AppCompatActivity) activity).getDelegate().setLocalNightMode(nightMode); + } else { + AppCompatDelegate.setDefaultNightMode(nightMode); } }