Add Appearance module

Summary:
Android implementation of the Appearance native module. Exposes the user's preferred color scheme: "dark" for Night theme ON, "light" for Night theme OFF.

Emits a `appearanceChanged` event when the current uiMode configuration changes.

To make your app handle Night mode changes, make sure to do the following:

* Declare your Activity can handle uiMode configuration changes (https://developer.android.com/preview/features/darktheme#java):
```
android:configChanges="uiMode"
```
* Make sure to pass the configuration changed activity lifecycle callback from your ReactActivity:
```
Override
protected void onConfigurationChanged(Configuration newConfig) {
    super.onConfigurationChanged();

    if (mReactInstanceManager != null) {
        mReactInstanceManager.onConfigurationChanged(newConfig);
    }
}
```

### RNTester

Adds the AppearanceExample to RNTester on Android.

Changelog:

[Android][Added] - New Appearance module exposes the user's current Night theme preference

Reviewed By: makovkastar

Differential Revision: D16942161

fbshipit-source-id: d24a8ff800a1c5f70f4efdec6891396c2078067e
This commit is contained in:
Héctor Ramos
2019-08-31 11:21:03 -07:00
committed by Facebook Github Bot
parent 51681e80ab
commit 17862a78db
11 changed files with 285 additions and 48 deletions
@@ -16,6 +16,7 @@ import com.facebook.react.module.annotations.ReactModuleList;
import com.facebook.react.module.model.ReactModuleInfo;
import com.facebook.react.module.model.ReactModuleInfoProvider;
import com.facebook.react.modules.accessibilityinfo.AccessibilityInfoModule;
import com.facebook.react.modules.appearance.AppearanceModule;
import com.facebook.react.modules.appstate.AppStateModule;
import com.facebook.react.modules.blob.BlobModule;
import com.facebook.react.modules.blob.FileReaderModule;
@@ -71,6 +72,7 @@ import java.util.Map;
@ReactModuleList(
nativeModules = {
AccessibilityInfoModule.class,
AppearanceModule.class,
AppStateModule.class,
BlobModule.class,
FileReaderModule.class,
@@ -112,6 +114,8 @@ public class MainReactPackage extends TurboReactPackage {
switch (name) {
case AccessibilityInfoModule.NAME:
return new AccessibilityInfoModule(context);
case AppearanceModule.NAME:
return new AppearanceModule(context);
case AppStateModule.NAME:
return new AppStateModule(context);
case BlobModule.NAME:
@@ -210,6 +214,7 @@ public class MainReactPackage extends TurboReactPackage {
Class<? extends NativeModule>[] moduleList =
new Class[] {
AccessibilityInfoModule.class,
AppearanceModule.class,
AppStateModule.class,
BlobModule.class,
FileReaderModule.class,