Re: CfC: Battery Last Call

On 11/22/2011 10:23 AM, Anssi Kostiainen wrote:
> Currently we can deduce the following based on the chargingTime and dischargingTime alone (I think only a battery widget would be interested in all these states, so not a common use case):
>
> if (0<  chargingTime&&  chargingTime<  Infinity) {
>    // battery is charging, chargingTime seconds until full
> } else if (chargingTime === 0) {
>    // battery is full
> } else if (chargingTime === Infinity&&  dischargingTime<  Infinity) {
>    // battery is discharging, dischargingTime seconds left
> } else if (chargingTime === Infinity&&  dischargingTime === Infinity) {
>    // unable to report [chargingTime and dischargingTime]
>    // no battery
> }
>
> Currently we're unable to differentiate between "no battery" and "unable to report [chargingTime and dischargingTime]" states. And because |level| returns 1.0 for both "no battery" and "unable to report", and |charging| returns false for both the conditions as well, we do not get any better granularity than this.

This is actually not true [1].
No battery is equivalent to :
{
   level = 1.0,
   charging = true,
   chargingTime = Infinity,
   dischargingTime = Infinity,
}

Given that when a battery is fully charged, we have :
{
   level = 1.0,
   charging = true,
   chargingTime = 0,
   dischargingTime = Infinity,
}

We can currently find a situation where we have no battery with:
level === 1.0 && charging === true && chargingTime === Infinity

> By returning |chargingTime = 0| also if there is no battery (in addition to "battery full" state) as Mounir suggests, we could test against |charging| to differentiate between "battery is full" and "no battery" states and be able to identify all the states:

My point was actually the opposite: the postulate we had since the 
beginning is that having no battery should be equivalent to having a 
fully charged battery so websites would be allowed to just check stuff 
as they want without caring about that detail. So we should have 
chargingTime = 0 when there is no battery. In addition, we wouldn't be 
able to know if the device has a battery or not.

To summarize, the requested changes are the following:
* In 4.1, "charging", but that's just fixing an old mistake, see [1]:
[ Represents if the system's battery is charging. The attribute must be 
set to true if the battery is charging or full, and set to false, if the 
battery is discharging, the implementation is unable to report the 
state, or there is no battery attached to the system, or otherwise. ]
should be changed to:
[ Represents if the system's battery is charging. The attribute must be 
set to false if the battery is discharging, and set to true, if the 
battery is charging, full, the implementation is unable to report the 
state, or there is no battery attached to the system, or otherwise. ]
* In 4.1 "chargingTime":
[ Represents the time remaining in seconds until the system's battery is 
fully charged. The attribute must be set to 0, if the battery is full, 
and to the value positive Infinity if the battery is discharging, the 
implementation is unable to report the remaining charging time, there is 
no battery attached to the system, or otherwise. ]
should be changed to:
[ Represents the time remaining in seconds until the system's battery is 
fully charged. The attribute must be set to 0, if the battery is full or 
there is no battery attached to the system, and to the value positive 
Infinity if the battery is discharging, the implementation is unable to 
report the remaining charging time, or otherwise. ]

[1] I realize that this is true according to the specs but I believe 
there is a mistake in the specs, we've never been talking of having 
charging = false when there is no battery.

--
Mounir

Received on Tuesday, 22 November 2011 15:34:59 UTC