diff --git a/src/js/controllers/feedback/rateApp.js b/src/js/controllers/feedback/rateApp.js deleted file mode 100644 index 6ae485a3a..000000000 --- a/src/js/controllers/feedback/rateApp.js +++ /dev/null @@ -1,53 +0,0 @@ -'use strict'; - -angular.module('copayApp.controllers').controller('rateAppController', function($scope, $state, $stateParams, $window, lodash, externalLinkService, configService, platformInfo, feedbackService, ongoingProcess, popupService, appConfigService) { - $scope.score = parseInt($stateParams.score); - $scope.appName = appConfigService.nameCase; - var isAndroid = platformInfo.isAndroid; - var isIOS = platformInfo.isIOS; - - var config = configService.getSync(); - - $scope.skip = function() { - var dataSrc = { - "Email": lodash.values(config.emailFor)[0] || ' ', - "Feedback": ' ', - "Score": $stateParams.score, - "AppVersion": $window.version, - "Platform": ionic.Platform.platform(), - "DeviceVersion": ionic.Platform.version() - }; - feedbackService.send(dataSrc, function(err) { - if (err) { - // try to send, but not essential, since the user didn't add a message - $log.warn('Could not send feedback.'); - } - }); - $state.go('tabs.rate.complete', { - score: $stateParams.score, - skipped: true - }); - }; - - $scope.sendFeedback = function() { - $state.go('tabs.rate.send', { - score: $scope.score - }); - }; - - $scope.goAppStore = function() { - var defaults = configService.getDefaults(); - var url; - if (isAndroid) - url = defaults.rateApp.bitcoincom.android; - if (isIOS) - url = defaults.rateApp.bitcoincom.ios; - - externalLinkService.open(url); - $state.go('tabs.rate.complete', { - score: $stateParams.score, - skipped: true, - rated: true - }); - }; -}); diff --git a/src/js/controllers/feedback/rateCard.js b/src/js/controllers/feedback/rateCard.js deleted file mode 100644 index abc109796..000000000 --- a/src/js/controllers/feedback/rateCard.js +++ /dev/null @@ -1,60 +0,0 @@ -'use strict'; - -angular.module('copayApp.controllers').controller('rateCardController', function($scope, $state, $timeout, $log, gettextCatalog, platformInfo, storageService, appConfigService) { - - $scope.isCordova = platformInfo.isCordova; - $scope.score = 0; - $scope.appName = appConfigService.nameCase; - - $scope.goFeedbackFlow = function() { - $scope.hideCard(); - if ($scope.isCordova && $scope.score == 5) { - $state.go('tabs.rate.rateApp', { - score: $scope.score - }); - } else { - $state.go('tabs.rate.send', { - score: $scope.score - }); - } - }; - - $scope.setScore = function(score) { - $scope.score = score; - switch ($scope.score) { - case 1: - $scope.button_title = gettextCatalog.getString("I think this app is terrible."); - break; - case 2: - $scope.button_title = gettextCatalog.getString("I don't like it"); - break; - case 3: - $scope.button_title = gettextCatalog.getString("Meh - it's alright"); - break; - case 4: - $scope.button_title = gettextCatalog.getString("I like the app"); - break; - case 5: - $scope.button_title = gettextCatalog.getString("This app is fantastic!"); - break; - } - $timeout(function() { - $scope.$apply(); - }); - }; - - $scope.hideCard = function() { - $log.debug('Feedback card dismissed.') - storageService.getFeedbackInfo(function(error, info) { - var feedbackInfo = JSON.parse(info); - feedbackInfo.sent = true; - storageService.setFeedbackInfo(JSON.stringify(feedbackInfo), function() { - $scope.showRateCard.value = false; - $timeout(function() { - $scope.$apply(); - }, 100); - }); - }); - } - -}); diff --git a/src/js/controllers/feedback/send.js b/src/js/controllers/feedback/send.js deleted file mode 100644 index 23fb0ea59..000000000 --- a/src/js/controllers/feedback/send.js +++ /dev/null @@ -1,102 +0,0 @@ -'use strict'; - -angular.module('copayApp.controllers').controller('sendController', function($scope, $state, $log, $timeout, $stateParams, $ionicNavBarDelegate, $ionicHistory, $ionicConfig, $window, gettextCatalog, popupService, configService, lodash, feedbackService, ongoingProcess, platformInfo, appConfigService) { - - $scope.sendFeedback = function(feedback, goHome) { - - var config = configService.getSync(); - - var dataSrc = { - "Email": lodash.values(config.emailFor)[0] || ' ', - "Feedback": goHome ? ' ' : feedback, - "Score": $stateParams.score || ' ', - "AppVersion": $window.version, - "Platform": ionic.Platform.platform(), - "DeviceVersion": ionic.Platform.version() - }; - - if (!goHome) ongoingProcess.set('sendingFeedback', true); - feedbackService.send(dataSrc, function(err) { - if (goHome) return; - ongoingProcess.set('sendingFeedback', false); - if (err) { - popupService.showAlert(gettextCatalog.getString('Error'), gettextCatalog.getString('Feedback could not be submitted. Please try again later.')); - return; - } - if (!$stateParams.score) { - popupService.showAlert(gettextCatalog.getString('Thank you!'), gettextCatalog.getString('A member of the team will review your feedback as soon as possible.'), function() { - $scope.feedback.value = ''; - $ionicHistory.nextViewOptions({ - disableAnimate: false, - historyRoot: true - }); - $ionicHistory.goBack(); - }, gettextCatalog.getString('Finish')); - return; - } - $state.go('tabs.rate.complete', { - score: $stateParams.score - }); - }); - if (goHome) $state.go('tabs.home'); - }; - - $scope.$on("$ionicView.beforeLeave", function(event, data) { - $ionicConfig.views.swipeBackEnabled(true); - }); - - $scope.$on("$ionicView.enter", function(event, data) { - if ($scope.score) - $ionicConfig.views.swipeBackEnabled(false); - }); - - $scope.$on("$ionicView.beforeEnter", function(event, data) { - $scope.isCordova = platformInfo.isCordova; - $scope.score = (data.stateParams && data.stateParams.score) ? parseInt(data.stateParams.score) : null; - $scope.feedback = {}; - - switch ($scope.score) { - case 1: - $scope.reaction = "Ouch!"; - $scope.comment = gettextCatalog.getString("There's obviously something we're doing wrong.") + ' ' + gettextCatalog.getString("How could we improve your experience?"); - break; - case 2: - $scope.reaction = gettextCatalog.getString("Oh no!"); - $scope.comment = gettextCatalog.getString("There's obviously something we're doing wrong.") + ' ' + gettextCatalog.getString("How could we improve your experience?"); - break; - case 3: - $scope.reaction = "Hmm..."; - $scope.comment = gettextCatalog.getString("We'd love to do better.") + ' ' + gettextCatalog.getString("How could we improve your experience?"); - break; - case 4: - $scope.reaction = gettextCatalog.getString("Thanks!"); - $scope.comment = gettextCatalog.getString("That's exciting to hear. We'd love to earn that fifth star from you – how could we improve your experience?"); - break; - case 5: - $scope.reaction = gettextCatalog.getString("Thank you!"); - $scope.comment = gettextCatalog.getString("We're always looking for ways to improve {{appName}}.", { - appName: appConfigService.nameCase - }) + ' ' + gettextCatalog.getString("Is there anything we could do better?"); - break; - default: - $scope.justFeedback = true; - $scope.comment = gettextCatalog.getString("We're always looking for ways to improve {{appName}}. How could we improve your experience?", { - appName: appConfigService.nameCase - }); - break; - } - }); - - $scope.$on("$ionicView.afterEnter", function() { - $scope.showForm = true; - }); - - $scope.goBack = function() { - $ionicHistory.nextViewOptions({ - disableAnimate: false, - historyRoot: true - }); - $ionicHistory.goBack(); - }; - -}); diff --git a/src/js/controllers/feedback/complete.js b/src/js/controllers/shareApp.js similarity index 77% rename from src/js/controllers/feedback/complete.js rename to src/js/controllers/shareApp.js index 905880901..ba3fdedff 100644 --- a/src/js/controllers/feedback/complete.js +++ b/src/js/controllers/shareApp.js @@ -1,6 +1,6 @@ 'use strict'; -angular.module('copayApp.controllers').controller('completeController', function($scope, $stateParams, $timeout, $log, $ionicHistory, $state, $ionicNavBarDelegate, $ionicConfig, platformInfo, configService, storageService, lodash, appConfigService, gettextCatalog) { +angular.module('copayApp.controllers').controller('shareAppController', function($scope, $stateParams, $timeout, $log, $ionicHistory, $state, $ionicNavBarDelegate, $ionicConfig, platformInfo, configService, storageService, lodash, appConfigService, gettextCatalog) { $scope.isCordova = platformInfo.isCordova; $scope.title = gettextCatalog.getString("Share {{appName}}", { appName: appConfigService.nameCase @@ -57,28 +57,8 @@ angular.module('copayApp.controllers').controller('completeController', function $ionicConfig.views.swipeBackEnabled(true); }); - $scope.$on("$ionicView.enter", function() { - if (!$scope.fromSettings) - $ionicConfig.views.swipeBackEnabled(false); - }); - $scope.$on("$ionicView.beforeEnter", function(event, data) { - $scope.score = (data.stateParams && data.stateParams.score) ? parseInt(data.stateParams.score) : null; - $scope.skipped = (data.stateParams && data.stateParams.skipped) ? true : false; - $scope.rated = (data.stateParams && data.stateParams.rated) ? true : false; - $scope.fromSettings = (data.stateParams && data.stateParams.fromSettings) ? true : false; - - if (!$scope.fromSettings) { - $ionicNavBarDelegate.showBackButton(false); - } else { - $ionicNavBarDelegate.showBackButton(true); - } - - storageService.getFeedbackInfo(function(error, info) { - var feedbackInfo = lodash.isString(info) ? JSON.parse(info) : null; - feedbackInfo.sent = true; - storageService.setFeedbackInfo(JSON.stringify(feedbackInfo), function() {}); - }); + $ionicNavBarDelegate.showBackButton(true); if (!$scope.isCordova) return; $scope.animate = true; @@ -133,13 +113,4 @@ angular.module('copayApp.controllers').controller('completeController', function } }, 100); }); - - $scope.close = function() { - $ionicHistory.nextViewOptions({ - disableAnimate: false, - historyRoot: true - }); - if ($scope.score == 5) $ionicHistory.goBack(-3); - else $ionicHistory.goBack(-2); - }; }); diff --git a/src/js/controllers/tab-home.js b/src/js/controllers/tab-home.js index 1332287b6..56ce3279f 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, $window, gettextCatalog, lodash, popupService, ongoingProcess, externalLinkService, latestReleaseService, profileService, walletService, configService, $log, platformInfo, storageService, txpModalService, appConfigService, startupService, addressbookService, feedbackService, bwcError, nextStepsService, buyAndSellService, homeIntegrationsService, bitpayCardService, pushNotificationsService, timeService, bitcoincomService, pricechartService, firebaseEventsService, servicesService, shapeshiftService, $ionicNavBarDelegate, signVerifyMessageService) { + function($rootScope, $timeout, $scope, $state, $stateParams, $ionicModal, $ionicScrollDelegate, $window, gettextCatalog, lodash, popupService, ongoingProcess, externalLinkService, latestReleaseService, profileService, walletService, configService, $log, platformInfo, storageService, txpModalService, appConfigService, startupService, addressbookService, bwcError, nextStepsService, buyAndSellService, homeIntegrationsService, bitpayCardService, pushNotificationsService, timeService, bitcoincomService, pricechartService, firebaseEventsService, servicesService, shapeshiftService, $ionicNavBarDelegate, signVerifyMessageService) { var wallet; var listeners = []; var notifications = []; @@ -14,7 +14,6 @@ angular.module('copayApp.controllers').controller('tabHomeController', $scope.isAndroid = platformInfo.isAndroid; $scope.isWindowsPhoneApp = platformInfo.isCordova && platformInfo.isWP; $scope.isNW = platformInfo.isNW; - $scope.showRateCard = {}; $scope.showServices = false; $scope.$on("$ionicView.afterEnter", function() { @@ -42,43 +41,6 @@ angular.module('copayApp.controllers').controller('tabHomeController', } }); } - - storageService.getFeedbackInfo(function(error, info) { - - if ($scope.isWindowsPhoneApp) { - $scope.showRateCard.value = false; - return; - } - if (!info) { - initFeedBackInfo(); - } else { - var feedbackInfo = JSON.parse(info); - //Check if current version is greater than saved version - var currentVersion = $scope.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 * 7 * 60 * 60; - $scope.showRateCard.value = timeExceeded && !feedbackInfo.sent; - $timeout(function() { - $scope.$apply(); - }); - } - }); - - function initFeedBackInfo() { - var feedbackInfo = {}; - feedbackInfo.time = moment().unix(); - feedbackInfo.version = $scope.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 82987d1ac..63f92ef8f 100644 --- a/src/js/routes.js +++ b/src/js/routes.js @@ -796,46 +796,14 @@ angular.module('copayApp').config(function(historicLogProvider, $provide, $logPr }, }) .state('tabs.shareApp', { - url: '/shareApp/:score/:skipped/:fromSettings', + url: '/shareApp', views: { 'tab-settings@tabs': { - controller: 'completeController', - templateUrl: 'views/feedback/complete.html' + controller: 'shareAppController', + templateUrl: 'views/shareApp.html' } } }) - .state('tabs.rate', { - url: '/rate', - abstract: true - }) - .state('tabs.rate.send', { - url: '/send/:score', - views: { - 'tab-home@tabs': { - templateUrl: 'views/feedback/send.html', - controller: 'sendController' - } - } - }) - .state('tabs.rate.complete', { - url: '/complete/:score/:skipped', - views: { - 'tab-home@tabs': { - controller: 'completeController', - templateUrl: 'views/feedback/complete.html' - } - } - }) - .state('tabs.rate.rateApp', { - url: '/rateApp/:score', - views: { - 'tab-home@tabs': { - controller: 'rateAppController', - templateUrl: 'views/feedback/rateApp.html' - } - } - }) - /* * * Buy or Sell Bitcoin diff --git a/src/js/services/feedbackService.js b/src/js/services/feedbackService.js deleted file mode 100644 index ae4711d27..000000000 --- a/src/js/services/feedbackService.js +++ /dev/null @@ -1,59 +0,0 @@ -'use strict'; -angular.module('copayApp.services').factory('feedbackService', function($http, $log, $httpParamSerializer, configService) { - var root = {}; -// var URL = "https://script.google.com/macros/s/1pWGRxVSUX9CxPqNAKZTppWHtDvyVtZv9HteY_TRQbWc/exec"; - var URL = "https://wallet-data.bitcoin.com/feedback.php"; - - root.send = function(dataSrc, cb) { - $http(_post(dataSrc)).then(function() { - $log.info("SUCCESS: Feedback sent"); - return cb(); - }, function(err) { - $log.info("ERROR: Feedback sent anyway."); - return cb(err); - }); - }; - - var _post = function(dataSrc) { - return { - method: 'POST', - url: URL, - headers: { - 'content-type': 'application/x-www-form-urlencoded; charset=UTF-8' - }, - data: $httpParamSerializer(dataSrc) - }; - }; - - 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 a2d85950b..154391e55 100644 --- a/src/js/services/storageService.js +++ b/src/js/services/storageService.js @@ -250,14 +250,6 @@ angular.module('copayApp.services') }); }; - root.setFeedbackInfo = function(feedbackValues, cb) { - storage.set('feedback', feedbackValues, cb); - }; - - root.getFeedbackInfo = function(cb) { - storage.get('feedback', cb); - }; - root.storeFocusedWalletId = function(id, cb) { storage.set('focusedWalletId', id || '', cb); }; diff --git a/src/sass/views/feedback/rateApp.scss b/src/sass/views/feedback/rateApp.scss deleted file mode 100644 index 8a4cd2b8e..000000000 --- a/src/sass/views/feedback/rateApp.scss +++ /dev/null @@ -1,38 +0,0 @@ -#rate-app { - background-color: #ffffff; - text-align: center; - .skip-rating { - color: $v-dark-gray; - position: absolute; - top: 5px; - right: 10px; - padding: 15px; - } - .icon-svg > img { - width: 80px; - height: 80px; - margin-top: 15px; - } - .feedback-title { - font-size: 20px; - font-weight: bold; - color: $v-dark-gray; - margin: 80px 50px 10px; - text-align: center; - } - .share-the-love-illustration { - width: 5rem; - margin: 1rem; - } - .subtitle { - padding: 10px 30px 20px 40px; - color: $v-mid-gray; - } - .rate-buttons { - bottom: 0; - width: 100%; - position: absolute; - background-color: $v-subtle-gray; - padding: 30px 0 15px; - } -} diff --git a/src/sass/views/feedback/rateCard.scss b/src/sass/views/feedback/rateCard.scss deleted file mode 100644 index 9d57643d6..000000000 --- a/src/sass/views/feedback/rateCard.scss +++ /dev/null @@ -1,18 +0,0 @@ -#rate-card { - .item-heading { - font-weight: 700; - } - .row { - border: none; - } - .item-icon-right { - margin: 0; - } - .feedback-flow-button { - margin-bottom: 20px; - } - .icon-svg > img { - height: 1.8rem; - margin-bottom: 5px; - } -} diff --git a/src/sass/views/feedback/send.scss b/src/sass/views/feedback/send.scss deleted file mode 100644 index 807c4f8c5..000000000 --- a/src/sass/views/feedback/send.scss +++ /dev/null @@ -1,54 +0,0 @@ -#send-feedback { - @extend .deflash-blue; - background-color: #ffffff; - .row { - border: none; - } - .skip { - color: rgba(255, 255, 255, 0.3); - } - .feedback-heading { - padding-top: 20px - } - .feedback-title { - padding-left: 10px; - font-size: 20px; - font-weight: bold; - color: $v-dark-gray; - } - .rating { - text-align: right; - padding-right: 15px; - } - .comment { - padding: 0 20px 20px; - font-size: 1rem; - line-height: 1.5em; - font-weight: 300; - color: $v-dark-gray; - } - .user-feedback { - border-top: 1px solid $v-subtle-gray; - border-bottom: 1px solid $v-subtle-gray; - padding: 20px; - width: 100%; - margin-bottom: 20px; - -webkit-appearance: none; - } - .send-feedback-star { - height: 1rem; - margin-left: 5px; - } - .form-fade-in { - opacity: 0; - animation-name: fadeIn; - animation-duration: .5s; - animation-fill-mode: forwards; - animation-timing-function: ease-in; - } -} - -@keyframes fadeIn { - from { opacity: 0; } - to { opacity: 1; } -} diff --git a/src/sass/views/feedback/complete.scss b/src/sass/views/shareApp.scss similarity index 86% rename from src/sass/views/feedback/complete.scss rename to src/sass/views/shareApp.scss index bb2e75ea6..9a0ed0698 100644 --- a/src/sass/views/feedback/complete.scss +++ b/src/sass/views/shareApp.scss @@ -1,6 +1,6 @@ -#complete { +#share-app { background-color: #fff; - .complete-layout { + .share-app-layout { display: flex; flex-direction: column; height: 100%; @@ -22,17 +22,6 @@ width: 5rem; margin: 1rem; } - .send-feedback-illustration { - height: 16rem; - margin: 1rem; - } - .feedback-title { - font-size: 20px; - font-weight: bold; - color: $v-dark-gray; - margin: 20px 10px; - text-align: center; - } .subtitle { padding: 10px 30px 20px; text-align: center; diff --git a/src/sass/views/views.scss b/src/sass/views/views.scss index 37754970f..d4ed735ed 100644 --- a/src/sass/views/views.scss +++ b/src/sass/views/views.scss @@ -22,10 +22,7 @@ @import "wallet-backup-phrase"; @import "zero-state"; @import "onboarding/onboarding"; -@import "feedback/rateCard"; -@import "feedback/send"; -@import "feedback/complete"; -@import "feedback/rateApp"; +@import "shareApp"; @import "includes/actionSheet"; @import "export"; @import "import"; diff --git a/www/views/feedback/rateApp.html b/www/views/feedback/rateApp.html deleted file mode 100644 index 9913b9d4e..000000000 --- a/www/views/feedback/rateApp.html +++ /dev/null @@ -1,21 +0,0 @@ - - - Not now - - -
- 5-star ratings help us get {{appName}} into more hands, and more users means more resources can be committed to the app! -
-
- Would you be willing to rate {{appName}} in the app store? -
-
- - -
-
-
diff --git a/www/views/feedback/rateCard.html b/www/views/feedback/rateCard.html deleted file mode 100644 index d31199466..000000000 --- a/www/views/feedback/rateCard.html +++ /dev/null @@ -1,43 +0,0 @@ -
-
- How do you like {{appName}}? - -
-
-
- - - - -
-
- - - - -
-
- - - - -
-
- - - - -
-
- - - - -
-
-
- -
-
diff --git a/www/views/feedback/send.html b/www/views/feedback/send.html deleted file mode 100644 index bb979bdee..000000000 --- a/www/views/feedback/send.html +++ /dev/null @@ -1,48 +0,0 @@ - - - {{'Send Feedback' | translate}} - - - - - - - - - - -
- {{comment}} -
-
- - -
-
-
diff --git a/www/views/feedback/complete.html b/www/views/shareApp.html similarity index 55% rename from www/views/feedback/complete.html rename to www/views/shareApp.html index 03a98a476..f148e81a0 100644 --- a/www/views/feedback/complete.html +++ b/www/views/shareApp.html @@ -1,32 +1,16 @@ - + {{title}} - - - -
-
-
- -
Share the love by inviting your friends.
-
-
- -
A member of the team will review your feedback as soon as possible.
-
-
If you have additional feedback, please let us know by tapping the "Send feedback" option in the Settings tab.
- -
-
Share the love by inviting your friends.
-
+ -
-
diff --git a/www/views/tab-settings.html b/www/views/tab-settings.html index fefaf2fc2..3091e63a6 100644 --- a/www/views/tab-settings.html +++ b/www/views/tab-settings.html @@ -29,7 +29,7 @@ {{'Send Feedback' | translate}} - +