@applicaster/quick-brick-player 13.0.5 → 13.0.6-alpha.4390983410
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 -6
- package/src/Player/AudioLayer/AudioPlayerWrapper.tsx +25 -81
- package/src/Player/AudioLayer/Layout/DockedControls/index.tsx +86 -101
- 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 +237 -0
- package/src/Player/PlayerModal/consts/index.ts +34 -0
- package/src/Player/PlayerModal/hooks/index.ts +161 -0
- package/src/Player/PlayerModal/index.ts +3 -0
- package/src/Player/PlayerModal/styles.ts +101 -0
- package/src/Player/index.tsx +161 -105
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@applicaster/quick-brick-player",
|
|
3
|
-
"version": "13.0.
|
|
3
|
+
"version": "13.0.6-alpha.4390983410",
|
|
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": "13.0.
|
|
39
|
-
"@applicaster/quick-brick-tv-transport-controls": "13.0.
|
|
40
|
-
"@applicaster/zapp-react-native-tvos-app": "13.0.
|
|
41
|
-
"@applicaster/zapp-react-native-ui-components": "13.0.
|
|
42
|
-
"@applicaster/zapp-react-native-utils": "13.0.
|
|
38
|
+
"@applicaster/quick-brick-mobile-transport-controls": "13.0.6-alpha.4390983410",
|
|
39
|
+
"@applicaster/quick-brick-tv-transport-controls": "13.0.6-alpha.4390983410",
|
|
40
|
+
"@applicaster/zapp-react-native-tvos-app": "13.0.6-alpha.4390983410",
|
|
41
|
+
"@applicaster/zapp-react-native-ui-components": "13.0.6-alpha.4390983410",
|
|
42
|
+
"@applicaster/zapp-react-native-utils": "13.0.6-alpha.4390983410",
|
|
43
43
|
"query-string": "7.1.3",
|
|
44
44
|
"react-native-web-linear-gradient": "1.1.2",
|
|
45
45
|
"shaka-player": "4.3.5",
|
|
@@ -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,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,14 @@ 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";
|
|
28
21
|
import { getTabBarHeight } from "@applicaster/zapp-react-native-utils/reactHooks/navigation/getTabBarHeight";
|
|
22
|
+
import { useTitleSummaryOverlay } from "@applicaster/zapp-react-native-utils/appUtils/playerManager/usePlayerTitleSummaryOverlay";
|
|
23
|
+
import { usePlayerState } from "@applicaster/zapp-react-native-utils/appUtils/playerManager/usePlayerState";
|
|
24
|
+
import { useConfiguration } from "@applicaster/zapp-react-native-ui-components/Components/VideoModal/utils";
|
|
25
|
+
import { noop } from "@applicaster/zapp-react-native-utils/functionUtils";
|
|
26
|
+
import { PROGRESS_BAR_HEIGHT } from "@applicaster/zapp-react-native-ui-components/Components/VideoModal/ModalAnimation/utils";
|
|
29
27
|
|
|
30
28
|
const bottomTabBarHeight = getTabBarHeight();
|
|
31
29
|
|
|
@@ -34,13 +32,15 @@ type Props = {
|
|
|
34
32
|
layoutState: QuickBrickPlayer.LayoutState;
|
|
35
33
|
playerState: QuickBrickPlayer.PlayerState;
|
|
36
34
|
value: GetValue;
|
|
37
|
-
dimensions: QuickBrickPlayer.AudioPlayerProps["dimensions"];
|
|
38
35
|
onCloseVideoModal: () => void;
|
|
39
36
|
onPlayerSeek: (targetTime: number) => void;
|
|
40
37
|
playNextData: PlayNextData;
|
|
41
38
|
title: string | number;
|
|
42
39
|
summary: string | number;
|
|
43
40
|
ImageComponent?: React.ReactNode;
|
|
41
|
+
isActiveGesture?: boolean;
|
|
42
|
+
minimisedHeight: number;
|
|
43
|
+
aspectRatio?: number;
|
|
44
44
|
};
|
|
45
45
|
|
|
46
46
|
const styles = StyleSheet.create({
|
|
@@ -48,6 +48,7 @@ const styles = StyleSheet.create({
|
|
|
48
48
|
flex: 1,
|
|
49
49
|
flexDirection: "column",
|
|
50
50
|
alignItems: "stretch",
|
|
51
|
+
marginTop: PROGRESS_BAR_HEIGHT,
|
|
51
52
|
},
|
|
52
53
|
content: {
|
|
53
54
|
flex: 1,
|
|
@@ -99,26 +100,6 @@ const playerDimensionsStyle = (
|
|
|
99
100
|
width: addPadding ? toNumberWithDefault(100, minimisedHeight) : 0,
|
|
100
101
|
});
|
|
101
102
|
|
|
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
103
|
const controlButtons = (
|
|
123
104
|
live: boolean,
|
|
124
105
|
paused: boolean,
|
|
@@ -180,107 +161,111 @@ export const DockedControls = (props: Props) => {
|
|
|
180
161
|
const {
|
|
181
162
|
entry,
|
|
182
163
|
layoutState,
|
|
183
|
-
|
|
184
|
-
value,
|
|
185
|
-
dimensions,
|
|
186
|
-
onCloseVideoModal,
|
|
187
|
-
onPlayerSeek,
|
|
164
|
+
onPlayerSeek = noop,
|
|
188
165
|
playNextData,
|
|
189
|
-
title,
|
|
190
|
-
summary,
|
|
191
166
|
ImageComponent,
|
|
167
|
+
isActiveGesture = true,
|
|
168
|
+
aspectRatio,
|
|
192
169
|
} = props;
|
|
193
170
|
|
|
194
|
-
const
|
|
171
|
+
const onCloseVideoModal = React.useCallback(() => {
|
|
172
|
+
playerManager.close();
|
|
173
|
+
}, []);
|
|
195
174
|
|
|
196
|
-
const
|
|
175
|
+
const { minimised_height: minimisedHeight } = useConfiguration();
|
|
197
176
|
|
|
198
|
-
const
|
|
199
|
-
|
|
200
|
-
|
|
201
|
-
|
|
202
|
-
|
|
203
|
-
|
|
204
|
-
|
|
177
|
+
const configuration = useZStore("playerConfiguration")();
|
|
178
|
+
const playerState = usePlayerState("shared-player-wrapper-docked");
|
|
179
|
+
|
|
180
|
+
const getValue = (key: string, stylesObj: {}) =>
|
|
181
|
+
R.propOr(null, key, stylesObj);
|
|
182
|
+
|
|
183
|
+
const value = React.useCallback(
|
|
184
|
+
(key: string) => {
|
|
185
|
+
const retVal = getValue(key, configuration);
|
|
186
|
+
|
|
187
|
+
const minimumAllowedSeekableDurationInSeconds = getValue(
|
|
188
|
+
"minimumAllowedSeekableDurationInSeconds",
|
|
189
|
+
configuration
|
|
190
|
+
);
|
|
191
|
+
|
|
192
|
+
if (key === "liveSeekingEnabled") {
|
|
193
|
+
return playerState.seekableDuration <
|
|
194
|
+
minimumAllowedSeekableDurationInSeconds || playerManager.isCasting()
|
|
195
|
+
? false
|
|
196
|
+
: retVal;
|
|
197
|
+
}
|
|
205
198
|
|
|
206
|
-
|
|
207
|
-
|
|
208
|
-
[]
|
|
199
|
+
return retVal;
|
|
200
|
+
},
|
|
201
|
+
[...Object.values(configuration), playerState]
|
|
202
|
+
);
|
|
203
|
+
|
|
204
|
+
const { title, summary } = useTitleSummaryOverlay(
|
|
205
|
+
entry,
|
|
206
|
+
playerState?.isLive,
|
|
207
|
+
configuration?.audio_live_player_update_interval
|
|
209
208
|
);
|
|
210
209
|
|
|
210
|
+
const isTablet = useIsTablet();
|
|
211
|
+
|
|
212
|
+
const liveButton = Boolean(value("live_badge_enabled"));
|
|
213
|
+
|
|
211
214
|
const dockedBackgroundColor = value("docked_player_background_color");
|
|
212
215
|
|
|
213
216
|
const insets = useSafeAreaInsets();
|
|
214
217
|
|
|
215
|
-
if (!layoutState.docked && !startComponentsAnimation) return null;
|
|
216
|
-
|
|
217
218
|
return (
|
|
218
|
-
<
|
|
219
|
-
animationType={ComponentAnimationType.componentAppears}
|
|
219
|
+
<View
|
|
220
220
|
style={[
|
|
221
221
|
styles.container,
|
|
222
|
-
animatedContainerStyle(
|
|
223
|
-
isActiveGesture || layoutState.docked,
|
|
224
|
-
progressBarHeight
|
|
225
|
-
),
|
|
226
222
|
{
|
|
227
223
|
height: minimisedHeight + bottomTabBarHeight + insets.bottom,
|
|
228
224
|
},
|
|
229
225
|
]}
|
|
230
226
|
>
|
|
231
|
-
{!playerState.isLive
|
|
232
|
-
(layoutState.docked || startComponentsAnimation) ? (
|
|
227
|
+
{!playerState.isLive ? (
|
|
233
228
|
<ProgressBar
|
|
234
|
-
name={"
|
|
229
|
+
name={"shared-docked-layout"}
|
|
235
230
|
content={entry}
|
|
236
231
|
value={value}
|
|
237
232
|
visible
|
|
238
233
|
layoutState={layoutState}
|
|
239
234
|
onPlayerSeek={onPlayerSeek}
|
|
240
235
|
playerState={playerState}
|
|
241
|
-
startComponentsAnimation={
|
|
236
|
+
startComponentsAnimation={noop}
|
|
242
237
|
docked
|
|
243
238
|
/>
|
|
244
239
|
) : null}
|
|
245
240
|
|
|
246
241
|
<View style={styles.content}>
|
|
247
|
-
<View
|
|
248
|
-
|
|
249
|
-
|
|
250
|
-
|
|
251
|
-
isActiveGesture
|
|
252
|
-
)}
|
|
253
|
-
/>
|
|
254
|
-
<TouchableWithoutFeedback onPress={maximazeVideoModal}>
|
|
255
|
-
<View style={styles.touchableArea}>
|
|
256
|
-
{isActiveGesture || layoutState.docked ? (
|
|
257
|
-
<View
|
|
258
|
-
style={{ width: toNumberWithDefault(100, minimisedHeight) }}
|
|
259
|
-
>
|
|
260
|
-
{ImageComponent || null}
|
|
261
|
-
</View>
|
|
262
|
-
) : (
|
|
263
|
-
<View
|
|
264
|
-
style={playerDimensionsStyle(
|
|
265
|
-
minimisedHeight,
|
|
266
|
-
isActiveGesture || layoutState.docked
|
|
267
|
-
)}
|
|
268
|
-
/>
|
|
269
|
-
)}
|
|
270
|
-
<View
|
|
271
|
-
style={[
|
|
272
|
-
styles.contentInfo,
|
|
273
|
-
{ backgroundColor: dockedBackgroundColor },
|
|
274
|
-
]}
|
|
275
|
-
>
|
|
276
|
-
<ContentInfo
|
|
277
|
-
content={{ ...entry, title, summary }}
|
|
278
|
-
value={value}
|
|
279
|
-
docked
|
|
280
|
-
/>
|
|
242
|
+
<View style={styles.touchableArea}>
|
|
243
|
+
{isActiveGesture || layoutState.docked ? (
|
|
244
|
+
<View style={{ aspectRatio: aspectRatio, height: minimisedHeight }}>
|
|
245
|
+
{ImageComponent || null}
|
|
281
246
|
</View>
|
|
247
|
+
) : (
|
|
248
|
+
<View
|
|
249
|
+
style={playerDimensionsStyle(
|
|
250
|
+
minimisedHeight,
|
|
251
|
+
isActiveGesture || layoutState.docked
|
|
252
|
+
)}
|
|
253
|
+
/>
|
|
254
|
+
)}
|
|
255
|
+
<View
|
|
256
|
+
testID="content-info"
|
|
257
|
+
style={[
|
|
258
|
+
styles.contentInfo,
|
|
259
|
+
{ backgroundColor: dockedBackgroundColor },
|
|
260
|
+
]}
|
|
261
|
+
>
|
|
262
|
+
<ContentInfo
|
|
263
|
+
content={{ ...entry, title, summary }}
|
|
264
|
+
value={value}
|
|
265
|
+
docked
|
|
266
|
+
/>
|
|
282
267
|
</View>
|
|
283
|
-
</
|
|
268
|
+
</View>
|
|
284
269
|
<View
|
|
285
270
|
style={[
|
|
286
271
|
isTablet
|
|
@@ -314,6 +299,6 @@ export const DockedControls = (props: Props) => {
|
|
|
314
299
|
backgroundColor: dockedBackgroundColor,
|
|
315
300
|
}}
|
|
316
301
|
/>
|
|
317
|
-
</
|
|
302
|
+
</View>
|
|
318
303
|
);
|
|
319
304
|
};
|
|
@@ -4,7 +4,6 @@ import {
|
|
|
4
4
|
useSafeAreaFrame,
|
|
5
5
|
useSafeAreaInsets,
|
|
6
6
|
} from "react-native-safe-area-context";
|
|
7
|
-
import { useModalAnimationContext } from "@applicaster/zapp-react-native-ui-components/Components/VideoModal/ModalAnimation";
|
|
8
7
|
|
|
9
8
|
import { MOBILE, NAVBAR_HEIGHT } from "./const";
|
|
10
9
|
import { TransportInfo } from "./TransportInfo";
|
|
@@ -12,7 +11,6 @@ import { PlayerImage } from "./PlayerImage";
|
|
|
12
11
|
import { Controls } from "./Controls";
|
|
13
12
|
|
|
14
13
|
import { useMobileLayoutImageSize, useTransportInfoHeight } from "./hooks";
|
|
15
|
-
import { DockedControls } from "./DockedControls";
|
|
16
14
|
import { DEBUG, withDebug } from "./debug";
|
|
17
15
|
import {
|
|
18
16
|
BottomDebugSquare,
|
|
@@ -56,6 +54,7 @@ const mobileStyles = ({
|
|
|
56
54
|
imageSize,
|
|
57
55
|
}): ViewStyle => ({
|
|
58
56
|
height: screenHeight - topInset - bottomInset,
|
|
57
|
+
width: "100%",
|
|
59
58
|
|
|
60
59
|
opacity: imageSize ? 1 : 0, // hide content until imageSize is calculated
|
|
61
60
|
|
|
@@ -77,11 +76,8 @@ export function MobileLayout({
|
|
|
77
76
|
onSkipStart,
|
|
78
77
|
onSkipLive,
|
|
79
78
|
onSpeedButtonPress,
|
|
80
|
-
onCloseVideoModal,
|
|
81
79
|
playbackSpeedName,
|
|
82
80
|
configuration,
|
|
83
|
-
dimensions,
|
|
84
|
-
playNextData,
|
|
85
81
|
title,
|
|
86
82
|
summary,
|
|
87
83
|
}: Props) {
|
|
@@ -89,12 +85,10 @@ export function MobileLayout({
|
|
|
89
85
|
|
|
90
86
|
const { bottom: bottomInset, top: topInset } = useSafeAreaInsets();
|
|
91
87
|
const { height: screenHeight } = useSafeAreaFrame();
|
|
92
|
-
const { progressBarHeight } = useModalAnimationContext();
|
|
93
88
|
|
|
94
89
|
const { imageSize } = useMobileLayoutImageSize();
|
|
95
90
|
|
|
96
|
-
const {
|
|
97
|
-
useTransportInfoHeight();
|
|
91
|
+
const { onLayout: onTransportInfoLayout } = useTransportInfoHeight();
|
|
98
92
|
|
|
99
93
|
const controlsContainerHeight = React.useMemo(() => {
|
|
100
94
|
return (
|
|
@@ -108,10 +102,6 @@ export function MobileLayout({
|
|
|
108
102
|
);
|
|
109
103
|
}, [screenHeight, topInset, imageSize, bottomInset]);
|
|
110
104
|
|
|
111
|
-
const verticalOffsetForImage = React.useMemo(() => {
|
|
112
|
-
return transportInfoHeight + MOBILE.MARGIN_TOP - progressBarHeight;
|
|
113
|
-
}, [transportInfoHeight, progressBarHeight]);
|
|
114
|
-
|
|
115
105
|
return (
|
|
116
106
|
<View
|
|
117
107
|
style={[
|
|
@@ -163,19 +153,9 @@ export function MobileLayout({
|
|
|
163
153
|
>
|
|
164
154
|
<PlayerImage
|
|
165
155
|
entry={entry}
|
|
166
|
-
|
|
167
|
-
playerState={playerState}
|
|
168
|
-
value={value}
|
|
169
|
-
configuration={configuration}
|
|
170
|
-
onPlayerSeek={onPlayerSeek}
|
|
171
|
-
onCloseVideoModal={onCloseVideoModal}
|
|
172
|
-
dimensions={dimensions}
|
|
173
|
-
playNextData={playNextData}
|
|
174
|
-
title={title}
|
|
175
|
-
summary={summary}
|
|
176
|
-
docked={docked}
|
|
156
|
+
docked={false}
|
|
177
157
|
imageWidth={imageSize}
|
|
178
|
-
|
|
158
|
+
configuration={configuration}
|
|
179
159
|
/>
|
|
180
160
|
</View>
|
|
181
161
|
{/* PlayerImage */}
|
|
@@ -204,19 +184,6 @@ export function MobileLayout({
|
|
|
204
184
|
/>
|
|
205
185
|
</View>
|
|
206
186
|
</View>
|
|
207
|
-
|
|
208
|
-
<DockedControls
|
|
209
|
-
entry={entry}
|
|
210
|
-
layoutState={layoutState}
|
|
211
|
-
playerState={playerState}
|
|
212
|
-
value={value}
|
|
213
|
-
dimensions={dimensions}
|
|
214
|
-
onCloseVideoModal={onCloseVideoModal}
|
|
215
|
-
onPlayerSeek={onPlayerSeek}
|
|
216
|
-
playNextData={playNextData}
|
|
217
|
-
title={title}
|
|
218
|
-
summary={summary}
|
|
219
|
-
/>
|
|
220
187
|
</View>
|
|
221
188
|
);
|
|
222
189
|
}
|