diff options
Diffstat (limited to 'www/js/app.js')
| -rwxr-xr-x | www/js/app.js | 136 |
1 files changed, 131 insertions, 5 deletions
diff --git a/www/js/app.js b/www/js/app.js index 284bc90d..0a19b987 100755 --- a/www/js/app.js +++ b/www/js/app.js @@ -11,6 +11,8 @@ var appVersion = "0.0.0"; + + // core app start stuff angular.module('zmApp', [ 'ionic', @@ -202,6 +204,8 @@ angular.module('zmApp', [ }) + + //credit: http://stackoverflow.com/a/23931217/1361529 .directive('hidepassword', function () { @@ -1210,6 +1214,7 @@ angular.module('zmApp', [ $ionicPlatform.ready(function () { //console.log(">>>>>>>>>>>>>>>>>>>>>>>>>>>>>INSIDE RUN"); + $rootScope.dpadId = 0; $rootScope.textScaleFactor = 1.0; $rootScope.isLoggedIn = false; $rootScope.apiValid = false; @@ -1316,6 +1321,120 @@ angular.module('zmApp', [ }); } + // DPAD Handler - disabled for now + // when ready add ionic cordova plugin add https://github.com/pliablepixels/cordova-plugin-android-tv.git + + // console.log (JSON.stringify(ionic.Platform.device())); + if (0 && $ionicPlatform.is('android')) { + window.addEventListener('keydown', dPadHandler, true); + } + else { + NVRDataModel.log ("Not registering D-PAD handler, as you are not on android"); + } + + + function dPadHandler(evt){ + + var handled = false; + + var keyCodes = { + MKEYB: 77, + SELECT: 13, + + LEFT: 37, + UP: 38, + RIGHT: 39, + DOWN: 40, + + PLAYPAUSE: 179, + REWIND: 227, + FORWARD:228 + }; + + $timeout (function() { + var st = '#'+$rootScope.dpadState+'-move-'; + // console.log ("IN STATE="+$rootScope.dpadState+ " with st="+st); + var keyCode=evt.keyCode; + var el, nextel; + + if (keyCode == keyCodes.REWIND) { + if (!$ionicSideMenuDelegate.isOpen()) { + $ionicSideMenuDelegate.toggleLeft(); + $rootScope.dpadState = "menu"; + $rootScope.dpadId = 0; + + } + else { + el = angular.element(document.querySelector(st +$rootScope.dpadId)); + if (el.length) el[0].classList.remove('dpadSelected'); + $ionicSideMenuDelegate.toggleLeft(); + $rootScope.dpadId = 0; + $rootScope.dpadState = $state.current.name.replace('app.',""); + } + console.log ("dpad State is: "+$rootScope.dpadState); + handled = true; + } + + else if (keyCode == keyCodes.SELECT ) { // select + if ($rootScope.dpadId >0) { + el = angular.element(document.querySelector('#'+$rootScope.dpadState+'-move-' +$rootScope.dpadId)); + // if in menu, unselect + if ($rootScope.dpadState == 'menu') { + if (el.length) { + el[0].classList.remove('dpadSelected'); + $rootScope.dpadId = 0; + } + } + el.triggerHandler('click'); + + } + handled = true; + } + + // arrows + else if (keyCode >= keyCodes.LEFT && keyCode <= keyCodes.DOWN) { + + // might be open by mouse or other event, so check first + if ($ionicSideMenuDelegate.isOpen() && $rootScope.dpadState != 'menu') { + $rootScope.dpadState = "menu"; + $rootScope.dpadId = 0; + } + + if ($rootScope.dpadId < 1) { + // console.log ("First dpad usage with st="+st); + $rootScope.dpadId = 1; + + //console.log ("looking for st="+st); + el = angular.element(document.querySelector(st+'1')); + if (el.length) { + el[0].classList.add('dpadSelected'); + el[0].scrollIntoView(); + } + + } else { + // unselect old + //console.log ("looking for st="+st); + el = angular.element(document.querySelector(st +$rootScope.dpadId)); + + var nextId = (keyCode == keyCodes.LEFT || keyCode == keyCodes.UP) ? $rootScope.dpadId -1: $rootScope.dpadId + 1; + nextel = angular.element(document.querySelector(st +nextId)); + if (nextel.length) { + if (el.length) el[0].classList.remove('dpadSelected'); + nextel[0].classList.add('dpadSelected'); + nextel[0].scrollIntoView(); + $rootScope.dpadId = nextId; + } + console.log ("dpadID="+$rootScope.dpadId+ " with state="+$rootScope.dpadState); + } + handled = true; + } + + + return handled; + + }); + } + // register callbacks for online/offline // lets see if it really works $rootScope.online = navigator.onLine; @@ -1370,9 +1489,12 @@ angular.module('zmApp', [ if (!$ionicSideMenuDelegate.isOpenLeft()) { e.preventDefault(); $ionicSideMenuDelegate.toggleLeft(); + + $rootScope.dState = "menu"; + $rootScope.dpadId = 0; //console.log("Status of SIDE MENU IS : " + $ionicSideMenuDelegate.isOpen()); } else { - + window.stop(); //ionic.Platform.exitApp(); //navigator.app.exitApp(); @@ -1420,26 +1542,29 @@ angular.module('zmApp', [ $rootScope.$on('$stateChangeStart', function (event, toState, toParams) { var requireLogin = toState.data.requireLogin; - + $rootScope.dpadId = 0; + //console.log("HERE"); if ($rootScope.apiValid == false && toState.name != 'app.invalidapi' && toState.data.requireLogin == true) { event.preventDefault(); - $state.transitionTo('app.invalidapi'); + $rootScope.dpadState = "invalidapi"; + $state.transitionTo('invalidapi'); return; } if (NVRDataModel.hasLoginInfo() || toState.data.requireLogin == false) { //console.log("State transition is authorized"); - + $rootScope.dpadState = toState.name.replace("app.",""); return; } else { NVRDataModel.log("In Auth State trans: Not logged in, requested to go to " + JSON.stringify(toState)); // event.preventDefault(); // - $state.transitionTo('app.login'); + $rootScope.dpadState = "login"; + $state.transitionTo('login'); } @@ -1452,6 +1577,7 @@ angular.module('zmApp', [ // for whatever reason, .go was resulting in digest loops. // if you don't prevent, states will stack event.preventDefault(); + $rootScope.dpadState = "login"; $state.transitionTo('app.login'); return; } |
