Skip to content

Commit da1b66f

Browse files
committed
added setCurrentCaptions, fixed tracks, playerviewcontroller obj c working
1 parent dabd4fa commit da1b66f

File tree

7 files changed

+65
-77
lines changed

7 files changed

+65
-77
lines changed

README.md

+1
Original file line numberDiff line numberDiff line change
@@ -394,6 +394,7 @@ public void onPictureInPictureModeChanged(boolean isInPictureInPictureMode, Conf
394394
| **`getAudioTracks`** | Returns promise that returns an array of [AudioTracks](#AudioTrack) | `none` |
395395
| **`getCurrentAudioTrack`** | Returns promise that returns the index of the current audio track in array returned by getAudioTracks | `none` |
396396
| **`setCurrentAudioTrack`** | Sets the current audio track to the audio track at the specified index in the array returned by getAudioTracks | `Int` |
397+
| **`setCurrentCaptions`** | Turns off captions when argument is 0. Setting argument to another integer, sets captions to track at playlistItem.tracks[integer - 1] | `Int` |
397398

398399
## Available callbacks
399400

android/src/main/java/com/appgoalz/rnjwplayer/RNJWPlayerModule.java

+18
Original file line numberDiff line numberDiff line change
@@ -361,6 +361,24 @@ public void execute (NativeViewHierarchyManager nvhm) {
361361
}
362362
}
363363

364+
@ReactMethod
365+
public void setCurrentCaptions(final int reactTag, final int index) {
366+
try {
367+
UIManagerModule uiManager = mReactContext.getNativeModule(UIManagerModule.class);
368+
uiManager.addUIBlock(new UIBlock() {
369+
public void execute (NativeViewHierarchyManager nvhm) {
370+
RNJWPlayerView playerView = (RNJWPlayerView) nvhm.resolveView(reactTag);
371+
372+
if (playerView != null && playerView.mPlayer != null) {
373+
playerView.mPlayer.setCurrentCaptions(index);
374+
}
375+
}
376+
});
377+
} catch (IllegalViewOperationException e) {
378+
throw e;
379+
}
380+
}
381+
364382
private int stateToInt(PlayerState playerState) {
365383
switch (playerState) {
366384
case IDLE:

index.js

+10
Original file line numberDiff line numberDiff line change
@@ -194,6 +194,7 @@ export default class JWPlayer extends Component {
194194
getAudioTracks: PropTypes.func,
195195
getCurrentAudioTrack: PropTypes.func,
196196
setCurrentAudioTrack: PropTypes.func,
197+
setCurrentCaptions: PropTypes.func,
197198
onAudioTracks: PropTypes.func,
198199
};
199200

@@ -400,6 +401,15 @@ export default class JWPlayer extends Component {
400401
}
401402
}
402403

404+
setCurrentCaptions(index) {
405+
if (RNJWPlayerManager) {
406+
RNJWPlayerManager.setCurrentCaptions(
407+
this.getRNJWPlayerBridgeHandle(),
408+
index
409+
);
410+
}
411+
}
412+
403413
getRNJWPlayerBridgeHandle() {
404414
return ReactNative.findNodeHandle(this.refs[RCT_RNJWPLAYER_REF]);
405415
}

ios/RNJWPlayer/RNJWPlayerView.m

+13-2
Original file line numberDiff line numberDiff line change
@@ -372,13 +372,12 @@ -(JWPlayerItem*)getPlayerItem:item
372372
NSURL *fileUrl = [NSURL URLWithString:file];
373373
NSString *label = [item objectForKey:@"label"];
374374

375-
JWMediaTrack *trackItem = [JWMediaTrack init];
376375
JWCaptionTrackBuilder* trackBuilder = [[JWCaptionTrackBuilder alloc] init];
377376

378377
[trackBuilder file:fileUrl];
379378
[trackBuilder label:label];
380379

381-
trackItem = [trackBuilder buildAndReturnError:&error];
380+
JWMediaTrack *trackItem = [trackBuilder buildAndReturnError:&error];
382381

383382
[tracksArray addObject:trackItem];
384383
}
@@ -620,6 +619,11 @@ -(void)setupPlayerViewController:config :(JWPlayerConfiguration*)playerConfig
620619
_playerViewController.enableLockScreenControls = YES;
621620
}
622621

622+
id allowsPictureInPicturePlayback = config[@"allowsPictureInPicturePlayback"];
623+
if ((allowsPictureInPicturePlayback != nil && allowsPictureInPicturePlayback != (id)[NSNull null])) {
624+
_playerViewController.allowsPictureInPicturePlayback = allowsPictureInPicturePlayback;
625+
}
626+
623627
id styling = config[@"styling"];
624628
[self setStyling:styling];
625629

@@ -1257,6 +1261,13 @@ - (void)jwplayer:(id<JWPlayer>)player playbackRateChangedTo:(double)rate at:(NST
12571261
}
12581262
}
12591263

1264+
- (void)jwplayer:(id<JWPlayer>)player updatedCues:(NSArray<JWCue *> * _Nonnull)cues
1265+
{
1266+
if (_playerViewController) {
1267+
[_playerViewController jwplayer:player updatedCues:cues];
1268+
}
1269+
}
1270+
12601271
#pragma mark - JWPlayer Ad Delegate
12611272

12621273
- (void)jwplayer:(id _Nonnull)player adEvent:(JWAdEvent * _Nonnull)event {

ios/RNJWPlayer/RNJWPlayerViewController.m

+7-74
Original file line numberDiff line numberDiff line change
@@ -243,65 +243,41 @@ - (void)pictureInPictureController:(AVPictureInPictureController *)pictureInPict
243243

244244
- (void)jwplayerContentIsBuffering:(id<JWPlayer>)player
245245
{
246-
// if (_parentView.playerViewController) {
247-
// [_parentView.playerViewController jwplayerContentIsBuffering:player];
248-
// }
249-
250246
if (_parentView.onBuffer) {
251247
_parentView.onBuffer(@{});
252248
}
253249
}
254250

255251
- (void)jwplayer:(id<JWPlayer>)player isBufferingWithReason:(enum JWBufferReason)reason
256252
{
257-
// if (_parentView.playerViewController) {
258-
// [_parentView.playerViewController jwplayer:player isBufferingWithReason:reason];
259-
// }
260-
261253
if (_parentView.onBuffer) {
262254
_parentView.onBuffer(@{});
263255
}
264256
}
265257

266258
- (void)jwplayer:(id<JWPlayer>)player updatedBuffer:(double)percent position:(JWTimeData *)time
267259
{
268-
// if (_parentView.playerViewController) {
269-
// [_parentView.playerViewController jwplayer:player updatedBuffer:percent position:time];
270-
// }
271-
272260
if (_parentView.onUpdateBuffer) {
273261
_parentView.onUpdateBuffer(@{@"percent": @(percent), @"position": time});
274262
}
275263
}
276264

277265
- (void)jwplayer:(id<JWPlayer>)player didFinishLoadingWithTime:(NSTimeInterval)loadTime
278266
{
279-
// if (_parentView.playerViewController) {
280-
// [_parentView.playerViewController jwplayer:player didFinishLoadingWithTime:loadTime];
281-
// }
282-
283267
if (_parentView.onLoaded) {
284268
_parentView.onLoaded(@{});
285269
}
286270
}
287271

288272
- (void)jwplayer:(id<JWPlayer>)player isAttemptingToPlay:(JWPlayerItem *)playlistItem reason:(enum JWPlayReason)reason
289273
{
290-
// if (_parentView.playerViewController) {
291-
// [_parentView.playerViewController jwplayer:player isAttemptingToPlay:playlistItem reason:reason];
292-
// }
293-
294274
if (_parentView.onAttemptPlay) {
295275
_parentView.onAttemptPlay(@{});
296276
}
297277
}
298278

299279
- (void)jwplayer:(id<JWPlayer>)player isPlayingWithReason:(enum JWPlayReason)reason
300280
{
301-
// if (_parentView.playerViewController) {
302-
// [_parentView.playerViewController jwplayer:player isPlayingWithReason:reason];
303-
// }
304-
305281
if (_parentView.onPlay) {
306282
_parentView.onPlay(@{});
307283
}
@@ -312,21 +288,13 @@ - (void)jwplayer:(id<JWPlayer>)player isPlayingWithReason:(enum JWPlayReason)rea
312288

313289
- (void)jwplayer:(id<JWPlayer>)player willPlayWithReason:(enum JWPlayReason)reason
314290
{
315-
// if (_parentView.playerViewController) {
316-
// [_parentView.playerViewController jwplayer:player willPlayWithReason:reason];
317-
// }
318-
319291
if (_parentView.onBeforePlay) {
320292
_parentView.onBeforePlay(@{});
321293
}
322294
}
323295

324296
- (void)jwplayer:(id<JWPlayer>)player didPauseWithReason:(enum JWPauseReason)reason
325297
{
326-
// if (_parentView.playerViewController) {
327-
// [_parentView.playerViewController jwplayer:player didPauseWithReason:reason];
328-
// }
329-
330298
if (_parentView.onPause) {
331299
_parentView.onPause(@{});
332300
}
@@ -338,54 +306,34 @@ - (void)jwplayer:(id<JWPlayer>)player didPauseWithReason:(enum JWPauseReason)rea
338306

339307
- (void)jwplayer:(id<JWPlayer>)player didBecomeIdleWithReason:(enum JWIdleReason)reason
340308
{
341-
// if (_parentView.playerViewController) {
342-
// [_parentView.playerViewController jwplayer:player didBecomeIdleWithReason:reason];
343-
// }
344-
345309
if (_parentView.onIdle) {
346310
_parentView.onIdle(@{});
347311
}
348312
}
349313

350314
- (void)jwplayer:(id<JWPlayer>)player isVisible:(BOOL)isVisible
351315
{
352-
// if (_parentView.playerViewController) {
353-
// [_parentView.playerViewController jwplayer:player isVisible:isVisible];
354-
// }
355-
356316
if (_parentView.onVisible) {
357317
_parentView.onVisible(@{@"visible": @(isVisible)});
358318
}
359319
}
360320

361321
- (void)jwplayerContentWillComplete:(id<JWPlayer>)player
362322
{
363-
// if (_parentView.playerViewController) {
364-
// [_parentView.playerViewController jwplayerContentWillComplete:player];
365-
// }
366-
367323
if (_parentView.onBeforeComplete) {
368324
_parentView.onBeforeComplete(@{});
369325
}
370326
}
371327

372328
- (void)jwplayerContentDidComplete:(id<JWPlayer>)player
373329
{
374-
// if (_parentView.playerViewController) {
375-
// [_parentView.playerViewController jwplayerContentDidComplete:player];
376-
// }
377-
378330
if (_parentView.onComplete) {
379331
_parentView.onComplete(@{});
380332
}
381333
}
382334

383335
- (void)jwplayer:(id<JWPlayer>)player didLoadPlaylistItem:(JWPlayerItem *)item at:(NSUInteger)index
384336
{
385-
// if (_parentView.playerViewController) {
386-
// [_parentView.playerViewController jwplayer:player didLoadPlaylistItem:item at:index];
387-
// }
388-
389337
if (_parentView.onPlaylistItem) {
390338
NSMutableDictionary* sourceDict = [[NSMutableDictionary alloc] init];
391339
for (JWVideoSource* source in item.videoSources) {
@@ -432,10 +380,6 @@ - (void)jwplayer:(id<JWPlayer>)player didLoadPlaylistItem:(JWPlayerItem *)item a
432380

433381
- (void)jwplayer:(id<JWPlayer>)player didLoadPlaylist:(NSArray<JWPlayerItem *> *)playlist
434382
{
435-
// if (_parentView.playerViewController) {
436-
// [_parentView.playerViewController jwplayer:player didLoadPlaylist:playlist];
437-
// }
438-
439383
if (_parentView.onPlaylist) {
440384
NSMutableArray* playlistArray = [[NSMutableArray alloc] init];
441385

@@ -486,49 +430,38 @@ - (void)jwplayer:(id<JWPlayer>)player didLoadPlaylist:(NSArray<JWPlayerItem *> *
486430

487431
- (void)jwplayerPlaylistHasCompleted:(id<JWPlayer>)player
488432
{
489-
// if (_parentView.playerViewController) {
490-
// [_parentView.playerViewController jwplayerPlaylistHasCompleted:player];
491-
// }
492-
493433
if (_parentView.onPlaylistComplete) {
494434
_parentView.onPlaylistComplete(@{});
495435
}
496436
}
497437

498438
- (void)jwplayer:(id<JWPlayer>)player usesMediaType:(enum JWMediaType)type
499439
{
500-
// if (_parentView.playerViewController) {
501-
// [_parentView.playerViewController jwplayer:player usesMediaType:type];
502-
// }
440+
503441
}
504442

505443
- (void)jwplayer:(id<JWPlayer>)player seekedFrom:(NSTimeInterval)oldPosition to:(NSTimeInterval)newPosition
506444
{
507-
// if (_parentView.playerViewController) {
508-
// [_parentView.playerViewController jwplayer:player seekedFrom:oldPosition to:newPosition];
509-
// }
510-
511445
if (_parentView.onSeek) {
512446
_parentView.onSeek(@{@"from": @(oldPosition), @"to": @(newPosition)});
513447
}
514448
}
515449

516450
- (void)jwplayerHasSeeked:(id<JWPlayer>)player
517451
{
518-
// if (_parentView.playerViewController) {
519-
// [_parentView.playerViewController jwplayerHasSeeked:player];
520-
// }
521-
522452
if (_parentView.onSeeked) {
523453
_parentView.onSeeked(@{});
524454
}
525455
}
526456

527457
- (void)jwplayer:(id<JWPlayer>)player playbackRateChangedTo:(double)rate at:(NSTimeInterval)time
528458
{
529-
// if (_parentView.playerViewController) {
530-
// [_parentView.playerViewController jwplayer:player playbackRateChangedTo:rate at:time];
531-
// }
459+
460+
}
461+
462+
- (void)jwplayer:(id<JWPlayer>)player updatedCues:(NSArray<JWCue *> * _Nonnull)cues
463+
{
464+
532465
}
533466

534467
#pragma mark - JWPlayer Ad Delegate

ios/RNJWPlayer/RNJWPlayerViewManager.m

+15
Original file line numberDiff line numberDiff line change
@@ -491,4 +491,19 @@ - (UIView*)view
491491
}];
492492
}
493493

494+
RCT_EXPORT_METHOD(setCurrentCaptions: (nonnull NSNumber *)reactTag: (nonnull NSNumber *)index) {
495+
[self.bridge.uiManager addUIBlock:^(__unused RCTUIManager *uiManager, NSDictionary<NSNumber *, RNJWPlayerView *> *viewRegistry) {
496+
RNJWPlayerView *view = viewRegistry[reactTag];
497+
if (![view isKindOfClass:[RNJWPlayerView class]] || (view.playerView == nil && view.playerViewController == nil)) {
498+
RCTLogError(@"Invalid view returned from registry, expecting RNJWPlayerView, got: %@", view);
499+
} else {
500+
if (view.playerView) {
501+
[view.playerView.player setCurrentCaptionsTrack:[index integerValue] + 1];
502+
} else if (view.playerViewController) {
503+
[view.playerViewController.player setCurrentCaptionsTrack:[index integerValue] + 1];
504+
}
505+
}
506+
}];
507+
}
508+
494509
@end

package.json

+1-1
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
{
22
"name": "react-native-jw-media-player",
3-
"version": "0.2.10",
3+
"version": "0.2.11",
44
"description": "React-native Android/iOS plugin for JWPlayer SDK (https://www.jwplayer.com/)",
55
"main": "index.js",
66
"types": "./index.d.ts",

0 commit comments

Comments
 (0)