-
Notifications
You must be signed in to change notification settings - Fork 1
/
Copy pathdevice.js
90 lines (67 loc) · 1.82 KB
/
device.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
import {
Dimensions,
PixelRatio,
StatusBar
} from 'react-native'
import {
_min,
_max,
_processor,
_select,
isIos,
isPad,
isTVOS
} from './utils'
const pixelRatio = PixelRatio.get()
const _getDimensions = () => Dimensions.get('window')
const _originalWindow = () => {
const { width, height } = _getDimensions()
return {
originalWidth: _min(width, height),
originalHeight: _max(width, height)
}
}
const { originalWidth, originalHeight } = _originalWindow()
const _isIPhoneX = () => {
const height = originalHeight
const isIPhoneXHeight = (height === 812 || height === 896)
const isIPhoneX = isIos && !isPad && !isTVOS && isIPhoneXHeight
return isIPhoneX
}
const isIPhoneX = _isIPhoneX()
const ifIPhoneX = (iphoneX, ios={}, android={}) => {
const [iphoneXStyle, iosStyle, androidStyle] = _processor(iphoneX, ios, android)
return _select({
ios: isIPhoneX ? iphoneXStyle : iosStyle,
android: androidStyle
})
}
const isHorizontal = () => {
const { width, height } = _getDimensions()
return width > height
}
const ifHorizontal = (horizontal, vertical) => {
const [ horizontalStyle, verticalStyle ] = _processor(horizontal, vertical)
if (isHorizontal()) return horizontalStyle
return verticalStyle
}
const deviceWidth = () => _getDimensions().width
const deviceHeight = () => _getDimensions().height
const getStatusBarHeight = safe => _select({
ios: ifIPhoneX(ifHorizontal(0, safe ? 44 : 30), 20),
android: StatusBar.currentHeight
})
const getBottomSpace = () => isIPhoneX ? ifHorizontal(21, 34) : 0
export {
pixelRatio,
originalWidth,
originalHeight,
deviceWidth,
deviceHeight,
isIPhoneX,
ifIPhoneX,
isHorizontal,
ifHorizontal,
getStatusBarHeight,
getBottomSpace
}