CB-7018 Clean up and deprecation of some button-related functions

This commit is contained in:
Andrew Grieve 2014-06-24 15:08:47 -04:00
parent 58afd0b604
commit 4b4a2e9f9e
2 changed files with 48 additions and 45 deletions

View File

@ -32,6 +32,7 @@ import android.content.Context;
import android.content.Intent; import android.content.Intent;
import android.content.IntentFilter; import android.content.IntentFilter;
import android.telephony.TelephonyManager; import android.telephony.TelephonyManager;
import android.view.KeyEvent;
import java.util.HashMap; import java.util.HashMap;
@ -217,7 +218,7 @@ public class App extends CordovaPlugin {
*/ */
public void overrideBackbutton(boolean override) { public void overrideBackbutton(boolean override) {
LOG.i("App", "WARNING: Back Button Default Behavior will be overridden. The backbutton event will be fired!"); 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) { public void overrideButton(String button, boolean override) {
LOG.i("App", "WARNING: Volume Button Default Behavior will be overridden. The volume event will be fired!"); 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 * @return boolean
*/ */
public boolean isBackbuttonOverridden() { public boolean isBackbuttonOverridden() {
return webView.isBackButtonBound(); return webView.isButtonPlumbedToJs(KeyEvent.KEYCODE_BACK);
} }
/** /**

View File

@ -21,8 +21,8 @@ package org.apache.cordova;
import java.lang.reflect.InvocationTargetException; import java.lang.reflect.InvocationTargetException;
import java.lang.reflect.Method; import java.lang.reflect.Method;
import java.util.ArrayList;
import java.util.HashMap; import java.util.HashMap;
import java.util.HashSet;
import java.util.Locale; import java.util.Locale;
import org.apache.cordova.Config; import org.apache.cordova.Config;
@ -70,8 +70,7 @@ public class CordovaWebView extends WebView {
public static final String TAG = "CordovaWebView"; public static final String TAG = "CordovaWebView";
public static final String CORDOVA_VERSION = "3.6.0-dev"; public static final String CORDOVA_VERSION = "3.6.0-dev";
private ArrayList<Integer> keyDownCodes = new ArrayList<Integer>(); private HashSet<Integer> boundKeyCodes = new HashSet<Integer>();
private ArrayList<Integer> keyUpCodes = new ArrayList<Integer>();
public PluginManager pluginManager; public PluginManager pluginManager;
private boolean paused; private boolean paused;
@ -90,10 +89,6 @@ public class CordovaWebView extends WebView {
// Flag to track that a loadUrl timeout occurred // Flag to track that a loadUrl timeout occurred
int loadUrlTimeout = 0; int loadUrlTimeout = 0;
private boolean bound;
private boolean handleButton = false;
private long lastMenuEventTime = 0; private long lastMenuEventTime = 0;
NativeToJsMessageQueue jsMessageQueue; NativeToJsMessageQueue jsMessageQueue;
@ -705,23 +700,17 @@ public class CordovaWebView extends WebView {
return p.toString(); return p.toString();
} }
/*
* onKeyDown
*/
@Override @Override
public boolean onKeyDown(int keyCode, KeyEvent event) public boolean onKeyDown(int keyCode, KeyEvent event)
{ {
if(keyDownCodes.contains(keyCode)) if(boundKeyCodes.contains(keyCode))
{ {
if (keyCode == KeyEvent.KEYCODE_VOLUME_DOWN) { 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');"); this.loadUrl("javascript:cordova.fireDocumentEvent('volumedownbutton');");
return true; return true;
} }
// If volumeup key // If volumeup key
else if (keyCode == KeyEvent.KEYCODE_VOLUME_UP) { else if (keyCode == KeyEvent.KEYCODE_VOLUME_UP) {
LOG.d(TAG, "Up Key Hit");
this.loadUrl("javascript:cordova.fireDocumentEvent('volumeupbutton');"); this.loadUrl("javascript:cordova.fireDocumentEvent('volumeupbutton');");
return true; return true;
} }
@ -732,7 +721,7 @@ public class CordovaWebView extends WebView {
} }
else if(keyCode == KeyEvent.KEYCODE_BACK) else if(keyCode == KeyEvent.KEYCODE_BACK)
{ {
return !(this.startOfHistory()) || this.bound; return !(this.startOfHistory()) || isButtonPlumbedToJs(KeyEvent.KEYCODE_BACK);
} }
else if(keyCode == KeyEvent.KEYCODE_MENU) 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);
} }
} }
return super.onKeyDown(keyCode, event); return super.onKeyDown(keyCode, event);
} }
@Override @Override
public boolean onKeyUp(int keyCode, KeyEvent event) 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) // A custom view is currently displayed (e.g. playing a video)
if(mCustomView != null) { if(mCustomView != null) {
this.hideCustomView(); this.hideCustomView();
return true;
} else { } else {
// The webview is currently displayed // The webview is currently displayed
// If back key is bound, then send event to JavaScript // If back key is bound, then send event to JavaScript
if (this.bound) { if (isButtonPlumbedToJs(KeyEvent.KEYCODE_BACK)) {
this.loadUrl("javascript:cordova.fireDocumentEvent('backbutton');"); this.loadUrl("javascript:cordova.fireDocumentEvent('backbutton');");
return true; return true;
} else { } else {
@ -791,48 +779,56 @@ public class CordovaWebView extends WebView {
this.loadUrl("javascript:cordova.fireDocumentEvent('searchbutton');"); this.loadUrl("javascript:cordova.fireDocumentEvent('searchbutton');");
return true; return true;
} }
else if(keyUpCodes.contains(keyCode))
{
//What the hell should this do?
return super.onKeyUp(keyCode, event);
}
//Does webkit change this behavior? //Does webkit change this behavior?
return super.onKeyUp(keyCode, event); 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) public void bindButton(boolean override)
{ {
this.bound = override; setButtonPlumbedToJs(KeyEvent.KEYCODE_BACK, override);
} }
@Deprecated // Use setButtonPlumbedToJs() instead.
public void bindButton(String button, boolean override) { public void bindButton(String button, boolean override) {
// TODO Auto-generated method stub
if (button.compareTo("volumeup")==0) { if (button.compareTo("volumeup")==0) {
keyDownCodes.add(KeyEvent.KEYCODE_VOLUME_UP); setButtonPlumbedToJs(KeyEvent.KEYCODE_VOLUME_UP, override);
} }
else if (button.compareTo("volumedown")==0) { 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() 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) public void handlePause(boolean keepRunning)
{ {
LOG.d(TAG, "Handle the pause"); LOG.d(TAG, "Handle the pause");
@ -904,8 +900,9 @@ public class CordovaWebView extends WebView {
return paused; return paused;
} }
@Deprecated // This never did anything.
public boolean hadKeyEvent() { public boolean hadKeyEvent() {
return handleButton; return false;
} }
// Wrapping these functions in their own class prevents warnings in adb like: // Wrapping these functions in their own class prevents warnings in adb like: