From e5a89293c0c0333f6e6409f2b14e25bf6eea3298 Mon Sep 17 00:00:00 2001 From: Jason Dreyzehner Date: Wed, 11 Jan 2017 19:43:21 -0500 Subject: [PATCH 1/2] fix(scanner): avoid pre-initializing scanner on desktop --- src/js/controllers/tab-scan.js | 6 ++++-- src/js/services/scannerService.js | 18 +++++++++--------- 2 files changed, 13 insertions(+), 11 deletions(-) diff --git a/src/js/controllers/tab-scan.js b/src/js/controllers/tab-scan.js index f04bad7cf..c7e4375c3 100644 --- a/src/js/controllers/tab-scan.js +++ b/src/js/controllers/tab-scan.js @@ -57,8 +57,10 @@ angular.module('copayApp.controllers').controller('tabScanController', function( $scope.$on("$ionicView.afterEnter", function() { // try initializing and refreshing status any time the view is entered - scannerService.gentleInitialize(); - scannerService.resumePreview(); + if(!scannerService.isInitialized()){ + scannerService.gentleInitialize(); + } + activate(); }); function activate(){ diff --git a/src/js/services/scannerService.js b/src/js/services/scannerService.js index 12f05867e..8bba2032c 100644 --- a/src/js/services/scannerService.js +++ b/src/js/services/scannerService.js @@ -8,8 +8,9 @@ angular.module('copayApp.services').service('scannerService', function($log, $ti var backCamera = true; // the plugin defaults to the back camera // Initalize known capabilities - var isAvailable = isDesktop? false: true; // assume camera exists on mobile - var hasPermission = isDesktop? true: false; // assume desktop has permission + // Assume camera is available. If init fails, we'll set this to false. + var isAvailable = true; + var hasPermission = false; var isDenied = false; var isRestricted = false; var canEnableLight = false; @@ -67,7 +68,7 @@ angular.module('copayApp.services').service('scannerService', function($log, $ti * The `status` of QRScanner is returned to the callback. */ this.gentleInitialize = function(callback) { - if(initializeStarted){ + if(initializeStarted && !isDesktop){ QRScanner.getStatus(function(status){ _completeInitialization(status, callback); }); @@ -87,8 +88,7 @@ angular.module('copayApp.services').service('scannerService', function($log, $ti } }); } else { - $log.debug('Camera permission assumed on desktop.'); - initialize(callback); + $log.debug('To avoid flashing the privacy light, we do not pre-initialize the camera on desktop.'); } }; @@ -96,14 +96,13 @@ angular.module('copayApp.services').service('scannerService', function($log, $ti $log.debug('Initializing scanner...'); QRScanner.prepare(function(err, status){ if(err){ + isAvailable = false; $log.error(err); // does not return `status` if there is an error QRScanner.getStatus(function(status){ _completeInitialization(status, callback); - }); } else { - isAvailable = true; _completeInitialization(status, callback); } }); @@ -130,8 +129,8 @@ angular.module('copayApp.services').service('scannerService', function($log, $ti var nextHide = null; var nextDestroy = null; - var hideAfterSeconds = 10; - var destroyAfterSeconds = 5 * 60; + var hideAfterSeconds = 7; + var destroyAfterSeconds = 60; /** * (Re)activate the QRScanner, and cancel the timeouts if present. @@ -142,6 +141,7 @@ angular.module('copayApp.services').service('scannerService', function($log, $ti this.activate = function(callback) { $log.debug('Activating scanner...'); QRScanner.show(function(status){ + initializeCompleted = true; _checkCapabilities(status); if(typeof callback === "function"){ callback(status); From b31719dbeba0713069ee09a662c6677eb05eab5a Mon Sep 17 00:00:00 2001 From: Jason Dreyzehner Date: Fri, 20 Jan 2017 09:09:36 -0500 Subject: [PATCH 2/2] fix(scanner): fix a bug which can cause the scanner to remain active indefinitely fixes #4967 --- src/js/controllers/tab-scan.js | 3 ++- src/js/services/scannerService.js | 2 +- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/src/js/controllers/tab-scan.js b/src/js/controllers/tab-scan.js index c7e4375c3..88542c2dc 100644 --- a/src/js/controllers/tab-scan.js +++ b/src/js/controllers/tab-scan.js @@ -81,6 +81,8 @@ angular.module('copayApp.controllers').controller('tabScanController', function( handleSuccessfulScan(contents); } }); + // resume preview if paused + scannerService.resumePreview(); }); }); } @@ -103,7 +105,6 @@ angular.module('copayApp.controllers').controller('tabScanController', function( } $rootScope.$on('incomingDataMenu.menuHidden', function() { - scannerService.resumePreview(); activate(); }); diff --git a/src/js/services/scannerService.js b/src/js/services/scannerService.js index 8bba2032c..0c3f28916 100644 --- a/src/js/services/scannerService.js +++ b/src/js/services/scannerService.js @@ -129,7 +129,7 @@ angular.module('copayApp.services').service('scannerService', function($log, $ti var nextHide = null; var nextDestroy = null; - var hideAfterSeconds = 7; + var hideAfterSeconds = 5; var destroyAfterSeconds = 60; /**