Summary
Several RN events are declared in the TypeScript API and fire on iOS, but the Android bridge either has an empty SDK-delegate stub or never wires the SDK callback at all. The JS listener never fires on Android as a result.
Discovered during 1.5.0 QA by instrumenting every listener on TypeScriptExample.tsx and diffing iOS vs. Android payloads. None of these are regressions from 1.4.1 — they are long-standing gaps.
Empty SDK-delegate stubs (easy wins)
The Android bridge overrides the SDK callback but the method body is empty, so nothing is emitted:
| Android SDK callback |
File / line |
TS event it should feed |
onIdle(IdleEvent) |
RNJWPlayerView.java:2058 |
onIdle |
onDisplayClick(DisplayClickEvent) |
RNJWPlayerView.java:2000 |
onScreenTapped |
onControls(ControlsEvent) |
RNJWPlayerView.java:1995 |
possibly onControlBarVisible (already wired from a different callback — may be redundant) |
onAdViewableImpression(AdViewableImpressionEvent) |
RNJWPlayerView.java:1893 |
could feed onAdEvent with a new type |
onAudioTrackChanged(AudioTrackChangedEvent) |
RNJWPlayerView.java:1928 |
not yet in TS — would be a new event |
onPipOpen(PipOpenEvent) / onPipClose(PipCloseEvent) |
RNJWPlayerView.java:2207/:2212 |
not yet in TS — would be new events |
onMeta(MetaEvent) |
RNJWPlayerView.java:2200 |
not in TS |
Zero emissions on Android (SDK hook not wired at all)
These TS events are fully wired on iOS (see references) but the Android bridge has no matching SDK-delegate registration:
| TS event |
iOS source |
Android status |
onPlayerWarning |
RNJWPlayerView.swift:1668 |
not wired |
onScreenTapped |
RNJWPlayerView.swift:1734 |
empty onDisplayClick stub (see above) |
onUpdateBuffer |
RNJWPlayerView.swift:1950 |
not wired (Android SDK exposes BufferChangeEvent) |
onAttemptPlay |
RNJWPlayerView.swift:1958 |
not wired |
onIdle |
RNJWPlayerView.swift:1981 |
empty stub (see above) |
onVisible |
RNJWPlayerView.swift:1985 |
not wired |
onPlayerSizeChange |
RNJWPlayerView.swift:1701,:1727 |
not wired |
Some of these (onVisible, onPlayerSizeChange, onAttemptPlay) may not have a direct Android SDK delegate and would need to be synthesized from lifecycle / view hooks, like iOS does for onVisible via view attachment.
Related findings (deferred separately)
- iOS
onUpdateBuffer.position always null — bridge bug at RNJWPlayerView.swift:1950.
- iOS
onPlayerSizeChange.sizes always null — bridge bug at RNJWPlayerView.swift:1701 / :1727.
- Android emits an extra
"message": "<eventName>" field on every event that iOS does not. Consumer-visible; strip separately.
- Minor
onCaptionsList divergence: Android tracks have an extra file key (internal refs like "1/8219"), index 0 for Off vs iOS -1.
Acceptance
Summary
Several RN events are declared in the TypeScript API and fire on iOS, but the Android bridge either has an empty SDK-delegate stub or never wires the SDK callback at all. The JS listener never fires on Android as a result.
Discovered during 1.5.0 QA by instrumenting every listener on
TypeScriptExample.tsxand diffing iOS vs. Android payloads. None of these are regressions from 1.4.1 — they are long-standing gaps.Empty SDK-delegate stubs (easy wins)
The Android bridge overrides the SDK callback but the method body is empty, so nothing is emitted:
onIdle(IdleEvent)RNJWPlayerView.java:2058onIdleonDisplayClick(DisplayClickEvent)RNJWPlayerView.java:2000onScreenTappedonControls(ControlsEvent)RNJWPlayerView.java:1995onControlBarVisible(already wired from a different callback — may be redundant)onAdViewableImpression(AdViewableImpressionEvent)RNJWPlayerView.java:1893onAdEventwith a newtypeonAudioTrackChanged(AudioTrackChangedEvent)RNJWPlayerView.java:1928onPipOpen(PipOpenEvent)/onPipClose(PipCloseEvent)RNJWPlayerView.java:2207/:2212onMeta(MetaEvent)RNJWPlayerView.java:2200Zero emissions on Android (SDK hook not wired at all)
These TS events are fully wired on iOS (see references) but the Android bridge has no matching SDK-delegate registration:
onPlayerWarningRNJWPlayerView.swift:1668onScreenTappedRNJWPlayerView.swift:1734onDisplayClickstub (see above)onUpdateBufferRNJWPlayerView.swift:1950BufferChangeEvent)onAttemptPlayRNJWPlayerView.swift:1958onIdleRNJWPlayerView.swift:1981onVisibleRNJWPlayerView.swift:1985onPlayerSizeChangeRNJWPlayerView.swift:1701,:1727Some of these (
onVisible,onPlayerSizeChange,onAttemptPlay) may not have a direct Android SDK delegate and would need to be synthesized from lifecycle / view hooks, like iOS does foronVisiblevia view attachment.Related findings (deferred separately)
onUpdateBuffer.positionalwaysnull— bridge bug atRNJWPlayerView.swift:1950.onPlayerSizeChange.sizesalwaysnull— bridge bug atRNJWPlayerView.swift:1701/:1727."message": "<eventName>"field on every event that iOS does not. Consumer-visible; strip separately.onCaptionsListdivergence: Android tracks have an extrafilekey (internal refs like"1/8219"), index0for Off vs iOS-1.Acceptance