@24i/bigscreen-sdk 1.0.54-alpha.2836 → 2.1.1-alpha.2133
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/README.md +3 -2
- package/package.json +34 -53
- package/packages/adobe-heartbeat/src/AdobeHeartbeat.ts +9 -9
- package/packages/async-image/src/AsyncImage.tsx +10 -15
- package/packages/developer-tools/PlayerDebugWindow/README.md +1 -1
- package/packages/developer-tools/src/DeveloperToolsService/DeveloperToolsList.tsx +0 -11
- package/packages/developer-tools/src/PlayerDebugWindow/PlayerDebugWindow.tsx +5 -5
- package/packages/developer-tools/src/PlayerDebugWindow/constants.ts +0 -15
- package/packages/developer-tools/src/TechnicalInfo/TechnicalInfoDetail.tsx +1 -2
- package/packages/developer-tools/src/TechnicalInfo/TechnicalInfoProvider.ts +5 -57
- package/packages/developer-tools/src/TechnicalInfo/__mocks__/Device.ts +0 -12
- package/packages/developer-tools/src/TechnicalInfo/translations.ts +0 -8
- package/packages/device/src/getKeyDigit.ts +2 -2
- package/packages/device/src/resolver/resolver.ts +5 -18
- package/packages/digital-clock/src/DigitalClock.tsx +4 -15
- package/packages/driver-androidtv/src/DeviceAndroidTV.ts +9 -92
- package/packages/driver-androidtv/src/__mocks__/javaScriptBridge.ts +5 -38
- package/packages/driver-androidtv/src/index.ts +0 -1
- package/packages/driver-androidtv/src/keymap.ts +0 -18
- package/packages/driver-androidtv/src/types.ts +16 -144
- package/packages/driver-base/src/DeviceBase.ts +2 -80
- package/packages/driver-base/src/KeyMap/Key.ts +1 -8
- package/packages/driver-base/src/KeyMap/KeyMap.ts +0 -4
- package/packages/driver-base/src/KeyMap/interface.ts +0 -1
- package/packages/driver-base/src/KeyMap/overrideValues.ts +1 -2
- package/packages/driver-base/src/__mocks__/DeviceBase.ts +0 -24
- package/packages/driver-base/src/__mocks__/keyMap.ts +0 -1
- package/packages/driver-base/src/index.ts +0 -3
- package/packages/driver-base/src/types/DeviceEvent.ts +0 -2
- package/packages/driver-base/src/types/KeycodeKeyMap.ts +0 -1
- package/packages/driver-browser/src/DeviceBrowser.ts +0 -26
- package/packages/driver-browser/src/keymap.ts +0 -8
- package/packages/driver-entone/src/DeviceEntone.ts +1 -31
- package/packages/driver-entone/src/keymap.ts +0 -1
- package/packages/driver-hbbtv/src/DeviceHbbTV.ts +0 -26
- package/packages/driver-kreatv/src/DeviceKreaTV.ts +0 -26
- package/packages/driver-saphi/src/DeviceSaphi.ts +0 -26
- package/packages/driver-tizen/src/DeviceTizen.ts +7 -126
- package/packages/driver-tizen/src/ITizen.ts +202 -15116
- package/packages/driver-tizen/src/IWebapis.ts +87 -8643
- package/packages/driver-tizen/src/TizenKeys.ts +2 -4
- package/packages/driver-tizen/src/__mocks__/tizen.ts +8 -7
- package/packages/driver-tizen/src/constants.ts +195 -1
- package/packages/driver-tizen/src/types.ts +14 -0
- package/packages/driver-vidaa/src/DeviceVidaa.ts +2 -29
- package/packages/driver-vidaa/src/__mocks__/vidaa.ts +1 -1
- package/packages/driver-vidaa/src/keymap.ts +0 -2
- package/packages/driver-webos/src/DeviceWebos.ts +0 -55
- package/packages/driver-webos/src/__mocks__/webos.ts +0 -33
- package/packages/driver-webos/src/constants.ts +0 -1
- package/packages/driver-webos/src/keymap.ts +1 -2
- package/packages/driver-webos/src/types.ts +0 -30
- package/packages/driver-xbox/src/DeviceXbox.ts +1 -30
- package/packages/driver-xbox/src/keymap.ts +1 -1
- package/packages/epg/README.md +1 -3
- package/packages/epg/src/v2/Cell.tsx +2 -16
- package/packages/epg/src/v2/DataManager.ts +41 -112
- package/packages/epg/src/v2/DatePicker.tsx +3 -9
- package/packages/epg/src/v2/DateToast/DateToast.tsx +9 -12
- package/packages/epg/src/v2/Day.tsx +3 -6
- package/packages/epg/src/v2/Epg.tsx +5 -5
- package/packages/epg/src/v2/MockGenerator/generator.ts +2 -3
- package/packages/epg/src/v2/ProgramInfo/utils.ts +3 -4
- package/packages/epg/src/v2/Row.tsx +1 -3
- package/packages/epg/src/v2/TimelineSection.tsx +1 -4
- package/packages/epg/src/v2/basic/CellsManager.tsx +2 -7
- package/packages/epg/src/v2/basic/RowsManager.tsx +1 -3
- package/packages/epg/src/v2/interface.ts +0 -13
- package/packages/events-manager/src/EventsManager.ts +56 -1
- package/packages/focus/README.md +0 -33
- package/packages/focus/src/IFocusable.ts +0 -1
- package/packages/focus/src/Layout/Base.tsx +6 -41
- package/packages/focus/src/Layout/Matrix.tsx +19 -51
- package/packages/focus/src/Layout/__test__/Base.spec.ts +180 -0
- package/packages/focus/src/Layout/__test__/Horizontal.spec.ts +94 -0
- package/packages/focus/src/Layout/__test__/Matrix.spec.ts +261 -0
- package/packages/focus/src/Layout/__test__/Vertical.spec.ts +46 -0
- package/packages/focus/src/Layout/__test__/isRtl.spec.ts +23 -0
- package/packages/focus/src/Layout/__test__/shared.ts +19 -0
- package/packages/focus/src/focusFirstExisting.ts +1 -7
- package/packages/focus/src/index.ts +1 -2
- package/packages/gallup/src/Gallup.ts +3 -3
- package/packages/grid/src/Base/Base.tsx +10 -15
- package/packages/grid/src/FirstOnlyGrid/FirstOnlyGrid.tsx +2 -4
- package/packages/grid/src/UnifiedGridController/UnifiedGridController.ts +6 -6
- package/packages/icon/src/Icon.tsx +5 -27
- package/packages/input/README.md +1 -1
- package/packages/input/src/Input.tsx +10 -16
- package/packages/interactable/README.md +1 -2
- package/packages/interactable/src/Interactable.tsx +3 -9
- package/packages/interactable/src/interface.ts +0 -1
- package/packages/jsx/src/index.ts +1 -1
- package/packages/jsx/src/test-utils/index.ts +0 -1
- package/packages/keyboard/src/Backdrop/Backdrop.scss +0 -2
- package/packages/keyboard/src/KeyboardBase.tsx +4 -16
- package/packages/keyboard/src/WhitelabelKeyboard/Keyboard.scss +0 -4
- package/packages/keyboard/src/WhitelabelKeyboard/Keyboard.tsx +20 -28
- package/packages/keyboard/src/WhitelabelKeyboard/_sizes.1080.scss +0 -1
- package/packages/keyboard/src/WhitelabelKeyboard/_sizes.scss +0 -1
- package/packages/keyboard/src/WhitelabelKeyboard/layouts/index.ts +0 -12
- package/packages/keyboard/src/WhitelabelKeyboard/types.ts +0 -1
- package/packages/keyboard/src/utils/caret.ts +8 -5
- package/packages/keyboard/src/utils/input.ts +6 -5
- package/packages/l10n/README.md +0 -18
- package/packages/l10n/src/date/common.ts +6 -18
- package/packages/l10n/src/date/cs.ts +8 -2
- package/packages/l10n/src/date/en-001.ts +3 -3
- package/packages/l10n/src/date/en-common.ts +4 -5
- package/packages/l10n/src/date/en-us.ts +3 -3
- package/packages/l10n/src/date/iso.ts +13 -12
- package/packages/l10n/src/date/types.ts +0 -9
- package/packages/l10n/src/l10n.ts +3 -61
- package/packages/list/src/Base/Base.tsx +9 -19
- package/packages/list/src/Base/interface.ts +2 -2
- package/packages/list/src/BasicList/BasicList.tsx +7 -7
- package/packages/list/src/CenteredList/CenteredList.tsx +2 -2
- package/packages/list/src/CenteredList/controller.ts +1 -0
- package/packages/list/src/EdgeOffsetList/EdgeOffsetList.tsx +10 -10
- package/packages/list/src/FirstOnlyList/FirstOnlyList.tsx +2 -2
- package/packages/list/src/FirstOnlyVariedList/FirstOnlyVariedList.tsx +2 -2
- package/packages/list/src/FixedToEndList/FixedToEndList.tsx +2 -2
- package/packages/list/src/UnifiedListController/UnifiedListController.ts +2 -6
- package/packages/list/src/interface.ts +2 -2
- package/packages/logger/src/loggers/ConsoleLogger/ConsoleLogger.ts +1 -7
- package/packages/logger/src/loggers/SentryLogger/Sentry.ts +0 -1
- package/packages/logger/src/loggers/SentryLogger/SentryLogger.ts +3 -5
- package/packages/menu/src/MenuAndContentContainer/MenuAndContentContainer.tsx +3 -31
- package/packages/menu/src/MenuAndContentContainer/interface.ts +0 -8
- package/packages/modal-service/README.md +1 -4
- package/packages/modal-service/src/ModalService.tsx +5 -29
- package/packages/perf-utils/README.md +120 -1
- package/packages/perf-utils/src/array/filter.ts +54 -1
- package/packages/perf-utils/src/array/find.ts +43 -1
- package/packages/perf-utils/src/array/findIndex.ts +43 -1
- package/packages/perf-utils/src/array/forEach.ts +48 -1
- package/packages/perf-utils/src/array/includes.ts +41 -1
- package/packages/perf-utils/src/array/includesNaN.ts +32 -1
- package/packages/perf-utils/src/array/index.ts +7 -1
- package/packages/perf-utils/src/array/map.ts +52 -1
- package/packages/player-ui/README.md +1 -1
- package/packages/player-ui/src/CurrentTime.tsx +2 -2
- package/packages/player-ui/src/Duration.tsx +2 -2
- package/packages/player-ui/src/PauseButton.tsx +0 -8
- package/packages/player-ui/src/PlayerInteractable.tsx +0 -1
- package/packages/player-ui/src/PlayerTime.tsx +1 -3
- package/packages/player-ui/src/PlayerUI.tsx +35 -68
- package/packages/player-ui/src/RemainingTime.tsx +2 -2
- package/packages/player-ui/src/Seekbar.tsx +18 -110
- package/packages/player-ui/src/Seeking.ts +16 -57
- package/packages/player-ui/src/Subtitles.tsx +2 -2
- package/packages/player-ui/src/index.ts +0 -1
- package/packages/player-ui/src/mocks.ts +8 -32
- package/packages/player-ui/src/timeUtils.ts +3 -3
- package/packages/player-ui/src/types.ts +3 -9
- package/packages/router/README.md +0 -1
- package/packages/router/src/Route.tsx +27 -61
- package/packages/router/src/Router.tsx +14 -63
- package/packages/router/src/history.ts +1 -8
- package/packages/router/src/index.ts +1 -1
- package/packages/router/src/utils.ts +4 -9
- package/packages/sass-utils/src/linear-gradient.scss +4 -9
- package/packages/sass-utils/src/scale.1080.scss +1 -3
- package/packages/sass-utils/src/scale.720.scss +1 -1
- package/packages/time/README.md +1 -4
- package/packages/time/src/Time.ts +13 -35
- package/packages/time/src/constants.ts +0 -1
- package/packages/toast/src/ToastService.tsx +5 -16
- package/packages/types-bigscreen-jsx/README.md +4 -5
- package/packages/types-bigscreen-jsx/index.d.ts +67 -72
- package/packages/utils/README.md +0 -27
- package/packages/utils/src/elementUtils.ts +0 -25
- package/packages/utils/src/index.ts +0 -8
- package/packages/utils/src/scaledImage.ts +3 -6
- package/packages/utils/src/textUtils.ts +14 -46
- package/packages/utils/src/wait.ts +1 -3
- package/packages/utils/src/xhr/xhrSend.ts +1 -3
- package/packages/utils/src/xhr/xhrSendRetry.ts +1 -3
- package/packages/zapping/src/ChannelZapping.ts +0 -9
- package/packages/zapping/src/Zapping.tsx +0 -10
- package/ci/is_ci_job_skippable.sh +0 -153
- package/packages/analytics/README.md +0 -8
- package/packages/analytics/src/A.ts +0 -1
- package/packages/analytics/src/Analytics.ts +0 -1
- package/packages/analytics/src/analyticsOnScroll.ts +0 -1
- package/packages/analytics/src/clients/ConsoleAnalytics/ConsoleAnalytics.ts +0 -1
- package/packages/analytics/src/clients/ConsoleAnalytics/index.ts +0 -1
- package/packages/analytics/src/clients/GoogleAnalytics/GoogleAnalytics.ts +0 -196
- package/packages/analytics/src/clients/GoogleAnalytics/constants.ts +0 -126
- package/packages/analytics/src/clients/GoogleAnalytics/getUrl.ts +0 -17
- package/packages/analytics/src/clients/GoogleAnalytics/index.ts +0 -2
- package/packages/analytics/src/clients/GoogleAnalytics/interface.ts +0 -82
- package/packages/analytics/src/clients/GoogleAnalytics/mapPayload.ts +0 -51
- package/packages/analytics/src/clients/GoogleAnalytics/prepareBody.ts +0 -14
- package/packages/analytics/src/clients/TealiumAnalytics/TealiumAnalytics.ts +0 -181
- package/packages/analytics/src/clients/TealiumAnalytics/constants.ts +0 -106
- package/packages/analytics/src/clients/TealiumAnalytics/findForLanguage.ts +0 -9
- package/packages/analytics/src/clients/TealiumAnalytics/index.ts +0 -4
- package/packages/analytics/src/clients/TealiumAnalytics/interface.ts +0 -35
- package/packages/analytics/src/clients/TealiumAnalytics/mappers/__mocks__/mediaPayload.ts +0 -72
- package/packages/analytics/src/clients/TealiumAnalytics/mappers/helper.ts +0 -36
- package/packages/analytics/src/clients/TealiumAnalytics/mappers/mapAppError.ts +0 -13
- package/packages/analytics/src/clients/TealiumAnalytics/mappers/mapAppOpen.ts +0 -13
- package/packages/analytics/src/clients/TealiumAnalytics/mappers/mapFavoriteAdd.ts +0 -11
- package/packages/analytics/src/clients/TealiumAnalytics/mappers/mapFavoriteRemove.ts +0 -11
- package/packages/analytics/src/clients/TealiumAnalytics/mappers/mapPlayerClose.ts +0 -15
- package/packages/analytics/src/clients/TealiumAnalytics/mappers/mapPlayerOpen.ts +0 -15
- package/packages/analytics/src/clients/TealiumAnalytics/mappers/mapSceneView.ts +0 -18
- package/packages/analytics/src/clients/TealiumAnalytics/mappers/mapSearch.ts +0 -18
- package/packages/analytics/src/clients/TealiumAnalytics/mappers/mapSearchFailed.ts +0 -8
- package/packages/analytics/src/clients/TealiumAnalytics/mappers/mapSearchSuccess.ts +0 -8
- package/packages/analytics/src/clients/TealiumAnalytics/mappers/mapVideoPause.ts +0 -15
- package/packages/analytics/src/clients/TealiumAnalytics/mappers/mapVideoProgress.ts +0 -18
- package/packages/analytics/src/clients/TealiumAnalytics/mappers/mapVideoResume.ts +0 -15
- package/packages/analytics/src/clients/TealiumAnalytics/mappers/mapVideoStart.ts +0 -15
- package/packages/analytics/src/clients/TealiumAnalytics/mappers/mapVideoStop.ts +0 -15
- package/packages/analytics/src/clients/TealiumAnalytics/types.ts +0 -161
- package/packages/analytics/src/clients/TwentyFourIQ/TwentyFourIQClient.ts +0 -107
- package/packages/analytics/src/clients/TwentyFourIQ/constants.ts +0 -111
- package/packages/analytics/src/clients/TwentyFourIQ/helper.ts +0 -34
- package/packages/analytics/src/clients/TwentyFourIQ/index.ts +0 -2
- package/packages/analytics/src/clients/TwentyFourIQ/interface.ts +0 -34
- package/packages/analytics/src/clients/TwentyFourIQ/mappers/mapAdEvent.ts +0 -20
- package/packages/analytics/src/clients/TwentyFourIQ/mappers/mapBase.ts +0 -24
- package/packages/analytics/src/clients/TwentyFourIQ/mappers/mapBuffering.ts +0 -15
- package/packages/analytics/src/clients/TwentyFourIQ/mappers/mapPlayerClose.ts +0 -25
- package/packages/analytics/src/clients/TwentyFourIQ/mappers/mapPlayerOpen.ts +0 -17
- package/packages/analytics/src/clients/TwentyFourIQ/mappers/mapSceneView.ts +0 -15
- package/packages/analytics/src/clients/TwentyFourIQ/mappers/mapScroll.ts +0 -17
- package/packages/analytics/src/clients/TwentyFourIQ/mappers/mapVideoComplete.ts +0 -22
- package/packages/analytics/src/clients/TwentyFourIQ/mappers/mapVideoPause.ts +0 -25
- package/packages/analytics/src/clients/TwentyFourIQ/mappers/mapVideoProgress.ts +0 -25
- package/packages/analytics/src/clients/TwentyFourIQ/mappers/mapVideoStart.ts +0 -34
- package/packages/analytics/src/clients/TwentyFourIQ/mappers/mapVideoStop.ts +0 -32
- package/packages/analytics/src/clients/TwentyFourIQ/types.ts +0 -132
- package/packages/analytics/src/constants.ts +0 -1
- package/packages/analytics/src/index.ts +0 -3
- package/packages/analytics/src/interface.ts +0 -1
- package/packages/analytics/src/utils/generateSessionId.ts +0 -8
- package/packages/device/src/driver/index.firetv.ts +0 -1
- package/packages/device/src/driver/index.smartcast.tv.ts +0 -1
- package/packages/driver-base/src/types/AdInfo.ts +0 -5
- package/packages/driver-base/src/types/InAppPurchase.ts +0 -25
- package/packages/driver-firetv/src/DeviceFireTV.ts +0 -91
- package/packages/driver-firetv/src/__mocks__/javaScriptBridge.ts +0 -45
- package/packages/driver-firetv/src/index.ts +0 -1
- package/packages/driver-firetv/src/types.ts +0 -1
- package/packages/driver-smartcast/src/DeviceSmartCast.ts +0 -394
- package/packages/driver-smartcast/src/__mocks__/api.ts +0 -79
- package/packages/driver-smartcast/src/index.ts +0 -1
- package/packages/driver-smartcast/src/keymap.ts +0 -9
- package/packages/driver-smartcast/src/types.ts +0 -111
- package/packages/focus/src/hasFocus.ts +0 -36
- package/packages/jsx/src/test-utils/keyup.ts +0 -27
- package/packages/keyboard/src/WhitelabelKeyboard/layouts/arabic.ts +0 -27
- package/packages/keyboard/src/WhitelabelKeyboard/layouts/burmese.ts +0 -27
- package/packages/keyboard/src/WhitelabelKeyboard/layouts/dari.ts +0 -28
- package/packages/keyboard/src/WhitelabelKeyboard/layouts/korean.ts +0 -26
- package/packages/keyboard/src/WhitelabelKeyboard/layouts/pashto.ts +0 -27
- package/packages/keyboard/src/WhitelabelKeyboard/layouts/persian.ts +0 -27
- package/packages/keyboard/src/WhitelabelKeyboard/layouts/russian.ts +0 -27
- package/packages/keyboard/src/WhitelabelKeyboard/layouts/spanish.ts +0 -26
- package/packages/keyboard/src/WhitelabelKeyboard/layouts/tibetan.ts +0 -26
- package/packages/keyboard/src/WhitelabelKeyboard/layouts/turkish.ts +0 -26
- package/packages/keyboard/src/WhitelabelKeyboard/layouts/ukrainian.ts +0 -27
- package/packages/keyboard/src/WhitelabelKeyboard/layouts/urdu.ts +0 -26
- package/packages/keyboard/src/utils/setInputSelectionRange.ts +0 -10
- package/packages/l10n/src/date/de.ts +0 -97
- package/packages/l10n/src/date/es.ts +0 -71
- package/packages/l10n/src/date/fr.ts +0 -94
- package/packages/l10n/src/date/he.ts +0 -101
- package/packages/time/src/adapters/24iMediaTimeApi.ts +0 -47
- package/packages/time/src/services/24iMediaTimeApi/24iMediaTimeApi.ts +0 -43
- package/packages/time/src/services/24iMediaTimeApi/index.ts +0 -6
- package/packages/utils/src/forceReflow.ts +0 -14
- package/packages/utils/src/keyPress/index.ts +0 -6
- package/packages/utils/src/keyPress/keyPressSimulator.ts +0 -74
- package/packages/utils/src/keyPress/simulateKeyPress.ts +0 -25
- package/utils/release/release.ts +0 -156
|
@@ -2,13 +2,11 @@ import { KeycodeKeyMap, DeviceEventMap } from '@24i/bigscreen-sdk/driver-base';
|
|
|
2
2
|
import { DeviceAndroidTV } from '@24i/bigscreen-sdk/driver-androidtv';
|
|
3
3
|
import { DeviceBrowser } from '@24i/bigscreen-sdk/driver-browser';
|
|
4
4
|
import { DeviceEntone } from '@24i/bigscreen-sdk/driver-entone';
|
|
5
|
-
import { DeviceFireTV } from '@24i/bigscreen-sdk/driver-firetv';
|
|
6
5
|
import { DeviceHbbTV } from '@24i/bigscreen-sdk/driver-hbbtv';
|
|
7
6
|
import { DeviceKreaTV } from '@24i/bigscreen-sdk/driver-kreatv';
|
|
8
7
|
import { DeviceSaphi } from '@24i/bigscreen-sdk/driver-saphi';
|
|
9
8
|
import { DeviceTizen } from '@24i/bigscreen-sdk/driver-tizen';
|
|
10
9
|
import { DeviceVidaa } from '@24i/bigscreen-sdk/driver-vidaa';
|
|
11
|
-
import { DeviceSmartCast } from '@24i/bigscreen-sdk/driver-smartcast';
|
|
12
10
|
import { DeviceWebos } from '@24i/bigscreen-sdk/driver-webos';
|
|
13
11
|
import { DeviceXbox } from '@24i/bigscreen-sdk/driver-xbox';
|
|
14
12
|
|
|
@@ -22,26 +20,10 @@ const getDevice = () => {
|
|
|
22
20
|
info('HbbTV');
|
|
23
21
|
return new DeviceHbbTV();
|
|
24
22
|
}
|
|
25
|
-
// any because JavaScriptBridge property is defined on Android TV Bridge platform
|
|
26
|
-
if (typeof (window as any).JavaScriptBridge !== 'undefined'
|
|
27
|
-
&& (userAgent.match(/AFT/) || userAgent.match('AmazonWebAppPlatform'))
|
|
28
|
-
) {
|
|
29
|
-
info('FireTV');
|
|
30
|
-
return new DeviceFireTV();
|
|
31
|
-
}
|
|
32
|
-
// any because JavaScriptBridge property is defined on Android TV Bridge platform
|
|
33
|
-
if (typeof (window as any).JavaScriptBridge !== 'undefined') {
|
|
34
|
-
info('AndroidTV');
|
|
35
|
-
return new DeviceAndroidTV();
|
|
36
|
-
}
|
|
37
23
|
if (userAgent.match(/Tizen/)) {
|
|
38
24
|
info('Tizen');
|
|
39
25
|
return new DeviceTizen();
|
|
40
26
|
}
|
|
41
|
-
if (userAgent.match(/Vizio/i)) {
|
|
42
|
-
info('SmartCast');
|
|
43
|
-
return new DeviceSmartCast();
|
|
44
|
-
}
|
|
45
27
|
if (userAgent.match(/Web0S/)) { // Yes, it is Web ZERO S
|
|
46
28
|
info('WebOS');
|
|
47
29
|
return new DeviceWebos();
|
|
@@ -58,6 +40,11 @@ const getDevice = () => {
|
|
|
58
40
|
info('KreaTV');
|
|
59
41
|
return new DeviceKreaTV();
|
|
60
42
|
}
|
|
43
|
+
// any because JavaScriptBridge property is defined on Android TV Bridge platform
|
|
44
|
+
if (typeof (window as any).JavaScriptBridge !== 'undefined') {
|
|
45
|
+
info('AndroidTV');
|
|
46
|
+
return new DeviceAndroidTV();
|
|
47
|
+
}
|
|
61
48
|
// any because ENTONE property is defined on Entone platform
|
|
62
49
|
if (typeof (window as any).ENTONE !== 'undefined') {
|
|
63
50
|
info('Entone');
|
|
@@ -8,14 +8,9 @@ export type Props = {
|
|
|
8
8
|
withSeconds?: boolean,
|
|
9
9
|
domRef?: Reference<HTMLDivElement>,
|
|
10
10
|
className?: string,
|
|
11
|
-
isHiddenForAria?: boolean,
|
|
12
11
|
};
|
|
13
12
|
|
|
14
|
-
const WITHOUT_SECONDS_OPTIONS = {
|
|
15
|
-
hour: 'numeric',
|
|
16
|
-
minute: '2-digit',
|
|
17
|
-
formatType: 'timeFormat',
|
|
18
|
-
} as const;
|
|
13
|
+
const WITHOUT_SECONDS_OPTIONS = { hour: 'numeric', minute: '2-digit' } as const;
|
|
19
14
|
const WITH_SECONDS_OPTIONS = { ...WITHOUT_SECONDS_OPTIONS, second: '2-digit' } as const;
|
|
20
15
|
|
|
21
16
|
export class DigitalClock extends Component<Props> {
|
|
@@ -45,7 +40,7 @@ export class DigitalClock extends Component<Props> {
|
|
|
45
40
|
|
|
46
41
|
setTime() {
|
|
47
42
|
const { withSeconds } = this.props;
|
|
48
|
-
const currentTimestampMs = time.
|
|
43
|
+
const currentTimestampMs = time.getCurrentUnixTime();
|
|
49
44
|
if (this.oldUnixTimestampMs !== currentTimestampMs) {
|
|
50
45
|
const options = withSeconds ? WITH_SECONDS_OPTIONS : WITHOUT_SECONDS_OPTIONS;
|
|
51
46
|
this.clearMount((
|
|
@@ -66,13 +61,7 @@ export class DigitalClock extends Component<Props> {
|
|
|
66
61
|
}
|
|
67
62
|
|
|
68
63
|
render() {
|
|
69
|
-
const { className
|
|
70
|
-
return
|
|
71
|
-
<div
|
|
72
|
-
ref={this.clockRef}
|
|
73
|
-
className={className}
|
|
74
|
-
{...isHiddenForAria && { 'aria-hidden': true }}
|
|
75
|
-
/>
|
|
76
|
-
);
|
|
64
|
+
const { className } = this.props;
|
|
65
|
+
return <div ref={this.clockRef} className={className} />;
|
|
77
66
|
}
|
|
78
67
|
}
|
|
@@ -3,12 +3,10 @@ import {
|
|
|
3
3
|
ConnectionType,
|
|
4
4
|
ScreenSaverStatus,
|
|
5
5
|
VolumeRange,
|
|
6
|
-
IAPSuccessPayload,
|
|
7
|
-
IAPPurchaseProductData,
|
|
8
6
|
} from '@24i/bigscreen-sdk/driver-base';
|
|
9
|
-
import { IJavaScriptBridge
|
|
7
|
+
import { IJavaScriptBridge } from './types';
|
|
10
8
|
import { getFirmware } from './formatUserAgent';
|
|
11
|
-
import { getKeyMap
|
|
9
|
+
import { getKeyMap } from './keymap';
|
|
12
10
|
|
|
13
11
|
interface CustomKeyboardEvent extends KeyboardEvent {
|
|
14
12
|
/** Flag indicating that the driver has already re-emitted this event. */
|
|
@@ -27,9 +25,7 @@ declare global {
|
|
|
27
25
|
export class DeviceAndroidTV extends DeviceBase {
|
|
28
26
|
keyMap = getKeyMap();
|
|
29
27
|
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
platformInfo: DeviceInfo = this.deviceInfo ? JSON.parse(this.deviceInfo) : '';
|
|
28
|
+
platformInfo = window.JavaScriptBridge.bridgeJavaScriptToAndroid_GetDeviceInfo();
|
|
33
29
|
|
|
34
30
|
firmware = getFirmware(navigator.userAgent);
|
|
35
31
|
|
|
@@ -48,54 +44,17 @@ export class DeviceAndroidTV extends DeviceBase {
|
|
|
48
44
|
}
|
|
49
45
|
|
|
50
46
|
/**
|
|
51
|
-
* Handles keydown/up events for the BACK
|
|
52
|
-
*
|
|
53
|
-
*
|
|
47
|
+
* Handles keydown/up events for the BACK key which are dispatched on the document
|
|
48
|
+
* from the Android TV Bridge. We must catch them and re-emit them properly
|
|
49
|
+
* on the active (focused) element in the DOM tree.
|
|
54
50
|
* @param event keyboard event
|
|
55
51
|
*/
|
|
56
|
-
// eslint-disable-next-line complexity
|
|
57
52
|
relaunchKeyEvent = (event: CustomKeyboardEvent) => {
|
|
58
53
|
if (event.bigscreenSdkRelaunched) { // prevent to relaunch event in loop
|
|
59
54
|
return;
|
|
60
55
|
}
|
|
61
|
-
|
|
62
|
-
|
|
63
|
-
let { keyCode } = event;
|
|
64
|
-
|
|
65
|
-
// KeyCodes collisions for some key sent from Android wrapper or JavaScript (webView)
|
|
66
|
-
if (
|
|
67
|
-
key === 'u' // keyCode 85, same like PLAYPAUSE
|
|
68
|
-
|| key === 'v' // keyCode 86, same like STOP
|
|
69
|
-
|| key === 'y' // keyCode 89, same like REW
|
|
70
|
-
|| key === 'z' // keyCode 90, same like FF
|
|
71
|
-
) {
|
|
72
|
-
return;
|
|
73
|
-
}
|
|
74
|
-
|
|
75
|
-
/**
|
|
76
|
-
* Remap KeyCode by its key value.
|
|
77
|
-
* On Android all colors keys and some others coming with "0" keyCode.
|
|
78
|
-
*/
|
|
79
|
-
if (key === 'ColorF0Red') keyCode = this.keyMap.RED;
|
|
80
|
-
if (key === 'ColorF1Green') keyCode = this.keyMap.GREEN;
|
|
81
|
-
if (key === 'ColorF2Yellow') keyCode = this.keyMap.YELLOW;
|
|
82
|
-
if (key === 'ColorF3Blue') keyCode = this.keyMap.BLUE;
|
|
83
|
-
if (key === 'ClosedCaptionToggle') keyCode = this.keyMap.SUBTITLES;
|
|
84
|
-
if (keyCode === AndroidKeyMap.STOP) keyCode = this.keyMap.STOP;
|
|
85
|
-
if (keyCode === AndroidKeyMap.PAUSE) keyCode = this.keyMap.PAUSE;
|
|
86
|
-
|
|
87
|
-
if (keyCode === this.keyMap.BACK
|
|
88
|
-
|| keyCode === this.keyMap.STOP
|
|
89
|
-
|| keyCode === this.keyMap.FF
|
|
90
|
-
|| keyCode === this.keyMap.REW
|
|
91
|
-
|| keyCode === this.keyMap.PLAYPAUSE
|
|
92
|
-
|| keyCode === this.keyMap.PLAY
|
|
93
|
-
|| keyCode === this.keyMap.RED
|
|
94
|
-
|| keyCode === this.keyMap.GREEN
|
|
95
|
-
|| keyCode === this.keyMap.YELLOW
|
|
96
|
-
|| keyCode === this.keyMap.BLUE
|
|
97
|
-
|| keyCode === this.keyMap.SUBTITLES
|
|
98
|
-
) {
|
|
56
|
+
const { keyCode } = event;
|
|
57
|
+
if (keyCode === this.keyMap.BACK) {
|
|
99
58
|
event.preventDefault();
|
|
100
59
|
event.stopImmediatePropagation();
|
|
101
60
|
const newEvent = new KeyboardEvent(event.type, {
|
|
@@ -164,38 +123,10 @@ export class DeviceAndroidTV extends DeviceBase {
|
|
|
164
123
|
return this.getBaseUuid();
|
|
165
124
|
}
|
|
166
125
|
|
|
167
|
-
async getAdInfo() {
|
|
168
|
-
let adId = null;
|
|
169
|
-
let latEnabled = null;
|
|
170
|
-
const type = 'gaid';
|
|
171
|
-
try {
|
|
172
|
-
adId = window.JavaScriptBridge.bridgeJavaScriptToAndroid_GetAdId() ?? null;
|
|
173
|
-
latEnabled = window.JavaScriptBridge.bridgeJavaScriptToAndroid_GetLimitAdTracking()
|
|
174
|
-
?? true;
|
|
175
|
-
} catch (e) {
|
|
176
|
-
latEnabled = true;
|
|
177
|
-
console.error('[DeviceAndroidTV] Failed to getAdInfo', e);
|
|
178
|
-
}
|
|
179
|
-
return { adId, type, latEnabled };
|
|
180
|
-
}
|
|
181
|
-
|
|
182
|
-
async getOsLanguage() {
|
|
183
|
-
try {
|
|
184
|
-
return window.JavaScriptBridge.bridgeJavaScriptToAndroid_GetOsLanguage() || '';
|
|
185
|
-
} catch (e) {
|
|
186
|
-
console.error('[DeviceAndroidTV] Failed to getOsLanguage', e);
|
|
187
|
-
return '';
|
|
188
|
-
}
|
|
189
|
-
}
|
|
190
|
-
|
|
191
126
|
async getVolume(): Promise<number> {
|
|
192
127
|
return VolumeRange.UNSUPPORTED;
|
|
193
128
|
}
|
|
194
129
|
|
|
195
|
-
async getWrapperVersion(): Promise<string> {
|
|
196
|
-
return this.platformInfo.appVersion;
|
|
197
|
-
}
|
|
198
|
-
|
|
199
130
|
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
|
200
131
|
async setVolume(volumePercentage: number): Promise<void> {
|
|
201
132
|
// not supported on AndroidTV platform
|
|
@@ -237,9 +168,7 @@ export class DeviceAndroidTV extends DeviceBase {
|
|
|
237
168
|
}
|
|
238
169
|
|
|
239
170
|
async getLocalIP(): Promise<string> {
|
|
240
|
-
|
|
241
|
-
const ip = this.platformInfo.ipLocal.toString().match(ipv4RegExp);
|
|
242
|
-
if (ip) return ip.toString();
|
|
171
|
+
// not supported on AndroidTV platform
|
|
243
172
|
return '';
|
|
244
173
|
}
|
|
245
174
|
|
|
@@ -247,16 +176,4 @@ export class DeviceAndroidTV extends DeviceBase {
|
|
|
247
176
|
// not supported on AndroidTV platform
|
|
248
177
|
return '';
|
|
249
178
|
}
|
|
250
|
-
|
|
251
|
-
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
|
252
|
-
async purchaseProduct(data: IAPPurchaseProductData): Promise<IAPSuccessPayload> {
|
|
253
|
-
// not supported
|
|
254
|
-
throw new Error('Not supported');
|
|
255
|
-
}
|
|
256
|
-
|
|
257
|
-
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
|
258
|
-
async cancelSubscription(data: IAPPurchaseProductData): Promise<void> {
|
|
259
|
-
// not supported
|
|
260
|
-
throw new Error('Not supported');
|
|
261
|
-
}
|
|
262
179
|
}
|
|
@@ -2,44 +2,11 @@ import { IJavaScriptBridge } from '../types';
|
|
|
2
2
|
|
|
3
3
|
export const mockJavaScriptBridge: IJavaScriptBridge = {
|
|
4
4
|
JavaScriptBridge: {
|
|
5
|
-
bridgeJavaScriptToAndroid_GetDeviceInfo: () => (
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
appVersion: '0.0.1',
|
|
11
|
-
appFlavor: 'appstage-bigscreen',
|
|
12
|
-
drmKeySystems: '["W3C Clear Key", "Google Widevine"]',
|
|
13
|
-
ipLocal: '127.0.0.1',
|
|
14
|
-
})
|
|
15
|
-
),
|
|
16
|
-
bridgeJavaScriptToAndroid_GetAdId: () => 'gaid-id',
|
|
17
|
-
bridgeJavaScriptToAndroid_GetLimitAdTracking: () => false,
|
|
18
|
-
bridgeJavaScriptToAndroid_GetOsLanguage: () => '',
|
|
19
|
-
bridgeJavaScriptToAndroid_GetMediaInfo: () => '{}',
|
|
5
|
+
bridgeJavaScriptToAndroid_GetDeviceInfo: () => ({
|
|
6
|
+
deviceBrand: 'Sony',
|
|
7
|
+
deviceModel: 'BRAVIA 4K 2015',
|
|
8
|
+
osVersion: '8.0.0',
|
|
9
|
+
}),
|
|
20
10
|
bridgeJavaScriptToAndroid_Back: () => {},
|
|
21
|
-
bridgeJavaScriptToAndroid_ReloadPlayer: () => {},
|
|
22
|
-
bridgeJavaScriptToAndroid_StopVideo: () => {},
|
|
23
|
-
bridgeJavaScriptToAndroid_FullScreenVideo: () => {},
|
|
24
|
-
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
|
25
|
-
bridgeJavaScriptToAndroid_SetVideoPath: (url: string) => {},
|
|
26
|
-
bridgeJavaScriptToAndroid_IsPlaying: () => true,
|
|
27
|
-
bridgeJavaScriptToAndroid_PauseVideo: () => {},
|
|
28
|
-
bridgeJavaScriptToAndroid_PlayVideo: () => {},
|
|
29
|
-
bridgeJavaScriptToAndroid_IsLive: () => false,
|
|
30
|
-
bridgeJavaScriptToAndroid_GetCurrentTime: () => Date.now(),
|
|
31
|
-
bridgeJavaScriptToAndroid_GetTotalTime: () => Date.now(),
|
|
32
|
-
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
|
33
|
-
bridgeJavaScriptToAndroid_SeekTo: (milliseconds: number) => {},
|
|
34
|
-
bridgeJavaScriptToAndroid_getCurrentSubtitleTrack: () => '{}',
|
|
35
|
-
bridgeJavaScriptToAndroid_getCurrentAudioTrack: () => '{}',
|
|
36
|
-
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
|
37
|
-
bridgeJavaScriptToAndroid_SetTrack: (track: string) => {},
|
|
38
|
-
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
|
39
|
-
bridgeJavaScriptToAndroid_SetAudioTrack: (track: string) => {},
|
|
40
|
-
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
|
41
|
-
bridgeReceiptAmazonIAPValidation: (sku: string) => {},
|
|
42
|
-
// eslint-disable-next-line @typescript-eslint/no-unused-vars
|
|
43
|
-
bridgeReceiptAmazonIAPValidated: (receiptId: string) => {},
|
|
44
11
|
},
|
|
45
12
|
};
|
|
@@ -4,24 +4,6 @@ import { KeyMap } from '@24i/bigscreen-sdk/driver-base';
|
|
|
4
4
|
export const getKeyMap = () => {
|
|
5
5
|
KeyMap.overrideValues({
|
|
6
6
|
BACK: { keyCode: 4 },
|
|
7
|
-
STOP: { keyCode: 86 },
|
|
8
|
-
FF: { keyCode: 90 },
|
|
9
|
-
REW: { keyCode: 89 },
|
|
10
|
-
PLAY: { keyCode: 126 },
|
|
11
|
-
PAUSE: { keyCode: 127 },
|
|
12
|
-
PLAYPAUSE: { keyCode: 85 },
|
|
13
|
-
SUBTITLES: { keyCode: 175 },
|
|
14
7
|
});
|
|
15
8
|
return KeyMap.generateKeyCodeKeyMap();
|
|
16
9
|
};
|
|
17
|
-
|
|
18
|
-
/**
|
|
19
|
-
* For the specific AndroidTV devices like Sony Bravia or Nvidia Shield
|
|
20
|
-
* there are different KeyCodes for some buttons than on other platforms.
|
|
21
|
-
* In that case we need to re-map this specific KeyCodes to the
|
|
22
|
-
* same values as we using in generic KeyMap list for the AndroidTV.
|
|
23
|
-
*/
|
|
24
|
-
export const AndroidKeyMap = {
|
|
25
|
-
STOP: 178,
|
|
26
|
-
PAUSE: 85,
|
|
27
|
-
};
|
|
@@ -1,155 +1,27 @@
|
|
|
1
1
|
interface JavaScriptBridge {
|
|
2
2
|
/**
|
|
3
|
-
* It returns
|
|
4
|
-
|
|
5
|
-
|
|
6
|
-
|
|
7
|
-
|
|
8
|
-
|
|
9
|
-
|
|
10
|
-
|
|
11
|
-
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
16
|
-
|
|
17
|
-
|
|
18
|
-
|
|
19
|
-
*/
|
|
20
|
-
bridgeJavaScriptToAndroid_GetLimitAdTracking: () => boolean | null,
|
|
21
|
-
/**
|
|
22
|
-
* It returns the language of the OS.
|
|
23
|
-
* @return Language of the OS. Ex. "en"
|
|
24
|
-
*/
|
|
25
|
-
bridgeJavaScriptToAndroid_GetOsLanguage: () => string,
|
|
26
|
-
/**
|
|
27
|
-
* It returns media info including statistics
|
|
28
|
-
*/
|
|
29
|
-
bridgeJavaScriptToAndroid_GetMediaInfo: () => string;
|
|
3
|
+
* It returns device info.
|
|
4
|
+
*/
|
|
5
|
+
bridgeJavaScriptToAndroid_GetDeviceInfo: () => {
|
|
6
|
+
/**
|
|
7
|
+
* Device brand. Ex. "Sony"
|
|
8
|
+
*/
|
|
9
|
+
deviceBrand: string,
|
|
10
|
+
/**
|
|
11
|
+
* Device model. Ex. "BRAVIA 4K 2015"
|
|
12
|
+
*/
|
|
13
|
+
deviceModel: string,
|
|
14
|
+
/**
|
|
15
|
+
* Android version. Ex. "7.0"
|
|
16
|
+
*/
|
|
17
|
+
osVersion: string,
|
|
18
|
+
},
|
|
30
19
|
/**
|
|
31
20
|
* It simulates a native Android back press.
|
|
32
21
|
*/
|
|
33
22
|
bridgeJavaScriptToAndroid_Back: () => void,
|
|
34
|
-
/**
|
|
35
|
-
* It reloads the video player
|
|
36
|
-
*/
|
|
37
|
-
bridgeJavaScriptToAndroid_ReloadPlayer: () => void;
|
|
38
|
-
/**
|
|
39
|
-
* It simulates a native Android stop button press.
|
|
40
|
-
*/
|
|
41
|
-
bridgeJavaScriptToAndroid_StopVideo: () => void;
|
|
42
|
-
/**
|
|
43
|
-
* It sets the video to fullscreen mode
|
|
44
|
-
*/
|
|
45
|
-
bridgeJavaScriptToAndroid_FullScreenVideo: () => void;
|
|
46
|
-
/**
|
|
47
|
-
* It sets the video url
|
|
48
|
-
*/
|
|
49
|
-
bridgeJavaScriptToAndroid_SetVideoPath: (url: string) => void;
|
|
50
|
-
/**
|
|
51
|
-
* It returns whether the video is playing
|
|
52
|
-
*/
|
|
53
|
-
bridgeJavaScriptToAndroid_IsPlaying: () => boolean;
|
|
54
|
-
/**
|
|
55
|
-
* It pauses the video
|
|
56
|
-
*/
|
|
57
|
-
bridgeJavaScriptToAndroid_PauseVideo: () => void;
|
|
58
|
-
/**
|
|
59
|
-
* It plays the video
|
|
60
|
-
*/
|
|
61
|
-
bridgeJavaScriptToAndroid_PlayVideo: () => void;
|
|
62
|
-
/**
|
|
63
|
-
* It returns whether the video is live
|
|
64
|
-
*/
|
|
65
|
-
bridgeJavaScriptToAndroid_IsLive: () => boolean;
|
|
66
|
-
/**
|
|
67
|
-
* It returns current time of currently played video
|
|
68
|
-
*/
|
|
69
|
-
bridgeJavaScriptToAndroid_GetCurrentTime: () => number;
|
|
70
|
-
/**
|
|
71
|
-
* It returns total duration of the video
|
|
72
|
-
*/
|
|
73
|
-
bridgeJavaScriptToAndroid_GetTotalTime: () => number;
|
|
74
|
-
/**
|
|
75
|
-
* It seeks the video to specified milliseconds
|
|
76
|
-
*/
|
|
77
|
-
bridgeJavaScriptToAndroid_SeekTo: (milliseconds: number) => void;
|
|
78
|
-
/**
|
|
79
|
-
* It returns current text track
|
|
80
|
-
*/
|
|
81
|
-
bridgeJavaScriptToAndroid_getCurrentSubtitleTrack: () => string | undefined;
|
|
82
|
-
/**
|
|
83
|
-
* It returns current audio track
|
|
84
|
-
*/
|
|
85
|
-
bridgeJavaScriptToAndroid_getCurrentAudioTrack: () => string | undefined;
|
|
86
|
-
/**
|
|
87
|
-
* It sets text track to be shown.
|
|
88
|
-
*/
|
|
89
|
-
bridgeJavaScriptToAndroid_SetTrack: (track: string) => void;
|
|
90
|
-
/**
|
|
91
|
-
* It sets audio track to be used.
|
|
92
|
-
*/
|
|
93
|
-
bridgeJavaScriptToAndroid_SetAudioTrack: (track: string) => void;
|
|
94
|
-
/**
|
|
95
|
-
* It launch in app purchase.
|
|
96
|
-
*/
|
|
97
|
-
bridgeReceiptAmazonIAPValidation: (sku: string) => void;
|
|
98
|
-
/**
|
|
99
|
-
* It validate purchase.
|
|
100
|
-
*/
|
|
101
|
-
bridgeReceiptAmazonIAPValidated: (receiptId: string) => void;
|
|
102
23
|
}
|
|
103
24
|
|
|
104
|
-
export type DeviceInfo = {
|
|
105
|
-
/**
|
|
106
|
-
* Device brand. Ex. "Sony"
|
|
107
|
-
*/
|
|
108
|
-
deviceBrand: string,
|
|
109
|
-
/**
|
|
110
|
-
* Device model. Ex. "BRAVIA 4K 2015"
|
|
111
|
-
*/
|
|
112
|
-
deviceModel: string,
|
|
113
|
-
/**
|
|
114
|
-
* Android version. Ex. "7.0"
|
|
115
|
-
*/
|
|
116
|
-
osVersion: string,
|
|
117
|
-
/**
|
|
118
|
-
* Android wrapper version. Ex. "0.0.1"
|
|
119
|
-
*/
|
|
120
|
-
appVersion: string,
|
|
121
|
-
/**
|
|
122
|
-
* Android flavor. Ex. "appstage-bigscreen"
|
|
123
|
-
*/
|
|
124
|
-
appFlavor: string,
|
|
125
|
-
/**
|
|
126
|
-
* Underlying player engine name. Ex. "exoplayer"
|
|
127
|
-
*/
|
|
128
|
-
engineName: string,
|
|
129
|
-
/**
|
|
130
|
-
* Version of player engine. Ex. "2.18.1"
|
|
131
|
-
*/
|
|
132
|
-
engineVersion: string,
|
|
133
|
-
/**
|
|
134
|
-
* Android DRM key systems. Ex. ["Widewine", "W3C ClearKey"]
|
|
135
|
-
*/
|
|
136
|
-
drmKeySystems: Array<string>,
|
|
137
|
-
/**
|
|
138
|
-
* Android local IP adress in array Ex. "fe80::475:3045:2928:3a32%wlan0127.0.0.1"
|
|
139
|
-
*/
|
|
140
|
-
ipLocal: string,
|
|
141
|
-
};
|
|
142
|
-
|
|
143
25
|
export interface IJavaScriptBridge {
|
|
144
26
|
JavaScriptBridge: JavaScriptBridge,
|
|
145
27
|
}
|
|
146
|
-
|
|
147
|
-
export type IAPSuccessEvent = {
|
|
148
|
-
userId: string;
|
|
149
|
-
receipt: string;
|
|
150
|
-
sku: string;
|
|
151
|
-
};
|
|
152
|
-
|
|
153
|
-
export type IAPErrorEvent = {
|
|
154
|
-
message: string;
|
|
155
|
-
};
|
|
@@ -1,5 +1,4 @@
|
|
|
1
1
|
import { Storage } from '@24i/bigscreen-sdk/storage';
|
|
2
|
-
import { config } from '@24i/bigscreen-sdk/runtime-config';
|
|
3
2
|
import { generateUuid } from '@24i/bigscreen-sdk/utils/generateUuid';
|
|
4
3
|
import { EventsManager, IEvents, EventMapType } from '@24i/bigscreen-sdk/events-manager';
|
|
5
4
|
import { isRtl } from '@24i/bigscreen-sdk/i18n';
|
|
@@ -8,26 +7,15 @@ import { ScreenSize } from './ScreenSize';
|
|
|
8
7
|
import { VolumeRange } from './VolumeRange';
|
|
9
8
|
import { KeycodeKeyMap } from './types/KeycodeKeyMap';
|
|
10
9
|
import { DeviceEventMap } from './types/DeviceEvent';
|
|
11
|
-
import { AdInfo } from './types/AdInfo';
|
|
12
10
|
import { ScreenSaverStatus } from './types/ScreenSaverStatus';
|
|
13
|
-
import {
|
|
14
|
-
SubscriptionFeaturesConfiguration,
|
|
15
|
-
IAPPurchaseProductData,
|
|
16
|
-
IAPSuccessPayload,
|
|
17
|
-
} from './types/InAppPurchase';
|
|
18
11
|
import { ExitOptions } from './types/ExitOptions';
|
|
19
12
|
import { inRange } from './utils';
|
|
20
13
|
import { ErrorTemplate } from './errors';
|
|
21
14
|
import { bindPreventDefaultEvent } from './bindPreventDefaultEvent';
|
|
22
|
-
import { LEFT, RIGHT, UP, DOWN, ENTER, BACK
|
|
15
|
+
import { LEFT, RIGHT, UP, DOWN, ENTER, BACK } from './KeyMap';
|
|
23
16
|
|
|
24
17
|
export const STORAGE_UUID_KEY = '__UUID__';
|
|
25
18
|
|
|
26
|
-
const DEFAULT_POLLING_INTERVAL = 15000;
|
|
27
|
-
const DEFAULT_POLLING_TIMEOUT = 15000;
|
|
28
|
-
|
|
29
|
-
const CHECKED_URL = '//www.google-analytics.com/__utm.gif';
|
|
30
|
-
|
|
31
19
|
export abstract class DeviceBase<
|
|
32
20
|
CustomEventMap extends EventMapType = {},
|
|
33
21
|
EventMap extends EventMapType = DeviceEventMap & CustomEventMap,
|
|
@@ -53,19 +41,6 @@ export abstract class DeviceBase<
|
|
|
53
41
|
|
|
54
42
|
screenSize: ScreenSize = 'unknown';
|
|
55
43
|
|
|
56
|
-
pollingInterval: number = DEFAULT_POLLING_INTERVAL;
|
|
57
|
-
|
|
58
|
-
pollingTimeout: number = DEFAULT_POLLING_TIMEOUT;
|
|
59
|
-
|
|
60
|
-
imageTimeout: number = 0;
|
|
61
|
-
|
|
62
|
-
isOffline: boolean = false;
|
|
63
|
-
|
|
64
|
-
subscriptionFeaturesConfiguration: SubscriptionFeaturesConfiguration = {
|
|
65
|
-
purchase: false,
|
|
66
|
-
management: false,
|
|
67
|
-
};
|
|
68
|
-
|
|
69
44
|
// MARK: Initialization
|
|
70
45
|
|
|
71
46
|
/**
|
|
@@ -77,7 +52,6 @@ export abstract class DeviceBase<
|
|
|
77
52
|
if (!this.isInitialized) {
|
|
78
53
|
this.bindPreventDefaultEvents(rootElement);
|
|
79
54
|
const initializer = await this.internalInit();
|
|
80
|
-
this.checkNetworkConnection();
|
|
81
55
|
this.isInitialized = true;
|
|
82
56
|
return initializer;
|
|
83
57
|
}
|
|
@@ -97,46 +71,6 @@ export abstract class DeviceBase<
|
|
|
97
71
|
return this.initializer;
|
|
98
72
|
}
|
|
99
73
|
|
|
100
|
-
doOnlineCheck = () => {
|
|
101
|
-
const protocol = window.location.protocol === 'http:' ? 'http:' : 'https:';
|
|
102
|
-
const tester = new Image();
|
|
103
|
-
this.imageTimeout = window.setTimeout(() => {
|
|
104
|
-
this.connectionNotFound();
|
|
105
|
-
}, this.pollingTimeout || DEFAULT_POLLING_TIMEOUT);
|
|
106
|
-
tester.onload = this.connectionFound;
|
|
107
|
-
tester.onerror = this.connectionNotFound;
|
|
108
|
-
tester.src = `${protocol}${CHECKED_URL}?ts=${Date.now()}`;
|
|
109
|
-
};
|
|
110
|
-
|
|
111
|
-
connectionFound = () => {
|
|
112
|
-
window.clearTimeout(this.imageTimeout);
|
|
113
|
-
if (!this.isOffline) return;
|
|
114
|
-
this.triggerEvent('networkchange',
|
|
115
|
-
{ isConnected: true } as any);
|
|
116
|
-
this.isOffline = false;
|
|
117
|
-
};
|
|
118
|
-
|
|
119
|
-
connectionNotFound = () => {
|
|
120
|
-
window.clearTimeout(this.imageTimeout);
|
|
121
|
-
if (this.isOffline) return;
|
|
122
|
-
this.triggerEvent('networkchange',
|
|
123
|
-
{ isConnected: false } as any);
|
|
124
|
-
this.isOffline = true;
|
|
125
|
-
};
|
|
126
|
-
|
|
127
|
-
checkNetworkConnection() {
|
|
128
|
-
const networkConfig: any = config.get('network.checkConnection');
|
|
129
|
-
this.pollingInterval = Number(networkConfig?.pollingInterval);
|
|
130
|
-
this.pollingTimeout = Number(networkConfig?.pollingTimeout);
|
|
131
|
-
const enableCheckNetwork: any = Boolean(networkConfig?.enableCheckNetwork) ?? false;
|
|
132
|
-
if (enableCheckNetwork) {
|
|
133
|
-
window.setInterval(
|
|
134
|
-
this.doOnlineCheck,
|
|
135
|
-
this.pollingInterval || DEFAULT_POLLING_INTERVAL,
|
|
136
|
-
);
|
|
137
|
-
}
|
|
138
|
-
}
|
|
139
|
-
|
|
140
74
|
// MARK: Interface implemented by individual platform-specific drivers
|
|
141
75
|
|
|
142
76
|
abstract initDevice(): Promise<void>;
|
|
@@ -163,10 +97,6 @@ export abstract class DeviceBase<
|
|
|
163
97
|
|
|
164
98
|
abstract getUuid(): Promise<string>;
|
|
165
99
|
|
|
166
|
-
abstract getAdInfo(): Promise<AdInfo>;
|
|
167
|
-
|
|
168
|
-
abstract getOsLanguage(): Promise<string>;
|
|
169
|
-
|
|
170
100
|
abstract getVolume(): Promise<number>;
|
|
171
101
|
|
|
172
102
|
abstract setVolume(volumePercentage: number): Promise<void>;
|
|
@@ -189,10 +119,6 @@ export abstract class DeviceBase<
|
|
|
189
119
|
|
|
190
120
|
abstract getMacAddress(): Promise<string>;
|
|
191
121
|
|
|
192
|
-
abstract purchaseProduct(data: IAPPurchaseProductData): Promise<IAPSuccessPayload>;
|
|
193
|
-
|
|
194
|
-
abstract cancelSubscription(data: IAPPurchaseProductData): Promise<void>;
|
|
195
|
-
|
|
196
122
|
// MARK: Private functions
|
|
197
123
|
|
|
198
124
|
private bindPreventDefaultEvents(rootElement: HTMLElement) {
|
|
@@ -279,7 +205,7 @@ export abstract class DeviceBase<
|
|
|
279
205
|
}
|
|
280
206
|
|
|
281
207
|
isBackOrEscape(event: MouseEvent | KeyboardEvent) {
|
|
282
|
-
return BACK.is(event as KeyboardEvent)
|
|
208
|
+
return BACK.is(event as KeyboardEvent);
|
|
283
209
|
}
|
|
284
210
|
|
|
285
211
|
getDeviceClass() : string {
|
|
@@ -291,8 +217,4 @@ export abstract class DeviceBase<
|
|
|
291
217
|
isMouseUsed() {
|
|
292
218
|
return this.isMouseActive;
|
|
293
219
|
}
|
|
294
|
-
|
|
295
|
-
getResolution() {
|
|
296
|
-
return { width: window.screen?.width, height: window.screen?.height };
|
|
297
|
-
}
|
|
298
220
|
}
|
|
@@ -12,25 +12,21 @@ export class Key {
|
|
|
12
12
|
|
|
13
13
|
alternativeKeyCodes: number[];
|
|
14
14
|
|
|
15
|
-
key: string;
|
|
16
|
-
|
|
17
15
|
constructor({
|
|
18
16
|
id,
|
|
19
17
|
code = '',
|
|
20
18
|
keyCode = 0,
|
|
21
19
|
alternativeCodes = [],
|
|
22
20
|
alternativeKeyCodes = [],
|
|
23
|
-
key = '',
|
|
24
21
|
}: Partial<KeyConfig> = {}) {
|
|
25
22
|
this.id = id!;
|
|
26
23
|
this.code = code;
|
|
27
24
|
this.keyCode = keyCode;
|
|
28
25
|
this.alternativeCodes = alternativeCodes;
|
|
29
26
|
this.alternativeKeyCodes = alternativeKeyCodes;
|
|
30
|
-
this.key = key;
|
|
31
27
|
}
|
|
32
28
|
|
|
33
|
-
is({ keyCode, code
|
|
29
|
+
is({ keyCode, code }: KeyboardEvent) {
|
|
34
30
|
return Boolean(
|
|
35
31
|
code && ( // empty string code means unknown/invalid --> should not compare
|
|
36
32
|
code === this.code
|
|
@@ -39,9 +35,6 @@ export class Key {
|
|
|
39
35
|
|| keyCode && ( // keyCode 0 means unknown/invalid --> should not compare
|
|
40
36
|
keyCode === this.keyCode
|
|
41
37
|
|| this.alternativeKeyCodes.length && includes(this.alternativeKeyCodes, keyCode)
|
|
42
|
-
)
|
|
43
|
-
|| key && ( // empty string code means unknown/invalid --> should not compare
|
|
44
|
-
key === this.key
|
|
45
38
|
),
|
|
46
39
|
);
|
|
47
40
|
}
|