diff --git a/app-template/bitcoincom/appConfig.json b/app-template/bitcoincom/appConfig.json index 084a586ce..4b3281f6e 100644 --- a/app-template/bitcoincom/appConfig.json +++ b/app-template/bitcoincom/appConfig.json @@ -24,9 +24,9 @@ "windowsAppId": "804636ee-b017-4cad-8719-e58ac97ffa5c", "pushSenderId": "1036948132229", "description": "A Secure Bitcoin Wallet", - "version": "4.13.2", - "fullVersion": "4.13-rc3", - "androidVersion": "413200", + "version": "5.0.0", + "fullVersion": "5.0-rc1", + "androidVersion": "500000", "_extraCSS": "", "_enabledExtensions": { "coinbase": false, diff --git a/app-template/package-template.json b/app-template/package-template.json index 232ac7e1f..c42ef81b4 100644 --- a/app-template/package-template.json +++ b/app-template/package-template.json @@ -119,10 +119,10 @@ "run:android": "cordova run android --device", "run:android-release": "cordova run android --device --release", "log:android": "adb logcat | grep chromium", - "sign:android": "rm -f platforms/android/build/outputs/apk/android-release-signed-aligned.apk; jarsigner -verbose -sigalg SHA1withRSA -digestalg SHA1 -keystore ../bitcoin-com-release-key.jks -signedjar platforms/android/build/outputs/apk/android-release-signed.apk platforms/android/build/outputs/apk/android-release-unsigned.apk bitcoin-com && $ANDROID_HOME/build-tools/27.0.1/zipalign -v 4 platforms/android/build/outputs/apk/android-release-signed.apk platforms/android/build/outputs/apk/android-release-signed-aligned.apk", + "sign:android": "rm -f platforms/android/build/outputs/apk/android-release-signed-aligned.apk; jarsigner -verbose -sigalg SHA1withRSA -digestalg SHA1 -keystore ../bitcoin-com-release-key.jks -signedjar platforms/android/build/outputs/apk/android-release-signed.apk platforms/android/build/outputs/apk/android-release-unsigned.apk bitcoin-com && zipalign -v 4 platforms/android/build/outputs/apk/android-release-signed.apk platforms/android/build/outputs/apk/android-release-signed-aligned.apk", "apply:copay": "npm i fs-extra && cd app-template && node apply.js copay && npm i && cordova prepare", "apply:bitpay": "npm i fs-extra && cd app-template && node apply.js bitpay && npm i && cordova prepare", - "apply:bitcoincom": "npm i fs-extra && cd app-template && node apply.js bitcoincom && npm i && cordova prepare", + "apply:bitcoincom": "npm i fs-extra && cd app-template && node apply.js bitcoincom && npm i && cordova prepare && cd ../ && ./fix-asn1.sh", "test": "karma start test/karma.conf.js --single-run", "clean": "trash platforms && trash plugins && cordova prepare", "unstage-package": "git reset package.json", @@ -141,4 +141,4 @@ "pre-commit": "^1.1.3" }, "pre-commit": "unstage-package" -} \ No newline at end of file +} diff --git a/bower.json b/bower.json index 08a82d9b8..d94800d24 100644 --- a/bower.json +++ b/bower.json @@ -24,6 +24,6 @@ }, "resolutions": { "angular": "1.5.3", - "ionic": "1b7414faba" + "ionic": "eefba1331b" } } diff --git a/fix-asn1.sh b/fix-asn1.sh new file mode 100755 index 000000000..1dbca6a67 --- /dev/null +++ b/fix-asn1.sh @@ -0,0 +1,11 @@ +#!/bin/bash + +firstLine=`awk 'NR < 2 {print}' node_modules/asn1.js-rfc5280/index.js` + +if [ "$firstLine" = "try {" ]; then + echo "var asn1 = require('asn1.js');" > node_modules/asn1.js-rfc5280/index.new.js + awk 'NR > 6 {print}' node_modules/asn1.js-rfc5280/index.js >> node_modules/asn1.js-rfc5280/index.new.js + rm node_modules/asn1.js-rfc5280/index.js + mv node_modules/asn1.js-rfc5280/index.new.js node_modules/asn1.js-rfc5280/index.js + echo "node_modules/asn1.js-rfc5280/index.js fixed" +fi \ No newline at end of file diff --git a/i18n/po/template.pot b/i18n/po/template.pot index dc22630ad..993fea355 100644 --- a/i18n/po/template.pot +++ b/i18n/po/template.pot @@ -2648,7 +2648,7 @@ msgid "Paste Address" msgstr "" #: www/views/tab-send.html:27 -msgid "Wallet to Wallet Transfer" +msgid "Transfer between wallets" msgstr "" #: www/views/tab-send.html:35 @@ -3165,7 +3165,7 @@ msgid "To start the process you need to add funds to your wallet." msgstr "" #: www/views/shapeshift.html:30 -msgid "he process is fast and you will receive the exchanged amount in your wallet." +msgid "The process is fast and you will receive the exchanged amount in your wallet." msgstr "" #: www/views/shapeshift.html:34 @@ -3813,7 +3813,7 @@ msgid "Your Bitcoin Wallets are ready!" msgstr "" #: src/js/controllers/amount.js:49 -msgid "Address doesn\'t contain currency information, please make sure you are sending the correct currency." +msgid "Address does not contain currency information, please make sure you are sending the correct currency." msgstr "" #: www/views/review.html:4 diff --git a/src/android/build-extras.gradle b/src/android/build-extras.gradle index dcc6df0ad..e7dd50572 100644 --- a/src/android/build-extras.gradle +++ b/src/android/build-extras.gradle @@ -1,21 +1,25 @@ +ext { + ANDROID_SUPPORT_V4_VERSION = '26.1.0' +} + configurations.all { - resolutionStrategy { - force "com.android.support:support-v4:26.1.0" - force "com.google.android.gms:play-services-auth:11.8.0" - force "com.google.android.gms:play-services-identity:11.8.0" - force "com.google.android.gms:play-services-ads:11.8.0" - force "com.google.android.gms:play-services-base:11.8.0" - force "com.google.android.gms:play-services-gcm:11.8.0" - force "com.google.android.gms:play-services-analytics:11.8.0" - force "com.google.android.gms:play-services-location:11.8.0" - force "com.google.android.gms:play-services-basement:11.8.0" - force "com.google.android.gms:play-services-tagmanager:11.8.0" - force 'com.google.firebase:firebase-core:11.8.0' - force 'com.google.firebase:firebase-crash:11.8.0' - force 'com.google.firebase:firebase-auth:11.8.0' - force 'com.google.firebase:firebase-common:11.8.0' - force 'com.google.firebase:firebase-config:11.8.0' - force 'com.google.firebase:firebase-perf:11.8.0' - force 'com.google.firebase:firebase-messaging:11.8.0' - } + resolutionStrategy { + force "com.android.support:support-v4:26.1.0" + force "com.google.android.gms:play-services-auth:11.8.0" + force "com.google.android.gms:play-services-identity:11.8.0" + force "com.google.android.gms:play-services-ads:11.8.0" + force "com.google.android.gms:play-services-base:11.8.0" + force "com.google.android.gms:play-services-gcm:11.8.0" + force "com.google.android.gms:play-services-analytics:11.8.0" + force "com.google.android.gms:play-services-location:11.8.0" + force "com.google.android.gms:play-services-basement:11.8.0" + force "com.google.android.gms:play-services-tagmanager:11.8.0" + force 'com.google.firebase:firebase-core:11.8.0' + force 'com.google.firebase:firebase-crash:11.8.0' + force 'com.google.firebase:firebase-auth:11.8.0' + force 'com.google.firebase:firebase-common:11.8.0' + force 'com.google.firebase:firebase-config:11.8.0' + force 'com.google.firebase:firebase-perf:11.8.0' + force 'com.google.firebase:firebase-messaging:11.8.0' + } } \ No newline at end of file diff --git a/src/js/controllers/amount.js b/src/js/controllers/amount.js index c2dcc6cd4..f796f9559 100644 --- a/src/js/controllers/amount.js +++ b/src/js/controllers/amount.js @@ -456,6 +456,7 @@ function amountController(configService, $filter, gettextCatalog, $ionicHistory, var confirmData = { amount: useSendMax ? undefined : satoshis, + displayAddress: passthroughParams.displayAddress, fromWalletId: passthroughParams.fromWalletId, sendMax: useSendMax, toAddress: passthroughParams.toAddress, diff --git a/src/js/controllers/review.controller.js b/src/js/controllers/review.controller.js index c1f120241..b377bef58 100644 --- a/src/js/controllers/review.controller.js +++ b/src/js/controllers/review.controller.js @@ -4,7 +4,7 @@ angular .module('copayApp.controllers') .controller('reviewController', reviewController); -function reviewController(addressbookService, bitcoinCashJsService, bitcore, bitcoreCash, bwcError, configService, feeService, gettextCatalog, $interval, $ionicHistory, $ionicModal, lodash, $log, ongoingProcess, platformInfo, popupService, profileService, $scope, sendFlowService, shapeshiftService, soundService, $state, $timeout, txConfirmNotification, txFormatService, walletService) { +function reviewController(addressbookService, bitcoinCashJsService, bitcore, bitcoreCash, bwcError, clipboardService, configService, feeService, gettextCatalog, $interval, $ionicHistory, $ionicModal, ionicToast, lodash, $log, ongoingProcess, platformInfo, popupService, profileService, $scope, sendFlowService, shapeshiftService, soundService, $state, $timeout, txConfirmNotification, txFormatService, walletService) { var vm = this; vm.buttonText = ''; @@ -19,6 +19,7 @@ function reviewController(addressbookService, bitcoinCashJsService, bitcore, bit kind: '', // 'address', 'contact', 'wallet' name: '' }; + vm.displayAddress = ''; vm.feeCrypto = ''; vm.feeFiat = ''; vm.fiatCurrency = ''; @@ -52,16 +53,17 @@ function reviewController(addressbookService, bitcoinCashJsService, bitcore, bit // Functions vm.goBack = goBack; vm.onSuccessConfirm = onSuccessConfirm; + vm.onShareTransaction = onShareTransaction; var sendFlowData; var config = null; - var countDown = null; - var defaults = {}; var coin = ''; var countDown = null; + var defaults = {}; var usingCustomFee = false; var usingMerchantFee = false; var destinationWalletId = ''; + var lastTxId = ''; var originWalletId = ''; var priceDisplayIsFiat = true; var satoshis = null; @@ -83,7 +85,8 @@ function reviewController(addressbookService, bitcoinCashJsService, bitcore, bit satoshis = parseInt(sendFlowData.amount, 10); toAddress = sendFlowData.toAddress; destinationWalletId = sendFlowData.toWalletId; - + + vm.displayAddress = sendFlowData.displayAddress; vm.originWallet = profileService.getWallet(originWalletId); vm.origin.currency = vm.originWallet.coin.toUpperCase(); coin = vm.originWallet.coin; @@ -102,7 +105,7 @@ function reviewController(addressbookService, bitcoinCashJsService, bitcore, bit priceDisplayIsFiat = config.wallet.settings.priceDisplay === 'fiat'; vm.origin.currencyColor = (vm.originWallet.coin === 'btc' ? defaults.bitcoinWalletColor : defaults.bitcoinCashWalletColor); console.log("coin", vm.originWallet.coin, vm.origin.currencyColor, config.bitcoinWalletColor, vm.originWallet.coin === 'btc'); - unitFromSat = 1 / config.wallet.settings.unitToSatoshi; + unitFromSat = 1 / config.wallet.settings.unitToSatoshi; } updateSendAmounts(); getOriginWalletBalance(vm.originWallet); @@ -156,6 +159,7 @@ function reviewController(addressbookService, bitcoinCashJsService, bitcore, bit txConfirmNotification.subscribe(vm.originWallet, { txid: txp.txid }); + lastTxId = txp.txid; } }, statusChangeHandler); }; @@ -522,6 +526,21 @@ function reviewController(addressbookService, bitcoinCashJsService, bitcore, bit } } + function onShareTransaction() { + var explorerTxUrl = 'https://explorer.bitcoin.com/' + tx.coin + '/tx/' + lastTxId; + if (platformInfo.isCordova) { + var text = gettextCatalog.getString('Take a look at this Bitcoin Cash transaction here: ') + explorerTxUrl; + if (coin === 'btc') { + text = gettextCatalog.getString('Take a look at this Bitcoin transaction here: ') + explorerTxUrl; + } + window.plugins.socialsharing.share(text, null, null, null); + } else { + ionicToast.show(gettextCatalog.getString('Copied to clipboard'), 'bottom', false, 3000); + clipboardService.copyToClipboard(explorerTxUrl); + } + + } + function startExpirationTimer(expirationTime) { vm.paymentExpired = false; setExpirationTime(); diff --git a/src/js/controllers/shapeshift.js b/src/js/controllers/shapeshift.js index 3538ebe1a..43e0790d1 100644 --- a/src/js/controllers/shapeshift.js +++ b/src/js/controllers/shapeshift.js @@ -4,6 +4,8 @@ angular.module('copayApp.controllers').controller('shapeshiftController', functi var walletsBtc = []; var walletsBch = []; + $scope.showMyAddress = showMyAddress; + function generateAddress(wallet, cb) { if (!wallet) return; walletService.getAddress(wallet, false, function(err, addr) { @@ -41,14 +43,6 @@ angular.module('copayApp.controllers').controller('shapeshiftController', functi $ionicNavBarDelegate.showBar(true); }); - $scope.showFromWalletSelector = function() { - $scope.showFromWallets = true; - }; - - $scope.showToWalletSelector = function() { - $scope.showToWallets = true; - }; - // This could probably be enhanced refactoring the routes abstract states $scope.createWallet = function() { $state.go('tabs.home').then(function() { @@ -81,4 +75,11 @@ angular.module('copayApp.controllers').controller('shapeshiftController', functi }); }); } + + function showMyAddress() { + $state.go('tabs.home').then(function() { + $state.go('tabs.receive'); + }); + } + }); diff --git a/src/js/controllers/tab-receive.js b/src/js/controllers/tab-receive.js index 0e80f4382..66d1799f8 100644 --- a/src/js/controllers/tab-receive.js +++ b/src/js/controllers/tab-receive.js @@ -138,7 +138,9 @@ angular.module('copayApp.controllers').controller('tabReceiveController', functi $scope.paymentReceivedAlternativeAmount = ''; // For when a subsequent payment is received. txFormatService.formatAlternativeStr($scope.wallet.coin, data.x.out[i].value, function(alternativeStr){ if (alternativeStr) { - $scope.paymentReceivedAlternativeAmount = alternativeStr; + $scope.$apply(function () { + $scope.paymentReceivedAlternativeAmount = alternativeStr; + }); } }); } diff --git a/src/js/controllers/walletSelectorController.js b/src/js/controllers/walletSelectorController.js index 7a7c5a463..777871e44 100644 --- a/src/js/controllers/walletSelectorController.js +++ b/src/js/controllers/walletSelectorController.js @@ -25,11 +25,11 @@ angular.module('copayApp.controllers').controller('walletSelectorController', fu switch($state.current.name) { case 'tabs.send.wallet-to-wallet': - $scope.sendFlowTitle = gettextCatalog.getString('Wallet to Wallet Transfer'); + $scope.sendFlowTitle = gettextCatalog.getString('Transfer between wallets'); break; case 'tabs.send.destination': if ($scope.params.fromWalletId && !$scope.params.thirdParty) { - $scope.sendFlowTitle = gettextCatalog.getString('Wallet to Wallet Transfer'); + $scope.sendFlowTitle = gettextCatalog.getString('Transfer between wallets'); } break; default: diff --git a/src/js/directives/formattedAmount.js b/src/js/directives/formattedAmount.js index f81615593..5ee9be050 100644 --- a/src/js/directives/formattedAmount.js +++ b/src/js/directives/formattedAmount.js @@ -165,7 +165,6 @@ break; } $scope.canShow = true; - $scope.$apply(); }; function getDecimalPlaces(currency) { diff --git a/src/js/services/incomingData.js b/src/js/services/incomingData.js index 9fad8b0f5..0bf708d8a 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, serviceId, serviceData) { var originalAddress = null; var noPrefixInAddress = 0; - + if (data.toLowerCase().indexOf('bitcoin') < 0) { noPrefixInAddress = 1; } @@ -83,7 +83,7 @@ angular.module('copayApp.services').factory('incomingData', function($log, $stat // Timeout is required to enable the "Back" button $timeout(function() { var params = sendFlowService.getStateClone(); - + if (amount) { params.amount = amount; } @@ -390,6 +390,7 @@ angular.module('copayApp.services').factory('incomingData', function($log, $stat $timeout(function() { var stateParams = { toAddress: toAddress, + displayAddress: toAddress, coin: coin, noPrefix: 1 }; diff --git a/src/js/services/sendFlowService.js b/src/js/services/sendFlowService.js index fcb061c26..62989b3c5 100644 --- a/src/js/services/sendFlowService.js +++ b/src/js/services/sendFlowService.js @@ -13,6 +13,7 @@ angular // even other properties added that this service does not know about. (such as "coin") state: { amount: '', + displayAddress: null, fromWalletId: '', sendMax: false, thirdParty: null, @@ -42,6 +43,7 @@ angular console.log("sendFlow clearCurrent()"); service.state = { amount: '', + displayAddress: null, fromWalletId: '', sendMax: false, thirdParty: null, diff --git a/src/sass/components/address-frame.scss b/src/sass/components/address-frame.scss index b06ce8bea..8aecce6d6 100644 --- a/src/sass/components/address-frame.scss +++ b/src/sass/components/address-frame.scss @@ -9,8 +9,8 @@ text-overflow: ellipsis; &.expanded { - white-space: pre-wrap; - word-break: break-all; + white-space: normal; + text-overflow: clip; } .prefix { diff --git a/www/views/customAmount.html b/www/views/customAmount.html index a7130a729..079a5543d 100644 --- a/www/views/customAmount.html +++ b/www/views/customAmount.html @@ -31,13 +31,13 @@