Commit c84e0595 authored by Hampton Maxwell's avatar Hampton Maxwell
Browse files

Only look for text tracks matching system language when the "system" type is set

parent 2087d0a1
Loading
Loading
Loading
Loading
+9 −9
Changes for ios/RCTVideo.m: 9 added lines, 9 removed lines.
Original line number Diff line number Diff line
@@ -13,6 +13,8 @@ static NSString *const readyForDisplayKeyPath = @"readyForDisplay";
static NSString *const playbackRate = @"rate";
static NSString *const timedMetadata = @"timedMetadata";

static int const RCTVideoUnset = -1;

@implementation RCTVideo
{
  AVPlayer *_player;
@@ -817,7 +819,7 @@ static NSString *const timedMetadata = @"timedMetadata";
    }
  }
  
  int selectedTrackIndex = -1;
  int selectedTrackIndex = RCTVideoUnset;
  
  if ([type isEqualToString:@"disabled"]) {
    // Do nothing. We want to ensure option is nil
@@ -846,16 +848,11 @@ static NSString *const timedMetadata = @"timedMetadata";
        selectedTrackIndex = index;
      }
    }
  }
  
  // user's selected language might not be available, or system defaults have captions enabled
  if (selectedTrackIndex == -1 || [type isEqualToString:@"default"]) {
  } else { // type "system"
    CFArrayRef captioningMediaCharacteristics = MACaptionAppearanceCopyPreferredCaptioningMediaCharacteristics(kMACaptionAppearanceDomainUser);
    NSArray *captionSettings = (__bridge NSArray*)captioningMediaCharacteristics;
    if ([captionSettings containsObject:AVMediaCharacteristicTranscribesSpokenDialogForAccessibility]) {
        // iterate through the textTracks to find a matching option, or default to the first object.
        selectedTrackIndex = 0;
        
      selectedTrackIndex = 0; // If we can't find a match, use the first available track
      NSString *systemLanguage = [[NSLocale preferredLanguages] firstObject];
      for (int i = 0; i < textTracks.count; ++i) {
        NSDictionary *currentTextTrack = [textTracks objectAtIndex:i];
@@ -868,7 +865,10 @@ static NSString *const timedMetadata = @"timedMetadata";
  }
    
  for (int i = firstTextIndex; i < _player.currentItem.tracks.count; ++i) {
    BOOL isEnabled = i == selectedTrackIndex + firstTextIndex;
    BOOL isEnabled = NO;
    if (selectedTrackIndex != RCTVideoUnset) {
      isEnabled = i == selectedTrackIndex + firstTextIndex;
    }
    [_player.currentItem.tracks[i] setEnabled:isEnabled];
  }
}