Skip to content

Commit 96a5001

Browse files
Emily Janzerfacebook-github-bot
authored andcommitted
Add spec for DeviceInfo module
Summary: Adding flow types for DeviceInfo module and migrating our codebase over to using `DeviceInfo.getConstants()` Reviewed By: fkgozali Differential Revision: D14645744 fbshipit-source-id: e30a060c6dc92938cd1420ba11a1d837c79d1e32
1 parent 40625ce commit 96a5001

7 files changed

Lines changed: 72 additions & 24 deletions

File tree

Libraries/Utilities/DeviceInfo.js

Lines changed: 2 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -10,10 +10,6 @@
1010

1111
'use strict';
1212

13-
const DeviceInfo = require('../BatchedBridge/NativeModules').DeviceInfo;
13+
import NativeDeviceInfo from './NativeDeviceInfo';
1414

15-
const invariant = require('invariant');
16-
17-
invariant(DeviceInfo, 'DeviceInfo native module is not installed correctly');
18-
19-
module.exports = DeviceInfo;
15+
module.exports = NativeDeviceInfo;

Libraries/Utilities/Dimensions.js

Lines changed: 3 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,8 @@ const EventEmitter = require('../vendor/emitter/EventEmitter');
1414
const Platform = require('./Platform');
1515
const RCTDeviceEventEmitter = require('../EventEmitter/RCTDeviceEventEmitter');
1616

17+
import NativeDeviceInfo from './NativeDeviceInfo';
18+
1719
const invariant = require('invariant');
1820

1921
const eventEmitter = new EventEmitter();
@@ -128,8 +130,7 @@ let dims: ?{[key: string]: any} =
128130
global.nativeExtensions.DeviceInfo.Dimensions;
129131
let nativeExtensionsEnabled = true;
130132
if (!dims) {
131-
const DeviceInfo = require('./DeviceInfo');
132-
dims = DeviceInfo.Dimensions;
133+
dims = NativeDeviceInfo.getConstants().Dimensions;
133134
nativeExtensionsEnabled = false;
134135
}
135136

Lines changed: 47 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,47 @@
1+
/**
2+
* Copyright (c) Facebook, Inc. and its affiliates.
3+
*
4+
* This source code is licensed under the MIT license found in the
5+
* LICENSE file in the root directory of this source tree.
6+
*
7+
* @flow strict-local
8+
* @format
9+
*/
10+
11+
'use strict';
12+
13+
import type {TurboModule} from 'RCTExport';
14+
import * as TurboModuleRegistry from 'TurboModuleRegistry';
15+
16+
type DisplayMetricsAndroid = {|
17+
width: number,
18+
height: number,
19+
scale: number,
20+
fontScale: number,
21+
densityDpi: number,
22+
|};
23+
24+
type DisplayMetricsIOS = {|
25+
width: number,
26+
height: number,
27+
scale: number,
28+
fontScale: number,
29+
|};
30+
31+
export interface Spec extends TurboModule {
32+
+getConstants: () => {|
33+
+Dimensions: {
34+
window?: DisplayMetricsIOS,
35+
screen?: DisplayMetricsIOS,
36+
windowPhysicalPixels?: DisplayMetricsAndroid,
37+
screenPhysicalPixels?: DisplayMetricsAndroid,
38+
},
39+
+isIPhoneX_deprecated?: boolean,
40+
|};
41+
}
42+
43+
const NativeModule = TurboModuleRegistry.getEnforcing<Spec>('DeviceInfo');
44+
45+
const NativeDeviceInfo = NativeModule;
46+
47+
export default NativeDeviceInfo;

Libraries/Utilities/__tests__/DeviceInfo-test.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,6 @@ describe('DeviceInfo', () => {
1414
const DeviceInfo = require('../DeviceInfo');
1515

1616
it('should give device info', () => {
17-
expect(DeviceInfo).toHaveProperty('Dimensions');
17+
expect(DeviceInfo.getConstants()).toHaveProperty('Dimensions');
1818
});
1919
});

Libraries/react-native/react-native-implementation.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -206,7 +206,7 @@ module.exports = {
206206
return require('DatePickerAndroid');
207207
},
208208
get DeviceInfo() {
209-
return require('DeviceInfo');
209+
return require('NativeDeviceInfo').default;
210210
},
211211
get Dimensions() {
212212
return require('Dimensions');

RNTester/js/examples/SafeAreaView/SafeAreaViewExample.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -87,7 +87,7 @@ class IsIPhoneXExample extends React.Component<{}> {
8787
<View>
8888
<Text>
8989
Is this an iPhone X:{' '}
90-
{DeviceInfo.isIPhoneX_deprecated
90+
{DeviceInfo.getConstants().isIPhoneX_deprecated
9191
? 'Yeah!'
9292
: 'Nope. (Or `isIPhoneX_deprecated` was already removed.)'}
9393
</Text>

jest/setup.js

Lines changed: 17 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -153,19 +153,23 @@ const mockNativeModules = {
153153
queryData: jest.fn(),
154154
},
155155
DeviceInfo: {
156-
Dimensions: {
157-
window: {
158-
fontScale: 2,
159-
height: 1334,
160-
scale: 2,
161-
width: 750,
162-
},
163-
screen: {
164-
fontScale: 2,
165-
height: 1334,
166-
scale: 2,
167-
width: 750,
168-
},
156+
getConstants() {
157+
return {
158+
Dimensions: {
159+
window: {
160+
fontScale: 2,
161+
height: 1334,
162+
scale: 2,
163+
width: 750,
164+
},
165+
screen: {
166+
fontScale: 2,
167+
height: 1334,
168+
scale: 2,
169+
width: 750,
170+
},
171+
},
172+
};
169173
},
170174
},
171175
FacebookSDK: {

0 commit comments

Comments
 (0)