diff --git a/src/js/controllers/amount.js b/src/js/controllers/amount.js index cd9bf9429..99912b99f 100644 --- a/src/js/controllers/amount.js +++ b/src/js/controllers/amount.js @@ -1,7 +1,7 @@ 'use strict'; angular.module('copayApp.controllers').controller('amountController', function($scope, $filter, $timeout, $ionicScrollDelegate, $ionicHistory, gettextCatalog, platformInfo, lodash, configService, rateService, $stateParams, $window, $state, $log, txFormatService, ongoingProcess, popupService, bwcError, payproService, profileService, bitcore, amazonService, nodeWebkitService) { - var _cardId; + var _id; var unitToSatoshi; var satToUnit; var unitDecimals; @@ -17,7 +17,7 @@ angular.module('copayApp.controllers').controller('amountController', function($ $scope.$on("$ionicView.beforeEnter", function(event, data) { // Go to... - _cardId = data.stateParams.id; // Optional (BitPay Card ID) + _id = data.stateParams.id; // Optional (BitPay Card ID or Wallet ID) $scope.nextStep = data.stateParams.nextStep; $scope.currency = data.stateParams.currency; $scope.forceCurrency = data.stateParams.forceCurrency; @@ -30,11 +30,8 @@ angular.module('copayApp.controllers').controller('amountController', function($ $scope.toEmail = data.stateParams.toEmail; $scope.showAlternativeAmount = !!$scope.nextStep; $scope.toColor = data.stateParams.toColor; - $scope.walletId = data.stateParams.walletId; $scope.showSendMax = false; - $scope.customAmount = data.stateParams.customAmount; - if (!$scope.nextStep && !data.stateParams.toAddress) { $log.error('Bad params at amount') throw ('bad params'); @@ -228,30 +225,22 @@ angular.module('copayApp.controllers').controller('amountController', function($ if ($scope.nextStep) { $state.transitionTo($scope.nextStep, { - id: _cardId, + id: _id, amount: $scope.useSendMax ? null : _amount, currency: $scope.showAlternativeAmount ? $scope.alternativeIsoCode : $scope.unitName, useSendMax: $scope.useSendMax }); } else { var amount = $scope.showAlternativeAmount ? fromFiat(_amount) : _amount; - if ($scope.customAmount) { - $state.transitionTo('tabs.receive.customAmount', { - walletId: $scope.walletId, - toAmount: (amount * unitToSatoshi).toFixed(0), - toAddress: $scope.toAddress - }); - } else { - $state.transitionTo('tabs.send.confirm', { - recipientType: $scope.recipientType, - toAmount: $scope.useSendMax ? null : (amount * unitToSatoshi).toFixed(0), - toAddress: $scope.toAddress, - toName: $scope.toName, - toEmail: $scope.toEmail, - toColor: $scope.toColor, - useSendMax: $scope.useSendMax - }); - } + $state.transitionTo('tabs.send.confirm', { + recipientType: $scope.recipientType, + toAmount: $scope.useSendMax ? null : (amount * unitToSatoshi).toFixed(0), + toAddress: $scope.toAddress, + toName: $scope.toName, + toEmail: $scope.toEmail, + toColor: $scope.toColor, + useSendMax: $scope.useSendMax + }); } $scope.useSendMax = null; }; diff --git a/src/js/controllers/customAmount.js b/src/js/controllers/customAmount.js index 0f81cb1cb..b3040977e 100644 --- a/src/js/controllers/customAmount.js +++ b/src/js/controllers/customAmount.js @@ -1,23 +1,64 @@ 'use strict'; -angular.module('copayApp.controllers').controller('customAmountController', function($rootScope, $scope, $stateParams, $ionicHistory, txFormatService, platformInfo, profileService) { +angular.module('copayApp.controllers').controller('customAmountController', function($rootScope, $scope, $stateParams, $ionicHistory, txFormatService, platformInfo, configService, profileService, walletService, popupService) { + + var showErrorAndBack = function(title, msg) { + popupService.showAlert(title, msg, function() { + $scope.close(); + }); + }; $scope.$on("$ionicView.beforeEnter", function(event, data) { - var satToBtc = 1 / 100000000; - $scope.isCordova = platformInfo.isCordova; - $scope.address = data.stateParams.toAddress; - $scope.amount = parseInt(data.stateParams.toAmount); - $scope.amountBtc = ($scope.amount * satToBtc).toFixed(8); - $scope.amountStr = txFormatService.formatAmountStr($scope.amount); - $scope.altAmountStr = txFormatService.formatAlternativeStr($scope.amount); - $scope.wallet = profileService.getWallet($stateParams.walletId); + var walletId = data.stateParams.id; + + if (!walletId) { + showErrorAndBack('Error', 'No wallet selected'); + return; + } + + $scope.wallet = profileService.getWallet(walletId); + + walletService.getAddress($scope.wallet, false, function(err, addr) { + if (!addr) { + showErrorAndBack('Error', 'Could not get the address'); + return; + } + + $scope.address = addr; + + var parsedAmount = txFormatService.parseAmount( + data.stateParams.amount, + data.stateParams.currency); + + // Amount in USD or BTC + var amount = parsedAmount.amount; + var currency = parsedAmount.currency; + $scope.amountUnitStr = parsedAmount.amountUnitStr; + + if (currency != 'BTC') { + // Convert to BTC + var config = configService.getSync().wallet.settings; + var amountUnit = txFormatService.satToUnit(parsedAmount.amountSat); + var btcParsedAmount = txFormatService.parseAmount(amountUnit, config.unitName); + + $scope.amountBtc = btcParsedAmount.amount; + $scope.altAmountStr = btcParsedAmount.amountUnitStr; + } else { + $scope.amountBtc = amount; // BTC + $scope.altAmountStr = txFormatService.formatAlternativeStr(parsedAmount.amountSat); + } + }); }); - $scope.finish = function() { + $scope.close = function() { $ionicHistory.nextViewOptions({ - disableAnimate: false + disableAnimate: true }); $ionicHistory.goBack(-2); }; + $scope.copyToClipboard = function() { + return 'bitcoin:' + $scope.address + '?amount=' + $scope.amountBtc; + }; + }); diff --git a/src/js/controllers/tab-receive.js b/src/js/controllers/tab-receive.js index 8bc07ef07..cd826cc05 100644 --- a/src/js/controllers/tab-receive.js +++ b/src/js/controllers/tab-receive.js @@ -7,10 +7,8 @@ angular.module('copayApp.controllers').controller('tabReceiveController', functi $scope.isNW = platformInfo.isNW; $scope.requestSpecificAmount = function() { - $state.go('tabs.receive.amount', { - walletId: $scope.wallet.credentials.walletId, - customAmount: true, - toAddress: $scope.addr + $state.go('tabs.paymentRequest.amount', { + id: $scope.wallet.credentials.walletId }); }; diff --git a/src/js/routes.js b/src/js/routes.js index b9a31abd4..48645cf3d 100644 --- a/src/js/routes.js +++ b/src/js/routes.js @@ -656,8 +656,17 @@ angular.module('copayApp').config(function(historicLogProvider, $provide, $logPr * */ - .state('tabs.receive.amount', { - url: '/amount/:walletId/:customAmount/:toAddress', + .state('tabs.paymentRequest', { + url: '/payment-request', + abstract: true, + params: { + id: null, + nextStep: 'tabs.paymentRequest.confirm' + } + }) + + .state('tabs.paymentRequest.amount', { + url: '/amount', views: { 'tab-receive@tabs': { controller: 'amountController', @@ -665,8 +674,8 @@ angular.module('copayApp').config(function(historicLogProvider, $provide, $logPr } } }) - .state('tabs.receive.customAmount', { - url: '/customAmount/:walletId/:toAmount/:toAddress', + .state('tabs.paymentRequest.confirm', { + url: '/confirm/:amount/:currency', views: { 'tab-receive@tabs': { controller: 'customAmountController', diff --git a/src/sass/views/custom-amount.scss b/src/sass/views/custom-amount.scss index 11d529355..245734a09 100644 --- a/src/sass/views/custom-amount.scss +++ b/src/sass/views/custom-amount.scss @@ -1,15 +1,69 @@ #custom-amount { - .share { - justify-content: center; - } - .info { - .single-line { - display: flex; - align-items: center; - padding-top: 17px; - padding-bottom: 17px; - .item-note { - margin-left: 10px; + @extend .deflash-blue; + $item-lateral-padding: 20px; + $item-vertical-padding: 10px; + $item-label-color: #6C6C6E; + .address { + background: #fff; + overflow: auto; + height: 100%; + .qr-code { + text-align: center; + margin-top: 24vh; + margin-bottom: 7vh; + @media(max-height: 800px) { + margin-top: 18vh; + } + @media(max-height: 700px) { + margin-top: 14vh; + } + @media(max-height: 600px) { + margin-top: 8vh; + } + } + .info { + position: absolute; + width: 100%; + bottom: 0; + .badge { + border-radius: 0; + padding: .5rem; + } + .item { + color: #4A4A4A; + padding-top: $item-vertical-padding; + padding-bottom: $item-vertical-padding; + padding-left: $item-lateral-padding; + + &:not(.item-icon-right) { + padding-right: $item-lateral-padding; + } + + .label { + font-size: 14px; + color: $item-label-color; + margin-bottom: 8px; + } + .wallet { + float: right; + overflow: hidden; + } + .wallet .big-icon-svg > .bg { + height: 20px; + width: 20px; + padding: 1px; + box-shadow: none; + vertical-align: text-bottom; + } + .single-line { + display: flex; + align-items: center; + padding-top: 17px; + padding-bottom: 17px; + .item-note { + margin-left: 10px; + } + } } } } diff --git a/www/views/customAmount.html b/www/views/customAmount.html index 7208f02e2..3aead822c 100644 --- a/www/views/customAmount.html +++ b/www/views/customAmount.html @@ -3,31 +3,39 @@ {{'Custom Amount' | translate}} - - - + Close - - - - - - - Address - - {{address}} - + + + - - Amount - - {{amountStr}} - {{altAmountStr}} - + + + Address + + {{address}} + + + + Amount + + {{amountUnitStr}} - {{altAmountStr}} + + + + + + + + {{wallet.name}} + + Receive in +