fix for CB-5534

Signed-off-by: Joe Bowser <bowserj@apache.org>
This commit is contained in:
Oliver Moran 2014-02-28 19:58:14 +00:00 committed by Joe Bowser
parent 300f1e782e
commit 6f373f7ed9
2 changed files with 72 additions and 11 deletions

View File

@ -19,9 +19,8 @@
package org.apache.cordova.inappbrowser; package org.apache.cordova.inappbrowser;
import android.annotation.SuppressLint; import android.annotation.SuppressLint;
import android.app.Dialog; import org.apache.cordova.inappbrowser.InAppBrowserDialog;
import android.content.Context; import android.content.Context;
import android.content.DialogInterface;
import android.content.Intent; import android.content.Intent;
import android.content.res.Resources; import android.content.res.Resources;
import android.graphics.Bitmap; import android.graphics.Bitmap;
@ -80,7 +79,7 @@ public class InAppBrowser extends CordovaPlugin {
private static final String CLEAR_ALL_CACHE = "clearcache"; private static final String CLEAR_ALL_CACHE = "clearcache";
private static final String CLEAR_SESSION_CACHE = "clearsessioncache"; private static final String CLEAR_SESSION_CACHE = "clearsessioncache";
private Dialog dialog; private InAppBrowserDialog dialog;
private WebView inAppWebView; private WebView inAppWebView;
private EditText edittext; private EditText edittext;
private CallbackContext callbackContext; private CallbackContext callbackContext;
@ -337,12 +336,21 @@ public class InAppBrowser extends CordovaPlugin {
this.cordova.getActivity().runOnUiThread(new Runnable() { this.cordova.getActivity().runOnUiThread(new Runnable() {
@Override @Override
public void run() { public void run() {
childView.loadUrl("about:blank"); childView.setWebViewClient(new WebViewClient() {
// NB: wait for about:blank before dismissing
public void onPageFinished(WebView view, String url) {
if (dialog != null) { if (dialog != null) {
dialog.dismiss(); 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 { try {
JSONObject obj = new JSONObject(); JSONObject obj = new JSONObject();
obj.put("type", EXIT_EVENT); obj.put("type", EXIT_EVENT);
@ -350,7 +358,6 @@ public class InAppBrowser extends CordovaPlugin {
} catch (JSONException ex) { } catch (JSONException ex) {
Log.d(LOG_TAG, "Should never happen"); Log.d(LOG_TAG, "Should never happen");
} }
} }
/** /**
@ -398,6 +405,10 @@ public class InAppBrowser extends CordovaPlugin {
return this.showLocationBar; return this.showLocationBar;
} }
private InAppBrowser getInAppBrowser(){
return this;
}
/** /**
* Display a new browser with the specified URL. * Display a new browser with the specified URL.
* *
@ -448,15 +459,11 @@ public class InAppBrowser extends CordovaPlugin {
public void run() { public void run() {
// Let's create the main dialog // 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.getWindow().getAttributes().windowAnimations = android.R.style.Animation_Dialog;
dialog.requestWindowFeature(Window.FEATURE_NO_TITLE); dialog.requestWindowFeature(Window.FEATURE_NO_TITLE);
dialog.setCancelable(true); dialog.setCancelable(true);
dialog.setOnDismissListener(new DialogInterface.OnDismissListener() { dialog.setInAppBroswer(getInAppBrowser());
public void onDismiss(DialogInterface dialog) {
closeDialog();
}
});
// Main container layout // Main container layout
LinearLayout main = new LinearLayout(cordova.getActivity()); LinearLayout main = new LinearLayout(cordova.getActivity());

View File

@ -0,0 +1,54 @@
/*
Licensed to the Apache Software Foundation (ASF) under one
or more contributor license agreements. See the NOTICE file
distributed with this work for additional information
regarding copyright ownership. The ASF licenses this file
to you under the Apache License, Version 2.0 (the
"License"); you may not use this file except in compliance
with the License. You may obtain a copy of the License at
http://www.apache.org/licenses/LICENSE-2.0
Unless required by applicable law or agreed to in writing,
software distributed under the License is distributed on an
"AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
KIND, either express or implied. See the License for the
specific language governing permissions and limitations
under the License.
*/
package org.apache.cordova.inappbrowser;
import android.app.AlertDialog;
import android.app.Dialog;
import android.content.Context;
import android.util.Log;
import org.json.JSONException;
import org.json.JSONObject;
/**
* Created by Oliver on 22/11/2013.
*/
public class InAppBrowserDialog extends Dialog {
Context context;
InAppBrowser inAppBrowser = null;
public InAppBrowserDialog(Context context, int theme) {
super(context, theme);
this.context = context;
}
public void setInAppBroswer(InAppBrowser browser) {
this.inAppBrowser = browser;
}
public void onBackPressed () {
if (this.inAppBrowser == null) {
this.dismiss();
} else {
// better to go through the in inAppBrowser
// because it does a clean up
this.inAppBrowser.closeDialog();
}
}
}