Uploaded image for project: 'Apache Cordova'
  1. Apache Cordova
  2. CB-7104

Plugin results not transmitted back to devices (specially Samsung S4 and S5)

    XMLWordPrintableJSON

Details

    • Bug
    • Status: Closed
    • Blocker
    • Resolution: Duplicate
    • 3.3.0
    • None
    • cordova-android

    Description

      Our app relies heavily on Cordova plugins for communicating between JavaScript and native, and on certain devices these messages are not consistently sent back to the JavaScript API.

      I've tracked it down to a problem with webView.setNetworkAvailable()-usage in NativeToJsMessageQueue.java, and I have a suggestion for a fix.

      The problem with the current setup of (3.3.0) of NativeToJsMessageQueue seems to be that the online flag is toggled every time a plugin is fired, while webView.setNetworkAvailable(online) is only fired if the queue has messages.

      Since not all plugins have messages, the online flag can be toggled twice, and the online flag will be i.e. false for each time the command is run - which means Cordova won't send any messages.

      On Samsung S4 and S5 the hideKeyboard-event is slower or faster than other devices, which results in a doble toggle of the online flag. This leads to the following command being sent when there is a message in the queue:

      webView.setNetworkAvailable(false); // first message
      webView.setNetworkAvailable(false); // second message, which is not being sent
      webView.setNetworkAvailable(false); // third message, which will be sent

      For us it has been a terrible blocker, and I've made a change to the OnlineEventsBridgeMode in NativeToJsMessageQueue.java that addresses this.

      Attachments

        Issue Links

          Activity

            People

              Unassigned Unassigned
              hnilsen HÃ¥kon Nilsen
              Votes:
              0 Vote for this issue
              Watchers:
              4 Start watching this issue

              Dates

                Created:
                Updated:
                Resolved: