Developer Area

root/apps/iphone/sampleTelApp/trunk/Classes/sampleTelAppViewController.m @ 82

Revision 82, 9.1 kB (checked in by henri, 6 years ago)

Added the iPhone sampleTelApp

Line 
1//
2//  sampleTelAppAppDelegate.m
3//  sampleTelApp
4//
5//  Created by Henri Asseily on 9/12/08.
6//  Copyright __MyCompanyName__ 2008. All rights reserved.
7//
8
9#import "sampleTelAppViewController.h"
10
11@implementation sampleTelAppViewController
12
13@synthesize headerText;
14
15#pragma mark --------- View basic methods ---------
16
17-(id)init {
18        self = [super init];
19        return self;
20}
21
22- (void)viewDidLoad {
23        // First activate the Edge connection.
24        // If upon request of a .tel the iPhone doesn't have a connection, the app will
25        // quit to the springboard. A production application should fail more gracefully.
26
27        // The only way to force the EDGE network to come up is to create a connection to some
28    // address using CFStream* interface.  This code tries to create a connection to
29    // google.com.
30       
31        NSMutableURLRequest *urlReq = [NSMutableURLRequest requestWithURL:[NSURL URLWithString:@"http://google.com"]];
32        [urlReq setHTTPMethod:@"HEAD"];
33        NSURLResponse *response;
34        NSError *error;
35        [[UIApplication sharedApplication] setNetworkActivityIndicatorVisible:YES];
36        NSData *reqResults = [NSURLConnection sendSynchronousRequest:urlReq
37                                                                                           returningResponse:&response
38                                                                                                                   error:&error];
39        [[UIApplication sharedApplication] setNetworkActivityIndicatorVisible:NO];
40        if (!reqResults) {
41                UIAlertView *alert = [UIAlertView alloc];
42                [[alert initWithTitle:@"Data Connection Error"
43                                         message:[error localizedDescription]
44                                        delegate:self
45                   cancelButtonTitle:nil
46                   otherButtonTitles:@"Quit", nil] autorelease];
47                [alert show];
48        }
49               
50        // Data connection activation is now started
51        // Get on with the program
52       
53        [super viewDidLoad];
54        if (! resolver) {
55                resolver = [[[DnsResolver alloc] init] retain];
56                headerText = @"";
57                naptrArray = [[NSMutableArray arrayWithCapacity:10] retain];
58                txtArray = [[NSMutableArray arrayWithCapacity:10] retain];
59                locArray = [[NSMutableArray arrayWithCapacity:1] retain];
60                otherArray = [[NSMutableArray arrayWithCapacity:1] retain];
61        }       
62}
63
64- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation)interfaceOrientation {
65        // Return YES for supported orientations
66        return (interfaceOrientation == UIInterfaceOrientationPortrait);
67}
68
69
70- (void)didReceiveMemoryWarning {
71        [super didReceiveMemoryWarning]; // Releases the view if it doesn't have a superview
72        // Release anything that's not essential, such as cached data
73}
74
75
76- (void)dealloc {
77        [super dealloc];
78        [resolver release];
79}
80
81#pragma mark -------------- action calls ------------------
82
83// Called when a user enters a .tel in the UITextField
84- (IBAction)getTelData:(UITextField *)sender {
85        [sender resignFirstResponder];
86        [self lookupDomain:sender.text];
87        //[self performSelectorInBackground:@selector(lookupDomain:) withObject:sender.text];
88}       
89
90// Main method
91- (void)lookupDomain:(NSString *)domain {
92
93        //NSAutoreleasePool *pool = [[NSAutoreleasePool alloc] init];
94
95        // Append ".tel" if it was not provided
96        NSMutableString *requestedDomain = [NSMutableString stringWithString:domain];
97        if (![requestedDomain hasSuffix:@".tel"]) {
98                [requestedDomain appendString:@".tel"];
99        }
100        [telEntryField setText:requestedDomain];
101
102        // Clear old data
103        headerText = @"";
104        if ([naptrArray count] > 0) {
105                [naptrArray removeAllObjects];
106        }
107        if ([txtArray count] > 0) {
108                [txtArray removeAllObjects];
109        }
110        if ([locArray count] > 0) {
111                [locArray removeAllObjects];
112        }
113        [telTable reloadData];
114        //[[NSThread mainThread] performSelector:@selector(reloadData) withObject:telTable];
115
116        [[UIApplication sharedApplication] setNetworkActivityIndicatorVisible:YES];
117        [resolver getNAPTRForTel:requestedDomain inArray:naptrArray];
118        //[[NSThread mainThread] performSelector:@selector(reloadData) withObject:telTable];
119        headerText = [[resolver getTXTForTel:requestedDomain inArray:txtArray] retain];
120        //[[NSThread mainThread] performSelector:@selector(reloadData) withObject:telTable];
121        NSUInteger locCount = [resolver getLOCForTel:requestedDomain inArray:locArray];
122        if (locCount > 1) {
123                NSLog(@"Warning: %d LOC records in domain %@", locCount, requestedDomain);
124        }
125        //[[NSThread mainThread] performSelector:@selector(reloadData) withObject:telTable];
126        [[UIApplication sharedApplication] setNetworkActivityIndicatorVisible:NO];
127        [telTable reloadData];
128
129        //[pool release];
130       
131        return;
132}
133
134
135#pragma mark ---------- Table view Data Source methods ----------
136
137
138- (NSInteger)numberOfSectionsInTableView:(UITableView *)tableView {
139        return 4;
140}
141
142- (NSString *)tableView:(UITableView *)tableView titleForHeaderInSection:(NSInteger)section {
143        switch (section) {
144                case SECTION_HEADER:
145                        return @"Header";
146                        break;
147                case SECTION_NAPTR:
148                        return @"Contact Info";
149                        break;
150                case SECTION_TXT:
151                        return @"Keywords";
152                        break;
153                case SECTION_LOC:
154                        return @"Location";
155                        break;
156                default:
157                        return @"Other Records";
158                        break;
159        }
160}
161
162- (NSInteger)tableView:(UITableView *)tableView numberOfRowsInSection:(NSInteger)section {
163        switch (section) {
164                case SECTION_HEADER:
165                        if ([headerText isEqualToString:@""])
166                                return 0;
167                        return 1;
168                        break;
169                case SECTION_NAPTR:
170                        return [naptrArray count];
171                        break;
172                case SECTION_TXT:
173                        return [txtArray count];
174                        break;
175                case SECTION_LOC:
176                        return [locArray count];
177                        break;
178                default:
179                        return [otherArray count];
180                        break;
181        }
182}
183
184- (UITableViewCell *)tableView:(UITableView *)tableView cellForRowAtIndexPath:(NSIndexPath *)indexPath {
185
186        switch (indexPath.section) {
187                case SECTION_HEADER:
188                {
189                        static NSString *MyIdentifier = @"headerCell";
190
191                        UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:MyIdentifier];
192                        if (cell == nil) {
193                                NSArray *headerCellNib = [[NSBundle mainBundle] loadNibNamed:@"HeaderTableViewCell" owner:self options:nil];
194                                cell = (UITableViewCell *)[headerCellNib objectAtIndex:1];
195                        }
196                        [(UITextView *)[cell viewWithTag:1] setText:headerText];
197                        return cell;
198                }
199                        break;
200                       
201                case SECTION_NAPTR:
202                {
203                        static NSString *MyIdentifier = @"naptrCells";
204                       
205                        RecordNaptr *theRec = [naptrArray objectAtIndex:indexPath.row];
206                       
207                        UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:MyIdentifier];
208                        if (cell == nil) {
209                                NSArray *naptrCellNib = [[NSBundle mainBundle] loadNibNamed:@"NaptrTableViewCell" owner:self options:nil];
210                                cell = (UITableViewCell *)[naptrCellNib objectAtIndex:1];
211                        }
212                        [(UILabel *)[cell viewWithTag:1] setText:theRec.serviceDescription];
213                        [(UILabel *)[cell viewWithTag:2] setText:theRec.labelDescription];
214                        [(UILabel *)[cell viewWithTag:3] setText:theRec.uriContent];
215                        return cell;
216                }
217                        break;
218
219                case SECTION_TXT:
220                {
221                        static NSString *MyIdentifier = @"txtCells";
222                       
223                        RecordTxt *theRec = [txtArray objectAtIndex:indexPath.row];
224                       
225                        UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:MyIdentifier];
226                        if (cell == nil) {
227                                NSArray *txtCellNib = [[NSBundle mainBundle] loadNibNamed:@"TxtTableViewCell" owner:self options:nil];
228                                cell = (UITableViewCell *)[txtCellNib objectAtIndex:1];
229                        }
230                        [(UILabel *)[cell viewWithTag:1] setText:theRec.typeDescription];
231                        [(UILabel *)[cell viewWithTag:2] setText:theRec.textValue];
232                        return cell;
233                }
234                        break;
235
236                case SECTION_LOC:
237                {
238                        static NSString *MyIdentifier = @"locCell";
239                       
240                        RecordLoc *theRec = [locArray objectAtIndex:indexPath.row];
241                       
242                        UITableViewCell *cell = [tableView dequeueReusableCellWithIdentifier:MyIdentifier];
243                        if (cell == nil) {
244                                NSArray *locCellNib = [[NSBundle mainBundle] loadNibNamed:@"LocTableViewCell" owner:self options:nil];
245                                cell = (UITableViewCell *)[locCellNib objectAtIndex:1];
246                        }
247                        [(UILabel *)[cell viewWithTag:1] setText:theRec.description];
248                        return cell;
249                }
250                        break;
251                       
252                default:
253                {
254                        UITableViewCell *cell = nil;
255                        return cell;
256                }
257                        break;
258        }
259}
260
261#pragma mark ---------- Table view Delegate methods ----------
262
263// Row selection actions:
264//  - terminal naptr: fire off the url, and let the OS handle it
265//  - non-terminal naptr: query that domain
266//  - loc: fire off a maps url, and let the OS handle it
267- (void)tableView:(UITableView *)tableView didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
268        NSUInteger row = indexPath.row;
269        if (row != NSNotFound) {
270                [tableView deselectRowAtIndexPath:indexPath animated:NO];
271                switch (indexPath.section) {
272                        case SECTION_NAPTR:
273                        {
274                                RecordNaptr *naptr = [naptrArray objectAtIndex:row];
275                                if (naptr.isTerminal) {
276                                        NSURL *naptrUrl = [NSURL URLWithString:naptr.uriContent];
277                                        [[UIApplication sharedApplication] openURL:naptrUrl];
278                                } else {
279                                        // Non-Terminal NAPTR
280                                        [[UIApplication sharedApplication] setNetworkActivityIndicatorVisible:YES];
281                                        [self lookupDomain:naptr.uriContent];
282                                }
283                        }
284                                break;
285                        case SECTION_LOC:
286                        {
287                                RecordLoc *loc = [locArray objectAtIndex:row];
288                                NSURL *locUrl = [NSURL URLWithString:
289                                                                 [NSString stringWithFormat:@"http://maps.google.com/maps?q=%f,%f&ll=%f,%f",
290                                                                  loc.coordinate.latitude,
291                                                                  loc.coordinate.longitude,
292                                                                  loc.coordinate.latitude,
293                                                                  loc.coordinate.longitude
294                                                                  ]];
295                                [[UIApplication sharedApplication] openURL:locUrl];
296                        }
297                                break;
298                        default:
299                                break;
300                }
301        }
302}
303
304#pragma mark ---------- UIAlertView Delegate methods ----------
305
306- (void)alertView:(UIAlertView *)alertView clickedButtonAtIndex:(NSInteger)buttonIndex {
307        exit(0);
308}
309@end
Note: See TracBrowser for help on using the browser.
Telnic
Search This Site
Partners
Neustar
ICANN
Main site | WHOIS | Sell .tel | FAQ | Archived Site | About Telnic | Contact Us