From d7b9d5b8b1a8eeee2a7576db40b508cc5f0d73e6 Mon Sep 17 00:00:00 2001 From: Chaim Paneth Date: Wed, 13 Apr 2022 01:04:19 +0300 Subject: [PATCH] fix of player controller sometimes not reseting --- ios/RNJWPlayer.podspec | 2 +- ios/RNJWPlayer/RNJWPlayerView.h | 1 + ios/RNJWPlayer/RNJWPlayerView.m | 21 ++++++++++----------- ios/RNJWPlayer/RNJWPlayerViewController.h | 2 +- ios/RNJWPlayer/RNJWPlayerViewController.m | 18 ++++++++++++++++++ ios/RNJWPlayer/RNJWPlayerViewManager.m | 11 +++++++++++ package.json | 2 +- 7 files changed, 43 insertions(+), 14 deletions(-) diff --git a/ios/RNJWPlayer.podspec b/ios/RNJWPlayer.podspec index 9f056893..488ad6e0 100644 --- a/ios/RNJWPlayer.podspec +++ b/ios/RNJWPlayer.podspec @@ -12,7 +12,7 @@ Pod::Spec.new do |s| s.platform = :ios, "10.0" s.source = { :git => "https://github.com/chaimPaneth/react-native-jw-media-player.git", :tag => "v#{s.version}" } s.source_files = "RNJWPlayer/*.{h,m}" - s.dependency 'JWPlayerKit', '~> 4.5.0' + s.dependency 'JWPlayerKit', '~> 4.5.1' s.dependency 'google-cast-sdk', '~> 4.7.0' s.dependency 'React' # s.static_framework = true diff --git a/ios/RNJWPlayer/RNJWPlayerView.h b/ios/RNJWPlayer/RNJWPlayerView.h index 3da79521..1ab8d050 100644 --- a/ios/RNJWPlayer/RNJWPlayerView.h +++ b/ios/RNJWPlayer/RNJWPlayerView.h @@ -98,6 +98,7 @@ - (NSArray *)availableDevices; /* Methods */ +-(void)setLicense:(id)license; -(void)toggleUIGroup:(UIView*)view :(NSString*)name :(NSString*)ofSubview :(BOOL)show; @end diff --git a/ios/RNJWPlayer/RNJWPlayerView.m b/ios/RNJWPlayer/RNJWPlayerView.m index a4e4c169..eb2a25fa 100644 --- a/ios/RNJWPlayer/RNJWPlayerView.m +++ b/ios/RNJWPlayer/RNJWPlayerView.m @@ -69,14 +69,19 @@ -(BOOL)shouldAutorotate { #pragma mark - RNJWPlayer props --(void)setConfig:(NSDictionary*)config +-(void)setLicense:(id)license { - id license = config[@"license"]; if ((license != nil) && (license != (id)[NSNull null])) { [JWPlayerKitLicense setLicenseKey:license]; } else { NSLog(@"JW SDK License key not set."); } +} + +-(void)setConfig:(NSDictionary*)config +{ + id license = config[@"license"]; + [self setLicense:license]; _backgroundAudioEnabled = config[@"backgroundAudioEnabled"]; _pipEnabled = config[@"pipEnabled"]; @@ -664,9 +669,10 @@ -(void)setupPlayerViewController:config :(JWPlayerConfiguration*)playerConfig -(void)dismissPlayerViewController { if (_playerViewController != nil) { - [_playerViewController willMoveToParentViewController:nil]; + [_playerViewController.player stop]; [_playerViewController.view removeFromSuperview]; [_playerViewController removeFromParentViewController]; + [_playerViewController willMoveToParentViewController:nil]; _playerViewController = nil; } } @@ -689,14 +695,6 @@ -(void)presentPlayerViewController:(JWPlayerConfiguration*)configuration } [_playerViewController setDelegates]; - -// _playerViewController.delegate = self; -// _playerViewController.playerView.delegate = self; -// _playerViewController.player.delegate = self; -// _playerViewController.player.playbackStateDelegate = self; -// _playerViewController.player.adDelegate = self; -// _playerViewController.player.avDelegate = self; -// _playerViewController.player.contentKeyDataSource = self; } #pragma mark - JWPlayer View helpers @@ -727,6 +725,7 @@ -(void)setupPlayerView:config :(JWPlayerConfiguration*)playerConfig -(void)removePlayerView { if (_playerView != nil) { + [_playerView.player stop]; [_playerView removeFromSuperview]; _playerView = nil; } diff --git a/ios/RNJWPlayer/RNJWPlayerViewController.h b/ios/RNJWPlayer/RNJWPlayerViewController.h index d3e5288b..8b2981e9 100644 --- a/ios/RNJWPlayer/RNJWPlayerViewController.h +++ b/ios/RNJWPlayer/RNJWPlayerViewController.h @@ -20,7 +20,7 @@ @class RNJWPlayerView; -@interface RNJWPlayerViewController : JWPlayerObjCViewController +@interface RNJWPlayerViewController : JWPlayerObjCViewController @property(nonatomic, strong)RNJWPlayerView *parentView; diff --git a/ios/RNJWPlayer/RNJWPlayerViewController.m b/ios/RNJWPlayer/RNJWPlayerViewController.m index 0187f07b..8845e85f 100644 --- a/ios/RNJWPlayer/RNJWPlayerViewController.m +++ b/ios/RNJWPlayer/RNJWPlayerViewController.m @@ -17,6 +17,24 @@ -(void)setDelegates self.player.playbackStateDelegate = self; self.player.adDelegate = self; self.player.avDelegate = self; + self.player.contentKeyDataSource = self; +} + +- (void)removeFromParentViewController +{ + [self reset]; +} + +- (void)dealloc +{ + [self reset]; +} + +-(void)reset +{ + [self.player stop]; + [self.view removeFromSuperview]; + [self willMoveToParentViewController:nil]; } #pragma mark - JWPlayer Delegate diff --git a/ios/RNJWPlayer/RNJWPlayerViewManager.m b/ios/RNJWPlayer/RNJWPlayerViewManager.m index e86e56ac..791c4093 100644 --- a/ios/RNJWPlayer/RNJWPlayerViewManager.m +++ b/ios/RNJWPlayer/RNJWPlayerViewManager.m @@ -506,4 +506,15 @@ - (UIView*)view }]; } +RCT_EXPORT_METHOD(setLicenseKey: (nonnull NSNumber *)reactTag: (nonnull NSString *)license) { + [self.bridge.uiManager addUIBlock:^(__unused RCTUIManager *uiManager, NSDictionary *viewRegistry) { + RNJWPlayerView *view = viewRegistry[reactTag]; + if (![view isKindOfClass:[RNJWPlayerView class]]) { + RCTLogError(@"Invalid view returned from registry, expecting RNJWPlayerView, got: %@", view); + } else { + [view setLicense:license]; + } + }]; +} + @end diff --git a/package.json b/package.json index f5683f49..616e9451 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "react-native-jw-media-player", - "version": "0.2.12", + "version": "0.2.13", "description": "React-native Android/iOS plugin for JWPlayer SDK (https://www.jwplayer.com/)", "main": "index.js", "types": "./index.d.ts",