From e7ff11af5246cea53d2a28c7cb4ca98568ba851f Mon Sep 17 00:00:00 2001 From: Martin Gonzalez Date: Fri, 3 Oct 2014 01:04:20 -0500 Subject: [PATCH] [CB-6837][Android] Fix: leaked window when hitting back button while alert being rendered Keep track of the last AlertDialog showed. The last dialog showed that is rendered while hitting back button it causes a leaked window. Instead of perform a full track of all dialogs created, only destroy the last one showed, this fixes the problem. --- .../org/apache/cordova/AndroidChromeClient.java | 16 +++++++++++++--- .../src/org/apache/cordova/AndroidWebView.java | 3 +++ 2 files changed, 16 insertions(+), 3 deletions(-) diff --git a/framework/src/org/apache/cordova/AndroidChromeClient.java b/framework/src/org/apache/cordova/AndroidChromeClient.java index e4ebe9686..ad6c41436 100755 --- a/framework/src/org/apache/cordova/AndroidChromeClient.java +++ b/framework/src/org/apache/cordova/AndroidChromeClient.java @@ -65,6 +65,9 @@ public class AndroidChromeClient extends WebChromeClient { // the video progress view private View mVideoProgressView; + //Keep track of last AlertDialog showed + private AlertDialog lastHandledDialog; + // File Chooser protected ValueCallback mUploadMessage; @@ -113,7 +116,7 @@ public boolean onKey(DialogInterface dialog, int keyCode, KeyEvent event) { return true; } }); - dlg.show(); + lastHandledDialog = dlg.show(); return true; } @@ -162,7 +165,7 @@ public boolean onKey(DialogInterface dialog, int keyCode, KeyEvent event) { return true; } }); - dlg.show(); + lastHandledDialog = dlg.show(); return true; } @@ -206,7 +209,7 @@ public void onClick(DialogInterface dialog, int which) { res.cancel(); } }); - dlg.show(); + lastHandledDialog = dlg.show(); } return true; } @@ -314,4 +317,11 @@ public void openFileChooser(ValueCallback uploadMsg, String acceptType, Str this.cordova.getActivity().startActivityForResult(Intent.createChooser(i, "File Browser"), FILECHOOSER_RESULTCODE); } + + public void destroyLastDialog(){ + if(lastHandledDialog != null){ + lastHandledDialog.cancel(); + } + } + } diff --git a/framework/src/org/apache/cordova/AndroidWebView.java b/framework/src/org/apache/cordova/AndroidWebView.java index 8986d583d..981747638 100755 --- a/framework/src/org/apache/cordova/AndroidWebView.java +++ b/framework/src/org/apache/cordova/AndroidWebView.java @@ -603,6 +603,9 @@ public void handleDestroy() // Load blank page so that JavaScript onunload is called this.loadUrl("about:blank"); + + //Remove last AlertDialog + this.chromeClient.destroyLastDialog(); // Forward to plugins if (this.pluginManager != null) {