diff --git a/ReactAndroid/src/main/java/com/facebook/react/modules/appearance/AppearanceModule.java b/ReactAndroid/src/main/java/com/facebook/react/modules/appearance/AppearanceModule.java index 162f6bf87c4ac2..b95ddfc871d2a9 100644 --- a/ReactAndroid/src/main/java/com/facebook/react/modules/appearance/AppearanceModule.java +++ b/ReactAndroid/src/main/java/com/facebook/react/modules/appearance/AppearanceModule.java @@ -9,6 +9,7 @@ import android.content.Context; import android.content.res.Configuration; +import androidx.annotation.Nullable; import com.facebook.fbreact.specs.NativeAppearanceSpec; import com.facebook.react.bridge.Arguments; import com.facebook.react.bridge.ReactApplicationContext; @@ -26,13 +27,34 @@ public class AppearanceModule extends NativeAppearanceSpec { private String mColorScheme = "light"; + private final @Nullable OverrideColorScheme mOverrideColorScheme; + + /** Optional override to the current color scheme */ + public interface OverrideColorScheme { + + /** + * Color scheme will use the return value instead of the current system configuration. Available + * scheme: {light, dark} + */ + public String getScheme(); + } + public AppearanceModule(ReactApplicationContext reactContext) { + this(reactContext, null); + } + + public AppearanceModule( + ReactApplicationContext reactContext, @Nullable OverrideColorScheme overrideColorScheme) { super(reactContext); mColorScheme = colorSchemeForCurrentConfiguration(reactContext); + mOverrideColorScheme = overrideColorScheme; } - private static String colorSchemeForCurrentConfiguration(Context context) { + private String colorSchemeForCurrentConfiguration(Context context) { + if (mOverrideColorScheme != null) { + return mOverrideColorScheme.getScheme(); + } int currentNightMode = context.getResources().getConfiguration().uiMode & Configuration.UI_MODE_NIGHT_MASK; switch (currentNightMode) {