updated inappbrowser with latest native + js code

This commit is contained in:
Steven Gill 2013-06-13 15:49:11 -07:00
parent 9f8af5f464
commit 8c0c36d5bf
4 changed files with 42 additions and 5 deletions

View File

@ -21,6 +21,7 @@ package org.apache.cordova.core;
import java.util.HashMap; import java.util.HashMap;
import java.util.StringTokenizer; import java.util.StringTokenizer;
import org.apache.cordova.Config; import org.apache.cordova.Config;
import org.apache.cordova.CordovaWebView; import org.apache.cordova.CordovaWebView;
import org.apache.cordova.api.CallbackContext; import org.apache.cordova.api.CallbackContext;
@ -71,8 +72,9 @@ public class InAppBrowser extends CordovaPlugin {
private static final String SELF = "_self"; private static final String SELF = "_self";
private static final String SYSTEM = "_system"; private static final String SYSTEM = "_system";
// private static final String BLANK = "_blank"; // private static final String BLANK = "_blank";
private static final String LOCATION = "location";
private static final String EXIT_EVENT = "exit"; private static final String EXIT_EVENT = "exit";
private static final String LOCATION = "location";
private static final String HIDDEN = "hidden";
private static final String LOAD_START_EVENT = "loadstart"; private static final String LOAD_START_EVENT = "loadstart";
private static final String LOAD_STOP_EVENT = "loadstop"; private static final String LOAD_STOP_EVENT = "loadstop";
private static final String LOAD_ERROR_EVENT = "loaderror"; private static final String LOAD_ERROR_EVENT = "loaderror";
@ -82,8 +84,9 @@ public class InAppBrowser extends CordovaPlugin {
private Dialog dialog; private Dialog dialog;
private WebView inAppWebView; private WebView inAppWebView;
private EditText edittext; private EditText edittext;
private boolean showLocationBar = true;
private CallbackContext callbackContext; private CallbackContext callbackContext;
private boolean showLocationBar = true;
private boolean openWindowHidden = false;
private String buttonLabel = "Done"; private String buttonLabel = "Done";
/** /**
@ -187,6 +190,16 @@ public class InAppBrowser extends CordovaPlugin {
} }
injectDeferredObject(args.getString(0), jsWrapper); injectDeferredObject(args.getString(0), jsWrapper);
} }
else if (action.equals("show")) {
Runnable runnable = new Runnable() {
@Override
public void run() {
dialog.show();
}
};
this.cordova.getActivity().runOnUiThread(runnable);
this.callbackContext.sendPluginResult(new PluginResult(PluginResult.Status.OK));
}
else { else {
return false; return false;
} }
@ -363,11 +376,16 @@ public class InAppBrowser extends CordovaPlugin {
public String showWebPage(final String url, HashMap<String, Boolean> features) { public String showWebPage(final String url, HashMap<String, Boolean> features) {
// Determine if we should hide the location bar. // Determine if we should hide the location bar.
showLocationBar = true; showLocationBar = true;
openWindowHidden = false;
if (features != null) { if (features != null) {
Boolean show = features.get(LOCATION); Boolean show = features.get(LOCATION);
if (show != null) { if (show != null) {
showLocationBar = show.booleanValue(); showLocationBar = show.booleanValue();
} }
Boolean hidden = features.get(HIDDEN);
if(hidden != null) {
openWindowHidden = hidden.booleanValue();
}
} }
final CordovaWebView thatWebView = this.webView; final CordovaWebView thatWebView = this.webView;
@ -551,6 +569,11 @@ public class InAppBrowser extends CordovaPlugin {
dialog.setContentView(main); dialog.setContentView(main);
dialog.show(); dialog.show();
dialog.getWindow().setAttributes(lp); dialog.getWindow().setAttributes(lp);
// the goal of openhidden is to load the url and not display it
// Show() needs to be called to cause the URL to be loaded
if(openWindowHidden) {
dialog.hide();
}
} }
}; };
this.cordova.getActivity().runOnUiThread(runnable); this.cordova.getActivity().runOnUiThread(runnable);

View File

@ -34,6 +34,7 @@
- (void)open:(CDVInvokedUrlCommand*)command; - (void)open:(CDVInvokedUrlCommand*)command;
- (void)close:(CDVInvokedUrlCommand*)command; - (void)close:(CDVInvokedUrlCommand*)command;
- (void)injectScriptCode:(CDVInvokedUrlCommand*)command; - (void)injectScriptCode:(CDVInvokedUrlCommand*)command;
- (void)show:(CDVInvokedUrlCommand*)command;
@end @end
@ -81,6 +82,7 @@
@property (nonatomic, assign) BOOL allowinlinemediaplayback; @property (nonatomic, assign) BOOL allowinlinemediaplayback;
@property (nonatomic, assign) BOOL keyboarddisplayrequiresuseraction; @property (nonatomic, assign) BOOL keyboarddisplayrequiresuseraction;
@property (nonatomic, assign) BOOL suppressesincrementalrendering; @property (nonatomic, assign) BOOL suppressesincrementalrendering;
@property (nonatomic, assign) BOOL hidden;
+ (CDVInAppBrowserOptions*)parseOptions:(NSString*)options; + (CDVInAppBrowserOptions*)parseOptions:(NSString*)options;

View File

@ -101,13 +101,13 @@
} }
} }
CDVInAppBrowserOptions* browserOptions = [CDVInAppBrowserOptions parseOptions:options]; CDVInAppBrowserOptions* browserOptions = [CDVInAppBrowserOptions parseOptions:options];
[self.inAppBrowserViewController showLocationBar:browserOptions.location]; [self.inAppBrowserViewController showLocationBar:browserOptions.location];
[self.inAppBrowserViewController showToolBar:browserOptions.toolbar]; [self.inAppBrowserViewController showToolBar:browserOptions.toolbar];
if (browserOptions.closebuttoncaption != nil) { if (browserOptions.closebuttoncaption != nil) {
[self.inAppBrowserViewController setCloseButtonTitle:browserOptions.closebuttoncaption]; [self.inAppBrowserViewController setCloseButtonTitle:browserOptions.closebuttoncaption];
} }
// Set Presentation Style // Set Presentation Style
UIModalPresentationStyle presentationStyle = UIModalPresentationFullScreen; // default UIModalPresentationStyle presentationStyle = UIModalPresentationFullScreen; // default
if (browserOptions.presentationstyle != nil) { if (browserOptions.presentationstyle != nil) {
@ -130,6 +130,7 @@
} }
self.inAppBrowserViewController.modalTransitionStyle = transitionStyle; self.inAppBrowserViewController.modalTransitionStyle = transitionStyle;
// UIWebView options // UIWebView options
self.inAppBrowserViewController.webView.scalesPageToFit = browserOptions.enableviewportscale; self.inAppBrowserViewController.webView.scalesPageToFit = browserOptions.enableviewportscale;
self.inAppBrowserViewController.webView.mediaPlaybackRequiresUserAction = browserOptions.mediaplaybackrequiresuseraction; self.inAppBrowserViewController.webView.mediaPlaybackRequiresUserAction = browserOptions.mediaplaybackrequiresuseraction;
@ -138,13 +139,20 @@
self.inAppBrowserViewController.webView.keyboardDisplayRequiresUserAction = browserOptions.keyboarddisplayrequiresuseraction; self.inAppBrowserViewController.webView.keyboardDisplayRequiresUserAction = browserOptions.keyboarddisplayrequiresuseraction;
self.inAppBrowserViewController.webView.suppressesIncrementalRendering = browserOptions.suppressesincrementalrendering; self.inAppBrowserViewController.webView.suppressesIncrementalRendering = browserOptions.suppressesincrementalrendering;
} }
if (self.viewController.modalViewController != self.inAppBrowserViewController) { if (! browserOptions.hidden) {
if (self.viewController.modalViewController != self.inAppBrowserViewController) {
[self.viewController presentModalViewController:self.inAppBrowserViewController animated:YES]; [self.viewController presentModalViewController:self.inAppBrowserViewController animated:YES];
}
} }
[self.inAppBrowserViewController navigateTo:url]; [self.inAppBrowserViewController navigateTo:url];
} }
- (void)show:(CDVInvokedUrlCommand*)command
{
[self.viewController presentModalViewController:self.inAppBrowserViewController animated:YES];
}
- (void)openInCordovaWebView:(NSURL*)url withOptions:(NSString*)options - (void)openInCordovaWebView:(NSURL*)url withOptions:(NSString*)options
{ {
if ([self.commandDelegate URLIsWhitelisted:url]) { if ([self.commandDelegate URLIsWhitelisted:url]) {
@ -764,6 +772,7 @@
self.allowinlinemediaplayback = NO; self.allowinlinemediaplayback = NO;
self.keyboarddisplayrequiresuseraction = YES; self.keyboarddisplayrequiresuseraction = YES;
self.suppressesincrementalrendering = NO; self.suppressesincrementalrendering = NO;
self.hidden = NO;
} }
return self; return self;

View File

@ -41,6 +41,9 @@ InAppBrowser.prototype = {
close: function (eventname) { close: function (eventname) {
exec(null, null, "InAppBrowser", "close", []); exec(null, null, "InAppBrowser", "close", []);
}, },
show: function (eventname) {
exec(null, null, "InAppBrowser", "show", []);
},
addEventListener: function (eventname,f) { addEventListener: function (eventname,f) {
if (eventname in this.channels) { if (eventname in this.channels) {
this.channels[eventname].subscribe(f); this.channels[eventname].subscribe(f);