diff --git a/app-template/bitcoincom/appConfig.json b/app-template/bitcoincom/appConfig.json index b87f3dbd2..41c2789c8 100644 --- a/app-template/bitcoincom/appConfig.json +++ b/app-template/bitcoincom/appConfig.json @@ -24,8 +24,9 @@ "windowsAppId": "804636ee-b017-4cad-8719-e58ac97ffa5c", "pushSenderId": "1036948132229", "description": "A Secure Bitcoin Wallet", - "version": "4.10.1", - "androidVersion": "410100", + "version": "4.11.0", + "fullVersion": "4.11-rc1", + "androidVersion": "411000", "_extraCSS": "", "_enabledExtensions": { "coinbase": false, diff --git a/app-template/package-template.json b/app-template/package-template.json index 955e33e7e..660063183 100644 --- a/app-template/package-template.json +++ b/app-template/package-template.json @@ -3,6 +3,7 @@ "description": "*DESCRIPTION*", "author": "BitPay", "version": "*VERSION*", + "fullVersion": "*FULLVERSION*", "keywords": [ "bitcoin", "wallet", diff --git a/src/js/controllers/amount.js b/src/js/controllers/amount.js index ce09a4137..f10121ee6 100644 --- a/src/js/controllers/amount.js +++ b/src/js/controllers/amount.js @@ -322,7 +322,6 @@ angular.module('copayApp.controllers').controller('amountController', function($ $scope.amountModel.amount = ($scope.amountModel.amount + digit).replace('..', '.'); checkFontSize(); $scope.processAmount(); - navigator.vibrate(50); }; $scope.pushOperator = function(operator) { @@ -358,7 +357,6 @@ angular.module('copayApp.controllers').controller('amountController', function($ $scope.amountModel.amount = $scope.alternativeAmount = $scope.globalResult = ''; $scope.allowSend = false; checkFontSize(); - navigator.vibrate(50); }; diff --git a/src/js/controllers/confirm.js b/src/js/controllers/confirm.js index 6ec1d9469..fc92a2287 100644 --- a/src/js/controllers/confirm.js +++ b/src/js/controllers/confirm.js @@ -205,6 +205,8 @@ angular.module('copayApp.controllers').controller('confirmController', function( } }); + $scope.displayBalanceAsFiat = walletConfig.settings.priceDisplay === 'fiat'; + }); diff --git a/src/js/controllers/preferencesAbout.js b/src/js/controllers/preferencesAbout.js index a7c756cce..463e92030 100644 --- a/src/js/controllers/preferencesAbout.js +++ b/src/js/controllers/preferencesAbout.js @@ -4,7 +4,7 @@ angular.module('copayApp.controllers').controller('preferencesAbout', function($scope, $window, appConfigService, gettextCatalog, externalLinkService, $ionicNavBarDelegate) { $scope.title = gettextCatalog.getString('About') + ' ' + appConfigService.nameCase; - $scope.version = $window.version; + $scope.version = $window.fullVersion; $scope.commitHash = $window.commitHash; $scope.openExternalLink = function() { diff --git a/src/js/controllers/tab-receive.js b/src/js/controllers/tab-receive.js index 95f9a6610..c9fa46de9 100644 --- a/src/js/controllers/tab-receive.js +++ b/src/js/controllers/tab-receive.js @@ -13,6 +13,8 @@ angular.module('copayApp.controllers').controller('tabReceiveController', functi var currentAddressSocket = {}; var paymentSubscriptionObj = { op:"addr_sub" } + $scope.displayBalanceAsFiat = true; + $scope.requestSpecificAmount = function() { $state.go('tabs.paymentRequest.amount', { id: $scope.wallet.credentials.walletId, @@ -212,6 +214,10 @@ angular.module('copayApp.controllers').controller('tabReceiveController', functi if ($scope.wallet && walletId == $scope.wallet.id && type == 'NewIncomingTx') $scope.setAddress(true); }) ]; + + configService.whenAvailable(function(config) { + $scope.displayBalanceAsFiat = config.wallet.settings.priceDisplay === 'fiat'; + }); }); $scope.$on("$ionicView.enter", function(event, data) { diff --git a/src/js/controllers/tab-scan.js b/src/js/controllers/tab-scan.js index fef3f2764..a96591a25 100644 --- a/src/js/controllers/tab-scan.js +++ b/src/js/controllers/tab-scan.js @@ -108,6 +108,9 @@ angular.module('copayApp.controllers').controller('tabScanController', function( function handleSuccessfulScan(contents){ $log.debug('Scan returned: "' + contents + '"'); scannerService.pausePreview(); + // Sometimes (testing in Chrome, when reading QR Code) data is an object + // that has a string data.result. + contents = contents.result || contents; incomingData.redir(contents); } diff --git a/src/js/controllers/tab-send.js b/src/js/controllers/tab-send.js index 65077995f..29f1749cb 100644 --- a/src/js/controllers/tab-send.js +++ b/src/js/controllers/tab-send.js @@ -72,15 +72,22 @@ angular.module('copayApp.controllers').controller('tabSendController', function( return item.network == 'livenet'; }); } + var walletList = []; lodash.each(walletsToTransfer, function(v) { + var displayBalanceAsFiat = + v.status.alternativeBalanceAvailable && + config.wallet.settings.priceDisplay === 'fiat'; + walletList.push({ color: v.color, name: v.name, recipientType: 'wallet', coin: v.coin, network: v.network, - balanceString: v.cachedBalance, + balanceString: displayBalanceAsFiat ? + v.status.totalBalanceAlternative + ' ' + v.status.alternativeIsoCode : + v.cachedBalance, getAddress: function(cb) { walletService.getAddress(v, false, cb); }, diff --git a/src/js/directives/walletSelector.js b/src/js/directives/walletSelector.js index 256a2c20d..79053f812 100644 --- a/src/js/directives/walletSelector.js +++ b/src/js/directives/walletSelector.js @@ -11,7 +11,8 @@ angular.module('copayApp.directives') show: '=walletSelectorShow', wallets: '=walletSelectorWallets', selectedWallet: '=walletSelectorSelectedWallet', - onSelect: '=walletSelectorOnSelect' + onSelect: '=walletSelectorOnSelect', + displayBalanceAsFiat : '=walletSelectorDisplayBalanceAsFiat' }, link: function(scope, element, attrs) { scope.hide = function() { diff --git a/src/js/services/bitcoincomService.js b/src/js/services/bitcoincomService.js index 07e0d8aa4..681ed8f4d 100644 --- a/src/js/services/bitcoincomService.js +++ b/src/js/services/bitcoincomService.js @@ -44,6 +44,20 @@ angular.module('copayApp.services').factory('bitcoincomService', function($http, href: 'http://tools.bitcoin.com' }; + var priceChartItem = { + name: 'pricechart', + title: 'Bitcoin Price Charts', + icon: 'icon-chart', + sref: 'tabs.pricechart', + }; + + var faucetItem = { + name: 'faucet', + title: 'Free Bitcoin Cash', + icon: 'icon-faucet', + href: 'https://free.bitcoin.com/' + }; + var _getBitPay = function(endpoint) { return { method: 'GET', @@ -74,6 +88,8 @@ angular.module('copayApp.services').factory('bitcoincomService', function($http, nextStepsService.register(newsItem); nextStepsService.register(poolItem); nextStepsService.register(toolsItem); + nextStepsService.register(priceChartItem); + nextStepsService.register(faucetItem); }; register(); diff --git a/src/js/services/incomingData.js b/src/js/services/incomingData.js index b912c3233..a318e1157 100644 --- a/src/js/services/incomingData.js +++ b/src/js/services/incomingData.js @@ -11,7 +11,7 @@ angular.module('copayApp.services').factory('incomingData', function($log, $stat root.redir = function(data, shapeshiftData) { var originalAddress = null; var noPrefixInAddress = 0; - + if (data.toLowerCase().indexOf('bitcoin') < 0) { noPrefixInAddress = 1; } diff --git a/src/js/services/pricechartService.js b/src/js/services/pricechartService.js index becb62ad5..7e4f27457 100644 --- a/src/js/services/pricechartService.js +++ b/src/js/services/pricechartService.js @@ -3,17 +3,5 @@ angular.module('copayApp.services').factory('pricechartService', function($http, var root = {}; var credentials = {}; - var nextStepItem = { - name: 'pricechart', - title: 'Bitcoin Price Charts', - icon: 'icon-chart', - sref: 'tabs.pricechart', - }; - - var register = function() { - nextStepsService.register(nextStepItem); - }; - - register(); return root; }); diff --git a/src/js/services/profileService.js b/src/js/services/profileService.js index 068c3b2ae..dac88169f 100644 --- a/src/js/services/profileService.js +++ b/src/js/services/profileService.js @@ -932,8 +932,17 @@ angular.module('copayApp.services') x.txid = x.data ? x.data.txid : null; x.types = [x.type]; - if (x.data && x.data.amount) + if (x.data && x.data.amount) { + // Default to showing amount in crypto because we have that now x.amountStr = txFormatService.formatAmountStr(x.wallet.coin, x.data.amount); + configService.whenAvailable(function(config) { + if (config.wallet.settings.priceDisplay === "fiat") { + txFormatService.formatAlternativeStr(x.wallet.coin, x.data.amount, function(formattedString) { + x.amountStr = formattedString; + }); + } + }); + } x.action = function() { // TODO? diff --git a/src/sass/icons.scss b/src/sass/icons.scss index 9bb26919f..4693025f6 100644 --- a/src/sass/icons.scss +++ b/src/sass/icons.scss @@ -69,7 +69,7 @@ } &.icon-buy-bitcoin2 { - background-color: #494949; + border: 1px solid #faba13; } &.icon-reddit-white { @@ -83,6 +83,11 @@ background-color: #1da1f2; background-size: 60%; } + + &.icon-faucet { + background-image: url('../img/icon-faucet.svg'); + background-size: 70%; + } } } diff --git a/util/buildAppConfig.js b/util/buildAppConfig.js index 55012a4b2..eb11bc0fe 100755 --- a/util/buildAppConfig.js +++ b/util/buildAppConfig.js @@ -26,6 +26,7 @@ console.log('v' + pkg.version + ' #' + commitHash + ' App:' + appConfig.name); var content = 'window.version="' + pkg.version + '";'; content = content + '\nwindow.commitHash="' + commitHash + '";'; +content = content + '\nwindow.fullVersion="' + pkg.fullVersion + '";'; content = content + '\nwindow.appConfig=' + JSON.stringify(appConfig) + ';'; fs.writeFileSync("./src/js/appConfig.js", content); diff --git a/www/css/main.css b/www/css/main.css index e68b0f6ee..4e7faac0a 100644 --- a/www/css/main.css +++ b/www/css/main.css @@ -10025,7 +10025,7 @@ ion-view.deflash-blue:before, ion-view#view-amount:before, ion-view#view-confirm .big-icon-svg.theme-circle > .bg.icon-shapeshift { background-color: #263e5c; } .big-icon-svg.theme-circle > .bg.icon-buy-bitcoin2 { - background-color: #494949; } + border: 1px solid #faba13; } .big-icon-svg.theme-circle > .bg.icon-reddit-white { background-image: url("../img/icon-reddit-white.svg"); background-color: #ff4500; @@ -10034,6 +10034,9 @@ ion-view.deflash-blue:before, ion-view#view-amount:before, ion-view#view-confirm background-image: url("../img/icon-twitter-white.svg"); background-color: #1da1f2; background-size: 60%; } + .big-icon-svg.theme-circle > .bg.icon-faucet { + background-image: url("../img/icon-faucet.svg"); + background-size: 70%; } .big-icon-svg.theme-circle-services > .bg { border: 1px solid #191919; } .big-icon-svg.theme-circle-community > .bg { diff --git a/www/img/icon-faucet.svg b/www/img/icon-faucet.svg new file mode 100644 index 000000000..e2eb5beed --- /dev/null +++ b/www/img/icon-faucet.svg @@ -0,0 +1,120 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/www/views/confirm.html b/www/views/confirm.html index 8bed9035f..443043d49 100644 --- a/www/views/confirm.html +++ b/www/views/confirm.html @@ -131,7 +131,8 @@ wallet-selector-wallets="wallets" wallet-selector-selected-wallet="wallet" wallet-selector-show="walletSelector" - wallet-selector-on-select="onWalletSelect"> + wallet-selector-on-select="onWalletSelect" + wallet-selector-display-balance-as-fiat="displayBalanceAsFiat"> diff --git a/www/views/includes/walletSelector.html b/www/views/includes/walletSelector.html index a53d1c7f1..755331a06 100644 --- a/www/views/includes/walletSelector.html +++ b/www/views/includes/walletSelector.html @@ -2,7 +2,8 @@ + ng-init="wallet.coin == 'btc' ? walletsBtc.push(wallet) : walletsBch.push(wallet)"> +
{{title}}
@@ -26,7 +27,8 @@ Incomplete - {{wallet.status.availableBalanceStr}} + {{wallet.status.totalBalanceAlternative}} {{wallet.status.alternativeIsoCode}} + {{wallet.status.availableBalanceStr}} [Balance Hidden] @@ -57,7 +59,8 @@ Incomplete - {{wallet.status.availableBalanceStr}} + {{wallet.status.totalBalanceAlternative}} {{wallet.status.alternativeIsoCode}} + {{wallet.status.availableBalanceStr}} [Balance Hidden] diff --git a/www/views/tab-receive.html b/www/views/tab-receive.html index 51f671cee..0eb598096 100644 --- a/www/views/tab-receive.html +++ b/www/views/tab-receive.html @@ -94,7 +94,8 @@ {{wallet.name || wallet.id}}

- {{wallet.status.totalBalanceStr}} + {{wallet.status.totalBalanceAlternative}} {{wallet.status.alternativeIsoCode}} + {{wallet.status.totalBalanceStr}} [Balance Hidden] @@ -113,6 +114,7 @@ wallet-selector-wallets="wallets" wallet-selector-selected-wallet="wallet" wallet-selector-show="showWallets" - wallet-selector-on-select="onWalletSelect"> + wallet-selector-on-select="onWalletSelect" + wallet-selector-display-balance-as-fiat="displayBalanceAsFiat">