From 0e83a778b541591ef468d7ebda1493a000a545e5 Mon Sep 17 00:00:00 2001 From: PliablePixels Date: Fri, 26 Jun 2015 11:25:06 -0400 Subject: Added option to keep screen on when viewing footage, also cleaned up invocation of cordova plugins when in desktop - it now checks so spurious errors don't show in logs --- plugins/android.json | 7 ++ plugins/fetch.json | 9 ++ plugins/ios.json | 7 ++ plugins/nl.x-services.plugins.insomnia/README.md | 138 +++++++++++++++++++++ plugins/nl.x-services.plugins.insomnia/plugin.xml | 66 ++++++++++ .../src/android/nl/xservices/plugins/Insomnia.java | 47 +++++++ .../src/firefoxos/insomnia.js | 16 +++ .../src/ios/Insomnia.h | 9 ++ .../src/ios/Insomnia.m | 32 +++++ .../src/wp8/Insomnia.cs | 19 +++ .../nl.x-services.plugins.insomnia/www/Insomnia.js | 21 ++++ 11 files changed, 371 insertions(+) create mode 100644 plugins/nl.x-services.plugins.insomnia/README.md create mode 100755 plugins/nl.x-services.plugins.insomnia/plugin.xml create mode 100644 plugins/nl.x-services.plugins.insomnia/src/android/nl/xservices/plugins/Insomnia.java create mode 100644 plugins/nl.x-services.plugins.insomnia/src/firefoxos/insomnia.js create mode 100755 plugins/nl.x-services.plugins.insomnia/src/ios/Insomnia.h create mode 100755 plugins/nl.x-services.plugins.insomnia/src/ios/Insomnia.m create mode 100644 plugins/nl.x-services.plugins.insomnia/src/wp8/Insomnia.cs create mode 100755 plugins/nl.x-services.plugins.insomnia/www/Insomnia.js (limited to 'plugins') diff --git a/plugins/android.json b/plugins/android.json index 0d1ee456..c041bf03 100644 --- a/plugins/android.json +++ b/plugins/android.json @@ -35,6 +35,10 @@ { "xml": "", "count": 1 + }, + { + "xml": "", + "count": 1 } ] } @@ -70,6 +74,9 @@ }, "org.apache.cordova.statusbar": { "PACKAGE_NAME": "com.pliablepixels.zmninja" + }, + "nl.x-services.plugins.insomnia": { + "PACKAGE_NAME": "com.pliablepixels.zmninja" } }, "dependent_plugins": {} diff --git a/plugins/fetch.json b/plugins/fetch.json index 95dddb09..5742b111 100644 --- a/plugins/fetch.json +++ b/plugins/fetch.json @@ -76,5 +76,14 @@ }, "is_top_level": false, "variables": {} + }, + "nl.x-services.plugins.insomnia": { + "source": { + "type": "git", + "url": "https://github.com/EddyVerbruggen/Insomnia-PhoneGap-Plugin.git", + "subdir": "." + }, + "is_top_level": true, + "variables": {} } } diff --git a/plugins/ios.json b/plugins/ios.json index e26341bd..0a1cd4f8 100644 --- a/plugins/ios.json +++ b/plugins/ios.json @@ -39,6 +39,10 @@ { "xml": "", "count": 1 + }, + { + "xml": "", + "count": 1 } ] } @@ -81,6 +85,9 @@ }, "cordova-plugin-inappbrowser": { "PACKAGE_NAME": "com.ionicframework.zmninja469849" + }, + "nl.x-services.plugins.insomnia": { + "PACKAGE_NAME": "com.pliablepixels.zmninja" } }, "dependent_plugins": {} 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 + + + + +``` + +```xml + + + + +``` + +```xml + + + + +``` + +2\. Grab a copy of Insomnia.js, add it to your project and reference it in `index.html`: +```html + +``` + +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//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 + +``` +or to use this exact version: +```xml + +``` + +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 + +``` + +## 3. Usage +```html + + +``` +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 @@ + + + + Insomnia (prevent screen sleep) + + + Prevent the screen of the mobile device from falling asleep. + + + MIT + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + 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 + +@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 + +@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); -- cgit v1.2.3