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