From b04b5c205af653c04a621278db9c6d80433722ba Mon Sep 17 00:00:00 2001 From: denicija Date: Wed, 9 Nov 2016 04:28:46 -0800 Subject: [PATCH] Reland of Add bitrate section to settings view controller. (patchset #1 id:1 of https://codereview.webrtc.org/2488653002/ ) Reason for revert: Reland Original issue's description: > Revert of Add bitrate section to settings view controller. (patchset #1 id:1 of https://codereview.webrtc.org/2473783003/ ) > > Reason for revert: > The usage of UIKeyboardTypeASCIICapableNumberPad enum (available only for iOS 10.0), is breaking the build of AppRTCMobile on devices with lesser os. > To re-land the UIKeyboardTypeASCIICapableNumberPad should be replaced with UIKeyboardTypeNumberPad > > Original issue's description: > > Add bitrate section to settings view controller. > > > > BUG=webrtc:6654 > > > > Committed: https://crrev.com/3babb99039478c36be58171c5409eac07ae153e5 > > Cr-Commit-Position: refs/heads/master@{#14952} > > TBR=magjed@webrtc.org,kthelgasson@webrtc.org > # Skipping CQ checks because original CL landed less than 1 days ago. > NOPRESUBMIT=true > NOTREECHECKS=true > NOTRY=true > BUG=webrtc:6654 > > Committed: https://crrev.com/40532a164663f03b812ec7ccc893da7a4bdc26d3 > Cr-Commit-Position: refs/heads/master@{#14972} TBR=magjed@webrtc.org,kthelgasson@webrtc.org # Skipping CQ checks because original CL landed less than 1 days ago. NOPRESUBMIT=true NOTREECHECKS=true NOTRY=true BUG=webrtc:6654 Review-Url: https://codereview.webrtc.org/2482403002 Cr-Commit-Position: refs/heads/master@{#14996} --- .../AppRTCMobile/ios/ARDMainViewController.m | 2 +- .../ios/ARDSettingsViewController.m | 77 ++++++++++++++++++- 2 files changed, 74 insertions(+), 5 deletions(-) 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