summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPliablePixels <pliablepixels@gmail.com>2015-06-26 11:25:06 -0400
committerPliablePixels <pliablepixels@gmail.com>2015-06-26 11:25:06 -0400
commit0e83a778b541591ef468d7ebda1493a000a545e5 (patch)
treee891381b97791d98edbbd70af4963606d494e659
parent9972b3e9171a400d7fc239385b3e1e8c3fd1b9bc (diff)
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
-rw-r--r--plugins/android.json7
-rw-r--r--plugins/fetch.json9
-rw-r--r--plugins/ios.json7
-rw-r--r--plugins/nl.x-services.plugins.insomnia/README.md138
-rwxr-xr-xplugins/nl.x-services.plugins.insomnia/plugin.xml66
-rw-r--r--plugins/nl.x-services.plugins.insomnia/src/android/nl/xservices/plugins/Insomnia.java47
-rw-r--r--plugins/nl.x-services.plugins.insomnia/src/firefoxos/insomnia.js16
-rwxr-xr-xplugins/nl.x-services.plugins.insomnia/src/ios/Insomnia.h9
-rwxr-xr-xplugins/nl.x-services.plugins.insomnia/src/ios/Insomnia.m32
-rw-r--r--plugins/nl.x-services.plugins.insomnia/src/wp8/Insomnia.cs19
-rwxr-xr-xplugins/nl.x-services.plugins.insomnia/www/Insomnia.js21
-rw-r--r--www/js/DataModel.js56
-rw-r--r--www/js/DevOptionsCtrl.js12
-rw-r--r--www/js/EventCtrl.js11
-rw-r--r--www/js/EventsGraphsCtrl.js10
-rw-r--r--www/js/HelpCtrl.js14
-rw-r--r--www/js/LoginCtrl.js14
-rw-r--r--www/js/MonitorCtrl.js18
-rw-r--r--www/js/MonitorModalCtrl.js2
-rw-r--r--www/js/MontageCtrl.js41
-rw-r--r--www/js/StateCtrl.js12
-rw-r--r--www/js/app.js5
-rw-r--r--www/templates/login.html9
-rw-r--r--www/templates/montage.html2
24 files changed, 554 insertions, 23 deletions
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": "<feature name=\"StatusBar\"><param name=\"android-package\" value=\"org.apache.cordova.statusbar.StatusBar\" /><param name=\"onload\" value=\"true\" /></feature>",
"count": 1
+ },
+ {
+ "xml": "<feature name=\"Insomnia\"><param name=\"android-package\" value=\"nl.xservices.plugins.Insomnia\" /></feature>",
+ "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": "<feature name=\"InAppBrowser\"><param name=\"ios-package\" value=\"CDVInAppBrowser\" /></feature>",
"count": 1
+ },
+ {
+ "xml": "<feature name=\"Insomnia\"><param name=\"ios-package\" value=\"Insomnia\" /></feature>",
+ "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
+<!-- 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);
diff --git a/www/js/DataModel.js b/www/js/DataModel.js
index 1c19948d..d1470685 100644
--- a/www/js/DataModel.js
+++ b/www/js/DataModel.js
@@ -22,7 +22,8 @@ angular.module('zmApp.controllers').service('ZMDataModel', ['$http', '$q', '$ion
'streamingurl': "",
'maxFPS': "3", // image streaming FPS
'montageQuality': "50", // montage streaming quality in %
- 'useSSL':false // "1" if HTTPS
+ 'useSSL':false, // "1" if HTTPS
+ 'keepAwake':true // don't dim/dim during live view
};
return {
@@ -103,6 +104,12 @@ angular.module('zmApp.controllers').service('ZMDataModel', ['$http', '$q', '$ion
}
+ if (window.localStorage.getItem("keepAwake") != undefined) {
+ var awakevalue = window.localStorage.getItem("keepAwake");
+ loginData.keepAwake = (awakevalue == "1") ? true:false;
+ console.log("keepAwake " + loginData.keepAwake);
+
+ }
monitorsLoaded = 0;
console.log("Getting out of ZMDataModel init");
@@ -110,15 +117,57 @@ angular.module('zmApp.controllers').service('ZMDataModel', ['$http', '$q', '$ion
},
isLoggedIn: function () {
- if (loginData.username != "" && loginData.password != "" && loginData.url != "" && loginData.apiurl != "") {
+ if (loginData.username != "" && loginData.password != "" && loginData.url != "" && loginData.apiurl != "") {
return 1;
} else
return 0; {}
},
+
getLogin: function () {
return loginData;
},
+
+ getKeepAwake: function () {
+ return (loginData.keepAwake == '1') ? true:false;
+ },
+
+ //------------------------------------------------------------------
+ // switches screen to 'always on' or 'auto'
+ //------------------------------------------------------------------
+ setAwake: function(val)
+ {
+
+
+ console.log ("**** setAwake called with:" + val);
+ if (val)
+ {
+
+ if (window.cordova != undefined)
+ {
+ window.plugins.insomnia.keepAwake();
+ }
+ else
+ {
+ console.log ("Skipping insomnia, cordova does not exist");
+ }
+ }
+ else
+ {
+ if (window.cordova != undefined)
+ {
+ window.plugins.insomnia.allowSleepAgain();
+ }
+ else
+ {
+ console.log ("Skipping insomnia, cordova does not exist");
+ }
+
+
+ }
+
+ },
+
setLogin: function (newLogin) {
loginData = newLogin;
@@ -128,6 +177,7 @@ angular.module('zmApp.controllers').service('ZMDataModel', ['$http', '$q', '$ion
window.localStorage.setItem("apiurl", loginData.apiurl);
window.localStorage.setItem("streamingurl", loginData.streamingurl);
window.localStorage.setItem("useSSL", loginData.useSSL?"1":"0");
+ window.localStorage.setItem("keepAwake", loginData.keepAwake?"1":"0");
window.localStorage.setItem("maxMontage", loginData.maxMontage);
window.localStorage.setItem("montageQuality", loginData.montageQuality);
@@ -350,6 +400,8 @@ angular.module('zmApp.controllers').service('ZMDataModel', ['$http', '$q', '$ion
monitorsLoaded = loaded;
},
+
+
//-----------------------------------------------------------------------------
// Given a monitor Id it returns the monitor name
// FIXME: Can I do a better job with associative arrays?
diff --git a/www/js/DevOptionsCtrl.js b/www/js/DevOptionsCtrl.js
index f332bc50..374a781b 100644
--- a/www/js/DevOptionsCtrl.js
+++ b/www/js/DevOptionsCtrl.js
@@ -9,6 +9,18 @@ angular.module('zmApp.controllers').controller('zmApp.DevOptionsCtrl', ['$scope'
$ionicSideMenuDelegate.toggleLeft();
};
+ //-------------------------------------------------------------------------
+ // Lets make sure we set screen dim properly as we enter
+ // The problem is we enter other states before we leave previous states
+ // from a callback perspective in ionic, so we really can't predictably
+ // reset power state on exit as if it is called after we enter another
+ // state, that effectively overwrites current view power management needs
+ //------------------------------------------------------------------------
+ $scope.$on('$ionicView.enter', function () {
+ console.log("**VIEW ** DevOptions Ctrl Entered");
+ ZMDataModel.setAwake(false);
+ });
+
//------------------------------------------------------------------
// Perform the login action when the user submits the login form
//------------------------------------------------------------------
diff --git a/www/js/EventCtrl.js b/www/js/EventCtrl.js
index fc29610e..284c0147 100644
--- a/www/js/EventCtrl.js
+++ b/www/js/EventCtrl.js
@@ -143,8 +143,16 @@ angular.module('zmApp.controllers').controller('zmApp.EventCtrl', ['$ionicPlatfo
console.log("**VIEW ** Events Ctrl Loaded");
});
+ //-------------------------------------------------------------------------
+ // Lets make sure we set screen dim properly as we enter
+ // The problem is we enter other states before we leave previous states
+ // from a callback perspective in ionic, so we really can't predictably
+ // reset power state on exit as if it is called after we enter another
+ // state, that effectively overwrites current view power management needs
+ //------------------------------------------------------------------------
$scope.$on('$ionicView.enter', function () {
console.log("**VIEW ** Events Ctrl Entered");
+ ZMDataModel.setAwake(false);
});
$scope.$on('$ionicView.leave', function () {
@@ -333,6 +341,8 @@ angular.module('zmApp.controllers').controller('zmApp.EventCtrl', ['$ionicPlatfo
$scope.loginData = ZMDataModel.getLogin();
$scope.rand = Math.floor(Math.random() * (999999 - 111111 + 1)) + 111111;
+ ZMDataModel.setAwake(ZMDataModel.getKeepAwake());
+
$ionicModal.fromTemplateUrl('templates/events-modal.html', {
scope: $scope,
animation: 'slide-in-up'
@@ -359,6 +369,7 @@ angular.module('zmApp.controllers').controller('zmApp.EventCtrl', ['$ionicPlatfo
$scope.closeModal = function () {
// $interval.cancel(eventsInterval);
console.log("Close & Destroy Modal");
+ ZMDataModel.setAwake(false);
if ($scope.modal !== undefined) {
$scope.modal.remove();
}
diff --git a/www/js/EventsGraphsCtrl.js b/www/js/EventsGraphsCtrl.js
index e6238084..92bc870a 100644
--- a/www/js/EventsGraphsCtrl.js
+++ b/www/js/EventsGraphsCtrl.js
@@ -18,8 +18,16 @@ angular.module('zmApp.controllers').controller('zmApp.EventsGraphsCtrl', ['$ioni
console.log("**VIEW ** Graph Ctrl Loaded");
});
+ //-------------------------------------------------------------------------
+ // Lets make sure we set screen dim properly as we enter
+ // The problem is we enter other states before we leave previous states
+ // from a callback perspective in ionic, so we really can't predictably
+ // reset power state on exit as if it is called after we enter another
+ // state, that effectively overwrites current view power management needs
+ //------------------------------------------------------------------------
$scope.$on('$ionicView.enter', function () {
- console.log("**VIEW ** Graph Ctrl Entered");
+ console.log("**VIEW ** EventsGraphs Ctrl Entered");
+ ZMDataModel.setAwake(false);
});
$scope.$on('$ionicView.leave', function () {
diff --git a/www/js/HelpCtrl.js b/www/js/HelpCtrl.js
index 35acd30d..89c2171b 100644
--- a/www/js/HelpCtrl.js
+++ b/www/js/HelpCtrl.js
@@ -6,6 +6,18 @@ angular.module('zmApp.controllers').controller('zmApp.HelpCtrl', ['$scope', '$ro
$scope.openMenu = function () {
$ionicSideMenuDelegate.toggleLeft();
};
-console.log ("***** HELP ****");
+
+
+ //-------------------------------------------------------------------------
+ // Lets make sure we set screen dim properly as we enter
+ // The problem is we enter other states before we leave previous states
+ // from a callback perspective in ionic, so we really can't predictably
+ // reset power state on exit as if it is called after we enter another
+ // state, that effectively overwrites current view power management needs
+ //------------------------------------------------------------------------
+ $scope.$on('$ionicView.enter', function () {
+ console.log("**VIEW ** Help Ctrl Entered");
+ ZMDataModel.setAwake(false);
+ });
}]);
diff --git a/www/js/LoginCtrl.js b/www/js/LoginCtrl.js
index e014500b..1da2f83d 100644
--- a/www/js/LoginCtrl.js
+++ b/www/js/LoginCtrl.js
@@ -9,6 +9,20 @@ angular.module('zmApp.controllers').controller('zmApp.LoginCtrl', ['$scope', '$r
$scope.loginData = ZMDataModel.getLogin();
+
+
+ //-------------------------------------------------------------------------
+ // Lets make sure we set screen dim properly as we enter
+ // The problem is we enter other states before we leave previous states
+ // from a callback perspective in ionic, so we really can't predictably
+ // reset power state on exit as if it is called after we enter another
+ // state, that effectively overwrites current view power management needs
+ //------------------------------------------------------------------------
+ $scope.$on('$ionicView.enter', function () {
+ console.log("**VIEW ** LoginCtrl Entered");
+ ZMDataModel.setAwake(false);
+ });
+
//-------------------------------------------------------------------------------
// Adds http to url if not present
// http://stackoverflow.com/questions/11300906/check-if-a-string-starts-with-http-using-javascript
diff --git a/www/js/MonitorCtrl.js b/www/js/MonitorCtrl.js
index 0d65a891..7548624c 100644
--- a/www/js/MonitorCtrl.js
+++ b/www/js/MonitorCtrl.js
@@ -17,6 +17,8 @@ angular.module('zmApp.controllers').controller('zmApp.MonitorCtrl', ['$ionicPopu
$scope.monitors = message;
var loginData = ZMDataModel.getLogin();
monitorStateCheck();
+ console.log ("Setting Awake to "+ZMDataModel.getKeepAwake());
+ ZMDataModel.setAwake(ZMDataModel.getKeepAwake());
$scope.openMenu = function () {
@@ -186,9 +188,16 @@ angular.module('zmApp.controllers').controller('zmApp.MonitorCtrl', ['$ionicPopu
console.log("**VIEW ** Monitor Ctrl Loaded");
});
+ //-------------------------------------------------------------------------
+ // Lets make sure we set screen dim properly as we enter
+ // The problem is we enter other states before we leave previous states
+ // from a callback perspective in ionic, so we really can't predictably
+ // reset power state on exit as if it is called after we enter another
+ // state, that effectively overwrites current view power management needs
+ //------------------------------------------------------------------------
$scope.$on('$ionicView.enter', function () {
console.log("**VIEW ** Monitor Ctrl Entered");
-
+ ZMDataModel.setAwake(false);
});
$scope.$on('$ionicView.leave', function () {
@@ -207,6 +216,8 @@ angular.module('zmApp.controllers').controller('zmApp.MonitorCtrl', ['$ionicPopu
$scope.rand = Math.floor(Math.random() * (999999 - 111111 + 1)) + 111111;
// This is a modal to show the monitor footage
+ // We need to switch to always awake so the feed doesn't get interrupted
+ ZMDataModel.setAwake(ZMDataModel.getKeepAwake());
$ionicModal.fromTemplateUrl('templates/monitors-modal.html', {
scope: $scope,
@@ -263,6 +274,8 @@ angular.module('zmApp.controllers').controller('zmApp.MonitorCtrl', ['$ionicPopu
$scope.closeModal = function () {
console.log("Close & Destroy Monitor Modal");
+ // switch off awake, as liveview is finished
+ ZMDataModel.setAwake(false);
$scope.modal.remove();
};
@@ -395,6 +408,9 @@ angular.module('zmApp.controllers').controller('zmApp.MonitorCtrl', ['$ionicPopu
})(i);
}
}
+
+
+
$scope.doRefresh = function () {
console.log("***Pull to Refresh");
$scope.monitors = [];
diff --git a/www/js/MonitorModalCtrl.js b/www/js/MonitorModalCtrl.js
index a6dfbc01..11306e4c 100644
--- a/www/js/MonitorModalCtrl.js
+++ b/www/js/MonitorModalCtrl.js
@@ -6,4 +6,6 @@
angular.module('zmApp.controllers').controller('zmApp.MonitorModalCtrl', ['$ionicPopup', '$scope', 'ZMDataModel', '$ionicSideMenuDelegate', '$ionicLoading', '$ionicModal', '$state', '$http', function ($ionicPopup,$scope, ZMDataModel, $ionicSideMenuDelegate, $ionicLoading, $ionicModal, $state, $http, $rootScope) {
+
+
}]);
diff --git a/www/js/MontageCtrl.js b/www/js/MontageCtrl.js
index b39d2aac..2a8dce2f 100644
--- a/www/js/MontageCtrl.js
+++ b/www/js/MontageCtrl.js
@@ -4,7 +4,7 @@
/* global cordova,StatusBar,angular,console,ionic */
-angular.module('zmApp.controllers').controller('zmApp.MontageCtrl', ['$scope', '$rootScope', 'ZMDataModel', 'message', '$ionicSideMenuDelegate', '$timeout', '$interval', '$ionicModal', '$ionicLoading', '$http', '$state', '$stateParams','$ionicHistory','$ionicScrollDelegate', function ($scope, $rootScope, ZMDataModel, message, $ionicSideMenuDelegate, $timeout, $interval, $ionicModal, $ionicLoading, $http,$state, $stateParams, $ionicHistory,$ionicScrollDelegate) {
+angular.module('zmApp.controllers').controller('zmApp.MontageCtrl', ['$scope', '$rootScope', 'ZMDataModel', 'message', '$ionicSideMenuDelegate', '$timeout', '$interval', '$ionicModal', '$ionicLoading', '$http', '$state', '$stateParams','$ionicHistory','$ionicScrollDelegate', '$ionicPlatform', function ($scope, $rootScope, ZMDataModel, message, $ionicSideMenuDelegate, $timeout, $interval, $ionicModal, $ionicLoading, $http,$state, $stateParams, $ionicHistory,$ionicScrollDelegate) {
//---------------------------------------------------------------------
// Controller main
@@ -12,22 +12,8 @@ angular.module('zmApp.controllers').controller('zmApp.MontageCtrl', ['$scope', '
document.addEventListener("pause", onPause, false);
- // I was facing a lot of problems with Chrome/crosswalk getting stuck with
- // pending HTTP requests after a while. There is a problem with chrome handling
- // multiple streams of always open HTTP get's (image streaming). This problem
- // does not arise when the image is streamed for a single monitor - just multiple
-
- // To work around this I am taking a single snapshot of ZMS and have implemented a timer
- // to reload the snapshot every 1 second. Seems to work reliably even thought its a higer
- // load. Will it bonk with many monitors? Who knows. I have tried with 5 and 1280x960@32bpp
- this.loadNotifications = function () {
- // randomval is appended to img src, so after each interval the image reloads
- $scope.randomval = (new Date()).getTime();
- //console.log ("**** NOTIFICATION with rand="+$scope.randomval+"*****");
- };
-
var timestamp = new Date().getUTCMilliseconds();
$scope.minimal = $stateParams.minimal;
$scope.isRefresh = $stateParams.isRefresh;
@@ -82,6 +68,22 @@ angular.module('zmApp.controllers').controller('zmApp.MontageCtrl', ['$scope', '
console.log("********* Inside Montage Ctrl, MAX LIMIT=" + $scope.monLimit);
+ // I was facing a lot of problems with Chrome/crosswalk getting stuck with
+ // pending HTTP requests after a while. There is a problem with chrome handling
+ // multiple streams of always open HTTP get's (image streaming). This problem
+ // does not arise when the image is streamed for a single monitor - just multiple
+
+ // To work around this I am taking a single snapshot of ZMS and have implemented a timer
+ // to reload the snapshot every 1 second. Seems to work reliably even thought its a higer
+ // load. Will it bonk with many monitors? Who knows. I have tried with 5 and 1280x960@32bpp
+
+
+ this.loadNotifications = function () {
+ // randomval is appended to img src, so after each interval the image reloads
+ $scope.randomval = (new Date()).getTime();
+ //console.log ("**** NOTIFICATION with rand="+$scope.randomval+"*****");
+ };
+
var intervalHandle = $interval(function () {
this.loadNotifications();
// console.log ("Refreshing Image...");
@@ -89,6 +91,8 @@ angular.module('zmApp.controllers').controller('zmApp.MontageCtrl', ['$scope', '
this.loadNotifications();
+
+
//---------------------------------------------------------------------
// Triggered when you enter/exit full screen
//---------------------------------------------------------------------
@@ -120,6 +124,8 @@ angular.module('zmApp.controllers').controller('zmApp.MontageCtrl', ['$scope', '
$scope.openModal = function (mid, controllable) {
console.log("Open Monitor Modal");
+ // Note: no need to setAwake(true) as its already awake
+ // in montage view
$scope.monitorId = mid;
$scope.LoginData = ZMDataModel.getLogin();
$scope.rand = Math.floor(Math.random() * (999999 - 111111 + 1)) + 111111;
@@ -150,6 +156,8 @@ angular.module('zmApp.controllers').controller('zmApp.MontageCtrl', ['$scope', '
$scope.closeModal = function () {
console.log("Close & Destroy Monitor Modal");
+ // Note: no need to setAwake(false) as needs to be awake
+ // in montage view
$scope.modal.remove();
};
@@ -221,6 +229,7 @@ angular.module('zmApp.controllers').controller('zmApp.MontageCtrl', ['$scope', '
console.log("*** Moving to Background ***"); // Handle the pause event
console.log("*** CANCELLING INTERVAL ****");
$interval.cancel(intervalHandle);
+ // FIXME: Do I need to setAwake(false) here?
}
@@ -241,6 +250,8 @@ angular.module('zmApp.controllers').controller('zmApp.MontageCtrl', ['$scope', '
$scope.$on('$ionicView.enter', function () {
console.log("**VIEW ** Montage Ctrl Entered");
+ console.log ("Setting Awake to "+ZMDataModel.getKeepAwake());
+ ZMDataModel.setAwake(ZMDataModel.getKeepAwake());
});
$scope.$on('$ionicView.leave', function () {
diff --git a/www/js/StateCtrl.js b/www/js/StateCtrl.js
index 13ca288c..ec3a771a 100644
--- a/www/js/StateCtrl.js
+++ b/www/js/StateCtrl.js
@@ -30,6 +30,18 @@ angular.module('zmApp.controllers').controller('zmApp.StateCtrl', ['$ionicPopup'
getLoadStatus();
getDiskStatus();
+ //-------------------------------------------------------------------------
+ // Lets make sure we set screen dim properly as we enter
+ // The problem is we enter other states before we leave previous states
+ // from a callback perspective in ionic, so we really can't predictably
+ // reset power state on exit as if it is called after we enter another
+ // state, that effectively overwrites current view power management needs
+ //------------------------------------------------------------------------
+ $scope.$on('$ionicView.enter', function () {
+ console.log("**VIEW ** Montage Ctrl Entered");
+ ZMDataModel.setAwake(false);
+ });
+
//----------------------------------------------------------------------
// returns disk space in gigs taken up by events
//----------------------------------------------------------------------
diff --git a/www/js/app.js b/www/js/app.js
index 76b14c66..d17d16c1 100644
--- a/www/js/app.js
+++ b/www/js/app.js
@@ -216,7 +216,10 @@ angular.module('zmApp', [
setTimeout(function () {
- $cordovaSplashscreen.hide();
+ if (window.cordova)
+ {
+ $cordovaSplashscreen.hide();
+ }
}, 1500);
var pixelRatio = window.devicePixelRatio || 1;
diff --git a/www/templates/login.html b/www/templates/login.html
index e0eb8b33..5c2eff64 100644
--- a/www/templates/login.html
+++ b/www/templates/login.html
@@ -7,7 +7,7 @@
<ion-content class="padding">
<div class="list list-inset">
- <span style="color:rgb(100,100,100)"> <i class="ion-android-home" style="font-size:150%"></i> ZoneMinder portal</span>
+ <span style="color:rgb(100,100,100)"> <i class="ion-android-home" style="font-size:150%"></i> ZoneMinder Settings</span>
<label class="item item-input">
<input autocapitalize="none" type="text" placeholder="Username" ng-model="loginData.username">
</label>
@@ -22,7 +22,6 @@
<input autocapitalize="none" type="text" placeholder="Base path to cgi-bin" ng-model="loginData.streamingurl">
</label>
- <span style="color:rgb(100,100,100)"><br/><i class="ion-social-angular" style="font-size:150%"></i> ZoneMinder API</span>
<label class="item item-input">
<input autocapitalize="none" type="text" placeholder="ZM Api URL" ng-model="loginData.apiurl">
</label>
@@ -31,6 +30,12 @@
<ion-toggle ng-model="loginData.useSSL" ng-checked="{{loginData.useSSL}}" toggle-class="toggle-calm">Use SSL</ion-toggle>
</label>
+ <label >
+
+ <ion-toggle ng-model="loginData.keepAwake" ng-checked="{{loginData.keepAwake}}" toggle-class="toggle-calm">Keep display on<p>(When viewing footage)</p></ion-toggle>
+
+ </label>
+
</div>
<button class="button button-block button-balanced icon ion-locked" ng-click="save()"> Save</button>
diff --git a/www/templates/montage.html b/www/templates/montage.html
index d1106e2e..7fed7ff3 100644
--- a/www/templates/montage.html
+++ b/www/templates/montage.html
@@ -60,5 +60,7 @@
</div>
</div>
<!--ngcontroller -->
+
+
</ion-content>
</ion-view>