blob: c3bd24a7a06d0b10a439989f34f448bbd2b6bf98 [file] [log] [blame]
tkchin@webrtc.orgef2a5dd2015-01-15 22:38:21 +00001/*
Donald E Curtisa8736442015-08-05 15:48:13 -07002 * Copyright 2015 The WebRTC Project Authors. All rights reserved.
tkchin@webrtc.orgef2a5dd2015-01-15 22:38:21 +00003 *
Donald E Curtisa8736442015-08-05 15:48:13 -07004 * 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
6 * tree. An additional intellectual property rights grant can be found
7 * in the file PATENTS. All contributing project authors may
8 * be found in the AUTHORS file in the root of the source tree.
tkchin@webrtc.orgef2a5dd2015-01-15 22:38:21 +00009 */
10
11#import "ARDMainView.h"
12
13#import "UIImage+ARDUtilities.h"
14
tkchin@webrtc.orgef2a5dd2015-01-15 22:38:21 +000015static CGFloat const kRoomTextFieldHeight = 40;
16static CGFloat const kRoomTextFieldMargin = 8;
haysc913e6452015-10-02 11:44:03 -070017static CGFloat const kCallControlMargin = 8;
tkchin@webrtc.orgef2a5dd2015-01-15 22:38:21 +000018
tkchin@webrtc.orgef2a5dd2015-01-15 22:38:21 +000019// Helper view that contains a text field and a clear button.
20@interface ARDRoomTextField : UIView <UITextFieldDelegate>
haysc913e6452015-10-02 11:44:03 -070021@property(nonatomic, readonly) NSString *roomText;
tkchin@webrtc.orgef2a5dd2015-01-15 22:38:21 +000022@end
23
24@implementation ARDRoomTextField {
25 UITextField *_roomText;
tkchin@webrtc.orgef2a5dd2015-01-15 22:38:21 +000026}
27
tkchin@webrtc.orgef2a5dd2015-01-15 22:38:21 +000028- (instancetype)initWithFrame:(CGRect)frame {
29 if (self = [super initWithFrame:frame]) {
30 _roomText = [[UITextField alloc] initWithFrame:CGRectZero];
31 _roomText.borderStyle = UITextBorderStyleNone;
Peter Hanspers823f9132018-05-07 11:04:24 +020032 _roomText.font = [UIFont systemFontOfSize:12];
tkchin@webrtc.orgef2a5dd2015-01-15 22:38:21 +000033 _roomText.placeholder = @"Room name";
hayscedd8fef2015-12-08 11:08:39 -080034 _roomText.autocorrectionType = UITextAutocorrectionTypeNo;
35 _roomText.autocapitalizationType = UITextAutocapitalizationTypeNone;
denicijaae708762016-11-02 03:02:29 -070036 _roomText.clearButtonMode = UITextFieldViewModeAlways;
tkchin@webrtc.orgef2a5dd2015-01-15 22:38:21 +000037 _roomText.delegate = self;
tkchin@webrtc.orgef2a5dd2015-01-15 22:38:21 +000038 [self addSubview:_roomText];
39
tkchin@webrtc.orgef2a5dd2015-01-15 22:38:21 +000040 // Give rounded corners and a light gray border.
41 self.layer.borderWidth = 1;
42 self.layer.borderColor = [[UIColor lightGrayColor] CGColor];
43 self.layer.cornerRadius = 2;
44 }
45 return self;
46}
47
48- (void)layoutSubviews {
denicijaae708762016-11-02 03:02:29 -070049 _roomText.frame =
50 CGRectMake(kRoomTextFieldMargin, 0, CGRectGetWidth(self.bounds) - kRoomTextFieldMargin,
51 kRoomTextFieldHeight);
tkchin@webrtc.orgef2a5dd2015-01-15 22:38:21 +000052}
53
54- (CGSize)sizeThatFits:(CGSize)size {
55 size.height = kRoomTextFieldHeight;
56 return size;
57}
58
haysc913e6452015-10-02 11:44:03 -070059- (NSString *)roomText {
60 return _roomText.text;
61}
62
tkchin@webrtc.orgef2a5dd2015-01-15 22:38:21 +000063#pragma mark - UITextFieldDelegate
64
tkchin@webrtc.orgef2a5dd2015-01-15 22:38:21 +000065- (BOOL)textFieldShouldReturn:(UITextField *)textField {
66 // There is no other control that can take focus, so manually resign focus
67 // when return (Join) is pressed to trigger |textFieldDidEndEditing|.
68 [textField resignFirstResponder];
69 return YES;
70}
71
tkchin@webrtc.orgef2a5dd2015-01-15 22:38:21 +000072@end
73
tkchin@webrtc.orgef2a5dd2015-01-15 22:38:21 +000074@implementation ARDMainView {
tkchin@webrtc.orgef2a5dd2015-01-15 22:38:21 +000075 ARDRoomTextField *_roomText;
Peter Hanspers823f9132018-05-07 11:04:24 +020076 UIButton *_startRegularCallButton;
77 UIButton *_startLoopbackCallButton;
Zeke Chin615fabb2016-02-24 10:58:52 -080078 UIButton *_audioLoopButton;
tkchin@webrtc.orgef2a5dd2015-01-15 22:38:21 +000079}
80
81@synthesize delegate = _delegate;
Tze Kwang Chin307a0922016-03-21 13:57:40 -070082@synthesize isAudioLoopPlaying = _isAudioLoopPlaying;
tkchin@webrtc.orgef2a5dd2015-01-15 22:38:21 +000083
84- (instancetype)initWithFrame:(CGRect)frame {
85 if (self = [super initWithFrame:frame]) {
tkchin@webrtc.orgef2a5dd2015-01-15 22:38:21 +000086 _roomText = [[ARDRoomTextField alloc] initWithFrame:CGRectZero];
tkchin@webrtc.orgef2a5dd2015-01-15 22:38:21 +000087 [self addSubview:_roomText];
88
Peter Hanspers823f9132018-05-07 11:04:24 +020089 UIFont *controlFont = [UIFont boldSystemFontOfSize:18.0];
90 UIColor *controlFontColor = [UIColor whiteColor];
haysc913e6452015-10-02 11:44:03 -070091
Peter Hanspers823f9132018-05-07 11:04:24 +020092 _startRegularCallButton = [UIButton buttonWithType:UIButtonTypeSystem];
93 _startRegularCallButton.titleLabel.font = controlFont;
94 [_startRegularCallButton setTitleColor:controlFontColor forState:UIControlStateNormal];
95 _startRegularCallButton.backgroundColor
96 = [UIColor colorWithRed:66.0/255.0 green:200.0/255.0 blue:90.0/255.0 alpha:1.0];
97 [_startRegularCallButton setTitle:@"Call room" forState:UIControlStateNormal];
98 [_startRegularCallButton addTarget:self
99 action:@selector(onStartRegularCall:)
100 forControlEvents:UIControlEventTouchUpInside];
101 [self addSubview:_startRegularCallButton];
haysc913e6452015-10-02 11:44:03 -0700102
Peter Hanspers823f9132018-05-07 11:04:24 +0200103 _startLoopbackCallButton = [UIButton buttonWithType:UIButtonTypeSystem];
104 _startLoopbackCallButton.titleLabel.font = controlFont;
105 [_startLoopbackCallButton setTitleColor:controlFontColor forState:UIControlStateNormal];
106 _startLoopbackCallButton.backgroundColor =
107 [UIColor colorWithRed:0.0 green:122.0/255.0 blue:1.0 alpha:1.0];
108 [_startLoopbackCallButton setTitle:@"Loopback call" forState:UIControlStateNormal];
109 [_startLoopbackCallButton addTarget:self
110 action:@selector(onStartLoopbackCall:)
111 forControlEvents:UIControlEventTouchUpInside];
112 [self addSubview:_startLoopbackCallButton];
haysc913e6452015-10-02 11:44:03 -0700113
haysc913e6452015-10-02 11:44:03 -0700114
Zeke Chin615fabb2016-02-24 10:58:52 -0800115 // Used to test what happens to sounds when calls are in progress.
116 _audioLoopButton = [UIButton buttonWithType:UIButtonTypeSystem];
Zeke Chin615fabb2016-02-24 10:58:52 -0800117 _audioLoopButton.titleLabel.font = controlFont;
Peter Hanspers823f9132018-05-07 11:04:24 +0200118 [_audioLoopButton setTitleColor:controlFontColor forState:UIControlStateNormal];
119 _audioLoopButton.backgroundColor =
120 [UIColor colorWithRed:1.0 green:149.0/255.0 blue:0.0 alpha:1.0];
Zeke Chin615fabb2016-02-24 10:58:52 -0800121 [self updateAudioLoopButton];
122 [_audioLoopButton addTarget:self
123 action:@selector(onToggleAudioLoop:)
124 forControlEvents:UIControlEventTouchUpInside];
125 [self addSubview:_audioLoopButton];
126
tkchin@webrtc.orgef2a5dd2015-01-15 22:38:21 +0000127 self.backgroundColor = [UIColor whiteColor];
128 }
129 return self;
130}
131
Tze Kwang Chin307a0922016-03-21 13:57:40 -0700132- (void)setIsAudioLoopPlaying:(BOOL)isAudioLoopPlaying {
133 if (_isAudioLoopPlaying == isAudioLoopPlaying) {
134 return;
135 }
136 _isAudioLoopPlaying = isAudioLoopPlaying;
137 [self updateAudioLoopButton];
138}
139
tkchin@webrtc.orgef2a5dd2015-01-15 22:38:21 +0000140- (void)layoutSubviews {
141 CGRect bounds = self.bounds;
142 CGFloat roomTextWidth = bounds.size.width - 2 * kRoomTextFieldMargin;
143 CGFloat roomTextHeight = [_roomText sizeThatFits:bounds.size].height;
denicija6d6762c2016-10-28 04:53:16 -0700144 _roomText.frame =
Peter Hanspers823f9132018-05-07 11:04:24 +0200145 CGRectMake(kRoomTextFieldMargin, kRoomTextFieldMargin, roomTextWidth,
146 roomTextHeight);
haysc913e6452015-10-02 11:44:03 -0700147
Peter Hanspers823f9132018-05-07 11:04:24 +0200148 CGFloat buttonHeight =
149 (CGRectGetMaxY(self.bounds) - CGRectGetMaxY(_roomText.frame) - kCallControlMargin * 4) / 3;
haysc913e6452015-10-02 11:44:03 -0700150
Peter Hanspers823f9132018-05-07 11:04:24 +0200151 CGFloat regularCallFrameTop = CGRectGetMaxY(_roomText.frame) + kCallControlMargin;
152 CGRect regularCallFrame = CGRectMake(kCallControlMargin,
153 regularCallFrameTop,
154 bounds.size.width - 2*kCallControlMargin,
155 buttonHeight);
haysc913e6452015-10-02 11:44:03 -0700156
Peter Hanspers823f9132018-05-07 11:04:24 +0200157 CGFloat loopbackCallFrameTop = CGRectGetMaxY(regularCallFrame) + kCallControlMargin;
158 CGRect loopbackCallFrame = CGRectMake(kCallControlMargin,
159 loopbackCallFrameTop,
160 bounds.size.width - 2*kCallControlMargin,
161 buttonHeight);
Zeke Chin615fabb2016-02-24 10:58:52 -0800162
Peter Hanspers823f9132018-05-07 11:04:24 +0200163 CGFloat audioLoopTop = CGRectGetMaxY(loopbackCallFrame) + kCallControlMargin;
164 CGRect audioLoopFrame = CGRectMake(kCallControlMargin,
165 audioLoopTop,
166 bounds.size.width - 2*kCallControlMargin,
167 buttonHeight);
168
169 _startRegularCallButton.frame = regularCallFrame;
170 _startLoopbackCallButton.frame = loopbackCallFrame;
171 _audioLoopButton.frame = audioLoopFrame;
tkchin@webrtc.orgef2a5dd2015-01-15 22:38:21 +0000172}
173
haysc913e6452015-10-02 11:44:03 -0700174#pragma mark - Private
175
Zeke Chin615fabb2016-02-24 10:58:52 -0800176- (void)updateAudioLoopButton {
Tze Kwang Chin307a0922016-03-21 13:57:40 -0700177 if (_isAudioLoopPlaying) {
Peter Hanspers823f9132018-05-07 11:04:24 +0200178 [_audioLoopButton setTitle:@"Stop sound" forState:UIControlStateNormal];
Zeke Chin615fabb2016-02-24 10:58:52 -0800179 } else {
Peter Hanspers823f9132018-05-07 11:04:24 +0200180 [_audioLoopButton setTitle:@"Play sound" forState:UIControlStateNormal];
Zeke Chin615fabb2016-02-24 10:58:52 -0800181 }
182}
183
184- (void)onToggleAudioLoop:(id)sender {
Tze Kwang Chin307a0922016-03-21 13:57:40 -0700185 [_delegate mainViewDidToggleAudioLoop:self];
Zeke Chin615fabb2016-02-24 10:58:52 -0800186}
187
Peter Hanspers823f9132018-05-07 11:04:24 +0200188- (void)onStartRegularCall:(id)sender {
189 [_delegate mainView:self didInputRoom:_roomText.roomText isLoopback:NO];
190}
191
192- (void)onStartLoopbackCall:(id)sender {
193 [_delegate mainView:self didInputRoom:_roomText.roomText isLoopback:YES];
tkchin@webrtc.orgef2a5dd2015-01-15 22:38:21 +0000194}
195
196@end