diff --git a/plugin.xml b/plugin.xml
index 74461aa..402d255 100644
--- a/plugin.xml
+++ b/plugin.xml
@@ -78,7 +78,24 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/amazon/InAppBrowser.java b/src/amazon/InAppBrowser.java
index 261cb86..25f593c 100644
--- a/src/amazon/InAppBrowser.java
+++ b/src/amazon/InAppBrowser.java
@@ -19,12 +19,15 @@
package org.apache.cordova.inappbrowser;
import android.annotation.SuppressLint;
-import android.app.Dialog;
+import org.apache.cordova.inappbrowser.InAppBrowserDialog;
import android.content.Context;
import android.content.DialogInterface;
import android.content.Intent;
+import android.content.res.Resources;
import android.graphics.Bitmap;
+import android.graphics.drawable.Drawable;
import android.net.Uri;
+import android.os.Build;
import android.os.Bundle;
import android.text.InputType;
import android.util.Log;
@@ -82,7 +85,7 @@ public class InAppBrowser extends CordovaPlugin {
private static final String CLEAR_ALL_CACHE = "clearcache";
private static final String CLEAR_SESSION_CACHE = "clearsessioncache";
- private Dialog dialog;
+ private InAppBrowserDialog dialog;
private AmazonWebView inAppWebView;
private EditText edittext;
private CallbackContext callbackContext;
@@ -256,11 +259,16 @@ public class InAppBrowser extends CordovaPlugin {
scriptToInject = source;
}
final String finalScriptToInject = scriptToInject;
- // This action will have the side-effect of blurring the currently focused element
this.cordova.getActivity().runOnUiThread(new Runnable() {
+ @SuppressLint("NewApi")
@Override
public void run() {
- inAppWebView.loadUrl("javascript:" + finalScriptToInject);
+ if (Build.VERSION.SDK_INT < Build.VERSION_CODES.KITKAT) {
+ // This action will have the side-effect of blurring the currently focused element
+ inAppWebView.loadUrl("javascript:" + finalScriptToInject);
+ } /*else {
+ inAppWebView.evaluateJavascript(finalScriptToInject, null);
+ }*/
}
});
}
@@ -305,7 +313,14 @@ public class InAppBrowser extends CordovaPlugin {
try {
Intent intent = null;
intent = new Intent(Intent.ACTION_VIEW);
- intent.setData(Uri.parse(url));
+ // Omitting the MIME type for file: URLs causes "No Activity found to handle Intent".
+ // Adding the MIME type to http: URLs causes them to not be handled by the downloader.
+ Uri uri = Uri.parse(url);
+ if ("file".equals(uri.getScheme())) {
+ intent.setDataAndType(uri, webView.getResourceApi().getMimeType(uri));
+ } else {
+ intent.setData(uri);
+ }
this.cordova.getActivity().startActivity(intent);
return "";
} catch (android.content.ActivityNotFoundException e) {
@@ -318,16 +333,38 @@ public class InAppBrowser extends CordovaPlugin {
* Closes the dialog
*/
public void closeDialog() {
+ final AmazonWebView childView = this.inAppWebView;
+ // The JS protects against multiple calls, so this should happen only when
+ // closeDialog() is called by other native code.
+ if (childView == null) {
+ return;
+ }
this.cordova.getActivity().runOnUiThread(new Runnable() {
+ @Override
public void run() {
- if (dialog != null) {
- dialog.dismiss();
- }
+ childView.setWebViewClient(new AmazonWebViewClient() {
+ // NB: wait for about:blank before dismissing
+ public void onPageFinished(AmazonWebView view, String url) {
+ if (dialog != null) {
+ dialog.dismiss();
+ }
+ }
+ });
+ // NB: From SDK 19: "If you call methods on WebView from any thread
+ // other than your app's UI thread, it can cause unexpected results."
+ // http://developer.android.com/guide/webapps/migrating.html#Threads
+ childView.loadUrl("about:blank");
}
});
-
+
+ try {
+ JSONObject obj = new JSONObject();
+ obj.put("type", EXIT_EVENT);
+ sendUpdate(obj, false);
+ } catch (JSONException ex) {
+ Log.d(LOG_TAG, "Should never happen");
+ }
}
-
/**
* Checks to see if it is possible to go back one page in history, then does so.
*/
@@ -385,6 +422,10 @@ public class InAppBrowser extends CordovaPlugin {
return this.showLocationBar;
}
+ private InAppBrowser getInAppBrowser(){
+ return this;
+ }
+
/**
* Display a new browser with the specified URL.
*
@@ -435,15 +476,11 @@ public class InAppBrowser extends CordovaPlugin {
public void run() {
// Let's create the main dialog
- dialog = new Dialog(cordova.getActivity(), android.R.style.Theme_NoTitleBar);
+ dialog = new InAppBrowserDialog(cordova.getActivity(), android.R.style.Theme_NoTitleBar);
dialog.getWindow().getAttributes().windowAnimations = android.R.style.Animation_Dialog;
dialog.requestWindowFeature(Window.FEATURE_NO_TITLE);
dialog.setCancelable(true);
- dialog.setOnDismissListener(new DialogInterface.OnDismissListener() {
- public void onDismiss(DialogInterface dialog) {
- closeDialog();
- }
- });
+ dialog.setInAppBroswer(getInAppBrowser());
// Main container layout
LinearLayout main = new LinearLayout(cordova.getActivity());
@@ -472,7 +509,21 @@ public class InAppBrowser extends CordovaPlugin {
back.setLayoutParams(backLayoutParams);
back.setContentDescription("Back Button");
back.setId(2);
- back.setText("<");
+ /*
+ back.setText("<");
+ */
+ Resources activityRes = cordova.getActivity().getResources();
+ int backResId = activityRes.getIdentifier("ic_action_previous_item", "drawable", cordova.getActivity().getPackageName());
+ Drawable backIcon = activityRes.getDrawable(backResId);
+ if(android.os.Build.VERSION.SDK_INT < android.os.Build.VERSION_CODES.JELLY_BEAN)
+ {
+ back.setBackgroundDrawable(backIcon);
+ }
+ else
+ {
+ back.setBackground(backIcon);
+ }
+
back.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
goBack();
@@ -486,7 +537,17 @@ public class InAppBrowser extends CordovaPlugin {
forward.setLayoutParams(forwardLayoutParams);
forward.setContentDescription("Forward Button");
forward.setId(3);
- forward.setText(">");
+ //forward.setText(">");
+ int fwdResId = activityRes.getIdentifier("ic_action_next_item", "drawable", cordova.getActivity().getPackageName());
+ Drawable fwdIcon = activityRes.getDrawable(fwdResId);
+ if(android.os.Build.VERSION.SDK_INT < android.os.Build.VERSION_CODES.JELLY_BEAN)
+ {
+ forward.setBackgroundDrawable(fwdIcon);
+ }
+ else
+ {
+ forward.setBackground(fwdIcon);
+ }
forward.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
goForward();
@@ -523,7 +584,17 @@ public class InAppBrowser extends CordovaPlugin {
close.setLayoutParams(closeLayoutParams);
forward.setContentDescription("Close Button");
close.setId(5);
- close.setText(buttonLabel);
+ //close.setText(buttonLabel);
+ int closeResId = activityRes.getIdentifier("ic_action_remove", "drawable", cordova.getActivity().getPackageName());
+ Drawable closeIcon = activityRes.getDrawable(closeResId);
+ if(android.os.Build.VERSION.SDK_INT < android.os.Build.VERSION_CODES.JELLY_BEAN)
+ {
+ close.setBackgroundDrawable(closeIcon);
+ }
+ else
+ {
+ close.setBackground(closeIcon);
+ }
close.setOnClickListener(new View.OnClickListener() {
public void onClick(View v) {
closeDialog();