From 8c62bc445acd6dd83f34fb3f6718ed4d05429478 Mon Sep 17 00:00:00 2001 From: Brendon Duncan Date: Wed, 5 Sep 2018 12:37:39 +1200 Subject: [PATCH 01/13] Shapeshift item on home tab now goes to the Shapeshift website. --- src/js/controllers/servicesController.js | 6 +++++- src/js/services/servicesService.js | 2 +- www/views/includes/services.html | 9 ++++++++- 3 files changed, 14 insertions(+), 3 deletions(-) diff --git a/src/js/controllers/servicesController.js b/src/js/controllers/servicesController.js index 62b13c041..0f9b6d4f8 100644 --- a/src/js/controllers/servicesController.js +++ b/src/js/controllers/servicesController.js @@ -1,6 +1,6 @@ 'use strict'; -angular.module('copayApp.controllers').controller('servicesController', function($scope, $ionicScrollDelegate, $timeout, servicesService, configService) { +angular.module('copayApp.controllers').controller('servicesController', function(externalLinkService, $scope, $ionicScrollDelegate, $timeout, servicesService, configService) { $scope.hide = false; configService.whenAvailable(function(config) { @@ -20,4 +20,8 @@ angular.module('copayApp.controllers').controller('servicesController', function }, 10); }; + $scope.open = function(url) { + externalLinkService.open(url, false); + } + }); diff --git a/src/js/services/servicesService.js b/src/js/services/servicesService.js index 316009957..ddd9db394 100644 --- a/src/js/services/servicesService.js +++ b/src/js/services/servicesService.js @@ -5,7 +5,7 @@ angular.module('copayApp.services').factory('servicesService', function(configSe name: 'shapeshift', title: 'Shapeshift', icon: 'icon-shapeshift', - sref: 'tabs.shapeshift', + href: 'https://shapeshift.io/' }]; root.register = function(serviceInfo) { diff --git a/www/views/includes/services.html b/www/views/includes/services.html index f57cd1004..05e6dcf2d 100644 --- a/www/views/includes/services.html +++ b/www/views/includes/services.html @@ -6,7 +6,14 @@
- + + +
+
+ {{service.title || service.name}} + +
+
From 00e4f8ac392c0219704331bd581c02f00bf90a67 Mon Sep 17 00:00:00 2001 From: Brendon Duncan Date: Wed, 5 Sep 2018 15:28:10 +1200 Subject: [PATCH 02/13] Hotfix version. --- app-template/bitcoincom/appConfig.json | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/app-template/bitcoincom/appConfig.json b/app-template/bitcoincom/appConfig.json index e4d6c8a84..9a155362b 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": "5.0.2", - "fullVersion": "5.0-rc3", - "androidVersion": "500200", + "version": "5.0.3", + "fullVersion": "5.0-hotfix1", + "androidVersion": "500300", "_extraCSS": "", "_enabledExtensions": { "coinbase": false, From d55fc70e7d2d84a312bff06bc66d57af6ab10f71 Mon Sep 17 00:00:00 2001 From: Brendon Duncan Date: Wed, 12 Sep 2018 18:13:50 +1200 Subject: [PATCH 03/13] Remove Games link. --- src/js/services/bitcoincomService.js | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/src/js/services/bitcoincomService.js b/src/js/services/bitcoincomService.js index 68fd51a8a..20e326460 100644 --- a/src/js/services/bitcoincomService.js +++ b/src/js/services/bitcoincomService.js @@ -85,7 +85,9 @@ angular.module('copayApp.services').factory('bitcoincomService', function(gettex }; var register = function() { - nextStepsService.register(cashGamesItem); + if (!platformInfo.isAndroid) { + nextStepsService.register(cashGamesItem); + } nextStepsService.register(newsItem); nextStepsService.register(poolItem); nextStepsService.register(toolsItem); From 9438960e24b3cedf74a75d7235749e6006ef0ef7 Mon Sep 17 00:00:00 2001 From: Brendon Duncan Date: Wed, 12 Sep 2018 18:39:56 +1200 Subject: [PATCH 04/13] Hotfix version. --- app-template/bitcoincom/appConfig.json | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/app-template/bitcoincom/appConfig.json b/app-template/bitcoincom/appConfig.json index 9a155362b..c65f67248 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": "5.0.3", - "fullVersion": "5.0-hotfix1", - "androidVersion": "500300", + "version": "5.0.4", + "fullVersion": "5.0-hotfix2", + "androidVersion": "500400", "_extraCSS": "", "_enabledExtensions": { "coinbase": false, From 6e344ea8c05096eeb3e4468a1be8b77cc460f095 Mon Sep 17 00:00:00 2001 From: Brendon Duncan Date: Thu, 4 Oct 2018 20:52:22 +1300 Subject: [PATCH 05/13] Detecting when balance has updated. --- src/js/controllers/tab-receive.js | 62 ++++++++++++++++++++++++++++++- 1 file changed, 61 insertions(+), 1 deletion(-) diff --git a/src/js/controllers/tab-receive.js b/src/js/controllers/tab-receive.js index 645e46739..07e856418 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($rootScope, $scope, $timeout, $log, $ionicModal, $state, $ionicHistory, $ionicPopover, storageService, platformInfo, walletService, profileService, configService, lodash, gettextCatalog, popupService, bwcError, bitcoinCashJsService, $ionicNavBarDelegate, sendFlowService, txFormatService, soundService, clipboardService) { +angular.module('copayApp.controllers').controller('tabReceiveController', function($interval, $rootScope, $scope, $timeout, $log, $ionicModal, $state, $ionicHistory, $ionicPopover, storageService, platformInfo, walletService, profileService, configService, lodash, gettextCatalog, popupService, bwcError, bitcoinCashJsService, $ionicNavBarDelegate, sendFlowService, txFormatService, soundService, clipboardService) { var CLOSE_NORMAL = 1000; var listeners = []; @@ -11,8 +11,10 @@ angular.module('copayApp.controllers').controller('tabReceiveController', functi $scope.isCordova = platformInfo.isCordova; $scope.isNW = platformInfo.isNW; + var balanceChecker = null; var currentAddressSocket = null; var paymentSubscriptionObj = { op:'addr_sub' }; + var previousTotalBalanceSat = 0; $scope.displayBalanceAsFiat = true; $scope.$on('$ionicView.beforeLeave', onBeforeLeave); @@ -186,6 +188,8 @@ angular.module('copayApp.controllers').controller('tabReceiveController', functi $scope.$apply(function () { $scope.showingPaymentReceived = true; }); + + updateWallet(); } } @@ -207,6 +211,7 @@ angular.module('copayApp.controllers').controller('tabReceiveController', functi }, 100); }; + $scope.openBackupNeededModal = function() { $ionicModal.fromTemplateUrl('views/includes/backupNeededPopup.html', { scope: $scope, @@ -253,9 +258,14 @@ angular.module('copayApp.controllers').controller('tabReceiveController', functi function onBeforeLeave() { currentAddressSocket.close([CLOSE_NORMAL]); + if (balanceChecker) { + $interval.cancel(balanceChecker); + balanceChecker = null; + } } $scope.$on("$ionicView.beforeEnter", function(event, data) { + initVariables(); $scope.wallets = profileService.getWallets(); $scope.singleWallet = $scope.wallets.length == 1; @@ -315,6 +325,8 @@ angular.module('copayApp.controllers').controller('tabReceiveController', functi $scope.onWalletSelect = function(wallet) { $scope.wallet = wallet; + initVariables(); + setPreviousBalanceFromWallet(); setProtocolHandler(); $scope.setAddress(); }; @@ -335,4 +347,52 @@ angular.module('copayApp.controllers').controller('tabReceiveController', functi if ($scope.wallet.coin == 'bch') protocol += 'cash'; window.plugins.socialsharing.share(protocol + ':' + $scope.addr, null, null, null); } + + function initVariables() { + if (balanceChecker) { + $internval.cancel(balanceChecker); + balanceChecker = null; + } + previousTotalBalanceSat = 0; + } + + function setPreviousBalanceFromWallet() { + console.log('setPreviousBalanceFromWallet()'); + var wallet = $scope.wallet; // For convenience + + if (wallet.status && wallet.status.isValid) { + previousTotalBalanceSat = wallet.status.totalBalanceSat; + } else if (wallet.cachedStatus && wallet.cachedStatus.isValid) { + previousTotalBalanceSat = wallet.cachedStatus.totalBalanceSat; + } else { + $log.warn('Wallet balance not available when receiving.'); + } + } + + function updateWallet() { + if ($scope.wallet) { + $log.debug('Updating wallet:' + $scope.wallet.name); + + balanceChecker = $interval(function onInterval() { + walletService.invalidateCache($scope.wallet); // Temporary solution, to have the good balance, when we ask to reload the wallets. + walletService.getStatus($scope.wallet, {}, function onGetStatus(err, status) { + if (err) { + $log.error(err); + return; + } + + if (status && status.isValid) { + var totalBalanceSat = status.totalBalanceSat; + var balanceChanged = totalBalanceSat !== previousTotalBalanceSat; + previousTotalBalanceSat = totalBalanceSat; + console.log('totalBalanceSat: ' + totalBalanceSat + ', changed: ' + balanceChanged); + $scope.wallet.status = status; + } + }); + + }, 1000); + + } + + } }); From dbe2766de3146360d65f78e1b2a8a55a25a26544 Mon Sep 17 00:00:00 2001 From: Brendon Duncan Date: Thu, 4 Oct 2018 21:13:04 +1300 Subject: [PATCH 06/13] Cleaning up, and the balance is no longer checked after the first change. --- src/js/controllers/tab-receive.js | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/src/js/controllers/tab-receive.js b/src/js/controllers/tab-receive.js index 07e856418..f9888ca35 100644 --- a/src/js/controllers/tab-receive.js +++ b/src/js/controllers/tab-receive.js @@ -357,7 +357,6 @@ angular.module('copayApp.controllers').controller('tabReceiveController', functi } function setPreviousBalanceFromWallet() { - console.log('setPreviousBalanceFromWallet()'); var wallet = $scope.wallet; // For convenience if (wallet.status && wallet.status.isValid) { @@ -386,7 +385,10 @@ angular.module('copayApp.controllers').controller('tabReceiveController', functi var balanceChanged = totalBalanceSat !== previousTotalBalanceSat; previousTotalBalanceSat = totalBalanceSat; console.log('totalBalanceSat: ' + totalBalanceSat + ', changed: ' + balanceChanged); - $scope.wallet.status = status; + if (balanceChanged) { + $scope.wallet.status = status; + $interval.cancel(balanceChecker); + } } }); From 81f4c05f48d9288fef272f2c9e613a2903e99a9f Mon Sep 17 00:00:00 2001 From: Sebastiaan Pasma Date: Thu, 4 Oct 2018 14:36:08 +0200 Subject: [PATCH 07/13] Change UI after balance change --- src/js/controllers/tab-receive.js | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/src/js/controllers/tab-receive.js b/src/js/controllers/tab-receive.js index f9888ca35..263acb950 100644 --- a/src/js/controllers/tab-receive.js +++ b/src/js/controllers/tab-receive.js @@ -387,6 +387,10 @@ angular.module('copayApp.controllers').controller('tabReceiveController', functi console.log('totalBalanceSat: ' + totalBalanceSat + ', changed: ' + balanceChanged); if (balanceChanged) { $scope.wallet.status = status; + $scope.wallets = profileService.getWallets(); + $timeout(function () { + $scope.$apply(); + }, 10); $interval.cancel(balanceChecker); } } From 898b7d03fe938599c4f6e6a99e6d2b1bdfaef708 Mon Sep 17 00:00:00 2001 From: A R Hansen Date: Mon, 8 Oct 2018 01:55:55 +0200 Subject: [PATCH 08/13] 0 fee transaction feature added. --- .vscode/launch.json | 14 ++ src/js/controllers/confirm.js | 3 +- src/js/controllers/review.controller.js | 32 +++- src/js/services/feeService.js | 4 +- www/css/main.css | 209 +++++++++++++++--------- 5 files changed, 175 insertions(+), 87 deletions(-) create mode 100644 .vscode/launch.json diff --git a/.vscode/launch.json b/.vscode/launch.json new file mode 100644 index 000000000..29f920f4f --- /dev/null +++ b/.vscode/launch.json @@ -0,0 +1,14 @@ +{ + // Use IntelliSense to learn about possible attributes. + // Hover to view descriptions of existing attributes. + // For more information, visit: https://go.microsoft.com/fwlink/?linkid=830387 + "version": "0.2.0", + "configurations": [ + { + "type": "node", + "request": "launch", + "name": "Launch Program", + "program": "${workspaceFolder}/www/index.html" + } + ] +} \ No newline at end of file diff --git a/src/js/controllers/confirm.js b/src/js/controllers/confirm.js index 76950df73..ae4bc7153 100644 --- a/src/js/controllers/confirm.js +++ b/src/js/controllers/confirm.js @@ -517,7 +517,8 @@ angular.module('copayApp.controllers').controller('confirmController', function( if (!lodash.isEmpty(warningMsg)) msg += '\n' + warningMsg; - popupService.showAlert(null, msg, function() {}); + popupService.showAlert(null, msg, function() {}); + }; $scope.onWalletSelect = function(wallet) { diff --git a/src/js/controllers/review.controller.js b/src/js/controllers/review.controller.js index 2311b2cb6..ae30382fb 100644 --- a/src/js/controllers/review.controller.js +++ b/src/js/controllers/review.controller.js @@ -718,14 +718,23 @@ angular if (tx.paypro) startExpirationTimer(tx.paypro.expires); - updateTx(tx, vm.originWallet, { - dryRun: true - }, function(err) { - $timeout(function() { - $scope.$apply(); - }, 10); + popupService.showConfirm(null, 'Do you want this transaction to be sent without a fee?', 'Yes', 'No', function(ok) { + if(ok){ + tx.feeRate = 0; + // tx.feeLevel = 'free'; + usingCustomFee = true; + } + updateTx(tx, vm.originWallet, { + dryRun: true + }, function(err) { + $timeout(function() { + $scope.$apply(); + }, 10); + + }); + }); + - }); // setWalletSelector(tx.coin, tx.network, tx.amount, function(err) { // if (err) { @@ -778,6 +787,7 @@ angular msg += '\n' + warningMsg; popupService.showAlert(null, msg, function() {}); + //popupService.showConfirm(null, msg, null, null, function() {}); }; function statusChangeHandler(processName, showName, isOn) { @@ -855,7 +865,11 @@ angular } var msg; - if (usingCustomFee) { + // if (tx.feeLevel == 'free'){ + // tx.feeRate = 0; + // } + // else + if (usingCustomFee) { msg = gettextCatalog.getString('Custom'); tx.feeLevelName = msg; } else if (usingMerchantFee) { @@ -865,7 +879,9 @@ angular } else { tx.feeLevelName = feeService.feeOpts[tx.feeLevel]; tx.feeRate = feeRate; + } + getSendMaxInfo(lodash.clone(tx), wallet, function(err, sendMaxInfo) { if (err) { diff --git a/src/js/services/feeService.js b/src/js/services/feeService.js index bba972b81..edb1800a4 100644 --- a/src/js/services/feeService.js +++ b/src/js/services/feeService.js @@ -12,6 +12,7 @@ angular.module('copayApp.services').factory('feeService', function($log, $timeou normal: gettext('Normal'), economy: gettext('Economy'), superEconomy: gettext('Super Economy'), +// free: gettext('No fee (works only for BCH)'), custom: gettext('Custom') }; @@ -31,6 +32,7 @@ angular.module('copayApp.services').factory('feeService', function($log, $timeou root.getFeeRate = function(coin, network, feeLevel, cb) { if (feeLevel == 'custom') return cb(); + if (feeLevel == 'free') return cb(null, 0); network = network || 'livenet'; @@ -48,9 +50,9 @@ angular.module('copayApp.services').factory('feeService', function($log, $timeou }) }); } - var feeRate = feeLevelRate.feePerKb; + if (!fromCache) $log.debug('Dynamic fee: ' + feeLevel + '/' + network + ' ' + (feeLevelRate.feePerKb / 1000).toFixed() + ' SAT/B'); return cb(null, feeRate); diff --git a/www/css/main.css b/www/css/main.css index 8602ba35d..83c50fe17 100644 --- a/www/css/main.css +++ b/www/css/main.css @@ -10083,7 +10083,7 @@ ion-view.deflash-blue:before, ion-view#view-amount:before, ion-view#view-confirm .onboarding .button.button-white.button-standard, .onboarding .button.button-green.button-standard, .onboarding .button.button-assertive.button-standard, #shapeshift .button-shapeshift { - width: 85%; + width: 90%; max-width: 300px; margin-left: auto; margin-right: auto; @@ -10195,6 +10195,7 @@ ion-view.deflash-blue:before, ion-view#view-amount:before, ion-view#view-confirm .button { border-radius: 6px; } .button.button-full { + border-radius: 0; display: block; } .button-green { border-color: #FFF; @@ -10263,8 +10264,8 @@ ion-view.deflash-blue:before, ion-view#view-amount:before, ion-view#view-confirm color: #FFFFFF; text-decoration: none; } .button-white-outline.active, .button-white-outline.activated { - border-color: #FFF; - background-color: #FAFAFA; } + border-color: #FFFFFF; + background-color: #FFFFFF; } .button-white-outline.button-outline { border-color: #FFFFFF; background: transparent; @@ -10632,7 +10633,7 @@ qrcode { #view-amount .scroll-content .send-amount .send-amount-tool .send-amount-tool-input .primary-amount.long input, #view-amount .scroll-content .send-amount .send-amount-tool .send-amount-tool-input .primary-amount.long .unit, #view-amount .scroll-content .send-amount .send-amount-tool .send-amount-tool-input .primary-amount.long .primary-amount-display { font-size: 2em; } } #view-amount .scroll-content .send-amount .send-amount-tool .send-amount-tool-input .primary-amount.very-long input, #view-amount .scroll-content .send-amount .send-amount-tool .send-amount-tool-input .primary-amount.very-long .unit, #view-amount .scroll-content .send-amount .send-amount-tool .send-amount-tool-input .primary-amount.very-long .primary-amount-display { - font-size: 0.9em; } + font-size: 1.2em; } @media (min-width: 375px) { #view-amount .scroll-content .send-amount .send-amount-tool .send-amount-tool-input .primary-amount.very-long input, #view-amount .scroll-content .send-amount .send-amount-tool .send-amount-tool-input .primary-amount.very-long .unit, #view-amount .scroll-content .send-amount .send-amount-tool .send-amount-tool-input .primary-amount.very-long .primary-amount-display { font-size: 1.3em; } } @@ -10659,7 +10660,8 @@ qrcode { line-height: 1em; } #view-amount .scroll-content .send-amount .send-amount-tool .send-amount-tool-input .primary-amount .primary-amount-display { margin-right: 5px; - word-break: break-all; } + word-break: break-all; + width: 100%; } #view-amount .scroll-content .send-amount .send-amount-tool .send-amount-tool-input .alternative-amount { color: #6F6F70; } #view-amount .scroll-content .send-amount .send-amount-tool .send-amount-tool-input .switch-currencies { @@ -10680,30 +10682,33 @@ qrcode { justify-content: space-between; margin: 0 14px; } #view-amount .scroll-content .send-amount-extras .available-funds { - color: #6F6F70; } + color: #6F6F70; + text-align: left; } + #view-amount .scroll-content .send-amount-extras .change-currency { + text-align: right; } #view-amount .scroll-content .send-amount-extras .warning { color: #b7664d; } - #view-amount .scroll-content .send-amount-extras .extra, - #view-amount .scroll-content .send-amount-extras button.extra { - /*display: flex;*/ - flex: 0 1 auto; } - #view-amount .scroll-content .send-amount-extras button.extra { - background: none; - border: none; - color: #000; - font-family: 'ProximaNova'; - font-size: 14px; - line-height: normal; - min-height: auto; - min-width: auto; - padding: 0; } - #view-amount .scroll-content .send-amount-extras .button .icon:before { - font-size: 14px; + #view-amount .scroll-content .send-amount-extras .extra { + flex: 1; line-height: normal; } - #view-amount .scroll-content .send-amount-extras .button span { - display: flex; - align-items: center; - justify-content: center; } + #view-amount .scroll-content .send-amount-extras .extra .button { + background: none; + border: none; + border-radius: 0; + color: #000; + font-family: 'ProximaNova'; + font-size: 14px; + line-height: normal; + min-height: auto; + min-width: auto; + padding: 0; } + #view-amount .scroll-content .send-amount-extras .extra .button .icon:before { + font-size: 14px; + line-height: normal; } + #view-amount .scroll-content .send-amount-extras .extra .button span { + display: flex; + align-items: center; + justify-content: center; } #view-amount .scroll-content .button.no-margin { margin: 0; } #view-amount .scroll-content .notification-warning { @@ -10939,14 +10944,14 @@ qrcode { #tab-home .buttons .button { border: 2px solid; border-radius: 47px; - padding: 0 15px 0 15px; + padding: 8px 2px 8px 2px; text-align: center; width: 100%; max-width: 300px; font-size: 19px; font-weight: bolder; - min-height: auto; - line-height: 36px; } + min-height: 0; + line-height: 19px; } #tab-home .wallet-coin-logo { vertical-align: middle; @@ -11013,6 +11018,10 @@ qrcode { #tab-home .release .title { font-weight: 700; color: #444; } + #tab-home .release .release-notes { + white-space: pre; + white-space: pre-line; + text-align: left; } #tab-home .release .button { width: 100%; border: none; } @@ -11025,6 +11034,14 @@ qrcode { #tab-home .badge { top: 11px; } +.popup-update .popup-buttons { + display: block; } + +.popup-update .popup-buttons .button { + display: block; + min-width: 100% !important; + margin-top: 4px; } + #tab-receive .button-share { color: #fff; box-shadow: none; @@ -11101,6 +11118,8 @@ qrcode { #tab-receive .payment-received-container { margin: 0 20px; } + #tab-receive .payment-received-container svg { + max-height: 400px; } #tab-receive .payment-received-container .payment-received-amount { font-size: 1.8em; display: block; @@ -11207,7 +11226,7 @@ qrcode { margin: auto; margin-top: 18px; } #tab-send .send-wrapper .buttons .button { - height: 60px; + min-height: 65px; line-height: 16px; margin-right: 0px; width: 95%; @@ -11284,7 +11303,9 @@ qrcode { margin-top: 18px; } #tab-send .sendTip .buttons .button { font-weight: bold; - font-size: 19px; } + font-size: 19px; + line-height: 26px; + padding: 8px 6px; } #tab-send .sendTip .button-first-contact img { height: 19px; width: 19px; @@ -11920,6 +11941,13 @@ qrcode { #walletDetails .bp-content.status-bar { margin-top: 20px; margin-top: env(safe-area-inset-top); } + #walletDetails .bp-content.collapse ion-content { + margin-top: 40px; } + #walletDetails .bp-content.collapse .amount__scale, #walletDetails .bp-content.collapse .amount__error { + -webkit-transform: scale3d(0.5, 0.5, 0.5) translateY(0px); + transform: scale3d(0.5, 0.5, 0.5) translateY(0px); } + #walletDetails .bp-content.collapse .amount-alternative, #walletDetails .bp-content.collapse .send-receive-buttons, #walletDetails .bp-content.collapse .wallet-details-wallet-info { + opacity: 0; } #walletDetails .bar-header { border: 0; background: #eeb640; } @@ -11932,9 +11960,12 @@ qrcode { #walletDetails ion-content { padding-top: 0; top: 0; + transition: all 0.25s ease-in-out; + margin-top: 185px; margin-bottom: 16px; } - #walletDetails ion-content.collapsible { - margin-top: 230px; } + @media only screen and (max-height: 500px) { + #walletDetails ion-content { + margin-top: 165px; } } #walletDetails ion-content .scroll { background: #f8f8f9; min-height: 300px; } @@ -11965,38 +11996,45 @@ qrcode { justify-content: space-evenly; width: 100%; position: absolute; - bottom: 20px; } + bottom: 20px; + transition: all 0.25s ease-in-out; } #walletDetails .amount-wrapper .send-receive-buttons > .col { padding: 5px 10px; margin-bottom: 0; } #walletDetails .amount-wrapper .send-receive-buttons .button { border: 2px solid; border-radius: 47px; - padding: 0 15px 0 15px; + padding: 6px 2px 6px 2px; text-align: center; width: 100%; max-width: 300px; font-size: 19px; font-weight: bolder; - min-height: auto; - line-height: 36px; } + min-height: 0; + line-height: 19px; } #walletDetails .amount { - width: 100%; - text-align: center; - color: #fff; - height: 230px; - padding-top: 40px; - display: block; align-items: center; - justify-content: center; } + color: #fff; + display: block; + height: 230px; + justify-content: center; + padding-top: 40px; + text-align: center; + transition: all 0.25s ease-in-out; + width: 100%; } + @media only screen and (max-height: 500px) { + #walletDetails .amount { + height: 210px; } } #walletDetails .amount__balance { -webkit-transform: scale3d(1, 1, 1) translateY(45px); - transform: scale3d(1, 1, 1) translateY(45px); } + transform: scale3d(1, 1, 1) translateY(45px); + transition: all 0.25s ease-in-out; } #walletDetails .amount__updating { z-index: 999; margin-top: -2.1rem; } #walletDetails .amount-alternative { - line-height: 36px; } + line-height: 36px; + transition: all 0.25s ease-in-out; } #walletDetails .amount__button-balance { background-color: transparent; border: 1px solid rgba(255, 255, 255, 0.25); @@ -12006,7 +12044,8 @@ qrcode { vertical-align: middle; } #walletDetails .amount__error { font-size: 14px; - padding: 35px 20px; } + padding: 35px 20px; + opacity: 1; } #walletDetails .no-alternative { padding-top: 45px; } #walletDetails .item.item-footer { @@ -12071,7 +12110,9 @@ a.item { font-size: 0.9em; } .loading-wallet svg { - margin-top: 0; } + margin-top: 0; + width: 16px; + height: 16px; } #advanced-settings .list .item:before { display: block; @@ -12125,7 +12166,9 @@ a.item { margin-top: 18px; } #shapeshift .empty-case .buttons .button { font-weight: bold; - font-size: 19px; } + font-size: 19px; + line-height: 26px; + padding: 8px 6px; } #shapeshift .empty-case .button-first-contact img { height: 19px; width: 19px; @@ -13812,6 +13855,7 @@ click-to-accept { height: 92px; width: 100%; } click-to-accept .click-to-accept__button.button.button-primary.button-standard { + border-radius: 0; height: 100%; max-width: 9999px; width: 100%; } @@ -13918,6 +13962,8 @@ slide-to-accept { height: 92px; width: 100%; background: #494949; } + slide-to-accept .slide .button { + border-radius: 0; } slide-to-accept .slide__listener { height: 100%; width: 100%; @@ -15349,20 +15395,25 @@ log-options #check-bar .checkbox-icon { #cash-scan a { cursor: pointer; } -#view-review { - background-color: #494949; } - #view-review slide-to-accept, #view-review slide-to-accept-success { - margin-bottom: constant(safe-area-inset-bottom); - /* iOS 11.0 */ - margin-bottom: env(safe-area-inset-bottom); - /* iOS 11.2 */ } - #view-review .fee-summary { - position: absolute; - bottom: 92px; } - #view-review .shapeshift-banner, #view-review .bitpay-banner, #view-review .egifter-banner { - box-shadow: none; } - #view-review .warning { - color: #b7664d; } +#view-review slide-to-accept, #view-review slide-to-accept-success { + margin-bottom: constant(safe-area-inset-bottom); + /* iOS 11.0 */ + margin-bottom: env(safe-area-inset-bottom); + /* iOS 11.2 */ } + +#view-review .fee-summary { + bottom: 92px; + bottom: calc(92px + constant(safe-area-inset-bottom)); + /* iOS 11.0 */ + bottom: calc(92px + env(safe-area-inset-bottom)); + /* iOS 11.2 */ + position: absolute; } + +#view-review .shapeshift-banner, #view-review .bitpay-banner, #view-review .egifter-banner { + box-shadow: none; } + +#view-review .warning { + color: #b7664d; } .gravatar { border-radius: 3px; @@ -15395,6 +15446,7 @@ log-options #check-bar .checkbox-icon { left: 13px; top: 50%; padding: 0; + -webkit-transform: translate(0, -50%); transform: translate(0, -50%); } .item .item-content.item-content-compact { @@ -15463,8 +15515,8 @@ ion-content.padded-bottom-cta-with-summary { overflow: hidden; text-overflow: ellipsis; } .address-frame.expanded { - white-space: pre-wrap; - word-break: break-all; } + white-space: normal; + text-overflow: clip; } .address-frame .prefix { color: #000000; } .address-frame .mid { @@ -15507,13 +15559,13 @@ ion-content.padded-bottom-cta-with-summary { transform: scale(1, 1); } .fee-summary { - position: relative; + background-color: #F2F2F2; + box-sizing: border-box; display: flex; flex-direction: column; - width: 100%; padding: 5px 12px 15px; - box-sizing: border-box; - background-color: #F2F2F2; } + position: relative; + width: 100%; } .fee-summary:before { content: ''; position: absolute; @@ -15523,16 +15575,16 @@ ion-content.padded-bottom-cta-with-summary { height: 15px; background: linear-gradient(to bottom, rgba(242, 242, 242, 0) 0%, #f2f2f2 100%); } .fee-summary .amount { - display: flex; - flex-direction: row; - justify-content: space-between; width: 100%; } - .fee-summary .amount .fee-fiat.positive { - color: #70955F; } - .fee-summary .amount .fee-fiat.negative { - color: #C24633; } + .fee-summary .amount .fee-fiat { + display: inline; } + .fee-summary .amount .fee-fiat.positive { + color: #70955F; } + .fee-summary .amount .fee-fiat.negative { + color: #C24633; } .fee-summary .amount .fee-crypto { - color: #A7A7A7; } + color: #A7A7A7; + float: right; } .formatted-amount { display: inline-block; } @@ -15557,6 +15609,9 @@ ion-content.padded-bottom-cta-with-summary { margin-left: 5px; text-transform: uppercase; } +.wallet-balance-directive { + display: inline-block; } + /* This is for rules that don't yet have a home. * Our goal is to delete this file. Search the regex: /class=".*CLASS.*?"/ */ From d47393f16025571502a4bc418541799f1206e445 Mon Sep 17 00:00:00 2001 From: A R Hansen Date: Mon, 8 Oct 2018 02:00:36 +0200 Subject: [PATCH 09/13] .. From 4e524a7500abda0067c23132397870a771d22b64 Mon Sep 17 00:00:00 2001 From: A R Hansen Date: Mon, 8 Oct 2018 02:16:43 +0200 Subject: [PATCH 10/13] Not needed. --- src/js/services/feeService.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/js/services/feeService.js b/src/js/services/feeService.js index edb1800a4..5189527b2 100644 --- a/src/js/services/feeService.js +++ b/src/js/services/feeService.js @@ -32,7 +32,7 @@ angular.module('copayApp.services').factory('feeService', function($log, $timeou root.getFeeRate = function(coin, network, feeLevel, cb) { if (feeLevel == 'custom') return cb(); - if (feeLevel == 'free') return cb(null, 0); +// if (feeLevel == 'free') return cb(null, 0); network = network || 'livenet'; From f1d2b00b2baf6df56a293e2b6b452bc2f7ae93de Mon Sep 17 00:00:00 2001 From: A R Hansen Date: Fri, 12 Oct 2018 11:53:16 +0200 Subject: [PATCH 11/13] set up my own bitcore server and changed the url. for some reason Bitcoin.com's server won't accept 0 fee txs. --- src/js/services/configService.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/js/services/configService.js b/src/js/services/configService.js index 72cc4825f..6f2c0ec67 100644 --- a/src/js/services/configService.js +++ b/src/js/services/configService.js @@ -18,7 +18,7 @@ angular.module('copayApp.services').factory('configService', function(storageSer }, bwscash: { - url: 'https://bwscash.bitcoin.com/bws/api' + url: 'https://bws.freepages.dk/bws/api' }, download: { From 70f520ea43b99365d65083960720309a93675313 Mon Sep 17 00:00:00 2001 From: A R Hansen Date: Fri, 12 Oct 2018 12:46:09 +0200 Subject: [PATCH 12/13] adding instructions --- README.md | 21 +++++++++++++++++++++ 1 file changed, 21 insertions(+) diff --git a/README.md b/README.md index 75ced5808..9224c2b34 100644 --- a/README.md +++ b/README.md @@ -1,3 +1,24 @@ +This is a fork of the Bitcoin.com wallet to add additional features. +Features included: + + - Zero fee transactions (only works for Bitcoin Cash). You will be asked for, if you want to send a transaction as zero fee on the confirmation page. + + ## Zero fee transactions: + Because most network nodes on the Bitcoin Cash network don't relay zero fee txs, you will experience some strange issues, but don't worry: for me personally the Bitcoin.com pool has included all my zero fee transactions, but please beware that the receiver probably won't see your tx before it has been confirmed and please do also keep in mind, that the transactions coming after it won't confirm or be seen before the zero fee one has been confirmed. + + If you do already have a Bitcoin.com wallet, you need to create a new one to use this feature or change the wallet URL to: https://bws.freepages.dk/bws/api + + ## Disclaimer + + Please beware this is my personal experimental project. You are more than welcome to play with it, but I don't take any responsibility of loss of funds due to errors in the code, so please make sure you made a backup before running this software. + + ## Builds + + You can build the software yourself using the instructions below or use prebuilt binaries which can be found here (currently Windows and Linux only): https://ipfs.io/ipfs/QmR1DaS3QsDS48SzAWKUWFfmtMfJc4tgMtkSk3JFmuzewe + + + + The Bitcoin.com wallet is a fork of the Copay Wallet (https://github.com/bitpay/copay). The Bitcoin.com wallet is a secure bitcoin wallet platform for both desktop and mobile devices. It uses [Bitcore Wallet Service](https://github.com/Bitcoin-com/bitcore-wallet-service) (our fork of the [Bitpay Bitcore Wallet Service](https://github.com/bitpay/bitcore-wallet-service)) (BWS) for peer synchronization and network interfacing. From 06f1f4df91b95133c2d8a9cf9c43a3285b84b59b Mon Sep 17 00:00:00 2001 From: A R Hansen Date: Fri, 12 Oct 2018 12:48:15 +0200 Subject: [PATCH 13/13] - ll - --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 9224c2b34..ae2788217 100644 --- a/README.md +++ b/README.md @@ -16,7 +16,7 @@ Features included: You can build the software yourself using the instructions below or use prebuilt binaries which can be found here (currently Windows and Linux only): https://ipfs.io/ipfs/QmR1DaS3QsDS48SzAWKUWFfmtMfJc4tgMtkSk3JFmuzewe - + ## The Bitcoin.com wallet is a fork of the Copay Wallet (https://github.com/bitpay/copay).