@applicaster/zapp-react-dom-app 13.0.0-alpha.7210171818 → 13.0.0-alpha.9433330286
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/App/InteractionManager/index.tsx +27 -67
- package/App/Loader/utils/platform.js +46 -26
- package/package.json +6 -6
|
@@ -23,6 +23,8 @@ import {
|
|
|
23
23
|
|
|
24
24
|
import { showConfirmationDialog } from "@applicaster/zapp-react-native-utils/alertUtils";
|
|
25
25
|
|
|
26
|
+
import { withUseSeek } from "@applicaster/zapp-react-native-utils/reactHooks/player";
|
|
27
|
+
|
|
26
28
|
import {
|
|
27
29
|
DISPLAY_STATES,
|
|
28
30
|
DisplayStateContext,
|
|
@@ -46,7 +48,6 @@ import {
|
|
|
46
48
|
|
|
47
49
|
import { OnScreenKeyboard } from "@applicaster/zapp-react-dom-ui-components/Components/OnScreenKeyboard";
|
|
48
50
|
import { KeyboardLongPressManager } from "@applicaster/zapp-react-dom-ui-components/Utils/KeyboardLongPressManager";
|
|
49
|
-
import { KeyInputHandler } from "@applicaster/zapp-react-native-utils/appUtils/keyInputHandler/KeyInputHandler";
|
|
50
51
|
|
|
51
52
|
const { withXray } = getXray();
|
|
52
53
|
const globalAny: any = global;
|
|
@@ -61,6 +62,14 @@ type Props = {
|
|
|
61
62
|
navigator: QuickBrickAppNavigator;
|
|
62
63
|
rivers: {};
|
|
63
64
|
xray: XRayContext;
|
|
65
|
+
seekMethods: {
|
|
66
|
+
onRewindPress: () => void;
|
|
67
|
+
onRewindLongPress: () => void;
|
|
68
|
+
onForwardPress: () => void;
|
|
69
|
+
onForwardLongPress: () => void;
|
|
70
|
+
onRewindPressOut: () => void;
|
|
71
|
+
onForwardPressOut: () => void;
|
|
72
|
+
};
|
|
64
73
|
confirmDialog: typeof confirmationDialogStore;
|
|
65
74
|
};
|
|
66
75
|
|
|
@@ -172,11 +181,6 @@ class InteractionManagerClass extends React.Component<Props, State> {
|
|
|
172
181
|
|
|
173
182
|
window.addEventListener("onLongPress", this.handleLongPress.bind(this));
|
|
174
183
|
|
|
175
|
-
window.addEventListener(
|
|
176
|
-
"onPressRelease",
|
|
177
|
-
this.handleLongPressRelease.bind(this)
|
|
178
|
-
);
|
|
179
|
-
|
|
180
184
|
window.addEventListener(
|
|
181
185
|
"onLongPressRelease",
|
|
182
186
|
this.handleLongPressRelease.bind(this)
|
|
@@ -335,39 +339,12 @@ class InteractionManagerClass extends React.Component<Props, State> {
|
|
|
335
339
|
}
|
|
336
340
|
|
|
337
341
|
onKeyUp(event: KeyboardEvent) {
|
|
338
|
-
const { setDisplayState } = this.props;
|
|
339
|
-
|
|
340
342
|
if (this.keySupportsLongPress(event)) {
|
|
341
343
|
this.longPressDetector.endKeyPressMonitoring(event.code);
|
|
342
344
|
}
|
|
343
|
-
|
|
344
|
-
if (keyCode(event).matches(KEYS.Enter) || keyCode(event).matches(KEYS.X)) {
|
|
345
|
-
focusManager.pressOut();
|
|
346
|
-
}
|
|
347
|
-
|
|
348
|
-
if (
|
|
349
|
-
keyCode(event).matches(KEYS.Forward) ||
|
|
350
|
-
keyCode(event).matches(KEYS.C)
|
|
351
|
-
) {
|
|
352
|
-
setDisplayState(DISPLAY_STATES.HUD);
|
|
353
|
-
KeyInputHandler.getInstance().onForwardPressOut();
|
|
354
|
-
|
|
355
|
-
return;
|
|
356
|
-
}
|
|
357
|
-
|
|
358
|
-
if (
|
|
359
|
-
keyCode(event).matches(KEYS.Rewind) ||
|
|
360
|
-
keyCode(event).matches(KEYS.Z)
|
|
361
|
-
) {
|
|
362
|
-
setDisplayState(DISPLAY_STATES.HUD);
|
|
363
|
-
KeyInputHandler.getInstance().onRewindPressOut();
|
|
364
|
-
}
|
|
365
345
|
}
|
|
366
346
|
|
|
367
347
|
onKeyDown(event) {
|
|
368
|
-
console.log("Anton event", event);
|
|
369
|
-
// console.log("Anton: event", event);
|
|
370
|
-
// debugger;
|
|
371
348
|
const { displayState, setDisplayState, navigator } = this.props;
|
|
372
349
|
const { isKeyboardVisible } = this.state;
|
|
373
350
|
|
|
@@ -395,7 +372,6 @@ class InteractionManagerClass extends React.Component<Props, State> {
|
|
|
395
372
|
When the player is displayed, we listen to Native Play / Pause / Stop
|
|
396
373
|
buttons. Any other key press will display the transport controls
|
|
397
374
|
*/
|
|
398
|
-
|
|
399
375
|
if (
|
|
400
376
|
displayState === DISPLAY_STATES.PLAYER ||
|
|
401
377
|
displayState === DISPLAY_STATES.HUD
|
|
@@ -428,22 +404,16 @@ class InteractionManagerClass extends React.Component<Props, State> {
|
|
|
428
404
|
return;
|
|
429
405
|
}
|
|
430
406
|
|
|
431
|
-
if (
|
|
432
|
-
keyCode(event).matches(KEYS.Forward) ||
|
|
433
|
-
keyCode(event).matches(KEYS.C)
|
|
434
|
-
) {
|
|
407
|
+
if (keyCode(event).matches(KEYS.Forward)) {
|
|
435
408
|
setDisplayState(DISPLAY_STATES.HUD);
|
|
436
|
-
|
|
409
|
+
this.props.seekMethods.onForwardPress();
|
|
437
410
|
|
|
438
411
|
return;
|
|
439
412
|
}
|
|
440
413
|
|
|
441
|
-
if (
|
|
442
|
-
keyCode(event).matches(KEYS.Rewind) ||
|
|
443
|
-
keyCode(event).matches(KEYS.Z)
|
|
444
|
-
) {
|
|
414
|
+
if (keyCode(event).matches(KEYS.Rewind)) {
|
|
445
415
|
setDisplayState(DISPLAY_STATES.HUD);
|
|
446
|
-
|
|
416
|
+
this.props.seekMethods.onRewindPress();
|
|
447
417
|
|
|
448
418
|
return;
|
|
449
419
|
}
|
|
@@ -481,7 +451,9 @@ class InteractionManagerClass extends React.Component<Props, State> {
|
|
|
481
451
|
const isHookInHomescreen = entryData?.payload?.home;
|
|
482
452
|
|
|
483
453
|
const isHookFlowBlocker =
|
|
484
|
-
entryData?.hookPlugin?.module?.isFlowBlocker
|
|
454
|
+
typeof entryData?.hookPlugin?.module?.isFlowBlocker === "function"
|
|
455
|
+
? entryData?.hookPlugin?.module?.isFlowBlocker()
|
|
456
|
+
: entryData?.hookPlugin?.module?.isFlowBlocker;
|
|
485
457
|
|
|
486
458
|
if (isHookInHomescreen && isHookFlowBlocker) {
|
|
487
459
|
this.platformBack();
|
|
@@ -503,7 +475,7 @@ class InteractionManagerClass extends React.Component<Props, State> {
|
|
|
503
475
|
}
|
|
504
476
|
}
|
|
505
477
|
|
|
506
|
-
if (keyCode(event).matches(KEYS.Enter)
|
|
478
|
+
if (keyCode(event).matches(KEYS.Enter)) {
|
|
507
479
|
if (displayState === DISPLAY_STATES.PLAYER) {
|
|
508
480
|
setDisplayState(DISPLAY_STATES.HUD);
|
|
509
481
|
} else {
|
|
@@ -729,18 +701,14 @@ class InteractionManagerClass extends React.Component<Props, State> {
|
|
|
729
701
|
|
|
730
702
|
switch (keyCode) {
|
|
731
703
|
case KEYS.Forward.code:
|
|
732
|
-
|
|
733
|
-
// playbackState && KeyInputHandler.getInstance().onForwardLongPress();
|
|
734
|
-
|
|
704
|
+
playbackState && this.props.seekMethods.onForwardLongPress();
|
|
735
705
|
break;
|
|
736
706
|
|
|
737
707
|
case KEYS.Rewind.code:
|
|
738
|
-
|
|
739
|
-
// playbackState && KeyInputHandler.getInstance().onRewindLongPress();
|
|
708
|
+
playbackState && this.props.seekMethods.onRewindLongPress();
|
|
740
709
|
break;
|
|
741
710
|
|
|
742
711
|
case KEYS.Enter.code:
|
|
743
|
-
case KEYS.X.code:
|
|
744
712
|
focusManager.longPress();
|
|
745
713
|
break;
|
|
746
714
|
}
|
|
@@ -750,35 +718,26 @@ class InteractionManagerClass extends React.Component<Props, State> {
|
|
|
750
718
|
const { keyCode } = event.detail;
|
|
751
719
|
this.longPressActive = false;
|
|
752
720
|
this.resetHudTimeout();
|
|
753
|
-
// debugger;
|
|
754
721
|
|
|
755
722
|
switch (keyCode) {
|
|
756
723
|
case KEYS.Forward.code:
|
|
757
|
-
|
|
758
|
-
// KeyInputHandler.getInstance().onForwardPressOut();
|
|
724
|
+
this.props.seekMethods.onForwardPressOut();
|
|
759
725
|
break;
|
|
760
726
|
|
|
761
727
|
case KEYS.Rewind.code:
|
|
762
|
-
|
|
763
|
-
// KeyInputHandler.getInstance().onRewindPressOut();
|
|
728
|
+
this.props.seekMethods.onRewindPressOut();
|
|
764
729
|
break;
|
|
765
730
|
|
|
766
731
|
case KEYS.Enter.code:
|
|
767
|
-
|
|
768
|
-
// focusManager.pressOut();
|
|
732
|
+
focusManager.pressOut();
|
|
769
733
|
break;
|
|
770
734
|
}
|
|
771
735
|
};
|
|
772
736
|
|
|
773
737
|
private keySupportsLongPress(event: KeyboardEvent): boolean {
|
|
774
|
-
return [
|
|
775
|
-
|
|
776
|
-
|
|
777
|
-
KEYS.Enter.code,
|
|
778
|
-
KEYS.Z.code,
|
|
779
|
-
KEYS.X.code,
|
|
780
|
-
KEYS.C.code,
|
|
781
|
-
].includes(event.code);
|
|
738
|
+
return [KEYS.Forward.code, KEYS.Rewind.code, KEYS.Enter.code].includes(
|
|
739
|
+
event.code
|
|
740
|
+
);
|
|
782
741
|
}
|
|
783
742
|
|
|
784
743
|
render() {
|
|
@@ -797,6 +756,7 @@ class InteractionManagerClass extends React.Component<Props, State> {
|
|
|
797
756
|
|
|
798
757
|
export const InteractionManager = R.compose(
|
|
799
758
|
withNavigator,
|
|
759
|
+
withUseSeek,
|
|
800
760
|
withXray,
|
|
801
761
|
connectToStore(R.pick(["rivers"])),
|
|
802
762
|
PlayerContentContext.withConsumer,
|
|
@@ -11,11 +11,28 @@ import {
|
|
|
11
11
|
PLATFORMS,
|
|
12
12
|
} from "./const";
|
|
13
13
|
|
|
14
|
+
/**
|
|
15
|
+
* @typedef {"tv" | "web" | "other"} DeviceType
|
|
16
|
+
* @typedef {"samsung_tv" | "lg_tv" | unknown} CustomPlatformTypes
|
|
17
|
+
*/
|
|
18
|
+
|
|
19
|
+
/**
|
|
20
|
+
* Retrieves the user agent string from the browser or global navigator.
|
|
21
|
+
* @returns {string} The user agent string.
|
|
22
|
+
*/
|
|
14
23
|
export const getUserAgent = () =>
|
|
15
24
|
window?.navigator?.userAgent || global?.navigator?.userAgent;
|
|
16
25
|
|
|
26
|
+
/**
|
|
27
|
+
* Checks if the device is HD (1280 width).
|
|
28
|
+
* @returns {boolean} True if the device is HD, false otherwise.
|
|
29
|
+
*/
|
|
17
30
|
export const isHD = () => window.innerWidth === 1280;
|
|
18
31
|
|
|
32
|
+
/**
|
|
33
|
+
* Checks if the platform is LG.
|
|
34
|
+
* @returns {boolean} True if the platform is LG, false otherwise.
|
|
35
|
+
*/
|
|
19
36
|
export const isLgPlatform = () => {
|
|
20
37
|
const userAgent = getUserAgent();
|
|
21
38
|
|
|
@@ -23,10 +40,13 @@ export const isLgPlatform = () => {
|
|
|
23
40
|
return false;
|
|
24
41
|
}
|
|
25
42
|
|
|
26
|
-
// Note: LG uses the number 0 in their userAgent, possibly because of Palm WebOS
|
|
27
43
|
return hasWebOS || userAgent.includes(PLATFORMS.webos);
|
|
28
44
|
};
|
|
29
45
|
|
|
46
|
+
/**
|
|
47
|
+
* Checks if the platform is Samsung.
|
|
48
|
+
* @returns {boolean} True if the platform is Samsung, false otherwise.
|
|
49
|
+
*/
|
|
30
50
|
export const isSamsungPlatform = () => {
|
|
31
51
|
const userAgent = getUserAgent();
|
|
32
52
|
|
|
@@ -42,42 +62,39 @@ export const isSamsungPlatform = () => {
|
|
|
42
62
|
};
|
|
43
63
|
|
|
44
64
|
/**
|
|
45
|
-
* Checks if
|
|
46
|
-
*
|
|
47
|
-
* Use this method when you need to identify the platform on runtime
|
|
48
|
-
* before the VIZIO Companion Library has loaded
|
|
65
|
+
* Checks if the platform is Vizio by using the user agent string.
|
|
66
|
+
* @returns {boolean} True if the platform is Vizio, false otherwise.
|
|
49
67
|
*/
|
|
50
68
|
export const isVizioPlatform = () => {
|
|
51
69
|
const userAgent = getUserAgent();
|
|
52
70
|
|
|
53
|
-
|
|
71
|
+
return (
|
|
54
72
|
userAgent.includes(PLATFORMS.vizio) ||
|
|
55
73
|
userAgent.includes(PLATFORMS.smartcast) ||
|
|
56
|
-
userAgent.includes(PLATFORMS.conjure)
|
|
57
|
-
|
|
58
|
-
return isVizioAgent;
|
|
74
|
+
userAgent.includes(PLATFORMS.conjure)
|
|
75
|
+
);
|
|
59
76
|
};
|
|
60
77
|
|
|
61
78
|
/**
|
|
62
|
-
* Checks if
|
|
63
|
-
*
|
|
64
|
-
* because it mainly checks whether we have access to apis, which may not be available yet
|
|
79
|
+
* Checks if the Vizio APIs are available.
|
|
80
|
+
* @returns {boolean} True if the Vizio APIs are available, false otherwise.
|
|
65
81
|
*/
|
|
66
82
|
export const hasVizioAPIs = () => {
|
|
67
|
-
|
|
83
|
+
return (
|
|
68
84
|
typeof window.VIZIO !== "undefined" &&
|
|
69
|
-
window?.applicaster?.vizioLibraryDidLoad
|
|
70
|
-
|
|
71
|
-
return hasAPIs;
|
|
85
|
+
window?.applicaster?.vizioLibraryDidLoad
|
|
86
|
+
);
|
|
72
87
|
};
|
|
73
88
|
|
|
74
89
|
/**
|
|
75
|
-
*
|
|
76
|
-
*
|
|
77
|
-
* @returns {"tv" | "web" | "other"} value
|
|
90
|
+
* Determines the device type based on the platform.
|
|
91
|
+
* @returns {DeviceType} The device type ("tv", "web", or "other").
|
|
78
92
|
*/
|
|
79
93
|
export const getDeviceType = () => {
|
|
80
|
-
|
|
94
|
+
/** @type {CustomPlatformTypes} */
|
|
95
|
+
const platformOS = Platform.OS;
|
|
96
|
+
|
|
97
|
+
switch (platformOS) {
|
|
81
98
|
case "samsung_tv":
|
|
82
99
|
return isSamsungPlatform() ? "tv" : "web";
|
|
83
100
|
case "lg_tv":
|
|
@@ -88,14 +105,15 @@ export const getDeviceType = () => {
|
|
|
88
105
|
};
|
|
89
106
|
|
|
90
107
|
/**
|
|
91
|
-
*
|
|
92
|
-
* @param {string} key - key
|
|
108
|
+
* Renames keys based on a predefined map.
|
|
109
|
+
* @param {string} key - The key to rename.
|
|
110
|
+
* @returns {string} The renamed key.
|
|
93
111
|
*/
|
|
94
112
|
export const renameKeys = (key) => desiredKeysMap?.[key] || key;
|
|
95
113
|
|
|
96
114
|
/**
|
|
97
|
-
*
|
|
98
|
-
*
|
|
115
|
+
* Retrieves the connection info from WebOS.
|
|
116
|
+
* @returns {Promise<{networkType: string} | null>} A promise that resolves with the connection info or null.
|
|
99
117
|
*/
|
|
100
118
|
export const getWebOSConnectionInfo = () => {
|
|
101
119
|
return new Promise((resolve, reject) => {
|
|
@@ -108,7 +126,6 @@ export const getWebOSConnectionInfo = () => {
|
|
|
108
126
|
webOS.service.request("luna://com.palm.connectionmanager", {
|
|
109
127
|
method: "getStatus",
|
|
110
128
|
parameters: { subscribe: false },
|
|
111
|
-
|
|
112
129
|
onSuccess: (args) => {
|
|
113
130
|
const types = Object.keys(args)
|
|
114
131
|
.filter((key) => args[key].state === "connected")
|
|
@@ -116,7 +133,6 @@ export const getWebOSConnectionInfo = () => {
|
|
|
116
133
|
|
|
117
134
|
resolve({ networkType: types });
|
|
118
135
|
},
|
|
119
|
-
|
|
120
136
|
onFailure: (error) => {
|
|
121
137
|
console.error(
|
|
122
138
|
"getWebOSConnectionInfo: There was an error getting connection info",
|
|
@@ -129,6 +145,10 @@ export const getWebOSConnectionInfo = () => {
|
|
|
129
145
|
});
|
|
130
146
|
};
|
|
131
147
|
|
|
148
|
+
/**
|
|
149
|
+
* Retrieves the connection info from Tizen.
|
|
150
|
+
* @returns {Promise<{networkType: string} | null>} A promise that resolves with the connection info or null.
|
|
151
|
+
*/
|
|
132
152
|
export const getTizenConnectionInfo = () => {
|
|
133
153
|
return new Promise((resolve, reject) => {
|
|
134
154
|
if (!isSamsungPlatform) {
|
package/package.json
CHANGED
|
@@ -1,6 +1,6 @@
|
|
|
1
1
|
{
|
|
2
2
|
"name": "@applicaster/zapp-react-dom-app",
|
|
3
|
-
"version": "13.0.0-alpha.
|
|
3
|
+
"version": "13.0.0-alpha.9433330286",
|
|
4
4
|
"description": "Zapp App Component for Applicaster's Quick Brick React Native App",
|
|
5
5
|
"main": "index.js",
|
|
6
6
|
"scripts": {
|
|
@@ -22,11 +22,11 @@
|
|
|
22
22
|
},
|
|
23
23
|
"homepage": "https://github.com/applicaster/zapp-react-dom-app#readme",
|
|
24
24
|
"dependencies": {
|
|
25
|
-
"@applicaster/zapp-react-dom-ui-components": "13.0.0-alpha.
|
|
26
|
-
"@applicaster/zapp-react-native-bridge": "13.0.0-alpha.
|
|
27
|
-
"@applicaster/zapp-react-native-redux": "13.0.0-alpha.
|
|
28
|
-
"@applicaster/zapp-react-native-ui-components": "13.0.0-alpha.
|
|
29
|
-
"@applicaster/zapp-react-native-utils": "13.0.0-alpha.
|
|
25
|
+
"@applicaster/zapp-react-dom-ui-components": "13.0.0-alpha.9433330286",
|
|
26
|
+
"@applicaster/zapp-react-native-bridge": "13.0.0-alpha.9433330286",
|
|
27
|
+
"@applicaster/zapp-react-native-redux": "13.0.0-alpha.9433330286",
|
|
28
|
+
"@applicaster/zapp-react-native-ui-components": "13.0.0-alpha.9433330286",
|
|
29
|
+
"@applicaster/zapp-react-native-utils": "13.0.0-alpha.9433330286",
|
|
30
30
|
"abortcontroller-polyfill": "^1.7.5",
|
|
31
31
|
"history": "^4.7.2",
|
|
32
32
|
"react-router-dom": "^5.1.2",
|