Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Adding full screen listener. #43

Closed
wants to merge 1 commit into from
Closed
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
15 changes: 15 additions & 0 deletions doc/readme.md
Original file line number Diff line number Diff line change
Expand Up @@ -13,6 +13,7 @@
onReady={() => console.log("ready")}
onError={e => console.log(e)}
onPlaybackQualityChange={q => console.log(q)}
onFullScreenChange={isFullScreen => console.log(isFullScreen)}
volume={50}
playbackRate={1}
initialPlayerParams={{
Expand All @@ -38,6 +39,7 @@
- [onReady](#onReady)
- [onError](#onError)
- [onPlaybackQualityChange](#onPlaybackQualityChange)
- [onFullScreenChange](#onFullScreenChange)
- [mute](#mute)
- [volume](#volume)
- [playbackRate](#playbackRate)
Expand All @@ -53,6 +55,7 @@
- [getDuration](#getDuration)
- [getCurrentTime](#getCurrentTime)
- [isMuted](#isMuted)
- [isFullScreen](#isFullScreen)
- [getVolume](#getVolume)
- [getPlaybackRate](#getPlaybackRate)
- [getAvailablePlaybackRates](#getAvailablePlaybackRates)
Expand Down Expand Up @@ -190,6 +193,12 @@ The data value that the API passes to the event listener function will be a stri
| hd1080 |
| highres |

## onFullScreenChange

**_function(isFullScreen: boolean)_**

This event fires whenever the video enters or leaves full screen.

## mute

**_Boolean_**
Expand Down Expand Up @@ -275,6 +284,8 @@ const App = () => {

playerRef.current.isMuted().then(isMuted => console.log({isMuted}));

playerRef.current.isFullScreen().then(isFullScreen => console.log({isFullScreen}));

playerRef.current.getVolume().then(getVolume => console.log({getVolume}));

playerRef.current.getPlaybackRate().then(getPlaybackRate => console.log({getPlaybackRate}));
Expand Down Expand Up @@ -304,6 +315,10 @@ returns a promise that resolves to the elapsed time in seconds since the video s

returns a promise that resolves to true if the video is muted, false if not.

## isFullScreen

returns a promise that resolves to true if the video is running in full screen, false if not.

## getVolume

returns a promise that resolves to the player's current volume, an integer between 0 and 100. Note that `getVolume()` will return the volume even if the player is muted.
Expand Down
4 changes: 4 additions & 0 deletions index.d.ts
Original file line number Diff line number Diff line change
Expand Up @@ -100,6 +100,10 @@ export interface YoutubeIframeProps {
* callback for when the video playback rate changes.
*/
onPlaybackRateChange?: (event: String) => void;
/**
* callback for when the video player enters or leaves full screen
*/
onFullScreenChange?: (quality: Boolean) => void;
/**
* Flag to decide whether or not a user can zoom the video webview.
*/
Expand Down
3 changes: 3 additions & 0 deletions readme.md
Original file line number Diff line number Diff line change
Expand Up @@ -55,6 +55,7 @@ const [playing, setPlaying] = useState(true);
onReady={() => console.log("ready")}
onError={e => console.log(e)}
onPlaybackQualityChange={q => console.log(q)}
onFullScreenChange={isFullScreen => console.log(isFullScreen)}
volume={50}
playbackRate={1}
initialPlayerParams={{
Expand All @@ -80,6 +81,7 @@ list of available APIs -
- onReady
- onError
- onPlaybackQualityChange
- onFullScreenChange
- mute
- volume
- playbackRate
Expand All @@ -94,6 +96,7 @@ list of available APIs -
- getDuration
- getCurrentTime
- isMuted
- isFullScreen
- getVolume
- getPlaybackRate
- getAvailablePlaybackRates
Expand Down
17 changes: 17 additions & 0 deletions src/PlayerScripts.js
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,10 @@ true;
isMutedScript: `
window.ReactNativeWebView.postMessage(JSON.stringify({eventType: 'isMuted', data: player.isMuted()}));
true;
`,
isFullScreenScript: `
window.ReactNativeWebView.postMessage(JSON.stringify({eventType: 'isFullScreen', data: !!(document.fullscreenElement && document.fullscreenElement.id === 'player')}));
true;
`,
getVolumeScript: `
window.ReactNativeWebView.postMessage(JSON.stringify({eventType: 'getVolume', data: player.getVolume()}));
Expand Down Expand Up @@ -130,6 +134,19 @@ export const MAIN_SCRIPT = (
'onPlaybackRateChange': onPlaybackRateChange,
}
});

// document.addEventListener('fullscreenchange', onFullScreenChange)
// document.addEventListener('msfullscreenchange', onFullScreenChange)
// document.addEventListener('mozfullscreenchange', onFullScreenChange)
document.addEventListener('webkitfullscreenchange', onFullScreenChange)
}

function onFullScreenChange(event) {
if (document.fullscreenElement && document.fullscreenElement.id === 'player') {
window.ReactNativeWebView.postMessage(JSON.stringify({eventType: 'playerFullScreenChange', data: true}))
} else {
window.ReactNativeWebView.postMessage(JSON.stringify({eventType: 'playerFullScreenChange', data: false}))
}
}

function onPlayerError(event) {
Expand Down
13 changes: 13 additions & 0 deletions src/YoutubeIframe.js
Original file line number Diff line number Diff line change
Expand Up @@ -31,6 +31,7 @@ const YoutubeIframe = (
allowWebViewZoom = false,
forceAndroidAutoplay = false,
onChangeState = _event => {},
onFullScreenChange = _isFullScreen => {},
onPlaybackQualityChange = _quality => {},
onPlaybackRateChange = _playbackRate => {},
},
Expand Down Expand Up @@ -61,6 +62,14 @@ const YoutubeIframe = (
eventEmitter.current.once('isMuted', resolve);
});
},
isFullScreen: () => {
webViewRef.current.injectJavaScript(
PLAYER_FUNCTIONS.isFullScreenScript,
);
return new Promise(resolve => {
eventEmitter.current.once('isFullScreen', resolve);
});
},
getVolume: () => {
webViewRef.current.injectJavaScript(PLAYER_FUNCTIONS.getVolumeScript);
return new Promise(resolve => {
Expand Down Expand Up @@ -142,6 +151,9 @@ const YoutubeIframe = (
case 'playbackRateChange':
onPlaybackRateChange(message.data);
break;
case 'playerFullScreenChange':
onFullScreenChange(message.data);
break;
default:
eventEmitter.current.emit(message.eventType, message.data);
break;
Expand All @@ -156,6 +168,7 @@ const YoutubeIframe = (
onPlaybackQualityChange,
onError,
onPlaybackRateChange,
onFullScreenChange,
playListStartIndex,
playList,
play,
Expand Down