Split NativeStatusBarManager into NativeStatusBarManager{Android,IOS}

Summary:
The `StatusBarManager` NativeModule does not have a uniform API on iOS and Android. In particular, the `setStyle` and the `setHidden` methods have an additional parameter on iOS:

```
/**
 *  - statusBarStyles can be:
 *    - 'default'
 *    - 'dark-content'
 *    - 'light-content'
 */
+setStyle: (statusBarStyle?: ?string, animated: boolean) => void;
/**
 *  - withAnimation can be: 'none' | 'fade' | 'slide'
 */
+setHidden: (hidden: boolean, withAnimation: string) => void;
```

If we keep the NativeModule spec the same between the two platforms, we'd have to keep the second parameter optional for both methods. This works for `setHidden`, because the second parameter is a string, and optional strings are allowed. However, for `setStyle`, the second parameter is a number, and we don't support optional numbers/booleans on Android in the NativeModule system. If we keep the optional number, then the following check triggers in our RedBox tests on iOS, which makes them fail: https://fburl.com/diffusion/b7adezd9.

So, since the two specs are sufficiently different, I figured that the easiest path forward is to split them apart.

Changelog:
[iOS][Changed] - Separated NativeStatusBarManager into NativeStatusBarManager{IOS,Android}

Reviewed By: PeteTheHeat

Differential Revision: D18214161

fbshipit-source-id: 6fd8b8c5f576244b5b90ee47faa7f50508c5e1d3
This commit is contained in:
Ramanpreet Nara
2019-11-01 12:06:20 -07:00
committed by Facebook Github Bot
parent d729f0e922
commit a257083d2b
10 changed files with 383 additions and 127 deletions
@@ -0,0 +1,35 @@
/**
* Copyright (c) Facebook, Inc. and its affiliates.
*
* This source code is licensed under the MIT license found in the
* LICENSE file in the root directory of this source tree.
*
* @flow
* @format
*/
'use strict';
import type {TurboModule} from '../../TurboModule/RCTExport';
import * as TurboModuleRegistry from '../../TurboModule/TurboModuleRegistry';
export interface Spec extends TurboModule {
+getConstants: () => {|
+HEIGHT: number,
+DEFAULT_BACKGROUND_COLOR: number,
|};
+setColor: (color: number, animated: boolean) => void;
+setTranslucent: (translucent: boolean) => void;
/**
* - statusBarStyles can be:
* - 'default'
* - 'dark-content'
*/
+setStyle: (statusBarStyle?: ?string) => void;
+setHidden: (hidden: boolean) => void;
}
export default (TurboModuleRegistry.getEnforcing<Spec>(
'StatusBarManager',
): Spec);
@@ -14,35 +14,28 @@ import type {TurboModule} from '../../TurboModule/RCTExport';
import * as TurboModuleRegistry from '../../TurboModule/TurboModuleRegistry';
export interface Spec extends TurboModule {
// Android only
+getConstants: () => {|
+HEIGHT: number,
+DEFAULT_BACKGROUND_COLOR: number,
|};
+setColor: (color: number, animated: boolean) => void;
+setTranslucent: (translucent: boolean) => void;
// iOS only
// TODO(T47754272) Can we remove this method?
+getHeight: (callback: (result: {|height: number|}) => void) => void;
+setNetworkActivityIndicatorVisible: (visible: boolean) => void;
+addListener: (eventType: string) => void;
+removeListeners: (count: number) => void;
// Android and iOS
/**
* - animated is iOS only
* - statusBarStyles can be:
* - 'default' (iOS and Android)
* - 'dark-content' (iOS and Android)
* - 'light-content' (iOS)
* - 'default'
* - 'dark-content'
* - 'light-content'
*/
+setStyle: (statusBarStyle?: ?string, animated?: ?boolean) => void;
+setStyle: (statusBarStyle?: ?string, animated: boolean) => void;
/**
* - withAnimation is iOS only
* - withAnimation can be: 'none' | 'fade' | 'slide'
*/
+setHidden: (hidden: boolean, withAnimation?: ?string) => void;
+setHidden: (hidden: boolean, withAnimation: string) => void;
}
export default (TurboModuleRegistry.getEnforcing<Spec>(
+25 -22
View File
@@ -15,7 +15,8 @@ const React = require('react');
const processColor = require('../../StyleSheet/processColor');
import NativeStatusBarManager from './NativeStatusBarManager';
import NativeStatusBarManagerAndroid from './NativeStatusBarManagerAndroid';
import NativeStatusBarManagerIOS from './NativeStatusBarManagerIOS';
/**
* Status bar style
@@ -221,12 +222,11 @@ class StatusBar extends React.Component<Props> {
static _defaultProps = createStackEntry({
animated: false,
showHideTransition: 'fade',
backgroundColor: Platform.select({
android:
NativeStatusBarManager.getConstants().DEFAULT_BACKGROUND_COLOR ??
'black',
ios: 'black',
}),
backgroundColor:
Platform.OS === 'android'
? NativeStatusBarManagerAndroid.getConstants()
.DEFAULT_BACKGROUND_COLOR ?? 'black'
: 'black',
barStyle: 'default',
translucent: false,
hidden: false,
@@ -246,7 +246,10 @@ class StatusBar extends React.Component<Props> {
*
* @platform android
*/
static currentHeight: number = NativeStatusBarManager.getConstants().HEIGHT;
static currentHeight: ?number =
Platform.OS === 'android'
? NativeStatusBarManagerAndroid.getConstants().HEIGHT
: null;
// Provide an imperative API as static functions of the component.
// See the corresponding prop for more detail.
@@ -261,9 +264,9 @@ class StatusBar extends React.Component<Props> {
animation = animation || 'none';
StatusBar._defaultProps.hidden.value = hidden;
if (Platform.OS === 'ios') {
NativeStatusBarManager.setHidden(hidden, animation);
NativeStatusBarManagerIOS.setHidden(hidden, animation);
} else if (Platform.OS === 'android') {
NativeStatusBarManager.setHidden(hidden);
NativeStatusBarManagerAndroid.setHidden(hidden);
}
}
@@ -276,9 +279,9 @@ class StatusBar extends React.Component<Props> {
animated = animated || false;
StatusBar._defaultProps.barStyle.value = style;
if (Platform.OS === 'ios') {
NativeStatusBarManager.setStyle(style, animated);
NativeStatusBarManagerIOS.setStyle(style, animated);
} else if (Platform.OS === 'android') {
NativeStatusBarManager.setStyle(style);
NativeStatusBarManagerAndroid.setStyle(style);
}
}
@@ -294,7 +297,7 @@ class StatusBar extends React.Component<Props> {
return;
}
StatusBar._defaultProps.networkActivityIndicatorVisible = visible;
NativeStatusBarManager.setNetworkActivityIndicatorVisible(visible);
NativeStatusBarManagerIOS.setNetworkActivityIndicatorVisible(visible);
}
/**
@@ -318,7 +321,7 @@ class StatusBar extends React.Component<Props> {
return;
}
NativeStatusBarManager.setColor(processedColor, animated);
NativeStatusBarManagerAndroid.setColor(processedColor, animated);
}
/**
@@ -331,7 +334,7 @@ class StatusBar extends React.Component<Props> {
return;
}
StatusBar._defaultProps.translucent = translucent;
NativeStatusBarManager.setTranslucent(translucent);
NativeStatusBarManagerAndroid.setTranslucent(translucent);
}
/**
@@ -426,13 +429,13 @@ class StatusBar extends React.Component<Props> {
!oldProps ||
oldProps.barStyle.value !== mergedProps.barStyle.value
) {
NativeStatusBarManager.setStyle(
NativeStatusBarManagerIOS.setStyle(
mergedProps.barStyle.value,
mergedProps.barStyle.animated || false,
);
}
if (!oldProps || oldProps.hidden.value !== mergedProps.hidden.value) {
NativeStatusBarManager.setHidden(
NativeStatusBarManagerIOS.setHidden(
mergedProps.hidden.value,
mergedProps.hidden.animated
? mergedProps.hidden.transition
@@ -445,7 +448,7 @@ class StatusBar extends React.Component<Props> {
oldProps.networkActivityIndicatorVisible !==
mergedProps.networkActivityIndicatorVisible
) {
NativeStatusBarManager.setNetworkActivityIndicatorVisible(
NativeStatusBarManagerIOS.setNetworkActivityIndicatorVisible(
mergedProps.networkActivityIndicatorVisible,
);
}
@@ -454,7 +457,7 @@ class StatusBar extends React.Component<Props> {
!oldProps ||
oldProps.barStyle.value !== mergedProps.barStyle.value
) {
NativeStatusBarManager.setStyle(mergedProps.barStyle.value);
NativeStatusBarManagerAndroid.setStyle(mergedProps.barStyle.value);
}
if (
!oldProps ||
@@ -470,17 +473,17 @@ class StatusBar extends React.Component<Props> {
} parsed to null or undefined`,
);
} else {
NativeStatusBarManager.setColor(
NativeStatusBarManagerAndroid.setColor(
processedColor,
mergedProps.backgroundColor.animated,
);
}
}
if (!oldProps || oldProps.hidden.value !== mergedProps.hidden.value) {
NativeStatusBarManager.setHidden(mergedProps.hidden.value);
NativeStatusBarManagerAndroid.setHidden(mergedProps.hidden.value);
}
if (!oldProps || oldProps.translucent !== mergedProps.translucent) {
NativeStatusBarManager.setTranslucent(mergedProps.translucent);
NativeStatusBarManagerAndroid.setTranslucent(mergedProps.translucent);
}
}
// Update the current prop values.
@@ -1,17 +0,0 @@
/**
* Copyright (c) Facebook, Inc. and its affiliates.
*
* This source code is licensed under the MIT license found in the
* LICENSE file in the root directory of this source tree.
*
* @format
* @flow
*/
'use strict';
const NativeEventEmitter = require('../../EventEmitter/NativeEventEmitter');
/* $FlowFixMe(>=0.78.0 site=react_native_android_fb) This issue was found when
* making Flow check .android.js files. */
module.exports = new NativeEventEmitter('StatusBarManager');
@@ -12,11 +12,11 @@
const NativeEventEmitter = require('../../EventEmitter/NativeEventEmitter');
import NativeStatusBarManager from './NativeStatusBarManager';
import NativeStatusBarManagerIOS from './NativeStatusBarManagerIOS';
/**
* Use `StatusBar` for mutating the status bar.
*/
class StatusBarIOS extends NativeEventEmitter {}
module.exports = (new StatusBarIOS(NativeStatusBarManager): StatusBarIOS);
module.exports = (new StatusBarIOS(NativeStatusBarManagerIOS): StatusBarIOS);
@@ -2027,81 +2027,115 @@ namespace facebook {
} // namespace react
} // namespace facebook
@implementation RCTCxxConvert (NativeStatusBarManager_SpecGetHeightCallbackResult)
+ (RCTManagedPointer *)JS_NativeStatusBarManager_SpecGetHeightCallbackResult:(id)json
namespace facebook {
namespace react {
static facebook::jsi::Value __hostFunction_NativeStatusBarManagerAndroidSpecJSI_setColor(facebook::jsi::Runtime& rt, TurboModule &turboModule, const facebook::jsi::Value* args, size_t count) {
return static_cast<ObjCTurboModule&>(turboModule).invokeObjCMethod(rt, VoidKind, "setColor", @selector(setColor:animated:), args, count);
}
static facebook::jsi::Value __hostFunction_NativeStatusBarManagerAndroidSpecJSI_setTranslucent(facebook::jsi::Runtime& rt, TurboModule &turboModule, const facebook::jsi::Value* args, size_t count) {
return static_cast<ObjCTurboModule&>(turboModule).invokeObjCMethod(rt, VoidKind, "setTranslucent", @selector(setTranslucent:), args, count);
}
static facebook::jsi::Value __hostFunction_NativeStatusBarManagerAndroidSpecJSI_setStyle(facebook::jsi::Runtime& rt, TurboModule &turboModule, const facebook::jsi::Value* args, size_t count) {
return static_cast<ObjCTurboModule&>(turboModule).invokeObjCMethod(rt, VoidKind, "setStyle", @selector(setStyle:), args, count);
}
static facebook::jsi::Value __hostFunction_NativeStatusBarManagerAndroidSpecJSI_setHidden(facebook::jsi::Runtime& rt, TurboModule &turboModule, const facebook::jsi::Value* args, size_t count) {
return static_cast<ObjCTurboModule&>(turboModule).invokeObjCMethod(rt, VoidKind, "setHidden", @selector(setHidden:), args, count);
}
static facebook::jsi::Value __hostFunction_NativeStatusBarManagerAndroidSpecJSI_getConstants(facebook::jsi::Runtime& rt, TurboModule &turboModule, const facebook::jsi::Value* args, size_t count) {
return static_cast<ObjCTurboModule&>(turboModule).invokeObjCMethod(rt, ObjectKind, "getConstants", @selector(getConstants), args, count);
}
NativeStatusBarManagerAndroidSpecJSI::NativeStatusBarManagerAndroidSpecJSI(id<RCTTurboModule> instance, std::shared_ptr<CallInvoker> jsInvoker)
: ObjCTurboModule("StatusBarManagerAndroid", instance, jsInvoker) {
methodMap_["setColor"] = MethodMetadata {2, __hostFunction_NativeStatusBarManagerAndroidSpecJSI_setColor};
methodMap_["setTranslucent"] = MethodMetadata {1, __hostFunction_NativeStatusBarManagerAndroidSpecJSI_setTranslucent};
methodMap_["setStyle"] = MethodMetadata {1, __hostFunction_NativeStatusBarManagerAndroidSpecJSI_setStyle};
methodMap_["setHidden"] = MethodMetadata {1, __hostFunction_NativeStatusBarManagerAndroidSpecJSI_setHidden};
methodMap_["getConstants"] = MethodMetadata {0, __hostFunction_NativeStatusBarManagerAndroidSpecJSI_getConstants};
}
} // namespace react
} // namespace facebook
@implementation RCTCxxConvert (NativeStatusBarManagerIOS_SpecGetHeightCallbackResult)
+ (RCTManagedPointer *)JS_NativeStatusBarManagerIOS_SpecGetHeightCallbackResult:(id)json
{
return facebook::react::managedPointer<JS::NativeStatusBarManager::SpecGetHeightCallbackResult>(json);
return facebook::react::managedPointer<JS::NativeStatusBarManagerIOS::SpecGetHeightCallbackResult>(json);
}
@end
namespace facebook {
namespace react {
static facebook::jsi::Value __hostFunction_NativeStatusBarManagerSpecJSI_setColor(facebook::jsi::Runtime& rt, TurboModule &turboModule, const facebook::jsi::Value* args, size_t count) {
return static_cast<ObjCTurboModule&>(turboModule).invokeObjCMethod(rt, VoidKind, "setColor", @selector(setColor:animated:), args, count);
}
static facebook::jsi::Value __hostFunction_NativeStatusBarManagerSpecJSI_setTranslucent(facebook::jsi::Runtime& rt, TurboModule &turboModule, const facebook::jsi::Value* args, size_t count) {
return static_cast<ObjCTurboModule&>(turboModule).invokeObjCMethod(rt, VoidKind, "setTranslucent", @selector(setTranslucent:), args, count);
}
static facebook::jsi::Value __hostFunction_NativeStatusBarManagerSpecJSI_getHeight(facebook::jsi::Runtime& rt, TurboModule &turboModule, const facebook::jsi::Value* args, size_t count) {
static facebook::jsi::Value __hostFunction_NativeStatusBarManagerIOSSpecJSI_getHeight(facebook::jsi::Runtime& rt, TurboModule &turboModule, const facebook::jsi::Value* args, size_t count) {
return static_cast<ObjCTurboModule&>(turboModule).invokeObjCMethod(rt, VoidKind, "getHeight", @selector(getHeight:), args, count);
}
static facebook::jsi::Value __hostFunction_NativeStatusBarManagerSpecJSI_setNetworkActivityIndicatorVisible(facebook::jsi::Runtime& rt, TurboModule &turboModule, const facebook::jsi::Value* args, size_t count) {
static facebook::jsi::Value __hostFunction_NativeStatusBarManagerIOSSpecJSI_setNetworkActivityIndicatorVisible(facebook::jsi::Runtime& rt, TurboModule &turboModule, const facebook::jsi::Value* args, size_t count) {
return static_cast<ObjCTurboModule&>(turboModule).invokeObjCMethod(rt, VoidKind, "setNetworkActivityIndicatorVisible", @selector(setNetworkActivityIndicatorVisible:), args, count);
}
static facebook::jsi::Value __hostFunction_NativeStatusBarManagerSpecJSI_addListener(facebook::jsi::Runtime& rt, TurboModule &turboModule, const facebook::jsi::Value* args, size_t count) {
static facebook::jsi::Value __hostFunction_NativeStatusBarManagerIOSSpecJSI_addListener(facebook::jsi::Runtime& rt, TurboModule &turboModule, const facebook::jsi::Value* args, size_t count) {
return static_cast<ObjCTurboModule&>(turboModule).invokeObjCMethod(rt, VoidKind, "addListener", @selector(addListener:), args, count);
}
static facebook::jsi::Value __hostFunction_NativeStatusBarManagerSpecJSI_removeListeners(facebook::jsi::Runtime& rt, TurboModule &turboModule, const facebook::jsi::Value* args, size_t count) {
static facebook::jsi::Value __hostFunction_NativeStatusBarManagerIOSSpecJSI_removeListeners(facebook::jsi::Runtime& rt, TurboModule &turboModule, const facebook::jsi::Value* args, size_t count) {
return static_cast<ObjCTurboModule&>(turboModule).invokeObjCMethod(rt, VoidKind, "removeListeners", @selector(removeListeners:), args, count);
}
static facebook::jsi::Value __hostFunction_NativeStatusBarManagerSpecJSI_setStyle(facebook::jsi::Runtime& rt, TurboModule &turboModule, const facebook::jsi::Value* args, size_t count) {
static facebook::jsi::Value __hostFunction_NativeStatusBarManagerIOSSpecJSI_setStyle(facebook::jsi::Runtime& rt, TurboModule &turboModule, const facebook::jsi::Value* args, size_t count) {
return static_cast<ObjCTurboModule&>(turboModule).invokeObjCMethod(rt, VoidKind, "setStyle", @selector(setStyle:animated:), args, count);
}
static facebook::jsi::Value __hostFunction_NativeStatusBarManagerSpecJSI_setHidden(facebook::jsi::Runtime& rt, TurboModule &turboModule, const facebook::jsi::Value* args, size_t count) {
static facebook::jsi::Value __hostFunction_NativeStatusBarManagerIOSSpecJSI_setHidden(facebook::jsi::Runtime& rt, TurboModule &turboModule, const facebook::jsi::Value* args, size_t count) {
return static_cast<ObjCTurboModule&>(turboModule).invokeObjCMethod(rt, VoidKind, "setHidden", @selector(setHidden:withAnimation:), args, count);
}
static facebook::jsi::Value __hostFunction_NativeStatusBarManagerSpecJSI_getConstants(facebook::jsi::Runtime& rt, TurboModule &turboModule, const facebook::jsi::Value* args, size_t count) {
static facebook::jsi::Value __hostFunction_NativeStatusBarManagerIOSSpecJSI_getConstants(facebook::jsi::Runtime& rt, TurboModule &turboModule, const facebook::jsi::Value* args, size_t count) {
return static_cast<ObjCTurboModule&>(turboModule).invokeObjCMethod(rt, ObjectKind, "getConstants", @selector(getConstants), args, count);
}
NativeStatusBarManagerSpecJSI::NativeStatusBarManagerSpecJSI(id<RCTTurboModule> instance, std::shared_ptr<CallInvoker> jsInvoker)
: ObjCTurboModule("StatusBarManager", instance, jsInvoker) {
NativeStatusBarManagerIOSSpecJSI::NativeStatusBarManagerIOSSpecJSI(id<RCTTurboModule> instance, std::shared_ptr<CallInvoker> jsInvoker)
: ObjCTurboModule("StatusBarManagerIOS", instance, jsInvoker) {
methodMap_["setColor"] = MethodMetadata {2, __hostFunction_NativeStatusBarManagerSpecJSI_setColor};
methodMap_["getHeight"] = MethodMetadata {1, __hostFunction_NativeStatusBarManagerIOSSpecJSI_getHeight};
methodMap_["setTranslucent"] = MethodMetadata {1, __hostFunction_NativeStatusBarManagerSpecJSI_setTranslucent};
methodMap_["setNetworkActivityIndicatorVisible"] = MethodMetadata {1, __hostFunction_NativeStatusBarManagerIOSSpecJSI_setNetworkActivityIndicatorVisible};
methodMap_["getHeight"] = MethodMetadata {1, __hostFunction_NativeStatusBarManagerSpecJSI_getHeight};
methodMap_["addListener"] = MethodMetadata {1, __hostFunction_NativeStatusBarManagerIOSSpecJSI_addListener};
methodMap_["setNetworkActivityIndicatorVisible"] = MethodMetadata {1, __hostFunction_NativeStatusBarManagerSpecJSI_setNetworkActivityIndicatorVisible};
methodMap_["removeListeners"] = MethodMetadata {1, __hostFunction_NativeStatusBarManagerIOSSpecJSI_removeListeners};
methodMap_["addListener"] = MethodMetadata {1, __hostFunction_NativeStatusBarManagerSpecJSI_addListener};
methodMap_["setStyle"] = MethodMetadata {2, __hostFunction_NativeStatusBarManagerIOSSpecJSI_setStyle};
methodMap_["removeListeners"] = MethodMetadata {1, __hostFunction_NativeStatusBarManagerSpecJSI_removeListeners};
methodMap_["setHidden"] = MethodMetadata {2, __hostFunction_NativeStatusBarManagerIOSSpecJSI_setHidden};
methodMap_["setStyle"] = MethodMetadata {2, __hostFunction_NativeStatusBarManagerSpecJSI_setStyle};
methodMap_["setHidden"] = MethodMetadata {2, __hostFunction_NativeStatusBarManagerSpecJSI_setHidden};
methodMap_["getConstants"] = MethodMetadata {0, __hostFunction_NativeStatusBarManagerSpecJSI_getConstants};
methodMap_["getConstants"] = MethodMetadata {0, __hostFunction_NativeStatusBarManagerIOSSpecJSI_getConstants};
@@ -2161,23 +2161,7 @@ namespace facebook {
} // namespace facebook
namespace JS {
namespace NativeStatusBarManager {
struct SpecGetHeightCallbackResult {
double height() const;
SpecGetHeightCallbackResult(NSDictionary *const v) : _v(v) {}
private:
NSDictionary *_v;
};
}
}
@interface RCTCxxConvert (NativeStatusBarManager_SpecGetHeightCallbackResult)
+ (RCTManagedPointer *)JS_NativeStatusBarManager_SpecGetHeightCallbackResult:(id)json;
@end
namespace JS {
namespace NativeStatusBarManager {
namespace NativeStatusBarManagerAndroid {
struct Constants {
struct Builder {
@@ -2204,32 +2188,98 @@ namespace JS {
};
}
}
@protocol NativeStatusBarManagerSpec <RCTBridgeModule, RCTTurboModule>
@protocol NativeStatusBarManagerAndroidSpec <RCTBridgeModule, RCTTurboModule>
- (void)setColor:(double)color
animated:(BOOL)animated;
- (void)setTranslucent:(BOOL)translucent;
- (void)getHeight:(RCTResponseSenderBlock)callback;
- (void)setNetworkActivityIndicatorVisible:(BOOL)visible;
- (void)addListener:(NSString *)eventType;
- (void)removeListeners:(double)count;
- (void)setStyle:(NSString * _Nullable)statusBarStyle
animated:(NSNumber *)animated;
- (void)setHidden:(BOOL)hidden
withAnimation:(NSString * _Nullable)withAnimation;
- (facebook::react::ModuleConstants<JS::NativeStatusBarManager::Constants::Builder>)constantsToExport;
- (facebook::react::ModuleConstants<JS::NativeStatusBarManager::Constants::Builder>)getConstants;
- (void)setStyle:(NSString * _Nullable)statusBarStyle;
- (void)setHidden:(BOOL)hidden;
- (facebook::react::ModuleConstants<JS::NativeStatusBarManagerAndroid::Constants::Builder>)constantsToExport;
- (facebook::react::ModuleConstants<JS::NativeStatusBarManagerAndroid::Constants::Builder>)getConstants;
@end
namespace facebook {
namespace react {
/**
* ObjC++ class for module 'StatusBarManager'
* ObjC++ class for module 'StatusBarManagerAndroid'
*/
class JSI_EXPORT NativeStatusBarManagerSpecJSI : public ObjCTurboModule {
class JSI_EXPORT NativeStatusBarManagerAndroidSpecJSI : public ObjCTurboModule {
public:
NativeStatusBarManagerSpecJSI(id<RCTTurboModule> instance, std::shared_ptr<CallInvoker> jsInvoker);
NativeStatusBarManagerAndroidSpecJSI(id<RCTTurboModule> instance, std::shared_ptr<CallInvoker> jsInvoker);
};
} // namespace react
} // namespace facebook
namespace JS {
namespace NativeStatusBarManagerIOS {
struct SpecGetHeightCallbackResult {
double height() const;
SpecGetHeightCallbackResult(NSDictionary *const v) : _v(v) {}
private:
NSDictionary *_v;
};
}
}
@interface RCTCxxConvert (NativeStatusBarManagerIOS_SpecGetHeightCallbackResult)
+ (RCTManagedPointer *)JS_NativeStatusBarManagerIOS_SpecGetHeightCallbackResult:(id)json;
@end
namespace JS {
namespace NativeStatusBarManagerIOS {
struct Constants {
struct Builder {
struct Input {
RCTRequired<double> HEIGHT;
RCTRequired<double> DEFAULT_BACKGROUND_COLOR;
};
/** Initialize with a set of values */
Builder(const Input i);
/** Initialize with an existing Constants */
Builder(Constants i);
/** Builds the object. Generally used only by the infrastructure. */
NSDictionary *buildUnsafeRawValue() const { return _factory(); };
private:
NSDictionary *(^_factory)(void);
};
static Constants fromUnsafeRawValue(NSDictionary *const v) { return {v}; }
NSDictionary *unsafeRawValue() const { return _v; }
private:
Constants(NSDictionary *const v) : _v(v) {}
NSDictionary *_v;
};
}
}
@protocol NativeStatusBarManagerIOSSpec <RCTBridgeModule, RCTTurboModule>
- (void)getHeight:(RCTResponseSenderBlock)callback;
- (void)setNetworkActivityIndicatorVisible:(BOOL)visible;
- (void)addListener:(NSString *)eventType;
- (void)removeListeners:(double)count;
- (void)setStyle:(NSString * _Nullable)statusBarStyle
animated:(BOOL)animated;
- (void)setHidden:(BOOL)hidden
withAnimation:(NSString *)withAnimation;
- (facebook::react::ModuleConstants<JS::NativeStatusBarManagerIOS::Constants::Builder>)constantsToExport;
- (facebook::react::ModuleConstants<JS::NativeStatusBarManagerIOS::Constants::Builder>)getConstants;
@end
namespace facebook {
namespace react {
/**
* ObjC++ class for module 'StatusBarManagerIOS'
*/
class JSI_EXPORT NativeStatusBarManagerIOSSpecJSI : public ObjCTurboModule {
public:
NativeStatusBarManagerIOSSpecJSI(id<RCTTurboModule> instance, std::shared_ptr<CallInvoker> jsInvoker);
};
} // namespace react
@@ -3308,12 +3358,7 @@ inline JS::NativeSourceCode::Constants::Builder::Builder(const Input i) : _facto
inline JS::NativeSourceCode::Constants::Builder::Builder(Constants i) : _factory(^{
return i.unsafeRawValue();
}) {}
inline double JS::NativeStatusBarManager::SpecGetHeightCallbackResult::height() const
{
id const p = _v[@"height"];
return RCTBridgingToDouble(p);
}
inline JS::NativeStatusBarManager::Constants::Builder::Builder(const Input i) : _factory(^{
inline JS::NativeStatusBarManagerAndroid::Constants::Builder::Builder(const Input i) : _factory(^{
NSMutableDictionary *d = [NSMutableDictionary new];
auto HEIGHT = i.HEIGHT.get();
d[@"HEIGHT"] = @(HEIGHT);
@@ -3321,7 +3366,23 @@ inline JS::NativeStatusBarManager::Constants::Builder::Builder(const Input i) :
d[@"DEFAULT_BACKGROUND_COLOR"] = @(DEFAULT_BACKGROUND_COLOR);
return d;
}) {}
inline JS::NativeStatusBarManager::Constants::Builder::Builder(Constants i) : _factory(^{
inline JS::NativeStatusBarManagerAndroid::Constants::Builder::Builder(Constants i) : _factory(^{
return i.unsafeRawValue();
}) {}
inline double JS::NativeStatusBarManagerIOS::SpecGetHeightCallbackResult::height() const
{
id const p = _v[@"height"];
return RCTBridgingToDouble(p);
}
inline JS::NativeStatusBarManagerIOS::Constants::Builder::Builder(const Input i) : _factory(^{
NSMutableDictionary *d = [NSMutableDictionary new];
auto HEIGHT = i.HEIGHT.get();
d[@"HEIGHT"] = @(HEIGHT);
auto DEFAULT_BACKGROUND_COLOR = i.DEFAULT_BACKGROUND_COLOR.get();
d[@"DEFAULT_BACKGROUND_COLOR"] = @(DEFAULT_BACKGROUND_COLOR);
return d;
}) {}
inline JS::NativeStatusBarManagerIOS::Constants::Builder::Builder(Constants i) : _factory(^{
return i.unsafeRawValue();
}) {}
inline JS::NativeToastAndroid::Constants::Builder::Builder(const Input i) : _factory(^{
+5 -3
View File
@@ -203,6 +203,8 @@ PODS:
- React-RCTActionSheet (1000.0.0):
- React-Core/RCTActionSheetHeaders (= 1000.0.0)
- React-RCTAnimation (1000.0.0):
- FBReactNativeSpec (= 1000.0.0)
- Folly (= 2018.10.22.00)
- React-Core/RCTAnimationHeaders (= 1000.0.0)
- React-RCTBlob (1000.0.0):
- FBReactNativeSpec (= 1000.0.0)
@@ -365,14 +367,14 @@ SPEC CHECKSUMS:
RCTTypeSafety: 2b1cb2d92b779aa9a3522f67bd4f07e6b6d0797e
React: 28a654b69575941571c073a656bc06795825e7f7
React-ART: a5da06a892342d03896e0db45a7072525981f63c
React-Core: f8656b21cfe16b1fe276686f3b921bce0fa6de4d
React-Core: c74122b2f399f92f94301cd22e888787375ed5d8
React-CoreModules: 96b2f1e0b84493e6c1b7f3bb21357f24fdcfce2f
React-cxxreact: 7c4242192149ce0205b53efaa03e3bf86ba4337c
React-jsi: 98d1f9d8a79d2720ba6a44c2d928a77f315b7e4f
React-jsiexecutor: c0ab8c80a6e88380d63f583690a50d4a723b47b5
React-jsinspector: ea0a218071a11c3687cef2480580180caa6a64c0
React-RCTActionSheet: 090e7bd7c5774d919c47c4eeff78223a7fd8c19c
React-RCTAnimation: 73d536fff417a101724d9529189c95a94263710c
React-RCTAnimation: fb2b60b7050aedf5a8bf03cf5c30f33a8d2b01b5
React-RCTBlob: acd519b1d6ec5d66f98b7cf8e70d0cd76642426f
React-RCTImage: 4d2a090c491e29665f27f87c58feb4dfcb2f4cfa
React-RCTLinking: d7d7f792e63a8d57380cecbb9b7a3b31f92d1bb6
@@ -383,7 +385,7 @@ SPEC CHECKSUMS:
React-RCTText: 9078167d3bc011162326f2d8ef4dd580ec1eca17
React-RCTVibration: bf05159719598f876ba763e5a58ccbad21e2e82f
ReactCommon: 9d212865526209dc2d01be40340c8d27b53e6bea
Yoga: d88d8b51ee5b247f43211e2edf272438df1b484f
Yoga: 01557763eb099a104c0ac47eed7dd07203e29d6b
PODFILE CHECKSUM: 060903e270072f1e192b064848e6c34528af1c87
@@ -0,0 +1,69 @@
/**
* Copyright (c) Facebook, Inc. and its affiliates.
*
* <p>This source code is licensed under the MIT license found in the LICENSE file in the root
* directory of this source tree.
*
* <p>Generated by an internal genrule from Flow types.
*
* @generated
* @nolint
*/
package com.facebook.fbreact.specs;
import com.facebook.react.bridge.ReactApplicationContext;
import com.facebook.react.bridge.ReactContextBaseJavaModule;
import com.facebook.react.bridge.ReactMethod;
import com.facebook.react.bridge.ReactModuleWithSpec;
import com.facebook.react.common.build.ReactBuildConfig;
import com.facebook.react.turbomodule.core.interfaces.TurboModule;
import java.util.Arrays;
import java.util.HashSet;
import java.util.Map;
import java.util.Set;
import javax.annotation.Nullable;
public abstract class NativeStatusBarManagerAndroidSpec extends ReactContextBaseJavaModule implements ReactModuleWithSpec, TurboModule {
public NativeStatusBarManagerAndroidSpec(ReactApplicationContext reactContext) {
super(reactContext);
}
@ReactMethod
public abstract void setTranslucent(boolean translucent);
@ReactMethod
public abstract void setColor(double color, boolean animated);
@ReactMethod
public abstract void setHidden(boolean hidden);
@ReactMethod
public abstract void setStyle(@Nullable String statusBarStyle);
protected abstract Map<String, Object> getTypedExportedConstants();
@Override
public final @Nullable Map<String, Object> getConstants() {
Map<String, Object> constants = getTypedExportedConstants();
if (ReactBuildConfig.DEBUG || ReactBuildConfig.IS_INTERNAL_BUILD) {
Set<String> obligatoryFlowConstants = new HashSet<>(Arrays.asList(
"DEFAULT_BACKGROUND_COLOR",
"HEIGHT"
));
Set<String> optionalFlowConstants = new HashSet<>();
Set<String> undeclaredConstants = new HashSet<>(constants.keySet());
undeclaredConstants.removeAll(obligatoryFlowConstants);
undeclaredConstants.removeAll(optionalFlowConstants);
if (!undeclaredConstants.isEmpty()) {
throw new IllegalStateException(String.format("Native Module Flow doesn't declare constants: %s", undeclaredConstants));
}
undeclaredConstants = obligatoryFlowConstants;
undeclaredConstants.removeAll(constants.keySet());
if (!undeclaredConstants.isEmpty()) {
throw new IllegalStateException(String.format("Native Module doesn't fill in constants: %s", undeclaredConstants));
}
}
return constants;
}
}
@@ -0,0 +1,76 @@
/**
* Copyright (c) Facebook, Inc. and its affiliates.
*
* <p>This source code is licensed under the MIT license found in the LICENSE file in the root
* directory of this source tree.
*
* <p>Generated by an internal genrule from Flow types.
*
* @generated
* @nolint
*/
package com.facebook.fbreact.specs;
import com.facebook.react.bridge.Callback;
import com.facebook.react.bridge.ReactApplicationContext;
import com.facebook.react.bridge.ReactContextBaseJavaModule;
import com.facebook.react.bridge.ReactMethod;
import com.facebook.react.bridge.ReactModuleWithSpec;
import com.facebook.react.common.build.ReactBuildConfig;
import com.facebook.react.turbomodule.core.interfaces.TurboModule;
import java.util.Arrays;
import java.util.HashSet;
import java.util.Map;
import java.util.Set;
import javax.annotation.Nullable;
public abstract class NativeStatusBarManagerIOSSpec extends ReactContextBaseJavaModule implements ReactModuleWithSpec, TurboModule {
public NativeStatusBarManagerIOSSpec(ReactApplicationContext reactContext) {
super(reactContext);
}
@ReactMethod
public abstract void setNetworkActivityIndicatorVisible(boolean visible);
@ReactMethod
public abstract void getHeight(Callback callback);
@ReactMethod
public abstract void removeListeners(double count);
@ReactMethod
public abstract void setHidden(boolean hidden, String withAnimation);
@ReactMethod
public abstract void setStyle(@Nullable String statusBarStyle, boolean animated);
@ReactMethod
public abstract void addListener(String eventType);
protected abstract Map<String, Object> getTypedExportedConstants();
@Override
public final @Nullable Map<String, Object> getConstants() {
Map<String, Object> constants = getTypedExportedConstants();
if (ReactBuildConfig.DEBUG || ReactBuildConfig.IS_INTERNAL_BUILD) {
Set<String> obligatoryFlowConstants = new HashSet<>(Arrays.asList(
"DEFAULT_BACKGROUND_COLOR",
"HEIGHT"
));
Set<String> optionalFlowConstants = new HashSet<>();
Set<String> undeclaredConstants = new HashSet<>(constants.keySet());
undeclaredConstants.removeAll(obligatoryFlowConstants);
undeclaredConstants.removeAll(optionalFlowConstants);
if (!undeclaredConstants.isEmpty()) {
throw new IllegalStateException(String.format("Native Module Flow doesn't declare constants: %s", undeclaredConstants));
}
undeclaredConstants = obligatoryFlowConstants;
undeclaredConstants.removeAll(constants.keySet());
if (!undeclaredConstants.isEmpty()) {
throw new IllegalStateException(String.format("Native Module doesn't fill in constants: %s", undeclaredConstants));
}
}
return constants;
}
}