From 876f975aa2e3d44c08f61c294d7313df859907c5 Mon Sep 17 00:00:00 2001 From: Simon MacDonald Date: Mon, 29 Oct 2012 16:20:39 -0400 Subject: [PATCH] CB-1691: Android menu button event doesn't fire when textbox has focus --- framework/src/org/apache/cordova/CordovaWebView.java | 7 ++++++- framework/src/org/apache/cordova/DroidGap.java | 8 ++++---- 2 files changed, 10 insertions(+), 5 deletions(-) diff --git a/framework/src/org/apache/cordova/CordovaWebView.java b/framework/src/org/apache/cordova/CordovaWebView.java index 6ca9df64..683b0d51 100755 --- a/framework/src/org/apache/cordova/CordovaWebView.java +++ b/framework/src/org/apache/cordova/CordovaWebView.java @@ -93,6 +93,8 @@ public class CordovaWebView extends WebView { private boolean bound; private boolean handleButton = false; + + private long lastMenuEventTime = 0; NativeToJsMessageQueue jsMessageQueue; ExposedJsApi exposedJsApi; @@ -838,7 +840,10 @@ public class CordovaWebView extends WebView { } // Legacy else if (keyCode == KeyEvent.KEYCODE_MENU) { - this.loadUrl("javascript:cordova.fireDocumentEvent('menubutton');"); + if (this.lastMenuEventTime < event.getEventTime()) { + this.loadUrl("javascript:cordova.fireDocumentEvent('menubutton');"); + } + this.lastMenuEventTime = event.getEventTime(); return super.onKeyUp(keyCode, event); } // If search key diff --git a/framework/src/org/apache/cordova/DroidGap.java b/framework/src/org/apache/cordova/DroidGap.java index 1176f693..c5d60b73 100755 --- a/framework/src/org/apache/cordova/DroidGap.java +++ b/framework/src/org/apache/cordova/DroidGap.java @@ -1006,10 +1006,10 @@ public class DroidGap extends Activity implements CordovaInterface { public boolean onKeyUp(int keyCode, KeyEvent event) { //Determine if the focus is on the current view or not - if (appView.getHitTestResult() != null && - appView.getHitTestResult().getType() == WebView.HitTestResult.EDIT_TEXT_TYPE && - keyCode == KeyEvent.KEYCODE_BACK) { - return appView.onKeyUp(keyCode, event); + if (appView.getHitTestResult() != null && + appView.getHitTestResult().getType() == WebView.HitTestResult.EDIT_TEXT_TYPE && + (keyCode == KeyEvent.KEYCODE_BACK || keyCode == KeyEvent.KEYCODE_MENU)) { + return appView.onKeyUp(keyCode, event); } else if (appView.isCustomViewShowing() && keyCode == KeyEvent.KEYCODE_BACK) { return appView.onKeyUp(keyCode, event); } else {