Updated Branches: refs/heads/master 773001d33 -> 1c9438f52
[CB-3454] Refactored battery plugin to use webkitBattery + fire event on add Revewied by Bryan Higgins <[email protected]> Tested by Tracy Li <[email protected]> Project: http://git-wip-us.apache.org/repos/asf/cordova-blackberry/repo Commit: http://git-wip-us.apache.org/repos/asf/cordova-blackberry/commit/1c9438f5 Tree: http://git-wip-us.apache.org/repos/asf/cordova-blackberry/tree/1c9438f5 Diff: http://git-wip-us.apache.org/repos/asf/cordova-blackberry/diff/1c9438f5 Branch: refs/heads/master Commit: 1c9438f5281ddf80e604e929c32f391f3eddd031 Parents: 773001d Author: jkeshavarzi <[email protected]> Authored: Wed Jun 12 13:19:33 2013 -0400 Committer: Bryan Higgins <[email protected]> Committed: Thu Jun 13 09:43:22 2013 -0400 ---------------------------------------------------------------------- blackberry10/bin/test/plugins/Battery/index.js | 36 +++++------------ .../plugins/Battery/src/blackberry10/index.js | 42 +++++++++++++------- 2 files changed, 39 insertions(+), 39 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/cordova-blackberry/blob/1c9438f5/blackberry10/bin/test/plugins/Battery/index.js ---------------------------------------------------------------------- diff --git a/blackberry10/bin/test/plugins/Battery/index.js b/blackberry10/bin/test/plugins/Battery/index.js index ff82a21..a717d94 100644 --- a/blackberry10/bin/test/plugins/Battery/index.js +++ b/blackberry10/bin/test/plugins/Battery/index.js @@ -35,16 +35,10 @@ describe("Battery", function () { beforeEach(function () { - GLOBAL.window = { - qnx: { - webplatform: { - device: { - addEventListener: jasmine.createSpy("webplatform.device.addEventListener").andCallFake(function (evt, cb) { - callback = cb; - }), - removeEventListener: jasmine.createSpy("webplatform.device.removeEventListener") - } - } + GLOBAL.navigator = { + webkitBattery: { + onlevelchange: jasmine.createSpy("navigator.webkitBattery.onlevelchange"), + onchargingchange: jasmine.createSpy("navigator.webkitBattery.onchargingchange") } }; GLOBAL.PluginResult = function () { @@ -54,7 +48,7 @@ describe("Battery", function () { }); afterEach(function () { - delete GLOBAL.window; + delete GLOBAL.navigator; delete GLOBAL.PluginResult; delete require.cache[require.resolve(_apiDir + "index")]; }); @@ -63,39 +57,31 @@ describe("Battery", function () { it("calls noResult and keeps callbacks", function () { index.start(noop, noop, args, env); - expect(window.qnx.webplatform.device.removeEventListener).not.toHaveBeenCalled(); - expect(window.qnx.webplatform.device.addEventListener).toHaveBeenCalled(); + expect(navigator.webkitBattery.onlevelchange).not.toEqual(null); + expect(navigator.webkitBattery.onchargingchange).not.toEqual(null); expect(mockPluginResult.noResult).toHaveBeenCalledWith(true); expect(mockPluginResult.error).not.toHaveBeenCalled(); }); - it("callback calls ok and keeps callbacks", function () { - callback("OK"); - expect(mockPluginResult.callbackOk).toHaveBeenCalledWith("OK", true); - expect(mockPluginResult.error).not.toHaveBeenCalled(); - }); - it("does not call error if already started", function () { index.start(noop, noop, args, env); - window.qnx.webplatform.device.addEventListener.reset(); mockPluginResult.noResult.reset(); index.start(noop, noop, args, env); - expect(window.qnx.webplatform.device.removeEventListener).toHaveBeenCalled(); - expect(window.qnx.webplatform.device.addEventListener).toHaveBeenCalled(); + expect(navigator.webkitBattery.onlevelchange).not.toEqual(null); + expect(navigator.webkitBattery.onchargingchange).not.toEqual(null); expect(mockPluginResult.error).not.toHaveBeenCalled(); expect(mockPluginResult.noResult).toHaveBeenCalledWith(true); }); - }); describe("stop", function () { it("calls noResult and does not keep callbacks", function () { index.start(noop, noop, args, env); - window.qnx.webplatform.device.removeEventListener.reset(); index.stop(noop, noop, args, env); - expect(window.qnx.webplatform.device.removeEventListener).toHaveBeenCalled(); + expect(navigator.webkitBattery.onlevelchange).toEqual(null); + expect(navigator.webkitBattery.onchargingchange).toEqual(null); expect(mockPluginResult.noResult).toHaveBeenCalledWith(false); }); http://git-wip-us.apache.org/repos/asf/cordova-blackberry/blob/1c9438f5/blackberry10/plugins/Battery/src/blackberry10/index.js ---------------------------------------------------------------------- diff --git a/blackberry10/plugins/Battery/src/blackberry10/index.js b/blackberry10/plugins/Battery/src/blackberry10/index.js index 07a943c..4d3816f 100644 --- a/blackberry10/plugins/Battery/src/blackberry10/index.js +++ b/blackberry10/plugins/Battery/src/blackberry10/index.js @@ -14,31 +14,46 @@ * limitations under the License. */ -var SYSTEM_EVENTS = ["device.battery.statusChange", - "device.battery.chargeLow", - "device.battery.chargeCritical"], - device = window.qnx.webplatform.device, - _clientListeners = {}; + var _clientListeners = {}, + _webkitBattery = navigator.webkitBattery || navigator.battery; module.exports = { start: function (success, fail, args, env) { var result = new PluginResult(args, env), listener = function (info) { - result.callbackOk(info, true); + var resultInfo = {}; + if (info) { + if (info.srcElement) { + //webkitBattery listeners store webkitBattery in srcElement object + info = info.srcElement; + } + + //put data from webkitBattery into a format cordova expects + //webkitBattery seems to return level as a decimal pre 10.2 + resultInfo.level = info.level <= 1 ? info.level * 100 : info.level, + resultInfo.isPlugged = info.charging + } + + result.callbackOk(resultInfo, true); }; if (_clientListeners[env.webview.id]) { //TODO: Change back to erroring out after reset is implemented //result.error("Battery listener already running"); - SYSTEM_EVENTS.forEach(function (event) { - device.removeEventListener(event, _clientListeners[env.webview.id]); - }); + _webkitBattery.onchargingchange = null; + _webkitBattery.onlevelchange = null; } _clientListeners[env.webview.id] = listener; - SYSTEM_EVENTS.forEach(function (event) { - device.addEventListener(event, listener); + + _webkitBattery.onchargingchange = listener; + _webkitBattery.onlevelchange = listener; + + setTimeout(function(){ + //Call callback with webkitBattery data right away + listener(_webkitBattery); }); + result.noResult(true); }, stop: function (success, fail, args, env) { @@ -48,9 +63,8 @@ module.exports = { if (!listener) { result.error("Battery listener has not started"); } else { - SYSTEM_EVENTS.forEach(function (event) { - device.removeEventListener(event, listener); - }); + _webkitBattery.onchargingchange = null; + _webkitBattery.onlevelchange = null; delete _clientListeners[env.webview.id]; result.noResult(false); }
