diff options
Diffstat (limited to 'plugins/nl.x-services.plugins.insomnia')
8 files changed, 348 insertions, 0 deletions
diff --git a/plugins/nl.x-services.plugins.insomnia/README.md b/plugins/nl.x-services.plugins.insomnia/README.md new file mode 100644 index 00000000..aea1b505 --- /dev/null +++ b/plugins/nl.x-services.plugins.insomnia/README.md @@ -0,0 +1,138 @@ +# 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 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. + +### 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 +<gap:plugin name="nl.x-services.plugins.insomnia" /> +``` +or to use this exact version: +```xml +<gap:plugin name="nl.x-services.plugins.insomnia" version="4.0.0" /> +``` + +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. + +## 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 version! + +## 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. diff --git a/plugins/nl.x-services.plugins.insomnia/plugin.xml b/plugins/nl.x-services.plugins.insomnia/plugin.xml new file mode 100755 index 00000000..b8118322 --- /dev/null +++ b/plugins/nl.x-services.plugins.insomnia/plugin.xml @@ -0,0 +1,66 @@ +<?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="nl.x-services.plugins.insomnia" + version="4.0.1"> + + <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> + + <!-- ios --> + <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> + + <!-- wp8 --> + <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> + + <!-- android --> + <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> + + <!-- firefoxos --> + <platform name="firefoxos"> + <js-module src="src/firefoxos/insomnia.js" name="InsomniaProxy"> + <runs /> + </js-module> + </platform> + +</plugin> diff --git a/plugins/nl.x-services.plugins.insomnia/src/android/nl/xservices/plugins/Insomnia.java b/plugins/nl.x-services.plugins.insomnia/src/android/nl/xservices/plugins/Insomnia.java new file mode 100644 index 00000000..95094938 --- /dev/null +++ b/plugins/nl.x-services.plugins.insomnia/src/android/nl/xservices/plugins/Insomnia.java @@ -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; + } + } +} diff --git a/plugins/nl.x-services.plugins.insomnia/src/firefoxos/insomnia.js b/plugins/nl.x-services.plugins.insomnia/src/firefoxos/insomnia.js new file mode 100644 index 00000000..ed4ea3af --- /dev/null +++ b/plugins/nl.x-services.plugins.insomnia/src/firefoxos/insomnia.js @@ -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); diff --git a/plugins/nl.x-services.plugins.insomnia/src/ios/Insomnia.h b/plugins/nl.x-services.plugins.insomnia/src/ios/Insomnia.h new file mode 100755 index 00000000..c13c07ba --- /dev/null +++ b/plugins/nl.x-services.plugins.insomnia/src/ios/Insomnia.h @@ -0,0 +1,9 @@ +#import <Cordova/CDV.h> + +@interface Insomnia :CDVPlugin + +- (void) keepAwake:(CDVInvokedUrlCommand*)command; + +- (void) allowSleepAgain:(CDVInvokedUrlCommand*)command; + +@end diff --git a/plugins/nl.x-services.plugins.insomnia/src/ios/Insomnia.m b/plugins/nl.x-services.plugins.insomnia/src/ios/Insomnia.m new file mode 100755 index 00000000..7eca3b07 --- /dev/null +++ b/plugins/nl.x-services.plugins.insomnia/src/ios/Insomnia.m @@ -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
\ No newline at end of file diff --git a/plugins/nl.x-services.plugins.insomnia/src/wp8/Insomnia.cs b/plugins/nl.x-services.plugins.insomnia/src/wp8/Insomnia.cs new file mode 100644 index 00000000..034d1711 --- /dev/null +++ b/plugins/nl.x-services.plugins.insomnia/src/wp8/Insomnia.cs @@ -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)); + } + } +} diff --git a/plugins/nl.x-services.plugins.insomnia/www/Insomnia.js b/plugins/nl.x-services.plugins.insomnia/www/Insomnia.js new file mode 100755 index 00000000..17b63740 --- /dev/null +++ b/plugins/nl.x-services.plugins.insomnia/www/Insomnia.js @@ -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); |
