summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPliable Pixels <pliablepixels@gmail.com>2016-09-08 16:52:32 -0400
committerPliable Pixels <pliablepixels@gmail.com>2016-09-08 16:52:32 -0400
commit8545d9ea546b9459245e3aaa83b12bc09e30b408 (patch)
tree2ddc48b0cfb64748bac5e199e77750b02a76ca65
parentd093aa7ff439c56a309e1778ecb66b7b13480c73 (diff)
#322 - go through run time permission flow for Android
Former-commit-id: 029648949ceacb1ef96b073b9d1c5d5857fb0bc5
-rw-r--r--package.json3
-rw-r--r--plugins/fetch.json8
-rw-r--r--www/js/EventModalCtrl.js37
-rw-r--r--www/js/MonitorModalCtrl.js36
-rw-r--r--www/templates/events-modal.html4
-rw-r--r--www/templates/monitors-modal.html2
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 @@
</li>
<li ng-if="defaultVideo==''">
- <a href="" ng-click="saveEventImageToPhone(false)"> <i class="ion-ios-camera"></i></a>
+ <a href="" ng-click="saveEventImageToPhoneWithPerms(false)"> <i class="ion-ios-camera"></i></a>
</li>
<li ng-if="defaultVideo==''">
- <a href="" ng-click="saveEventImageToPhone(true)"> <i class="ion-android-notifications"></i></a>
+ <a href="" ng-click="saveEventImageToPhoneWithPerms(true)"> <i class="ion-android-notifications"></i></a>
</li>
<li ng-if="$root.isAlarm">
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 @@
<ul>
<li>
- <a href="" ng-click="saveImageToPhone(monitorId)"> <i class="icon ion-ios-camera"></i></a>
+ <a href="" ng-click="saveImageToPhoneWithPerms(monitorId)"> <i class="icon ion-ios-camera"></i></a>
</li>
<li ng-if="$root.platformOS == 'desktop'">