Initial commit
This commit is contained in:
@@ -0,0 +1,146 @@
|
||||
# Insomnia-PhoneGap-Plugin
|
||||
|
||||
by [Eddy Verbruggen](http://www.x-services.nl)
|
||||
|
||||
1. [Description](https://github.com/EddyVerbruggen/Insomnia-PhoneGap-Plugin#1-description)
|
||||
2. [Installation](https://github.com/EddyVerbruggen/Insomnia-PhoneGap-Plugin#2-installation)
|
||||
2. [Automatically (CLI / Plugman)](https://github.com/EddyVerbruggen/Insomnia-PhoneGap-Plugin#automatically-cli--plugman)
|
||||
2. [Manually](https://github.com/EddyVerbruggen/Insomnia-PhoneGap-Plugin#manually)
|
||||
2. [PhoneGap Build](https://github.com/EddyVerbruggen/Insomnia-PhoneGap-Plugin#phonegap-build)
|
||||
3. [Usage](https://github.com/EddyVerbruggen/Insomnia-PhoneGap-Plugin#3-usage)
|
||||
4. [Credits](https://github.com/EddyVerbruggen/Insomnia-PhoneGap-Plugin#4-credits)
|
||||
5. [License](https://github.com/EddyVerbruggen/Insomnia-PhoneGap-Plugin#5-license)
|
||||
|
||||
This is for PhoneGap 3.x, [here is the 2.x version](https://github.com/EddyVerbruggen/Insomnia-PhoneGap-Plugin/tree/phonegap-2.x)
|
||||
|
||||
## 1. Description
|
||||
|
||||
Prevent the screen of the mobile device from falling asleep.
|
||||
|
||||
* The device will never fall asleep after calling `keepAwake`.
|
||||
* After making your app practically a zombie, you can allow it to sleep again by calling `allowSleepAgain`.
|
||||
* Works on Android, probably every version you'd care about.
|
||||
* Works on iOS, probably every version you'd care about.
|
||||
* Works on Windows and WP8.
|
||||
|
||||
## 2. Installation
|
||||
|
||||
### Automatically (CLI / Plugman)
|
||||
Insomnia is compatible with [Cordova Plugman](https://github.com/apache/cordova-plugman) and ready for the [PhoneGap 2.9.0 CLI](http://docs.phonegap.com/en/2.9.0/guide_cli_index.md.html#The%20Command-line%20Interface_add_features), here's how it works with the CLI:
|
||||
|
||||
```
|
||||
$ phonegap local plugin add https://github.com/EddyVerbruggen/Insomnia-PhoneGap-Plugin.git
|
||||
```
|
||||
or
|
||||
```
|
||||
$ cordova plugin add https://github.com/EddyVerbruggen/Insomnia-PhoneGap-Plugin.git
|
||||
```
|
||||
run this command afterwards:
|
||||
```
|
||||
$ cordova prepare
|
||||
```
|
||||
|
||||
The javascript bridge is brought in automatically, so no need to reference Insomnia.js from your html.
|
||||
|
||||
You can also get this plugin [from NPM](https://www.npmjs.com/package/cordova-plugin-insomnia).
|
||||
|
||||
### Manually
|
||||
|
||||
1\. Add the following xml to your `config.xml` in the root directory of your `www` folder:
|
||||
```xml
|
||||
<!-- for iOS -->
|
||||
<feature name="Insomnia">
|
||||
<param name="ios-package" value="Insomnia" />
|
||||
</feature>
|
||||
```
|
||||
|
||||
```xml
|
||||
<!-- for Android -->
|
||||
<feature name="Insomnia">
|
||||
<param name="android-package" value="nl.xservices.plugins.Insomnia" />
|
||||
</feature>
|
||||
```
|
||||
|
||||
```xml
|
||||
<!-- for wp8 -->
|
||||
<feature name="Insomnia">
|
||||
<param name="wp-package" value="Insomnia" />
|
||||
</feature>
|
||||
```
|
||||
|
||||
2\. Grab a copy of Insomnia.js, add it to your project and reference it in `index.html`:
|
||||
```html
|
||||
<script type="text/javascript" src="js/Insomnia.js"></script>
|
||||
```
|
||||
|
||||
3\. Download the source files for iOS and/or Android and copy them to your project.
|
||||
|
||||
iOS: Copy `Insomnia.h` and `Insomnia.h` to `platforms/ios/<ProjectName>/Plugins`
|
||||
|
||||
Android: Copy `Insomnia.java` to `platforms/android/src/nl/xservices/plugins` (create the folders)
|
||||
|
||||
wp8: Copy `Insomnia.cs` to `platforms/wp8/Plugins/nl.x-services.plugins.insomnia` (create the folders)
|
||||
|
||||
### PhoneGap Build
|
||||
|
||||
Insomnia works with PhoneGap build too, look for Insomnia here: https://build.phonegap.com/plugins/
|
||||
Just add the following xml to your `config.xml` to always use the latest version of this plugin:
|
||||
```xml
|
||||
<plugin name="cordova-plugin-insomnia" />
|
||||
```
|
||||
or to use this exact version:
|
||||
```xml
|
||||
<plugin name="cordova-plugin-insomnia" version="4.1.0" source="npm" />
|
||||
```
|
||||
|
||||
The plugin's javascript file is brought in automatically. Make sure though you include a reference to cordova.js in your index.html's head:
|
||||
```html
|
||||
<script type="text/javascript" src="cordova.js"></script>
|
||||
```
|
||||
|
||||
## 3. Usage
|
||||
```html
|
||||
<button onclick="window.plugins.insomnia.keepAwake()">keep awake</button>
|
||||
<button onclick="window.plugins.insomnia.allowSleepAgain()">allow sleep again</button>
|
||||
```
|
||||
An optional successCallback (first argument) will be triggered if the functions succeed. Even calling `keepAwake` twice will fire the successCallback, because the app will respond as expected (being kept awake).
|
||||
|
||||
An optional errorCallback (second argument) will only be triggered if something fatal happened, preventing the plugin to work as expected.
|
||||
|
||||
### Quirks
|
||||
[In this issue](#29) it was reported that on iOS the app would fall asleep after the Camera has been used,
|
||||
even if you previously called `keepAwake`. A similar [issue on Android](#30) where the photo library was accessed during app usage.
|
||||
|
||||
So to make sure your app honors `keepAwake` you have to re-run that method after these kinds of 'external UI' thingies give control back to your app.
|
||||
|
||||
## 4. CREDITS ##
|
||||
|
||||
This plugin was enhanced for Plugman / PhoneGap Build by [Eddy Verbruggen](http://www.x-services.nl).
|
||||
|
||||
The Android code was entirely created by the author.
|
||||
|
||||
The iOS code was heavily inspired by [Wolfgang Koller](https://github.com/simplec-dev/powermanagement).
|
||||
|
||||
Many thanks to [Jesse MacFadyen](https://github.com/purplecabbage) for implementing the wp8 and windows versions!
|
||||
|
||||
## 5. License
|
||||
|
||||
[The MIT License (MIT)](http://www.opensource.org/licenses/mit-license.html)
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining a copy
|
||||
of this software and associated documentation files (the "Software"), to deal
|
||||
in the Software without restriction, including without limitation the rights
|
||||
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
||||
copies of the Software, and to permit persons to whom the Software is
|
||||
furnished to do so, subject to the following conditions:
|
||||
|
||||
The above copyright notice and this permission notice shall be included in
|
||||
all copies or substantial portions of the Software.
|
||||
|
||||
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
||||
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
||||
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
||||
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
||||
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
||||
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
||||
THE SOFTWARE.
|
||||
@@ -0,0 +1,106 @@
|
||||
{
|
||||
"_args": [
|
||||
[
|
||||
{
|
||||
"raw": "cordova-plugin-insomnia",
|
||||
"scope": null,
|
||||
"escapedName": "cordova-plugin-insomnia",
|
||||
"name": "cordova-plugin-insomnia",
|
||||
"rawSpec": "",
|
||||
"spec": "latest",
|
||||
"type": "tag"
|
||||
},
|
||||
"D:\\pWork\\yunkong2.vis.cordova\\node_modules"
|
||||
]
|
||||
],
|
||||
"_from": "cordova-plugin-insomnia@latest",
|
||||
"_id": "cordova-plugin-insomnia@4.3.0",
|
||||
"_inCache": true,
|
||||
"_location": "/cordova-plugin-insomnia",
|
||||
"_nodeVersion": "4.2.2",
|
||||
"_npmOperationalInternal": {
|
||||
"host": "packages-18-east.internal.npmjs.com",
|
||||
"tmp": "tmp/cordova-plugin-insomnia-4.3.0.tgz_1485942457945_0.2706606136634946"
|
||||
},
|
||||
"_npmUser": {
|
||||
"name": "eddyverbruggen",
|
||||
"email": "eddyverbruggen@gmail.com"
|
||||
},
|
||||
"_npmVersion": "4.0.5",
|
||||
"_phantomChildren": {},
|
||||
"_requested": {
|
||||
"raw": "cordova-plugin-insomnia",
|
||||
"scope": null,
|
||||
"escapedName": "cordova-plugin-insomnia",
|
||||
"name": "cordova-plugin-insomnia",
|
||||
"rawSpec": "",
|
||||
"spec": "latest",
|
||||
"type": "tag"
|
||||
},
|
||||
"_requiredBy": [
|
||||
"#USER"
|
||||
],
|
||||
"_resolved": "https://registry.npmjs.org/cordova-plugin-insomnia/-/cordova-plugin-insomnia-4.3.0.tgz",
|
||||
"_shasum": "832a33f6d763f0b80273bdf761b35b678c43b957",
|
||||
"_shrinkwrap": null,
|
||||
"_spec": "cordova-plugin-insomnia",
|
||||
"_where": "D:\\pWork\\yunkong2.vis.cordova\\node_modules",
|
||||
"author": {
|
||||
"name": "Eddy Verbruggen",
|
||||
"email": "eddyverbruggen@gmail.com",
|
||||
"url": "https://github.com/EddyVerbruggen"
|
||||
},
|
||||
"bugs": {
|
||||
"url": "https://github.com/EddyVerbruggen/Insomnia-PhoneGap-Plugin/issues"
|
||||
},
|
||||
"cordova": {
|
||||
"id": "cordova-plugin-insomnia",
|
||||
"platforms": [
|
||||
"ios",
|
||||
"wp8",
|
||||
"windows",
|
||||
"android",
|
||||
"firefoxos"
|
||||
]
|
||||
},
|
||||
"dependencies": {},
|
||||
"description": "Prevent the screen of the mobile device from falling asleep.",
|
||||
"devDependencies": {},
|
||||
"directories": {},
|
||||
"dist": {
|
||||
"shasum": "832a33f6d763f0b80273bdf761b35b678c43b957",
|
||||
"tarball": "https://registry.npmjs.org/cordova-plugin-insomnia/-/cordova-plugin-insomnia-4.3.0.tgz"
|
||||
},
|
||||
"engines": [
|
||||
{
|
||||
"name": "cordova",
|
||||
"version": ">=3.0.0"
|
||||
}
|
||||
],
|
||||
"gitHead": "8d2c3b01fc0c11d9bc36bc1b5f9a141bd097f908",
|
||||
"homepage": "https://github.com/EddyVerbruggen/Insomnia-PhoneGap-Plugin#readme",
|
||||
"keywords": [
|
||||
"ecosystem:cordova",
|
||||
"cordova-ios",
|
||||
"cordova-wp8",
|
||||
"cordova-windows",
|
||||
"cordova-android",
|
||||
"cordova-firefoxos"
|
||||
],
|
||||
"license": "MIT",
|
||||
"maintainers": [
|
||||
{
|
||||
"name": "eddyverbruggen",
|
||||
"email": "eddyverbruggen@gmail.com"
|
||||
}
|
||||
],
|
||||
"name": "cordova-plugin-insomnia",
|
||||
"optionalDependencies": {},
|
||||
"readme": "ERROR: No README data found!",
|
||||
"repository": {
|
||||
"type": "git",
|
||||
"url": "git+https://github.com/EddyVerbruggen/Insomnia-PhoneGap-Plugin.git"
|
||||
},
|
||||
"scripts": {},
|
||||
"version": "4.3.0"
|
||||
}
|
||||
@@ -0,0 +1,74 @@
|
||||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<plugin xmlns="http://apache.org/cordova/ns/plugins/1.0"
|
||||
xmlns:android="http://schemas.android.com/apk/res/android"
|
||||
id="cordova-plugin-insomnia"
|
||||
version="4.3.0">
|
||||
|
||||
<name>Insomnia (prevent screen sleep)</name>
|
||||
|
||||
<description>
|
||||
Prevent the screen of the mobile device from falling asleep.
|
||||
</description>
|
||||
|
||||
<license>MIT</license>
|
||||
|
||||
<engines>
|
||||
<engine name="cordova" version=">=3.0.0"/>
|
||||
</engines>
|
||||
|
||||
<js-module src="www/Insomnia.js" name="Insomnia">
|
||||
<clobbers target="window.plugins.insomnia" />
|
||||
</js-module>
|
||||
|
||||
<platform name="ios">
|
||||
|
||||
<config-file target="config.xml" parent="/*">
|
||||
<feature name="Insomnia">
|
||||
<param name="ios-package" value="Insomnia"/>
|
||||
</feature>
|
||||
</config-file>
|
||||
|
||||
<header-file src="src/ios/Insomnia.h"/>
|
||||
<source-file src="src/ios/Insomnia.m"/>
|
||||
</platform>
|
||||
|
||||
<platform name="wp8">
|
||||
<config-file target="config.xml" parent="/*">
|
||||
<feature name="Insomnia">
|
||||
<param name="wp-package" value="Insomnia"/>
|
||||
</feature>
|
||||
</config-file>
|
||||
|
||||
<source-file src="src/wp8/Insomnia.cs" />
|
||||
</platform>
|
||||
|
||||
<platform name="android">
|
||||
|
||||
<config-file target="res/xml/config.xml" parent="/*">
|
||||
<feature name="Insomnia">
|
||||
<param name="android-package" value="nl.xservices.plugins.Insomnia" />
|
||||
</feature>
|
||||
</config-file>
|
||||
|
||||
<source-file src="src/android/nl/xservices/plugins/Insomnia.java" target-dir="src/nl/xservices/plugins"/>
|
||||
</platform>
|
||||
|
||||
<platform name="browser">
|
||||
<js-module src="src/browser/Insomnia.js" name="InsomniaProxy">
|
||||
<merges target="window.plugins.insomnia" />
|
||||
</js-module>
|
||||
</platform>
|
||||
|
||||
<platform name="firefoxos">
|
||||
<js-module src="src/firefoxos/insomnia.js" name="InsomniaProxy">
|
||||
<runs />
|
||||
</js-module>
|
||||
</platform>
|
||||
|
||||
<platform name="windows">
|
||||
<js-module src="src/windows/InsomniaProxy.js" name="InsomniaProxy">
|
||||
<runs />
|
||||
</js-module>
|
||||
</platform>
|
||||
|
||||
</plugin>
|
||||
@@ -0,0 +1,47 @@
|
||||
package nl.xservices.plugins;
|
||||
|
||||
import android.view.WindowManager;
|
||||
import org.apache.cordova.CallbackContext;
|
||||
import org.apache.cordova.CordovaPlugin;
|
||||
import org.apache.cordova.PluginResult;
|
||||
import org.json.JSONArray;
|
||||
import org.json.JSONException;
|
||||
|
||||
public class Insomnia extends CordovaPlugin {
|
||||
|
||||
private static final String ACTION_KEEP_AWAKE = "keepAwake";
|
||||
private static final String ACTION_ALLOW_SLEEP_AGAIN = "allowSleepAgain";
|
||||
|
||||
@Override
|
||||
public boolean execute(String action, JSONArray args, final CallbackContext callbackContext) throws JSONException {
|
||||
try {
|
||||
if (ACTION_KEEP_AWAKE.equals(action)) {
|
||||
cordova.getActivity().runOnUiThread(
|
||||
new Runnable() {
|
||||
public void run() {
|
||||
cordova.getActivity().getWindow().addFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);
|
||||
callbackContext.sendPluginResult(new PluginResult(PluginResult.Status.OK));
|
||||
}
|
||||
});
|
||||
return true;
|
||||
|
||||
} else if (ACTION_ALLOW_SLEEP_AGAIN.equals(action)) {
|
||||
cordova.getActivity().runOnUiThread(
|
||||
new Runnable() {
|
||||
public void run() {
|
||||
cordova.getActivity().getWindow().clearFlags(WindowManager.LayoutParams.FLAG_KEEP_SCREEN_ON);
|
||||
callbackContext.sendPluginResult(new PluginResult(PluginResult.Status.OK));
|
||||
}
|
||||
});
|
||||
return true;
|
||||
|
||||
} else {
|
||||
callbackContext.error("insomnia." + action + " is not a supported function. Did you mean '" + ACTION_KEEP_AWAKE + "'?");
|
||||
return false;
|
||||
}
|
||||
} catch (Exception e) {
|
||||
callbackContext.error(e.getMessage());
|
||||
return false;
|
||||
}
|
||||
}
|
||||
}
|
||||
@@ -0,0 +1,10 @@
|
||||
function notSupported() {
|
||||
console.log('Insomnia is not supported on the browser');
|
||||
}
|
||||
|
||||
module.exports = {
|
||||
keepAwake: notSupported,
|
||||
allowSleepAgain: notSupported
|
||||
};
|
||||
|
||||
require('cordova/exec/proxy').add('Insomnia', module.exports);
|
||||
@@ -0,0 +1,16 @@
|
||||
var lock;
|
||||
|
||||
module.exports = {
|
||||
keepAwake: function() {
|
||||
if (navigator.requestWakeLock) {
|
||||
lock = navigator.requestWakeLock("screen");
|
||||
}
|
||||
},
|
||||
allowSleepAgain: function() {
|
||||
if (lock && typeof lock.unlock === "function") {
|
||||
lock.unlock();
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
require("cordova/exec/proxy").add("Insomnia", module.exports);
|
||||
@@ -0,0 +1,9 @@
|
||||
#import <Cordova/CDV.h>
|
||||
|
||||
@interface Insomnia :CDVPlugin
|
||||
|
||||
- (void) keepAwake:(CDVInvokedUrlCommand*)command;
|
||||
|
||||
- (void) allowSleepAgain:(CDVInvokedUrlCommand*)command;
|
||||
|
||||
@end
|
||||
@@ -0,0 +1,32 @@
|
||||
#import "Insomnia.h"
|
||||
#import <Cordova/CDV.h>
|
||||
|
||||
@implementation Insomnia
|
||||
|
||||
- (void) keepAwake:(CDVInvokedUrlCommand*)command {
|
||||
NSString *callbackId = command.callbackId;
|
||||
|
||||
// Acquire a reference to the local UIApplication singleton
|
||||
UIApplication* app = [UIApplication sharedApplication];
|
||||
|
||||
if (![app isIdleTimerDisabled]) {
|
||||
[app setIdleTimerDisabled:true];
|
||||
}
|
||||
CDVPluginResult* result = [CDVPluginResult resultWithStatus:CDVCommandStatus_OK];
|
||||
[self.commandDelegate sendPluginResult:result callbackId:callbackId];
|
||||
}
|
||||
|
||||
- (void) allowSleepAgain:(CDVInvokedUrlCommand*)command {
|
||||
NSString *callbackId = command.callbackId;
|
||||
|
||||
// Acquire a reference to the local UIApplication singleton
|
||||
UIApplication* app = [UIApplication sharedApplication];
|
||||
|
||||
if([app isIdleTimerDisabled]) {
|
||||
[app setIdleTimerDisabled:false];
|
||||
}
|
||||
CDVPluginResult* result = [CDVPluginResult resultWithStatus:CDVCommandStatus_OK];
|
||||
[self.commandDelegate sendPluginResult:result callbackId:callbackId];
|
||||
}
|
||||
|
||||
@end
|
||||
@@ -0,0 +1,48 @@
|
||||
|
||||
var displayRequest = null;
|
||||
|
||||
var handleAsyncError = function(handler,msg) {
|
||||
setTimeout(function(){
|
||||
handler(msg);
|
||||
},0);
|
||||
};
|
||||
|
||||
module.exports = {
|
||||
|
||||
keepAwake:function(success,error){
|
||||
if(!displayRequest) {
|
||||
try {
|
||||
displayRequest = new Windows.System.Display.DisplayRequest();
|
||||
displayRequest.requestActive();
|
||||
setTimeout(function(){
|
||||
success();
|
||||
},0);
|
||||
}
|
||||
catch(err) {
|
||||
handleAsyncError(error,"Insomnia failed to activate display request : " + err.message);
|
||||
}
|
||||
}
|
||||
else {
|
||||
handleAsyncError(error,"Insomnia is wide awake!");
|
||||
}
|
||||
},
|
||||
allowSleepAgain:function(success,error){
|
||||
if(displayRequest) {
|
||||
try {
|
||||
displayRequest.requestRelease();
|
||||
displayRequest = null;
|
||||
setTimeout(function(){
|
||||
success();
|
||||
},0);
|
||||
}
|
||||
catch(err) {
|
||||
handleAsyncError(error,"Insomnia failed to deactivate display request : " + err.message);
|
||||
}
|
||||
}
|
||||
else {
|
||||
handleAsyncError(error,"Insomnia is already asleep!");
|
||||
}
|
||||
}
|
||||
};
|
||||
|
||||
require("cordova/exec/proxy").add("Insomnia", module.exports);
|
||||
@@ -0,0 +1,19 @@
|
||||
using Microsoft.Phone.Shell;
|
||||
|
||||
namespace WPCordovaClassLib.Cordova.Commands
|
||||
{
|
||||
public class Insomnia : BaseCommand
|
||||
{
|
||||
public void keepAwake(string options)
|
||||
{
|
||||
PhoneApplicationService.Current.UserIdleDetectionMode = IdleDetectionMode.Disabled;
|
||||
DispatchCommandResult(new PluginResult(PluginResult.Status.OK));
|
||||
}
|
||||
|
||||
public void allowSleepAgain(string options)
|
||||
{
|
||||
PhoneApplicationService.Current.UserIdleDetectionMode = IdleDetectionMode.Enabled;
|
||||
DispatchCommandResult(new PluginResult(PluginResult.Status.OK));
|
||||
}
|
||||
}
|
||||
}
|
||||
+21
@@ -0,0 +1,21 @@
|
||||
function Insomnia() {
|
||||
}
|
||||
|
||||
Insomnia.prototype.keepAwake = function (successCallback, errorCallback) {
|
||||
cordova.exec(successCallback, errorCallback, "Insomnia", "keepAwake", []);
|
||||
};
|
||||
|
||||
Insomnia.prototype.allowSleepAgain = function (successCallback, errorCallback) {
|
||||
cordova.exec(successCallback, errorCallback, "Insomnia", "allowSleepAgain", []);
|
||||
};
|
||||
|
||||
Insomnia.install = function () {
|
||||
if (!window.plugins) {
|
||||
window.plugins = {};
|
||||
}
|
||||
|
||||
window.plugins.insomnia = new Insomnia();
|
||||
return window.plugins.insomnia;
|
||||
};
|
||||
|
||||
cordova.addConstructor(Insomnia.install);
|
||||
Reference in New Issue
Block a user