Skip to content

Commit f4e93df

Browse files
sbuggaymeta-codesync[bot]
authored andcommitted
Add custom dimension provider to RCTDeviceInfo (#54107)
Summary: Pull Request resolved: #54107 Adds a dimension provider override to RCTDeviceInfo. Changelog: [Internal] Reviewed By: javache Differential Revision: D84131733 fbshipit-source-id: 2419bcb9a23486eee61f203414084d5105a091f8
1 parent 6f48270 commit f4e93df

2 files changed

Lines changed: 20 additions & 0 deletions

File tree

packages/react-native/React/CoreModules/RCTDeviceInfo.h

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -11,4 +11,6 @@
1111

1212
@interface RCTDeviceInfo : NSObject <RCTBridgeModule>
1313

14+
- (instancetype)initWithDimensionsProvider:(NSDictionary * (^)(void))dimensionsProvider;
15+
1416
@end

packages/react-native/React/CoreModules/RCTDeviceInfo.mm

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,7 @@ @implementation RCTDeviceInfo {
3232
NSDictionary *_constants;
3333

3434
__weak UIWindow *_applicationWindow;
35+
NSDictionary * (^_dimensionsProvider)(void);
3536
}
3637

3738
static NSString *const kFrameKeyPath = @"frame";
@@ -49,6 +50,14 @@ - (instancetype)init
4950
return self;
5051
}
5152

53+
- (instancetype)initWithDimensionsProvider:(NSDictionary * (^)(void))dimensionsProvider
54+
{
55+
if (self = [self init]) {
56+
_dimensionsProvider = dimensionsProvider;
57+
}
58+
return self;
59+
}
60+
5261
- (void)observeValueForKeyPath:(NSString *)keyPath
5362
ofObject:(id)object
5463
change:(NSDictionary *)change
@@ -199,6 +208,15 @@ static BOOL RCTIsIPhoneNotched()
199208

200209
- (NSDictionary *)_exportedDimensions
201210
{
211+
// if a window size provider has been set, use that. If nil is returned from the provider
212+
// it will fall back to the default behavior.
213+
if (_dimensionsProvider != nil) {
214+
auto dimensions = _dimensionsProvider();
215+
if (dimensions != nil) {
216+
return dimensions;
217+
}
218+
}
219+
202220
RCTAssert(!_invalidated, @"Failed to get exported dimensions: RCTDeviceInfo has been invalidated");
203221
RCTAssert(_moduleRegistry, @"Failed to get exported dimensions: RCTModuleRegistry is nil");
204222
RCTAccessibilityManager *accessibilityManager =

0 commit comments

Comments
 (0)