Updated Branches: refs/heads/master [created] 341aade35
Initial Commit Project: http://git-wip-us.apache.org/repos/asf/cordova-plugin-battery-status/repo Commit: http://git-wip-us.apache.org/repos/asf/cordova-plugin-battery-status/commit/341aade3 Tree: http://git-wip-us.apache.org/repos/asf/cordova-plugin-battery-status/tree/341aade3 Diff: http://git-wip-us.apache.org/repos/asf/cordova-plugin-battery-status/diff/341aade3 Branch: refs/heads/master Commit: 341aade358946284f3801a97f0f09475d2e7bf23 Parents: Author: Joe Bowser <[email protected]> Authored: Mon Apr 1 15:31:19 2013 -0700 Committer: Joe Bowser <[email protected]> Committed: Mon Apr 1 15:31:19 2013 -0700 ---------------------------------------------------------------------- README.md | 2 + plugin.xml | 17 ++++ src/android/BatteryListener.java | 163 +++++++++++++++++++++++++++++++++ 3 files changed, 182 insertions(+), 0 deletions(-) ---------------------------------------------------------------------- http://git-wip-us.apache.org/repos/asf/cordova-plugin-battery-status/blob/341aade3/README.md ---------------------------------------------------------------------- diff --git a/README.md b/README.md new file mode 100644 index 0000000..85af15a --- /dev/null +++ b/README.md @@ -0,0 +1,2 @@ +cordova-plugin-battery-status +============================ http://git-wip-us.apache.org/repos/asf/cordova-plugin-battery-status/blob/341aade3/plugin.xml ---------------------------------------------------------------------- diff --git a/plugin.xml b/plugin.xml new file mode 100644 index 0000000..e5a0d0b --- /dev/null +++ b/plugin.xml @@ -0,0 +1,17 @@ +<?xml version="1.0" encoding="UTF-8"?> + +<plugin xmlns="http://www.phonegap.com/ns/plugins/1.0" +xmlns:android="http://schemas.android.com/apk/res/android" +id="org.apache.cordova.core"> + version="0.1.0"> + <name>Battery</name> + + <!-- android --> + <platform name="android"> + <config-file target="res/xml/config.xml" parent="/cordova/plugins"> + <plugin name="Battery" value="org.apache.cordova.core.BatteryListener"/> + </config-file> + + <source-file src="BatteryListener.java" target-dir="org/apache/cordova/core" /> + </platform> +</plugin> http://git-wip-us.apache.org/repos/asf/cordova-plugin-battery-status/blob/341aade3/src/android/BatteryListener.java ---------------------------------------------------------------------- diff --git a/src/android/BatteryListener.java b/src/android/BatteryListener.java new file mode 100755 index 0000000..67dfdd1 --- /dev/null +++ b/src/android/BatteryListener.java @@ -0,0 +1,163 @@ +/* + Licensed to the Apache Software Foundation (ASF) under one + or more contributor license agreements. See the NOTICE file + distributed with this work for additional information + regarding copyright ownership. The ASF licenses this file + to you under the Apache License, Version 2.0 (the + "License"); you may not use this file except in compliance + with the License. You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, + software distributed under the License is distributed on an + "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY + KIND, either express or implied. See the License for the + specific language governing permissions and limitations + under the License. +*/ +package org.apache.cordova.core; + +import org.apache.cordova.api.CallbackContext; +import org.apache.cordova.api.CordovaPlugin; +import org.apache.cordova.api.PluginResult; +import org.json.JSONArray; +import org.json.JSONException; +import org.json.JSONObject; + +import android.content.BroadcastReceiver; +import android.content.Context; +import android.content.Intent; +import android.content.IntentFilter; +import android.util.Log; + +public class BatteryListener extends CordovaPlugin { + + private static final String LOG_TAG = "BatteryManager"; + + BroadcastReceiver receiver; + + private CallbackContext batteryCallbackContext = null; + + /** + * Constructor. + */ + public BatteryListener() { + this.receiver = null; + } + + /** + * Executes the request. + * + * @param action The action to execute. + * @param args JSONArry of arguments for the plugin. + * @param callbackContext The callback context used when calling back into JavaScript. + * @return True if the action was valid, false if not. + */ + public boolean execute(String action, JSONArray args, CallbackContext callbackContext) { + if (action.equals("start")) { + if (this.batteryCallbackContext != null) { + callbackContext.error( "Battery listener already running."); + return true; + } + this.batteryCallbackContext = callbackContext; + + // We need to listen to power events to update battery status + IntentFilter intentFilter = new IntentFilter(); + intentFilter.addAction(Intent.ACTION_BATTERY_CHANGED); + if (this.receiver == null) { + this.receiver = new BroadcastReceiver() { + @Override + public void onReceive(Context context, Intent intent) { + updateBatteryInfo(intent); + } + }; + cordova.getActivity().registerReceiver(this.receiver, intentFilter); + } + + // Don't return any result now, since status results will be sent when events come in from broadcast receiver + PluginResult pluginResult = new PluginResult(PluginResult.Status.NO_RESULT); + pluginResult.setKeepCallback(true); + callbackContext.sendPluginResult(pluginResult); + return true; + } + + else if (action.equals("stop")) { + removeBatteryListener(); + this.sendUpdate(new JSONObject(), false); // release status callback in JS side + this.batteryCallbackContext = null; + callbackContext.success(); + return true; + } + + return false; + } + + /** + * Stop battery receiver. + */ + public void onDestroy() { + removeBatteryListener(); + } + + /** + * Stop battery receiver. + */ + public void onReset() { + removeBatteryListener(); + } + + /** + * Stop the battery receiver and set it to null. + */ + private void removeBatteryListener() { + if (this.receiver != null) { + try { + this.cordova.getActivity().unregisterReceiver(this.receiver); + this.receiver = null; + } catch (Exception e) { + Log.e(LOG_TAG, "Error unregistering battery receiver: " + e.getMessage(), e); + } + } + } + + /** + * Creates a JSONObject with the current battery information + * + * @param batteryIntent the current battery information + * @return a JSONObject containing the battery status information + */ + private JSONObject getBatteryInfo(Intent batteryIntent) { + JSONObject obj = new JSONObject(); + try { + obj.put("level", batteryIntent.getIntExtra(android.os.BatteryManager.EXTRA_LEVEL, 0)); + obj.put("isPlugged", batteryIntent.getIntExtra(android.os.BatteryManager.EXTRA_PLUGGED, -1) > 0 ? true : false); + } catch (JSONException e) { + Log.e(LOG_TAG, e.getMessage(), e); + } + return obj; + } + + /** + * Updates the JavaScript side whenever the battery changes + * + * @param batteryIntent the current battery information + * @return + */ + private void updateBatteryInfo(Intent batteryIntent) { + sendUpdate(this.getBatteryInfo(batteryIntent), true); + } + + /** + * Create a new plugin result and send it back to JavaScript + * + * @param connection the network info to set as navigator.connection + */ + private void sendUpdate(JSONObject info, boolean keepCallback) { + if (this.batteryCallbackContext != null) { + PluginResult result = new PluginResult(PluginResult.Status.OK, info); + result.setKeepCallback(keepCallback); + this.batteryCallbackContext.sendPluginResult(result); + } + } +}
