diff --git a/webrtc/examples/objc/AppRTCMobile/ios/ARDMainViewController.m b/webrtc/examples/objc/AppRTCMobile/ios/ARDMainViewController.m index 33ff8fa9c6..3edb55cd98 100644 --- a/webrtc/examples/objc/AppRTCMobile/ios/ARDMainViewController.m +++ b/webrtc/examples/objc/AppRTCMobile/ios/ARDMainViewController.m @@ -172,7 +172,7 @@ static NSString *const barButtonImageString = @"ic_settings_black_24dp.png"; #pragma mark - Private - (void)showSettings:(id)sender { ARDSettingsViewController *settingsController = - [[ARDSettingsViewController alloc] initWithStyle:UITableViewStylePlain + [[ARDSettingsViewController alloc] initWithStyle:UITableViewStyleGrouped mediaConstraintsModel:[[ARDMediaConstraintsModel alloc] init]]; UINavigationController *navigationController = [[UINavigationController alloc] initWithRootViewController:settingsController]; diff --git a/webrtc/examples/objc/AppRTCMobile/ios/ARDSettingsViewController.m b/webrtc/examples/objc/AppRTCMobile/ios/ARDSettingsViewController.m index 1df9892673..63f5c43483 100644 --- a/webrtc/examples/objc/AppRTCMobile/ios/ARDSettingsViewController.m +++ b/webrtc/examples/objc/AppRTCMobile/ios/ARDSettingsViewController.m @@ -12,6 +12,12 @@ #import "ARDMediaConstraintsModel.h" NS_ASSUME_NONNULL_BEGIN + +typedef NS_ENUM(int, ARDSettingsSections) { + ARDSettingsSectionMediaConstraints = 0, + ARDSettingsSectionBitRate +}; + @interface ARDSettingsViewController () { ARDMediaConstraintsModel *_mediaConstraintsModel; } @@ -79,28 +85,47 @@ NS_ASSUME_NONNULL_BEGIN #pragma mark - Table view data source - (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView { - return 1; + return 2; } - (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section { - return self.mediaConstraintsArray.count; + if ([self sectionIsMediaConstraints:section]) { + return self.mediaConstraintsArray.count; + } + + return 1; } -#pragma mark - Table view delegate +#pragma mark - Index path helpers - (BOOL)sectionIsMediaConstraints:(int)section { - return section == 0; + return section == ARDSettingsSectionMediaConstraints; +} + +- (BOOL)sectionIsBitrate:(int)section { + return section == ARDSettingsSectionBitRate; } - (BOOL)indexPathIsMediaConstraints:(NSIndexPath *)indexPath { return [self sectionIsMediaConstraints:indexPath.section]; } +- (BOOL)indexPathIsBitrate:(NSIndexPath *)indexPath { + return [self sectionIsBitrate:indexPath.section]; +} + +#pragma mark - Table view delegate + - (nullable NSString *)tableView:(UITableView *)tableView titleForHeaderInSection:(NSInteger)section { if ([self sectionIsMediaConstraints:section]) { return @"Media constraints"; } + + if ([self sectionIsBitrate:section]) { + return @"Maximum bitrate"; + } + return @""; } @@ -109,6 +134,11 @@ NS_ASSUME_NONNULL_BEGIN if ([self indexPathIsMediaConstraints:indexPath]) { return [self mediaConstraintsTableViewCellForTableView:tableView atIndexPath:indexPath]; } + + if ([self indexPathIsBitrate:indexPath]) { + return [self bitrateTableViewCellForTableView:tableView atIndexPath:indexPath]; + } + return [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault reuseIdentifier:@"identifier"]; } @@ -158,5 +188,44 @@ NS_ASSUME_NONNULL_BEGIN return indexPath; } +#pragma mark - Table view delegate(Bitrate) + +- (UITableViewCell *)bitrateTableViewCellForTableView:(UITableView *)tableView + atIndexPath:(NSIndexPath *)indexPath { + NSString *dequeueIdentifier = @"ARDSettingsBitrateCellIdentifier"; + UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:dequeueIdentifier]; + if (!cell) { + cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault + reuseIdentifier:dequeueIdentifier]; + + UITextField *textField = [[UITextField alloc] + initWithFrame:CGRectMake(10, 0, cell.bounds.size.width - 20, cell.bounds.size.height)]; + textField.placeholder = @"Enter max bit rate (kbps)"; + textField.keyboardType = UIKeyboardTypeNumberPad; + + // Numerical keyboards have no return button, we need to add one manually. + UIToolbar *numberToolbar = + [[UIToolbar alloc] initWithFrame:CGRectMake(0, 0, self.view.bounds.size.width, 50)]; + numberToolbar.items = @[ + [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemFlexibleSpace + target:nil + action:nil], + [[UIBarButtonItem alloc] initWithTitle:@"Apply" + style:UIBarButtonItemStyleDone + target:self + action:@selector(numberTextFieldDidEndEditing:)] + ]; + [numberToolbar sizeToFit]; + + textField.inputAccessoryView = numberToolbar; + [cell addSubview:textField]; + } + return cell; +} + +- (void)numberTextFieldDidEndEditing:(id)sender { + [self.view endEditing:YES]; +} + @end NS_ASSUME_NONNULL_END