@applicaster/zapp-react-native-utils 12.0.0-alpha.5895113034 → 12.0.0-alpha.6115034951
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/analyticsUtils/AnalyticsEvents/index.ts +7 -0
- package/analyticsUtils/AnalyticsEvents/sendShareEvent.ts +21 -0
- package/analyticsUtils/{playerAnalyticsTracker.ts → analyticsTracker.ts} +10 -19
- package/analyticsUtils/events.ts +6 -0
- package/analyticsUtils/index.tsx +6 -0
- package/appUtils/focusManager/__tests__/__snapshots__/focusManager.test.js.snap +2 -3
- package/appUtils/focusManager/__tests__/focusManager.test.js +4 -24
- package/appUtils/focusManager/__tests__/index.test.ts +2 -3
- package/appUtils/focusManager/index.ts +76 -56
- package/appUtils/focusManager/treeDataStructure/Utils/index.js +75 -44
- package/appUtils/focusManager/utils/index.ts +100 -0
- package/appUtils/focusManagerAux/index.ts +76 -0
- package/appUtils/focusManagerAux/utils/index.ts +100 -0
- package/appUtils/keyCodes/keys.web.js +8 -0
- package/appUtils/keyCodes/keysByPlatform.js +11 -1
- package/appUtils/platform/const.ts +25 -0
- package/appUtils/platform/index.ts +3 -0
- package/appUtils/platform/platformUtils.ts +223 -0
- package/appUtils/playerManager/conts.ts +1 -0
- package/appUtils/playerManager/index.ts +38 -14
- package/appUtils/playerManager/nativePlayerManager.ts +12 -0
- package/appUtils/playerManager/player.ts +13 -16
- package/appUtils/playerManager/playerNative.ts +6 -16
- package/appUtils/playerManager/usePlayerControllerSetup.tsx +3 -17
- package/arrayUtils/__tests__/isFilledArray.test.ts +63 -0
- package/arrayUtils/index.ts +5 -0
- package/booleanUtils/index.ts +4 -4
- package/keyboardState/index.ts +0 -0
- package/navigationUtils/index.ts +48 -0
- package/numberUtils/__tests__/isLikeNumber.test.ts +18 -0
- package/numberUtils/index.ts +5 -18
- package/package.json +2 -2
- package/pluginUtils/index.ts +9 -0
- package/reactHooks/cell-click/__tests__/index.test.js +9 -5
- package/reactHooks/cell-click/index.ts +11 -11
- package/reactHooks/feed/__tests__/useBuildPipesUrl.test.tsx +30 -70
- package/reactHooks/feed/__tests__/useFeedRefresh.test.tsx +6 -2
- package/reactHooks/feed/useBuildPipesUrl.ts +7 -10
- package/reactHooks/feed/useFeedRefresh.tsx +9 -7
- package/reactHooks/navigation/index.ts +44 -7
- package/reactHooks/player/__tests__/useAutoSeek.test.tsx +1 -8
- package/reactHooks/player/useAutoSeek.tsx +8 -28
- package/reactHooks/player/useSeek.tsx +2 -4
- package/reactHooks/player/useTapSeek.tsx +7 -34
- package/reactHooks/screen/__tests__/useCurrentScreenData.test.tsx +21 -23
- package/reactHooks/screen/index.ts +2 -0
- package/reactHooks/screen/useScreenBackgroundColor.ts +23 -0
- package/reactHooks/screen/useScreenContext.ts +1 -2
- package/reactUtils/index.ts +102 -0
- package/analyticsUtils/AnalyticPlayerListener.ts +0 -155
- package/analyticsUtils/PlayerAnalyticsManager.ts +0 -90
- package/appUtils/focusManager/FocusableEvents.ts +0 -8
- package/appUtils/focusManager/treeDataStructure/Utils/__tests__/Utils_android.test.js +0 -1094
- package/appUtils/focusManager/treeDataStructure/Utils/index.android.js +0 -261
- package/appUtils/playerManager/DelayedSeekPlayerWrapper.tsx +0 -179
|
@@ -1,155 +0,0 @@
|
|
|
1
|
-
import { PlayerAnalyticsTracker } from "./playerAnalyticsTracker";
|
|
2
|
-
import { Player } from "../appUtils/playerManager/player";
|
|
3
|
-
import { AD_EVENT, GENERAL_EVENT, PLAYBACK_EVENT, QOS_EVENT } from "./events";
|
|
4
|
-
|
|
5
|
-
type Props = {
|
|
6
|
-
analyticsTracker: any;
|
|
7
|
-
player: any;
|
|
8
|
-
};
|
|
9
|
-
|
|
10
|
-
/* eslint brace-style: 0 */ // --> OFF
|
|
11
|
-
export class AnalyticPlayerListener
|
|
12
|
-
implements QuickBrickPlayer.SharedPlayerCallBacks
|
|
13
|
-
{
|
|
14
|
-
static analyticsListenerID = "analytics-listener";
|
|
15
|
-
private analyticsTracker: PlayerAnalyticsTracker;
|
|
16
|
-
private player: Player;
|
|
17
|
-
|
|
18
|
-
private onVideoLoadCalled; // android only
|
|
19
|
-
|
|
20
|
-
constructor(props: Props) {
|
|
21
|
-
this.analyticsTracker = props.analyticsTracker;
|
|
22
|
-
this.player = props.player;
|
|
23
|
-
}
|
|
24
|
-
|
|
25
|
-
handleAnalyticEvent = (event, data = {}) => {
|
|
26
|
-
if (this.analyticsTracker?.handleAnalyticEvent) {
|
|
27
|
-
this.analyticsTracker?.handleAnalyticEvent?.(event, {
|
|
28
|
-
...data,
|
|
29
|
-
player_type: this.player.playerPluginId,
|
|
30
|
-
});
|
|
31
|
-
}
|
|
32
|
-
};
|
|
33
|
-
|
|
34
|
-
onVideoEnd = () => {
|
|
35
|
-
this.handleAnalyticEvent(PLAYBACK_EVENT.complete);
|
|
36
|
-
};
|
|
37
|
-
|
|
38
|
-
onError = (err: Error) => {
|
|
39
|
-
this.handleAnalyticEvent(PLAYBACK_EVENT.error, err); // TODO: Check error format
|
|
40
|
-
};
|
|
41
|
-
|
|
42
|
-
// HACK: This is a hack to ignore the next resume event after a delayed seek
|
|
43
|
-
private ignoreNextResume = false;
|
|
44
|
-
onLoad = () => {
|
|
45
|
-
this.ignoreNextResume = false;
|
|
46
|
-
}
|
|
47
|
-
|
|
48
|
-
onPlayerPause = (event) => {
|
|
49
|
-
if (!this.player.isInDelayedSeek()) {
|
|
50
|
-
this.handleAnalyticEvent(PLAYBACK_EVENT.pause, event);
|
|
51
|
-
} else {
|
|
52
|
-
this.ignoreNextResume = true;
|
|
53
|
-
}
|
|
54
|
-
};
|
|
55
|
-
|
|
56
|
-
onPlayerResume = (event) => {
|
|
57
|
-
if (!this.player.isInDelayedSeek() && !this.ignoreNextResume) {
|
|
58
|
-
this.handleAnalyticEvent(PLAYBACK_EVENT.play, event);
|
|
59
|
-
} else {
|
|
60
|
-
this.ignoreNextResume = false;
|
|
61
|
-
}
|
|
62
|
-
};
|
|
63
|
-
|
|
64
|
-
onPlayerSeekComplete = (event) => {
|
|
65
|
-
this.handleAnalyticEvent(PLAYBACK_EVENT.seek_complete, event);
|
|
66
|
-
};
|
|
67
|
-
|
|
68
|
-
onPlayerSeekStart = (event) => {
|
|
69
|
-
this.handleAnalyticEvent(PLAYBACK_EVENT.seek_start, event);
|
|
70
|
-
};
|
|
71
|
-
|
|
72
|
-
onBufferStart = (event) => {
|
|
73
|
-
this.handleAnalyticEvent(PLAYBACK_EVENT.buffer_start, event);
|
|
74
|
-
};
|
|
75
|
-
|
|
76
|
-
onBufferComplete = (event) => {
|
|
77
|
-
this.handleAnalyticEvent(PLAYBACK_EVENT.buffer_complete, event);
|
|
78
|
-
};
|
|
79
|
-
|
|
80
|
-
// Not implemented
|
|
81
|
-
onPlayerStop = (event) => {
|
|
82
|
-
this.handleAnalyticEvent(PLAYBACK_EVENT.stop, event);
|
|
83
|
-
};
|
|
84
|
-
|
|
85
|
-
// TODO: Implement method on native
|
|
86
|
-
onVideoBandwidthUpdate = (event) => {
|
|
87
|
-
this.handleAnalyticEvent(QOS_EVENT.bitrate_changed, event);
|
|
88
|
-
};
|
|
89
|
-
|
|
90
|
-
onAdBegin = (event) => {
|
|
91
|
-
this.handleAnalyticEvent(AD_EVENT.ad_start, event);
|
|
92
|
-
};
|
|
93
|
-
|
|
94
|
-
onAdBreakBegin = (event) => {
|
|
95
|
-
this.handleAnalyticEvent(AD_EVENT.ad_break_start, event);
|
|
96
|
-
};
|
|
97
|
-
|
|
98
|
-
onAdBreakEnd = (event) => {
|
|
99
|
-
this.handleAnalyticEvent(AD_EVENT.ad_break_completed, event);
|
|
100
|
-
};
|
|
101
|
-
|
|
102
|
-
onAdEnd = (event) => {
|
|
103
|
-
this.handleAnalyticEvent(AD_EVENT.ad_complete, event);
|
|
104
|
-
};
|
|
105
|
-
|
|
106
|
-
onAdError = (event) => {
|
|
107
|
-
this.handleAnalyticEvent(AD_EVENT.ad_error, event);
|
|
108
|
-
};
|
|
109
|
-
|
|
110
|
-
onAdRequest = (event) => {
|
|
111
|
-
this.handleAnalyticEvent(AD_EVENT.ad_request, event);
|
|
112
|
-
};
|
|
113
|
-
|
|
114
|
-
onAdClicked = (event) => {
|
|
115
|
-
this.handleAnalyticEvent(AD_EVENT.ad_clicked, event);
|
|
116
|
-
};
|
|
117
|
-
|
|
118
|
-
onAdTapped = (event) => {
|
|
119
|
-
this.handleAnalyticEvent(AD_EVENT.ad_tapped, event);
|
|
120
|
-
};
|
|
121
|
-
|
|
122
|
-
onVideoLoad = () => {
|
|
123
|
-
// if (!this.state.isAd && !this.onVideoLoadCalled) {
|
|
124
|
-
if (!this.player.isAd() && !this.onVideoLoadCalled) {
|
|
125
|
-
this.onVideoLoadCalled = true;
|
|
126
|
-
|
|
127
|
-
this.handleAnalyticEvent(PLAYBACK_EVENT.load_video, {
|
|
128
|
-
player_type: this.player.playerPluginId,
|
|
129
|
-
});
|
|
130
|
-
}
|
|
131
|
-
};
|
|
132
|
-
|
|
133
|
-
onPlayerSessionEnd = () => {
|
|
134
|
-
// TODO: Implement method on native android, ios exists
|
|
135
|
-
this.handleAnalyticEvent(GENERAL_EVENT.session_end);
|
|
136
|
-
};
|
|
137
|
-
|
|
138
|
-
onPlayerSessionStart = () => {
|
|
139
|
-
// TODO: Implement method on native android, ios exists
|
|
140
|
-
|
|
141
|
-
this.handleAnalyticEvent(GENERAL_EVENT.session_start);
|
|
142
|
-
};
|
|
143
|
-
|
|
144
|
-
onPlayerNext = ({ nativeEvent }) => {
|
|
145
|
-
// TODO: Implement method on native
|
|
146
|
-
|
|
147
|
-
this.handleAnalyticEvent(PLAYBACK_EVENT.next, nativeEvent);
|
|
148
|
-
};
|
|
149
|
-
|
|
150
|
-
onPlayerPrevious = ({ nativeEvent }) => {
|
|
151
|
-
// TODO: Implement method on native
|
|
152
|
-
|
|
153
|
-
this.handleAnalyticEvent(PLAYBACK_EVENT.previous, nativeEvent);
|
|
154
|
-
};
|
|
155
|
-
}
|
|
@@ -1,90 +0,0 @@
|
|
|
1
|
-
import {
|
|
2
|
-
PlayerAnalyticsTracker,
|
|
3
|
-
PlayerAnalyticsTrackerI,
|
|
4
|
-
} from "./playerAnalyticsTracker";
|
|
5
|
-
import {
|
|
6
|
-
PlayerLifecycleListener,
|
|
7
|
-
PlayerManager,
|
|
8
|
-
} from "../appUtils/playerManager";
|
|
9
|
-
import { Player } from "../appUtils/playerManager/player";
|
|
10
|
-
import { AnalyticPlayerListener } from "./AnalyticPlayerListener";
|
|
11
|
-
import { PlayerRole } from "../appUtils/playerManager/conts";
|
|
12
|
-
|
|
13
|
-
enum PlayerAnalyticsTrackerType {
|
|
14
|
-
PlayerAnalyticsTracker = "PlayerAnalyticsTracker",
|
|
15
|
-
}
|
|
16
|
-
|
|
17
|
-
class PlayerAnalyticsTrackerFactory {
|
|
18
|
-
createTracker(type: PlayerAnalyticsTrackerType) {
|
|
19
|
-
switch (type) {
|
|
20
|
-
case PlayerAnalyticsTrackerType.PlayerAnalyticsTracker:
|
|
21
|
-
return new PlayerAnalyticsTracker();
|
|
22
|
-
default:
|
|
23
|
-
return new PlayerAnalyticsTracker();
|
|
24
|
-
}
|
|
25
|
-
}
|
|
26
|
-
}
|
|
27
|
-
|
|
28
|
-
export class PlayerAnalyticsManager implements PlayerLifecycleListener {
|
|
29
|
-
static instance: PlayerAnalyticsManager;
|
|
30
|
-
private trackers: Record<string, PlayerAnalyticsTrackerI> = {};
|
|
31
|
-
private trackerFactory: PlayerAnalyticsTrackerFactory;
|
|
32
|
-
|
|
33
|
-
public getTracker(
|
|
34
|
-
id: string,
|
|
35
|
-
type: PlayerAnalyticsTrackerType = PlayerAnalyticsTrackerType.PlayerAnalyticsTracker
|
|
36
|
-
): PlayerAnalyticsTrackerI {
|
|
37
|
-
if (!this.trackers[id]) {
|
|
38
|
-
this.trackers[id] = this.trackerFactory.createTracker(type);
|
|
39
|
-
}
|
|
40
|
-
|
|
41
|
-
return this.trackers[id];
|
|
42
|
-
}
|
|
43
|
-
|
|
44
|
-
constructor(trackerFactory: PlayerAnalyticsTrackerFactory) {
|
|
45
|
-
this.trackerFactory = trackerFactory;
|
|
46
|
-
this.startListenPlayerManager();
|
|
47
|
-
}
|
|
48
|
-
|
|
49
|
-
static getInstance(
|
|
50
|
-
trackerFactory: PlayerAnalyticsTrackerFactory = new PlayerAnalyticsTrackerFactory()
|
|
51
|
-
): PlayerAnalyticsManager {
|
|
52
|
-
if (!PlayerAnalyticsManager.instance) {
|
|
53
|
-
PlayerAnalyticsManager.instance = new PlayerAnalyticsManager(
|
|
54
|
-
trackerFactory
|
|
55
|
-
);
|
|
56
|
-
}
|
|
57
|
-
|
|
58
|
-
return PlayerAnalyticsManager.instance;
|
|
59
|
-
}
|
|
60
|
-
|
|
61
|
-
private startListenPlayerManager() {
|
|
62
|
-
PlayerManager.getInstance().addLifecycleListener(this);
|
|
63
|
-
}
|
|
64
|
-
|
|
65
|
-
// PlayerLifecycleListener
|
|
66
|
-
|
|
67
|
-
onRegistered = (player: Player) => {
|
|
68
|
-
if (player.playerRole !== PlayerRole.Primary) {
|
|
69
|
-
return;
|
|
70
|
-
}
|
|
71
|
-
|
|
72
|
-
const tracker = this.getTracker(player.playerId);
|
|
73
|
-
tracker.setPlayer(player);
|
|
74
|
-
|
|
75
|
-
const analyticsListener = new AnalyticPlayerListener({
|
|
76
|
-
analyticsTracker: tracker,
|
|
77
|
-
player,
|
|
78
|
-
});
|
|
79
|
-
|
|
80
|
-
player.addListener({
|
|
81
|
-
id: AnalyticPlayerListener.analyticsListenerID,
|
|
82
|
-
listener: analyticsListener,
|
|
83
|
-
});
|
|
84
|
-
};
|
|
85
|
-
|
|
86
|
-
onUnRegistered = (player: Player) => {
|
|
87
|
-
player.removeListener(AnalyticPlayerListener.analyticsListenerID);
|
|
88
|
-
delete this.trackers[player.playerId];
|
|
89
|
-
};
|
|
90
|
-
}
|