// // EMDevicePickerViewController.m // TestAppExample // // Created by Dexter Weiss on 10/10/13. // Copyright (c) 2013 Emmoco. All rights reserved. // #import "EMDevicePickerViewController.h" #import "EMFramework.h" #import @interface EMDevicePickerViewController () @property (nonatomic, strong) IBOutlet UIView *connectingView; @property (nonatomic, strong) IBOutlet UIActivityIndicatorView *activityIndicator; @property (nonatomic, strong) IBOutlet UIView *popoverView; @end @implementation EMDevicePickerViewController - (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil { self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil]; if (self) { // Custom initialization } return self; } - (void)viewDidLoad { [super viewDidLoad]; [[EMConnectionManager sharedManager] setBackgroundUpdatesEnabled:TRUE]; [[EMConnectionListManager sharedManager] addObserver:self forKeyPath:@"devices" options:0 context:NULL]; } -(void)_showConnectingView { if (UI_USER_INTERFACE_IDIOM() == UIUserInterfaceIdiomPad) { if(UIDeviceOrientationIsLandscape([[UIDevice currentDevice] orientation])) { [[NSBundle mainBundle] loadNibNamed:@"EMConnectingView_iPad_Landscape" owner:self options:nil]; } else { [[NSBundle mainBundle] loadNibNamed:@"EMConnectingView_iPad" owner:self options:nil]; } } else { if(UIDeviceOrientationIsLandscape([[UIDevice currentDevice] orientation])) { [[NSBundle mainBundle] loadNibNamed:@"EMConnectingView" owner:self options:nil]; } else { [[NSBundle mainBundle] loadNibNamed:@"EMConnectingView_Landscape" owner:self options:nil]; } } [[[self popoverView] layer] setCornerRadius:10.0f]; [[self view] addSubview:[self connectingView]]; [[self activityIndicator] startAnimating]; } -(void)_hideConnectingView { [[self activityIndicator] stopAnimating]; [[self connectingView] removeFromSuperview]; } -(void)observeValueForKeyPath:(NSString *)keyPath ofObject:(id)object change:(NSDictionary *)change context:(void *)context { if (object == [EMConnectionListManager sharedManager]) { [[self tableView] reloadData]; } } #pragma mark - Table View Methods -(NSInteger)numberOfSectionsInTableView:(UITableView *)tableView { return 1; } -(NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section { return MAX([[[EMConnectionListManager sharedManager] devices] count], 1); } -(UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath { UITableViewCell *deviceCell = [tableView dequeueReusableCellWithIdentifier:@"DeviceCell"]; [[deviceCell detailTextLabel] setTextColor:[UIColor darkGrayColor]]; EMDeviceBasicDescription *description = nil; if ([indexPath row] < [[[EMConnectionListManager sharedManager] devices] count]) { description = [[[EMConnectionListManager sharedManager] devices] objectAtIndex:[indexPath row]]; } if (description) { [[deviceCell textLabel] setText:[description name]]; [[deviceCell detailTextLabel] setText:[NSString stringWithFormat:NSLocalizedString(@"Signal Strength: %0.0f",nil), [description signalStrength]]]; } else { [[deviceCell textLabel] setText:NSLocalizedString(@"Searching for devices...", @"No devices found string")]; [[deviceCell detailTextLabel] setText:nil]; } return deviceCell; } -(void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath { [self performSegueWithIdentifier:@"ConnectionSegue" sender:self]; if(![[[[tableView cellForRowAtIndexPath:indexPath] textLabel] text] isEqualToString:NSLocalizedString(@"Searching for devices...",nil)]) { [self _showConnectingView]; EMDeviceBasicDescription *description = [[[EMConnectionListManager sharedManager] devices] objectAtIndex:[indexPath row]]; [[EMConnectionManager sharedManager] connectDevice:description onSuccess:^ { [self _hideConnectingView]; [self performSegueWithIdentifier:@"ConnectionSegue" sender:self]; } onFail:^(NSError *error) { [self _hideConnectingView]; UIAlertView *alert = [[UIAlertView alloc] initWithTitle:NSLocalizedString(@"Connection Failed", @"Alert title") message:NSLocalizedString(@"An error occurred while trying to connect to the selected device", @"Alert message") delegate:nil cancelButtonTitle:NSLocalizedString(@"Close", @"Close button") otherButtonTitles:nil]; [alert show]; } ]; } [tableView deselectRowAtIndexPath:indexPath animated:YES]; } @end