From 8711ee3f211bf84913ae86f81e5e0e548d1c8015 Mon Sep 17 00:00:00 2001 From: Landsbankinn Date: Wed, 4 Oct 2017 16:41:31 +0000 Subject: [PATCH 1/8] CB-13409: Lets user adjust color of toolbar, hide navigation buttons and set custom text on close button --- src/android/InAppBrowser.java | 130 ++++++++++++++++++++++------------ src/ios/CDVInAppBrowser.h | 11 +-- src/ios/CDVInAppBrowser.m | 42 +++++++++-- 3 files changed, 126 insertions(+), 57 deletions(-) diff --git a/src/android/InAppBrowser.java b/src/android/InAppBrowser.java index 48f6846..62a834d 100644 --- a/src/android/InAppBrowser.java +++ b/src/android/InAppBrowser.java @@ -25,6 +25,9 @@ import android.provider.Browser; import android.content.res.Resources; import android.graphics.Bitmap; import android.graphics.drawable.Drawable; +import android.graphics.PorterDuff; +import android.graphics.PorterDuffColorFilter; +import android.graphics.Color; import android.net.Uri; import android.os.Build; import android.os.Bundle; @@ -51,6 +54,7 @@ import android.widget.ImageButton; import android.widget.ImageView; import android.widget.LinearLayout; import android.widget.RelativeLayout; +import android.widget.TextView; import org.apache.cordova.CallbackContext; import org.apache.cordova.Config; @@ -91,6 +95,8 @@ public class InAppBrowser extends CordovaPlugin { private static final String SHOULD_PAUSE = "shouldPauseOnSuspend"; private static final Boolean DEFAULT_HARDWARE_BACK = true; private static final String USER_WIDE_VIEW_PORT = "useWideViewPort"; + private static final String CLOSE_BUTTON_TEXT = "closeButtonText"; + private static final String CLOSE_BUTTON_COLOR = "closeButtonColor"; private InAppBrowserDialog dialog; private WebView inAppWebView; @@ -109,6 +115,8 @@ public class InAppBrowser extends CordovaPlugin { private ValueCallback mUploadCallbackLollipop; private final static int FILECHOOSER_REQUESTCODE = 1; private final static int FILECHOOSER_REQUESTCODE_LOLLIPOP = 2; + private String closeButtonText = ""; + private int closeButtonColor = android.graphics.Color.LTGRAY; /** * Executes the request and returns PluginResult. @@ -127,7 +135,7 @@ public class InAppBrowser extends CordovaPlugin { t = SELF; } final String target = t; - final HashMap features = parseFeature(args.optString(2)); + final HashMap features = parseFeature(args.optString(2)); LOG.d(LOG_TAG, "target = " + target); @@ -366,18 +374,23 @@ public class InAppBrowser extends CordovaPlugin { * @param optString * @return */ - private HashMap parseFeature(String optString) { + private HashMap parseFeature(String optString) { if (optString.equals(NULL)) { return null; } else { - HashMap map = new HashMap(); + HashMap map = new HashMap(); StringTokenizer features = new StringTokenizer(optString, ","); StringTokenizer option; while(features.hasMoreElements()) { option = new StringTokenizer(features.nextToken(), "="); if (option.hasMoreElements()) { String key = option.nextToken(); - Boolean value = option.nextToken().equals("no") ? Boolean.FALSE : Boolean.TRUE; + String value = null; + if (key.equals(CLOSE_BUTTON_TEXT)) value = option.nextToken(); + else { + String token = option.nextToken(); + value = token.equals("yes") || token.equals("no") ? token : "yes"; // hér!! + } map.put(key, value); } } @@ -523,7 +536,7 @@ public class InAppBrowser extends CordovaPlugin { * @param url the url to load. * @param features jsonObject */ - public String showWebPage(final String url, HashMap features) { + public String showWebPage(final String url, HashMap features) { // Determine if we should hide the location bar. showLocationBar = true; showZoomControls = true; @@ -531,44 +544,52 @@ public class InAppBrowser extends CordovaPlugin { mediaPlaybackRequiresUserGesture = false; if (features != null) { - Boolean show = features.get(LOCATION); + String show = features.get(LOCATION); if (show != null) { - showLocationBar = show.booleanValue(); + showLocationBar = show.equals("yes") ? true : false; } - Boolean zoom = features.get(ZOOM); + String zoom = features.get(ZOOM); if (zoom != null) { - showZoomControls = zoom.booleanValue(); + showZoomControls = zoom.equals("yes") ? true : false; } - Boolean hidden = features.get(HIDDEN); + String hidden = features.get(HIDDEN); if (hidden != null) { - openWindowHidden = hidden.booleanValue(); + openWindowHidden = hidden.equals("yes") ? true : false; } - Boolean hardwareBack = features.get(HARDWARE_BACK_BUTTON); + String hardwareBack = features.get(HARDWARE_BACK_BUTTON); if (hardwareBack != null) { - hadwareBackButton = hardwareBack.booleanValue(); + hadwareBackButton = hardwareBack.equals("yes") ? true : false; } else { hadwareBackButton = DEFAULT_HARDWARE_BACK; } - Boolean mediaPlayback = features.get(MEDIA_PLAYBACK_REQUIRES_USER_ACTION); + String mediaPlayback = features.get(MEDIA_PLAYBACK_REQUIRES_USER_ACTION); if (mediaPlayback != null) { - mediaPlaybackRequiresUserGesture = mediaPlayback.booleanValue(); + mediaPlaybackRequiresUserGesture = mediaPlayback.equals("yes") ? true : false; } - Boolean cache = features.get(CLEAR_ALL_CACHE); + String cache = features.get(CLEAR_ALL_CACHE); if (cache != null) { - clearAllCache = cache.booleanValue(); + clearAllCache = cache.equals("yes") ? true : false; } else { cache = features.get(CLEAR_SESSION_CACHE); if (cache != null) { - clearSessionCache = cache.booleanValue(); + clearSessionCache = cache.equals("yes") ? true : false; } } - Boolean shouldPause = features.get(SHOULD_PAUSE); + String shouldPause = features.get(SHOULD_PAUSE); if (shouldPause != null) { - shouldPauseInAppBrowser = shouldPause.booleanValue(); + shouldPauseInAppBrowser = shouldPause.equals("yes") ? true : false; } - Boolean wideViewPort = features.get(USER_WIDE_VIEW_PORT); + String wideViewPort = features.get(USER_WIDE_VIEW_PORT); if (wideViewPort != null ) { - useWideViewPort = wideViewPort.booleanValue(); + useWideViewPort = wideViewPort.equals("yes") ? true : false; + } + String closeButtonTextSet = features.get(CLOSE_BUTTON_TEXT); + if (closeButtonTextSet != null) { + closeButtonText = closeButtonTextSet; + } + String closeButtonTextColorSet = features.get(CLOSE_BUTTON_COLOR); + if (closeButtonTextColorSet != null) { + closeButtonColor = Color.parseColor(closeButtonTextColorSet); } } @@ -612,7 +633,7 @@ public class InAppBrowser extends CordovaPlugin { // Toolbar layout RelativeLayout toolbar = new RelativeLayout(cordova.getActivity()); //Please, no more black! - toolbar.setBackgroundColor(android.graphics.Color.LTGRAY); + toolbar.setBackgroundColor(closeButtonColor); toolbar.setLayoutParams(new RelativeLayout.LayoutParams(LayoutParams.MATCH_PARENT, this.dpToPixels(44))); toolbar.setPadding(this.dpToPixels(2), this.dpToPixels(2), this.dpToPixels(2), this.dpToPixels(2)); toolbar.setHorizontalGravity(Gravity.LEFT); @@ -700,29 +721,46 @@ public class InAppBrowser extends CordovaPlugin { }); // Close/Done button - ImageButton close = new ImageButton(cordova.getActivity()); - RelativeLayout.LayoutParams closeLayoutParams = new RelativeLayout.LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.MATCH_PARENT); - closeLayoutParams.addRule(RelativeLayout.ALIGN_PARENT_RIGHT); - close.setLayoutParams(closeLayoutParams); - close.setContentDescription("Close Button"); - close.setId(Integer.valueOf(5)); - int closeResId = activityRes.getIdentifier("ic_action_remove", "drawable", cordova.getActivity().getPackageName()); - Drawable closeIcon = activityRes.getDrawable(closeResId); - if (Build.VERSION.SDK_INT >= 16) - close.setBackground(null); - else - close.setBackgroundDrawable(null); - close.setImageDrawable(closeIcon); - close.setScaleType(ImageView.ScaleType.FIT_CENTER); - back.setPadding(0, this.dpToPixels(10), 0, this.dpToPixels(10)); - if (Build.VERSION.SDK_INT >= 16) - close.getAdjustViewBounds(); + if (closeButtonText != "") { + /* Use TextView for text */ + TextView close = new TextView(cordova.getActivity()); + close.setText(closeButtonText); + close.setTextSize(25); + back.setPadding(0, this.dpToPixels(10), 0, this.dpToPixels(10)); + close.setId(Integer.valueOf(5)); + close.setOnClickListener(new View.OnClickListener() { + public void onClick(View v) { + closeDialog(); + } + }); + toolbar.addView(close); + } + else { + ImageButton close = new ImageButton(cordova.getActivity()); + RelativeLayout.LayoutParams closeLayoutParams = new RelativeLayout.LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.MATCH_PARENT); + closeLayoutParams.addRule(RelativeLayout.ALIGN_PARENT_RIGHT); + close.setLayoutParams(closeLayoutParams); + close.setContentDescription("Close Button"); + close.setId(Integer.valueOf(5)); + int closeResId = activityRes.getIdentifier("ic_action_remove", "drawable", cordova.getActivity().getPackageName()); + Drawable closeIcon = activityRes.getDrawable(closeResId); + if (Build.VERSION.SDK_INT >= 16) + close.setBackground(null); + else + close.setBackgroundDrawable(null); + close.setImageDrawable(closeIcon); + close.setScaleType(ImageView.ScaleType.FIT_CENTER); + back.setPadding(0, this.dpToPixels(10), 0, this.dpToPixels(10)); + if (Build.VERSION.SDK_INT >= 16) + close.getAdjustViewBounds(); - close.setOnClickListener(new View.OnClickListener() { - public void onClick(View v) { - closeDialog(); - } - }); + close.setOnClickListener(new View.OnClickListener() { + public void onClick(View v) { + closeDialog(); + } + }); + toolbar.addView(close); + } // WebView inAppWebView = new WebView(cordova.getActivity()); @@ -828,7 +866,7 @@ public class InAppBrowser extends CordovaPlugin { // Add the views to our toolbar toolbar.addView(actionButtonContainer); toolbar.addView(edittext); - toolbar.addView(close); + // toolbar.addView(close); // Don't add the toolbar if its been disabled if (getShowLocationBar()) { diff --git a/src/ios/CDVInAppBrowser.h b/src/ios/CDVInAppBrowser.h index d258eb0..8f01721 100644 --- a/src/ios/CDVInAppBrowser.h +++ b/src/ios/CDVInAppBrowser.h @@ -49,7 +49,11 @@ @property (nonatomic, assign) BOOL location; @property (nonatomic, assign) BOOL toolbar; @property (nonatomic, copy) NSString* closebuttoncaption; +@property (nonatomic, copy) NSString* closebuttoncolor; @property (nonatomic, copy) NSString* toolbarposition; +@property (nonatomic, copy) NSString* toolbarcolor; +@property (nonatomic, assign) BOOL toolbartranslucent; +@property (nonatomic, assign) BOOL hideToolbarNavigationButtons; @property (nonatomic, assign) BOOL clearcache; @property (nonatomic, assign) BOOL clearsessioncache; @@ -74,13 +78,13 @@ NSString* _prevUserAgent; NSInteger _userAgentLockToken; CDVInAppBrowserOptions *_browserOptions; - + #ifdef __CORDOVA_4_0_0 CDVUIWebViewDelegate* _webViewDelegate; #else CDVWebViewDelegate* _webViewDelegate; #endif - + } @property (nonatomic, strong) IBOutlet UIWebView* webView; @@ -99,7 +103,7 @@ - (void)navigateTo:(NSURL*)url; - (void)showLocationBar:(BOOL)show; - (void)showToolBar:(BOOL)show : (NSString *) toolbarPosition; -- (void)setCloseButtonTitle:(NSString*)title; +- (void)setCloseButtonTitle:(NSString*)title : (NSString*) colorString; - (id)initWithUserAgent:(NSString*)userAgent prevUserAgent:(NSString*)prevUserAgent browserOptions: (CDVInAppBrowserOptions*) browserOptions; @@ -110,4 +114,3 @@ @property (nonatomic, weak) id orientationDelegate; @end - diff --git a/src/ios/CDVInAppBrowser.m b/src/ios/CDVInAppBrowser.m index f5d05f0..a890f7f 100644 --- a/src/ios/CDVInAppBrowser.m +++ b/src/ios/CDVInAppBrowser.m @@ -162,8 +162,8 @@ [self.inAppBrowserViewController showLocationBar:browserOptions.location]; [self.inAppBrowserViewController showToolBar:browserOptions.toolbar :browserOptions.toolbarposition]; - if (browserOptions.closebuttoncaption != nil) { - [self.inAppBrowserViewController setCloseButtonTitle:browserOptions.closebuttoncaption]; + if (browserOptions.closebuttoncaption != nil || browserOptions.closebuttoncolor != nil) { + [self.inAppBrowserViewController setCloseButtonTitle:browserOptions.closebuttoncaption :browserOptions.closebuttoncolor]; } // Set Presentation Style UIModalPresentationStyle presentationStyle = UIModalPresentationFullScreen; // default @@ -599,6 +599,12 @@ self.toolbar.multipleTouchEnabled = NO; self.toolbar.opaque = NO; self.toolbar.userInteractionEnabled = YES; + if (_browserOptions.toolbarcolor != nil) { // Set toolbar color if user sets it in options + self.toolbar.barTintColor = [self colorFromHexString:_browserOptions.toolbarcolor]; + } + if (!_browserOptions.toolbartranslucent) { // Set toolbar translucent to no if user sets it in options + self.toolbar.translucent = NO; + } CGFloat labelInset = 5.0; float locationBarY = toolbarIsAtBottom ? self.view.bounds.size.height - FOOTER_HEIGHT : self.view.bounds.size.height - LOCATIONBAR_HEIGHT; @@ -642,7 +648,13 @@ self.backButton.enabled = YES; self.backButton.imageInsets = UIEdgeInsetsZero; - [self.toolbar setItems:@[self.closeButton, flexibleSpaceButton, self.backButton, fixedSpaceButton, self.forwardButton]]; + // Filter out Navigation Buttons if user requests so + if (_browserOptions.hideToolbarNavigationButtons) { + [self.toolbar setItems:@[self.closeButton, flexibleSpaceButton]]; + } else { + [self.toolbar setItems:@[self.closeButton, flexibleSpaceButton, self.backButton, fixedSpaceButton, self.forwardButton]]; + } + [self.toolbar setItems:@[self.closeButton, flexibleSpaceButton]]; self.view.backgroundColor = [UIColor grayColor]; [self.view addSubview:self.toolbar]; @@ -655,14 +667,16 @@ [self.webView setFrame:frame]; } -- (void)setCloseButtonTitle:(NSString*)title +- (void)setCloseButtonTitle:(NSString*)title : (NSString*) colorString { // the advantage of using UIBarButtonSystemItemDone is the system will localize it for you automatically // but, if you want to set this yourself, knock yourself out (we can't set the title for a system Done button, so we have to create a new one) self.closeButton = nil; - self.closeButton = [[UIBarButtonItem alloc] initWithTitle:title style:UIBarButtonItemStyleBordered target:self action:@selector(close)]; + // Initialize with title if title is set, otherwise the title will be 'Done' localized + self.closeButton = title != nil ? [[UIBarButtonItem alloc] initWithTitle:title style:UIBarButtonItemStyleBordered target:self action:@selector(close)] : [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemDone target:self action:@selector(close)]; self.closeButton.enabled = YES; - self.closeButton.tintColor = [UIColor colorWithRed:60.0 / 255.0 green:136.0 / 255.0 blue:230.0 / 255.0 alpha:1]; + // If color on closebutton is requested then initialize with that that color, otherwise use initialize with default + self.closeButton.tintColor = colorString != nil ? [self colorFromHexString:colorString] : [UIColor colorWithRed:60.0 / 255.0 green:136.0 / 255.0 blue:230.0 / 255.0 alpha:1]; NSMutableArray* items = [self.toolbar.items mutableCopy]; [items replaceObjectAtIndex:0 withObject:self.closeButton]; @@ -877,6 +891,17 @@ } } +// Helper function to convert hex color string to UIColor +// Assumes input like "#00FF00" (#RRGGBB). +// Taken from https://stackoverflow.com/questions/1560081/how-can-i-create-a-uicolor-from-a-hex-string +- (UIColor *)colorFromHexString:(NSString *)hexString { + unsigned rgbValue = 0; + NSScanner *scanner = [NSScanner scannerWithString:hexString]; + [scanner setScanLocation:1]; // bypass '#' character + [scanner scanHexInt:&rgbValue]; + return [UIColor colorWithRed:((rgbValue & 0xFF0000) >> 16)/255.0 green:((rgbValue & 0xFF00) >> 8)/255.0 blue:(rgbValue & 0xFF)/255.0 alpha:1.0]; +} + #pragma mark UIWebViewDelegate - (void)webViewDidStartLoad:(UIWebView*)theWebView @@ -995,6 +1020,10 @@ self.suppressesincrementalrendering = NO; self.hidden = NO; self.disallowoverscroll = NO; + self.hideToolbarNavigationButtons = NO; + self.closebuttoncolor = nil; + self.toolbarcolor = nil; + self.toolbartranslucent = YES; } return self; @@ -1104,4 +1133,3 @@ @end - From e691212c967fe866551c126e00f4cc7f09c6dfb9 Mon Sep 17 00:00:00 2001 From: Landsbankinn Date: Fri, 6 Oct 2017 13:05:01 +0000 Subject: [PATCH 2/8] CB-13409: Android works well now, all changes are now documented --- README.md | 14 +++++- src/android/InAppBrowser.java | 84 ++++++++++++++++++++++++++--------- src/ios/CDVInAppBrowser.h | 2 +- src/ios/CDVInAppBrowser.m | 4 +- 4 files changed, 77 insertions(+), 27 deletions(-) diff --git a/README.md b/README.md index a4b7cd9..6eb0479 100644 --- a/README.md +++ b/README.md @@ -101,8 +101,8 @@ instance, or the system browser. - __options__: Options for the `InAppBrowser`. Optional, defaulting to: `location=yes`. _(String)_ - The `options` string must not contain any blank space, and each feature's name/value pairs must be separated by a comma. Feature names are case insensitive. - + The `options` string must not contain any blank space, and each feature's name/value pairs must be separated by a comma. Feature names are case insensitive. + All platforms support: - __location__: Set to `yes` or `no` to turn the `InAppBrowser`'s location bar on or off. @@ -112,7 +112,13 @@ instance, or the system browser. - __hidden__: set to `yes` to create the browser and load the page, but not show it. The loadstop event fires when loading is complete. Omit or set to `no` (default) to have the browser open and load normally. - __clearcache__: set to `yes` to have the browser's cookie cache cleared before the new window is opened - __clearsessioncache__: set to `yes` to have the session cookie cache cleared before the new window is opened + - __closebuttoncaption__: set to a string to use as the close buttons caption instead of a X. Note that you need to localize this value yourself. + - __closebuttoncolor__: set to a valid hex color string, for example: `#00ff00`, and it will change the + close button color from default, regardless of being a text or default X. Only has effect if user has location set to `yes`. - __hardwareback__: set to `yes` to use the hardware back button to navigate backwards through the `InAppBrowser`'s history. If there is no previous page, the `InAppBrowser` will close. The default value is `yes`, so you must set it to `no` if you want the back button to simply close the InAppBrowser. + - __hidenavigationbuttons__: set to `yes` to hide the navigation buttons on the location toolbar, only has effect if user has location set to `yes`. The default value is `no`. + - __hideurlbar__: set to `yes` to hide the url bar on the location toolbar, only has effect if user has location set to `yes`. The default value is `no`. + - __navigationbuttoncolor__: set to a valid hex color string, for example: `#00ff00`, and it will change the color of both navigation buttons from default. Only has effect if user has location set to `yes` and not hidenavigationbuttons set to `yes`. - __zoom__: set to `yes` to show Android browser's zoom controls, set to `no` to hide them. Default value is `yes`. - __mediaPlaybackRequiresUserAction__: Set to `yes` to prevent HTML5 audio or video from autoplaying (defaults to `no`). - __shouldPauseOnSuspend__: Set to `yes` to make InAppBrowser WebView to pause/resume with the app to stop background audio (this may be required to avoid Google Play issues like described in [CB-11013](https://issues.apache.org/jira/browse/CB-11013)). @@ -123,9 +129,13 @@ instance, or the system browser. - __hidden__: set to `yes` to create the browser and load the page, but not show it. The loadstop event fires when loading is complete. Omit or set to `no` (default) to have the browser open and load normally. - __clearcache__: set to `yes` to have the browser's cookie cache cleared before the new window is opened - __clearsessioncache__: set to `yes` to have the session cookie cache cleared before the new window is opened + - __closebuttoncolor__: set as a valid hex color string, for example: `#00ff00`, to change from the default __Done__ button's color. Only applicable if toolbar is not disabled. - __closebuttoncaption__: set to a string to use as the __Done__ button's caption. Note that you need to localize this value yourself. - __disallowoverscroll__: Set to `yes` or `no` (default is `no`). Turns on/off the UIWebViewBounce property. + - __hidetoolbarnavigationbuttons__: set to `yes` or `no` to turn the toolbar navigation buttons on or off (defaults to `no`). Only applicable if toolbar is not disabled. - __toolbar__: set to `yes` or `no` to turn the toolbar on or off for the InAppBrowser (defaults to `yes`) + - __toolbarcolor__: set as a valid hex color string, for example: `#00ff00`, to change from the default color of the toolbar. Only applicable if toolbar is not disabled. + - __toolbartranslucent__: set to `yes` or `no` to make the toolbar translucent(semi-transparent) (defaults to `yes`). Only applicable if toolbar is not disabled. - __enableViewportScale__: Set to `yes` or `no` to prevent viewport scaling through a meta tag (defaults to `no`). - __mediaPlaybackRequiresUserAction__: Set to `yes` to prevent HTML5 audio or video from autoplaying (defaults to `no`). - __allowInlineMediaPlayback__: Set to `yes` or `no` to allow in-line HTML5 media playback, displaying within the browser window rather than a device-specific playback interface. The HTML's `video` element must also include the `webkit-playsinline` attribute (defaults to `no`) diff --git a/src/android/InAppBrowser.java b/src/android/InAppBrowser.java index 62a834d..8f937fb 100644 --- a/src/android/InAppBrowser.java +++ b/src/android/InAppBrowser.java @@ -71,6 +71,8 @@ import org.json.JSONObject; import java.lang.reflect.InvocationTargetException; import java.lang.reflect.Field; import java.lang.reflect.Method; +import java.util.Arrays; +import java.util.List; import java.util.HashMap; import java.util.StringTokenizer; @@ -95,8 +97,14 @@ public class InAppBrowser extends CordovaPlugin { private static final String SHOULD_PAUSE = "shouldPauseOnSuspend"; private static final Boolean DEFAULT_HARDWARE_BACK = true; private static final String USER_WIDE_VIEW_PORT = "useWideViewPort"; - private static final String CLOSE_BUTTON_TEXT = "closeButtonText"; - private static final String CLOSE_BUTTON_COLOR = "closeButtonColor"; + private static final String TOOLBAR_COLOR = "toolbarcolor"; + private static final String CLOSE_BUTTON_CAPTION = "closebuttoncaption"; + private static final String CLOSE_BUTTON_COLOR = "closebuttoncolor"; + private static final String HIDE_NAVIGATION = "hidenavigationbuttons"; + private static final String NAVIGATION_COLOR = "navigationbuttoncolor"; + private static final String HIDE_URL = "hideurlbar"; + + private static final List customizableOptions = Arrays.asList(CLOSE_BUTTON_CAPTION, TOOLBAR_COLOR, NAVIGATION_COLOR, CLOSE_BUTTON_COLOR); private InAppBrowserDialog dialog; private WebView inAppWebView; @@ -115,8 +123,12 @@ public class InAppBrowser extends CordovaPlugin { private ValueCallback mUploadCallbackLollipop; private final static int FILECHOOSER_REQUESTCODE = 1; private final static int FILECHOOSER_REQUESTCODE_LOLLIPOP = 2; - private String closeButtonText = ""; - private int closeButtonColor = android.graphics.Color.LTGRAY; + private String closeButtonCaption = ""; + private String closeButtonColor = ""; + private int toolbarColor = android.graphics.Color.LTGRAY; + private boolean hideNavigationButtons = false; + private String navigationButtonColor = ""; + private boolean hideUrlBar = false; /** * Executes the request and returns PluginResult. @@ -386,10 +398,10 @@ public class InAppBrowser extends CordovaPlugin { if (option.hasMoreElements()) { String key = option.nextToken(); String value = null; - if (key.equals(CLOSE_BUTTON_TEXT)) value = option.nextToken(); + if (customizableOptions.contains(key)) value = option.nextToken(); else { String token = option.nextToken(); - value = token.equals("yes") || token.equals("no") ? token : "yes"; // hér!! + value = token.equals("yes") || token.equals("no") ? token : "yes"; } map.put(key, value); } @@ -548,6 +560,12 @@ public class InAppBrowser extends CordovaPlugin { if (show != null) { showLocationBar = show.equals("yes") ? true : false; } + if(showLocationBar) { + String hideNavigation = features.get(HIDE_NAVIGATION); + String hideUrl = features.get(HIDE_URL); + if(hideNavigation != null) hideNavigationButtons = hideNavigation.equals("yes") ? true : false; + if(hideUrl != null) hideUrlBar = hideUrl.equals("yes") ? true : false; + } String zoom = features.get(ZOOM); if (zoom != null) { showZoomControls = zoom.equals("yes") ? true : false; @@ -583,13 +601,21 @@ public class InAppBrowser extends CordovaPlugin { if (wideViewPort != null ) { useWideViewPort = wideViewPort.equals("yes") ? true : false; } - String closeButtonTextSet = features.get(CLOSE_BUTTON_TEXT); - if (closeButtonTextSet != null) { - closeButtonText = closeButtonTextSet; + String closeButtonCaptionSet = features.get(CLOSE_BUTTON_CAPTION); + if (closeButtonCaptionSet != null) { + closeButtonCaption = closeButtonCaptionSet; } - String closeButtonTextColorSet = features.get(CLOSE_BUTTON_COLOR); - if (closeButtonTextColorSet != null) { - closeButtonColor = Color.parseColor(closeButtonTextColorSet); + String closeButtonColorSet = features.get(CLOSE_BUTTON_COLOR); + if (closeButtonColorSet != null) { + closeButtonColor = closeButtonColorSet; + } + String toolbarColorSet = features.get(TOOLBAR_COLOR); + if (toolbarColorSet != null) { + toolbarColor = android.graphics.Color.parseColor(toolbarColorSet); + } + String navigationButtonColorSet = features.get(NAVIGATION_COLOR); + if (navigationButtonColorSet != null) { + navigationButtonColor = navigationButtonColorSet; } } @@ -633,7 +659,7 @@ public class InAppBrowser extends CordovaPlugin { // Toolbar layout RelativeLayout toolbar = new RelativeLayout(cordova.getActivity()); //Please, no more black! - toolbar.setBackgroundColor(closeButtonColor); + toolbar.setBackgroundColor(toolbarColor); toolbar.setLayoutParams(new RelativeLayout.LayoutParams(LayoutParams.MATCH_PARENT, this.dpToPixels(44))); toolbar.setPadding(this.dpToPixels(2), this.dpToPixels(2), this.dpToPixels(2), this.dpToPixels(2)); toolbar.setHorizontalGravity(Gravity.LEFT); @@ -656,6 +682,7 @@ public class InAppBrowser extends CordovaPlugin { Resources activityRes = cordova.getActivity().getResources(); int backResId = activityRes.getIdentifier("ic_action_previous_item", "drawable", cordova.getActivity().getPackageName()); Drawable backIcon = activityRes.getDrawable(backResId); + if (navigationButtonColor != "") back.setColorFilter(android.graphics.Color.parseColor(navigationButtonColor)); if (Build.VERSION.SDK_INT >= 16) back.setBackground(null); else @@ -681,6 +708,7 @@ public class InAppBrowser extends CordovaPlugin { forward.setId(Integer.valueOf(3)); int fwdResId = activityRes.getIdentifier("ic_action_next_item", "drawable", cordova.getActivity().getPackageName()); Drawable fwdIcon = activityRes.getDrawable(fwdResId); + if (navigationButtonColor != "") forward.setColorFilter(android.graphics.Color.parseColor(navigationButtonColor)); if (Build.VERSION.SDK_INT >= 16) forward.setBackground(null); else @@ -721,13 +749,25 @@ public class InAppBrowser extends CordovaPlugin { }); // Close/Done button - if (closeButtonText != "") { - /* Use TextView for text */ + if (closeButtonCaption != "") { + // Use TextView for text TextView close = new TextView(cordova.getActivity()); - close.setText(closeButtonText); - close.setTextSize(25); - back.setPadding(0, this.dpToPixels(10), 0, this.dpToPixels(10)); + close.setText(closeButtonCaption); + close.setTextSize(20); + if (closeButtonColor != "") close.setTextColor(android.graphics.Color.parseColor(closeButtonColor)); + close.setGravity(android.view.Gravity.CENTER_VERTICAL); + RelativeLayout.LayoutParams closeLayoutParams = new RelativeLayout.LayoutParams(LayoutParams.WRAP_CONTENT, LayoutParams.MATCH_PARENT); + closeLayoutParams.addRule(RelativeLayout.ALIGN_PARENT_RIGHT); + close.setLayoutParams(closeLayoutParams); + + close.setContentDescription("Close Button"); close.setId(Integer.valueOf(5)); + if (Build.VERSION.SDK_INT >= 16) + close.setBackground(null); + else + close.setBackgroundDrawable(null); + back.setPadding(0, this.dpToPixels(10), 0, this.dpToPixels(10)); + close.setPadding(this.dpToPixels(10), 0, this.dpToPixels(10), 0); close.setOnClickListener(new View.OnClickListener() { public void onClick(View v) { closeDialog(); @@ -744,6 +784,7 @@ public class InAppBrowser extends CordovaPlugin { close.setId(Integer.valueOf(5)); int closeResId = activityRes.getIdentifier("ic_action_remove", "drawable", cordova.getActivity().getPackageName()); Drawable closeIcon = activityRes.getDrawable(closeResId); + if (closeButtonColor != "") close.setColorFilter(android.graphics.Color.parseColor(closeButtonColor)); if (Build.VERSION.SDK_INT >= 16) close.setBackground(null); else @@ -863,10 +904,9 @@ public class InAppBrowser extends CordovaPlugin { actionButtonContainer.addView(back); actionButtonContainer.addView(forward); - // Add the views to our toolbar - toolbar.addView(actionButtonContainer); - toolbar.addView(edittext); - // toolbar.addView(close); + // Add the views to our toolbar if they haven't been disabled + if (!hideNavigationButtons) toolbar.addView(actionButtonContainer); + if (!hideUrlBar) toolbar.addView(edittext); // Don't add the toolbar if its been disabled if (getShowLocationBar()) { diff --git a/src/ios/CDVInAppBrowser.h b/src/ios/CDVInAppBrowser.h index 8f01721..05d72f8 100644 --- a/src/ios/CDVInAppBrowser.h +++ b/src/ios/CDVInAppBrowser.h @@ -53,7 +53,7 @@ @property (nonatomic, copy) NSString* toolbarposition; @property (nonatomic, copy) NSString* toolbarcolor; @property (nonatomic, assign) BOOL toolbartranslucent; -@property (nonatomic, assign) BOOL hideToolbarNavigationButtons; +@property (nonatomic, assign) BOOL hidetoolbarnavigationbuttons; @property (nonatomic, assign) BOOL clearcache; @property (nonatomic, assign) BOOL clearsessioncache; diff --git a/src/ios/CDVInAppBrowser.m b/src/ios/CDVInAppBrowser.m index a890f7f..eb3b75d 100644 --- a/src/ios/CDVInAppBrowser.m +++ b/src/ios/CDVInAppBrowser.m @@ -649,7 +649,7 @@ self.backButton.imageInsets = UIEdgeInsetsZero; // Filter out Navigation Buttons if user requests so - if (_browserOptions.hideToolbarNavigationButtons) { + if (_browserOptions.hidetoolbarnavigationbuttons) { [self.toolbar setItems:@[self.closeButton, flexibleSpaceButton]]; } else { [self.toolbar setItems:@[self.closeButton, flexibleSpaceButton, self.backButton, fixedSpaceButton, self.forwardButton]]; @@ -1020,7 +1020,7 @@ self.suppressesincrementalrendering = NO; self.hidden = NO; self.disallowoverscroll = NO; - self.hideToolbarNavigationButtons = NO; + self.hideToolbarnavigationbuttons = NO; self.closebuttoncolor = nil; self.toolbarcolor = nil; self.toolbartranslucent = YES; From 4af420c5920bd779efd9ab19613e132d51040e2b Mon Sep 17 00:00:00 2001 From: Landsbankinn Date: Fri, 6 Oct 2017 15:35:28 +0000 Subject: [PATCH 3/8] CB-13409: change hidetoolbarnavigationbuttons to hidenavigationbuttons in iso --- README.md | 3 ++- src/ios/CDVInAppBrowser.h | 2 +- src/ios/CDVInAppBrowser.m | 4 ++-- 3 files changed, 5 insertions(+), 4 deletions(-) diff --git a/README.md b/README.md index 6eb0479..c911551 100644 --- a/README.md +++ b/README.md @@ -119,6 +119,7 @@ instance, or the system browser. - __hidenavigationbuttons__: set to `yes` to hide the navigation buttons on the location toolbar, only has effect if user has location set to `yes`. The default value is `no`. - __hideurlbar__: set to `yes` to hide the url bar on the location toolbar, only has effect if user has location set to `yes`. The default value is `no`. - __navigationbuttoncolor__: set to a valid hex color string, for example: `#00ff00`, and it will change the color of both navigation buttons from default. Only has effect if user has location set to `yes` and not hidenavigationbuttons set to `yes`. + - __toolbarcolor__: set to a valid hex color string, for example: `#00ff00`, and it will change the color the toolbar from default. Only has effect if user has location set to `yes`. - __zoom__: set to `yes` to show Android browser's zoom controls, set to `no` to hide them. Default value is `yes`. - __mediaPlaybackRequiresUserAction__: Set to `yes` to prevent HTML5 audio or video from autoplaying (defaults to `no`). - __shouldPauseOnSuspend__: Set to `yes` to make InAppBrowser WebView to pause/resume with the app to stop background audio (this may be required to avoid Google Play issues like described in [CB-11013](https://issues.apache.org/jira/browse/CB-11013)). @@ -132,7 +133,7 @@ instance, or the system browser. - __closebuttoncolor__: set as a valid hex color string, for example: `#00ff00`, to change from the default __Done__ button's color. Only applicable if toolbar is not disabled. - __closebuttoncaption__: set to a string to use as the __Done__ button's caption. Note that you need to localize this value yourself. - __disallowoverscroll__: Set to `yes` or `no` (default is `no`). Turns on/off the UIWebViewBounce property. - - __hidetoolbarnavigationbuttons__: set to `yes` or `no` to turn the toolbar navigation buttons on or off (defaults to `no`). Only applicable if toolbar is not disabled. + - __hidenavigationbuttons__: set to `yes` or `no` to turn the toolbar navigation buttons on or off (defaults to `no`). Only applicable if toolbar is not disabled. - __toolbar__: set to `yes` or `no` to turn the toolbar on or off for the InAppBrowser (defaults to `yes`) - __toolbarcolor__: set as a valid hex color string, for example: `#00ff00`, to change from the default color of the toolbar. Only applicable if toolbar is not disabled. - __toolbartranslucent__: set to `yes` or `no` to make the toolbar translucent(semi-transparent) (defaults to `yes`). Only applicable if toolbar is not disabled. diff --git a/src/ios/CDVInAppBrowser.h b/src/ios/CDVInAppBrowser.h index 05d72f8..9338c55 100644 --- a/src/ios/CDVInAppBrowser.h +++ b/src/ios/CDVInAppBrowser.h @@ -53,7 +53,7 @@ @property (nonatomic, copy) NSString* toolbarposition; @property (nonatomic, copy) NSString* toolbarcolor; @property (nonatomic, assign) BOOL toolbartranslucent; -@property (nonatomic, assign) BOOL hidetoolbarnavigationbuttons; +@property (nonatomic, assign) BOOL hidenavigationbuttons; @property (nonatomic, assign) BOOL clearcache; @property (nonatomic, assign) BOOL clearsessioncache; diff --git a/src/ios/CDVInAppBrowser.m b/src/ios/CDVInAppBrowser.m index eb3b75d..a581472 100644 --- a/src/ios/CDVInAppBrowser.m +++ b/src/ios/CDVInAppBrowser.m @@ -649,7 +649,7 @@ self.backButton.imageInsets = UIEdgeInsetsZero; // Filter out Navigation Buttons if user requests so - if (_browserOptions.hidetoolbarnavigationbuttons) { + if (_browserOptions.hidenavigationbuttons) { [self.toolbar setItems:@[self.closeButton, flexibleSpaceButton]]; } else { [self.toolbar setItems:@[self.closeButton, flexibleSpaceButton, self.backButton, fixedSpaceButton, self.forwardButton]]; @@ -1020,7 +1020,7 @@ self.suppressesincrementalrendering = NO; self.hidden = NO; self.disallowoverscroll = NO; - self.hideToolbarnavigationbuttons = NO; + self.hidenavigationbuttons = NO; self.closebuttoncolor = nil; self.toolbarcolor = nil; self.toolbartranslucent = YES; From 55b02285f93515c0f153b0f89366d978192dd900 Mon Sep 17 00:00:00 2001 From: Landsbankinn Date: Mon, 9 Oct 2017 13:50:12 +0000 Subject: [PATCH 4/8] CB-13409: ignore idea folder --- .gitignore | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/.gitignore b/.gitignore index 2209f42..8bbbbcd 100644 --- a/.gitignore +++ b/.gitignore @@ -13,6 +13,7 @@ Thumbs.db *.user node_modules +.idea @@ -20,5 +21,4 @@ node_modules - - \ No newline at end of file + From 6c2a8f4576e34ab29ffce102f12efb9c494ba386 Mon Sep 17 00:00:00 2001 From: Landsbankinn Date: Mon, 9 Oct 2017 16:09:08 +0000 Subject: [PATCH 5/8] CB-13409: restore gitignore to default --- .gitignore | 1 - 1 file changed, 1 deletion(-) diff --git a/.gitignore b/.gitignore index 8bbbbcd..1a8b5a7 100644 --- a/.gitignore +++ b/.gitignore @@ -13,7 +13,6 @@ Thumbs.db *.user node_modules -.idea From ec2f12c8728f4ed39244bd6f3ae011e124e1ddce Mon Sep 17 00:00:00 2001 From: Landsbankinn Date: Mon, 9 Oct 2017 16:10:22 +0000 Subject: [PATCH 6/8] CB-13409: restore gitignore to default --- .gitignore | 2 -- 1 file changed, 2 deletions(-) diff --git a/.gitignore b/.gitignore index 1a8b5a7..1568bfc 100644 --- a/.gitignore +++ b/.gitignore @@ -19,5 +19,3 @@ node_modules - - From ff230d429a3975c670f16e9e8cdf21c6ef874be8 Mon Sep 17 00:00:00 2001 From: Landsbankinn Date: Mon, 9 Oct 2017 16:10:58 +0000 Subject: [PATCH 7/8] CB-13409: restore gitignore to default --- .gitignore | 3 +++ 1 file changed, 3 insertions(+) diff --git a/.gitignore b/.gitignore index 1568bfc..1de4e24 100644 --- a/.gitignore +++ b/.gitignore @@ -19,3 +19,6 @@ node_modules + + + From d46f5d45d521eef5faffe0ed71718ddc7c8dfd50 Mon Sep 17 00:00:00 2001 From: Landsbankinn Date: Mon, 9 Oct 2017 16:11:40 +0000 Subject: [PATCH 8/8] CB-13409: restore gitignore to default --- .gitignore | 1 - 1 file changed, 1 deletion(-) diff --git a/.gitignore b/.gitignore index 1de4e24..4474e73 100644 --- a/.gitignore +++ b/.gitignore @@ -21,4 +21,3 @@ node_modules -