Index: webrtc/examples/objc/AppRTCDemo/ios/ARDMainView.m |
diff --git a/webrtc/examples/objc/AppRTCDemo/ios/ARDMainView.m b/webrtc/examples/objc/AppRTCDemo/ios/ARDMainView.m |
deleted file mode 100644 |
index d9522045aebaa41635ac82da6c63c7d256afbb6c..0000000000000000000000000000000000000000 |
--- a/webrtc/examples/objc/AppRTCDemo/ios/ARDMainView.m |
+++ /dev/null |
@@ -1,392 +0,0 @@ |
-/* |
- * Copyright 2015 The WebRTC Project Authors. All rights reserved. |
- * |
- * Use of this source code is governed by a BSD-style license |
- * that can be found in the LICENSE file in the root of the source |
- * tree. An additional intellectual property rights grant can be found |
- * in the file PATENTS. All contributing project authors may |
- * be found in the AUTHORS file in the root of the source tree. |
- */ |
- |
-#import "ARDMainView.h" |
- |
-#import "UIImage+ARDUtilities.h" |
- |
-// TODO(tkchin): retrieve status bar height dynamically. |
-static CGFloat const kStatusBarHeight = 20; |
- |
-static CGFloat const kRoomTextButtonSize = 40; |
-static CGFloat const kRoomTextFieldHeight = 40; |
-static CGFloat const kRoomTextFieldMargin = 8; |
-static CGFloat const kCallControlMargin = 8; |
- |
-// Helper view that contains a text field and a clear button. |
-@interface ARDRoomTextField : UIView <UITextFieldDelegate> |
-@property(nonatomic, readonly) NSString *roomText; |
-@end |
- |
-@implementation ARDRoomTextField { |
- UITextField *_roomText; |
- UIButton *_clearButton; |
-} |
- |
-- (instancetype)initWithFrame:(CGRect)frame { |
- if (self = [super initWithFrame:frame]) { |
- _roomText = [[UITextField alloc] initWithFrame:CGRectZero]; |
- _roomText.borderStyle = UITextBorderStyleNone; |
- _roomText.font = [UIFont fontWithName:@"Roboto" size:12]; |
- _roomText.placeholder = @"Room name"; |
- _roomText.autocorrectionType = UITextAutocorrectionTypeNo; |
- _roomText.autocapitalizationType = UITextAutocapitalizationTypeNone; |
- _roomText.delegate = self; |
- [_roomText addTarget:self |
- action:@selector(textFieldDidChange:) |
- forControlEvents:UIControlEventEditingChanged]; |
- [self addSubview:_roomText]; |
- |
- _clearButton = [UIButton buttonWithType:UIButtonTypeCustom]; |
- UIImage *image = [UIImage imageForName:@"ic_clear_black_24dp.png" |
- color:[UIColor colorWithWhite:0 alpha:.4]]; |
- |
- [_clearButton setImage:image forState:UIControlStateNormal]; |
- [_clearButton addTarget:self |
- action:@selector(onClear:) |
- forControlEvents:UIControlEventTouchUpInside]; |
- _clearButton.hidden = YES; |
- [self addSubview:_clearButton]; |
- |
- // Give rounded corners and a light gray border. |
- self.layer.borderWidth = 1; |
- self.layer.borderColor = [[UIColor lightGrayColor] CGColor]; |
- self.layer.cornerRadius = 2; |
- } |
- return self; |
-} |
- |
-- (void)layoutSubviews { |
- CGRect bounds = self.bounds; |
- _clearButton.frame = CGRectMake(CGRectGetMaxX(bounds) - kRoomTextButtonSize, |
- CGRectGetMinY(bounds), |
- kRoomTextButtonSize, |
- kRoomTextButtonSize); |
- _roomText.frame = CGRectMake( |
- CGRectGetMinX(bounds) + kRoomTextFieldMargin, |
- CGRectGetMinY(bounds), |
- CGRectGetMinX(_clearButton.frame) - CGRectGetMinX(bounds) - |
- kRoomTextFieldMargin, |
- kRoomTextFieldHeight); |
-} |
- |
-- (CGSize)sizeThatFits:(CGSize)size { |
- size.height = kRoomTextFieldHeight; |
- return size; |
-} |
- |
-- (NSString *)roomText { |
- return _roomText.text; |
-} |
- |
-#pragma mark - UITextFieldDelegate |
- |
-- (BOOL)textFieldShouldReturn:(UITextField *)textField { |
- // There is no other control that can take focus, so manually resign focus |
- // when return (Join) is pressed to trigger |textFieldDidEndEditing|. |
- [textField resignFirstResponder]; |
- return YES; |
-} |
- |
-#pragma mark - Private |
- |
-- (void)textFieldDidChange:(id)sender { |
- [self updateClearButton]; |
-} |
- |
-- (void)onClear:(id)sender { |
- _roomText.text = @""; |
- [self updateClearButton]; |
- [_roomText resignFirstResponder]; |
-} |
- |
-- (void)updateClearButton { |
- _clearButton.hidden = _roomText.text.length == 0; |
-} |
- |
-@end |
- |
-@implementation ARDMainView { |
- UILabel *_appLabel; |
- ARDRoomTextField *_roomText; |
- UILabel *_callOptionsLabel; |
- UISwitch *_audioOnlySwitch; |
- UILabel *_audioOnlyLabel; |
- UISwitch *_aecdumpSwitch; |
- UILabel *_aecdumpLabel; |
- UISwitch *_levelControlSwitch; |
- UILabel *_levelControlLabel; |
- UISwitch *_loopbackSwitch; |
- UILabel *_loopbackLabel; |
- UISwitch *_useManualAudioSwitch; |
- UILabel *_useManualAudioLabel; |
- UIButton *_startCallButton; |
- UIButton *_audioLoopButton; |
-} |
- |
-@synthesize delegate = _delegate; |
-@synthesize isAudioLoopPlaying = _isAudioLoopPlaying; |
- |
-- (instancetype)initWithFrame:(CGRect)frame { |
- if (self = [super initWithFrame:frame]) { |
- _appLabel = [[UILabel alloc] initWithFrame:CGRectZero]; |
- _appLabel.text = @"AppRTCDemo"; |
- _appLabel.font = [UIFont fontWithName:@"Roboto" size:34]; |
- _appLabel.textColor = [UIColor colorWithWhite:0 alpha:.2]; |
- [_appLabel sizeToFit]; |
- [self addSubview:_appLabel]; |
- |
- _roomText = [[ARDRoomTextField alloc] initWithFrame:CGRectZero]; |
- [self addSubview:_roomText]; |
- |
- UIFont *controlFont = [UIFont fontWithName:@"Roboto" size:20]; |
- UIColor *controlFontColor = [UIColor colorWithWhite:0 alpha:.6]; |
- |
- _callOptionsLabel = [[UILabel alloc] initWithFrame:CGRectZero]; |
- _callOptionsLabel.text = @"Call Options"; |
- _callOptionsLabel.font = controlFont; |
- _callOptionsLabel.textColor = controlFontColor; |
- [_callOptionsLabel sizeToFit]; |
- [self addSubview:_callOptionsLabel]; |
- |
- _audioOnlySwitch = [[UISwitch alloc] initWithFrame:CGRectZero]; |
- [_audioOnlySwitch sizeToFit]; |
- [self addSubview:_audioOnlySwitch]; |
- |
- _audioOnlyLabel = [[UILabel alloc] initWithFrame:CGRectZero]; |
- _audioOnlyLabel.text = @"Audio only"; |
- _audioOnlyLabel.font = controlFont; |
- _audioOnlyLabel.textColor = controlFontColor; |
- [_audioOnlyLabel sizeToFit]; |
- [self addSubview:_audioOnlyLabel]; |
- |
- _loopbackSwitch = [[UISwitch alloc] initWithFrame:CGRectZero]; |
- [_loopbackSwitch sizeToFit]; |
- [self addSubview:_loopbackSwitch]; |
- |
- _loopbackLabel = [[UILabel alloc] initWithFrame:CGRectZero]; |
- _loopbackLabel.text = @"Loopback mode"; |
- _loopbackLabel.font = controlFont; |
- _loopbackLabel.textColor = controlFontColor; |
- [_loopbackLabel sizeToFit]; |
- [self addSubview:_loopbackLabel]; |
- |
- _aecdumpSwitch = [[UISwitch alloc] initWithFrame:CGRectZero]; |
- [_aecdumpSwitch sizeToFit]; |
- [self addSubview:_aecdumpSwitch]; |
- |
- _aecdumpLabel = [[UILabel alloc] initWithFrame:CGRectZero]; |
- _aecdumpLabel.text = @"Create AecDump"; |
- _aecdumpLabel.font = controlFont; |
- _aecdumpLabel.textColor = controlFontColor; |
- [_aecdumpLabel sizeToFit]; |
- [self addSubview:_aecdumpLabel]; |
- |
- _levelControlSwitch = [[UISwitch alloc] initWithFrame:CGRectZero]; |
- [_levelControlSwitch sizeToFit]; |
- [self addSubview:_levelControlSwitch]; |
- |
- _levelControlLabel = [[UILabel alloc] initWithFrame:CGRectZero]; |
- _levelControlLabel.text = @"Use level controller"; |
- _levelControlLabel.font = controlFont; |
- _levelControlLabel.textColor = controlFontColor; |
- [_levelControlLabel sizeToFit]; |
- [self addSubview:_levelControlLabel]; |
- |
- _useManualAudioSwitch = [[UISwitch alloc] initWithFrame:CGRectZero]; |
- [_useManualAudioSwitch sizeToFit]; |
- _useManualAudioSwitch.on = YES; |
- [self addSubview:_useManualAudioSwitch]; |
- |
- _useManualAudioLabel = [[UILabel alloc] initWithFrame:CGRectZero]; |
- _useManualAudioLabel.text = @"Use manual audio config"; |
- _useManualAudioLabel.font = controlFont; |
- _useManualAudioLabel.textColor = controlFontColor; |
- [_useManualAudioLabel sizeToFit]; |
- [self addSubview:_useManualAudioLabel]; |
- |
- _startCallButton = [UIButton buttonWithType:UIButtonTypeSystem]; |
- _startCallButton.backgroundColor = [UIColor blueColor]; |
- _startCallButton.layer.cornerRadius = 10; |
- _startCallButton.clipsToBounds = YES; |
- _startCallButton.contentEdgeInsets = UIEdgeInsetsMake(5, 10, 5, 10); |
- [_startCallButton setTitle:@"Start call" |
- forState:UIControlStateNormal]; |
- _startCallButton.titleLabel.font = controlFont; |
- [_startCallButton setTitleColor:[UIColor whiteColor] |
- forState:UIControlStateNormal]; |
- [_startCallButton setTitleColor:[UIColor lightGrayColor] |
- forState:UIControlStateSelected]; |
- [_startCallButton sizeToFit]; |
- [_startCallButton addTarget:self |
- action:@selector(onStartCall:) |
- forControlEvents:UIControlEventTouchUpInside]; |
- [self addSubview:_startCallButton]; |
- |
- // Used to test what happens to sounds when calls are in progress. |
- _audioLoopButton = [UIButton buttonWithType:UIButtonTypeSystem]; |
- _audioLoopButton.layer.cornerRadius = 10; |
- _audioLoopButton.clipsToBounds = YES; |
- _audioLoopButton.contentEdgeInsets = UIEdgeInsetsMake(5, 10, 5, 10); |
- _audioLoopButton.titleLabel.font = controlFont; |
- [_audioLoopButton setTitleColor:[UIColor whiteColor] |
- forState:UIControlStateNormal]; |
- [_audioLoopButton setTitleColor:[UIColor lightGrayColor] |
- forState:UIControlStateSelected]; |
- [self updateAudioLoopButton]; |
- [_audioLoopButton addTarget:self |
- action:@selector(onToggleAudioLoop:) |
- forControlEvents:UIControlEventTouchUpInside]; |
- [self addSubview:_audioLoopButton]; |
- |
- self.backgroundColor = [UIColor whiteColor]; |
- } |
- return self; |
-} |
- |
-- (void)setIsAudioLoopPlaying:(BOOL)isAudioLoopPlaying { |
- if (_isAudioLoopPlaying == isAudioLoopPlaying) { |
- return; |
- } |
- _isAudioLoopPlaying = isAudioLoopPlaying; |
- [self updateAudioLoopButton]; |
-} |
- |
-- (void)layoutSubviews { |
- CGRect bounds = self.bounds; |
- CGFloat roomTextWidth = bounds.size.width - 2 * kRoomTextFieldMargin; |
- CGFloat roomTextHeight = [_roomText sizeThatFits:bounds.size].height; |
- _roomText.frame = CGRectMake(kRoomTextFieldMargin, |
- kStatusBarHeight + kRoomTextFieldMargin, |
- roomTextWidth, |
- roomTextHeight); |
- _appLabel.center = CGPointMake(CGRectGetMidX(bounds), CGRectGetMidY(bounds)); |
- |
- CGFloat callOptionsLabelTop = |
- CGRectGetMaxY(_roomText.frame) + kCallControlMargin * 4; |
- _callOptionsLabel.frame = CGRectMake(kCallControlMargin, |
- callOptionsLabelTop, |
- _callOptionsLabel.frame.size.width, |
- _callOptionsLabel.frame.size.height); |
- |
- CGFloat audioOnlyTop = |
- CGRectGetMaxY(_callOptionsLabel.frame) + kCallControlMargin * 2; |
- CGRect audioOnlyRect = CGRectMake(kCallControlMargin * 3, |
- audioOnlyTop, |
- _audioOnlySwitch.frame.size.width, |
- _audioOnlySwitch.frame.size.height); |
- _audioOnlySwitch.frame = audioOnlyRect; |
- CGFloat audioOnlyLabelCenterX = CGRectGetMaxX(audioOnlyRect) + |
- kCallControlMargin + _audioOnlyLabel.frame.size.width / 2; |
- _audioOnlyLabel.center = CGPointMake(audioOnlyLabelCenterX, |
- CGRectGetMidY(audioOnlyRect)); |
- |
- CGFloat loopbackModeTop = |
- CGRectGetMaxY(_audioOnlySwitch.frame) + kCallControlMargin; |
- CGRect loopbackModeRect = CGRectMake(kCallControlMargin * 3, |
- loopbackModeTop, |
- _loopbackSwitch.frame.size.width, |
- _loopbackSwitch.frame.size.height); |
- _loopbackSwitch.frame = loopbackModeRect; |
- CGFloat loopbackModeLabelCenterX = CGRectGetMaxX(loopbackModeRect) + |
- kCallControlMargin + _loopbackLabel.frame.size.width / 2; |
- _loopbackLabel.center = CGPointMake(loopbackModeLabelCenterX, |
- CGRectGetMidY(loopbackModeRect)); |
- |
- CGFloat aecdumpModeTop = |
- CGRectGetMaxY(_loopbackSwitch.frame) + kCallControlMargin; |
- CGRect aecdumpModeRect = CGRectMake(kCallControlMargin * 3, |
- aecdumpModeTop, |
- _aecdumpSwitch.frame.size.width, |
- _aecdumpSwitch.frame.size.height); |
- _aecdumpSwitch.frame = aecdumpModeRect; |
- CGFloat aecdumpModeLabelCenterX = CGRectGetMaxX(aecdumpModeRect) + |
- kCallControlMargin + _aecdumpLabel.frame.size.width / 2; |
- _aecdumpLabel.center = CGPointMake(aecdumpModeLabelCenterX, |
- CGRectGetMidY(aecdumpModeRect)); |
- |
- CGFloat levelControlModeTop = |
- CGRectGetMaxY(_aecdumpSwitch.frame) + kCallControlMargin; |
- CGRect levelControlModeRect = CGRectMake(kCallControlMargin * 3, |
- levelControlModeTop, |
- _levelControlSwitch.frame.size.width, |
- _levelControlSwitch.frame.size.height); |
- _levelControlSwitch.frame = levelControlModeRect; |
- CGFloat levelControlModeLabelCenterX = CGRectGetMaxX(levelControlModeRect) + |
- kCallControlMargin + _levelControlLabel.frame.size.width / 2; |
- _levelControlLabel.center = CGPointMake(levelControlModeLabelCenterX, |
- CGRectGetMidY(levelControlModeRect)); |
- |
- CGFloat useManualAudioTop = |
- CGRectGetMaxY(_levelControlSwitch.frame) + kCallControlMargin; |
- CGRect useManualAudioRect = |
- CGRectMake(kCallControlMargin * 3, |
- useManualAudioTop, |
- _useManualAudioSwitch.frame.size.width, |
- _useManualAudioSwitch.frame.size.height); |
- _useManualAudioSwitch.frame = useManualAudioRect; |
- CGFloat useManualAudioLabelCenterX = CGRectGetMaxX(useManualAudioRect) + |
- kCallControlMargin + _useManualAudioLabel.frame.size.width / 2; |
- _useManualAudioLabel.center = |
- CGPointMake(useManualAudioLabelCenterX, |
- CGRectGetMidY(useManualAudioRect)); |
- |
- CGFloat audioLoopTop = |
- CGRectGetMaxY(useManualAudioRect) + kCallControlMargin * 3; |
- _audioLoopButton.frame = CGRectMake(kCallControlMargin, |
- audioLoopTop, |
- _audioLoopButton.frame.size.width, |
- _audioLoopButton.frame.size.height); |
- |
- CGFloat startCallTop = |
- CGRectGetMaxY(_audioLoopButton.frame) + kCallControlMargin * 3; |
- _startCallButton.frame = CGRectMake(kCallControlMargin, |
- startCallTop, |
- _startCallButton.frame.size.width, |
- _startCallButton.frame.size.height); |
-} |
- |
-#pragma mark - Private |
- |
-- (void)updateAudioLoopButton { |
- if (_isAudioLoopPlaying) { |
- _audioLoopButton.backgroundColor = [UIColor redColor]; |
- [_audioLoopButton setTitle:@"Stop sound" |
- forState:UIControlStateNormal]; |
- [_audioLoopButton sizeToFit]; |
- } else { |
- _audioLoopButton.backgroundColor = [UIColor greenColor]; |
- [_audioLoopButton setTitle:@"Play sound" |
- forState:UIControlStateNormal]; |
- [_audioLoopButton sizeToFit]; |
- } |
-} |
- |
-- (void)onToggleAudioLoop:(id)sender { |
- [_delegate mainViewDidToggleAudioLoop:self]; |
-} |
- |
-- (void)onStartCall:(id)sender { |
- NSString *room = _roomText.roomText; |
- // If this is a loopback call, allow a generated room name. |
- if (!room.length && _loopbackSwitch.isOn) { |
- room = [[NSUUID UUID] UUIDString]; |
- } |
- room = [room stringByReplacingOccurrencesOfString:@"-" withString:@""]; |
- [_delegate mainView:self |
- didInputRoom:room |
- isLoopback:_loopbackSwitch.isOn |
- isAudioOnly:_audioOnlySwitch.isOn |
- shouldMakeAecDump:_aecdumpSwitch.isOn |
- shouldUseLevelControl:_levelControlSwitch.isOn |
- useManualAudio:_useManualAudioSwitch.isOn]; |
-} |
- |
-@end |