mirror of
https://github.com/facebook/react-native.git
synced 2025-11-01 09:14:26 +00:00
Summary: This PR fixes a few issues with the Appearance API (as noted here https://github.com/facebook/react-native/issues/28823). 1. For the Appearance API to work correctly on Android you need to call `AppearanceModule.onConfigurationChanged` when the current Activity goes through a configuration change. This was being called in the RNTester app but not in `ReactActivity` so it meant the Appearance API wouldn't work for Android in newly generated RN projects (or ones upgraded to the latest version of RN). 2. The Appearance API wasn't working correctly for brownfield scenarios on Android. It's possible to force an app light or dark natively on Android by calling `AppCompatDelegate.setDefaultNightMode()`. The Appearance API wasn't picking up changes from this function because it was using the Application context instead of the current Activity context. 3. The Appearance API wasn't working correctly for brownfield scenarios on iOS. Just like on Android its possible to force an app light or dark natively by setting `window.overrideUserInterfaceStyle`. The Appearance API didn't work with this override because we were overwriting `_currentColorScheme` back to default as soon as we set it. ## Changelog <!-- Help reviewers and the release process by writing your own changelog entry. For an example, see: https://github.com/facebook/react-native/wiki/Changelog --> ### Fixed https://github.com/facebook/react-native/issues/28823 * [Android] [Fixed] - Appearance API now works on Android * [Android] [Fixed] - Appearance API now works correctly when calling `AppCompatDelegate.setDefaultNightMode()` * [iOS] [Fixed] - Appearance API now works correctly when setting `window.overrideUserInterfaceStyle` Pull Request resolved: https://github.com/facebook/react-native/pull/29106 Test Plan: Ran RNTester on iOS and Android and verified the Appearance examples still worked [correctly.](url) Reviewed By: hramos Differential Revision: D31284331 Pulled By: sota000 fbshipit-source-id: 45bbe33983e506eb177d596d33ddf15f846708fd
This commit is contained in:
committed by
Facebook GitHub Bot
parent
52809688d2
commit
25a2c608f7
@@ -8,6 +8,7 @@
|
||||
package com.facebook.react;
|
||||
|
||||
import android.content.Intent;
|
||||
import android.content.res.Configuration;
|
||||
import android.os.Bundle;
|
||||
import android.view.KeyEvent;
|
||||
import androidx.annotation.Nullable;
|
||||
@@ -121,6 +122,12 @@ public abstract class ReactActivity extends AppCompatActivity
|
||||
mDelegate.onWindowFocusChanged(hasFocus);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onConfigurationChanged(Configuration newConfig) {
|
||||
super.onConfigurationChanged(newConfig);
|
||||
mDelegate.onConfigurationChanged(newConfig);
|
||||
}
|
||||
|
||||
protected final ReactNativeHost getReactNativeHost() {
|
||||
return mDelegate.getReactNativeHost();
|
||||
}
|
||||
|
||||
@@ -11,6 +11,7 @@ import android.annotation.TargetApi;
|
||||
import android.app.Activity;
|
||||
import android.content.Context;
|
||||
import android.content.Intent;
|
||||
import android.content.res.Configuration;
|
||||
import android.os.Build;
|
||||
import android.os.Bundle;
|
||||
import android.view.KeyEvent;
|
||||
@@ -154,6 +155,12 @@ public class ReactActivityDelegate {
|
||||
}
|
||||
}
|
||||
|
||||
public void onConfigurationChanged(Configuration newConfig) {
|
||||
if (getReactNativeHost().hasInstance()) {
|
||||
getReactInstanceManager().onConfigurationChanged(getContext(), newConfig);
|
||||
}
|
||||
}
|
||||
|
||||
@TargetApi(Build.VERSION_CODES.M)
|
||||
public void requestPermissions(
|
||||
String[] permissions, int requestCode, PermissionListener listener) {
|
||||
|
||||
+10
-1
@@ -7,6 +7,7 @@
|
||||
|
||||
package com.facebook.react.modules.appearance;
|
||||
|
||||
import android.app.Activity;
|
||||
import android.content.Context;
|
||||
import android.content.res.Configuration;
|
||||
import androidx.annotation.Nullable;
|
||||
@@ -74,7 +75,15 @@ public class AppearanceModule extends NativeAppearanceSpec {
|
||||
|
||||
@Override
|
||||
public String getColorScheme() {
|
||||
mColorScheme = colorSchemeForCurrentConfiguration(getReactApplicationContext());
|
||||
// Attempt to use the Activity context first in order to get the most up to date
|
||||
// scheme. This covers the scenario when AppCompatDelegate.setDefaultNightMode()
|
||||
// is called directly (which can occur in Brownfield apps for example).
|
||||
Activity activity = getCurrentActivity();
|
||||
|
||||
mColorScheme =
|
||||
colorSchemeForCurrentConfiguration(
|
||||
activity != null ? activity : getReactApplicationContext());
|
||||
|
||||
return mColorScheme;
|
||||
}
|
||||
|
||||
|
||||
Reference in New Issue
Block a user