| /* |
| * libjingle |
| * Copyright 2015 Google Inc. |
| * |
| * Redistribution and use in source and binary forms, with or without |
| * modification, are permitted provided that the following conditions are met: |
| * |
| * 1. Redistributions of source code must retain the above copyright notice, |
| * this list of conditions and the following disclaimer. |
| * 2. Redistributions in binary form must reproduce the above copyright notice, |
| * this list of conditions and the following disclaimer in the documentation |
| * and/or other materials provided with the distribution. |
| * 3. The name of the author may not be used to endorse or promote products |
| * derived from this software without specific prior written permission. |
| * |
| * THIS SOFTWARE IS PROVIDED BY THE AUTHOR ``AS IS'' AND ANY EXPRESS OR IMPLIED |
| * WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF |
| * MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO |
| * EVENT SHALL THE AUTHOR BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, |
| * SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, |
| * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; |
| * OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, |
| * WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR |
| * OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF |
| * ADVISED OF THE POSSIBILITY OF SUCH DAMAGE. |
| */ |
| |
| #import "ARDMainViewController.h" |
| |
| #import "ARDAppClient.h" |
| #import "ARDMainView.h" |
| #import "ARDVideoCallViewController.h" |
| |
| @interface ARDMainViewController () <ARDMainViewDelegate> |
| @end |
| |
| @implementation ARDMainViewController |
| |
| - (void)loadView { |
| ARDMainView *mainView = [[ARDMainView alloc] initWithFrame:CGRectZero]; |
| mainView.delegate = self; |
| self.view = mainView; |
| } |
| |
| - (void)applicationWillResignActive:(UIApplication *)application { |
| // Terminate any calls when we aren't active. |
| [self dismissViewControllerAnimated:NO completion:nil]; |
| } |
| |
| #pragma mark - ARDMainViewDelegate |
| |
| - (void)mainView:(ARDMainView *)mainView didInputRoom:(NSString *)room { |
| if (!room.length) { |
| return; |
| } |
| // Trim whitespaces. |
| NSCharacterSet *whitespaceSet = [NSCharacterSet whitespaceCharacterSet]; |
| NSString *trimmedRoom = [room stringByTrimmingCharactersInSet:whitespaceSet]; |
| |
| // Check that room name is valid. |
| NSError *error = nil; |
| NSRegularExpressionOptions options = NSRegularExpressionCaseInsensitive; |
| NSRegularExpression *regex = |
| [NSRegularExpression regularExpressionWithPattern:@"\\w+" |
| options:options |
| error:&error]; |
| if (error) { |
| [self showAlertWithMessage:error.localizedDescription]; |
| return; |
| } |
| NSRange matchRange = |
| [regex rangeOfFirstMatchInString:trimmedRoom |
| options:0 |
| range:NSMakeRange(0, trimmedRoom.length)]; |
| if (matchRange.location == NSNotFound || |
| matchRange.length != trimmedRoom.length) { |
| [self showAlertWithMessage:@"Invalid room name."]; |
| return; |
| } |
| |
| // Kick off the video call. |
| ARDVideoCallViewController *videoCallViewController = |
| [[ARDVideoCallViewController alloc] initForRoom:trimmedRoom]; |
| videoCallViewController.modalTransitionStyle = |
| UIModalTransitionStyleCrossDissolve; |
| [self presentViewController:videoCallViewController |
| animated:YES |
| completion:nil]; |
| } |
| |
| #pragma mark - Private |
| |
| - (void)showAlertWithMessage:(NSString*)message { |
| UIAlertView* alertView = [[UIAlertView alloc] initWithTitle:nil |
| message:message |
| delegate:nil |
| cancelButtonTitle:@"OK" |
| otherButtonTitles:nil]; |
| [alertView show]; |
| } |
| |
| @end |