Skip to content

Commit 00e6850

Browse files
committed
Merge branch 'release/0.2.6'
2 parents b40823d + a34079c commit 00e6850

8 files changed

+61
-15
lines changed

README.md

+4-3
Original file line numberDiff line numberDiff line change
@@ -176,9 +176,10 @@ Running the example project:
176176

177177
## Available props
178178

179-
| Prop | Description | Type |
180-
| ------------ | -------------------------------- | -------- |
181-
| **`config`** | The JW [Config](#Config) object. | `Object` |
179+
| Prop | Description | Default | Type |
180+
| -------------- | -------------------------------- | ----------- | --------- |
181+
| **`config`** | The JW [Config](#Config) object. | `undefined` | `Object` |
182+
| **`controls`** | Should the player controls show. | `true` | `Boolean` |
182183

183184
##### Config
184185

index.d.ts

+3-2
Original file line numberDiff line numberDiff line change
@@ -142,6 +142,7 @@ declare module "react-native-jw-media-player" {
142142
}
143143
interface PropsType {
144144
config: Config;
145+
controls: boolean;
145146
onPlayerReady?: (event: any) => void;
146147
onPlaylist?: (playlist: PlaylistItem[]) => void;
147148
onBeforePlay?: (event: any) => void;
@@ -173,11 +174,11 @@ declare module "react-native-jw-media-player" {
173174
toggleSpeed(): void;
174175
setSpeed(speed: number): void;
175176
setPlaylistIndex(index: number): void;
176-
setControls(shouldDisplayControl: boolean): void;
177+
setControls(show: boolean): void;
177178
loadPlaylist(playlist: PlaylistItem[]): void;
178179
loadPlaylistItem(playlistItem: PlaylistItem): void;
179180
seekTo(time: number): void;
180-
setFullscreen(shouldDisplayInFullScreen: boolean): void;
181+
setFullscreen(fullScreen: boolean): void;
181182
position(): Promise<number>;
182183
setUpCastController(): void;
183184
presentCastDialog(): void;

index.js

+6-2
Original file line numberDiff line numberDiff line change
@@ -227,7 +227,7 @@ export default class JWPlayer extends Component {
227227
}
228228

229229
setControls(show) {
230-
if (RNJWPlayerManager && Platform.OS === "android")
230+
if (RNJWPlayerManager)
231231
RNJWPlayerManager.setControls(this.getRNJWPlayerBridgeHandle(), show);
232232
}
233233

@@ -390,7 +390,7 @@ export default class JWPlayer extends Component {
390390
}
391391

392392
shouldComponentUpdate(nextProps, nextState) {
393-
var {config} = nextProps;
393+
var {config, controls} = nextProps;
394394
var {
395395
file,
396396
image,
@@ -436,6 +436,10 @@ export default class JWPlayer extends Component {
436436
return true
437437
}
438438

439+
if (controls !== this.props.controls) {
440+
return true;
441+
}
442+
439443
return false;
440444
}
441445

ios/RNJWPlayer.podspec

+2-2
Original file line numberDiff line numberDiff line change
@@ -12,8 +12,8 @@ Pod::Spec.new do |s|
1212
s.platform = :ios, "10.0"
1313
s.source = { :git => "https://github.com/chaimPaneth/react-native-jw-media-player.git", :tag => "v#{s.version}" }
1414
s.source_files = "RNJWPlayer/*.{h,m}"
15-
s.dependency 'JWPlayerKit', '~> 4.2.0'
16-
s.dependency 'google-cast-sdk', '~> 4.5.1'
15+
s.dependency 'JWPlayerKit', '~> 4.3.0'
16+
s.dependency 'google-cast-sdk', '~> 4.7.0'
1717
s.dependency 'React'
1818
# s.static_framework = true
1919
s.info_plist = {

ios/RNJWPlayer/RNJWPlayerView.h

+5
Original file line numberDiff line numberDiff line change
@@ -20,6 +20,8 @@
2020
@property(nonatomic)BOOL userPaused;
2121
@property(nonatomic)BOOL wasInterrupted;
2222

23+
@property(nonatomic)JWInterfaceBehavior interfaceBehavior;
24+
2325
/* casting objects */
2426
@property(nonatomic, strong)JWCastController *castController;
2527
@property(nonatomic)BOOL isCasting;
@@ -87,4 +89,7 @@
8789
- (JWCastingDevice*)connectedDevice;
8890
- (NSArray <JWCastingDevice *>*)availableDevices;
8991

92+
/* Methods */
93+
-(void)toggleUIGroup:(UIView*)view :(NSString*)name :(NSString*)ofSubview :(BOOL)show;
94+
9095
@end

ios/RNJWPlayer/RNJWPlayerView.m

+26-5
Original file line numberDiff line numberDiff line change
@@ -48,7 +48,6 @@ - (void)layoutSubviews
4848

4949
if (self.playerViewController != nil) {
5050
self.playerViewController.view.frame = self.frame;
51-
// [_playerViewController.view.subviews[0].subviews[2] setHidden:YES]; // this is overlay with controls
5251
}
5352
}
5453

@@ -93,6 +92,11 @@ -(void)setConfig:(NSDictionary*)config
9392
}
9493
}
9594

95+
-(void)setControls:(BOOL)controls
96+
{
97+
[self toggleUIGroup:_playerViewController.view :@"JWPlayerKit.InterfaceView" :nil :controls];
98+
}
99+
96100
#pragma mark - RNJWPlayer styling
97101

98102
-(UIColor*)colorWithHexString:(NSString*)hex
@@ -592,10 +596,10 @@ -(void)setupPlayerViewController:config :(JWPlayerConfiguration*)playerConfig
592596
_playerViewController = [JWPlayerViewController new];
593597
_playerViewController.delegate = self;
594598

595-
// id interfaceBehavior = config[@"interfaceBehavior"];
596-
// if ((interfaceBehavior != nil) && (interfaceBehavior != (id)[NSNull null])) {
597-
// _playerViewController.interfaceBehavior = [RCTConvert JWInterfaceBehavior:interfaceBehavior];
598-
// }
599+
id interfaceBehavior = config[@"interfaceBehavior"];
600+
if ((interfaceBehavior != nil) && (interfaceBehavior != (id)[NSNull null])) {
601+
_interfaceBehavior = [RCTConvert JWInterfaceBehavior:interfaceBehavior];
602+
}
599603

600604
id forceFullScreenOnLandscape = config[@"fullScreenOnLandscape"];
601605
if (forceFullScreenOnLandscape != nil && forceFullScreenOnLandscape != (id)[NSNull null]) {
@@ -672,6 +676,10 @@ -(void)presentPlayerViewController:(JWPlayerConfiguration*)configuration
672676
// before presentation of viewcontroller player is nil so acces only after
673677
if (configuration != nil) {
674678
[_playerViewController.player configurePlayerWith:configuration];
679+
680+
if (_interfaceBehavior) {
681+
_playerViewController.interfaceBehavior = JWInterfaceBehaviorHidden;
682+
}
675683
}
676684

677685
_playerViewController.playerView.delegate = self;
@@ -713,6 +721,19 @@ -(void)removePlayerView
713721
}
714722
}
715723

724+
-(void)toggleUIGroup:(UIView*)view :(NSString*)name :(NSString*)ofSubview :(BOOL)show
725+
{
726+
NSArray *subviews = [view subviews];
727+
728+
for (UIView *subview in subviews) {
729+
if ([NSStringFromClass(subview.class) isEqualToString:name] && (ofSubview == nil || [NSStringFromClass(subview.superview.class) isEqualToString:name])) {
730+
[subview setHidden:!show];
731+
} else {
732+
[self toggleUIGroup:subview :name :ofSubview :show];
733+
}
734+
}
735+
}
736+
716737
#pragma mark - JWPlayer Delegate
717738

718739
- (void)jwplayerIsReady:(id<JWPlayer>)player

ios/RNJWPlayer/RNJWPlayerViewManager.m

+14
Original file line numberDiff line numberDiff line change
@@ -75,6 +75,7 @@ - (UIView*)view
7575

7676
/* props */
7777
RCT_EXPORT_VIEW_PROPERTY(config, NSDictionary);
78+
RCT_EXPORT_VIEW_PROPERTY(controls, BOOL);
7879

7980
RCT_REMAP_METHOD(state,
8081
tag:(nonnull NSNumber*)reactTag
@@ -464,4 +465,17 @@ - (UIView*)view
464465
}];
465466
}
466467

468+
RCT_EXPORT_METHOD(setControls: (nonnull NSNumber *)reactTag: (BOOL)show) {
469+
[self.bridge.uiManager addUIBlock:^(__unused RCTUIManager *uiManager, NSDictionary<NSNumber *, RNJWPlayerView *> *viewRegistry) {
470+
RNJWPlayerView *view = viewRegistry[reactTag];
471+
if (![view isKindOfClass:[RNJWPlayerView class]] || (view.playerView == nil && view.playerViewController == nil)) {
472+
RCTLogError(@"Invalid view returned from registry, expecting RNJWPlayerView, got: %@", view);
473+
} else {
474+
if (view.playerViewController) {
475+
[view toggleUIGroup:view.playerViewController.view :@"JWPlayerKit.InterfaceView" :nil :show];
476+
}
477+
}
478+
}];
479+
}
480+
467481
@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.5",
3+
"version": "0.2.6",
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)