blob: 167ef9801b3562ed8a003548949fbccdf6574eb9 [file] [log] [blame]
//
// ChildBrowserViewController.m
//
// Created by Jesse MacFadyen on 21/07/09.
// Copyright 2009 Nitobi. All rights reserved.
// Copyright (c) 2011, IBM Corporation
// Copyright 2011, Randy McMillan
//
#import "ChildBrowserViewController.h"
@implementation ChildBrowserViewController
@synthesize imageURL;
@synthesize supportedOrientations;
@synthesize isImage;
@synthesize delegate;
/*
// The designated initializer. Override if you create the controller programmatically and want to perform customization that is not appropriate for viewDidLoad.
- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil {
if (self = [super initWithNibName:nibNameOrNil bundle:nibBundleOrNil]) {
// Custom initialization
}
return self;
}
*/
+ (NSString*) resolveImageResource:(NSString*)resource
{
NSString* systemVersion = [[UIDevice currentDevice] systemVersion];
BOOL isLessThaniOS4 = ([systemVersion compare:@"4.0" options:NSNumericSearch] == NSOrderedAscending);
// the iPad image (nor retina) differentiation code was not in 3.x, and we have to explicitly set the path
if (isLessThaniOS4)
{
return [NSString stringWithFormat:@"%@.png", resource];
}
return resource;
}
- (ChildBrowserViewController*)initWithScale:(BOOL)enabled
{
self = [super init];
scaleEnabled = enabled;
return self;
}
// Implement viewDidLoad to do additional setup after loading the view, typically from a nib.
- (void)viewDidLoad {
[super viewDidLoad];
refreshBtn.image = [UIImage imageNamed:[[self class] resolveImageResource:@"ChildBrowser.bundle/but_refresh"]];
backBtn.image = [UIImage imageNamed:[[self class] resolveImageResource:@"ChildBrowser.bundle/arrow_left"]];
fwdBtn.image = [UIImage imageNamed:[[self class] resolveImageResource:@"ChildBrowser.bundle/arrow_right"]];
safariBtn.image = [UIImage imageNamed:[[self class] resolveImageResource:@"ChildBrowser.bundle/compass"]];
webView.delegate = self;
webView.scalesPageToFit = TRUE;
webView.backgroundColor = [UIColor whiteColor];
NSLog(@"View did load");
}
- (void)didReceiveMemoryWarning {
// Releases the view if it doesn't have a superview.
[super didReceiveMemoryWarning];
// Release any cached data, images, etc that aren't in use.
}
- (void)viewDidUnload {
// Release any retained subviews of the main view.
// e.g. self.myOutlet = nil;
NSLog(@"View did UN-load");
}
- (void)dealloc {
webView.delegate = nil;
[webView release];
[closeBtn release];
[refreshBtn release];
[addressLabel release];
[backBtn release];
[fwdBtn release];
[safariBtn release];
[spinner release];
[ supportedOrientations release];
[super dealloc];
}
-(void)closeBrowser
{
if(delegate != NULL)
{
[delegate onClose];
}
if ([self respondsToSelector:@selector(presentingViewController)]) {
//Reference UIViewController.h Line:179 for update to iOS 5 difference - @RandyMcMillan
[[self presentingViewController] dismissViewControllerAnimated:YES completion:nil];
} else {
[[self parentViewController] dismissModalViewControllerAnimated:YES];
}
}
-(IBAction) onDoneButtonPress:(id)sender
{
[ self closeBrowser];
NSURLRequest *request = [NSURLRequest requestWithURL:[NSURL URLWithString:@"about:blank"]];
[webView loadRequest:request];
}
-(IBAction) onSafariButtonPress:(id)sender
{
if(delegate != NULL)
{
[delegate onOpenInSafari];
}
if(isImage)
{
NSURL* pURL = [[ [NSURL alloc] initWithString:imageURL ] autorelease];
[ [ UIApplication sharedApplication ] openURL:pURL ];
}
else
{
NSURLRequest *request = webView.request;
[[UIApplication sharedApplication] openURL:request.URL];
}
}
- (BOOL)shouldAutorotateToInterfaceOrientation:(UIInterfaceOrientation) interfaceOrientation
{
BOOL autoRotate = [self.supportedOrientations count] > 1; // autorotate if only more than 1 orientation supported
if (autoRotate)
{
if ([self.supportedOrientations containsObject:
[NSNumber numberWithInt:interfaceOrientation]]) {
return YES;
}
}
return NO;
}
- (void)loadURL:(NSString*)url
{
NSLog(@"Opening Url : %@",url);
if( [url hasSuffix:@".png" ] ||
[url hasSuffix:@".jpg" ] ||
[url hasSuffix:@".jpeg" ] ||
[url hasSuffix:@".bmp" ] ||
[url hasSuffix:@".gif" ] )
{
[ imageURL release ];
imageURL = [url copy];
isImage = YES;
NSString* htmlText = @"<html><body style='background-color:#333;margin:0px;padding:0px;'><img style='min-height:200px;margin:0px;padding:0px;width:100%;height:auto;' alt='' src='IMGSRC'/></body></html>";
htmlText = [ htmlText stringByReplacingOccurrencesOfString:@"IMGSRC" withString:url ];
[webView loadHTMLString:htmlText baseURL:[NSURL URLWithString:@""]];
}
else
{
imageURL = @"";
isImage = NO;
NSURLRequest *request = [NSURLRequest requestWithURL:[NSURL URLWithString:url]];
[webView loadRequest:request];
}
webView.hidden = NO;
}
- (void)webViewDidStartLoad:(UIWebView *)sender {
addressLabel.text = @"Loading...";
backBtn.enabled = webView.canGoBack;
fwdBtn.enabled = webView.canGoForward;
[ spinner startAnimating ];
}
- (void)webViewDidFinishLoad:(UIWebView *)sender
{
NSURLRequest *request = webView.request;
NSLog(@"New Address is : %@",request.URL.absoluteString);
addressLabel.text = request.URL.absoluteString;
backBtn.enabled = webView.canGoBack;
fwdBtn.enabled = webView.canGoForward;
[ spinner stopAnimating ];
if(delegate != NULL)
{
[delegate onChildLocationChange:request.URL.absoluteString];
}
}
- (void)webView:(UIWebView *)wv didFailLoadWithError:(NSError *)error {
NSLog (@"webView:didFailLoadWithError");
[spinner stopAnimating];
addressLabel.text = @"Failed";
if (error != NULL) {
UIAlertView *errorAlert = [[UIAlertView alloc]
initWithTitle: [error localizedDescription]
message: [error localizedFailureReason]
delegate:nil
cancelButtonTitle:@"OK"
otherButtonTitles:nil];
[errorAlert show];
[errorAlert release];
}
}
@end