From 69ca780772b406ab02ec1bd1a8e4dca70052e926 Mon Sep 17 00:00:00 2001 From: Archana Naik Date: Thu, 14 Aug 2014 11:57:00 -0700 Subject: [PATCH] amazon-fireos related changes. --- plugin.xml | 17 ++++++ src/amazon/InAppBrowser.java | 109 +++++++++++++++++++++++++++++------ 2 files changed, 107 insertions(+), 19 deletions(-) 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();