CB-1691: Android menu button event doesn't fire when textbox has focus

This commit is contained in:
Simon MacDonald 2012-10-29 16:20:39 -04:00
parent 011b512f28
commit 876f975aa2
2 changed files with 10 additions and 5 deletions

View File

@ -93,6 +93,8 @@ public class CordovaWebView extends WebView {
private boolean bound; private boolean bound;
private boolean handleButton = false; private boolean handleButton = false;
private long lastMenuEventTime = 0;
NativeToJsMessageQueue jsMessageQueue; NativeToJsMessageQueue jsMessageQueue;
ExposedJsApi exposedJsApi; ExposedJsApi exposedJsApi;
@ -838,7 +840,10 @@ public class CordovaWebView extends WebView {
} }
// Legacy // Legacy
else if (keyCode == KeyEvent.KEYCODE_MENU) { 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); return super.onKeyUp(keyCode, event);
} }
// If search key // If search key

View File

@ -1006,10 +1006,10 @@ public class DroidGap extends Activity implements CordovaInterface {
public boolean onKeyUp(int keyCode, KeyEvent event) public boolean onKeyUp(int keyCode, KeyEvent event)
{ {
//Determine if the focus is on the current view or not //Determine if the focus is on the current view or not
if (appView.getHitTestResult() != null && if (appView.getHitTestResult() != null &&
appView.getHitTestResult().getType() == WebView.HitTestResult.EDIT_TEXT_TYPE && appView.getHitTestResult().getType() == WebView.HitTestResult.EDIT_TEXT_TYPE &&
keyCode == KeyEvent.KEYCODE_BACK) { (keyCode == KeyEvent.KEYCODE_BACK || keyCode == KeyEvent.KEYCODE_MENU)) {
return appView.onKeyUp(keyCode, event); return appView.onKeyUp(keyCode, event);
} else if (appView.isCustomViewShowing() && keyCode == KeyEvent.KEYCODE_BACK) { } else if (appView.isCustomViewShowing() && keyCode == KeyEvent.KEYCODE_BACK) {
return appView.onKeyUp(keyCode, event); return appView.onKeyUp(keyCode, event);
} else { } else {