diff --git a/README.md b/README.md
index ebadb64..42c86c0 100644
--- a/README.md
+++ b/README.md
@@ -7,8 +7,9 @@ It should be used for applications which keep running for a long time without an
For details on power functionality see:
-* WindowsPhone: [UserIdleDetectionMode](http://msdn.microsoft.com/en-US/library/windowsphone/develop/microsoft.phone.shell.phoneapplicationservice.useridledetectionmode%28v=vs.105%29.aspx)
+* Android: [PowerManager](http://developer.android.com/reference/android/os/PowerManager.html)
* iOS: [idleTimerDisabled](http://developer.apple.com/library/ios/documentation/UIKit/Reference/UIApplication_Class/Reference/Reference.html#//apple_ref/occ/instp/UIApplication/idleTimerDisabled)
+* WindowsPhone: [UserIdleDetectionMode](http://msdn.microsoft.com/en-US/library/windowsphone/develop/microsoft.phone.shell.phoneapplicationservice.useridledetectionmode%28v=vs.105%29.aspx)
Installation
---------
diff --git a/plugin.xml b/plugin.xml
index 2460e89..f247c45 100644
--- a/plugin.xml
+++ b/plugin.xml
@@ -44,4 +44,19 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/src/android/PowerManagement.java b/src/android/PowerManagement.java
new file mode 100644
index 0000000..0df84b9
--- /dev/null
+++ b/src/android/PowerManagement.java
@@ -0,0 +1,150 @@
+/*
+ Copyright 2011-2013 Wolfgang Koller - http://www.gofg.at/
+
+ Licensed 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.
+*/
+
+/**
+ * Cordova (Android) plugin for accessing the power-management functions of the device
+ * @author Wolfgang Koller
+ */
+package at.gofg.sportscomputer;
+
+import org.json.JSONArray;
+import org.json.JSONException;
+
+import android.content.Context;
+import android.os.PowerManager;
+import android.util.Log;
+
+import org.apache.cordova.CordovaWebView;
+import org.apache.cordova.CallbackContext;
+import org.apache.cordova.CordovaInterface;
+import org.apache.cordova.CordovaPlugin;
+import org.apache.cordova.PluginResult;
+import org.apache.cordova.PluginResult.Status;
+
+/**
+ * Plugin class which does the actual handling
+ */
+public class PowerManagement extends CordovaPlugin {
+ // As we only allow one wake-lock, we keep a reference to it here
+ private PowerManager.WakeLock wakeLock = null;
+ private PowerManager powerManager = null;
+
+ /**
+ * Fetch a reference to the power-service when the plugin is initialized
+ */
+ @Override
+ public void initialize(CordovaInterface cordova, CordovaWebView webView) {
+ super.initialize(cordova, webView);
+
+ this.powerManager = (PowerManager) cordova.getActivity().getSystemService(Context.POWER_SERVICE);
+ }
+
+ @Override
+ public boolean execute(String action, JSONArray args,
+ CallbackContext callbackContext) throws JSONException {
+
+ PluginResult result = null;
+ Log.d("PowerManagementPlugin", "Plugin execute called - " + this.toString() );
+ Log.d("PowerManagementPlugin", "Action is " + action );
+
+ try {
+ if( action.equals("acquire") ) {
+ if( args.length() > 0 && args.getBoolean(0) ) {
+ Log.d("PowerManagementPlugin", "Only dim lock" );
+ result = this.acquire( PowerManager.SCREEN_DIM_WAKE_LOCK );
+ }
+ else {
+ result = this.acquire( PowerManager.FULL_WAKE_LOCK );
+ }
+ }
+ else if( action.equals("release") ) {
+ result = this.release();
+ }
+ }
+ catch( JSONException e ) {
+ result = new PluginResult(Status.JSON_EXCEPTION, e.getMessage());
+ }
+
+ callbackContext.sendPluginResult(result);
+ return true;
+ }
+
+ /**
+ * Acquire a wake-lock
+ * @param p_flags Type of wake-lock to acquire
+ * @return PluginResult containing the status of the acquire process
+ */
+ private PluginResult acquire( int p_flags ) {
+ PluginResult result = null;
+
+ if (this.wakeLock == null) {
+ this.wakeLock = this.powerManager.newWakeLock(p_flags, "PowerManagementPlugin");
+ try {
+ this.wakeLock.acquire();
+ result = new PluginResult(PluginResult.Status.OK);
+ }
+ catch( Exception e ) {
+ this.wakeLock = null;
+ result = new PluginResult(PluginResult.Status.ERROR,"Can't acquire wake-lock - check your permissions!");
+ }
+ }
+ else {
+ result = new PluginResult(PluginResult.Status.ILLEGAL_ACCESS_EXCEPTION,"WakeLock already active - release first");
+ }
+
+ return result;
+ }
+
+ /**
+ * Release an active wake-lock
+ * @return PluginResult containing the status of the release process
+ */
+ private PluginResult release() {
+ PluginResult result = null;
+
+ if( this.wakeLock != null ) {
+ this.wakeLock.release();
+ this.wakeLock = null;
+
+ result = new PluginResult(PluginResult.Status.OK, "OK");
+ }
+ else {
+ result = new PluginResult(PluginResult.Status.ILLEGAL_ACCESS_EXCEPTION, "No WakeLock active - acquire first");
+ }
+
+ return result;
+ }
+
+ /**
+ * Make sure any wakelock is released if the app goes into pause
+ */
+ @Override
+ public void onPause(boolean multitasking) {
+ if( this.wakeLock != null ) this.wakeLock.release();
+
+ super.onPause(multitasking);
+ }
+
+ /**
+ * Make sure any wakelock is acquired again once we resume
+ */
+ @Override
+ public void onResume(boolean multitasking) {
+ if( this.wakeLock != null ) this.wakeLock.acquire();
+
+ super.onResume(multitasking);
+ }
+}