- From: Anssi Kostiainen via cvs-syncmail <cvsmail@w3.org>
- Date: Wed, 01 Feb 2012 19:27:46 +0000
- To: public-dap-commits@w3.org
Update of /sources/public/2009/dap/system-info In directory hutz:/tmp/cvs-serv25083 Modified Files: battery-status.html Log Message: moved to http://w3c-test.org/dap/battery/ Index: battery-status.html =================================================================== RCS file: /sources/public/2009/dap/system-info/battery-status.html,v retrieving revision 1.76 retrieving revision 1.77 diff -u -d -r1.76 -r1.77 --- battery-status.html 3 Jan 2012 15:59:44 -0000 1.76 +++ battery-status.html 1 Feb 2012 19:27:44 -0000 1.77 @@ -2,431 +2,8 @@ <html> <head> <title>Battery Status API</title> - <meta http-equiv="Content-Type" content="text/html;charset=utf-8"/> - <script src="../ReSpec.js/js/respec.js" class="remove"></script> - <script class="remove"> - var respecConfig = { - specStatus: "ED", - shortName: "battery-status", - //publishDate: "2011-11-29", - previousPublishDate: "2011-11-29", - previousMaturity: "LC", - edDraftURI: "http://dev.w3.org/2009/dap/system-info/battery-status.html", - lcEnd: "2011-12-20", - editors: [ - { name: "Anssi Kostiainen", company: "Nokia" } - ], - inlineCSS: true, - noIDLIn: true, - extraCSS: ["../ReSpec.js/css/respec.css"], - wg: "Device APIs Working Group", - wgURI: "http://www.w3.org/2009/dap/", - wgPublicList: "public-device-apis", - wgPatentURI: "http://www.w3.org/2004/01/pp-impl/43696/status", - }; - </script> </head> <body> - <section id="abstract"> - This specification defines an API that provides information about the - battery status of the hosting device. - </section> - - <section id="sotd"> - <p> - The functionality described in this specification was initially - specified as part of the - <a href="http://www.w3.org/TR/system-info-api/">System Information - API</a> but has been extracted in order to be more readily available, - more straightforward to implement, and in order to produce a - specification that could be implemented on its own merits without - interference with other, often unrelated, features. - </p> - </section> - - <section class="informative"> - <h2>Introduction</h2> - <p> - The Battery Status API specification defines a means for web - developers to programmatically determine the battery status of the - hosting device. Without knowing the battery status of a device, a web - developer must design the web application with an assumption of - sufficient battery level for the task at hand. This means the battery - of a device may exhaust faster than desired because web developers are - unable to make decisions based on the battery status. Given knowledge - of the battery status, web developers are able to craft web content and - applications which are power-efficient, thereby leading to improved - user experience. - </p> - <p> - The Battery Status API can be used to defer or scale back work when - the device is not charging in or is low on battery. An archetype of an - advanced web application, a web-based email client, may check the - server for new email every few seconds if the device is charging, - but do so less frequently if the device is not charging or is low on - battery. Another example is a web-based word processor which could - monitor the battery level and save changes before the battery runs - out to prevent data loss. - </p> - <p> - The following example shows how a web-based email client could check - for new emails every ten seconds without knowledge of the battery - status: - </p> - <pre class="example sh_javascript"> - <!DOCTYPE html> - <html> - <head> - <title>Email Client</title> - <script> - var mail = { - INTERVAL_DEFAULT: 1000 * 10, - interval: null, - timer: 0, - - check: function () { - console.log('Checking the server for new emails using an interval of ' + - (mail.interval / 1000) + ' seconds.'); - }, - - setTimer: function (interval) { - if (interval === mail.interval) { return; } - if (mail.timer !== 0) { clearTimeout(mail.timer); } - if (interval) { mail.timer = setInterval(function () { mail.check(); }, interval); } - mail.interval = interval; - } - }; - - window.addEventListener('load', function () { - mail.setTimer(!mail.interval ? mail.INTERVAL_DEFAULT : mail.interval); - }, false); - </script> - </head> - <body></body> - </html> - - </pre> - <p> - The script will always check for emails every ten seconds, even if the - battery level is critically low and the device is not charging. - This is an example of poor resource management. - </p> - <p> - Using the <a>BatteryManager</a> interface, the web application is, for - example, able to throttle checking for emails if the device is low on - battery, stop checking for emails if the battery is critically low and - resume normal operation when the battery is charging: - </p> - <pre class="example sh_javascript"> - <!DOCTYPE html> - <html> - <head> - <title>Battery-aware Email Client</title> - <script> - var mail = { - INTERVAL_BATTERY_LOW: 1000 * 60 * 10, - INTERVAL_DEFAULT: 1000 * 10, - interval: null, - timer: 0, - - check: function () { - console.log('Checking the server for new emails using an interval of ' + - (mail.interval / 1000) + ' seconds.'); - }, - - setTimer: function (interval) { - if (interval === mail.interval) { return; } - if (mail.timer !== 0) { clearTimeout(mail.timer); } - if (interval) { mail.timer = setInterval(function () { mail.check(); }, interval); } - mail.interval = interval; - } - }; - - window.addEventListener('load', function () { - mail.setTimer(!mail.interval ? mail.INTERVAL_DEFAULT : mail.interval); - }, false); - - var battery = navigator.battery; - - battery.addEventListener('dischargingtimechange', function () { - if (battery.dischargingTime < 60 * 30 || battery.level < 0.1) { - mail.setTimer(mail.INTERVAL_BATTERY_LOW); - console.log('30 minutes remaining or level below 10%, checking the server less frequently.'); - } else if (battery.dischargingTime < 60 * 10 || battery.level < 0.05) { - mail.setTimer(null); - console.log('10 minutes remaining or level below 5%, stop checking the server.'); - } - }, false); - - battery.addEventListener('chargingchange', function () { - if (battery.charging) { - mail.setTimer(mail.INTERVAL_DEFAULT); - console.log('Battery is charging, checking the server normally.'); - } - }, false); - </script> - </head> - <body></body> - </html> - </pre> - </section> - - <section id="conformance"> - <p> - This specification defines conformance criteria that apply to a single - product: the <dfn>user agent</dfn> that implements the - interfaces that it contains. - </p> - <p> - Implementations that use ECMAScript to implement the APIs defined in - this specification must implement them in a manner consistent with the - ECMAScript Bindings defined in the Web IDL specification [[!WEBIDL]], - as this specification uses that specification and terminology. - </p> - </section> - <section> - <h2>Terminology</h2> - <p> - The <code><a href="http://dev.w3.org/html5/spec/webappapis.html#function"> - Function</a></code> interface represents a function in the scripting - language being used as defined in [[!HTML5]]. - </p> - <p> - The concepts <dfn><a href="http://dev.w3.org/html5/spec/webappapis.html#queue-a-task"> - queue a task</a></dfn> and - <dfn><a href="http://dev.w3.org/html5/spec/webappapis.html#fire-a-simple-event"> - fires a simple event</a></dfn> are defined in [[!HTML5]]. - </p> - <p> - The terms <dfn> <a href="http://dev.w3.org/html5/spec/webappapis.html#event-handlers"> - event handlers</a></dfn> and - <dfn><a href="http://dev.w3.org/html5/spec/webappapis.html#event-handler-event-type"> - event handler event types</a></dfn> are defined in [[!HTML5]]. - </p> - </section> - <section> - <h2>Security and privacy considerations</h2> - <p> - The API defined in this specification is used to determine the battery - status of the hosting device. The information disclosed has minimal - impact on privacy or fingerprinting, and therefore is exposed without - permission grants. For example, authors cannot directly know if there - is a battery or not in the hosting device. - </p> - </section> - <section> - <h2><a>NavigatorBattery</a> Interface</h2> - <p> - The <a>NavigatorBattery</a> interface is exposed on the - <code>Navigator</code> object. - </p> - <div class="idl" title="Navigator implements NavigatorBattery"></div> - <dl title="[NoInterfaceObject] interface NavigatorBattery" class="idl"> - <dt>readonly attribute BatteryManager battery</dt> - <dd> - The object that exposes the battery status information. - </dd> - </dl> - </section> - - <section> - <h2><a>BatteryManager</a> Interface</h2> - <dl title="[NoInterfaceObject] - interface BatteryManager : EventTarget" - class="idl"> - <dt>readonly attribute boolean charging</dt> - <dd> - 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, the implementation is unable to report the - state, or there is no battery attached to the system, or otherwise. - </dd> - <dt>readonly attribute double chargingTime</dt> - <dd> - 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. - </dd> - <dt>readonly attribute double dischargingTime</dt> - <dd> - Represents the time remaining in seconds until the system's battery - is completely discharged and the system is about to be suspended. The - attribute MUST be set to the value positive Infinity, if the battery - is charging, the implementation is unable to report the remaining - discharging time, there is no battery attached to the system, or - otherwise. - </dd> - <dt>readonly attribute double level</dt> - <dd> - Represents the current battery level scaled from 0 to 1.0. The - attribute MUST be set to 0 if the system's battery is depleted and - the system is about to be suspended, and to 1.0 if the battery is - full, the implementation is unable to report the battery's level, - or there is no battery attached to the system. - </dd> - <dt>[TreatNonCallableAsNull] attribute Function? onchargingchange</dt> - <dd> - </dd> - <dt>[TreatNonCallableAsNull] attribute Function? onchargingtimechange</dt> - <dd> - </dd> - <dt>[TreatNonCallableAsNull] attribute Function? ondischargingtimechange</dt> - <dd> - </dd> - <dt>[TreatNonCallableAsNull] attribute Function? onlevelchange</dt> - <dd> - </dd> - </dl> - <p> - When a <code>BatteryManager</code> object is created, - <code>charging</code> MUST be set to true, <code>chargingTime</code> - to 0, <code>level</code> to 1.0 and <code>dischargingTime</code> to - the value positive Infinity, if the implementation is unable to report - the battery's charging state, charging time, level or remaining time - respectively. - </p> - <p> - When the battery charging state is updated, the <a>user agent</a> MUST - <a>queue a task</a> which sets the <code>charging</code> attribute's - value and <a>fires a simple event</a> named <code>chargingchange</code> - at the <a>BatteryManager</a> object. - </p> - <p> - When the battery charging time is updated, the <a>user agent</a> MUST - <a>queue a task</a> which sets the <code>chargingTime</code> - attribute's value and <a>fires a simple event</a> named - <code>chargingtimechange</code> at the <a>BatteryManager</a> object. - </p> - <p> - When the battery discharging time is updated, the <a>user agent</a> - MUST <a>queue a task</a> which sets the <code> dischargingTime</code> - attribute's value and <a>fires a simple event </a> named - <code>dischargingtimechange</code> at the <a>BatteryManager</a> object. - </p> - <p> - When the battery level is updated, the <a>user agent</a> MUST - <a>queue a task</a> which sets the <code> level</code> attribute's - value and <a>fires a simple event</a> named <code>levelchange</code> - at the <a>BatteryManager</a> object. - </p> - <div class="note"> - The definition of how often the <code>chargingtimechange</code>, - <code>dischargingtimechange</code>, and <code>levelchange</code> events - are fired is left to the implementation. - </div> - <section> - <h2>Event handlers</h2> - <p> - The following are the <a>event handlers</a> (and their corresponding - <a>event handler event types</a>) that MUST be supported as - attributes by the <a>BatteryManager</a> object: - </p> - <table class="simple"> - <thead> - <tr> - <th>event handler</th> - <th>event handler event type</th> - </tr> - </thead> - <tbody> - <tr> - <td><strong><code>onchargingchange</code></strong></td> - <td><code>chargingchange</code></td> - </tr> - <tr> - <td><strong><code>onchargingtimechange</code></strong></td> - <td><code>chargingtimechange</code></td> - </tr> - <tr> - <td><strong><code>ondischargingchange</code></strong></td> - <td><code>dischargingchange</code></td> - </tr> - <tr> - <td><strong><code>onlevelchange</code></strong></td> - <td><code>levelchange</code></td> - </tr> - </tbody> - </table> - </section> - </section> - - <section class="informative"> - <h2>Examples</h2> - <p> - This trivial example writes the battery level to the console each time - the level changes: - </p> - <div class="example"> - <pre class="example sh_javascript"> - navigator.battery.onlevelchange = function () { - console.log(navigator.battery.level); - }; - </pre> - </div> - <p> - Alternatively, the same using the <code>addEventListener()</code> - method: - </p> - <div class="example"> - <pre class="example sh_javascript"> - navigator.battery.addEventListener('levelchange', function () { - console.log(navigator.battery.level); - }, false); - </pre> - </div> - <p> - The following example updates the indicators to show the charging - state, level and time remaining in minutes: - </p> - <div class="example"> - <pre class="example sh_javascript"> - <!DOCTYPE html> - <html> - <head> - <title>Battery Status API Example</title> - <script> - var battery = navigator.battery; - - battery.onchargingchange = function () { - document.querySelector('#charging').textContent = battery.charging ? 'charging' : 'not charging'; - }; - - battery.onlevelchange = function () { - document.querySelector('#level').textContent = battery.level; - }; - - battery.ondischargingtimechange = function () { - document.querySelector('#dischargingTime').textContent = battery.dischargingTime / 60; - }; - </script> - </head> - <body> - <div id="charging">(charging state unknown)</div> - <div id="level">(battery level unknown)</div> - <div id="dischargingTime">(discharging time unknown)</div> - </body> - </html> - </pre> - </div> - </section> - <section class="appendix"> - <h2>Acknowledgements</h2> - <p> - The group is deeply indebted to Mounir Lamouri, Jonas Sicking, and - the Mozilla WebAPI team in general for their invaluable feedback - based on prototype implementations. Many thanks to the people behind - the System Information API and Device Orientation Event specification - for the initial inspiration. Also thanks to the nice folks bringing us - the Page Visibility specification, which motivated the editor of this - specification to write the introduction chapter discussing some - real-world high value use cases that apply equally to this - specification. Special thanks to all the participants of the Device - APIs Working Group and others who have sent in substantial feedback - and comments, and made the Web a better place for everyone by - doing so. - </p> - </section> + Moved to <a href="http://w3c-test.org/dap/battery/">http://w3c-test.org/dap/battery/</a> </body> </html>
Received on Wednesday, 1 February 2012 19:27:48 UTC