From 4b4a2e9f9e6ebcef57cee2e5f4c44108ec72ca25 Mon Sep 17 00:00:00 2001 From: Andrew Grieve Date: Tue, 24 Jun 2014 15:08:47 -0400 Subject: [PATCH] CB-7018 Clean up and deprecation of some button-related functions --- framework/src/org/apache/cordova/App.java | 12 ++- .../org/apache/cordova/CordovaWebView.java | 81 +++++++++---------- 2 files changed, 48 insertions(+), 45 deletions(-) diff --git a/framework/src/org/apache/cordova/App.java b/framework/src/org/apache/cordova/App.java index 4b15906d..21125194 100755 --- a/framework/src/org/apache/cordova/App.java +++ b/framework/src/org/apache/cordova/App.java @@ -32,6 +32,7 @@ import android.content.Context; import android.content.Intent; import android.content.IntentFilter; import android.telephony.TelephonyManager; +import android.view.KeyEvent; import java.util.HashMap; @@ -217,7 +218,7 @@ public class App extends CordovaPlugin { */ public void overrideBackbutton(boolean override) { LOG.i("App", "WARNING: Back Button Default Behavior will be overridden. The backbutton event will be fired!"); - webView.bindButton(override); + webView.setButtonPlumbedToJs(KeyEvent.KEYCODE_BACK, override); } /** @@ -229,7 +230,12 @@ public class App extends CordovaPlugin { */ public void overrideButton(String button, boolean override) { LOG.i("App", "WARNING: Volume Button Default Behavior will be overridden. The volume event will be fired!"); - webView.bindButton(button, override); + if (button.equals("volumeup")) { + webView.setButtonPlumbedToJs(KeyEvent.KEYCODE_VOLUME_UP, override); + } + else if (button.equals("volumedown")) { + webView.setButtonPlumbedToJs(KeyEvent.KEYCODE_VOLUME_DOWN, override); + } } /** @@ -238,7 +244,7 @@ public class App extends CordovaPlugin { * @return boolean */ public boolean isBackbuttonOverridden() { - return webView.isBackButtonBound(); + return webView.isButtonPlumbedToJs(KeyEvent.KEYCODE_BACK); } /** diff --git a/framework/src/org/apache/cordova/CordovaWebView.java b/framework/src/org/apache/cordova/CordovaWebView.java index 3b3f80d3..b31eec57 100755 --- a/framework/src/org/apache/cordova/CordovaWebView.java +++ b/framework/src/org/apache/cordova/CordovaWebView.java @@ -21,8 +21,8 @@ package org.apache.cordova; import java.lang.reflect.InvocationTargetException; import java.lang.reflect.Method; -import java.util.ArrayList; import java.util.HashMap; +import java.util.HashSet; import java.util.Locale; import org.apache.cordova.Config; @@ -70,8 +70,7 @@ public class CordovaWebView extends WebView { public static final String TAG = "CordovaWebView"; public static final String CORDOVA_VERSION = "3.6.0-dev"; - private ArrayList keyDownCodes = new ArrayList(); - private ArrayList keyUpCodes = new ArrayList(); + private HashSet boundKeyCodes = new HashSet(); public PluginManager pluginManager; private boolean paused; @@ -90,10 +89,6 @@ public class CordovaWebView extends WebView { // Flag to track that a loadUrl timeout occurred int loadUrlTimeout = 0; - private boolean bound; - - private boolean handleButton = false; - private long lastMenuEventTime = 0; NativeToJsMessageQueue jsMessageQueue; @@ -705,23 +700,17 @@ public class CordovaWebView extends WebView { return p.toString(); } - /* - * onKeyDown - */ @Override public boolean onKeyDown(int keyCode, KeyEvent event) { - if(keyDownCodes.contains(keyCode)) + if(boundKeyCodes.contains(keyCode)) { if (keyCode == KeyEvent.KEYCODE_VOLUME_DOWN) { - // only override default behavior is event bound - LOG.d(TAG, "Down Key Hit"); this.loadUrl("javascript:cordova.fireDocumentEvent('volumedownbutton');"); return true; } // If volumeup key else if (keyCode == KeyEvent.KEYCODE_VOLUME_UP) { - LOG.d(TAG, "Up Key Hit"); this.loadUrl("javascript:cordova.fireDocumentEvent('volumeupbutton');"); return true; } @@ -732,7 +721,7 @@ public class CordovaWebView extends WebView { } else if(keyCode == KeyEvent.KEYCODE_BACK) { - return !(this.startOfHistory()) || this.bound; + return !(this.startOfHistory()) || isButtonPlumbedToJs(KeyEvent.KEYCODE_BACK); } else if(keyCode == KeyEvent.KEYCODE_MENU) { @@ -749,10 +738,8 @@ public class CordovaWebView extends WebView { return super.onKeyDown(keyCode, event); } } - return super.onKeyDown(keyCode, event); } - @Override public boolean onKeyUp(int keyCode, KeyEvent event) @@ -762,10 +749,11 @@ public class CordovaWebView extends WebView { // A custom view is currently displayed (e.g. playing a video) if(mCustomView != null) { this.hideCustomView(); + return true; } else { // The webview is currently displayed // If back key is bound, then send event to JavaScript - if (this.bound) { + if (isButtonPlumbedToJs(KeyEvent.KEYCODE_BACK)) { this.loadUrl("javascript:cordova.fireDocumentEvent('backbutton');"); return true; } else { @@ -791,48 +779,56 @@ public class CordovaWebView extends WebView { this.loadUrl("javascript:cordova.fireDocumentEvent('searchbutton');"); return true; } - else if(keyUpCodes.contains(keyCode)) - { - //What the hell should this do? - return super.onKeyUp(keyCode, event); - } //Does webkit change this behavior? return super.onKeyUp(keyCode, event); } - + public void setButtonPlumbedToJs(int keyCode, boolean value) { + switch (keyCode) { + case KeyEvent.KEYCODE_VOLUME_DOWN: + case KeyEvent.KEYCODE_VOLUME_UP: + case KeyEvent.KEYCODE_BACK: + // TODO: Why are search and menu buttons handled separately? + boundKeyCodes.add(keyCode); + return; + default: + throw new IllegalArgumentException("Unsupported keycode: " + keyCode); + } + } + + @Deprecated // Use setButtonPlumbedToJs() instead. public void bindButton(boolean override) { - this.bound = override; + setButtonPlumbedToJs(KeyEvent.KEYCODE_BACK, override); } + @Deprecated // Use setButtonPlumbedToJs() instead. public void bindButton(String button, boolean override) { - // TODO Auto-generated method stub if (button.compareTo("volumeup")==0) { - keyDownCodes.add(KeyEvent.KEYCODE_VOLUME_UP); + setButtonPlumbedToJs(KeyEvent.KEYCODE_VOLUME_UP, override); } else if (button.compareTo("volumedown")==0) { - keyDownCodes.add(KeyEvent.KEYCODE_VOLUME_DOWN); + setButtonPlumbedToJs(KeyEvent.KEYCODE_VOLUME_DOWN, override); } - } - - public void bindButton(int keyCode, boolean keyDown, boolean override) { - if(keyDown) - { - keyDownCodes.add(keyCode); - } - else - { - keyUpCodes.add(keyCode); - } } + @Deprecated // Use setButtonPlumbedToJs() instead. + public void bindButton(int keyCode, boolean keyDown, boolean override) { + setButtonPlumbedToJs(keyCode, override); + } + + @Deprecated // Use isButtonPlumbedToJs public boolean isBackButtonBound() { - return this.bound; + return isButtonPlumbedToJs(KeyEvent.KEYCODE_BACK); } - + + public boolean isButtonPlumbedToJs(int keyCode) + { + return boundKeyCodes.contains(keyCode); + } + public void handlePause(boolean keepRunning) { LOG.d(TAG, "Handle the pause"); @@ -904,8 +900,9 @@ public class CordovaWebView extends WebView { return paused; } + @Deprecated // This never did anything. public boolean hadKeyEvent() { - return handleButton; + return false; } // Wrapping these functions in their own class prevents warnings in adb like: