From fac553eb1483f11d5d8b3628170f7f41f8aaa2a8 Mon Sep 17 00:00:00 2001 From: Gustavo Maximiliano Cortez Date: Thu, 22 Sep 2016 18:24:46 -0300 Subject: [PATCH 01/36] Return cached address while BWS returns main address GAP reached --- src/js/controllers/tab-receive.js | 5 +---- src/js/services/walletService.js | 25 ++++++------------------- 2 files changed, 7 insertions(+), 23 deletions(-) diff --git a/src/js/controllers/tab-receive.js b/src/js/controllers/tab-receive.js index 26e71e57c..763253d95 100644 --- a/src/js/controllers/tab-receive.js +++ b/src/js/controllers/tab-receive.js @@ -51,10 +51,7 @@ angular.module('copayApp.controllers').controller('tabReceiveController', functi $timeout(function() { walletService.getAddress($scope.wallet, forceNew, function(err, addr) { $scope.generatingAddress = false; - if (err || lodash.isEmpty(addr)) { - popupService.showAlert(gettextCatalog.getString('Error'), err || gettextCatalog.getString('Address is empty')); - return; - } + if (err) popupService.showAlert(gettextCatalog.getString('Error'), err); $scope.addr = addr; $scope.$apply(); }); diff --git a/src/js/services/walletService.js b/src/js/services/walletService.js index 0c9d00583..aedd12eb3 100644 --- a/src/js/services/walletService.js +++ b/src/js/services/walletService.js @@ -791,29 +791,16 @@ angular.module('copayApp.services').factory('walletService', function($log, $tim root.getAddress = function(wallet, forceNew, cb) { - var firstStep; - if (forceNew) { - firstStep = storageService.clearLastAddress; - } else { - firstStep = function(walletId, cb) { - return cb(); - }; - } - - firstStep(wallet.id, function(err) { + storageService.getLastAddress(wallet.id, function(err, addr) { if (err) return cb(err); - storageService.getLastAddress(wallet.id, function(err, addr) { - if (err) return cb(err); + if (!forceNew && addr) return cb(null, addr); - if (addr) return cb(null, addr); - - createAddress(wallet, function(err, addr) { + createAddress(wallet, function(err, _addr) { + if (err) return cb(err, addr); + storageService.storeLastAddress(wallet.id, _addr, function() { if (err) return cb(err); - storageService.storeLastAddress(wallet.id, addr, function() { - if (err) return cb(err); - return cb(null, addr); - }); + return cb(null, _addr); }); }); }); From 4ecfb6636bb8a5438fba6ac0496abd9a94618daa Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Gabriel=20Baz=C3=A1n?= Date: Mon, 26 Sep 2016 09:55:16 -0300 Subject: [PATCH 02/36] fix ionichistory not defined --- src/js/controllers/join.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/js/controllers/join.js b/src/js/controllers/join.js index f983e25c5..872b15462 100644 --- a/src/js/controllers/join.js +++ b/src/js/controllers/join.js @@ -1,7 +1,7 @@ 'use strict'; angular.module('copayApp.controllers').controller('joinController', - function($scope, $rootScope, $timeout, $state, profileService, configService, storageService, applicationService, gettext, gettextCatalog, lodash, ledger, trezor, platformInfo, derivationPathHelper, ongoingProcess, walletService, $log, $stateParams, popupService) { + function($scope, $rootScope, $timeout, $state, $ionicHistory, profileService, configService, storageService, applicationService, gettext, gettextCatalog, lodash, ledger, trezor, platformInfo, derivationPathHelper, ongoingProcess, walletService, $log, $stateParams, popupService) { var isChromeApp = platformInfo.isChromeApp; var isDevel = platformInfo.isDevel; From 43b265835f483d3bcea63c0b385c21875f4b8776 Mon Sep 17 00:00:00 2001 From: Jamal Jackson Date: Mon, 26 Sep 2016 09:27:13 -0400 Subject: [PATCH 03/36] fix disclaimer view issue on smaller devices where content wasn't being shown fully --- src/sass/views/onboarding/onboard-disclaimer.scss | 1 + 1 file changed, 1 insertion(+) diff --git a/src/sass/views/onboarding/onboard-disclaimer.scss b/src/sass/views/onboarding/onboard-disclaimer.scss index feffbb90a..11491fd87 100644 --- a/src/sass/views/onboarding/onboard-disclaimer.scss +++ b/src/sass/views/onboarding/onboard-disclaimer.scss @@ -42,6 +42,7 @@ .item-content { width: 90%; margin-left: 6%; + white-space: normal; } } .item-checkbox .checkbox { From 477409ee8256f2022ab6668bc1fc8444d83da831 Mon Sep 17 00:00:00 2001 From: Jamal Jackson Date: Mon, 26 Sep 2016 10:35:33 -0400 Subject: [PATCH 04/36] somewhat styled delete wallet view --- public/views/preferencesDeleteWallet.html | 16 ++++++++++------ src/js/controllers/preferencesDelete.js | 2 +- src/sass/common.scss | 5 +++++ 3 files changed, 16 insertions(+), 7 deletions(-) diff --git a/public/views/preferencesDeleteWallet.html b/public/views/preferencesDeleteWallet.html index 351e03519..f9de95220 100644 --- a/public/views/preferencesDeleteWallet.html +++ b/public/views/preferencesDeleteWallet.html @@ -5,13 +5,17 @@ -
-

Warning!

-
Permanently delete this wallet. THIS ACTION CANNOT BE REVERSED
-
- {{alias}}{{walletName}} +
+

Warning!

+
+

+ Permanently delete this wallet. +

+

+ THIS ACTION CANNOT BE REVERSED +

- + diff --git a/src/js/controllers/preferencesDelete.js b/src/js/controllers/preferencesDelete.js index 5aff687c2..e970d5182 100644 --- a/src/js/controllers/preferencesDelete.js +++ b/src/js/controllers/preferencesDelete.js @@ -4,7 +4,7 @@ angular.module('copayApp.controllers').controller('preferencesDeleteWalletContro function($scope, $stateParams, $ionicHistory, gettextCatalog, lodash, profileService, $state, ongoingProcess, popupService) { var wallet = profileService.getWallet($stateParams.walletId); $scope.alias = lodash.isEqual(wallet.name, wallet.credentials.walletName) ? null : wallet.name + ' '; - $scope.walletName = '[' + wallet.credentials.walletName + ']'; + $scope.walletName = wallet.credentials.walletName; $scope.showDeletePopup = function() { var title = gettextCatalog.getString('Warning!'); diff --git a/src/sass/common.scss b/src/sass/common.scss index 40eb910a0..86e619887 100644 --- a/src/sass/common.scss +++ b/src/sass/common.scss @@ -45,6 +45,11 @@ } } } + +.white-bg{ + background: #fff; +} + .overlay { position: absolute; top:0; From 3c7df9e51f8b169f392f8d59a3eb26fbd0156205 Mon Sep 17 00:00:00 2001 From: Jamal Jackson Date: Mon, 26 Sep 2016 12:12:32 -0400 Subject: [PATCH 05/36] added iPhone 7 into range --- src/sass/views/wallet-backup-phrase.scss | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/sass/views/wallet-backup-phrase.scss b/src/sass/views/wallet-backup-phrase.scss index 0defd9af5..18739039e 100644 --- a/src/sass/views/wallet-backup-phrase.scss +++ b/src/sass/views/wallet-backup-phrase.scss @@ -84,7 +84,7 @@ } } - @media (min-width : 320px) and (max-width : 340px) and (orientation : portrait), (min-width : 650px) and (max-width : 770px) and (orientation : portrait){ + @media (min-width : 320px) and (max-width : 380px) and (orientation : portrait), (min-width : 650px) and (max-width : 770px) and (orientation : portrait){ #wallet-backup-phrase{ .cta-buttons,#select-phrase{ bottom: 64px; From 49301d7069c6aa9b313fdc0d131fcf65f4f9c08b Mon Sep 17 00:00:00 2001 From: Jamal Jackson Date: Mon, 26 Sep 2016 12:35:10 -0400 Subject: [PATCH 06/36] added fix for iPhone plus devices --- src/sass/views/wallet-backup-phrase.scss | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/sass/views/wallet-backup-phrase.scss b/src/sass/views/wallet-backup-phrase.scss index 18739039e..057dea5f0 100644 --- a/src/sass/views/wallet-backup-phrase.scss +++ b/src/sass/views/wallet-backup-phrase.scss @@ -84,7 +84,7 @@ } } - @media (min-width : 320px) and (max-width : 380px) and (orientation : portrait), (min-width : 650px) and (max-width : 770px) and (orientation : portrait){ + @media (min-width : 320px) and (max-width : 415px) and (orientation : portrait), (min-width : 650px) and (max-width : 770px) and (orientation : portrait){ #wallet-backup-phrase{ .cta-buttons,#select-phrase{ bottom: 64px; From ac3dc80bd0afa1ab85889a82ad4ac7c07a4737e0 Mon Sep 17 00:00:00 2001 From: Gustavo Maximiliano Cortez Date: Mon, 26 Sep 2016 14:31:36 -0300 Subject: [PATCH 07/36] Fix title bar when changing tabs --- public/views/preferencesAbout.html | 1 + src/js/controllers/copayers.js | 2 +- src/js/controllers/preferencesAbout.js | 6 +- src/js/controllers/walletDetails.js | 8 +- src/js/services/swipe.js | 150 ------------------------- 5 files changed, 7 insertions(+), 160 deletions(-) delete mode 100644 src/js/services/swipe.js diff --git a/public/views/preferencesAbout.html b/public/views/preferencesAbout.html index 8bda60d32..072746127 100644 --- a/public/views/preferencesAbout.html +++ b/public/views/preferencesAbout.html @@ -1,5 +1,6 @@ + {{title}} diff --git a/src/js/controllers/copayers.js b/src/js/controllers/copayers.js index 186c23ae1..765db7d52 100644 --- a/src/js/controllers/copayers.js +++ b/src/js/controllers/copayers.js @@ -1,7 +1,7 @@ 'use strict'; angular.module('copayApp.controllers').controller('copayersController', - function($scope, $log, $ionicNavBarDelegate, $timeout, $stateParams, $state, $rootScope, $ionicHistory, lodash, profileService, walletService, popupService, platformInfo, gettextCatalog, ongoingProcess) { + function($scope, $log, $timeout, $stateParams, $state, $rootScope, $ionicHistory, lodash, profileService, walletService, popupService, platformInfo, gettextCatalog, ongoingProcess) { $scope.$on("$ionicView.beforeEnter", function(event, data) { init(); diff --git a/src/js/controllers/preferencesAbout.js b/src/js/controllers/preferencesAbout.js index 79bc23cdf..64f10de54 100644 --- a/src/js/controllers/preferencesAbout.js +++ b/src/js/controllers/preferencesAbout.js @@ -1,11 +1,9 @@ 'use strict'; angular.module('copayApp.controllers').controller('preferencesAbout', - function($scope, $window, $ionicNavBarDelegate, gettextCatalog, externalLinkService) { - $scope.$on("$ionicView.beforeEnter", function(event, data){ - $ionicNavBarDelegate.title(gettextCatalog.getString('About') + ' ' + $window.appConfig.nameCase); - }); + function($scope, $window, gettextCatalog, externalLinkService) { + $scope.title = gettextCatalog.getString('About') + ' ' + $window.appConfig.nameCase; $scope.version = $window.version; $scope.commitHash = $window.commitHash; $scope.name = $window.appConfig.gitHubRepoName; diff --git a/src/js/controllers/walletDetails.js b/src/js/controllers/walletDetails.js index b6a51f331..c51a99f37 100644 --- a/src/js/controllers/walletDetails.js +++ b/src/js/controllers/walletDetails.js @@ -1,6 +1,6 @@ 'use strict'; -angular.module('copayApp.controllers').controller('walletDetailsController', function($scope, $rootScope, $interval, $timeout, $filter, $log, $ionicModal, $ionicPopover, $ionicNavBarDelegate, $state, $stateParams, profileService, lodash, configService, gettext, gettextCatalog, platformInfo, walletService, $ionicPopup, txpModalService, externalLinkService) { +angular.module('copayApp.controllers').controller('walletDetailsController', function($scope, $rootScope, $interval, $timeout, $filter, $log, $ionicModal, $ionicPopover, $state, $stateParams, profileService, lodash, configService, gettext, gettextCatalog, platformInfo, walletService, $ionicPopup, txpModalService, externalLinkService) { var isCordova = platformInfo.isCordova; var isWP = platformInfo.isWP; var isAndroid = platformInfo.isAndroid; @@ -204,15 +204,13 @@ angular.module('copayApp.controllers').controller('walletDetailsController', fun wallet = profileService.getWallet($stateParams.walletId); /* Set color for header bar */ - $rootScope.walletDetailsColor = wallet.color; - $rootScope.walletDetailsName = wallet.name; + $scope.walletDetailsColor = wallet.color; + $scope.walletDetailsName = wallet.name; $scope.wallet = wallet; $scope.requiresMultipleSignatures = wallet.credentials.m > 1; $scope.newTx = false; - $ionicNavBarDelegate.title(wallet.name); - $scope.updateAll(function() { if ($stateParams.txid) { var tx = lodash.find($scope.completeTxHistory, { diff --git a/src/js/services/swipe.js b/src/js/services/swipe.js deleted file mode 100644 index 57a210c4c..000000000 --- a/src/js/services/swipe.js +++ /dev/null @@ -1,150 +0,0 @@ -'use strict'; - -/* - * This is a modification from https://github.com/angular/angular.js/blob/master/src/ngTouch/swipe.js - */ - - -angular.module('copayApp.services') - .factory('$swipe', [ - function() { - // The total distance in any direction before we make the call on swipe vs. scroll. - var MOVE_BUFFER_RADIUS = 10; - - var POINTER_EVENTS = { - 'touch': { - start: 'touchstart', - move: 'touchmove', - end: 'touchend', - cancel: 'touchcancel' - } - }; - - function getCoordinates(event) { - var originalEvent = event.originalEvent || event; - var touches = originalEvent.touches && originalEvent.touches.length ? originalEvent.touches : [originalEvent]; - var e = (originalEvent.changedTouches && originalEvent.changedTouches[0]) || touches[0]; - - return { - x: e.clientX, - y: e.clientY - }; - } - - function getEvents(pointerTypes, eventType) { - var res = []; - angular.forEach(pointerTypes, function(pointerType) { - var eventName = POINTER_EVENTS[pointerType][eventType]; - if (eventName) { - res.push(eventName); - } - }); - return res.join(' '); - } - - return { - /** - * @ngdoc method - * @name $swipe#bind - * - * @description - * The main method of `$swipe`. It takes an element to be watched for swipe motions, and an - * object containing event handlers. - * The pointer types that should be used can be specified via the optional - * third argument, which is an array of strings `'mouse'` and `'touch'`. By default, - * `$swipe` will listen for `mouse` and `touch` events. - * - * The four events are `start`, `move`, `end`, and `cancel`. `start`, `move`, and `end` - * receive as a parameter a coordinates object of the form `{ x: 150, y: 310 }`. - * - * `start` is called on either `mousedown` or `touchstart`. After this event, `$swipe` is - * watching for `touchmove` or `mousemove` events. These events are ignored until the total - * distance moved in either dimension exceeds a small threshold. - * - * Once this threshold is exceeded, either the horizontal or vertical delta is greater. - * - If the horizontal distance is greater, this is a swipe and `move` and `end` events follow. - * - If the vertical distance is greater, this is a scroll, and we let the browser take over. - * A `cancel` event is sent. - * - * `move` is called on `mousemove` and `touchmove` after the above logic has determined that - * a swipe is in progress. - * - * `end` is called when a swipe is successfully completed with a `touchend` or `mouseup`. - * - * `cancel` is called either on a `touchcancel` from the browser, or when we begin scrolling - * as described above. - * - */ - bind: function(element, eventHandlers, pointerTypes) { - // Absolute total movement, used to control swipe vs. scroll. - var totalX, totalY; - // Coordinates of the start position. - var startCoords; - // Last event's position. - var lastPos; - // Whether a swipe is active. - var active = false; - - pointerTypes = pointerTypes || ['touch']; - element.on(getEvents(pointerTypes, 'start'), function(event) { - startCoords = getCoordinates(event); - active = true; - totalX = 0; - totalY = 0; - lastPos = startCoords; - eventHandlers['start'] && eventHandlers['start'](startCoords, event); - }); - var events = getEvents(pointerTypes, 'cancel'); - if (events) { - element.on(events, function(event) { - active = false; - eventHandlers['cancel'] && eventHandlers['cancel'](event); - }); - } - - element.on(getEvents(pointerTypes, 'move'), function(event) { - if (!active) return; - - // Android will send a touchcancel if it thinks we're starting to scroll. - // So when the total distance (+ or - or both) exceeds 10px in either direction, - // we either: - // - On totalX > totalY, we send preventDefault() and treat this as a swipe. - // - On totalY > totalX, we let the browser handle it as a scroll. - - if (!startCoords) return; - var coords = getCoordinates(event); - - totalX += Math.abs(coords.x - lastPos.x); - totalY += Math.abs(coords.y - lastPos.y); - - lastPos = coords; - - if (totalX < MOVE_BUFFER_RADIUS && totalY < MOVE_BUFFER_RADIUS) { - return; - } - - // One of totalX or totalY has exceeded the buffer, so decide on swipe vs. scroll. - if (totalY > totalX) { - // Allow native scrolling to take over. - active = false; - eventHandlers['cancel'] && eventHandlers['cancel'](event); - return; - } else { - - // Prevent the browser from scrolling. - event.preventDefault(); - eventHandlers['move'] && eventHandlers['move'](coords, event); - } - }); - - element.on(getEvents(pointerTypes, 'end'), function(event) { - if (!active) return; - active = false; - eventHandlers['end'] && eventHandlers['end'](getCoordinates(event), event); - }); - } - }; - } -]); - - From c40c43505f4ed4e0cab64e2459c415d575b1211a Mon Sep 17 00:00:00 2001 From: Jamal Jackson Date: Mon, 26 Sep 2016 15:26:36 -0400 Subject: [PATCH 08/36] updated notifications cta image size for tablet sizes, set max width for disclaimer checkbox items --- public/views/onboarding/disclaimer.html | 8 +-- .../views/onboarding/onboard-disclaimer.scss | 8 +++ .../onboard-push-notifications.scss | 49 +++++++++++-------- src/sass/views/onboarding/onboarding.scss | 6 ++- 4 files changed, 47 insertions(+), 24 deletions(-) diff --git a/public/views/onboarding/disclaimer.html b/public/views/onboarding/disclaimer.html index f31a0b082..d00df84e9 100644 --- a/public/views/onboarding/disclaimer.html +++ b/public/views/onboarding/disclaimer.html @@ -13,9 +13,11 @@ I understand if this app moved to another device or deleted, my bitcoin can only be recovered with the backup phrase
- -

I have read, understood, and agree with the Terms of use.

- +
+ +

I have read, understood, and agree with the Terms of use.

+ +
diff --git a/src/sass/views/onboarding/onboard-disclaimer.scss b/src/sass/views/onboarding/onboard-disclaimer.scss index 11491fd87..3bf455da5 100644 --- a/src/sass/views/onboarding/onboard-disclaimer.scss +++ b/src/sass/views/onboarding/onboard-disclaimer.scss @@ -10,6 +10,10 @@ margin-top:1.5rem; } } + .list{ + max-width: 600px; + @include center-block(); + } .item { background: transparent; border: none; @@ -55,6 +59,10 @@ position: absolute; bottom: 0; width: 100%; + &-content{ + max-width: 600px; + @include center-block(); + } .item{ color:rgb(58,58,58); padding-bottom: 2.5rem; diff --git a/src/sass/views/onboarding/onboard-push-notifications.scss b/src/sass/views/onboarding/onboard-push-notifications.scss index 1132317e7..30ff9b4a2 100644 --- a/src/sass/views/onboarding/onboard-push-notifications.scss +++ b/src/sass/views/onboarding/onboard-push-notifications.scss @@ -1,40 +1,49 @@ -#onboarding-push-notifications{ - h2{ - margin-top:2rem; +#onboarding-push-notifications { + h2 { + margin-top: 2rem; } - #cta{ + #cta { background-image: url('../img/onboarding-push-notifications.svg'); height: 15rem; margin-top: .75rem; } - .cta-buttons{ - float:none; - bottom:0; + .cta-buttons { + float: none; + bottom: 0; position: absolute; - width:100%; - button{ + width: 100%; + button { max-width: 400px; } } } -@media (max-width: 400px){ - #onboarding-push-notifications{ - .cta-buttons{ - float:none; - bottom:0; +@media (max-width: 400px) { + #onboarding-push-notifications { + .cta-buttons { + float: none; + bottom: 0; position: absolute; } } } -@media (max-height: 540px){ - #onboarding-push-notifications{ - #cta{ + +@media (max-height: 540px) { + #onboarding-push-notifications { + #cta { margin-bottom: 0; } - .cta-buttons{ - float:left; + .cta-buttons { + float: left; position: relative; } } -} \ No newline at end of file +} + +@media (min-width: 450px) { + #onboarding-push-notifications { + #cta { + height: 26rem; + } + } +} diff --git a/src/sass/views/onboarding/onboarding.scss b/src/sass/views/onboarding/onboarding.scss index 22cbf9452..c44f79878 100644 --- a/src/sass/views/onboarding/onboarding.scss +++ b/src/sass/views/onboarding/onboarding.scss @@ -91,7 +91,11 @@ .onboarding{ ion-content{ h2{ - font-size: 1.2rem; + font-size: 2rem; + } + p{ + font-size: 1.4rem; + line-height: 1.9rem; } p,h2,h3{ max-width: 600px !important; From 5fc36dce2df8a150f7fd22e190274312e662a0e6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Gabriel=20Baz=C3=A1n?= Date: Mon, 26 Sep 2016 16:44:47 -0300 Subject: [PATCH 09/36] next steps card should be collapsable --- public/views/tab-home.html | 62 ++++++++++++++++++---------------- src/js/controllers/tab-home.js | 5 +++ src/sass/common.scss | 12 +++++++ 3 files changed, 50 insertions(+), 29 deletions(-) diff --git a/public/views/tab-home.html b/public/views/tab-home.html index 24cb50598..1f7a26f2b 100644 --- a/public/views/tab-home.html +++ b/public/views/tab-home.html @@ -116,37 +116,41 @@
-

diff --git a/src/js/controllers/tab-home.js b/src/js/controllers/tab-home.js index 67f93c1fe..f58bb7ca0 100644 --- a/src/js/controllers/tab-home.js +++ b/src/js/controllers/tab-home.js @@ -180,6 +180,11 @@ angular.module('copayApp.controllers').controller('tabHomeController', }); }; + $scope.shouldHideNextSteps = function() { + $scope.hideNextSteps = !$scope.hideNextSteps; + $ionicScrollDelegate.resize(); + }; + var listeners = [ $rootScope.$on('bwsEvent', function(e, walletId, type, n) { var wallet = profileService.getWallet(walletId); diff --git a/src/sass/common.scss b/src/sass/common.scss index 86e619887..5be328775 100644 --- a/src/sass/common.scss +++ b/src/sass/common.scss @@ -4,6 +4,18 @@ @extend .ion-ios-arrow-right; } +.icon.nav-item-arrow-down { + color: #666; + font-size: 26px; + @extend .ion-ios-arrow-down; +} + +.icon.nav-item-arrow-up { + color: #666; + font-size: 26px; + @extend .ion-ios-arrow-up; +} + .item.item-heading { font-weight: bold; } From 34f337d7b665688169eee4936603258a6187ff8c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Gabriel=20Baz=C3=A1n?= Date: Mon, 26 Sep 2016 18:03:00 -0300 Subject: [PATCH 10/36] add qr scanner to send tab --- public/views/tab-send.html | 13 ++++++++----- src/js/controllers/tab-send.js | 14 ++++++++++++-- 2 files changed, 20 insertions(+), 7 deletions(-) diff --git a/public/views/tab-send.html b/public/views/tab-send.html index 29af3f48b..d23a0731f 100644 --- a/public/views/tab-send.html +++ b/public/views/tab-send.html @@ -8,11 +8,14 @@

Recipient
diff --git a/src/js/controllers/tab-send.js b/src/js/controllers/tab-send.js index ce2fb7bd6..18cafd1d1 100644 --- a/src/js/controllers/tab-send.js +++ b/src/js/controllers/tab-send.js @@ -86,8 +86,18 @@ angular.module('copayApp.controllers').controller('tabSendController', function( }); }; - $scope.$on("$ionicView.beforeEnter", function(event, data){ - $scope.formData = { search: null }; + $scope.onQrCodeScanned = function(data) { + if (!incomingData.redir(data)) { + $ionicPopup.alert({ + title: 'Invalid data', + }); + } + }; + + $scope.$on("$ionicView.beforeEnter", function(event, data) { + $scope.formData = { + search: null + }; updateList(); }); From ec875f7b1b69d2fdcd4499a358d7f487ddeff609 Mon Sep 17 00:00:00 2001 From: Gustavo Maximiliano Cortez Date: Mon, 26 Sep 2016 18:26:41 -0300 Subject: [PATCH 11/36] Hide nav-bar on amount/confirm and addressbook views --- public/views/tabs.html | 8 ++++---- src/js/controllers/amount.js | 4 ++-- src/js/controllers/tabsController.js | 26 ++++++++++++++++++++++++-- src/js/routes.js | 1 + src/sass/views/address-book.scss | 2 -- 5 files changed, 31 insertions(+), 10 deletions(-) diff --git a/public/views/tabs.html b/public/views/tabs.html index 66d9a2bc5..b1d26e8fc 100644 --- a/public/views/tabs.html +++ b/public/views/tabs.html @@ -3,13 +3,13 @@ Create tabs with an icon and label, using the tabs-positive style. Each tab's child directive will have its own navigation history that also transitions its views in and out. --> - + - + - + @@ -21,7 +21,7 @@ navigation history that also transitions its views in and out. - + diff --git a/src/js/controllers/amount.js b/src/js/controllers/amount.js index 590fa55d4..48daafb38 100644 --- a/src/js/controllers/amount.js +++ b/src/js/controllers/amount.js @@ -15,11 +15,11 @@ angular.module('copayApp.controllers').controller('amountController', function($ $scope.toName = $stateParams.toName; $scope.toEmail = $stateParams.toEmail; - $scope.$on('$ionicView.beforeLeave', function() { + $scope.$on('$ionicView.leave', function() { angular.element($window).off('keydown'); }); - $scope.$on("$ionicView.beforeEnter", function(event, data) { + $scope.$on("$ionicView.enter", function(event, data) { if (!$stateParams.toAddress) { $log.error('Bad params at amount') diff --git a/src/js/controllers/tabsController.js b/src/js/controllers/tabsController.js index ccd1b1e88..6d1a7116f 100644 --- a/src/js/controllers/tabsController.js +++ b/src/js/controllers/tabsController.js @@ -1,6 +1,6 @@ 'use strict'; -angular.module('copayApp.controllers').controller('tabsController', function($log, $scope, $stateParams, $ionicModal, $timeout, incomingData) { +angular.module('copayApp.controllers').controller('tabsController', function($rootScope, $log, $scope, $state, $stateParams, $timeout, incomingData, lodash) { $scope.onScan = function(data) { if (!incomingData.redir(data)) { @@ -22,6 +22,28 @@ angular.module('copayApp.controllers').controller('tabsController', function($lo $timeout(function() { $scope.$apply(); }, 1); - } + }; + + var hideTabsViews = [ + 'tabs.send.amount', + 'tabs.send.confirm', + 'tabs.send.addressbook', + 'tabs.addressbook', + 'tabs.addressbook.add', + 'tabs.addressbook.view', + ]; + + $rootScope.$on('$ionicView.beforeEnter', function() { + + $rootScope.hideTabs = false; + + var currentState = $state.current.name; + + lodash.each(hideTabsViews, function(view) { + if (currentState === view) { + $rootScope.hideTabs = true; + } + }); + }); }); diff --git a/src/js/routes.js b/src/js/routes.js index dea85a6e8..93e1774f1 100644 --- a/src/js/routes.js +++ b/src/js/routes.js @@ -191,6 +191,7 @@ angular.module('copayApp').config(function(historicLogProvider, $provide, $logPr .state('tabs', { url: '/tabs', abstract: true, + controller: 'tabsController', templateUrl: 'views/tabs.html' }) .state('tabs.home', { diff --git a/src/sass/views/address-book.scss b/src/sass/views/address-book.scss index 730a5571a..ec6167165 100644 --- a/src/sass/views/address-book.scss +++ b/src/sass/views/address-book.scss @@ -15,8 +15,6 @@ .item { color: #444; border-top: none; - padding-top: 1.5rem; - padding-bottom: 1.5rem; &:before { display: block; position: absolute; From 3a1129e1f8901410428361f9f1ff81c985e5c2bf Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Gabriel=20Baz=C3=A1n?= Date: Mon, 26 Sep 2016 11:26:10 -0300 Subject: [PATCH 12/36] add incomplete wallets to receive tab --- public/views/includes/wallets.html | 4 -- public/views/tab-receive.html | 74 +++++++++++++++++++----------- src/js/controllers/tab-receive.js | 22 +++++++-- src/sass/views/tab-receive.scss | 14 ++++++ 4 files changed, 78 insertions(+), 36 deletions(-) diff --git a/public/views/includes/wallets.html b/public/views/includes/wallets.html index 1c2a7a569..75f8b9efc 100644 --- a/public/views/includes/wallets.html +++ b/public/views/includes/wallets.html @@ -8,10 +8,6 @@ {{wallet.m}}-of-{{wallet.n}} - - Incomplete - -
diff --git a/public/views/tab-receive.html b/public/views/tab-receive.html index 7a1283d4b..c445a2624 100644 --- a/public/views/tab-receive.html +++ b/public/views/tab-receive.html @@ -8,42 +8,62 @@ -
-
-
- -
- ... +
+
+
+
+ Incomplete wallet
-
- Before receiving funds, you must backup your wallet. If this device is lost, it is impossible to access your funds without a backup. +
+ All signing devices must be added to this multisig wallet before bitcoin addresses can be created. +
+
+
-
-
-
-
- - Share +
+
+
+ + address not yet available +
-
-
- - Next Address +
+
+
+
+ +
+ ... +
-
-
-
-
- - ... - {{addr}} +
+
+
+ + Share +
+
+
+
+ + Next Address +
-
-
+
+
+
+ + ... + {{addr}} +
+
+
+ +
No Wallet diff --git a/src/js/controllers/tab-receive.js b/src/js/controllers/tab-receive.js index 5849cd77b..5cb57dcb2 100644 --- a/src/js/controllers/tab-receive.js +++ b/src/js/controllers/tab-receive.js @@ -1,6 +1,6 @@ 'use strict'; -angular.module('copayApp.controllers').controller('tabReceiveController', function($scope, $timeout, $log, $ionicModal, storageService, platformInfo, walletService, profileService, configService, lodash, gettextCatalog, popupService) { +angular.module('copayApp.controllers').controller('tabReceiveController', function($scope, $timeout, $log, $ionicModal, $state, $ionicHistory, storageService, platformInfo, walletService, profileService, configService, lodash, gettextCatalog, popupService) { $scope.isCordova = platformInfo.isCordova; $scope.isNW = platformInfo.isNW; @@ -29,7 +29,7 @@ angular.module('copayApp.controllers').controller('tabReceiveController', functi }; $scope.setAddress = function(forceNew) { - if ($scope.generatingAddress) return; + if ($scope.generatingAddress || !$scope.wallet.isComplete()) return; $scope.addr = null; $scope.generatingAddress = true; @@ -46,9 +46,7 @@ angular.module('copayApp.controllers').controller('tabReceiveController', functi $scope.$on("$ionicView.beforeEnter", function(event, data) { if (!$scope.isCordova) $scope.checkTips(); - $scope.wallets = profileService.getWallets({ - onlyComplete: true - }); + $scope.wallets = profileService.getWallets(); $scope.$on('Wallet/Changed', function(event, wallet) { if (!wallet) { $log.debug('No wallet provided'); @@ -59,4 +57,18 @@ angular.module('copayApp.controllers').controller('tabReceiveController', functi $scope.setAddress(); }); }); + + $scope.goCopayers = function() { + $ionicHistory.removeBackView(); + $ionicHistory.nextViewOptions({ + disableAnimate: true + }); + $state.go('tabs.home'); + $timeout(function() { + $state.transitionTo('tabs.copayers', { + walletId: $scope.wallet.credentials.walletId + }); + }, 100); + }; + }); diff --git a/src/sass/views/tab-receive.scss b/src/sass/views/tab-receive.scss index aa66bc642..baa2099d0 100644 --- a/src/sass/views/tab-receive.scss +++ b/src/sass/views/tab-receive.scss @@ -9,6 +9,20 @@ } #address { background: #fff; + .incomplete { + padding: 50px; + .title { + padding: 20px; + font-size: 25px; + color: #444; + } + .subtitle { + padding: 20px; + color: #444; + } + .button { + } + } .item { border: none; font-size: .8rem; From 7969a40645cb6e15bcd8215b8da3796a84064e22 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Gabriel=20Baz=C3=A1n?= Date: Mon, 26 Sep 2016 13:05:15 -0300 Subject: [PATCH 13/36] backup needed modal --- public/views/includes/backupNeededPopup.html | 27 ++++++++++++++++++++ public/views/tab-receive.html | 7 ++++- src/js/controllers/backup.js | 10 +------- src/js/controllers/tab-receive.js | 24 +++++++++++++++++ src/js/routes.js | 20 +++++++++++++-- src/sass/views/includes/modals/modals.scss | 20 +++++++++++++-- src/sass/views/tab-receive.scss | 10 ++++++++ 7 files changed, 104 insertions(+), 14 deletions(-) create mode 100644 public/views/includes/backupNeededPopup.html diff --git a/public/views/includes/backupNeededPopup.html b/public/views/includes/backupNeededPopup.html new file mode 100644 index 000000000..c74742e06 --- /dev/null +++ b/public/views/includes/backupNeededPopup.html @@ -0,0 +1,27 @@ + diff --git a/public/views/tab-receive.html b/public/views/tab-receive.html index c445a2624..3ab6158aa 100644 --- a/public/views/tab-receive.html +++ b/public/views/tab-receive.html @@ -31,7 +31,12 @@
-
+
+
+ Wallet not backed up +
+
+
diff --git a/src/js/controllers/backup.js b/src/js/controllers/backup.js index ea28fdaad..62170a6c7 100644 --- a/src/js/controllers/backup.js +++ b/src/js/controllers/backup.js @@ -49,15 +49,6 @@ angular.module('copayApp.controllers').controller('backupController', }, 10); }; - $scope.goBack = function() { - if ($scope.step == 1) { - if ($stateParams.fromOnboarding) $state.go('onboarding.backupRequest'); - else $state.go('wallet.preferences'); - } else { - $scope.goToStep($scope.step - 1); - } - }; - var backupError = function(err) { ongoingProcess.set('validatingWords', false); $log.debug('Failed to verify backup: ', err); @@ -198,6 +189,7 @@ angular.module('copayApp.controllers').controller('backupController', walletId: $stateParams.walletId, fromOnboarding: true }); + else if ($stateParams.fromReceive) $state.go('tabs.receive'); else $state.go('tabs.preferences', { walletId: $stateParams.walletId }); diff --git a/src/js/controllers/tab-receive.js b/src/js/controllers/tab-receive.js index 5cb57dcb2..b17468ae5 100644 --- a/src/js/controllers/tab-receive.js +++ b/src/js/controllers/tab-receive.js @@ -71,4 +71,28 @@ angular.module('copayApp.controllers').controller('tabReceiveController', functi }, 100); }; + $scope.openBackupNeededPopup = function() { + $ionicModal.fromTemplateUrl('views/includes/backupNeededPopup.html', { + scope: $scope, + backdropClickToClose: false, + hardwareBackButtonClose: false + }).then(function(modal) { + $scope.BackupNeededPopup = modal; + $scope.BackupNeededPopup.show(); + }); + }; + + $scope.closeBackupNeededModal = function() { + $scope.BackupNeededPopup.hide(); + $scope.BackupNeededPopup.remove(); + }; + + $scope.goToBackupFlow = function() { + $scope.BackupNeededPopup.hide(); + $scope.BackupNeededPopup.remove(); + $state.go('tabs.receive.backup', { + fromReceive: true, + walletId: $scope.wallet.credentials.walletId + }); + }; }); diff --git a/src/js/routes.js b/src/js/routes.js index dea85a6e8..6dde26bca 100644 --- a/src/js/routes.js +++ b/src/js/routes.js @@ -236,7 +236,7 @@ angular.module('copayApp').config(function(historicLogProvider, $provide, $logPr * */ - .state('tabs.send.amount', { + .state('tabs.send.amount', { url: '/amount/:isWallet/:toAddress/:toName/:toEmail', views: { 'tab-send@tabs': { @@ -551,7 +551,7 @@ angular.module('copayApp').config(function(historicLogProvider, $provide, $logPr /* * - *TO DO + * Copayers * */ @@ -565,6 +565,22 @@ angular.module('copayApp').config(function(historicLogProvider, $provide, $logPr } }) + /* + * + * Back flow from receive + * + */ + + .state('tabs.receive.backup', { + url: '/backup/:fromReceive/:walletId', + views: { + 'tab-receive@tabs': { + controller: 'backupController', + templateUrl: 'views/backup.html' + } + } + }) + /* * * Onboarding diff --git a/src/sass/views/includes/modals/modals.scss b/src/sass/views/includes/modals/modals.scss index 63b8af5fe..7c3aca25f 100644 --- a/src/sass/views/includes/modals/modals.scss +++ b/src/sass/views/includes/modals/modals.scss @@ -9,7 +9,12 @@ transform: translate(-50%, -50%); border-radius: .25rem; &-header { - background: rgb(1, 209, 162); + &-success { + background: rgb(1, 209, 162); + } + &-warning { + background: orange; + } padding: 1rem; border-radius: .25rem .25rem 0 0; min-height: 120px; @@ -26,6 +31,12 @@ background-size: contain; margin-top: .3rem; } + &-img-warning { + background-image: url('../img/onboarding-success.svg'); + height: 6rem; + background-size: contain; + margin-top: .3rem; + } } &-content { padding: .5rem .8rem; @@ -42,11 +53,16 @@ font-weight: 200; } } - &-content-success{ + &-content-success { button{ color:rgb(23, 174, 140) !important; } } + &-content-warning { + button{ + color: orange !important; + } + } } .modal-backdrop.active { diff --git a/src/sass/views/tab-receive.scss b/src/sass/views/tab-receive.scss index baa2099d0..e24ba8739 100644 --- a/src/sass/views/tab-receive.scss +++ b/src/sass/views/tab-receive.scss @@ -43,6 +43,16 @@ } &-gen-address {} } + .qr { + padding: 30px; + } + .backup { + background-color: orange; + color: #fff; + i { + padding: 10px; + } + } } #wallets { position: relative; From 82211a5812a179cf4a0777f0c078773b1abfeadb Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Gabriel=20Baz=C3=A1n?= Date: Mon, 26 Sep 2016 14:16:17 -0300 Subject: [PATCH 14/36] fixes --- src/js/controllers/tab-receive.js | 22 +++++++++++----------- 1 file changed, 11 insertions(+), 11 deletions(-) diff --git a/src/js/controllers/tab-receive.js b/src/js/controllers/tab-receive.js index b17468ae5..aec3c8b20 100644 --- a/src/js/controllers/tab-receive.js +++ b/src/js/controllers/tab-receive.js @@ -34,14 +34,11 @@ angular.module('copayApp.controllers').controller('tabReceiveController', functi $scope.addr = null; $scope.generatingAddress = true; - $timeout(function() { - walletService.getAddress($scope.wallet, forceNew, function(err, addr) { - $scope.generatingAddress = false; - if (err) popupService.showAlert(gettextCatalog.getString('Error'), err); - $scope.addr = addr; - $scope.$apply(); - }); - }, 1); + walletService.getAddress($scope.wallet, forceNew, function(err, addr) { + $scope.generatingAddress = false; + if (err) popupService.showAlert(gettextCatalog.getString('Error'), err); + $scope.addr = addr; + }); }; $scope.$on("$ionicView.beforeEnter", function(event, data) { @@ -52,9 +49,12 @@ angular.module('copayApp.controllers').controller('tabReceiveController', functi $log.debug('No wallet provided'); return; } - $scope.wallet = wallet; - $log.debug('Wallet changed: ' + wallet.name); - $scope.setAddress(); + $timeout(function() { + $scope.wallet = wallet; + $log.debug('Wallet changed: ' + wallet.name); + $scope.setAddress(); + $scope.$apply(); + }); }); }); From 33c7e2b297a843f7ff0092264530bbfb4c17b47c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Gabriel=20Baz=C3=A1n?= Date: Mon, 26 Sep 2016 16:11:45 -0300 Subject: [PATCH 15/36] add backup warning view to backup flow --- ...-backup-warning.svg => backup-warning.svg} | 0 ...ng-no-screenshot.svg => no-screenshot.svg} | 0 public/views/backup.html | 12 +++--- .../views/{onboarding => }/backupWarning.html | 6 +-- public/views/includes/backupNeededPopup.html | 4 +- public/views/onboarding/backupRequest.html | 2 +- public/views/preferences.html | 2 +- public/views/tab-receive.html | 2 +- src/js/controllers/backup.js | 25 ++++-------- .../controllers/onboarding/backupWarning.js | 33 ++++++++++------ src/js/controllers/tab-receive.js | 27 +++++++------ src/js/routes.js | 38 +++++++++++++------ src/js/services/profileService.js | 20 ++++++++++ src/js/services/storageService.js | 8 ++++ ...ackup-warning.scss => backup-warning.scss} | 8 ++-- .../modals/screenshot-warning-model.scss | 4 +- src/sass/views/onboarding/onboarding.scss | 4 +- 17 files changed, 123 insertions(+), 72 deletions(-) rename public/img/{onboarding-backup-warning.svg => backup-warning.svg} (100%) rename public/img/{onboarding-no-screenshot.svg => no-screenshot.svg} (100%) rename public/views/{onboarding => }/backupWarning.html (75%) rename src/sass/views/{onboarding/onboard-backup-warning.scss => backup-warning.scss} (89%) diff --git a/public/img/onboarding-backup-warning.svg b/public/img/backup-warning.svg similarity index 100% rename from public/img/onboarding-backup-warning.svg rename to public/img/backup-warning.svg diff --git a/public/img/onboarding-no-screenshot.svg b/public/img/no-screenshot.svg similarity index 100% rename from public/img/onboarding-no-screenshot.svg rename to public/img/no-screenshot.svg diff --git a/public/views/backup.html b/public/views/backup.html index ab45d0ec0..4453e17d7 100644 --- a/public/views/backup.html +++ b/public/views/backup.html @@ -1,10 +1,10 @@ - + - - - + + {{viewTitle}} + + +
diff --git a/public/views/onboarding/backupWarning.html b/public/views/backupWarning.html similarity index 75% rename from public/views/onboarding/backupWarning.html rename to public/views/backupWarning.html index d588060bc..55464baac 100644 --- a/public/views/onboarding/backupWarning.html +++ b/public/views/backupWarning.html @@ -1,7 +1,7 @@ - + - @@ -18,7 +18,7 @@

- +

diff --git a/public/views/includes/backupNeededPopup.html b/public/views/includes/backupNeededPopup.html index c74742e06..dc9747b55 100644 --- a/public/views/includes/backupNeededPopup.html +++ b/public/views/includes/backupNeededPopup.html @@ -10,14 +10,14 @@

diff --git a/public/views/onboarding/backupRequest.html b/public/views/onboarding/backupRequest.html index df33a168e..a76125f41 100644 --- a/public/views/onboarding/backupRequest.html +++ b/public/views/onboarding/backupRequest.html @@ -19,7 +19,7 @@
+ ui-sref="onboarding.backupWarning({from: 'onboarding.backupRequest', walletId: walletId})" translate>Backup wallet
diff --git a/public/views/preferences.html b/public/views/preferences.html index c147ef54b..41319fa36 100644 --- a/public/views/preferences.html +++ b/public/views/preferences.html @@ -40,7 +40,7 @@
Security
- + Backup diff --git a/public/views/tab-receive.html b/public/views/tab-receive.html index 3ab6158aa..d8f43983b 100644 --- a/public/views/tab-receive.html +++ b/public/views/tab-receive.html @@ -31,7 +31,7 @@
-
+
Wallet not backed up
diff --git a/src/js/controllers/backup.js b/src/js/controllers/backup.js index 62170a6c7..01eeae6ec 100644 --- a/src/js/controllers/backup.js +++ b/src/js/controllers/backup.js @@ -84,13 +84,15 @@ angular.module('copayApp.controllers').controller('backupController', $scope.closeBackupResultModal = function() { $scope.confirmBackupModal.hide(); + $scope.confirmBackupModal.remove(); - if ($stateParams.fromOnboarding) { - $state.go('onboarding.disclaimer'); - } else { - $ionicHistory.removeBackView(); - $state.go('tabs.home'); - } + profileService.isDisclaimerAccepted(function(val) { + if (val) { + $ionicHistory.removeBackView(); + $state.go('tabs.home'); + } + else $state.go('onboarding.disclaimer'); + }); }; var confirm = function(cb) { @@ -184,17 +186,6 @@ angular.module('copayApp.controllers').controller('backupController', $scope.selectComplete = false; }; - $scope.backupGoBack = function() { - if ($stateParams.fromOnboarding) $state.go('onboarding.backupWarning', { - walletId: $stateParams.walletId, - fromOnboarding: true - }); - else if ($stateParams.fromReceive) $state.go('tabs.receive'); - else $state.go('tabs.preferences', { - walletId: $stateParams.walletId - }); - }; - $scope.$on("$ionicView.enter", function(event, data) { $scope.deleted = isDeletedSeed(); if ($scope.deleted) { diff --git a/src/js/controllers/onboarding/backupWarning.js b/src/js/controllers/onboarding/backupWarning.js index 6b83ee964..260c5eebd 100644 --- a/src/js/controllers/onboarding/backupWarning.js +++ b/src/js/controllers/onboarding/backupWarning.js @@ -5,20 +5,31 @@ angular.module('copayApp.controllers').controller('backupWarningController', fun $scope.walletId = $stateParams.walletId; $scope.openPopup = function() { $ionicModal.fromTemplateUrl('views/includes/screenshotWarningModal.html', { - scope: $scope, - backdropClickToClose: false, - hardwareBackButtonClose: false - }).then(function(modal) { - $scope.warningModal = modal; - $scope.warningModal.show(); - }); + scope: $scope, + backdropClickToClose: false, + hardwareBackButtonClose: false + }).then(function(modal) { + $scope.warningModal = modal; + $scope.warningModal.show(); + }); $scope.close = function() { $scope.warningModal.hide(); - $state.go('onboarding.backup', { - walletId: $stateParams.walletId, - fromOnboarding: true - }); + if ($stateParams.from == 'onboarding.backupRequest') + $state.go('onboarding.backup', { + walletId: $stateParams.walletId + }); + else + $state.go($stateParams.from + '.backup', { + walletId: $stateParams.walletId + }); }; } + + $scope.goBack = function() { + $state.go($stateParams.from, { + walletId: $stateParams.walletId + }); + }; + }); diff --git a/src/js/controllers/tab-receive.js b/src/js/controllers/tab-receive.js index aec3c8b20..73d670693 100644 --- a/src/js/controllers/tab-receive.js +++ b/src/js/controllers/tab-receive.js @@ -53,6 +53,7 @@ angular.module('copayApp.controllers').controller('tabReceiveController', functi $scope.wallet = wallet; $log.debug('Wallet changed: ' + wallet.name); $scope.setAddress(); + if ($scope.wallet.showBackupNeededModal) $scope.openBackupNeededModal(); $scope.$apply(); }); }); @@ -71,28 +72,32 @@ angular.module('copayApp.controllers').controller('tabReceiveController', functi }, 100); }; - $scope.openBackupNeededPopup = function() { + $scope.openBackupNeededModal = function() { $ionicModal.fromTemplateUrl('views/includes/backupNeededPopup.html', { scope: $scope, backdropClickToClose: false, hardwareBackButtonClose: false }).then(function(modal) { - $scope.BackupNeededPopup = modal; - $scope.BackupNeededPopup.show(); + $scope.BackupNeededModal = modal; + $scope.BackupNeededModal.show(); }); }; - $scope.closeBackupNeededModal = function() { - $scope.BackupNeededPopup.hide(); - $scope.BackupNeededPopup.remove(); + $scope.close = function() { + $scope.BackupNeededModal.hide(); + $scope.BackupNeededModal.remove(); + profileService.setBackupNeededModalFlag($scope.wallet.credentials.walletId); + }; + + $scope.doBackup = function() { + $scope.close(); + $scope.goToBackupFlow(); }; $scope.goToBackupFlow = function() { - $scope.BackupNeededPopup.hide(); - $scope.BackupNeededPopup.remove(); - $state.go('tabs.receive.backup', { - fromReceive: true, + $state.go('tabs.receive.backupWarning', { + from: 'tabs.receive', walletId: $scope.wallet.credentials.walletId }); - }; + } }); diff --git a/src/js/routes.js b/src/js/routes.js index 6dde26bca..9b37ce0a9 100644 --- a/src/js/routes.js +++ b/src/js/routes.js @@ -432,6 +432,14 @@ angular.module('copayApp').config(function(historicLogProvider, $provide, $logPr } } }) + .state('tabs.preferences.backupWarning', { + url: '/backupWarning/:from', + views: { + 'tab-settings@tabs': { + templateUrl: 'views/backupWarning.html' + } + } + }) .state('tabs.preferences.backup', { url: '/backup', views: { @@ -571,15 +579,23 @@ angular.module('copayApp').config(function(historicLogProvider, $provide, $logPr * */ - .state('tabs.receive.backup', { - url: '/backup/:fromReceive/:walletId', - views: { - 'tab-receive@tabs': { - controller: 'backupController', - templateUrl: 'views/backup.html' + .state('tabs.receive.backupWarning', { + url: '/backupWarning/:from/:walletId', + views: { + 'tab-receive@tabs': { + templateUrl: 'views/backupWarning.html' + } } - } - }) + }) + .state('tabs.receive.backup', { + url: '/backup/:walletId', + views: { + 'tab-receive@tabs': { + controller: 'backupController', + templateUrl: 'views/backup.html' + } + } + }) /* * @@ -633,15 +649,15 @@ angular.module('copayApp').config(function(historicLogProvider, $provide, $logPr } }) .state('onboarding.backupWarning', { - url: '/backupWarning/:walletId', + url: '/backupWarning/:from/:walletId', views: { 'onboarding': { - templateUrl: 'views/onboarding/backupWarning.html' + templateUrl: 'views/backupWarning.html' } } }) .state('onboarding.backup', { - url: '/backup/:walletId/:fromOnboarding', + url: '/backup/:walletId', views: { 'onboarding': { templateUrl: 'views/backup.html', diff --git a/src/js/services/profileService.js b/src/js/services/profileService.js index c6bc0d3d0..bb1e15084 100644 --- a/src/js/services/profileService.js +++ b/src/js/services/profileService.js @@ -38,6 +38,22 @@ angular.module('copayApp.services') }); } + root.setBackupNeededModalFlag = function(walletId) { + storageService.setBackupNeededModalFlag(walletId, true, function(err) { + if (err) $log.error(err); + $log.debug('Backup warning modal flag stored'); + root.wallet[walletId].showBackupNeededModal = false; + }); + }; + + function _showBackupNeededModal(wallet, cb) { + storageService.getBackupNeededModalFlag(wallet.credentials.walletId, function(err, val) { + if (err) $log.error(err); + if (val) return cb(false); + return cb(true); + }); + }; + root.setBackupFlag = function(walletId) { storageService.setBackupFlag(walletId, function(err) { if (err) $log.error(err); @@ -101,6 +117,10 @@ angular.module('copayApp.services') wallet.balanceHidden = val; }); + _showBackupNeededModal(wallet, function(val) { + wallet.showBackupNeededModal = val; + }); + wallet.removeAllListeners(); wallet.on('report', function(n) { diff --git a/src/js/services/storageService.js b/src/js/services/storageService.js index 4df36dab1..a1daeb36e 100644 --- a/src/js/services/storageService.js +++ b/src/js/services/storageService.js @@ -365,6 +365,14 @@ angular.module('copayApp.services') storage.get('receiveTips', cb); }; + root.setBackupNeededModalFlag = function(walletId, val, cb) { + storage.set('showBackupNeededModal-' + walletId, val, cb); + }; + + root.getBackupNeededModalFlag = function(walletId, cb) { + storage.get('showBackupNeededModal-' + walletId, cb); + }; + root.setAmazonGiftCards = function(network, gcs, cb) { storage.set('amazonGiftCards-' + network, gcs, cb); }; diff --git a/src/sass/views/onboarding/onboard-backup-warning.scss b/src/sass/views/backup-warning.scss similarity index 89% rename from src/sass/views/onboarding/onboard-backup-warning.scss rename to src/sass/views/backup-warning.scss index af09d351f..ee1017bcc 100644 --- a/src/sass/views/onboarding/onboard-backup-warning.scss +++ b/src/sass/views/backup-warning.scss @@ -1,4 +1,4 @@ -#onboarding-backup-warning{ +#backup-warning{ .warning{ margin:4rem auto 1rem; height: 11rem; @@ -21,7 +21,7 @@ } @media (max-width: 400px){ - #onboarding-backup-warning{ + #backup-warning{ .warning{ margin: 2rem auto 1rem; height: 8rem; @@ -45,10 +45,10 @@ } } @media (max-height: 540px){ - #onboarding-backup-warning{ + #backup-warning{ .cta-buttons{ float:left; position: relative; } } -} \ No newline at end of file +} diff --git a/src/sass/views/includes/modals/screenshot-warning-model.scss b/src/sass/views/includes/modals/screenshot-warning-model.scss index e979e9ff8..64662f0ef 100644 --- a/src/sass/views/includes/modals/screenshot-warning-model.scss +++ b/src/sass/views/includes/modals/screenshot-warning-model.scss @@ -1,7 +1,7 @@ #screenshot-warning-modal{ .popup-modal-header{ &-img{ - background-image: url('../img/onboarding-no-screenshot.svg'); + background-image: url('../img/no-screenshot.svg'); } } -} \ No newline at end of file +} diff --git a/src/sass/views/onboarding/onboarding.scss b/src/sass/views/onboarding/onboarding.scss index c44f79878..7dad89ace 100644 --- a/src/sass/views/onboarding/onboarding.scss +++ b/src/sass/views/onboarding/onboarding.scss @@ -101,7 +101,7 @@ max-width: 600px !important; } button{ - max-width: 400px !important; + max-width: 400px !important; } } } @@ -112,6 +112,6 @@ @import "onboard-tour"; @import "onboard-collect-email"; @import "onboard-backup-request"; -@import "onboard-backup-warning"; +@import "../backup-warning"; @import "onboard-disclaimer"; @import "onboard-push-notifications"; From 3c5022cb6a6af698747492f16dcc5d073fc422d2 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Gabriel=20Baz=C3=A1n?= Date: Mon, 26 Sep 2016 16:19:26 -0300 Subject: [PATCH 16/36] fix --- public/views/includes/screenshotWarningModal.html | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/public/views/includes/screenshotWarningModal.html b/public/views/includes/screenshotWarningModal.html index 0994ea628..bd7f2abba 100644 --- a/public/views/includes/screenshotWarningModal.html +++ b/public/views/includes/screenshotWarningModal.html @@ -1,5 +1,5 @@
-
+
Wallet not backed up
diff --git a/src/js/controllers/import.js b/src/js/controllers/import.js index 388360787..bdc97e984 100644 --- a/src/js/controllers/import.js +++ b/src/js/controllers/import.js @@ -1,7 +1,7 @@ 'use strict'; angular.module('copayApp.controllers').controller('importController', - function($scope, $timeout, $log, $state, $stateParams, profileService, configService, sjcl, ledger, trezor, derivationPathHelper, platformInfo, bwcService, ongoingProcess, walletService, popupService, gettextCatalog) { + function($scope, $timeout, $log, $state, $stateParams, $ionicHistory, profileService, configService, sjcl, ledger, trezor, derivationPathHelper, platformInfo, bwcService, ongoingProcess, walletService, popupService, gettextCatalog) { var isChromeApp = platformInfo.isChromeApp; var isDevel = platformInfo.isDevel; diff --git a/src/js/controllers/tab-receive.js b/src/js/controllers/tab-receive.js index 73d670693..23c157a6e 100644 --- a/src/js/controllers/tab-receive.js +++ b/src/js/controllers/tab-receive.js @@ -33,12 +33,16 @@ angular.module('copayApp.controllers').controller('tabReceiveController', functi $scope.addr = null; $scope.generatingAddress = true; + $timeout(function() { + walletService.getAddress($scope.wallet, forceNew, function(err, addr) { + $scope.generatingAddress = false; + if (err) popupService.showAlert(gettextCatalog.getString('Error'), err); + $scope.addr = addr; + if ($scope.wallet.showBackupNeededModal) $scope.openBackupNeededModal(); + $scope.$apply(); + }); + }, 100); - walletService.getAddress($scope.wallet, forceNew, function(err, addr) { - $scope.generatingAddress = false; - if (err) popupService.showAlert(gettextCatalog.getString('Error'), err); - $scope.addr = addr; - }); }; $scope.$on("$ionicView.beforeEnter", function(event, data) { @@ -49,13 +53,9 @@ angular.module('copayApp.controllers').controller('tabReceiveController', functi $log.debug('No wallet provided'); return; } - $timeout(function() { - $scope.wallet = wallet; - $log.debug('Wallet changed: ' + wallet.name); - $scope.setAddress(); - if ($scope.wallet.showBackupNeededModal) $scope.openBackupNeededModal(); - $scope.$apply(); - }); + $scope.wallet = wallet; + $log.debug('Wallet changed: ' + wallet.name); + $scope.setAddress(); }); }); @@ -73,14 +73,17 @@ angular.module('copayApp.controllers').controller('tabReceiveController', functi }; $scope.openBackupNeededModal = function() { - $ionicModal.fromTemplateUrl('views/includes/backupNeededPopup.html', { - scope: $scope, - backdropClickToClose: false, - hardwareBackButtonClose: false - }).then(function(modal) { - $scope.BackupNeededModal = modal; - $scope.BackupNeededModal.show(); - }); + $timeout(function() { + $ionicModal.fromTemplateUrl('views/includes/backupNeededPopup.html', { + scope: $scope, + backdropClickToClose: false, + hardwareBackButtonClose: false + }).then(function(modal) { + $scope.BackupNeededModal = modal; + $scope.BackupNeededModal.show(); + }); + }, 100); + }; $scope.close = function() { diff --git a/src/js/controllers/tabsController.js b/src/js/controllers/tabsController.js index 6d1a7116f..434a1e80c 100644 --- a/src/js/controllers/tabsController.js +++ b/src/js/controllers/tabsController.js @@ -31,6 +31,10 @@ angular.module('copayApp.controllers').controller('tabsController', function($ro 'tabs.addressbook', 'tabs.addressbook.add', 'tabs.addressbook.view', + 'tabs.preferences.backupWarning', + 'tabs.preferences.backup', + 'tabs.receive.backupWarning', + 'tabs.receive.backup', ]; $rootScope.$on('$ionicView.beforeEnter', function() { diff --git a/src/js/services/profileService.js b/src/js/services/profileService.js index bb1e15084..5ecfe26cc 100644 --- a/src/js/services/profileService.js +++ b/src/js/services/profileService.js @@ -118,7 +118,8 @@ angular.module('copayApp.services') }); _showBackupNeededModal(wallet, function(val) { - wallet.showBackupNeededModal = val; + if (wallet.needsBackup) wallet.showBackupNeededModal = val; + else wallet.showBackupNeededModal = false; }); wallet.removeAllListeners(); From c49edca046f57440c4c4e2530ee30fcd8766b7fa Mon Sep 17 00:00:00 2001 From: Jamal Jackson Date: Tue, 27 Sep 2016 09:57:27 -0400 Subject: [PATCH 18/36] fix on boarding request and collect email minor styles for iPad --- .../views/onboarding/onboard-backup-request.scss | 9 +++++++-- .../views/onboarding/onboard-collect-email.scss | 13 +++++++++++++ 2 files changed, 20 insertions(+), 2 deletions(-) diff --git a/src/sass/views/onboarding/onboard-backup-request.scss b/src/sass/views/onboarding/onboard-backup-request.scss index 693ebe0bc..22b0b6a47 100644 --- a/src/sass/views/onboarding/onboard-backup-request.scss +++ b/src/sass/views/onboarding/onboard-backup-request.scss @@ -15,9 +15,14 @@ position: absolute; bottom: 0; } + @media (min-width: 400px){ + .warning{ + height:16rem; + } + } } -@media (max-width: 400px){ +@media (max-width: 399px){ #onboarding-backup-request{ .warning{ margin: 2rem auto 1rem; @@ -52,7 +57,7 @@ @media (min-height: 980px){ #onboarding-backup-request{ #arrow-down{ - margin-top: 15rem; + margin-top: 7rem; } } } \ No newline at end of file diff --git a/src/sass/views/onboarding/onboard-collect-email.scss b/src/sass/views/onboarding/onboard-collect-email.scss index ebe7ad9b4..28eb7fe47 100644 --- a/src/sass/views/onboarding/onboard-collect-email.scss +++ b/src/sass/views/onboarding/onboard-collect-email.scss @@ -80,6 +80,19 @@ font-size:.8rem; } } + @media (min-width: 400px){ + &{ + max-width: 400px; + label{ + .checkbox{ + left:1rem; + } + .item-content{ + font-size: 1rem; + } + } + } + } } } } From 64b8f10f888cf37b5dd489717c7d136b71e349a4 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Gabriel=20Baz=C3=A1n?= Date: Tue, 27 Sep 2016 10:59:08 -0300 Subject: [PATCH 19/36] remove timeout --- src/js/controllers/tab-receive.js | 19 ++++++++----------- 1 file changed, 8 insertions(+), 11 deletions(-) diff --git a/src/js/controllers/tab-receive.js b/src/js/controllers/tab-receive.js index 23c157a6e..9b7b2c672 100644 --- a/src/js/controllers/tab-receive.js +++ b/src/js/controllers/tab-receive.js @@ -73,17 +73,14 @@ angular.module('copayApp.controllers').controller('tabReceiveController', functi }; $scope.openBackupNeededModal = function() { - $timeout(function() { - $ionicModal.fromTemplateUrl('views/includes/backupNeededPopup.html', { - scope: $scope, - backdropClickToClose: false, - hardwareBackButtonClose: false - }).then(function(modal) { - $scope.BackupNeededModal = modal; - $scope.BackupNeededModal.show(); - }); - }, 100); - + $ionicModal.fromTemplateUrl('views/includes/backupNeededPopup.html', { + scope: $scope, + backdropClickToClose: false, + hardwareBackButtonClose: false + }).then(function(modal) { + $scope.BackupNeededModal = modal; + $scope.BackupNeededModal.show(); + }); }; $scope.close = function() { From db8d587101aacce5f264fb76899564c392bc10f1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Gabriel=20Baz=C3=A1n?= Date: Tue, 27 Sep 2016 12:26:58 -0300 Subject: [PATCH 20/36] Send view contents --- public/views/tab-send.html | 44 ++++++++++++++++--------------- src/js/controllers/tab-send.js | 19 ++++++++++--- src/js/services/profileService.js | 2 +- src/sass/views/tab-send.scss | 7 +++++ 4 files changed, 46 insertions(+), 26 deletions(-) diff --git a/public/views/tab-send.html b/public/views/tab-send.html index d23a0731f..3ab5f5f6a 100644 --- a/public/views/tab-send.html +++ b/public/views/tab-send.html @@ -4,45 +4,47 @@ -
-
Recipient
- -
+
Recipient
+
Contacts - +
- + Add a Contact + - + {{item.name}} + +
+ Show more +
-
+
Transfer to Wallet
-
No Wallet
- + - {{item.name}} +
diff --git a/src/js/controllers/tab-send.js b/src/js/controllers/tab-send.js index 18cafd1d1..45c56dd9b 100644 --- a/src/js/controllers/tab-send.js +++ b/src/js/controllers/tab-send.js @@ -1,8 +1,10 @@ 'use strict'; -angular.module('copayApp.controllers').controller('tabSendController', function($scope, $log, $timeout, addressbookService, profileService, lodash, $state, walletService, incomingData) { +angular.module('copayApp.controllers').controller('tabSendController', function($scope, $log, $timeout, $ionicScrollDelegate, addressbookService, profileService, lodash, $state, walletService, incomingData) { var originalList; + var CONTACTS_SHOW_LIMIT = 10; + var currentContactsPage = 0; var updateList = function() { originalList = []; @@ -11,6 +13,7 @@ angular.module('copayApp.controllers').controller('tabSendController', function( onlyComplete: true }); $scope.hasWallets = lodash.isEmpty(wallets) ? false : true; + $scope.oneWallet = wallets.length == 1; lodash.each(wallets, function(v) { originalList.push({ @@ -27,9 +30,9 @@ angular.module('copayApp.controllers').controller('tabSendController', function( if (err) $log.error(err); $scope.hasContacts = lodash.isEmpty(ab) ? false : true; - var contacts = []; + var completeContacts = []; lodash.each(ab, function(v, k) { - contacts.push({ + completeContacts.push({ name: lodash.isObject(v) ? v.name : v, address: k, email: lodash.isObject(v) ? v.email : null, @@ -39,15 +42,23 @@ angular.module('copayApp.controllers').controller('tabSendController', function( }); }); + var contacts = completeContacts.slice(0, (currentContactsPage + 1) * CONTACTS_SHOW_LIMIT); + $scope.contactsShowMore = completeContacts.length > contacts.length; originalList = originalList.concat(contacts); $scope.list = lodash.clone(originalList); $timeout(function() { + $ionicScrollDelegate.resize(); $scope.$apply(); - }, 1); + }, 10); }); }; + $scope.showMore = function() { + currentContactsPage++; + updateList(); + }; + $scope.findContact = function(search) { if (incomingData.redir(search)) { diff --git a/src/js/services/profileService.js b/src/js/services/profileService.js index bb1e15084..d24364bad 100644 --- a/src/js/services/profileService.js +++ b/src/js/services/profileService.js @@ -1,6 +1,6 @@ 'use strict'; angular.module('copayApp.services') - .factory('profileService', function profileServiceFactory($rootScope, $timeout, $filter, $log, sjcl, lodash, storageService, bwcService, configService, pushNotificationsService, gettext, gettextCatalog, bwcError, uxLanguage, platformInfo, $ionicHistory, txFormatService, $state) { + .factory('profileService', function profileServiceFactory($rootScope, $timeout, $filter, $log, sjcl, lodash, storageService, bwcService, configService, pushNotificationsService, gettext, gettextCatalog, bwcError, uxLanguage, platformInfo, txFormatService, $state) { var isChromeApp = platformInfo.isChromeApp; diff --git a/src/sass/views/tab-send.scss b/src/sass/views/tab-send.scss index bc8664ec0..bd0f19a99 100644 --- a/src/sass/views/tab-send.scss +++ b/src/sass/views/tab-send.scss @@ -16,4 +16,11 @@ position: absolute; top: 10px; } + .show-more { + text-align: center; + padding: 20px; + font-size: 16px; + color: #387ef5; + font-weight: bold; + } } From ed111f34fcd8080ead03d06ccacd9cd343ff6456 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Gabriel=20Baz=C3=A1n?= Date: Tue, 27 Sep 2016 12:46:07 -0300 Subject: [PATCH 21/36] missing ionichistory --- src/js/controllers/confirm.js | 2 +- src/js/controllers/import.js | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/src/js/controllers/confirm.js b/src/js/controllers/confirm.js index 4f0a595bd..ab5440289 100644 --- a/src/js/controllers/confirm.js +++ b/src/js/controllers/confirm.js @@ -1,6 +1,6 @@ 'use strict'; -angular.module('copayApp.controllers').controller('confirmController', function($rootScope, $scope, $filter, $timeout, $ionicScrollDelegate, gettextCatalog, walletService, platformInfo, lodash, configService, rateService, $stateParams, $window, $state, $log, profileService, bitcore, $ionicPopup, gettext, txFormatService, ongoingProcess, $ionicModal, $ionicHistory, popupService) { +angular.module('copayApp.controllers').controller('confirmController', function($rootScope, $scope, $filter, $timeout, $ionicScrollDelegate, gettextCatalog, walletService, platformInfo, lodash, configService, rateService, $stateParams, $window, $state, $log, profileService, bitcore, $ionicPopup, gettext, txFormatService, ongoingProcess, $ionicModal, popupService) { var cachedTxp = {}; var isChromeApp = platformInfo.isChromeApp; diff --git a/src/js/controllers/import.js b/src/js/controllers/import.js index 388360787..bdc97e984 100644 --- a/src/js/controllers/import.js +++ b/src/js/controllers/import.js @@ -1,7 +1,7 @@ 'use strict'; angular.module('copayApp.controllers').controller('importController', - function($scope, $timeout, $log, $state, $stateParams, profileService, configService, sjcl, ledger, trezor, derivationPathHelper, platformInfo, bwcService, ongoingProcess, walletService, popupService, gettextCatalog) { + function($scope, $timeout, $log, $state, $stateParams, $ionicHistory, profileService, configService, sjcl, ledger, trezor, derivationPathHelper, platformInfo, bwcService, ongoingProcess, walletService, popupService, gettextCatalog) { var isChromeApp = platformInfo.isChromeApp; var isDevel = platformInfo.isDevel; From 484d37d15e6464f3fadbfe2e1f573cf421be1e2f Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Gabriel=20Baz=C3=A1n?= Date: Tue, 27 Sep 2016 12:50:10 -0300 Subject: [PATCH 22/36] small fixes --- public/views/modals/txp-details.html | 2 +- src/js/controllers/modals/txStatus.js | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/public/views/modals/txp-details.html b/public/views/modals/txp-details.html index 1227ca724..61bf8443b 100644 --- a/public/views/modals/txp-details.html +++ b/public/views/modals/txp-details.html @@ -160,7 +160,7 @@ Delete Payment Proposal
- +
diff --git a/src/js/controllers/modals/txStatus.js b/src/js/controllers/modals/txStatus.js index d8383c5eb..c78749f1d 100644 --- a/src/js/controllers/modals/txStatus.js +++ b/src/js/controllers/modals/txStatus.js @@ -3,7 +3,7 @@ angular.module('copayApp.controllers').controller('txStatusController', function($scope, $timeout, $state, $ionicHistory, $log, addressbookService) { if ($scope.cb) $timeout($scope.cb, 100); - $scope.fromSendTab = $ionicHistory.viewHistory().backView.stateName === "tabs.send.amount" || "tabs.send"; + $scope.fromSendTab = $ionicHistory.viewHistory().backView && $ionicHistory.viewHistory().backView.stateName === "tabs.send.amount" ||  "tabs.send"; $scope.cancel = function() { $scope.txStatusModal.hide(); From 4e1da5da0fa1b379374008b71d6ca84ec2d8aca0 Mon Sep 17 00:00:00 2001 From: Gustavo Maximiliano Cortez Date: Tue, 27 Sep 2016 12:05:22 -0300 Subject: [PATCH 23/36] Ref txp modals --- public/views/modals/txp-details.html | 106 ++++++++++++----------- src/sass/main.scss | 4 + src/sass/views/includes/txp-details.scss | 2 +- 3 files changed, 59 insertions(+), 53 deletions(-) diff --git a/public/views/modals/txp-details.html b/public/views/modals/txp-details.html index 61bf8443b..8047c62b6 100644 --- a/public/views/modals/txp-details.html +++ b/public/views/modals/txp-details.html @@ -22,32 +22,30 @@
{{tx.amountStr}}
{{tx.alternativeAmountStr}}
-
-
-
+
The payment was removed by creator
+ +
+
+
Payment accepted, but not yet broadcasted
+ + +
+
+
Payment accepted. It will be broadcasted by Glidera. In case there is a problem, it can be deleted 6 hours after it was created.
+
+
Payment Sent
+
Payment Rejected
+
-
-
-
Payment accepted, but not yet broadcasted
- - -
-
-
Payment accepted. It will be broadcasted by Glidera. In case there is a problem, it can be deleted 6 hours after it was created.
-
-
Payment Sent
-
Payment Rejected
-
- -
- Warning: this transaction has unconfirmed inputs +
+ Warning: this transaction has unconfirmed inputs
@@ -73,61 +71,61 @@
- From - - - - - {{wallet.name}} + {{'From'|translate}} + + + + +
{{wallet.name}}
- Created by - + {{'Created by'|translate}} + {{tx.creatorName}}
- Memo - + {{'Memo'|translate}} + {{tx.message}}
- Fee - + {{'Fee'|translate}} + {{tx.feeStr}}
Payment details
-
  • - To - +
    + {{'To'|translate}} + {{tx.paypro.domain}} {{tx.paypro.domain}} -
  • -
  • - Expired - +
  • +
    + {{'Expired'|translate}} + - -
  • - Expires - +
  • +
    + {{'Expires'|translate}} + - -
  • - Merchant Message - {{tx.paypro.pr.pd.memo}} -
  • +
    +
    + {{'Merchant Message'|translate}} + {{tx.paypro.pr.pd.memo}} +
    Timeline
    @@ -151,16 +149,20 @@
    -
    + +
    * A payment proposal can be deleted if 1) you are the creator, and no other copayer has signed, or 2) 24 hours have passed since the proposal was created.
    -
    - diff --git a/src/sass/main.scss b/src/sass/main.scss index 4974b6297..916c8f500 100644 --- a/src/sass/main.scss +++ b/src/sass/main.scss @@ -594,6 +594,10 @@ ul.wallet-selection.wallets { margin-right: 40px; } +.m55r { + margin-right: 55px; +} + .m25r { margin-right: 25px; } diff --git a/src/sass/views/includes/txp-details.scss b/src/sass/views/includes/txp-details.scss index 363466c94..28c1d977e 100644 --- a/src/sass/views/includes/txp-details.scss +++ b/src/sass/views/includes/txp-details.scss @@ -3,7 +3,7 @@ bottom: 100px; } .head { - padding-bottom: 55px; + padding-bottom: 30px; .sending-label{ line-height: 70px; font-size: 25px; From 2efe47c016141cc7f8640f0ea22517e3c8a0291a Mon Sep 17 00:00:00 2001 From: Gustavo Maximiliano Cortez Date: Tue, 27 Sep 2016 12:57:46 -0300 Subject: [PATCH 24/36] Fix txp modals --- public/views/modals/tx-details.html | 75 +++++++++++++------------ public/views/modals/txp-details.html | 2 +- public/views/tab-home.html | 2 +- src/js/controllers/modals/txDetails.js | 3 + src/js/controllers/modals/txpDetails.js | 8 +-- 5 files changed, 48 insertions(+), 42 deletions(-) diff --git a/public/views/modals/tx-details.html b/public/views/modals/tx-details.html index 31d46c5f0..b5a118a29 100644 --- a/public/views/modals/tx-details.html +++ b/public/views/modals/tx-details.html @@ -3,7 +3,7 @@ -
    +
    {{title}}
    @@ -16,25 +16,26 @@ -
    - {{btx.amountStr}} +
    + {{btx.amountStr}}
    -
    - +
    + {{alternativeAmountStr}} - + {{rateStr}} ({{rateDate | amDateFormat:'MM/DD/YYYY HH:mm a'}})
    - Sent from {{wallet.credentials.walletName}} -
    - +
    + Sent from + {{wallet.credentials.walletName}}
    +
    @@ -63,27 +64,26 @@ {{btx.labelTo}} - +
    -
    +
    View transaction on the blockchain
    -
    - Date +
    + {{'Date'|translate}}
    -
    Created by
    - {{btx.creatorName}} + {{'Created by'|translate}} {{btx.creatorName}} @@ -91,9 +91,8 @@
    -
    Fee
    - {{btx.feeLevel}} ({{btx.feeStr}}) - + {{'Fee'|translate}}: {{btx.feeStr}} + Unconfirmed @@ -108,20 +107,23 @@
    -
    Description
    - {{btx.message}} + {{'Description'|translate}} + + {{btx.message}} +
    -
    Merchant message
    - + {{'Merchant message'|translate}} + {{btx.merchant.pr.pd.memo}}
    -
    Recipients
    - {{btx.recipientCount}} + {{'Recipients'|translate}} + + {{btx.recipientCount}} @@ -138,21 +140,22 @@
    -
    - Add Memo - Memo -
    - {{btx.note.body}}
    - - Edited by {{btx.note.editedByName}}, - - -
    +
    + {{'Memo'|translate}} + + + + + {{btx.note.body}} +
    + Edited by {{btx.note.editedByName}}, + +
    +
    Timeline
    -
    diff --git a/public/views/modals/txp-details.html b/public/views/modals/txp-details.html index 8047c62b6..1f89f7b4a 100644 --- a/public/views/modals/txp-details.html +++ b/public/views/modals/txp-details.html @@ -53,7 +53,7 @@ To - + Multiple recipients
    diff --git a/public/views/tab-home.html b/public/views/tab-home.html index 1f7a26f2b..976b72c3b 100644 --- a/public/views/tab-home.html +++ b/public/views/tab-home.html @@ -26,7 +26,7 @@ Payment Proposals - {{txpsN}} + {{txpsN}} diff --git a/src/js/controllers/modals/txDetails.js b/src/js/controllers/modals/txDetails.js index b4e45dae1..f9d7dd4ff 100644 --- a/src/js/controllers/modals/txDetails.js +++ b/src/js/controllers/modals/txDetails.js @@ -126,6 +126,9 @@ angular.module('copayApp.controllers').controller('txDetailsController', functio $scope.rateDate = res.fetchedOn; $scope.rateStr = res.rate + ' ' + $scope.alternativeIsoCode; $scope.alternativeAmountStr = $filter('formatFiatAmount')(alternativeAmountBtc * res.rate) + ' ' + $scope.alternativeIsoCode; + $timeout(function() { + $scope.$apply(); + }); } }); }; diff --git a/src/js/controllers/modals/txpDetails.js b/src/js/controllers/modals/txpDetails.js index 75c4a3120..23ba059b3 100644 --- a/src/js/controllers/modals/txpDetails.js +++ b/src/js/controllers/modals/txpDetails.js @@ -7,6 +7,7 @@ angular.module('copayApp.controllers').controller('txpDetailsController', functi var isGlidera = $scope.isGlidera; var GLIDERA_LOCK_TIME = 6 * 60 * 60; var now = Math.floor(Date.now() / 1000); + var countDown; $scope.init = function() { $scope.loading = null; @@ -18,6 +19,7 @@ angular.module('copayApp.controllers').controller('txpDetailsController', functi $scope.data = {}; initActionList(); + checkPaypro(); } function initActionList() { @@ -53,8 +55,6 @@ angular.module('copayApp.controllers').controller('txpDetailsController', functi $scope.sign(); }); - checkPaypro(); - // ToDo: use tx.customData instead of tx.message if (tx.message === 'Glidera transaction' && isGlidera) { tx.isGlidera = true; @@ -154,7 +154,7 @@ angular.module('copayApp.controllers').controller('txpDetailsController', functi $scope.paymentExpired = false; setExpirationTime(); - self.countDown = $interval(function() { + countDown = $interval(function() { setExpirationTime(); }, 1000); @@ -162,7 +162,7 @@ angular.module('copayApp.controllers').controller('txpDetailsController', functi var now = Math.floor(Date.now() / 1000); if (now > expirationTime) { $scope.paymentExpired = true; - if (self.countDown) $interval.cancel(self.countDown); + if (countDown) $interval.cancel(countDown); return; } var totalSecs = expirationTime - now; From 4649586c4ed5c1784c57d47f6b87753aeeb50ee1 Mon Sep 17 00:00:00 2001 From: Jamal Jackson Date: Tue, 27 Sep 2016 13:40:42 -0400 Subject: [PATCH 25/36] - updated home template with ng-if, instead of ng-show - updated border styles --- public/views/tab-home.html | 32 ++++++++++++++++---------------- src/sass/views/tab-home.scss | 14 ++++++++++++-- 2 files changed, 28 insertions(+), 18 deletions(-) diff --git a/public/views/tab-home.html b/public/views/tab-home.html index 1f7a26f2b..1cd42cf19 100644 --- a/public/views/tab-home.html +++ b/public/views/tab-home.html @@ -4,7 +4,7 @@ -
    +
    @@ -26,7 +26,7 @@ Payment Proposals - {{txpsN}} + {{txpsN}} @@ -61,24 +61,24 @@

    {{wallet.name || wallet.id}} - + {{wallet.m}}-of-{{wallet.n}}

    - + Incomplete -

    -
    +
    Buy & Sell Bitcoin
    - + -
    -
    +
    + ng-if="!externalServices.AmazonGiftCards || !externalServices.BitpayCard || !externalServices.BuyAndSell || !wallets[0]">
    Next steps - - + +
    -
    +
    diff --git a/src/sass/views/tab-home.scss b/src/sass/views/tab-home.scss index f75138075..4ce59566b 100644 --- a/src/sass/views/tab-home.scss +++ b/src/sass/views/tab-home.scss @@ -26,14 +26,24 @@ top:0; right:0; content:''; + @media (min-width: 450px){ + &{ + width:90%; + } + } } &.item-heading{ &:before{ - width:100%; + width:100% !important; top:99% } } - &:nth-child(2){ + &:nth-child(1){ + &:before{ + width:0; + } + } + &:nth-child(2):last-child{ &:before{ width:0; } From 10159728608020c6db37d8c10d0889f28edd534a Mon Sep 17 00:00:00 2001 From: Gustavo Maximiliano Cortez Date: Tue, 27 Sep 2016 14:54:53 -0300 Subject: [PATCH 26/36] Fix alignment badge nr of pending proposals --- public/views/tab-home.html | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/public/views/tab-home.html b/public/views/tab-home.html index 3427914ab..998160d29 100644 --- a/public/views/tab-home.html +++ b/public/views/tab-home.html @@ -25,7 +25,7 @@
    Payment Proposals - {{txpsN}} + {{txpsN}} From 54967cb59c9218bab44d508dea3cd9e3cdc47c1b Mon Sep 17 00:00:00 2001 From: Jamal Jackson Date: Tue, 27 Sep 2016 14:15:24 -0400 Subject: [PATCH 27/36] on boarding media query fixes for applying to devices bigger than iPhone plus size --- src/sass/views/includes/wallets.scss | 1 + src/sass/views/onboarding/onboard-backup-request.scss | 2 +- src/sass/views/onboarding/onboard-collect-email.scss | 2 +- src/sass/views/onboarding/onboarding.scss | 2 +- 4 files changed, 4 insertions(+), 3 deletions(-) diff --git a/src/sass/views/includes/wallets.scss b/src/sass/views/includes/wallets.scss index 772b08058..57a616a94 100644 --- a/src/sass/views/includes/wallets.scss +++ b/src/sass/views/includes/wallets.scss @@ -9,6 +9,7 @@ padding-left:.25rem; padding-right:.25rem; border-radius: .25rem; + max-width: 350px; } .swiper-slide{ width:100% !important; diff --git a/src/sass/views/onboarding/onboard-backup-request.scss b/src/sass/views/onboarding/onboard-backup-request.scss index 22b0b6a47..c64f0db77 100644 --- a/src/sass/views/onboarding/onboard-backup-request.scss +++ b/src/sass/views/onboarding/onboard-backup-request.scss @@ -15,7 +15,7 @@ position: absolute; bottom: 0; } - @media (min-width: 400px){ + @media (min-width: 415px){ .warning{ height:16rem; } diff --git a/src/sass/views/onboarding/onboard-collect-email.scss b/src/sass/views/onboarding/onboard-collect-email.scss index 28eb7fe47..a6cf4acc4 100644 --- a/src/sass/views/onboarding/onboard-collect-email.scss +++ b/src/sass/views/onboarding/onboard-collect-email.scss @@ -80,7 +80,7 @@ font-size:.8rem; } } - @media (min-width: 400px){ + @media (min-width: 415px){ &{ max-width: 400px; label{ diff --git a/src/sass/views/onboarding/onboarding.scss b/src/sass/views/onboarding/onboarding.scss index 7dad89ace..da762022a 100644 --- a/src/sass/views/onboarding/onboarding.scss +++ b/src/sass/views/onboarding/onboarding.scss @@ -87,7 +87,7 @@ } } -@media (min-width: 400px){ +@media (min-width: 415px){ .onboarding{ ion-content{ h2{ From 01d5ba8d9f089d35b7ca1919b181851ca1d846bc Mon Sep 17 00:00:00 2001 From: Gustavo Maximiliano Cortez Date: Tue, 27 Sep 2016 16:01:15 -0300 Subject: [PATCH 28/36] Ref ionicPopup. Clear amount view after send --- public/views/tab-home.html | 6 ++-- src/js/controllers/amount.js | 2 ++ src/js/controllers/confirm.js | 2 +- .../controllers/onboarding/backupRequest.js | 2 +- .../controllers/onboarding/backupWarning.js | 2 +- .../onboarding/welcomeController.js | 2 +- src/js/controllers/tab-send.js | 6 ++-- src/js/controllers/tabsController.js | 6 ++-- src/js/controllers/walletDetails.js | 10 ++---- src/js/services/walletService.js | 32 ++++--------------- 10 files changed, 22 insertions(+), 48 deletions(-) diff --git a/public/views/tab-home.html b/public/views/tab-home.html index 998160d29..8fb038e78 100644 --- a/public/views/tab-home.html +++ b/public/views/tab-home.html @@ -22,10 +22,10 @@
    - - Payment Proposals + + {{'Payment Proposals'|translate}} - {{txpsN}} + {{txpsN}} diff --git a/src/js/controllers/amount.js b/src/js/controllers/amount.js index 48daafb38..e4b157408 100644 --- a/src/js/controllers/amount.js +++ b/src/js/controllers/amount.js @@ -60,6 +60,8 @@ angular.module('copayApp.controllers').controller('amountController', function($ satToBtc = 1 / 100000000; unitDecimals = config.unitDecimals; + $scope.resetAmount(); + // in SAT ALWAYS if ($stateParams.toAmount) { $scope.amount = (($stateParams.toAmount) * satToUnit).toFixed(unitDecimals); diff --git a/src/js/controllers/confirm.js b/src/js/controllers/confirm.js index ab5440289..0b6654842 100644 --- a/src/js/controllers/confirm.js +++ b/src/js/controllers/confirm.js @@ -1,6 +1,6 @@ 'use strict'; -angular.module('copayApp.controllers').controller('confirmController', function($rootScope, $scope, $filter, $timeout, $ionicScrollDelegate, gettextCatalog, walletService, platformInfo, lodash, configService, rateService, $stateParams, $window, $state, $log, profileService, bitcore, $ionicPopup, gettext, txFormatService, ongoingProcess, $ionicModal, popupService) { +angular.module('copayApp.controllers').controller('confirmController', function($rootScope, $scope, $filter, $timeout, $ionicScrollDelegate, gettextCatalog, walletService, platformInfo, lodash, configService, rateService, $stateParams, $window, $state, $log, profileService, bitcore, gettext, txFormatService, ongoingProcess, $ionicModal, popupService) { var cachedTxp = {}; var isChromeApp = platformInfo.isChromeApp; diff --git a/src/js/controllers/onboarding/backupRequest.js b/src/js/controllers/onboarding/backupRequest.js index 1ff5e6271..abf63c661 100644 --- a/src/js/controllers/onboarding/backupRequest.js +++ b/src/js/controllers/onboarding/backupRequest.js @@ -1,6 +1,6 @@ 'use strict'; -angular.module('copayApp.controllers').controller('backupRequestController', function($scope, $state, $stateParams, $ionicPopup, popupService, gettextCatalog) { +angular.module('copayApp.controllers').controller('backupRequestController', function($scope, $state, $stateParams, popupService, gettextCatalog) { $scope.walletId = $stateParams.walletId; diff --git a/src/js/controllers/onboarding/backupWarning.js b/src/js/controllers/onboarding/backupWarning.js index 260c5eebd..795ce1d33 100644 --- a/src/js/controllers/onboarding/backupWarning.js +++ b/src/js/controllers/onboarding/backupWarning.js @@ -1,6 +1,6 @@ 'use strict'; -angular.module('copayApp.controllers').controller('backupWarningController', function($scope, $state, $timeout, $stateParams, $ionicPopup, profileService, $ionicModal) { +angular.module('copayApp.controllers').controller('backupWarningController', function($scope, $state, $timeout, $stateParams, profileService, $ionicModal) { $scope.walletId = $stateParams.walletId; $scope.openPopup = function() { diff --git a/src/js/controllers/onboarding/welcomeController.js b/src/js/controllers/onboarding/welcomeController.js index bb74b9206..aca36409b 100644 --- a/src/js/controllers/onboarding/welcomeController.js +++ b/src/js/controllers/onboarding/welcomeController.js @@ -1,6 +1,6 @@ 'use strict'; -angular.module('copayApp.controllers').controller('welcomeController', function($scope, $state, $timeout, $log, $ionicPopup, profileService) { +angular.module('copayApp.controllers').controller('welcomeController', function($scope, $state, $timeout, $log, profileService) { $scope.goImport = function(code) { $state.go('onboarding.import', { diff --git a/src/js/controllers/tab-send.js b/src/js/controllers/tab-send.js index 45c56dd9b..c3583249a 100644 --- a/src/js/controllers/tab-send.js +++ b/src/js/controllers/tab-send.js @@ -1,6 +1,6 @@ 'use strict'; -angular.module('copayApp.controllers').controller('tabSendController', function($scope, $log, $timeout, $ionicScrollDelegate, addressbookService, profileService, lodash, $state, walletService, incomingData) { +angular.module('copayApp.controllers').controller('tabSendController', function($scope, $log, $timeout, $ionicScrollDelegate, addressbookService, profileService, lodash, $state, walletService, incomingData, popupService) { var originalList; var CONTACTS_SHOW_LIMIT = 10; @@ -99,9 +99,7 @@ angular.module('copayApp.controllers').controller('tabSendController', function( $scope.onQrCodeScanned = function(data) { if (!incomingData.redir(data)) { - $ionicPopup.alert({ - title: 'Invalid data', - }); + popupService.showAlert(null, gettextCatalog.getString('Invalid data')); } }; diff --git a/src/js/controllers/tabsController.js b/src/js/controllers/tabsController.js index 434a1e80c..bfb12da45 100644 --- a/src/js/controllers/tabsController.js +++ b/src/js/controllers/tabsController.js @@ -1,12 +1,10 @@ 'use strict'; -angular.module('copayApp.controllers').controller('tabsController', function($rootScope, $log, $scope, $state, $stateParams, $timeout, incomingData, lodash) { +angular.module('copayApp.controllers').controller('tabsController', function($rootScope, $log, $scope, $state, $stateParams, $timeout, incomingData, lodash, popupService) { $scope.onScan = function(data) { if (!incomingData.redir(data)) { - $ionicPopup.alert({ - title: 'Invalid data', - }); + popupService.showAlert(null, gettextCatalog.getString('Invalid data')); } } diff --git a/src/js/controllers/walletDetails.js b/src/js/controllers/walletDetails.js index c51a99f37..dbb357ca4 100644 --- a/src/js/controllers/walletDetails.js +++ b/src/js/controllers/walletDetails.js @@ -1,6 +1,6 @@ 'use strict'; -angular.module('copayApp.controllers').controller('walletDetailsController', function($scope, $rootScope, $interval, $timeout, $filter, $log, $ionicModal, $ionicPopover, $state, $stateParams, profileService, lodash, configService, gettext, gettextCatalog, platformInfo, walletService, $ionicPopup, txpModalService, externalLinkService) { +angular.module('copayApp.controllers').controller('walletDetailsController', function($scope, $rootScope, $interval, $timeout, $filter, $log, $ionicModal, $ionicPopover, $state, $stateParams, profileService, lodash, configService, gettextCatalog, platformInfo, walletService, txpModalService, externalLinkService, popupService) { var isCordova = platformInfo.isCordova; var isWP = platformInfo.isWP; var isAndroid = platformInfo.isAndroid; @@ -219,9 +219,7 @@ angular.module('copayApp.controllers').controller('walletDetailsController', fun if (tx) { $scope.openTxModal(tx); } else { - $ionicPopup.alert({ - title: gettext('TX not available'), - }); + popupService.showAlert(null, gettextCatalog.getString('TX not available')); } } else if ($stateParams.txpId) { var txp = lodash.find($scope.txps, { @@ -230,9 +228,7 @@ angular.module('copayApp.controllers').controller('walletDetailsController', fun if (txp) { $scope.openTxpModal(txp); } else { - $ionicPopup.alert({ - title: gettext('Proposal not longer available'), - }); + popupService.showAlert(null, gettextCatalog.getString('Proposal not longer available')); } } }); diff --git a/src/js/services/walletService.js b/src/js/services/walletService.js index c9680a5cb..a34b210d3 100644 --- a/src/js/services/walletService.js +++ b/src/js/services/walletService.js @@ -820,32 +820,12 @@ angular.module('copayApp.services').factory('walletService', function($log, $tim // An alert dialog var askPassword = function(name, title, cb) { - var scope = $rootScope.$new(true); - scope.data = []; - var pass = $ionicPopup.show({ - template: '', - title: title, - subTitle: name, - scope: scope, - buttons: [{ - text: 'Cancel' - }, { - text: 'OK', - type: 'button-positive', - onTap: function(e) { - if (!scope.data.pass) { - //don't allow the user to close unless he enters wifi password - e.preventDefault(); - return; - - } - - return scope.data.pass; - } - }] - }); - pass.then(function(res) { - return cb(res); + var opts = { + inputType: 'password' + }; + popupService.showPrompt(title, name, opts, function(res) { + if (!res) return cb(); + if (res) return cb(res) }); }; From d75af58ddf1da3d2c0973b71c1e9ff68664ec2ec Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Gabriel=20Baz=C3=A1n?= Date: Tue, 27 Sep 2016 15:57:39 -0300 Subject: [PATCH 29/36] advanced settings --- public/views/advancedSettings.html | 63 ++++++++++++++ public/views/tab-home.html | 12 +-- public/views/tab-settings.html | 27 ++---- src/js/controllers/advancedSettings.js | 113 +++++++++++++++++++++++++ src/js/controllers/tab-home.js | 4 + src/js/controllers/tab-settings.js | 41 +-------- src/js/routes.js | 9 ++ src/js/services/configService.js | 32 ++++++- src/js/services/profileService.js | 24 +----- 9 files changed, 239 insertions(+), 86 deletions(-) create mode 100644 public/views/advancedSettings.html create mode 100644 src/js/controllers/advancedSettings.js diff --git a/public/views/advancedSettings.html b/public/views/advancedSettings.html new file mode 100644 index 000000000..842904fd5 --- /dev/null +++ b/public/views/advancedSettings.html @@ -0,0 +1,63 @@ + + + {{'Advanced Settings' | translate}} + + + + + +
    +
    Enabled Integrations
    + + + Enable Bitpay Card Integration + + + + Enable Amazon Integration + + + + Enable Glidera Service + + + + + + + +
    Wallet Operation
    + + + Use Unconfirmed Funds + +
    + If enabled, wallets will also try to spend unconfirmed funds. This option may cause transaction delays. +
    + +
    Experimental Features
    +
    + These features aren't quite ready for primetime. They may change, stop working, or disappear at any time. +
    + + + Recent Transaction Card + +
    + If enabled, the Recent Transactions card - a list of transactions occuring across all wallets - will appear in the Home tab. +
    + + + + + +
    +
    +
    diff --git a/public/views/tab-home.html b/public/views/tab-home.html index 998160d29..37643f5e2 100644 --- a/public/views/tab-home.html +++ b/public/views/tab-home.html @@ -33,9 +33,9 @@
    -
    +
    + ng-if="(!externalServices.AmazonGiftCards || !externalServices.BitpayCard || !externalServices.BuyAndSell || !wallets[0]) && nextStepEnabled">
    Next steps @@ -128,21 +128,21 @@ Create a bitcoin wallet - +
    Add BitPay Card
    - +
    Buy or Sell Bitcoin
    - +
    diff --git a/public/views/tab-settings.html b/public/views/tab-settings.html index 6c5add5f2..cb9113da9 100644 --- a/public/views/tab-settings.html +++ b/public/views/tab-settings.html @@ -50,25 +50,6 @@
    -
    Exchanges
    - - - Enable Glidera Service - - - - - -
    Others
    - - - Use Unconfirmed Funds - -
    Notifications
    @@ -108,6 +89,14 @@ About {{appName}} + +
    + + Advanced + + + +
    diff --git a/src/js/controllers/advancedSettings.js b/src/js/controllers/advancedSettings.js new file mode 100644 index 000000000..928b64a93 --- /dev/null +++ b/src/js/controllers/advancedSettings.js @@ -0,0 +1,113 @@ +'use strict'; + +angular.module('copayApp.controllers').controller('advancedSettingsController', function($scope, $rootScope, $log, $window, lodash, configService, uxLanguage, platformInfo, pushNotificationsService, profileService, feeService) { + + var updateConfig = function() { + + var config = configService.getSync(); + + $scope.spendUnconfirmed = { + value: config.wallet.spendUnconfirmed + }; + $scope.bitpayCardEnabled = { + value: config.bitpayCard.enabled + }; + $scope.amazonEnabled = { + value: config.amazon.enabled + }; + $scope.glideraEnabled = { + value: config.glidera.enabled + }; + $scope.coinbaseEnabled = { + value: config.coinbase.enabled + }; + $scope.recentTransactionsEnabled = { + value: config.recentTransactions.enabled + }; + $scope.frequentlyUsedEnabled = { + value: config.frequentlyUsed.enabled + }; + }; + + $scope.spendUnconfirmedChange = function() { + var opts = { + wallet: { + spendUnconfirmed: $scope.spendUnconfirmed.value + } + }; + configService.set(opts, function(err) { + if (err) $log.debug(err); + }); + }; + + $scope.bitpayCardChange = function() { + var opts = { + bitpayCard: { + enabled: $scope.bitpayCardEnabled.value + } + }; + configService.set(opts, function(err) { + if (err) $log.debug(err); + }); + }; + + $scope.amazonChange = function() { + var opts = { + amazon: { + enabled: $scope.amazonEnabled.value + } + }; + configService.set(opts, function(err) { + if (err) $log.debug(err); + }); + }; + + $scope.glideraChange = function() { + var opts = { + glidera: { + enabled: $scope.glideraEnabled.value + } + }; + configService.set(opts, function(err) { + if (err) $log.debug(err); + }); + }; + + $scope.coinbaseChange = function() { + var opts = { + coinbase: { + enabled: $scope.coinbaseEnabled + } + }; + configService.set(opts, function(err) { + if (err) $log.debug(err); + }); + }; + + $scope.recentTransactionsChange = function() { + var opts = { + recentTransactions: { + enabled: $scope.recentTransactionsEnabled + } + }; + configService.set(opts, function(err) { + if (err) $log.debug(err); + }); + }; + + $scope.frequentlyUsedChange = function() { + var opts = { + frequentlyUsed: { + enabled: $scope.frequentlyUsedEnabled + } + }; + configService.set(opts, function(err) { + if (err) $log.debug(err); + }); + }; + + $scope.$on("$ionicView.enter", function(event, data) { + updateConfig(); + }); + +}); diff --git a/src/js/controllers/tab-home.js b/src/js/controllers/tab-home.js index f58bb7ca0..fbaa561f4 100644 --- a/src/js/controllers/tab-home.js +++ b/src/js/controllers/tab-home.js @@ -209,6 +209,10 @@ angular.module('copayApp.controllers').controller('tabHomeController', var isWindowsPhoneApp = platformInfo.isWP && platformInfo.isCordova; $scope.glideraEnabled = config.glidera.enabled && !isWindowsPhoneApp; $scope.coinbaseEnabled = config.coinbase.enabled && !isWindowsPhoneApp; + $scope.amazonEnabled = config.amazon.enabled; + $scope.bitpayCardEnabled = config.bitpayCard.enabled; + $scope.nextStepEnabled = $scope.glideraEnabled || $scope.coinbaseEnabled || $scope.amazonEnabled || $scope.bitpayCardEnabled; + $scope.recentTransactionsEnabled = config.recentTransactions.enabled; }); $scope.nextStep(); $scope.updateAllWallets(); diff --git a/src/js/controllers/tab-settings.js b/src/js/controllers/tab-settings.js index f8f13202c..ba4bfafda 100644 --- a/src/js/controllers/tab-settings.js +++ b/src/js/controllers/tab-settings.js @@ -28,13 +28,7 @@ angular.module('copayApp.controllers').controller('tabSettingsController', funct $scope.$digest(); }); } - $scope.spendUnconfirmed = { - value: config.wallet.spendUnconfirmed - }; - $scope.glideraEnabled = { - value: config.glidera.enabled - }; - $scope.coinbaseEnabled = config.coinbase.enabled; + $scope.pushNotifications = { value: config.pushNotifications.enabled }; @@ -52,17 +46,6 @@ angular.module('copayApp.controllers').controller('tabSettingsController', funct }); }; - $scope.spendUnconfirmedChange = function() { - var opts = { - wallet: { - spendUnconfirmed: $scope.spendUnconfirmed.value - } - }; - configService.set(opts, function(err) { - if (err) $log.debug(err); - }); - }; - $scope.pushNotificationsChange = function() { var opts = { pushNotifications: { @@ -78,28 +61,6 @@ angular.module('copayApp.controllers').controller('tabSettingsController', funct }); }; - $scope.glideraChange = function() { - var opts = { - glidera: { - enabled: $scope.glideraEnabled.value - } - }; - configService.set(opts, function(err) { - if (err) $log.debug(err); - }); - }; - - $scope.coinbaseChange = function() { - var opts = { - coinbase: { - enabled: $scope.coinbaseEnabled - } - }; - configService.set(opts, function(err) { - if (err) $log.debug(err); - }); - }; - $scope.$on("$ionicView.enter", function(event, data) { updateConfig(); }); diff --git a/src/js/routes.js b/src/js/routes.js index 489c156f6..501a304f5 100644 --- a/src/js/routes.js +++ b/src/js/routes.js @@ -390,6 +390,15 @@ angular.module('copayApp').config(function(historicLogProvider, $provide, $logPr } } }) + .state('tabs.advanced', { + url: '/advanced', + views: { + 'tab-settings@tabs': { + controller: 'advancedSettingsController', + templateUrl: 'views/advancedSettings.html' + } + } + }) /* * diff --git a/src/js/services/configService.js b/src/js/services/configService.js index 9ef2fdf23..f7728c6c5 100644 --- a/src/js/services/configService.js +++ b/src/js/services/configService.js @@ -39,10 +39,28 @@ angular.module('copayApp.services').factory('configService', function(storageSer }, coinbase: { - enabled: true, + enabled: false, //disable coinbase for this release testnet: false }, + bitpayCard: { + enabled: true + }, + + amazon: { + enabled: true + }, + + //Experimental Features + + recentTransactions: { + enabled: true + }, + + frequentlyUsed: { + enabled: true + }, + rates: { url: 'https://insight.bitpay.com:443/api/rates', }, @@ -111,6 +129,18 @@ angular.module('copayApp.services').factory('configService', function(storageSer if (!configCache.coinbase) { configCache.coinbase = defaultConfig.coinbase; } + if (!configCache.amazon) { + configCache.amazon = defaultConfig.amazon; + } + if (!configCache.bitpayCard) { + configCache.bitpayCard = defaultConfig.bitpayCard; + } + if (!configCache.recentTransactions) { + configCache.recentTransactions = defaultConfig.recentTransactions; + } + if (!configCache.frequentlyUsed) { + configCache.frequentlyUsed = defaultConfig.frequentlyUsed; + } if (!configCache.pushNotifications) { configCache.pushNotifications = defaultConfig.pushNotifications; } diff --git a/src/js/services/profileService.js b/src/js/services/profileService.js index 247516f9f..0dea73fb0 100644 --- a/src/js/services/profileService.js +++ b/src/js/services/profileService.js @@ -780,21 +780,11 @@ angular.module('copayApp.services') var TIME_STAMP = 60 * 60 * 24 * 7; var MAX = 100; - var typeFilter1 = { - 'NewBlock': 1, - 'BalanceUpdated': 1, - 'NewOutgoingTxByThirdParty': 1, - 'NewAddress': 1, - 'TxProposalFinallyAccepted': 1, - 'TxProposalFinallyRejected': 1, + var typeFilter = { + 'NewOutgoingTx': 1, + 'NewIncomingTx': 1 }; - var typeFilter2 = { - 'TxProposalAcceptedBy': 1, - 'TxProposalRejectedBy': 1, - 'NewTxProposal': 1, - } - var w = root.getWallets(); if (lodash.isEmpty(w)) return cb(); @@ -895,15 +885,9 @@ angular.module('copayApp.services') var n; n = lodash.filter(wallet.cachedActivity.n, function(x) { - return !typeFilter1[x.type]; + return typeFilter[x.type]; }); - if (wallet.m == 1) { - n = lodash.filter(n, function(x) { - return !typeFilter2[x.type]; - }); - } - var idToName = {}; if (wallet.cachedStatus) { lodash.each(wallet.cachedStatus.wallet.copayers, function(c) { From a0a9b42f13268ca7489909fa985e453d921d1725 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Gabriel=20Baz=C3=A1n?= Date: Tue, 27 Sep 2016 16:25:50 -0300 Subject: [PATCH 30/36] adding scss file --- public/views/advancedSettings.html | 8 ++--- src/sass/main.scss | 1 + src/sass/views/advancedSettings.scss | 53 ++++++++++++++++++++++++++++ 3 files changed, 58 insertions(+), 4 deletions(-) create mode 100644 src/sass/views/advancedSettings.scss diff --git a/public/views/advancedSettings.html b/public/views/advancedSettings.html index 842904fd5..e0a2d0e5d 100644 --- a/public/views/advancedSettings.html +++ b/public/views/advancedSettings.html @@ -1,4 +1,4 @@ - + {{'Advanced Settings' | translate}} @@ -33,19 +33,19 @@ Use Unconfirmed Funds -
    +
    If enabled, wallets will also try to spend unconfirmed funds. This option may cause transaction delays.
    Experimental Features
    -
    +
    These features aren't quite ready for primetime. They may change, stop working, or disappear at any time.
    Recent Transaction Card -
    +
    If enabled, the Recent Transactions card - a list of transactions occuring across all wallets - will appear in the Home tab.
    diff --git a/src/sass/main.scss b/src/sass/main.scss index 916c8f500..d5a17d289 100644 --- a/src/sass/main.scss +++ b/src/sass/main.scss @@ -996,6 +996,7 @@ input[type=number] { @import "views/tab-send"; @import "views/tab-settings"; @import "views/walletDetails"; +@import "views/advancedSettings"; @import "views/bitpayCard"; @import "views/address-book"; @import "views/wallet-backup-phrase"; diff --git a/src/sass/views/advancedSettings.scss b/src/sass/views/advancedSettings.scss new file mode 100644 index 000000000..d3da674d9 --- /dev/null +++ b/src/sass/views/advancedSettings.scss @@ -0,0 +1,53 @@ +.settings { + .item { + color: #444; + border-color: rgba(221, 221, 221, 0.3); + } +} + +#advanced-settings { + .list { + .item { + color: #444; + border-top: none; + padding-top: 1.5rem; + padding-bottom: 1.5rem; + &:before { + display: block; + position: absolute; + width: 100%; + height: 1px; + background: rgba(221, 221, 221, 0.3); + top: 0; + right: 0; + content: ''; + } + &.item-divider { + color: rgba(74, 74, 74, .8); + } + &.item-heading { + &:before { + top: 99% + } + } + &:nth-child(2) { + &:before { + width: 0; + } + } + .item-note { + color: rgb(58, 58, 58); + } + } + .comment { + padding: 15px; + background-color: #fff; + color: rgba(74, 74, 74, 0.8); + } + .divider-comment { + padding: 15px; + color: rgba(74, 74, 74, 0.8); + font-size: 15px; + } + } +} From 2c3220e04154a796ea9a803981990983bf6f96c3 Mon Sep 17 00:00:00 2001 From: Gustavo Maximiliano Cortez Date: Wed, 28 Sep 2016 09:43:19 -0300 Subject: [PATCH 31/36] Minux bug fixes --- src/js/controllers/modals/txStatus.js | 5 ++++- src/sass/views/confirm.scss | 2 +- 2 files changed, 5 insertions(+), 2 deletions(-) diff --git a/src/js/controllers/modals/txStatus.js b/src/js/controllers/modals/txStatus.js index c78749f1d..9b9cdd7e4 100644 --- a/src/js/controllers/modals/txStatus.js +++ b/src/js/controllers/modals/txStatus.js @@ -9,7 +9,10 @@ angular.module('copayApp.controllers').controller('txStatusController', function $scope.txStatusModal.hide(); if ($scope.fromSendTab) { $ionicHistory.removeBackView(); - $state.go('tabs.home'); + $state.go('tabs.send'); + $timeout(function() { + $state.transitionTo('tabs.home'); + }, 100); } }; diff --git a/src/sass/views/confirm.scss b/src/sass/views/confirm.scss index 1a739bba1..425850d92 100644 --- a/src/sass/views/confirm.scss +++ b/src/sass/views/confirm.scss @@ -9,7 +9,7 @@ } .accept-slide { position: fixed; - bottom: 49px; + bottom: 0; width: 100%; height: 100px; background-color: #647CE8; From 570b16a81a8a03f55b2d45081f800ff5e838f768 Mon Sep 17 00:00:00 2001 From: Javier Date: Wed, 28 Sep 2016 10:42:25 -0300 Subject: [PATCH 32/36] reverse timeline --- src/js/controllers/modals/txDetails.js | 2 ++ src/js/controllers/modals/txpDetails.js | 2 ++ 2 files changed, 4 insertions(+) diff --git a/src/js/controllers/modals/txDetails.js b/src/js/controllers/modals/txDetails.js index f9d7dd4ff..37f6718fa 100644 --- a/src/js/controllers/modals/txDetails.js +++ b/src/js/controllers/modals/txDetails.js @@ -73,6 +73,8 @@ angular.module('copayApp.controllers').controller('txDetailsController', functio time: $scope.btx.time, description: actionDescriptions['broadcasted'], }); + + $scope.actionList.reverse(); }; $scope.showCommentPopup = function() { diff --git a/src/js/controllers/modals/txpDetails.js b/src/js/controllers/modals/txpDetails.js index 23ba059b3..8f76d7f4d 100644 --- a/src/js/controllers/modals/txpDetails.js +++ b/src/js/controllers/modals/txpDetails.js @@ -49,6 +49,8 @@ angular.module('copayApp.controllers').controller('txpDetailsController', functi by: action.copayerName }); }); + + $scope.actionList.reverse(); }; $scope.$on('accepted', function(event) { From fb117ba1ba4def62072286749ba7940319923976 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Gabriel=20Baz=C3=A1n?= Date: Wed, 28 Sep 2016 10:50:33 -0300 Subject: [PATCH 33/36] add notifications settings --- public/views/preferencesNotifications.html | 29 +++++++++++ public/views/tab-settings.html | 24 +++------ .../controllers/preferencesNotifications.js | 52 +++++++++++++++++++ src/js/controllers/tab-settings.js | 37 +------------ src/js/routes.js | 11 +++- src/sass/views/notifications.scss | 43 +++++++++++++++ 6 files changed, 142 insertions(+), 54 deletions(-) create mode 100644 public/views/preferencesNotifications.html create mode 100644 src/js/controllers/preferencesNotifications.js create mode 100644 src/sass/views/notifications.scss diff --git a/public/views/preferencesNotifications.html b/public/views/preferencesNotifications.html new file mode 100644 index 000000000..8b54a93e2 --- /dev/null +++ b/public/views/preferencesNotifications.html @@ -0,0 +1,29 @@ + + + {{'Notifications' | translate}} + + + + + +
    +
    +
    Notifications
    + + + Enable push notifications + +
    + +
    +
    Notifications
    +
    + Push notifications for Copay are currently disabled. Enable them in the Settings app. +
    + + Open Settings app + +
    +
    +
    +
    diff --git a/public/views/tab-settings.html b/public/views/tab-settings.html index cb9113da9..efdff84ad 100644 --- a/public/views/tab-settings.html +++ b/public/views/tab-settings.html @@ -14,6 +14,12 @@
    Preferences
    + + + Notifications + + + Language @@ -50,24 +56,6 @@ -
    -
    Notifications
    - - - Enable push notifications - -
    - -
    -
    Notifications
    -
    - Push notifications for Copay are currently disabled. Enable them in the Settings app. -
    - - Open Settings app - -
    -
    Wallets Preferences
    Date: Wed, 28 Sep 2016 11:59:42 -0300 Subject: [PATCH 34/36] switch advanced and about --- public/views/tab-settings.html | 12 +++++------- 1 file changed, 5 insertions(+), 7 deletions(-) diff --git a/public/views/tab-settings.html b/public/views/tab-settings.html index efdff84ad..0231d8d99 100644 --- a/public/views/tab-settings.html +++ b/public/views/tab-settings.html @@ -71,13 +71,6 @@ -
    - - - About {{appName}} - - -
    Advanced @@ -85,6 +78,11 @@
    + + + About {{appName}} + +
    From 947a12b996f3c3fae7b16c4f0fd0b9c1146ae7fd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Gabriel=20Baz=C3=A1n?= Date: Wed, 28 Sep 2016 12:26:09 -0300 Subject: [PATCH 35/36] Save last state only for onboarding views --- src/js/routes.js | 2 ++ 1 file changed, 2 insertions(+) diff --git a/src/js/routes.js b/src/js/routes.js index d76a7328e..ba828213c 100644 --- a/src/js/routes.js +++ b/src/js/routes.js @@ -995,6 +995,8 @@ angular.module('copayApp').config(function(historicLogProvider, $provide, $logPr $log.debug('Route change from:', fromState.name || '-', ' to:', toState.name); $log.debug(' toParams:' + JSON.stringify(toParams || {})); $log.debug(' fromParams:' + JSON.stringify(fromParams || {})); + + if (!toState.name.match(/onboarding/)) return; var state = {}; state.name = toState.name; state.toParams = toParams; From 8cda873299ef95758d049f5c5c24d2914a56c083 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Gabriel=20Baz=C3=A1n?= Date: Wed, 28 Sep 2016 14:11:09 -0300 Subject: [PATCH 36/36] go to copayers when join wallet if is not complete --- src/js/controllers/join.js | 14 +++++++++++++- 1 file changed, 13 insertions(+), 1 deletion(-) diff --git a/src/js/controllers/join.js b/src/js/controllers/join.js index 872b15462..83150713a 100644 --- a/src/js/controllers/join.js +++ b/src/js/controllers/join.js @@ -146,7 +146,19 @@ angular.module('copayApp.controllers').controller('joinController', $log.debug('Remote preferences saved for:' + client.credentials.walletId) }); $ionicHistory.removeBackView(); - $state.go('tabs.home'); + + if (!client.isComplete()) { + $ionicHistory.nextViewOptions({ + disableAnimate: true + }); + $state.go('tabs.home'); + $timeout(function() { + $state.transitionTo('tabs.copayers', { + walletId: client.credentials.walletId + }); + }, 100); + } + else $state.go('tabs.home') }); }, 100); };