EMDevicePickerViewController.m
4.33 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
//
// 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 <QuartzCore/QuartzCore.h>
@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)
{
[[NSBundle mainBundle] loadNibNamed:@"EMConnectingView_iPad" owner:self options:nil];
}
else
{
[[NSBundle mainBundle] loadNibNamed:@"EMConnectingView" 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