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

"batterylow" and "batterycritical" may never happen because of exact level check

    XMLWordPrintableJSON

    Details

      Description

      The battery JavaScript code fires events when charge reaches some threshold percentages 20 and 5:

      if (level === 20 || level === 5) {
          if (level === 20) {
              cordova.fireWindowEvent("batterylow", info);
          }
          else {
              cordova.fireWindowEvent("batterycritical", info);
          }
      }
      

      But this logic makes an assumption that the level will at some point be exactly 20 or 5. It is not a valid assumption. AFAIK there is no guarantee that the device reports absolutely every percentage point 0-100, so if by bad luck the device reports levels 25,22,19,16... then clearly level===20 was missed so in this scenario the "batterylow" event the user was expecting is simply not going to happen.

      Ref http://stackoverflow.com/questions/10189218/detect-changing-battery-state-at-every-percentage-in-android

      IMO the code should be checking when the previous lvel versus current level has crossed over the threshold, rather checking the current level is exactly equal to the threshold value.

        Attachments

          Issue Links

            Activity

              People

              • Assignee:
                purplecabbage Jesse MacFadyen
                Reporter:
                dinglemouse Peter
              • Votes:
                0 Vote for this issue
                Watchers:
                3 Start watching this issue

                Dates

                • Created:
                  Updated:
                  Resolved: