UNPKG

bitmovin-player-ui

Version:
73 lines (59 loc) 2.24 kB
import { ToggleButton, ToggleButtonConfig } from './ToggleButton'; import { UIInstanceManager } from '../../UIManager'; import { PlayerAPI } from 'bitmovin-player'; import { i18n } from '../../localization/i18n'; /** * A button that toggles Apple macOS picture-in-picture mode. * * @category Buttons */ export class PictureInPictureToggleButton extends ToggleButton<ToggleButtonConfig> { constructor(config: ToggleButtonConfig = {}) { super(config); this.config = this.mergeConfig( config, { cssClass: 'ui-piptogglebutton', text: i18n.getLocalizer('pictureInPicture'), }, this.config, ); } configure(player: PlayerAPI, uimanager: UIInstanceManager): void { super.configure(player, uimanager); const isPictureInPictureAvailable = () => { return player.isViewModeAvailable(player.exports.ViewMode.PictureInPicture); }; const pictureInPictureStateHandler = () => { player.getViewMode() === player.exports.ViewMode.PictureInPicture ? this.on() : this.off(); }; const pictureInPictureAvailabilityChangedHandler = () => { isPictureInPictureAvailable() ? this.show() : this.hide(); }; player.on(player.exports.PlayerEvent.ViewModeChanged, pictureInPictureStateHandler); // Available only in our native SDKs for now if ((player.exports.PlayerEvent as any).ViewModeAvailabilityChanged) { player.on( (player.exports.PlayerEvent as any).ViewModeAvailabilityChanged, pictureInPictureAvailabilityChangedHandler, ); } uimanager.getConfig().events.onUpdated.subscribe(pictureInPictureAvailabilityChangedHandler); this.onClick.subscribe(() => { if (!isPictureInPictureAvailable()) { if (console) { console.log('PIP unavailable'); } return; } const targetViewMode = player.getViewMode() === player.exports.ViewMode.PictureInPicture ? player.exports.ViewMode.Inline : player.exports.ViewMode.PictureInPicture; player.setViewMode(targetViewMode); }); // Startup init pictureInPictureAvailabilityChangedHandler(); // Hide button if PIP not available pictureInPictureStateHandler(); } }