Chromium Code Reviews| OLD | NEW |
|---|---|
| 1 /* | 1 /* |
| 2 * Copyright 2016 The WebRTC Project Authors. All rights reserved. | 2 * Copyright 2016 The WebRTC Project Authors. All rights reserved. |
| 3 * | 3 * |
| 4 * Use of this source code is governed by a BSD-style license | 4 * Use of this source code is governed by a BSD-style license |
| 5 * that can be found in the LICENSE file in the root of the source | 5 * that can be found in the LICENSE file in the root of the source |
| 6 * tree. An additional intellectual property rights grant can be found | 6 * tree. An additional intellectual property rights grant can be found |
| 7 * in the file PATENTS. All contributing project authors may | 7 * in the file PATENTS. All contributing project authors may |
| 8 * be found in the AUTHORS file in the root of the source tree. | 8 * be found in the AUTHORS file in the root of the source tree. |
| 9 */ | 9 */ |
| 10 | 10 |
| 11 #import "ARDSettingsViewController.h" | 11 #import "ARDSettingsViewController.h" |
| 12 #import "ARDSettingsModel.h" | 12 #import "ARDSettingsModel.h" |
| 13 | 13 |
| 14 NS_ASSUME_NONNULL_BEGIN | 14 NS_ASSUME_NONNULL_BEGIN |
| 15 | 15 |
| 16 typedef NS_ENUM(int, ARDSettingsSections) { | 16 typedef NS_ENUM(int, ARDSettingsSections) { |
| 17 ARDSettingsSectionMediaConstraints = 0, | 17 ARDSettingsSectionMediaConstraints = 0, |
| 18 ARDSettingsSectionBitRate | 18 ARDSettingsSectionVideoCodec, |
| 19 ARDSettingsSectionBitRate, | |
| 19 }; | 20 }; |
| 20 | 21 |
| 21 @interface ARDSettingsViewController () <UITextFieldDelegate> { | 22 @interface ARDSettingsViewController () <UITextFieldDelegate> { |
| 22 ARDSettingsModel *_settingsModel; | 23 ARDSettingsModel *_settingsModel; |
| 23 } | 24 } |
| 24 | 25 |
| 25 @end | 26 @end |
| 26 | 27 |
| 27 @implementation ARDSettingsViewController | 28 @implementation ARDSettingsViewController |
| 28 | 29 |
| 29 - (instancetype)initWithStyle:(UITableViewStyle)style | 30 - (instancetype)initWithStyle:(UITableViewStyle)style |
| 30 settingsModel:(ARDSettingsModel *)settingsModel { | 31 settingsModel:(ARDSettingsModel *)settingsModel { |
| 31 self = [super initWithStyle:style]; | 32 self = [super initWithStyle:style]; |
| 32 if (self) { | 33 if (self) { |
| 33 _settingsModel = settingsModel; | 34 _settingsModel = settingsModel; |
| 34 } | 35 } |
| 35 return self; | 36 return self; |
| 36 } | 37 } |
| 37 | 38 |
| 38 #pragma mark - View lifecycle | 39 #pragma mark - View lifecycle |
| 39 | 40 |
| 40 - (void)viewDidLoad { | 41 - (void)viewDidLoad { |
| 41 [super viewDidLoad]; | 42 [super viewDidLoad]; |
| 42 self.title = @"Settings"; | 43 self.title = @"Settings"; |
| 43 [self addDoneBarButton]; | 44 [self addDoneBarButton]; |
| 44 } | 45 } |
| 45 | 46 |
| 47 - (void)viewWillAppear:(BOOL)animated { | |
| 48 [super viewWillAppear:animated]; | |
| 49 [self addCheckmarkInSection:ARDSettingsSectionMediaConstraints | |
| 50 withArray:[self mediaConstraintsArray] | |
| 51 selecting:[_settingsModel currentVideoResoultionConstraintFr omStore]]; | |
| 52 [self addCheckmarkInSection:ARDSettingsSectionVideoCodec | |
| 53 withArray:[self videoCodecArray] | |
| 54 selecting:[_settingsModel currentVideoCodecSettingFromStore] ]; | |
| 55 } | |
| 56 | |
| 46 - (void)viewDidAppear:(BOOL)animated { | 57 - (void)viewDidAppear:(BOOL)animated { |
|
daniela-webrtc
2017/03/20 13:10:07
This can be removed
| |
| 47 [super viewDidAppear:animated]; | 58 [super viewDidAppear:animated]; |
| 48 [self selectCurrentlyStoredOrDefaultMediaConstraints]; | |
| 49 } | 59 } |
| 50 | 60 |
| 51 #pragma mark - Data source | 61 #pragma mark - Data source |
| 52 | 62 |
| 53 - (NSArray<NSString *> *)mediaConstraintsArray { | 63 - (NSArray<NSString *> *)mediaConstraintsArray { |
| 54 return _settingsModel.availableVideoResoultionsMediaConstraints; | 64 return _settingsModel.availableVideoResoultionsMediaConstraints; |
| 55 } | 65 } |
| 56 | 66 |
| 67 - (NSArray<NSString *> *)videoCodecArray { | |
| 68 return _settingsModel.availableVideoCodecs; | |
| 69 } | |
| 70 | |
| 57 #pragma mark - | 71 #pragma mark - |
| 58 | 72 |
| 59 - (void)addDoneBarButton { | 73 - (void)addDoneBarButton { |
| 60 UIBarButtonItem *barItem = | 74 UIBarButtonItem *barItem = |
| 61 [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItem Done | 75 [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItem Done |
| 62 target:self | 76 target:self |
| 63 action:@selector(dismissModa lly:)]; | 77 action:@selector(dismissModa lly:)]; |
| 64 self.navigationItem.leftBarButtonItem = barItem; | 78 self.navigationItem.leftBarButtonItem = barItem; |
| 65 } | 79 } |
| 66 | 80 |
| 67 - (void)selectCurrentlyStoredOrDefaultMediaConstraints { | 81 - (void)addCheckmarkInSection:(int)section |
| 68 NSString *currentSelection = [_settingsModel currentVideoResoultionConstraintF romStore]; | 82 withArray:(NSArray<NSString*>*) array |
| 69 | 83 selecting:(NSString*)selection { |
| 70 NSUInteger indexOfSelection = [[self mediaConstraintsArray] indexOfObject:curr entSelection]; | 84 NSUInteger indexOfSelection = [array indexOfObject:selection]; |
| 71 NSIndexPath *pathToBeSelected = [NSIndexPath indexPathForRow:indexOfSelection inSection:0]; | 85 NSIndexPath *pathToBeDecorated = [NSIndexPath indexPathForRow:indexOfSelection |
| 72 [self.tableView selectRowAtIndexPath:pathToBeSelected | 86 inSection:section]; |
| 73 animated:NO | 87 UITableViewCell *cell = [self.tableView cellForRowAtIndexPath:pathToBeDecorate d]; |
| 74 scrollPosition:UITableViewScrollPositionNone]; | 88 cell.accessoryType = UITableViewCellAccessoryCheckmark; |
| 75 // Manully invoke the delegate method because the previous invocation will not . | |
| 76 [self tableView:self.tableView didSelectRowAtIndexPath:pathToBeSelected]; | |
| 77 } | 89 } |
| 78 | 90 |
| 79 #pragma mark - Dismissal of view controller | 91 #pragma mark - Dismissal of view controller |
| 80 | 92 |
| 81 - (void)dismissModally:(id)sender { | 93 - (void)dismissModally:(id)sender { |
| 82 [self dismissViewControllerAnimated:YES completion:nil]; | 94 [self dismissViewControllerAnimated:YES completion:nil]; |
| 83 } | 95 } |
| 84 | 96 |
| 85 #pragma mark - Table view data source | 97 #pragma mark - Table view data source |
| 86 | 98 |
| 87 - (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView { | 99 - (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView { |
| 88 return 2; | 100 return 3; |
| 89 } | 101 } |
| 90 | 102 |
| 91 - (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger )section { | 103 - (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger )section { |
| 92 if ([self sectionIsMediaConstraints:section]) { | 104 switch (section) { |
| 93 return self.mediaConstraintsArray.count; | 105 case ARDSettingsSectionMediaConstraints: |
| 106 return self.mediaConstraintsArray.count; | |
| 107 case ARDSettingsSectionVideoCodec: | |
| 108 return self.videoCodecArray.count; | |
| 109 default: | |
| 110 return 1; | |
| 94 } | 111 } |
| 95 | |
| 96 return 1; | |
| 97 } | 112 } |
| 98 | 113 |
| 99 #pragma mark - Index path helpers | 114 #pragma mark - Table view delegate helpers |
| 100 | 115 |
| 101 - (BOOL)sectionIsMediaConstraints:(int)section { | 116 - (void)removeAllAccessories:(UITableView *)tableView |
| 102 return section == ARDSettingsSectionMediaConstraints; | 117 inSection:(int)section |
| 118 { | |
| 119 for (int i = 0; i < [tableView numberOfRowsInSection:section]; i++) { | |
| 120 NSIndexPath *rowPath = [NSIndexPath indexPathForRow:i inSection:section]; | |
| 121 UITableViewCell *cell = [tableView cellForRowAtIndexPath:rowPath]; | |
| 122 cell.accessoryType = UITableViewCellAccessoryNone; | |
| 123 } | |
| 103 } | 124 } |
| 104 | 125 |
| 105 - (BOOL)sectionIsBitrate:(int)section { | 126 - (void)tableView:(UITableView *)tableView |
| 106 return section == ARDSettingsSectionBitRate; | 127 updateListSelectionAtIndexPath:(NSIndexPath *)indexPath |
| 107 } | 128 inSection:(int)section { |
| 108 | 129 [self removeAllAccessories:tableView inSection:section]; |
| 109 - (BOOL)indexPathIsMediaConstraints:(NSIndexPath *)indexPath { | 130 UITableViewCell *cell = [tableView cellForRowAtIndexPath:indexPath]; |
| 110 return [self sectionIsMediaConstraints:indexPath.section]; | 131 cell.accessoryType = UITableViewCellAccessoryCheckmark; |
| 111 } | 132 [tableView deselectRowAtIndexPath:indexPath animated:YES]; |
| 112 | |
| 113 - (BOOL)indexPathIsBitrate:(NSIndexPath *)indexPath { | |
| 114 return [self sectionIsBitrate:indexPath.section]; | |
| 115 } | 133 } |
| 116 | 134 |
| 117 #pragma mark - Table view delegate | 135 #pragma mark - Table view delegate |
| 118 | 136 |
| 119 - (nullable NSString *)tableView:(UITableView *)tableView | 137 - (nullable NSString *)tableView:(UITableView *)tableView |
| 120 titleForHeaderInSection:(NSInteger)section { | 138 titleForHeaderInSection:(NSInteger)section { |
| 121 if ([self sectionIsMediaConstraints:section]) { | 139 switch (section) { |
| 122 return @"Media constraints"; | 140 case ARDSettingsSectionMediaConstraints: |
| 141 return @"Media constraints"; | |
| 142 case ARDSettingsSectionVideoCodec: | |
| 143 return @"Video codec"; | |
| 144 case ARDSettingsSectionBitRate: | |
| 145 return @"Maximum bitrate"; | |
| 146 default: | |
| 147 return @""; | |
| 123 } | 148 } |
| 124 | |
| 125 if ([self sectionIsBitrate:section]) { | |
| 126 return @"Maximum bitrate"; | |
| 127 } | |
| 128 | |
| 129 return @""; | |
| 130 } | 149 } |
| 131 | 150 |
| 132 - (UITableViewCell *)tableView:(UITableView *)tableView | 151 - (UITableViewCell *)tableView:(UITableView *)tableView |
| 133 cellForRowAtIndexPath:(NSIndexPath *)indexPath { | 152 cellForRowAtIndexPath:(NSIndexPath *)indexPath { |
| 134 if ([self indexPathIsMediaConstraints:indexPath]) { | 153 switch (indexPath.section) { |
| 135 return [self mediaConstraintsTableViewCellForTableView:tableView atIndexPath :indexPath]; | 154 case ARDSettingsSectionMediaConstraints: |
| 155 return [self mediaConstraintsTableViewCellForTableView:tableView atIndexPa th:indexPath]; | |
| 156 | |
| 157 case ARDSettingsSectionVideoCodec: | |
| 158 return [self videoCodecTableViewCellForTableView:tableView atIndexPath:ind exPath]; | |
| 159 | |
| 160 case ARDSettingsSectionBitRate: | |
| 161 return [self bitrateTableViewCellForTableView:tableView atIndexPath:indexP ath]; | |
| 162 | |
| 163 default: | |
| 164 return [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault | |
| 165 reuseIdentifier:@"identifier"]; | |
| 136 } | 166 } |
| 137 | |
| 138 if ([self indexPathIsBitrate:indexPath]) { | |
| 139 return [self bitrateTableViewCellForTableView:tableView atIndexPath:indexPat h]; | |
| 140 } | |
| 141 | |
| 142 return [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault | |
| 143 reuseIdentifier:@"identifier"]; | |
| 144 } | |
| 145 | |
| 146 - (nullable NSIndexPath *)tableView:(UITableView *)tableView | |
| 147 willSelectRowAtIndexPath:(nonnull NSIndexPath *)indexPath { | |
| 148 if ([self indexPathIsMediaConstraints:indexPath]) { | |
| 149 return [self tableView:tableView willDeselectMediaConstraintsRowAtIndexPath: indexPath]; | |
| 150 } | |
| 151 return indexPath; | |
| 152 } | 167 } |
| 153 | 168 |
| 154 - (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath { | 169 - (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath { |
| 155 if ([self indexPathIsMediaConstraints:indexPath]) { | 170 switch (indexPath.section) { |
| 156 [self tableView:tableView didSelectMediaConstraintsCellAtIndexPath:indexPath ]; | 171 case ARDSettingsSectionMediaConstraints: |
| 172 [self tableView:tableView didSelectMediaConstraintsCellAtIndexPath:indexPa th]; | |
| 173 break; | |
| 174 | |
| 175 case ARDSettingsSectionVideoCodec: | |
| 176 [self tableView:tableView didSelectVideoCodecCellAtIndexPath:indexPath]; | |
| 177 break; | |
| 157 } | 178 } |
| 158 } | 179 } |
| 159 | 180 |
| 160 #pragma mark - Table view delegate(Media Constraints) | 181 #pragma mark - Table view delegate(Media Constraints) |
| 161 | 182 |
| 162 - (UITableViewCell *)mediaConstraintsTableViewCellForTableView:(UITableView *)ta bleView | 183 - (UITableViewCell *)mediaConstraintsTableViewCellForTableView:(UITableView *)ta bleView |
| 163 atIndexPath:(NSIndexPath *)in dexPath { | 184 atIndexPath:(NSIndexPath *)in dexPath { |
| 164 NSString *dequeueIdentifier = @"ARDSettingsMediaConstraintsViewCellIdentifier" ; | 185 NSString *dequeueIdentifier = @"ARDSettingsMediaConstraintsViewCellIdentifier" ; |
| 165 UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:dequeueId entifier]; | 186 UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:dequeueId entifier]; |
| 166 if (!cell) { | 187 if (!cell) { |
| 167 cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault | 188 cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault |
| 168 reuseIdentifier:dequeueIdentifier]; | 189 reuseIdentifier:dequeueIdentifier]; |
| 169 } | 190 } |
| 170 cell.textLabel.text = self.mediaConstraintsArray[indexPath.row]; | 191 cell.textLabel.text = self.mediaConstraintsArray[indexPath.row]; |
| 171 return cell; | 192 return cell; |
| 172 } | 193 } |
| 173 | 194 |
| 174 - (void)tableView:(UITableView *)tableView | 195 - (void)tableView:(UITableView *)tableView |
| 175 didSelectMediaConstraintsCellAtIndexPath:(NSIndexPath *)indexPath { | 196 didSelectMediaConstraintsCellAtIndexPath:(NSIndexPath *)indexPath { |
| 176 UITableViewCell *cell = [tableView cellForRowAtIndexPath:indexPath]; | 197 [self tableView:tableView |
| 177 cell.accessoryType = UITableViewCellAccessoryCheckmark; | 198 updateListSelectionAtIndexPath:indexPath |
| 199 inSection:ARDSettingsSectionMediaConstraints]; | |
| 178 | 200 |
| 179 NSString *mediaConstraintsString = self.mediaConstraintsArray[indexPath.row]; | 201 NSString *mediaConstraintsString = self.mediaConstraintsArray[indexPath.row]; |
| 180 [_settingsModel storeVideoResoultionConstraint:mediaConstraintsString]; | 202 [_settingsModel storeVideoResoultionConstraint:mediaConstraintsString]; |
| 181 } | 203 } |
| 182 | 204 |
| 183 - (NSIndexPath *)tableView:(UITableView *)tableView | 205 #pragma mark - Table view delegate(Video Codec) |
| 184 willDeselectMediaConstraintsRowAtIndexPath:(NSIndexPath *)indexPath { | 206 |
| 185 NSIndexPath *oldSelection = [tableView indexPathForSelectedRow]; | 207 - (UITableViewCell *)videoCodecTableViewCellForTableView:(UITableView *)tableVie w |
| 186 UITableViewCell *cell = [tableView cellForRowAtIndexPath:oldSelection]; | 208 atIndexPath:(NSIndexPath *)indexPat h { |
| 187 cell.accessoryType = UITableViewCellAccessoryNone; | 209 NSString *dequeueIdentifier = @"ARDSettingsVideoCodecCellIdentifier"; |
| 188 return indexPath; | 210 UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:dequeueId entifier]; |
| 211 if (!cell) { | |
| 212 cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault | |
| 213 reuseIdentifier:dequeueIdentifier]; | |
| 214 } | |
| 215 cell.textLabel.text = self.videoCodecArray[indexPath.row]; | |
| 216 | |
| 217 return cell; | |
| 218 } | |
| 219 | |
| 220 - (void)tableView:(UITableView *)tableView | |
| 221 didSelectVideoCodecCellAtIndexPath:(NSIndexPath *)indexPath { | |
| 222 [self tableView:tableView | |
| 223 updateListSelectionAtIndexPath:indexPath | |
| 224 inSection:ARDSettingsSectionVideoCodec]; | |
| 225 | |
| 226 NSString *videoCodec = self.videoCodecArray[indexPath.row]; | |
| 227 [_settingsModel storeVideoCodecSetting:videoCodec]; | |
| 189 } | 228 } |
| 190 | 229 |
| 191 #pragma mark - Table view delegate(Bitrate) | 230 #pragma mark - Table view delegate(Bitrate) |
| 192 | 231 |
| 193 - (UITableViewCell *)bitrateTableViewCellForTableView:(UITableView *)tableView | 232 - (UITableViewCell *)bitrateTableViewCellForTableView:(UITableView *)tableView |
| 194 atIndexPath:(NSIndexPath *)indexPath { | 233 atIndexPath:(NSIndexPath *)indexPath { |
| 195 NSString *dequeueIdentifier = @"ARDSettingsBitrateCellIdentifier"; | 234 NSString *dequeueIdentifier = @"ARDSettingsBitrateCellIdentifier"; |
| 196 UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:dequeueId entifier]; | 235 UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:dequeueId entifier]; |
| 197 if (!cell) { | 236 if (!cell) { |
| 198 cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault | 237 cell = [[UITableViewCell alloc] initWithStyle:UITableViewCellStyleDefault |
| (...skipping 36 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... | |
| 235 | 274 |
| 236 if (textField.text.length != 0) { | 275 if (textField.text.length != 0) { |
| 237 bitrateNumber = [NSNumber numberWithInteger:textField.text.intValue]; | 276 bitrateNumber = [NSNumber numberWithInteger:textField.text.intValue]; |
| 238 } | 277 } |
| 239 | 278 |
| 240 [_settingsModel storeMaxBitrateSetting:bitrateNumber]; | 279 [_settingsModel storeMaxBitrateSetting:bitrateNumber]; |
| 241 } | 280 } |
| 242 | 281 |
| 243 @end | 282 @end |
| 244 NS_ASSUME_NONNULL_END | 283 NS_ASSUME_NONNULL_END |
| OLD | NEW |