Compare commits

...

24 Commits
dev ... master

Author SHA1 Message Date
Skylar Ittner 9bfaf229e2 Pull bugfix from https://github.com/Sitronik/cordova-plugin-powermanagement2 11 months ago
Skylar Ittner 16d2a37237 Bump version 11 months ago
Skylar Ittner 6118ea1c13 Update plugin.xml 11 months ago
Skylar Ittner 2c6d9227c5 Update version 11 months ago
Skylar Ittner ca5b6f01ef Update package.json 11 months ago
Denis f989948aac .. 3 years ago
Denis ffd2783187
fix No visible @interface 3 years ago
Denis dc8a177e15
update readme 3 years ago
Denis 71695ca851 fix 3 years ago
Skylar Ittner 1cca6de3d8 Update plugin ID 5 years ago
Skylar Ittner 7b669bd0d4 Update plugin ID 5 years ago
boltex dd5b6d7dcc Added support for android 6+ (sdk 23 +) by setting visibility every 10 seconds to support GPS while in background and preventing idle mode. 6 years ago
Felix 94cade84fa Create package.json 7 years ago
Felix 32abd15d9a Update README.md 9 years ago
Felix 5972eacb6d changed SCREEN_DIM_WAKE_LOCK to PARTIAL_WAKE_LOCK 9 years ago
Viras- 021369bc18 Merge pull request #7 from Menardi/master
Fixed #6, added ability to disable release on pause
9 years ago
Gearóid Moroney 5b32ddf7cd Added ability to disable release on pause (Android), and added usage to readme
I've added a function for Android to allow the disabling of wakelock release
on pause. This is for my use case where the screen will be off most of the
time the wakelock is enabled. I added usage for it to the readme, along with
the existing functions.
9 years ago
Gearóid Moroney 317a3ccbf3 Fixed #6 Underlocking causing crashes on Android
I fixed this as per the solution in the issue, by surrounding the release
with a try / catch block
9 years ago
Viras- 2b6c92b0c4 Merge pull request #5 from kubkov/patch-1
Update plugin.xml
10 years ago
kubkov ffc4de1b88 Update plugin.xml 10 years ago
Viras- 5e17fa1dc3 Finish Release-1 10 years ago
Viras- 8b0c68770f updating plugin configuration for Android 10 years ago
Viras- 84e0cfe9b3 Release v1.0.0 11 years ago
Viras- 19af5c6361 Release v1.0.0 11 years ago

1
.gitignore vendored

@ -0,0 +1 @@
.idea

@ -2,6 +2,9 @@ PowerManagement
===============
Plugin for Cordova (3.0+)
changed SCREEN_DIM_WAKE_LOCK to PARTIAL_WAKE_LOCK
=================================================
The PowerManagement plugin offers access to the devices power-management functionality.
It should be used for applications which keep running for a long time without any user interaction.
@ -15,7 +18,53 @@ Installation
---------
Install the plugin using the cordova command line utility:
`$ cordova plugin add https://github.com/Viras-/cordova-plugin-powermanagement.git`
`$ cordova plugin add https://github.com/boltex/cordova-plugin-powermanagement.git`
OR
---
`npm i cordova-plugin-powermanagement2`
Usage
-----
### window.powerManagement.acquire(successCallback, failureCallback)
Acquire a wakelock by calling this.
window.powerManagement.acquire(function() {
console.log('Wakelock acquired');
}, function() {
console.log('Failed to acquire wakelock');
});
### window.powerManagement.dim(successCallback, failureCallback)
This acquires a partial wakelock, allowing the screen to be dimmed.
window.powerManagement.dim(function() {
console.log('Wakelock acquired');
}, function() {
console.log('Failed to acquire wakelock');
});
### window.powerManagement.release(successCallback, failureCallback)
Release the wakelock. It's important to do this when you're finished with the wakelock, to avoid unnecessary battery drain.
window.powerManagement.release(function() {
console.log('Wakelock released');
}, function() {
console.log('Failed to release wakelock');
});
### [Android Only] window.powerManagement.setReleaseOnPause(enabled, successCallback, failureCallback)
By default, the plugin will automatically release a wakelock when your app is paused (e.g. when the screen is turned off, or the user switches to another app). It will reacquire the wakelock upon app resume. If you would prefer to disable this behaviour, you can use this function.
window.powerManagement.setReleaseOnPause(false, function() {
console.log('Set successfully');
}, function() {
console.log('Failed to set');
});
Note that in all the above examples, all callbacks are optional.
License
=======

@ -0,0 +1,24 @@
{
"name": "@netsyms/cordova-plugin-powermanagement",
"version": "1.1.3",
"description": "Plugin for managing the power state (i.e. idle switching) for cordova",
"scripts": {
"test": "echo \"Error: no test specified\" && exit 1"
},
"repository": {
"type": "git",
"url": "git+https://source.netsyms.com/Netsyms/cordova-plugin-powermanagement.git"
},
"contributors": ["Netsyms Technologies", "Viras-", "Sitronik"],
"license": "Apache-2.0",
"bugs": {
"url": "https://source.netsyms.com/Netsyms/cordova-plugin-powermanagement/issues"
},
"homepage": "https://source.netsyms.com/Netsyms/cordova-plugin-powermanagement#readme",
"keywords": [
"ecosystem:cordova",
"cordova-android",
"cordova-ios"
],
"main": "index.js"
}

@ -1,7 +1,7 @@
<?xml version="1.0" encoding="UTF-8"?>
<plugin xmlns="http://cordova.apache.org/ns/plugins/1.0"
id="at.gofg.sportscomputer.powermanagement"
version="1.0.0">
id="@netsyms/cordova-plugin-powermanagement"
version="1.1.3">
<name>PowerManagement</name>
<description>PowerManagement plugin for Cordova</description>
<license>Apache 2.0</license>
@ -34,22 +34,22 @@
</platform>
<!-- ios -->
<platform name="ios">
<platform name="ios">
<config-file target="config.xml" parent="/widget">
<feature name="PowerManagement">
<param name="ios-package" value="PowerManagement" />
<param name="ios-package" value="PowerManagement" />
</feature>
</config-file>
<header-file src="src/ios/PowerManagement.h" />
<source-file src="src/ios/PowerManagement.m" />
<source-file src="src/ios/PowerManagement.m" />
</platform>
<!-- android -->
<platform name="android">
<config-file target="res/xml/config.xml" parent="/*">
<feature name="PowerManagement" >
<param name="android-package" value="org.apache.cordova.plugin.PowerManagement"/>
<param name="android-package" value="org.apache.cordova.powermanagement.PowerManagement"/>
</feature>
</config-file>
@ -57,6 +57,6 @@
<uses-permission android:name="android.permission.WAKE_LOCK" />
</config-file>
<source-file src="src/android/PowerManagement.java" target-dir="src/at/gofg/sportscomputer/" />
<source-file src="src/android/PowerManagement.java" target-dir="src/org/apache/cordova/powermanagement" />
</platform>
</plugin>

@ -1,12 +1,12 @@
/*
* Copyright 2013 Wolfgang Koller
*
* Copyright 2013-2014 Wolfgang Koller
*
* 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.
@ -18,13 +18,20 @@
* Cordova (Android) plugin for accessing the power-management functions of the device
* @author Wolfgang Koller <viras@users.sourceforge.net>
*/
package at.gofg.sportscomputer;
package org.apache.cordova.powermanagement;
import org.json.JSONArray;
import org.json.JSONException;
import android.content.Context;
import android.os.PowerManager;
import android.os.Build;
import android.os.Handler;
import android.app.PendingIntent;
import android.content.Intent;
import java.lang.Runnable;
import android.view.View;
import android.util.Log;
import org.apache.cordova.CordovaWebView;
@ -41,47 +48,103 @@ 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;
private boolean releaseOnPause = true;
private Handler handler;
private PendingIntent wakeupIntent;
private CordovaWebView webView;
private final Runnable heartbeat = new Runnable() {
public void run() {
try {
//Log.d("PowerManagementPlugin", "About to declare ourselves VISIBLE");
webView.getView().dispatchWindowVisibilityChanged(View.VISIBLE);
// if sdk is 23 (android 6) or greater
if(android.os.Build.VERSION.SDK_INT > 22){
if (wakeLock != null && powerManager != null && powerManager.isDeviceIdleMode()) {
//Log.d("PowerManagementPlugin", "Poking location service");
try {
wakeupIntent.send();
} catch (SecurityException e) {
Log.d("PowerManagementPlugin", "SecurityException : Heartbeat location manager keep-alive failed");
} catch (PendingIntent.CanceledException e) {
Log.d("PowerManagementPlugin", "PendingIntent.CanceledException : Heartbeat location manager keep-alive failed");
}
}
}
} finally {
if (handler != null) {
handler.postDelayed(this, 10000);
}
}
}
};
/**
* Fetch a reference to the power-service when the plugin is initialized
*/
@Override
public void initialize(CordovaInterface cordova, CordovaWebView webView) {
super.initialize(cordova, webView);
public void initialize(CordovaInterface cordova, CordovaWebView webViewPara) {
Context context = cordova.getActivity().getApplicationContext();
this.webView = webViewPara;
super.initialize(cordova, webViewPara);
this.powerManager = (PowerManager) cordova.getActivity().getSystemService(Context.POWER_SERVICE);
handler = new Handler();
wakeupIntent = PendingIntent.getBroadcast( context , 0,
new Intent("com.android.internal.location.ALARM_WAKEUP"), 0);
}
public PluginResult partialWakeLock() {
Log.d("PowerManagementPlugin", "Partial wake lock" );
PluginResult result = this.acquire( PowerManager.PARTIAL_WAKE_LOCK );
handler.postDelayed(heartbeat, 10000);
return result;
}
@Override
public boolean execute(String action, JSONArray args,
CallbackContext callbackContext) throws JSONException {
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") ) {
if( args.length() > 0 && args.getBoolean(0) ) {
result = partialWakeLock();
} else {
result = partialWakeLock();
}
} else if( action.equals("release") ) {
result = this.release();
} else if( action.equals("setReleaseOnPause") ) {
try {
this.releaseOnPause = args.getBoolean(0);
result = new PluginResult(PluginResult.Status.OK);
} catch (Exception e) {
result = new PluginResult(PluginResult.Status.ERROR, "Could not set releaseOnPause");
}
}
}
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
@ -89,7 +152,7 @@ public class PowerManagement extends CordovaPlugin {
*/
private PluginResult acquire( int p_flags ) {
PluginResult result = null;
if (this.wakeLock == null) {
this.wakeLock = this.powerManager.newWakeLock(p_flags, "PowerManagementPlugin");
try {
@ -104,46 +167,55 @@ public class PowerManagement extends CordovaPlugin {
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();
try {
this.wakeLock.release();
result = new PluginResult(PluginResult.Status.OK, "OK");
}
catch (Exception e) {
result = new PluginResult(PluginResult.Status.ILLEGAL_ACCESS_EXCEPTION, "WakeLock already released");
}
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();
if( this.releaseOnPause && 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();
if( this.releaseOnPause && this.wakeLock != null ) {
this.wakeLock.acquire();
}
super.onResume(multitasking);
}

@ -1,12 +1,12 @@
/*
* Copyright 2013 Wolfgang Koller
*
*
* 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.
@ -25,48 +25,29 @@
@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];
CDVPluginResult *pluginResult = nil;
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];
pluginResult = [CDVPluginResult resultWithStatus:CDVCommandStatus_OK];
[self.commandDelegate sendPluginResult:pluginResult callbackId:command.callbackId];
}
- (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];
CDVPluginResult *pluginResult = nil;
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];
pluginResult = [CDVPluginResult resultWithStatus:CDVCommandStatus_OK];
[self.commandDelegate sendPluginResult:pluginResult callbackId:command.callbackId];
}
@end

@ -1,12 +1,12 @@
/*
* Copyright 2013 Wolfgang Koller
*
*
* 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.
@ -17,7 +17,7 @@ var PowerManagement = function() {};
/**
* Acquire a new wake-lock (keep device awake)
*
*
* @param successCallback function to be called when the wake-lock was acquired successfully
* @param errorCallback function to be called when there was a problem with acquiring the wake-lock
*/
@ -29,7 +29,7 @@ PowerManagement.prototype.acquire = function(successCallback,failureCallback, ru
/**
* Release the wake-lock
*
*
* @param successCallback function to be called when the wake-lock was released successfully
* @param errorCallback function to be called when there was a problem while releasing the wake-lock
*/
@ -37,6 +37,17 @@ PowerManagement.prototype.release = function(successCallback,failureCallback) {
cordova.exec(successCallback, failureCallback, 'PowerManagement', 'release', []);
}
/**
* Enable or disable releasing of the wakelock on pause
*
* @param enabled boolean - true to enable releasing of wakelock on pause, or false to disable
* @param successCallback
* @param errorCallback
*/
PowerManagement.prototype.setReleaseOnPause = function(enabled, successCallback, failureCallback) {
cordova.exec(successCallback, failureCallback, 'PowerManagement', 'setReleaseOnPause', [enabled]);
}
/**
* Acquire a partial wake-lock, allowing the device to dim the screen
*

Loading…
Cancel
Save