react-native-theoplayer 3.6.0 → 3.7.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (34) hide show
  1. package/CHANGELOG.md +6 -0
  2. package/README.md +1 -0
  3. package/android/src/main/java/com/theoplayer/presentation/PresentationManager.kt +41 -1
  4. package/ios/THEOplayerRCTMainEventHandler.swift +6 -24
  5. package/ios/THEOplayerRCTPlayerAPI.swift +3 -16
  6. package/ios/THEOplayerRCTTextTrackEventHandler.swift +0 -9
  7. package/ios/THEOplayerRCTTrackMetadataAggregator.swift +1 -1
  8. package/ios/THEOplayerRCTView.swift +12 -10
  9. package/ios/Theoplayer-Bridging-Header.h +1 -0
  10. package/ios/pip/THEOplayerRCTView+PipConfig.swift +2 -2
  11. package/ios/{THEOplayerRCTPresentationModeContext.swift → presentationMode/THEOplayerRCTPresentationModeContext.swift} +4 -8
  12. package/ios/presentationMode/THEOplayerRCTPresentationModeManager.swift +159 -0
  13. package/ios/presentationMode/THEOplayerRCTView+PresentationMode.swift +11 -0
  14. package/ios/{THEOplayerRCTSideloadedMetadataTrackHandler.swift → sideloadedMetadata/THEOplayerRCTSideloadedMetadataProcessor.swift} +14 -4
  15. package/ios/sideloadedMetadata/THEOplayerRCTSideloadedMetadataTrackEventHandler.swift +28 -0
  16. package/lib/commonjs/internal/THEOplayerView.js +24 -3
  17. package/lib/commonjs/internal/THEOplayerView.js.map +1 -1
  18. package/lib/commonjs/internal/adapter/THEOplayerAdapter.js +3 -0
  19. package/lib/commonjs/internal/adapter/THEOplayerAdapter.js.map +1 -1
  20. package/lib/commonjs/internal/utils/Dimensions.js +31 -0
  21. package/lib/commonjs/internal/utils/Dimensions.js.map +1 -0
  22. package/lib/module/internal/THEOplayerView.js +26 -5
  23. package/lib/module/internal/THEOplayerView.js.map +1 -1
  24. package/lib/module/internal/adapter/THEOplayerAdapter.js +5 -2
  25. package/lib/module/internal/adapter/THEOplayerAdapter.js.map +1 -1
  26. package/lib/module/internal/utils/Dimensions.js +26 -0
  27. package/lib/module/internal/utils/Dimensions.js.map +1 -0
  28. package/lib/typescript/internal/THEOplayerView.d.ts +7 -1
  29. package/lib/typescript/internal/utils/Dimensions.d.ts +5 -0
  30. package/package.json +1 -1
  31. package/react-native-theoplayer.podspec +5 -5
  32. package/src/internal/THEOplayerView.tsx +25 -5
  33. package/src/internal/adapter/THEOplayerAdapter.ts +11 -7
  34. package/src/internal/utils/Dimensions.ts +24 -0
@@ -3,7 +3,8 @@ import type {
3
3
  ABRConfiguration,
4
4
  AdsAPI,
5
5
  CastAPI,
6
- DurationChangeEvent, EventBroadcastAPI,
6
+ DurationChangeEvent,
7
+ EventBroadcastAPI,
7
8
  LoadedMetadataEvent,
8
9
  MediaTrack,
9
10
  MediaTrackEvent,
@@ -45,10 +46,10 @@ import {
45
46
  import { THEOplayerNativeAdsAdapter } from './ads/THEOplayerNativeAdsAdapter';
46
47
  import { THEOplayerNativeCastAdapter } from './cast/THEOplayerNativeCastAdapter';
47
48
  import { AbrAdapter } from './abr/AbrAdapter';
48
- import { NativeModules, Platform } from 'react-native';
49
+ import { NativeModules, Platform, StatusBar } from 'react-native';
49
50
  import { TextTrackStyleAdapter } from './track/TextTrackStyleAdapter';
50
51
  import type { NativePlayerState } from './NativePlayerState';
51
- import { EventBroadcastAdapter } from "./broadcast/EventBroadcastAdapter";
52
+ import { EventBroadcastAdapter } from './broadcast/EventBroadcastAdapter';
52
53
 
53
54
  const defaultPlayerState: NativePlayerState = {
54
55
  source: undefined,
@@ -131,6 +132,9 @@ export class THEOplayerAdapter extends DefaultEventDispatcher<PlayerEventMap> im
131
132
 
132
133
  private onPresentationModeChange = (event: PresentationModeChangeEvent) => {
133
134
  this._state.presentationMode = event.presentationMode;
135
+ if (Platform.OS === 'ios') {
136
+ StatusBar.setHidden(event.presentationMode === PresentationMode.fullscreen, 'slide');
137
+ }
134
138
  };
135
139
 
136
140
  private onTimeupdate = (event: TimeUpdateEvent) => {
@@ -146,7 +150,7 @@ export class THEOplayerAdapter extends DefaultEventDispatcher<PlayerEventMap> im
146
150
  this._state.selectedVideoTrack = event.selectedVideoTrack;
147
151
  this._state.selectedTextTrack = event.selectedTextTrack;
148
152
  if (isFinite(this._state.duration)) {
149
- this._state.seekable = [{start: 0, end: this._state.duration}];
153
+ this._state.seekable = [{ start: 0, end: this._state.duration }];
150
154
  }
151
155
  };
152
156
 
@@ -394,7 +398,7 @@ export class THEOplayerAdapter extends DefaultEventDispatcher<PlayerEventMap> im
394
398
  return;
395
399
  }
396
400
  this._state.selectedAudioTrack = trackUid;
397
- NativeModules.PlayerModule.setSelectedAudioTrack(this._view.nativeHandle, (trackUid !== undefined) ? trackUid : -1);
401
+ NativeModules.PlayerModule.setSelectedAudioTrack(this._view.nativeHandle, trackUid !== undefined ? trackUid : -1);
398
402
  }
399
403
 
400
404
  get videoTracks(): MediaTrack[] {
@@ -411,7 +415,7 @@ export class THEOplayerAdapter extends DefaultEventDispatcher<PlayerEventMap> im
411
415
  }
412
416
  this._state.selectedVideoTrack = trackUid;
413
417
  this._state.targetVideoQuality = undefined;
414
- NativeModules.PlayerModule.setSelectedVideoTrack(this._view.nativeHandle, (trackUid !== undefined) ? trackUid : -1);
418
+ NativeModules.PlayerModule.setSelectedVideoTrack(this._view.nativeHandle, trackUid !== undefined ? trackUid : -1);
415
419
  }
416
420
 
417
421
  get textTracks(): TextTrack[] {
@@ -434,7 +438,7 @@ export class THEOplayerAdapter extends DefaultEventDispatcher<PlayerEventMap> im
434
438
  track.mode = TextTrackMode.disabled;
435
439
  }
436
440
  });
437
- NativeModules.PlayerModule.setSelectedTextTrack(this._view.nativeHandle, (trackUid !== undefined) ? trackUid : -1);
441
+ NativeModules.PlayerModule.setSelectedTextTrack(this._view.nativeHandle, trackUid !== undefined ? trackUid : -1);
438
442
  }
439
443
 
440
444
  get textTrackStyle(): TextTrackStyle {
@@ -0,0 +1,24 @@
1
+ import type { ScaledSize } from 'react-native/Libraries/Utilities/Dimensions';
2
+ import { Dimensions, Platform, StatusBar } from 'react-native';
3
+
4
+ /**
5
+ * Calculate the device's screen dimensions, while taking into account the statusBar height and orientation on Android.
6
+ */
7
+ export function getFullscreenSize(): ScaledSize {
8
+ const screenSize = Dimensions.get('screen');
9
+
10
+ // Adjust for statusBar height on Android, depending on the device's current orientation.
11
+ if (Platform.OS === 'android' && Platform.Version >= 29) {
12
+ const statusBarHeight = (StatusBar.currentHeight || 0);
13
+ if (screenSize.width < screenSize.height) { // portrait
14
+ if (screenSize.height !== Dimensions.get('window').height + statusBarHeight) {
15
+ screenSize.height = screenSize.height - statusBarHeight;
16
+ }
17
+ } else { // landscape
18
+ if (screenSize.width !== Dimensions.get('window').width) {
19
+ screenSize.width = screenSize.width - statusBarHeight;
20
+ }
21
+ }
22
+ }
23
+ return screenSize;
24
+ }