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)">
+
- {{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">