bitmovin-player-react-native
Version:
Official React Native bindings for Bitmovin's mobile Player SDKs.
74 lines (64 loc) • 2.04 kB
text/typescript
import { NativeModules } from 'react-native';
import BatchedBridge from 'react-native/Libraries/BatchedBridge/BatchedBridge';
import { FullscreenHandler } from './fullscreenhandler';
const Uuid = NativeModules.UuidModule;
const FullscreenHandlerModule = NativeModules.FullscreenHandlerModule;
/**
* Takes care of JS/Native communication for a FullscreenHandler.
*/
export class FullscreenHandlerBridge {
readonly nativeId: string;
fullscreenHandler?: FullscreenHandler;
isDestroyed: boolean;
constructor(nativeId?: string) {
this.nativeId = nativeId ?? Uuid.generate();
this.isDestroyed = false;
BatchedBridge.registerCallableModule(
`FullscreenBridge-${this.nativeId}`,
this
);
FullscreenHandlerModule.registerHandler(this.nativeId);
}
setFullscreenHandler(fullscreenHandler: FullscreenHandler | undefined) {
if (this.fullscreenHandler === fullscreenHandler) {
return;
}
this.fullscreenHandler = fullscreenHandler;
// synchronize current state from fullscreenHandler to native
FullscreenHandlerModule.setIsFullscreenActive(
this.nativeId,
fullscreenHandler?.isFullscreenActive ?? false
);
}
/**
* Destroys the native FullscreenHandler
*/
destroy() {
if (!this.isDestroyed) {
FullscreenHandlerModule.destroy(this.nativeId);
this.isDestroyed = true;
}
}
// noinspection JSUnusedGlobalSymbols
/**
* Called by native code, when the UI should enter fullscreen.
*/
enterFullscreen(): void {
this.fullscreenHandler?.enterFullscreen();
FullscreenHandlerModule.onFullscreenChanged(
this.nativeId,
this.fullscreenHandler?.isFullscreenActive ?? false
);
}
// noinspection JSUnusedGlobalSymbols
/**
* Called by native code, when the UI should exit fullscreen.
*/
exitFullscreen(): void {
this.fullscreenHandler?.exitFullscreen();
FullscreenHandlerModule.onFullscreenChanged(
this.nativeId,
this.fullscreenHandler?.isFullscreenActive ?? false
);
}
}