Skip to content

Commit 56c771a

Browse files
authored
Merge pull request #56 from LonelyCpp/fs-callback
Full screen callback on android
2 parents 62e277d + 23f745d commit 56c771a

File tree

5 files changed

+33
-1
lines changed

5 files changed

+33
-1
lines changed

doc/readme.md

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@
1212
onChangeState={event => console.log(event)}
1313
onReady={() => console.log("ready")}
1414
onError={e => console.log(e)}
15+
onFullScreenChange={status => console.log(status)}
1516
onPlaybackQualityChange={q => console.log(q)}
1617
volume={50}
1718
playbackRate={1}
@@ -37,6 +38,7 @@
3738
- [onChangeState](#onChangeState)
3839
- [onReady](#onReady)
3940
- [onError](#onError)
41+
- [onFullScreenChange](#onFullScreenChange)
4042
- [onPlaybackQualityChange](#onPlaybackQualityChange)
4143
- [mute](#mute)
4244
- [volume](#volume)
@@ -192,6 +194,16 @@ Possible values are:
192194
| video_not_found | The video requested was not found. This error occurs when a video has been removed (for any reason) or has been marked as private. |
193195
| embed_not_allowed | The owner of the requested video does not allow it to be played in embedded players. |
194196

197+
## onFullScreenChange
198+
199+
**_function(status: boolean)_**
200+
201+
**note: android only, see `issue #45` for work on ios support**
202+
203+
This event fires whenever the fullscreen option is clicked in the player.
204+
205+
The data value that the API passes to the event listener function will be a boolean that identifies the new fullscreen status.
206+
195207
## onPlaybackQualityChange
196208

197209
**_function(quality: string)_**

index.d.ts

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -102,6 +102,10 @@ export interface YoutubeIframeProps {
102102
* callback for when the player's state changes.
103103
*/
104104
onChangeState?: (event: String) => void;
105+
/**
106+
* callback for when the fullscreen option is clicked in the player. It signals the new fullscreen state of the player.
107+
*/
108+
onFullScreenChange?: (status: Boolean) => void;
105109
/**
106110
* callback for when the video playback quality changes. It might signal a change in the viewer's playback environment.
107111
*/

readme.md

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -54,6 +54,7 @@ const [playing, setPlaying] = useState(true);
5454
onChangeState={event => console.log(event)}
5555
onReady={() => console.log("ready")}
5656
onError={e => console.log(e)}
57+
onFullScreenChange={status => console.log(status)}
5758
onPlaybackQualityChange={q => console.log(q)}
5859
volume={50}
5960
playbackRate={1}
@@ -79,6 +80,7 @@ list of available APIs -
7980
- onChangeState
8081
- onReady
8182
- onError
83+
- onFullScreenChange
8284
- onPlaybackQualityChange
8385
- mute
8486
- volume

src/PlayerScripts.js

Lines changed: 11 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -98,7 +98,6 @@ export const MAIN_SCRIPT = (
9898
var firstScriptTag = document.getElementsByTagName('script')[0];
9999
firstScriptTag.parentNode.insertBefore(tag, firstScriptTag);
100100
101-
102101
var player;
103102
function onYouTubeIframeAPIReady() {
104103
player = new YT.Player('player', {
@@ -152,6 +151,17 @@ export const MAIN_SCRIPT = (
152151
function onPlayerStateChange(event) {
153152
window.ReactNativeWebView.postMessage(JSON.stringify({eventType: 'playerStateChange', data: event.data}))
154153
}
154+
155+
var isFullScreen = false;
156+
function onFullScreenChange() {
157+
isFullScreen = document.fullscreenElement || document.mozFullScreenElement || document.webkitFullscreenElement || document.msFullscreenElement;
158+
window.ReactNativeWebView.postMessage(JSON.stringify({eventType: 'fullScreenChange', data: Boolean(isFullScreen)}));
159+
}
160+
161+
document.addEventListener('fullscreenchange', onFullScreenChange)
162+
document.addEventListener('mozfullscreenchange', onFullScreenChange)
163+
document.addEventListener('msfullscreenchange', onFullScreenChange)
164+
document.addEventListener('webkitfullscreenchange', onFullScreenChange)
155165
</script>
156166
</body>
157167
</html>`;

src/YoutubeIframe.js

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,7 @@ const YoutubeIframe = (
3131
allowWebViewZoom = false,
3232
forceAndroidAutoplay = false,
3333
onChangeState = _event => {},
34+
onFullScreenChange = _status => {},
3435
onPlaybackQualityChange = _quality => {},
3536
onPlaybackRateChange = _playbackRate => {},
3637
},
@@ -117,6 +118,9 @@ const YoutubeIframe = (
117118
const message = JSON.parse(event.nativeEvent.data);
118119
try {
119120
switch (message.eventType) {
121+
case 'fullScreenChange':
122+
onFullScreenChange(message.data);
123+
break;
120124
case 'playerStateChange':
121125
onChangeState(PLAYER_STATES[message.data]);
122126
break;

0 commit comments

Comments
 (0)