Anatoly Shirokov created CB-12347:
-------------------------------------

             Summary: [cordova-android] menubutton and searchbutton events are 
not fired 
                 Key: CB-12347
                 URL: https://issues.apache.org/jira/browse/CB-12347
             Project: Apache Cordova
          Issue Type: Bug
          Components: Android, CordovaJS
         Environment: android
            Reporter: Anatoly Shirokov
            Priority: Critical


I have ionic 2 project. I try to add event handler to the menubutton event:

    document.addEventListener("menubutton", this.onMenuButtonPress, false);

But when I run my application on Android device and press menu button, my 
handler is never called. 

I investigated 
https://github.com/apache/cordova-android/blob/master/cordova-js-src/platform.js
 and found, that menubutton and searchbutton are not overrided in opposite to 
volumeup, volumedown:

        // Add hardware MENU and SEARCH button handlers
        cordova.addDocumentEventHandler('menubutton');
        cordova.addDocumentEventHandler('searchbutton');

        function bindButtonChannel(buttonName) {
            // generic button bind used for volumeup/volumedown buttons
            var volumeButtonChannel = 
cordova.addDocumentEventHandler(buttonName + 'button');
            volumeButtonChannel.onHasSubscribersChange = function() {
                exec(null, null, APP_PLUGIN_NAME, "overrideButton", 
[buttonName, this.numHandlers == 1]);
            };
        }
        // Inject a listener for the volume buttons on the document.
        bindButtonChannel('volumeup');
        bindButtonChannel('volumedown');

To fix issue I have patched the platform.js:

        function bindButtonChannelWithoutSuffix(buttonName) {
            // generic button bind used for volumeup/volumedown buttons
            var volumeButtonChannel = 
cordova.addDocumentEventHandler(buttonName);
            volumeButtonChannel.onHasSubscribersChange = function() {
                exec(null, null, APP_PLUGIN_NAME, "overrideButton", 
[buttonName, this.numHandlers == 1]);
            };
        }

        // Add hardware MENU and SEARCH button handlers
        bindButtonChannelWithoutSuffix('menubutton');
        bindButtonChannelWithoutSuffix('searchbutton');

        function bindButtonChannel(buttonName) {
            // generic button bind used for volumeup/volumedown buttons
            var volumeButtonChannel = 
cordova.addDocumentEventHandler(buttonName + 'button');
            volumeButtonChannel.onHasSubscribersChange = function() {
                exec(null, null, APP_PLUGIN_NAME, "overrideButton", 
[buttonName, this.numHandlers == 1]);
            };
        }
        // Inject a listener for the volume buttons on the document.
        bindButtonChannel('volumeup');
        bindButtonChannel('volumedown');

Thanks in advance!

BR,
Anatoly Shirokov





--
This message was sent by Atlassian JIRA
(v6.3.4#6332)

---------------------------------------------------------------------
To unsubscribe, e-mail: issues-unsubscr...@cordova.apache.org
For additional commands, e-mail: issues-h...@cordova.apache.org

Reply via email to