diff --git a/src/js/controllers/feedback/thanks.js b/src/js/controllers/feedback/complete.js similarity index 87% rename from src/js/controllers/feedback/thanks.js rename to src/js/controllers/feedback/complete.js index 7aa84334f..c337e14f9 100644 --- a/src/js/controllers/feedback/thanks.js +++ b/src/js/controllers/feedback/complete.js @@ -1,6 +1,6 @@ 'use strict'; -angular.module('copayApp.controllers').controller('thanksController', function($scope, $stateParams, $timeout, $log, platformInfo, configService, storageService) { +angular.module('copayApp.controllers').controller('completeController', function($scope, $stateParams, $timeout, $log, platformInfo, configService, storageService) { $scope.score = parseInt($stateParams.score); $scope.skipped = $stateParams.skipped == 'false' ? false : true; $scope.isCordova = platformInfo.isCordova; @@ -31,7 +31,12 @@ angular.module('copayApp.controllers').controller('thanksController', function($ }; $scope.$on("$ionicView.beforeEnter", function(event, data) { - storageService.setRateCardFlag('true', function() {}); + storageService.getFeedbackInfo(function(error, info) { + var feedbackInfo = JSON.parse(info); + feedbackInfo.sent = true; + storageService.setFeedbackInfo(JSON.stringify(feedbackInfo), function() {}); + }); + if (!$scope.isCordova) return; window.plugins.socialsharing.available(function(isAvailable) { diff --git a/src/js/controllers/feedback/rateAppStore.js b/src/js/controllers/feedback/rateApp.js similarity index 78% rename from src/js/controllers/feedback/rateAppStore.js rename to src/js/controllers/feedback/rateApp.js index b659fa516..64792fc51 100644 --- a/src/js/controllers/feedback/rateAppStore.js +++ b/src/js/controllers/feedback/rateApp.js @@ -1,6 +1,6 @@ 'use strict'; -angular.module('copayApp.controllers').controller('rateAppStoreController', function($scope, $state, $stateParams, externalLinkService, configService, gettextCatalog, platformInfo) { +angular.module('copayApp.controllers').controller('rateAppController', function($scope, $state, $stateParams, externalLinkService, configService, gettextCatalog, platformInfo) { $scope.score = parseInt($stateParams.score); var isAndroid = platformInfo.isAndroid; var isIOS = platformInfo.isIOS; @@ -8,14 +8,14 @@ angular.module('copayApp.controllers').controller('rateAppStoreController', func var config = configService.getSync(); $scope.skip = function() { - $state.go('feedback.thanks', { + $state.go('feedback.complete', { score: $scope.score, skipped: true }); }; $scope.sendFeedback = function() { - $state.go('feedback.sendFeedback', { + $state.go('feedback.send', { score: $scope.score }); }; diff --git a/src/js/controllers/feedback/rateCard.js b/src/js/controllers/feedback/rateCard.js index 8eaa98cfa..53504b8de 100644 --- a/src/js/controllers/feedback/rateCard.js +++ b/src/js/controllers/feedback/rateCard.js @@ -10,11 +10,11 @@ angular.module('copayApp.controllers').controller('rateCardController', function $scope.rateModal.remove(); } if ($scope.isCordova && $scope.score == 5) { - $state.go('feedback.rateAppStore', { + $state.go('feedback.rateApp', { score: $scope.score }); } else { - $state.go('feedback.sendFeedback', { + $state.go('feedback.send', { score: $scope.score }); } @@ -49,8 +49,10 @@ angular.module('copayApp.controllers').controller('rateCardController', function $scope.rateModal.hide(); $scope.rateModal.remove(); } else { - storageService.setRateCardFlag('true', function() { - $scope.hideRateCard.value = true; + storageService.getFeedbackInfo(function(error, info) { + var feedbackInfo = JSON.parse(info); + feedbackInfo.sent = true; + storageService.setFeedbackInfo(JSON.stringify(feedbackInfo), function() {}); }); } $timeout(function() { diff --git a/src/js/controllers/feedback/sendFeedback.js b/src/js/controllers/feedback/send.js similarity index 87% rename from src/js/controllers/feedback/sendFeedback.js rename to src/js/controllers/feedback/send.js index 8899301c3..fc8fa410c 100644 --- a/src/js/controllers/feedback/sendFeedback.js +++ b/src/js/controllers/feedback/send.js @@ -1,6 +1,6 @@ 'use strict'; -angular.module('copayApp.controllers').controller('sendFeedbackController', function($scope, $state, $log, $stateParams, gettextCatalog, popupService, configService, lodash, feedbackService, ongoingProcess) { +angular.module('copayApp.controllers').controller('sendController', function($scope, $state, $log, $stateParams, gettextCatalog, popupService, configService, lodash, feedbackService, ongoingProcess) { $scope.score = parseInt($stateParams.score); switch ($scope.score) { case 1: @@ -42,7 +42,7 @@ angular.module('copayApp.controllers').controller('sendFeedbackController', func popupService.showAlert(gettextCatalog.getString('Error'), gettextCatalog.getString('Could not send feedback')); return; } - $state.go('feedback.thanks', { + $state.go('feedback.complete', { score: $stateParams.score, skipped: skip }); diff --git a/src/js/controllers/onboarding/welcomeController.js b/src/js/controllers/onboarding/welcomeController.js index 3b74544a7..1a7e3a6a6 100644 --- a/src/js/controllers/onboarding/welcomeController.js +++ b/src/js/controllers/onboarding/welcomeController.js @@ -19,13 +19,7 @@ angular.module('copayApp.controllers').controller('welcomeController', function( $log.debug('Creating profile'); profileService.createProfile(function(err) { if (err) $log.warn(err); - setProfileCreationTime(); }); }; - function setProfileCreationTime() { - var now = moment().unix() * 1000 + 24 * 60 * 60 * 1000; - storageService.setProfileCreationTime(now, function() {}); - }; - }); diff --git a/src/js/controllers/tab-home.js b/src/js/controllers/tab-home.js index 93503cd77..67c8a5131 100644 --- a/src/js/controllers/tab-home.js +++ b/src/js/controllers/tab-home.js @@ -1,7 +1,7 @@ 'use strict'; angular.module('copayApp.controllers').controller('tabHomeController', - function($rootScope, $timeout, $scope, $state, $stateParams, $ionicModal, $ionicScrollDelegate, gettextCatalog, lodash, popupService, ongoingProcess, externalLinkService, latestReleaseService, profileService, walletService, configService, $log, platformInfo, storageService, txpModalService, $window, bitpayCardService, startupService, addressbookService) { + function($rootScope, $timeout, $scope, $state, $stateParams, $ionicModal, $ionicScrollDelegate, gettextCatalog, lodash, popupService, ongoingProcess, externalLinkService, latestReleaseService, profileService, walletService, configService, $log, platformInfo, storageService, txpModalService, $window, bitpayCardService, startupService, addressbookService, feedbackService) { var wallet; var listeners = []; var notifications = []; @@ -13,7 +13,7 @@ angular.module('copayApp.controllers').controller('tabHomeController', $scope.isCordova = platformInfo.isCordova; $scope.isAndroid = platformInfo.isAndroid; $scope.isNW = platformInfo.isNW; - $scope.hideRateCard = {}; + $scope.showRateCard = {}; $scope.$on("$ionicView.afterEnter", function() { startupService.ready(); @@ -37,13 +37,37 @@ angular.module('copayApp.controllers').controller('tabHomeController', }); } - storageService.getProfileCreationTime(function(error, time) { - var now = moment().unix() * 1000; - storageService.getRateCardFlag(function(error, value) { - $scope.hideRateCard.value = (value == 'true' || (time - now) > 0) ? true : false; - }); + storageService.getFeedbackInfo(function(error, info) { + if (!info) { + initFeedBackInfo(); + } else { + var feedbackInfo = JSON.parse(info); + //Check if current version is greater than saved version + var currentVersion = window.version; + var savedVersion = feedbackInfo.version; + var isVersionUpdated = feedbackService.isVersionUpdated(currentVersion, savedVersion); + if (!isVersionUpdated) { + initFeedBackInfo(); + return; + } + var now = moment().unix(); + var timeExceeded = (now - feedbackInfo.time) >= 24 * 60 * 60; + $scope.showRateCard.value = timeExceeded && !feedbackInfo.sent; + $timeout(function() { + $scope.$apply(); + }); + } }); + function initFeedBackInfo() { + var feedbackInfo = {}; + feedbackInfo.time = moment().unix(); + feedbackInfo.version = window.version; + feedbackInfo.sent = false; + storageService.setFeedbackInfo(JSON.stringify(feedbackInfo), function() { + $scope.showRateCard.value = false; + }); + }; }); $scope.$on("$ionicView.enter", function(event, data) { diff --git a/src/js/routes.js b/src/js/routes.js index 97cd6e6b6..a80c3e791 100644 --- a/src/js/routes.js +++ b/src/js/routes.js @@ -731,30 +731,30 @@ angular.module('copayApp').config(function(historicLogProvider, $provide, $logPr abstract: true, template: '' }) - .state('feedback.sendFeedback', { - url: '/sendFeedback/:score', + .state('feedback.send', { + url: '/send/:score', views: { 'feedback': { - controller: 'sendFeedbackController', - templateUrl: 'views/feedback/sendFeedback.html' + controller: 'sendController', + templateUrl: 'views/feedback/send.html' } } }) - .state('feedback.thanks', { - url: '/thanks/:score/:skipped', + .state('feedback.complete', { + url: '/complete/:score/:skipped', views: { 'feedback': { - controller: 'thanksController', - templateUrl: 'views/feedback/thanks.html' + controller: 'completeController', + templateUrl: 'views/feedback/complete.html' } } }) - .state('feedback.rateAppStore', { - url: '/rateAppStore/:score', + .state('feedback.rateApp', { + url: '/rateApp/:score', views: { 'feedback': { - controller: 'rateAppStoreController', - templateUrl: 'views/feedback/rateAppStore.html' + controller: 'rateAppController', + templateUrl: 'views/feedback/rateApp.html' } } }) diff --git a/src/js/services/feedbackService.js b/src/js/services/feedbackService.js index 0a1788edc..b35c4c323 100644 --- a/src/js/services/feedbackService.js +++ b/src/js/services/feedbackService.js @@ -24,5 +24,35 @@ angular.module('copayApp.services').factory('feedbackService', function($http, $ }; }; + root.isVersionUpdated = function(currentVersion, savedVersion) { + + if (!verifyTagFormat(currentVersion)) + return 'Cannot verify the format of version tag: ' + currentVersion; + if (!verifyTagFormat(savedVersion)) + return 'Cannot verify the format of the saved version tag: ' + savedVersion; + + var current = formatTagNumber(currentVersion); + var saved = formatTagNumber(savedVersion); + if (saved.major > current.major || (saved.major == current.major && saved.minor > current.minor)) + return false; + + return true; + + function verifyTagFormat(tag) { + var regex = /^v?\d+\.\d+\.\d+$/i; + return regex.exec(tag); + }; + + function formatTagNumber(tag) { + var formattedNumber = tag.replace(/^v/i, '').split('.'); + return { + major: +formattedNumber[0], + minor: +formattedNumber[1], + patch: +formattedNumber[2] + }; + }; + + }; + return root; }); diff --git a/src/js/services/storageService.js b/src/js/services/storageService.js index 8c956dc5f..6921b4f9b 100644 --- a/src/js/services/storageService.js +++ b/src/js/services/storageService.js @@ -221,12 +221,12 @@ angular.module('copayApp.services') storage.remove('profile', cb); }; - root.setProfileCreationTime = function(time, cb) { - storage.set('profileCreationTime', time, cb); + root.setFeedbackInfo = function(feedbackValues, cb) { + storage.set('feedback', feedbackValues, cb); }; - root.getProfileCreationTime = function(cb) { - storage.get('profileCreationTime', cb); + root.getFeedbackInfo = function(cb) { + storage.get('feedback', cb); }; root.storeFocusedWalletId = function(id, cb) { @@ -294,14 +294,6 @@ angular.module('copayApp.services') storage.set('homeTip', val, cb); }; - root.getRateCardFlag = function(cb) { - storage.get('rateCardFlag', cb); - }; - - root.setRateCardFlag = function(val, cb) { - storage.set('rateCardFlag', val, cb); - }; - root.setHideBalanceFlag = function(walletId, val, cb) { storage.set('hideBalance-' + walletId, val, cb); }; diff --git a/src/sass/views/feedback/thanks.scss b/src/sass/views/feedback/complete.scss similarity index 97% rename from src/sass/views/feedback/thanks.scss rename to src/sass/views/feedback/complete.scss index 2d86c357f..f7a7a5277 100644 --- a/src/sass/views/feedback/thanks.scss +++ b/src/sass/views/feedback/complete.scss @@ -1,4 +1,4 @@ -#thanks-feedback { +#complete { background-color: #ffffff; .item-heading { border-style: none; diff --git a/src/sass/views/feedback/rateAppStore.scss b/src/sass/views/feedback/rateApp.scss similarity index 96% rename from src/sass/views/feedback/rateAppStore.scss rename to src/sass/views/feedback/rateApp.scss index 5003e6b02..779cffd67 100644 --- a/src/sass/views/feedback/rateAppStore.scss +++ b/src/sass/views/feedback/rateApp.scss @@ -1,4 +1,4 @@ -#rate-app-store { +#rate-app { background-color: #ffffff; .skip { margin: 10px; diff --git a/src/sass/views/feedback/sendFeedBack.scss b/src/sass/views/feedback/send.scss similarity index 100% rename from src/sass/views/feedback/sendFeedBack.scss rename to src/sass/views/feedback/send.scss diff --git a/src/sass/views/views.scss b/src/sass/views/views.scss index 5db678130..f67826f61 100644 --- a/src/sass/views/views.scss +++ b/src/sass/views/views.scss @@ -19,9 +19,9 @@ @import "zero-state"; @import "onboarding/onboarding"; @import "feedback/rateCard"; -@import "feedback/sendFeedback"; -@import "feedback/thanks"; -@import "feedback/rateAppStore"; +@import "feedback/send"; +@import "feedback/complete"; +@import "feedback/rateApp"; @import "includes/actionSheet"; @import "export"; @import "import"; diff --git a/www/views/feedback/thanks.html b/www/views/feedback/complete.html similarity index 95% rename from www/views/feedback/thanks.html rename to www/views/feedback/complete.html index 826f65675..36a47296c 100644 --- a/www/views/feedback/thanks.html +++ b/www/views/feedback/complete.html @@ -1,7 +1,7 @@ - +
- +
Invite friends to BitPay Wallet!
diff --git a/www/views/feedback/rateAppStore.html b/www/views/feedback/rateApp.html similarity index 97% rename from www/views/feedback/rateAppStore.html rename to www/views/feedback/rateApp.html index 3da6ed36b..524ba9781 100644 --- a/www/views/feedback/rateAppStore.html +++ b/www/views/feedback/rateApp.html @@ -1,4 +1,4 @@ - +
diff --git a/www/views/feedback/sendFeedback.html b/www/views/feedback/send.html similarity index 100% rename from www/views/feedback/sendFeedback.html rename to www/views/feedback/send.html diff --git a/www/views/tab-home.html b/www/views/tab-home.html index 7ea9801d1..03b67509f 100644 --- a/www/views/tab-home.html +++ b/www/views/tab-home.html @@ -13,7 +13,7 @@
An update to this app is available
-
+