You are viewing a plain text version of this content. The canonical link for it is here.
Posted to commits@cordova.apache.org by ag...@apache.org on 2015/02/25 18:27:44 UTC
android commit: CB-8510 Fix back button not exiting activity in
manual tests
Repository: cordova-android
Updated Branches:
refs/heads/master 455298d73 -> d6da2ef09
CB-8510 Fix back button not exiting activity in manual tests
Project: http://git-wip-us.apache.org/repos/asf/cordova-android/repo
Commit: http://git-wip-us.apache.org/repos/asf/cordova-android/commit/d6da2ef0
Tree: http://git-wip-us.apache.org/repos/asf/cordova-android/tree/d6da2ef0
Diff: http://git-wip-us.apache.org/repos/asf/cordova-android/diff/d6da2ef0
Branch: refs/heads/master
Commit: d6da2ef096e7ada704c0422622835ae860c7d5fe
Parents: 455298d
Author: Andrew Grieve <ag...@chromium.org>
Authored: Wed Feb 25 12:27:06 2015 -0500
Committer: Andrew Grieve <ag...@chromium.org>
Committed: Wed Feb 25 12:27:06 2015 -0500
----------------------------------------------------------------------
.../apache/cordova/CordovaWebViewEngine.java | 4 +-
.../org/apache/cordova/CordovaWebViewImpl.java | 104 ++++++++-----------
.../apache/cordova/engine/SystemWebView.java | 19 +---
3 files changed, 47 insertions(+), 80 deletions(-)
----------------------------------------------------------------------
http://git-wip-us.apache.org/repos/asf/cordova-android/blob/d6da2ef0/framework/src/org/apache/cordova/CordovaWebViewEngine.java
----------------------------------------------------------------------
diff --git a/framework/src/org/apache/cordova/CordovaWebViewEngine.java b/framework/src/org/apache/cordova/CordovaWebViewEngine.java
index 03f697c..8b62b1f 100644
--- a/framework/src/org/apache/cordova/CordovaWebViewEngine.java
+++ b/framework/src/org/apache/cordova/CordovaWebViewEngine.java
@@ -71,12 +71,12 @@ public interface CordovaWebViewEngine {
* Methods may be added in future cordova versions, but never removed.
*/
public interface Client {
- Boolean onKeyDown(int keyCode, KeyEvent event);
- Boolean onKeyUp(int keyCode, KeyEvent event);
+ Boolean onDispatchKeyEvent(KeyEvent event);
boolean shouldOverrideUrlLoading(String url);
void clearLoadTimeoutTimer();
void onPageStarted(String newUrl);
void onReceivedError(int errorCode, String description, String failingUrl);
void onPageFinishedLoading(String url);
+ void onScrollChanged(int l, int t, int oldl, int oldt);
}
}
http://git-wip-us.apache.org/repos/asf/cordova-android/blob/d6da2ef0/framework/src/org/apache/cordova/CordovaWebViewImpl.java
----------------------------------------------------------------------
diff --git a/framework/src/org/apache/cordova/CordovaWebViewImpl.java b/framework/src/org/apache/cordova/CordovaWebViewImpl.java
index 8efb1e0..d8faed9 100644
--- a/framework/src/org/apache/cordova/CordovaWebViewImpl.java
+++ b/framework/src/org/apache/cordova/CordovaWebViewImpl.java
@@ -476,8 +476,6 @@ public class CordovaWebViewImpl implements CordovaWebView {
}
protected class EngineClient implements CordovaWebViewEngine.Client {
- private long lastMenuEventTime = 0;
-
@Override
public void clearLoadTimeoutTimer() {
loadUrlTimeout++;
@@ -539,76 +537,48 @@ public class CordovaWebViewImpl implements CordovaWebView {
}
@Override
- public Boolean onKeyDown(int keyCode, KeyEvent event) {
- if (boundKeyCodes.contains(keyCode))
- {
- if (keyCode == KeyEvent.KEYCODE_VOLUME_DOWN) {
- sendJavascriptEvent("volumedownbutton");
- return true;
- } else if (keyCode == KeyEvent.KEYCODE_VOLUME_UP) {
- sendJavascriptEvent("volumeupbutton");
+ public Boolean onDispatchKeyEvent(KeyEvent event) {
+ int keyCode = event.getKeyCode();
+ boolean isBackButton = keyCode == KeyEvent.KEYCODE_BACK;
+ if (event.getAction() == KeyEvent.ACTION_DOWN) {
+ if (isBackButton && mCustomView != null) {
return true;
- }
- return null;
- }
- else if (keyCode == KeyEvent.KEYCODE_BACK)
- {
- return !engine.canGoBack() || isButtonPlumbedToJs(KeyEvent.KEYCODE_BACK);
- }
- else if(keyCode == KeyEvent.KEYCODE_MENU)
- {
- //How did we get here? Is there a childView?
- View childView = ((ViewGroup)engine.getView().getParent()).getFocusedChild();
- if(childView != null)
- {
- //Make sure we close the keyboard if it's present
- InputMethodManager imm = (InputMethodManager) cordova.getActivity().getSystemService(Context.INPUT_METHOD_SERVICE);
- imm.hideSoftInputFromWindow(childView.getWindowToken(), 0);
- cordova.getActivity().openOptionsMenu();
+ } else if (boundKeyCodes.contains(keyCode)) {
return true;
+ } else if (isBackButton) {
+ return engine.canGoBack();
}
- }
- return null;
- }
-
- @Override
- public Boolean onKeyUp(int keyCode, KeyEvent event)
- {
- // If back key
- if (keyCode == KeyEvent.KEYCODE_BACK) {
- // A custom view is currently displayed (e.g. playing a video)
- if(mCustomView != null) {
+ } else if (event.getAction() == KeyEvent.ACTION_UP) {
+ if (isBackButton && mCustomView != null) {
hideCustomView();
return true;
- } else {
- // The webview is currently displayed
- // If back key is bound, then send event to JavaScript
- if (isButtonPlumbedToJs(KeyEvent.KEYCODE_BACK)) {
- sendJavascriptEvent("backbutton");
+ } else if (boundKeyCodes.contains(keyCode)) {
+ String eventName = null;
+ switch (keyCode) {
+ case KeyEvent.KEYCODE_VOLUME_DOWN:
+ eventName = "volumedownbutton";
+ break;
+ case KeyEvent.KEYCODE_VOLUME_UP:
+ eventName = "volumeupbutton";
+ break;
+ case KeyEvent.KEYCODE_SEARCH:
+ eventName = "searchbutton";
+ break;
+ case KeyEvent.KEYCODE_MENU:
+ eventName = "menubutton";
+ break;
+ case KeyEvent.KEYCODE_BACK:
+ eventName = "backbutton";
+ break;
+ }
+ if (eventName != null) {
+ sendJavascriptEvent(eventName);
return true;
- } else {
- // If not bound
- // Go to previous page in webview if it is possible to go back
- if (engine.goBack()) {
- return true;
- }
- // If not, then invoke default behavior
}
+ } else if (isBackButton) {
+ return engine.goBack();
}
}
- // Legacy
- else if (keyCode == KeyEvent.KEYCODE_MENU) {
- if (lastMenuEventTime < event.getEventTime()) {
- sendJavascriptEvent("menubutton");
- }
- lastMenuEventTime = event.getEventTime();
- return null;
- }
- // If search key
- else if (keyCode == KeyEvent.KEYCODE_SEARCH) {
- sendJavascriptEvent("searchbutton");
- return true;
- }
return null;
}
@@ -641,5 +611,13 @@ public class CordovaWebViewImpl implements CordovaWebView {
// Block by default
return true;
}
+
+ @Override
+ public void onScrollChanged(int l, int t, int oldl, int oldt) {
+ // TODO: scrolling is perf-sensitive, so we'd probably be better to no use postMessage
+ // here, and also not to create any new objects.
+ ScrollEvent myEvent = new ScrollEvent(l, t, oldl, oldt, getView());
+ pluginManager.postMessage("onScrollChanged", myEvent);
+ }
}
}
http://git-wip-us.apache.org/repos/asf/cordova-android/blob/d6da2ef0/framework/src/org/apache/cordova/engine/SystemWebView.java
----------------------------------------------------------------------
diff --git a/framework/src/org/apache/cordova/engine/SystemWebView.java b/framework/src/org/apache/cordova/engine/SystemWebView.java
index da07d6a..34d5458 100644
--- a/framework/src/org/apache/cordova/engine/SystemWebView.java
+++ b/framework/src/org/apache/cordova/engine/SystemWebView.java
@@ -63,26 +63,15 @@ public class SystemWebView extends WebView implements CordovaWebViewEngine.Engin
public void onScrollChanged(int l, int t, int oldl, int oldt)
{
super.onScrollChanged(l, t, oldl, oldt);
- //We should post a message that the scroll changed
- ScrollEvent myEvent = new ScrollEvent(l, t, oldl, oldt, this);
- parentEngine.pluginManager.postMessage("onScrollChanged", myEvent);
+ parentEngine.client.onScrollChanged(l, t, oldl, oldt);
}
@Override
- public boolean onKeyDown(int keyCode, KeyEvent event) {
- Boolean ret = parentEngine.client.onKeyDown(keyCode, event);
+ public boolean dispatchKeyEvent(KeyEvent event) {
+ Boolean ret = parentEngine.client.onDispatchKeyEvent(event);
if (ret != null) {
return ret.booleanValue();
}
- return super.onKeyDown(keyCode, event);
- }
-
- @Override
- public boolean onKeyUp(int keyCode, KeyEvent event) {
- Boolean ret = parentEngine.client.onKeyUp(keyCode, event);
- if (ret != null) {
- return ret.booleanValue();
- }
- return super.onKeyUp(keyCode, event);
+ return super.dispatchKeyEvent(event);
}
}
---------------------------------------------------------------------
To unsubscribe, e-mail: commits-unsubscribe@cordova.apache.org
For additional commands, e-mail: commits-help@cordova.apache.org