diff --git a/README.md b/README.md
index 24c39d2..42c86c0 100644
--- a/README.md
+++ b/README.md
@@ -7,6 +7,8 @@ It should be used for applications which keep running for a long time without an
For details on power functionality see:
+* 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 6231c2c..f247c45 100644
--- a/plugin.xml
+++ b/plugin.xml
@@ -1,7 +1,7 @@
+ version="1.1.0">
PowerManagement
PowerManagement plugin for Cordova
GPL
@@ -32,4 +32,31 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
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);
+ }
+}
diff --git a/src/ios/PowerManagement.h b/src/ios/PowerManagement.h
new file mode 100644
index 0000000..c8b1a18
--- /dev/null
+++ b/src/ios/PowerManagement.h
@@ -0,0 +1,45 @@
+/*
+ * Copyright (C) 2011-2012 Wolfgang Koller
+ *
+ * This file is part of GOFG Sports Computer - http://www.gofg.at/.
+ *
+ * GOFG Sports Computer is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * GOFG Sports Computer is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with GOFG Sports Computer. If not, see .
+ */
+
+/**
+ * Cordova (iOS) plugin for accessing the power-management functions of the device
+ */
+
+#ifdef CORDOVA_FRAMEWORK
+#import
+#else
+#import "CORDOVA/CDVPlugin.h"
+#endif
+
+/**
+ * Interface which does the actual handling
+ */
+@interface PowerManagement :CDVPlugin {
+}
+/**
+ * Sets the idleTimerDisable property to true so that the idle timeout is disabled
+ */
+- (void) acquire:(CDVInvokedUrlCommand*)command;
+
+/**
+ * Sets the idleTimerDisable property to false so that the idle timeout is enabled
+ */
+- (void) release:(CDVInvokedUrlCommand*)command;
+
+@end
diff --git a/src/ios/PowerManagement.m b/src/ios/PowerManagement.m
new file mode 100644
index 0000000..6ef10f9
--- /dev/null
+++ b/src/ios/PowerManagement.m
@@ -0,0 +1,75 @@
+/*
+ * Copyright (C) 2011-2012 Wolfgang Koller
+ *
+ * This file is part of GOFG Sports Computer - http://www.gofg.at/.
+ *
+ * GOFG Sports Computer is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * GOFG Sports Computer is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with GOFG Sports Computer. If not, see .
+ */
+
+/**
+ * Cordova (iOS) plugin for accessing the power-management functions of the device
+ */
+#import "PowerManagement.h"
+
+/**
+ * Actual implementation of the interface
+ */
+@implementation PowerManagement
+- (void) acquire:(CDVInvokedUrlCommand*)command
+{
+ CDVPluginResult* result = nil;
+ NSString* jsString = nil;
+ NSString* callbackId = command.callbackId;
+
+ // Acquire a reference to the local UIApplication singleton
+ UIApplication* app = [UIApplication sharedApplication];
+
+ if( ![app isIdleTimerDisabled] ) {
+ [app setIdleTimerDisabled:true];
+
+ result = [CDVPluginResult resultWithStatus:CDVCommandStatus_OK];
+ jsString = [result toSuccessCallbackString:callbackId];
+ }
+ else {
+ result = [CDVPluginResult resultWithStatus:CDVCommandStatus_ILLEGAL_ACCESS_EXCEPTION messageAsString:@"IdleTimer already disabled"];
+ jsString = [result toErrorCallbackString:callbackId];
+ }
+
+ [self writeJavascript:jsString];
+}
+
+
+- (void) release:(CDVInvokedUrlCommand*)command
+{
+ CDVPluginResult* result = nil;
+ NSString* jsString = nil;
+ NSString* callbackId = command.callbackId;
+
+ // Acquire a reference to the local UIApplication singleton
+ UIApplication* app = [UIApplication sharedApplication];
+
+ if( [app isIdleTimerDisabled] ) {
+ [app setIdleTimerDisabled:false];
+
+ result = [CDVPluginResult resultWithStatus:CDVCommandStatus_OK];
+ jsString = [result toSuccessCallbackString:callbackId];
+ }
+ else {
+ result = [CDVPluginResult resultWithStatus:CDVCommandStatus_ILLEGAL_ACCESS_EXCEPTION messageAsString:@"IdleTimer not disabled"];
+ jsString = [result toErrorCallbackString:callbackId];
+ }
+
+ [self writeJavascript:jsString];
+}
+@end