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

camera.getPicture() calls both the success and error callbacks when a picture is taken.

    XMLWordPrintableJSON

    Details

    • Type: Bug
    • Status: Closed
    • Priority: Major
    • Resolution: Fixed
    • Affects Version/s: 1.4.0, 1.7.0
    • Fix Version/s: 1.9.0
    • Labels:
      None
    • Environment:

      BlackBerry PlayBook v2.0.

      Description

      Testing on a 2.0 Playbook, I saw both of my callbacks (success and error) called when a picture was successfully taken and returned to my app.

      The problem appears to be here:

          cameraAPI = {
              execute: function (webWorksResult, action, args, win, fail) {
                  if (action === 'takePicture') {
                      blackberry.media.camera.takePicture(win, fail, fail);
                      return retAsyncCall();
                  }
                  else {
                      return retInvalidAction();
                  }
              }
          },
      

      The second parameter to WebWorks takePicture() is defined to be "onCameraClosed". It appears that onCameraClosed is called after the onCaptured (the first parameter) callback is called.

      I was able to achieve the documented behaviour for camera.getPicture() by modifying the above code to the following:

          cameraAPI = {
              execute: function (webWorksResult, action, args, win, fail) {
                  var pictureTaken = false;
      
                  if (action === 'takePicture') {
                      function success( picture ) {
                          pictureTaken = true;
                          win( picture );
                      }
      
                      function cameraClose() {
                          if( !pictureTaken ) {
                              fail( "User canceled operation." );
                          }
                      }
      
                      blackberry.media.camera.takePicture(success, cameraClose, fail);
                      return retAsyncCall();
                  }
                  else {
                      return retInvalidAction();
                  }
              }
          },
      

      I would expect that this issue also affects the use of the takePicture method as used in the Media APIs.

      I tested with PhoneGap v1.4.0. The code example from above is from v1.7.0rc1 which is implemented virtually the same as v1.4.0.

        Attachments

          Activity

            People

            • Assignee:
              timkim Tim Kim
              Reporter:
              wifisher Wayne Fisher
            • Votes:
              0 Vote for this issue
              Watchers:
              1 Start watching this issue

              Dates

              • Created:
                Updated:
                Resolved: