@applicaster/quick-brick-player 14.0.0-alpha.3038031102 → 14.0.0-alpha.3065652724
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/package.json +6 -8
- package/src/Player/AudioLayer/AudioPlayerWrapper.tsx +25 -81
- package/src/Player/AudioLayer/Layout/Controls/index.tsx +8 -18
- package/src/Player/AudioLayer/Layout/DockedControls/index.tsx +119 -119
- package/src/Player/AudioLayer/Layout/MobileLayout.tsx +4 -37
- package/src/Player/AudioLayer/Layout/PlayerImage/index.tsx +22 -72
- package/src/Player/AudioLayer/Layout/TabletLandscapeLayout.tsx +1 -58
- package/src/Player/AudioLayer/Layout/TabletPortraitLayout.tsx +0 -33
- package/src/Player/AudioLayer/Layout/TransportInfo/index.tsx +3 -9
- package/src/Player/PlayerModal/GestureAnimatedScrollView.ts +7 -0
- package/src/Player/PlayerModal/PlayerModal.tsx +109 -0
- package/src/Player/PlayerModal/VideoPlayerModal.tsx +271 -0
- package/src/Player/PlayerModal/consts/index.ts +34 -0
- package/src/Player/PlayerModal/context/index.ts +6 -0
- package/src/Player/PlayerModal/hooks/index.ts +193 -0
- package/src/Player/PlayerModal/index.ts +3 -0
- package/src/Player/PlayerModal/index.web.ts +5 -0
- package/src/Player/PlayerModal/styles.ts +104 -0
- package/src/Player/index.tsx +156 -107
- package/src/QuickBrickPlayer.tsx +16 -10
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@applicaster/quick-brick-player",
|
|
3
|
-
"version": "14.0.0-alpha.
|
|
3
|
+
"version": "14.0.0-alpha.3065652724",
|
|
4
4
|
"description": "Quick Brick Player",
|
|
5
5
|
"main": "./src/index.ts",
|
|
6
6
|
"types": "index.d.ts",
|
|
@@ -35,11 +35,11 @@
|
|
|
35
35
|
},
|
|
36
36
|
"homepage": "https://github.com/applicaster/quickbrick#readme",
|
|
37
37
|
"dependencies": {
|
|
38
|
-
"@applicaster/quick-brick-mobile-transport-controls": "14.0.0-
|
|
39
|
-
"@applicaster/quick-brick-tv-transport-controls": "14.0.0-rc.
|
|
40
|
-
"@applicaster/zapp-react-native-tvos-app": "14.0.0-alpha.
|
|
41
|
-
"@applicaster/zapp-react-native-ui-components": "14.0.0-alpha.
|
|
42
|
-
"@applicaster/zapp-react-native-utils": "14.0.0-alpha.
|
|
38
|
+
"@applicaster/quick-brick-mobile-transport-controls": "14.0.0-rc.67",
|
|
39
|
+
"@applicaster/quick-brick-tv-transport-controls": "14.0.0-rc.65",
|
|
40
|
+
"@applicaster/zapp-react-native-tvos-app": "14.0.0-alpha.3065652724",
|
|
41
|
+
"@applicaster/zapp-react-native-ui-components": "14.0.0-alpha.3065652724",
|
|
42
|
+
"@applicaster/zapp-react-native-utils": "14.0.0-alpha.3065652724",
|
|
43
43
|
"query-string": "7.1.3",
|
|
44
44
|
"shaka-player": "4.3.5",
|
|
45
45
|
"typeface-montserrat": "^0.0.54",
|
|
@@ -57,12 +57,10 @@
|
|
|
57
57
|
"@applicaster/zapp-react-native-tvos-ui-components": "*",
|
|
58
58
|
"@babel/runtime": "*",
|
|
59
59
|
"@react-native-community/netinfo": "*",
|
|
60
|
-
"immer": "*",
|
|
61
60
|
"react": "*",
|
|
62
61
|
"react-native": "*",
|
|
63
62
|
"react-native-fs": "*",
|
|
64
63
|
"react-native-linear-gradient": "*",
|
|
65
|
-
"react-native-safe-area-context": "*",
|
|
66
64
|
"react-native-svg": "*",
|
|
67
65
|
"react-native-webview": "*",
|
|
68
66
|
"uglify-js": "*",
|
|
@@ -1,11 +1,6 @@
|
|
|
1
1
|
import * as React from "react";
|
|
2
2
|
import { useEffect, useState } from "react";
|
|
3
|
-
import {
|
|
4
|
-
Dimensions as ScreenDimensions,
|
|
5
|
-
StyleSheet,
|
|
6
|
-
View,
|
|
7
|
-
ViewStyle,
|
|
8
|
-
} from "react-native";
|
|
3
|
+
import { StyleSheet, View, ViewStyle } from "react-native";
|
|
9
4
|
|
|
10
5
|
import { Edge, SafeAreaView } from "react-native-safe-area-context";
|
|
11
6
|
import { usePlayerState } from "@applicaster/zapp-react-native-utils/appUtils/playerManager/usePlayerState";
|
|
@@ -13,14 +8,9 @@ import { usePlayer } from "@applicaster/zapp-react-native-utils/appUtils/playerM
|
|
|
13
8
|
import * as R from "ramda";
|
|
14
9
|
import { playerManager } from "@applicaster/zapp-react-native-utils/appUtils";
|
|
15
10
|
import Layout from "./Layout";
|
|
16
|
-
import {
|
|
17
|
-
useIsTablet,
|
|
18
|
-
useNavigation,
|
|
19
|
-
} from "@applicaster/zapp-react-native-utils/reactHooks";
|
|
11
|
+
import { useNavigation } from "@applicaster/zapp-react-native-utils/reactHooks";
|
|
20
12
|
import { createLogger } from "@applicaster/zapp-react-native-utils/logger";
|
|
21
13
|
import { PlayNextData } from "@applicaster/zapp-react-native-ui-components/Components/PlayerContainer/PlayerContainer";
|
|
22
|
-
import { PlayerDetails } from "@applicaster/zapp-react-native-ui-components/Components/VideoModal/PlayerDetails";
|
|
23
|
-
import { isTV } from "@applicaster/zapp-react-native-utils/reactUtils";
|
|
24
14
|
import { formatSpeed } from "./utils";
|
|
25
15
|
import {
|
|
26
16
|
getBottomSheetModalDefaultItemIcon,
|
|
@@ -30,12 +20,7 @@ import {
|
|
|
30
20
|
getBottomSheetModalSelectedItemIcon,
|
|
31
21
|
} from "../Utils";
|
|
32
22
|
import { useTitleSummaryOverlay } from "@applicaster/zapp-react-native-utils/appUtils/playerManager/usePlayerTitleSummaryOverlay";
|
|
33
|
-
|
|
34
|
-
AnimatedScrollModal,
|
|
35
|
-
AnimationComponent,
|
|
36
|
-
ComponentAnimationType,
|
|
37
|
-
} from "@applicaster/zapp-react-native-ui-components/Components/VideoModal/ModalAnimation";
|
|
38
|
-
import { PADDING_HORIZONTAL } from "./Layout/const";
|
|
23
|
+
|
|
39
24
|
import { toNumberWithDefault } from "@applicaster/zapp-react-native-utils/numberUtils";
|
|
40
25
|
|
|
41
26
|
import { DEFAULT_SPEED, PlaybackSpeed, SpeedController } from "./SpeedManager";
|
|
@@ -81,18 +66,10 @@ type Props = {
|
|
|
81
66
|
isTabletPortrait?: boolean;
|
|
82
67
|
};
|
|
83
68
|
|
|
84
|
-
const { width: SCREEN_WIDTH } = ScreenDimensions.get("screen");
|
|
85
|
-
|
|
86
69
|
const Styles = StyleSheet.create({
|
|
87
70
|
playerContainer: {
|
|
88
71
|
flex: 1,
|
|
89
72
|
},
|
|
90
|
-
paddingHorizontal: { paddingTop: 0, paddingHorizontal: PADDING_HORIZONTAL },
|
|
91
|
-
playerDetails: {
|
|
92
|
-
marginTop: 60,
|
|
93
|
-
alignSelf: "center",
|
|
94
|
-
width: SCREEN_WIDTH - PADDING_HORIZONTAL * 2,
|
|
95
|
-
},
|
|
96
73
|
});
|
|
97
74
|
|
|
98
75
|
const edges: Edge[] = ["right", "left", "top"];
|
|
@@ -107,16 +84,10 @@ export const AudioPlayerWrapper: React.FC<Props> = (props: Props) => {
|
|
|
107
84
|
configuration,
|
|
108
85
|
style,
|
|
109
86
|
entry,
|
|
110
|
-
children,
|
|
111
87
|
layoutState,
|
|
112
88
|
playNextData = null,
|
|
113
|
-
isTabletPortrait,
|
|
114
89
|
} = props;
|
|
115
90
|
|
|
116
|
-
const isTablet = useIsTablet();
|
|
117
|
-
|
|
118
|
-
const isTabletLandscape = !isTV() && isTablet && !isTabletPortrait;
|
|
119
|
-
|
|
120
91
|
const { title, summary } = useTitleSummaryOverlay(
|
|
121
92
|
entry,
|
|
122
93
|
playerState?.isLive,
|
|
@@ -264,10 +235,6 @@ export const AudioPlayerWrapper: React.FC<Props> = (props: Props) => {
|
|
|
264
235
|
});
|
|
265
236
|
}, [playbackSpeed, onSpeedSelect, configuration["playback_speed_title"]]);
|
|
266
237
|
|
|
267
|
-
const onCloseVideoModal = React.useCallback(() => {
|
|
268
|
-
playerManager.close();
|
|
269
|
-
}, [playerManager]);
|
|
270
|
-
|
|
271
238
|
const onPlayerSeek = React.useCallback(
|
|
272
239
|
(targetTime: number) => {
|
|
273
240
|
player?.seekTo(targetTime);
|
|
@@ -285,51 +252,28 @@ export const AudioPlayerWrapper: React.FC<Props> = (props: Props) => {
|
|
|
285
252
|
|
|
286
253
|
return (
|
|
287
254
|
<SafeAreaView style={[style, Styles.playerContainer]} edges={edges}>
|
|
288
|
-
<
|
|
289
|
-
|
|
290
|
-
|
|
291
|
-
|
|
292
|
-
|
|
293
|
-
|
|
294
|
-
|
|
295
|
-
|
|
296
|
-
|
|
297
|
-
|
|
298
|
-
|
|
299
|
-
|
|
300
|
-
|
|
301
|
-
|
|
302
|
-
|
|
303
|
-
|
|
304
|
-
|
|
305
|
-
|
|
306
|
-
|
|
307
|
-
|
|
308
|
-
|
|
309
|
-
|
|
310
|
-
configuration={configuration}
|
|
311
|
-
dimensions={dimensions}
|
|
312
|
-
playNextData={playNextData}
|
|
313
|
-
title={title}
|
|
314
|
-
summary={summary}
|
|
315
|
-
/>
|
|
316
|
-
<View style={Styles.paddingHorizontal}>
|
|
317
|
-
{children}
|
|
318
|
-
<AnimationComponent
|
|
319
|
-
animationType={ComponentAnimationType.componentFade}
|
|
320
|
-
>
|
|
321
|
-
<PlayerDetails
|
|
322
|
-
isAudioPlayer
|
|
323
|
-
configuration={configuration}
|
|
324
|
-
style={Styles.playerDetails}
|
|
325
|
-
entry={entry}
|
|
326
|
-
isTabletLandscape={isTabletLandscape}
|
|
327
|
-
/>
|
|
328
|
-
</AnimationComponent>
|
|
329
|
-
</View>
|
|
330
|
-
</View>
|
|
331
|
-
</AnimatedScrollModal>
|
|
332
|
-
</AnimationComponent>
|
|
255
|
+
<View style={Styles.playerContainer} onLayout={onLayout}>
|
|
256
|
+
<Layout
|
|
257
|
+
entry={entry}
|
|
258
|
+
playerState={playerState}
|
|
259
|
+
layoutState={layoutState}
|
|
260
|
+
value={value}
|
|
261
|
+
onPlaybackButtonPress={onPlaybackButtonPress}
|
|
262
|
+
onRewindButtonPress={onRewindButtonPress}
|
|
263
|
+
onForwardButtonPress={onForwardButtonPress}
|
|
264
|
+
onPlayerSeek={onPlayerSeek}
|
|
265
|
+
onSkipStart={onSkipStart}
|
|
266
|
+
onSpeedButtonPress={onSpeedButtonPress}
|
|
267
|
+
playbackSpeedName={formatSpeed(playbackSpeed.value)}
|
|
268
|
+
onSkipLive={onSkipLive}
|
|
269
|
+
maximiseVideoModal={maximiseVideoModal}
|
|
270
|
+
configuration={configuration}
|
|
271
|
+
dimensions={dimensions}
|
|
272
|
+
playNextData={playNextData}
|
|
273
|
+
title={title}
|
|
274
|
+
summary={summary}
|
|
275
|
+
/>
|
|
276
|
+
</View>
|
|
333
277
|
</SafeAreaView>
|
|
334
278
|
);
|
|
335
279
|
};
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
import * as React from "react";
|
|
2
|
-
import { StyleSheet } from "react-native";
|
|
2
|
+
import { StyleSheet, View } from "react-native";
|
|
3
3
|
|
|
4
4
|
import { dayjs } from "@applicaster/zapp-react-native-utils/dateUtils";
|
|
5
5
|
import {
|
|
@@ -12,11 +12,6 @@ import {
|
|
|
12
12
|
} from "@applicaster/quick-brick-mobile-transport-controls";
|
|
13
13
|
import { playerManager } from "@applicaster/zapp-react-native-utils/appUtils";
|
|
14
14
|
|
|
15
|
-
import {
|
|
16
|
-
AnimationComponent,
|
|
17
|
-
ComponentAnimationType,
|
|
18
|
-
} from "@applicaster/zapp-react-native-ui-components/Components/VideoModal/ModalAnimation";
|
|
19
|
-
|
|
20
15
|
import { AudioDescription } from "../../AudioDescription";
|
|
21
16
|
import { isValidDate } from "../../../Utils";
|
|
22
17
|
import { VerticalGutter } from "./VerticalGutter";
|
|
@@ -103,8 +98,6 @@ export const Controls = (props: Props) => {
|
|
|
103
98
|
onSkipLive,
|
|
104
99
|
onSpeedButtonPress,
|
|
105
100
|
maxWidth = 320,
|
|
106
|
-
|
|
107
|
-
docked,
|
|
108
101
|
} = props;
|
|
109
102
|
|
|
110
103
|
const configuration = useZStore("playerConfiguration");
|
|
@@ -229,15 +222,8 @@ export const Controls = (props: Props) => {
|
|
|
229
222
|
isLiveShowFullControls,
|
|
230
223
|
]);
|
|
231
224
|
|
|
232
|
-
if (docked) {
|
|
233
|
-
return null;
|
|
234
|
-
}
|
|
235
|
-
|
|
236
225
|
return (
|
|
237
|
-
<
|
|
238
|
-
animationType={ComponentAnimationType.componentFade}
|
|
239
|
-
style={isTablet ? styles.nonFlex : styles.flex}
|
|
240
|
-
>
|
|
226
|
+
<View style={isTablet ? styles.nonFlex : styles.flex}>
|
|
241
227
|
<VerticalGutter />
|
|
242
228
|
|
|
243
229
|
<AudioDescription
|
|
@@ -257,7 +243,11 @@ export const Controls = (props: Props) => {
|
|
|
257
243
|
content={entry}
|
|
258
244
|
value={value}
|
|
259
245
|
visible
|
|
260
|
-
layoutState={
|
|
246
|
+
layoutState={{
|
|
247
|
+
...layoutState,
|
|
248
|
+
docked: false, // always use non-docked layout for audio (to show time labels
|
|
249
|
+
inline: true, // always use inline layout for audio (to show time labels)
|
|
250
|
+
}}
|
|
261
251
|
onPlayerSeek={onPlayerSeek}
|
|
262
252
|
playerState={playerState}
|
|
263
253
|
disableFullscreen
|
|
@@ -286,6 +276,6 @@ export const Controls = (props: Props) => {
|
|
|
286
276
|
}}
|
|
287
277
|
playerState={playerState}
|
|
288
278
|
/>
|
|
289
|
-
</
|
|
279
|
+
</View>
|
|
290
280
|
);
|
|
291
281
|
};
|
|
@@ -1,12 +1,11 @@
|
|
|
1
1
|
import * as React from "react";
|
|
2
|
-
import {
|
|
3
|
-
StyleSheet,
|
|
4
|
-
TouchableWithoutFeedback,
|
|
5
|
-
View,
|
|
6
|
-
ViewStyle,
|
|
7
|
-
} from "react-native";
|
|
2
|
+
import { StyleSheet, View, ViewStyle } from "react-native";
|
|
8
3
|
import * as R from "ramda";
|
|
9
|
-
import {
|
|
4
|
+
import {
|
|
5
|
+
useIsTablet,
|
|
6
|
+
useZStore,
|
|
7
|
+
} from "@applicaster/zapp-react-native-utils/reactHooks";
|
|
8
|
+
import { playerManager } from "@applicaster/zapp-react-native-utils/appUtils";
|
|
10
9
|
|
|
11
10
|
import {
|
|
12
11
|
Button,
|
|
@@ -17,15 +16,17 @@ import {
|
|
|
17
16
|
|
|
18
17
|
import { PlayNextData } from "@applicaster/zapp-react-native-ui-components/Components/PlayerContainer/PlayerContainer";
|
|
19
18
|
|
|
20
|
-
import {
|
|
21
|
-
AnimationComponent,
|
|
22
|
-
ComponentAnimationType,
|
|
23
|
-
PlayerAnimationStateEnum,
|
|
24
|
-
useModalAnimationContext,
|
|
25
|
-
} from "@applicaster/zapp-react-native-ui-components/Components/VideoModal/ModalAnimation";
|
|
26
19
|
import { toNumberWithDefault } from "@applicaster/zapp-react-native-utils/numberUtils";
|
|
27
20
|
import { useSafeAreaInsets } from "react-native-safe-area-context";
|
|
21
|
+
import { useNavigation } from "@applicaster/zapp-react-native-utils/reactHooks/navigation/useNavigation";
|
|
28
22
|
import { getTabBarHeight } from "@applicaster/zapp-react-native-utils/reactHooks/navigation/getTabBarHeight";
|
|
23
|
+
import { useTitleSummaryOverlay } from "@applicaster/zapp-react-native-utils/appUtils/playerManager/usePlayerTitleSummaryOverlay";
|
|
24
|
+
import { usePlayerState } from "@applicaster/zapp-react-native-utils/appUtils/playerManager/usePlayerState";
|
|
25
|
+
import { useConfiguration } from "@applicaster/zapp-react-native-ui-components/Components/VideoModal/utils";
|
|
26
|
+
import { noop } from "@applicaster/zapp-react-native-utils/functionUtils";
|
|
27
|
+
import { PROGRESS_BAR_HEIGHT } from "@applicaster/zapp-react-native-ui-components/Components/VideoModal/ModalAnimation/utils";
|
|
28
|
+
import { isMenuVisible } from "@applicaster/zapp-react-native-ui-components/Components/Screen/navigationHandler";
|
|
29
|
+
import { usePlugins } from "@applicaster/zapp-react-native-redux";
|
|
29
30
|
|
|
30
31
|
const bottomTabBarHeight = getTabBarHeight();
|
|
31
32
|
|
|
@@ -34,13 +35,15 @@ type Props = {
|
|
|
34
35
|
layoutState: QuickBrickPlayer.LayoutState;
|
|
35
36
|
playerState: QuickBrickPlayer.PlayerState;
|
|
36
37
|
value: GetValue;
|
|
37
|
-
dimensions: QuickBrickPlayer.AudioPlayerProps["dimensions"];
|
|
38
38
|
onCloseVideoModal: () => void;
|
|
39
39
|
onPlayerSeek: (targetTime: number) => void;
|
|
40
40
|
playNextData: PlayNextData;
|
|
41
41
|
title: string | number;
|
|
42
42
|
summary: string | number;
|
|
43
43
|
ImageComponent?: React.ReactNode;
|
|
44
|
+
isActiveGesture?: boolean;
|
|
45
|
+
minimisedHeight: number;
|
|
46
|
+
aspectRatio?: number;
|
|
44
47
|
};
|
|
45
48
|
|
|
46
49
|
const styles = StyleSheet.create({
|
|
@@ -48,6 +51,7 @@ const styles = StyleSheet.create({
|
|
|
48
51
|
flex: 1,
|
|
49
52
|
flexDirection: "column",
|
|
50
53
|
alignItems: "stretch",
|
|
54
|
+
marginTop: PROGRESS_BAR_HEIGHT,
|
|
51
55
|
},
|
|
52
56
|
content: {
|
|
53
57
|
flex: 1,
|
|
@@ -99,26 +103,6 @@ const playerDimensionsStyle = (
|
|
|
99
103
|
width: addPadding ? toNumberWithDefault(100, minimisedHeight) : 0,
|
|
100
104
|
});
|
|
101
105
|
|
|
102
|
-
const animatedContainerStyle = (
|
|
103
|
-
docked: boolean,
|
|
104
|
-
progressBarHeight: number
|
|
105
|
-
): ViewStyle => ({
|
|
106
|
-
top: progressBarHeight,
|
|
107
|
-
position: "absolute",
|
|
108
|
-
width: "100%",
|
|
109
|
-
zIndex: docked ? 1 : -1,
|
|
110
|
-
});
|
|
111
|
-
|
|
112
|
-
const backgroundImageStyle = (
|
|
113
|
-
dimensions: QuickBrickPlayer.AudioPlayerProps["dimensions"],
|
|
114
|
-
minimisedHeight: number,
|
|
115
|
-
isActiveGesture: boolean
|
|
116
|
-
): ViewStyle => ({
|
|
117
|
-
height: isActiveGesture ? minimisedHeight : dimensions.height,
|
|
118
|
-
aspectRatio: 1,
|
|
119
|
-
position: "absolute",
|
|
120
|
-
});
|
|
121
|
-
|
|
122
106
|
const controlButtons = (
|
|
123
107
|
live: boolean,
|
|
124
108
|
paused: boolean,
|
|
@@ -180,82 +164,97 @@ export const DockedControls = (props: Props) => {
|
|
|
180
164
|
const {
|
|
181
165
|
entry,
|
|
182
166
|
layoutState,
|
|
183
|
-
|
|
184
|
-
value,
|
|
185
|
-
dimensions,
|
|
186
|
-
onCloseVideoModal,
|
|
187
|
-
onPlayerSeek,
|
|
167
|
+
onPlayerSeek = noop,
|
|
188
168
|
playNextData,
|
|
189
|
-
title,
|
|
190
|
-
summary,
|
|
191
169
|
ImageComponent,
|
|
170
|
+
isActiveGesture = true,
|
|
171
|
+
aspectRatio,
|
|
192
172
|
} = props;
|
|
193
173
|
|
|
194
|
-
const
|
|
174
|
+
const onCloseVideoModal = React.useCallback(() => {
|
|
175
|
+
playerManager.close();
|
|
176
|
+
}, []);
|
|
195
177
|
|
|
196
|
-
const
|
|
178
|
+
const { currentRoute, screenData } = useNavigation();
|
|
197
179
|
|
|
198
|
-
const
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
minimisedHeight,
|
|
203
|
-
progressBarHeight,
|
|
204
|
-
} = useModalAnimationContext();
|
|
180
|
+
const plugins = usePlugins();
|
|
181
|
+
const menuVisible = isMenuVisible(currentRoute, screenData, plugins);
|
|
182
|
+
|
|
183
|
+
const { minimised_height: minimisedHeight } = useConfiguration();
|
|
205
184
|
|
|
206
|
-
const
|
|
207
|
-
|
|
185
|
+
const configuration = useZStore("playerConfiguration")();
|
|
186
|
+
const playerState = usePlayerState("shared-player-wrapper-docked");
|
|
187
|
+
|
|
188
|
+
const getValue = React.useCallback(
|
|
189
|
+
(key: string, stylesObj: {}) => R.propOr(null, key, stylesObj),
|
|
208
190
|
[]
|
|
209
191
|
);
|
|
210
192
|
|
|
193
|
+
const value = React.useCallback(
|
|
194
|
+
(key: string) => {
|
|
195
|
+
const retVal = getValue(key, configuration);
|
|
196
|
+
|
|
197
|
+
const minimumAllowedSeekableDurationInSeconds = getValue(
|
|
198
|
+
"minimumAllowedSeekableDurationInSeconds",
|
|
199
|
+
configuration
|
|
200
|
+
);
|
|
201
|
+
|
|
202
|
+
if (key === "liveSeekingEnabled") {
|
|
203
|
+
return playerState.seekableDuration <
|
|
204
|
+
minimumAllowedSeekableDurationInSeconds || playerManager.isCasting()
|
|
205
|
+
? false
|
|
206
|
+
: retVal;
|
|
207
|
+
}
|
|
208
|
+
|
|
209
|
+
return retVal;
|
|
210
|
+
},
|
|
211
|
+
[...Object.values(configuration), playerState.seekableDuration, getValue]
|
|
212
|
+
);
|
|
213
|
+
|
|
214
|
+
const { title, summary } = useTitleSummaryOverlay(
|
|
215
|
+
entry,
|
|
216
|
+
playerState?.isLive,
|
|
217
|
+
configuration?.audio_live_player_update_interval
|
|
218
|
+
);
|
|
219
|
+
|
|
220
|
+
const isTablet = useIsTablet();
|
|
221
|
+
|
|
222
|
+
const liveButton = Boolean(value("live_badge_enabled"));
|
|
223
|
+
|
|
211
224
|
const dockedBackgroundColor = value("docked_player_background_color");
|
|
212
225
|
|
|
213
226
|
const insets = useSafeAreaInsets();
|
|
214
227
|
|
|
215
|
-
if (!layoutState.docked && !startComponentsAnimation) return null;
|
|
216
|
-
|
|
217
228
|
return (
|
|
218
|
-
|
|
219
|
-
|
|
220
|
-
|
|
221
|
-
|
|
222
|
-
|
|
223
|
-
|
|
224
|
-
|
|
225
|
-
|
|
226
|
-
|
|
227
|
-
|
|
228
|
-
|
|
229
|
-
|
|
230
|
-
|
|
231
|
-
|
|
232
|
-
|
|
233
|
-
|
|
234
|
-
|
|
235
|
-
|
|
236
|
-
|
|
237
|
-
|
|
238
|
-
|
|
239
|
-
|
|
240
|
-
|
|
241
|
-
startComponentsAnimation={startComponentsAnimation}
|
|
242
|
-
docked
|
|
243
|
-
/>
|
|
244
|
-
) : null}
|
|
229
|
+
<>
|
|
230
|
+
<View
|
|
231
|
+
style={[
|
|
232
|
+
styles.container,
|
|
233
|
+
{
|
|
234
|
+
height: minimisedHeight,
|
|
235
|
+
maxHeight: minimisedHeight,
|
|
236
|
+
},
|
|
237
|
+
]}
|
|
238
|
+
>
|
|
239
|
+
{!playerState.isLive ? (
|
|
240
|
+
<ProgressBar
|
|
241
|
+
name={"shared-docked-layout"}
|
|
242
|
+
content={entry}
|
|
243
|
+
value={value}
|
|
244
|
+
visible
|
|
245
|
+
layoutState={layoutState}
|
|
246
|
+
onPlayerSeek={onPlayerSeek}
|
|
247
|
+
playerState={playerState}
|
|
248
|
+
startComponentsAnimation={noop}
|
|
249
|
+
docked
|
|
250
|
+
/>
|
|
251
|
+
) : null}
|
|
245
252
|
|
|
246
|
-
|
|
247
|
-
<View
|
|
248
|
-
style={backgroundImageStyle(
|
|
249
|
-
dimensions,
|
|
250
|
-
minimisedHeight,
|
|
251
|
-
isActiveGesture
|
|
252
|
-
)}
|
|
253
|
-
/>
|
|
254
|
-
<TouchableWithoutFeedback onPress={maximazeVideoModal}>
|
|
253
|
+
<View style={styles.content}>
|
|
255
254
|
<View style={styles.touchableArea}>
|
|
256
255
|
{isActiveGesture || layoutState.docked ? (
|
|
257
256
|
<View
|
|
258
|
-
style={{
|
|
257
|
+
style={{ aspectRatio: aspectRatio, height: minimisedHeight }}
|
|
259
258
|
>
|
|
260
259
|
{ImageComponent || null}
|
|
261
260
|
</View>
|
|
@@ -268,6 +267,7 @@ export const DockedControls = (props: Props) => {
|
|
|
268
267
|
/>
|
|
269
268
|
)}
|
|
270
269
|
<View
|
|
270
|
+
testID="content-info"
|
|
271
271
|
style={[
|
|
272
272
|
styles.contentInfo,
|
|
273
273
|
{ backgroundColor: dockedBackgroundColor },
|
|
@@ -280,40 +280,40 @@ export const DockedControls = (props: Props) => {
|
|
|
280
280
|
/>
|
|
281
281
|
</View>
|
|
282
282
|
</View>
|
|
283
|
-
|
|
284
|
-
|
|
285
|
-
|
|
286
|
-
|
|
287
|
-
|
|
288
|
-
:
|
|
289
|
-
|
|
290
|
-
|
|
291
|
-
|
|
292
|
-
|
|
293
|
-
|
|
294
|
-
|
|
295
|
-
|
|
296
|
-
|
|
297
|
-
|
|
298
|
-
|
|
299
|
-
|
|
300
|
-
|
|
301
|
-
|
|
302
|
-
|
|
303
|
-
|
|
304
|
-
|
|
305
|
-
|
|
306
|
-
|
|
307
|
-
|
|
308
|
-
|
|
283
|
+
<View
|
|
284
|
+
style={[
|
|
285
|
+
isTablet
|
|
286
|
+
? styles.controlsContainerForTablet
|
|
287
|
+
: styles.controlsContainerForMobile,
|
|
288
|
+
{ backgroundColor: dockedBackgroundColor },
|
|
289
|
+
]}
|
|
290
|
+
>
|
|
291
|
+
<Controls
|
|
292
|
+
value={value}
|
|
293
|
+
visible
|
|
294
|
+
buttons={R.partial(controlButtons, [
|
|
295
|
+
playerState.isLive && liveButton,
|
|
296
|
+
])}
|
|
297
|
+
style={styles.playPauseButton}
|
|
298
|
+
playNextData={playNextData}
|
|
299
|
+
playerState={playerState}
|
|
300
|
+
/>
|
|
301
|
+
<Button
|
|
302
|
+
icon={"close_mini"}
|
|
303
|
+
size={"medium"}
|
|
304
|
+
value={value}
|
|
305
|
+
onPress={onCloseVideoModal}
|
|
306
|
+
style={styles.buttons}
|
|
307
|
+
/>
|
|
308
|
+
</View>
|
|
309
309
|
</View>
|
|
310
310
|
</View>
|
|
311
311
|
<View
|
|
312
312
|
style={{
|
|
313
|
-
height: insets.bottom + bottomTabBarHeight,
|
|
313
|
+
height: insets.bottom + (menuVisible ? bottomTabBarHeight : 0),
|
|
314
314
|
backgroundColor: dockedBackgroundColor,
|
|
315
315
|
}}
|
|
316
316
|
/>
|
|
317
|
-
|
|
317
|
+
</>
|
|
318
318
|
);
|
|
319
319
|
};
|