From 8545d9ea546b9459245e3aaa83b12bc09e30b408 Mon Sep 17 00:00:00 2001 From: Pliable Pixels Date: Thu, 8 Sep 2016 16:52:32 -0400 Subject: #322 - go through run time permission flow for Android Former-commit-id: 029648949ceacb1ef96b073b9d1c5d5857fb0bc5 --- package.json | 3 ++- plugins/fetch.json | 8 ++++++++ www/js/EventModalCtrl.js | 37 +++++++++++++++++++++++++++++++++++-- www/js/MonitorModalCtrl.js | 36 +++++++++++++++++++++++++++++++++--- www/templates/events-modal.html | 4 ++-- www/templates/monitors-modal.html | 2 +- 6 files changed, 81 insertions(+), 9 deletions(-) diff --git a/package.json b/package.json index d05129e4..acb0583a 100644 --- a/package.json +++ b/package.json @@ -81,7 +81,8 @@ { "locator": "https://github.com/hypery2k/cordova-certificate-plugin", "id": "cordova-plugin-certificates" - } + }, + "cordova-plugin-android-permissions" ], "cordovaPlatforms": [ {}, diff --git a/plugins/fetch.json b/plugins/fetch.json index adfb9ae0..44bf03fa 100644 --- a/plugins/fetch.json +++ b/plugins/fetch.json @@ -194,5 +194,13 @@ }, "is_top_level": true, "variables": {} + }, + "cordova-plugin-android-permissions": { + "source": { + "type": "registry", + "id": "cordova-plugin-android-permissions" + }, + "is_top_level": true, + "variables": {} } } \ No newline at end of file diff --git a/www/js/EventModalCtrl.js b/www/js/EventModalCtrl.js index 247b486c..8a2c3c4c 100644 --- a/www/js/EventModalCtrl.js +++ b/www/js/EventModalCtrl.js @@ -406,7 +406,40 @@ angular.module('zmApp.controllers').controller('EventModalCtrl', ['$scope', '$ro // Saves a snapshot of the monitor image to phone storage //----------------------------------------------------------------------- - $scope.saveEventImageToPhone = function (onlyAlarms) { + + $scope.saveEventImageToPhoneWithPerms = function (onlyAlarms) + { + + if ($rootScope.platformOS != 'android') + { + processSaveEventImageToPhone(onlyAlarms); + } + + // if we are on android do the 6.x+ hasPermissions flow + NVRDataModel.debug("EventModalCtrl: Permission checking for write"); + var permissions = cordova.plugins.permissions; + permissions.hasPermission(permissions.WRITE_EXTERNAL_STORAGE, checkPermissionCallback, null); + + function checkPermissionCallback(status) { + if (!status.hasPermission) + { + SaveError("No permission to write to external storage"); + } + permissions.requestPermission(permissions.WRITE_EXTERNAL_STORAGE, succ,err); + } + + function succ(s) + { + processSaveEventImageToPhone(onlyAlarms); + } + function err(e) + { + SaveError ("Error in requestPermission"); + } + }; + + + function processSaveEventImageToPhone (onlyAlarms) { if ($scope.loginData.useNphZmsForEvents) { NVRDataModel.log("Use ZMS stream to save to phone"); @@ -418,7 +451,7 @@ angular.module('zmApp.controllers').controller('EventModalCtrl', ['$scope', '$ro } - }; + } function saveEventImageToPhoneZms(onlyAlarms) { // The strategy here is to build the array now so we can grab frames diff --git a/www/js/MonitorModalCtrl.js b/www/js/MonitorModalCtrl.js index e7e22e86..84553d6e 100644 --- a/www/js/MonitorModalCtrl.js +++ b/www/js/MonitorModalCtrl.js @@ -648,7 +648,7 @@ angular.module('zmApp.controllers').controller('MonitorModalCtrl', ['$scope', '$ noBackdrop: true, duration: 2000 }); - NVRDataModel.log("Error saving image: " + e.message); + NVRDataModel.log("Error saving image: " + e); //console.log("***ERROR"); } @@ -761,7 +761,37 @@ angular.module('zmApp.controllers').controller('MonitorModalCtrl', ['$scope', '$ // Saves a snapshot of the monitor image to phone storage //----------------------------------------------------------------------- - $scope.saveImageToPhone = function (mid) { + $scope.saveImageToPhoneWithPerms = function (mid) + { + if ($rootScope.platformOS != 'android') + { + saveImageToPhone(mid); + } + + + NVRDataModel.debug("ModalCtrl: Permission checking for write"); + var permissions = cordova.plugins.permissions; + permissions.hasPermission(permissions.WRITE_EXTERNAL_STORAGE, checkPermissionCallback, null); + + function checkPermissionCallback(status) { + if (!status.hasPermission) + { + SaveError("No permission to write to external storage"); + } + permissions.requestPermission(permissions.WRITE_EXTERNAL_STORAGE, succ,err); + } + + function succ(s) + { + saveImageToPhone(mid); + } + function err(e) + { + SaveError ("Error in requestPermission"); + } + }; + + function saveImageToPhone(mid) { $ionicLoading.show({ template: $translate.instant('kSavingSnapshot') + '...', noBackdrop: true, @@ -820,7 +850,7 @@ angular.module('zmApp.controllers').controller('MonitorModalCtrl', ['$scope', '$ SaveError(e.message); } - }; + } diff --git a/www/templates/events-modal.html b/www/templates/events-modal.html index 41f7d0eb..355ff4f2 100644 --- a/www/templates/events-modal.html +++ b/www/templates/events-modal.html @@ -129,11 +129,11 @@
  • - +
  • - +
  • diff --git a/www/templates/monitors-modal.html b/www/templates/monitors-modal.html index 8833a47c..33ddc865 100644 --- a/www/templates/monitors-modal.html +++ b/www/templates/monitors-modal.html @@ -100,7 +100,7 @@