diff --git a/app-template/bitpay/appConfig.json b/app-template/bitpay/appConfig.json index 44be954ac..3c0ee862b 100644 --- a/app-template/bitpay/appConfig.json +++ b/app-template/bitpay/appConfig.json @@ -17,6 +17,7 @@ "winAppName": "BitPayWallet", "wpPublisherId": "{}", "wpProductId": "{}", + "pushSenderId": "1036948132229", "description": "Secure Bitcoin Storage", "version": "0.14.0", "androidVersion": "1", diff --git a/app-template/config-template.xml b/app-template/config-template.xml index 3596fc947..5a72f4560 100644 --- a/app-template/config-template.xml +++ b/app-template/config-template.xml @@ -32,7 +32,6 @@ - @@ -57,7 +56,9 @@ - + + + diff --git a/app-template/copay/appConfig.json b/app-template/copay/appConfig.json index 66bb79585..7a6ee7ef3 100644 --- a/app-template/copay/appConfig.json +++ b/app-template/copay/appConfig.json @@ -17,6 +17,7 @@ "winAppName": "CopayWallet", "wpPublisherId": "{31cdd08b-457c-413d-b440-f6665eec847d}", "wpProductId": "{5381aa50-9069-11e4-84cc-293caf9cbdc8}", + "pushSenderId": "1036948132229", "description": "A Secure Bitcoin Wallet", "version": "2.5.0", "androidVersion": "115", diff --git a/src/js/controllers/amount.js b/src/js/controllers/amount.js index baa1cfdc4..dd8623cfa 100644 --- a/src/js/controllers/amount.js +++ b/src/js/controllers/amount.js @@ -92,6 +92,8 @@ angular.module('copayApp.controllers').controller('amountController', function($ $scope.pushDigit = function(digit) { if ($scope.amount && $scope.amount.length >= LENGTH_EXPRESSION_LIMIT) return; + if ($scope.amount.indexOf('.') > -1 && digit == '.') return; + if($scope.showAlternativeAmount && $scope.amount.indexOf('.') > -1 && $scope.amount[$scope.amount.indexOf('.') + 2]) return; $scope.amount = ($scope.amount + digit).replace('..', '.'); checkFontSize(); diff --git a/src/js/controllers/backup.js b/src/js/controllers/backup.js index 486667e2f..f40af13d8 100644 --- a/src/js/controllers/backup.js +++ b/src/js/controllers/backup.js @@ -27,7 +27,7 @@ angular.module('copayApp.controllers').controller('backupController', }); }; - $scope.initFlow = function() { + $scope.setFlow = function(step) { if (!keys) return; var words = keys.mnemonic; @@ -39,7 +39,7 @@ angular.module('copayApp.controllers').controller('backupController', $scope.useIdeograms = words.indexOf("\u3000") >= 0; $scope.data.passphrase = null; $scope.customWords = []; - $scope.step = 1; + $scope.step = step || 1; $scope.selectComplete = false; $scope.backupError = false; @@ -72,10 +72,10 @@ angular.module('copayApp.controllers').controller('backupController', var showBackupResult = function() { if ($scope.backupError) { - var title = gettextCatalog.getString('Uh oh...'); + var title = 'Uh oh...'; var message = gettextCatalog.getString("It's important that you write your backup phrase down correctly. If something happens to your wallet, you'll need this backup to recover your money. Please review your backup and try again."); popupService.showAlert(title, message, function() { - $scope.goToStep(1); + $scope.setFlow(2); }) } else { openConfirmBackupModal(); @@ -151,7 +151,7 @@ angular.module('copayApp.controllers').controller('backupController', $scope.goToStep = function(n) { if (n == 1) - $scope.initFlow(); + $scope.setFlow(); if (n == 2) $scope.step = 2; if (n == 3) { @@ -203,7 +203,7 @@ angular.module('copayApp.controllers').controller('backupController', } $scope.credentialsEncrypted = false; keys = k; - $scope.initFlow(); + $scope.setFlow(); }); }); diff --git a/src/js/controllers/confirm.js b/src/js/controllers/confirm.js index 868a45856..870febb2d 100644 --- a/src/js/controllers/confirm.js +++ b/src/js/controllers/confirm.js @@ -41,14 +41,20 @@ angular.module('copayApp.controllers').controller('confirmController', function( var networkName = (new bitcore.Address($scope.toAddress)).network.name; $scope.network = networkName; - $scope.notAvailable = false; + $scope.insuffientFunds = false; + $scope.noMatchingWallet = false; + var wallets = profileService.getWallets({ onlyComplete: true, network: networkName, }); + if (!wallets || !wallets.length) { + $scope.noMatchingWallet = true; + } + var filteredWallets = []; - var index = 0; + var index = 0, enoughFunds = false; lodash.each(wallets, function(w) { walletService.getStatus(w, {}, function(err, status) { @@ -56,15 +62,20 @@ angular.module('copayApp.controllers').controller('confirmController', function( $log.error(err); } else { if (!status.availableBalanceSat) $log.debug('No balance available in: ' + w.name); - if (status.availableBalanceSat > $scope.toAmount) filteredWallets.push(w); + if (status.availableBalanceSat > $scope.toAmount) { + filteredWallets.push(w); + enoughFunds = true; + } } if (++index == wallets.length) { if (!lodash.isEmpty(filteredWallets)) { $scope.wallets = lodash.clone(filteredWallets); - $scope.notAvailable = false; } else { - $scope.notAvailable = true; + + if (!enoughFunds) + $scope.insuffientFunds = true; + $log.warn('No wallet available to make the payment'); } } diff --git a/src/js/controllers/create.js b/src/js/controllers/create.js index 6b91db34d..bad361d93 100644 --- a/src/js/controllers/create.js +++ b/src/js/controllers/create.js @@ -37,9 +37,24 @@ angular.module('copayApp.controllers').controller('createController', }; $scope.showAdvChange = function() { + $scope.showAdv = !$scope.showAdv; + $scope.resizeView(); + }; + + $scope.resizeView = function() { $timeout(function() { $ionicScrollDelegate.resize(); - }, 10); + }); + checkPasswordFields(); + }; + + function checkPasswordFields() { + if (!$scope.encrypt) { + $scope.formData.passphrase = $scope.formData.createPassphrase = $scope.formData.passwordSaved = null; + $timeout(function() { + $scope.$apply(); + }); + } }; function updateRCSelect(n) { @@ -160,7 +175,6 @@ angular.module('copayApp.controllers').controller('createController', function _create(opts) { ongoingProcess.set('creatingWallet', true); $timeout(function() { - profileService.createWallet(opts, function(err, client) { ongoingProcess.set('creatingWallet', false); if (err) { @@ -173,11 +187,12 @@ angular.module('copayApp.controllers').controller('createController', $log.debug('Remote preferences saved for:' + client.credentials.walletId) }); - if ($scope.seedSource.id == 'set') { profileService.setBackupFlag(client.credentials.walletId); } + $ionicHistory.removeBackView(); + if (!client.isComplete()) { $ionicHistory.nextViewOptions({ disableAnimate: true @@ -188,8 +203,7 @@ angular.module('copayApp.controllers').controller('createController', walletId: client.credentials.walletId }); }, 100); - } - else $state.go('tabs.home') + } else $state.go('tabs.home'); }); }, 100); } diff --git a/src/js/controllers/export.js b/src/js/controllers/export.js index 4d7aed6c0..a5a90766b 100644 --- a/src/js/controllers/export.js +++ b/src/js/controllers/export.js @@ -1,9 +1,20 @@ 'use strict'; angular.module('copayApp.controllers').controller('exportController', - function($scope, $timeout, $log, $ionicHistory, backupService, walletService, storageService, profileService, platformInfo, gettextCatalog, $state, $stateParams, popupService) { + function($scope, $timeout, $log, $ionicHistory, $ionicScrollDelegate, backupService, walletService, storageService, profileService, platformInfo, gettextCatalog, $state, $stateParams, popupService) { var wallet = profileService.getWallet($stateParams.walletId); + $scope.showAdvChange = function() { + $scope.showAdv = !$scope.showAdv; + $scope.resizeView(); + }; + + $scope.resizeView = function() { + $timeout(function() { + $ionicScrollDelegate.resize(); + }); + }; + var init = function() { $scope.formData = {}; $scope.isEncrypted = wallet.isPrivKeyEncrypted(); diff --git a/src/js/controllers/join.js b/src/js/controllers/join.js index 83150713a..c358b7fc9 100644 --- a/src/js/controllers/join.js +++ b/src/js/controllers/join.js @@ -1,7 +1,7 @@ 'use strict'; angular.module('copayApp.controllers').controller('joinController', - function($scope, $rootScope, $timeout, $state, $ionicHistory, profileService, configService, storageService, applicationService, gettext, gettextCatalog, lodash, ledger, trezor, platformInfo, derivationPathHelper, ongoingProcess, walletService, $log, $stateParams, popupService) { + function($scope, $rootScope, $timeout, $state, $ionicHistory, $ionicScrollDelegate, profileService, configService, storageService, applicationService, gettext, gettextCatalog, lodash, ledger, trezor, platformInfo, derivationPathHelper, ongoingProcess, walletService, $log, $stateParams, popupService) { var isChromeApp = platformInfo.isChromeApp; var isDevel = platformInfo.isDevel; @@ -12,6 +12,26 @@ angular.module('copayApp.controllers').controller('joinController', $scope.derivationPath = derivationPathHelper.default; $scope.account = 1; + $scope.showAdvChange = function() { + $scope.showAdv = !$scope.showAdv; + $scope.resizeView(); + }; + + $scope.resizeView = function() { + $timeout(function() { + $ionicScrollDelegate.resize(); + }); + checkPasswordFields(); + }; + + function checkPasswordFields() { + if (!$scope.encrypt) { + $scope.passphrase = $scope.createPassphrase = $scope.passwordSaved = null; + $timeout(function() { + $scope.$apply(); + }); + } + }; this.onQrCodeScanned = function(data) { $scope.secret = data; @@ -156,11 +176,10 @@ angular.module('copayApp.controllers').controller('joinController', $state.transitionTo('tabs.copayers', { walletId: client.credentials.walletId }); - }, 100); - } - else $state.go('tabs.home') + }); + } else $state.go('tabs.home'); }); - }, 100); + }); }; updateSeedSourceSelect(); diff --git a/src/js/controllers/modals/receiveTips.js b/src/js/controllers/modals/receiveTips.js deleted file mode 100644 index 2297be7a4..000000000 --- a/src/js/controllers/modals/receiveTips.js +++ /dev/null @@ -1,10 +0,0 @@ -'use strict'; - -angular.module('copayApp.controllers').controller('receiveTipsController', function($scope, $log, storageService) { - $scope.close = function() { - $log.debug('Receive tips accepted'); - storageService.setReceiveTipsAccepted(true, function(err) { - $scope.receiveTipsModal.hide(); - }); - } -}); diff --git a/src/js/controllers/modals/scanTips.js b/src/js/controllers/modals/scanTips.js deleted file mode 100644 index a82f70554..000000000 --- a/src/js/controllers/modals/scanTips.js +++ /dev/null @@ -1,11 +0,0 @@ -'use strict'; - -angular.module('copayApp.controllers').controller('scanTipsController', function($scope, $log, storageService) { - $scope.close = function() { - $log.debug('Scan tips accepted'); - storageService.setScanTipsAccepted(true, function(err) { - $scope.$emit('TipsModalClosed', function() {}); - $scope.scanTipsModal.hide(); - }); - } -}); diff --git a/src/js/controllers/onboarding/notifications.js b/src/js/controllers/onboarding/notifications.js index a2444abf0..a2c8346e5 100644 --- a/src/js/controllers/onboarding/notifications.js +++ b/src/js/controllers/onboarding/notifications.js @@ -1,13 +1,32 @@ 'use strict'; -angular.module('copayApp.controllers').controller('notificationsController', function($scope, $state, $stateParams, profileService) { +angular.module('copayApp.controllers').controller('notificationsController', function($scope, $state, $timeout, $stateParams, profileService, configService) { + + $scope.$on("$ionicView.enter", function(event, data) { + $scope.walletId = data.stateParams.walletId; + }); - $scope.walletId = $stateParams.walletId; $scope.allowNotif = function() { - profileService.pushNotificationsInit(); + $timeout(function() { + profileService.pushNotificationsInit(); + }); $state.go('onboarding.backupRequest', { walletId: $scope.walletId }); } + $scope.disableNotif = function() { + var opts = { + pushNotifications: { + enabled: false + } + }; + configService.set(opts, function(err) { + if (err) $log.warn(err); + $state.go('onboarding.backupRequest', { + walletId: $scope.walletId + }); + }); + }; + }); diff --git a/src/js/controllers/onboarding/tour.js b/src/js/controllers/onboarding/tour.js index aa2cdd92e..568d2771b 100644 --- a/src/js/controllers/onboarding/tour.js +++ b/src/js/controllers/onboarding/tour.js @@ -1,28 +1,40 @@ 'use strict'; angular.module('copayApp.controllers').controller('tourController', - function($scope, $state, $log, $timeout, $filter, ongoingProcess, profileService, rateService) { + function($scope, $state, $log, $timeout, $filter, ongoingProcess, platformInfo, profileService, rateService) { - var tries = 0; + var isCordova = platformInfo.isCordova; + var isWP = platformInfo.isWP; + var usePushNotifications = isCordova && !isWP; - $scope.init = function() { - $scope.data = { - index: 0 - }; - - $scope.options = { - loop: false, - effect: 'flip', - speed: 500, - spaceBetween: 100 - } + $scope.data = { + index: 0 }; - rateService.whenAvailable(function() { - var localCurrency = 'USD'; - var btcAmount = 1; - var rate = rateService.toFiat(btcAmount * 1e8, localCurrency); - $scope.localCurrencySymbol = '$'; - $scope.localCurrencyPerBtc = $filter('formatFiatAmount')(parseFloat(rate.toFixed(2), 10)); + $scope.options = { + loop: false, + effect: 'flip', + speed: 500, + spaceBetween: 100 + } + + $scope.$on("$ionicSlides.sliderInitialized", function(event, data) { + $scope.slider = data.slider; + }); + + $scope.$on("$ionicSlides.slideChangeStart", function(event, data) { + $scope.data.index = data.slider.activeIndex; + }); + + $scope.$on("$ionicSlides.slideChangeEnd", function(event, data) {}); + + $scope.$on("$ionicView.enter", function(event, data) { + rateService.whenAvailable(function() { + var localCurrency = 'USD'; + var btcAmount = 1; + var rate = rateService.toFiat(btcAmount * 1e8, localCurrency); + $scope.localCurrencySymbol = '$'; + $scope.localCurrencyPerBtc = $filter('formatFiatAmount')(parseFloat(rate.toFixed(2), 10)); + }); }); $scope.createDefaultWallet = function() { @@ -33,21 +45,22 @@ angular.module('copayApp.controllers').controller('tourController', return $timeout(function() { $log.warn('Retrying to create default wallet......'); - if (tries == 3) { - tries == 0; - return $scope.createDefaultWallet(); - } else { - tries += 1; - return $scope.createDefaultWallet(); - } + return $scope.createDefaultWallet(); }, 3000); }; ongoingProcess.set('creatingWallet', false); var wallet = walletClient; - $state.go('onboarding.collectEmail', { - fromOnboarding: true, - walletId: wallet.credentials.walletId - }); + var walletId = wallet.credentials.walletId; + if (!usePushNotifications) { + $state.go('onboarding.backupRequest', { + walletId: walletId + }); + } + else { + $state.go('onboarding.notifications', { + walletId: walletId + }); + } }); }; @@ -60,14 +73,4 @@ angular.module('copayApp.controllers').controller('tourController', if ($scope.data.index != 2) $scope.slider.slideNext(); else $state.go('onboarding.welcome'); } - - $scope.$on("$ionicSlides.sliderInitialized", function(event, data) { - $scope.slider = data.slider; - }); - - $scope.$on("$ionicSlides.slideChangeStart", function(event, data) { - $scope.data.index = data.slider.activeIndex; - }); - - $scope.$on("$ionicSlides.slideChangeEnd", function(event, data) {}); }); diff --git a/src/js/controllers/preferences.js b/src/js/controllers/preferences.js index 3ab7cf1de..bed1da88f 100644 --- a/src/js/controllers/preferences.js +++ b/src/js/controllers/preferences.js @@ -6,6 +6,11 @@ angular.module('copayApp.controllers').controller('preferencesController', var walletId = wallet.credentials.walletId; $scope.wallet = wallet; + $scope.encryptEnabled = { + value: walletService.isEncrypted(wallet) + }; + + $scope.encryptChange = function() { if (!wallet) return; var val = $scope.encryptEnabled.value; @@ -18,6 +23,9 @@ angular.module('copayApp.controllers').controller('preferencesController', // ToDo show error? $scope.encryptEnabled.value = false; + $timeout(function() { + $scope.$apply(); + }); return; } profileService.updateCredentials(JSON.parse(wallet.export()), function() { @@ -32,6 +40,9 @@ angular.module('copayApp.controllers').controller('preferencesController', // ToDo show error? $scope.encryptEnabled.value = true; + $timeout(function() { + $scope.$apply(); + }); return; } profileService.updateCredentials(JSON.parse(wallet.export()), function() { @@ -64,9 +75,7 @@ angular.module('copayApp.controllers').controller('preferencesController', var config = configService.getSync(); - $scope.encryptEnabled = { - value: walletService.isEncrypted(wallet) - }; + if (wallet.isPrivKeyExternal) $scope.externalSource = wallet.getPrivKeyExternalSourceName() == 'ledger' ? 'Ledger' : 'Trezor'; diff --git a/src/js/controllers/preferencesNotifications.js b/src/js/controllers/preferencesNotifications.js index 8d947dde8..5cf80a4af 100644 --- a/src/js/controllers/preferencesNotifications.js +++ b/src/js/controllers/preferencesNotifications.js @@ -9,13 +9,17 @@ angular.module('copayApp.controllers').controller('preferencesNotificationsContr var isCordova = platformInfo.isCordova; var isIOS = platformInfo.isIOS; + $scope.appName = $window.appConfig.nameCase; $scope.PNEnabledByUser = true; $scope.isIOSApp = isIOS && isCordova; if ($scope.isIOSApp) { - cordova.plugins.diagnostic.isRemoteNotificationsEnabled(function(isEnabled) { - $scope.PNEnabledByUser = isEnabled; - $scope.$digest(); - }); + try { + PushNotification.hasPermission(function(data) { + $scope.PNEnabledByUser = data.isEnabled; + }); + } catch(e) { + $log.error(e); + }; } $scope.pushNotifications = { @@ -23,15 +27,8 @@ angular.module('copayApp.controllers').controller('preferencesNotificationsContr }; }; - $scope.openSettings = function() { - cordova.plugins.diagnostic.switchToSettings(function() { - $log.debug('switched to settings'); - }, function(err) { - $log.debug(err); - }); - }; - $scope.pushNotificationsChange = function() { + if (!$scope.pushNotifications) return; var opts = { pushNotifications: { enabled: $scope.pushNotifications.value @@ -39,9 +36,9 @@ angular.module('copayApp.controllers').controller('preferencesNotificationsContr }; configService.set(opts, function(err) { if (opts.pushNotifications.enabled) - pushNotificationsService.enableNotifications(profileService.walletClients); + profileService.pushNotificationsInit(); else - pushNotificationsService.disableNotifications(profileService.walletClients); + pushNotificationsService.disableNotifications(profileService.getWallets()); if (err) $log.debug(err); }); }; diff --git a/src/js/controllers/tab-home.js b/src/js/controllers/tab-home.js index e13111622..937e1bab6 100644 --- a/src/js/controllers/tab-home.js +++ b/src/js/controllers/tab-home.js @@ -12,6 +12,12 @@ angular.module('copayApp.controllers').controller('tabHomeController', $scope.name = $window.appConfig.nameCase; $scope.homeTip = $stateParams.fromOnboarding; + if(!$scope.homeTip){ + storageService.getHomeTipAccepted(function(error, value){ + $scope.homeTip = (value == 'false') ? false : true; + }); + } + $scope.openNotificationModal = function(n) { wallet = profileService.getWallet(n.walletId); @@ -164,11 +170,8 @@ angular.module('copayApp.controllers').controller('tabHomeController', }; $scope.hideHomeTip = function() { - $scope.homeTip = null; - $state.transitionTo($state.current, null, { - reload: true, - inherit: false, - notify: false + storageService.setHomeTipAccepted(false, function(error, value){ + $scope.homeTip = false; }); }; diff --git a/src/js/controllers/tab-receive.js b/src/js/controllers/tab-receive.js index 70bd07e4b..f2cd4472a 100644 --- a/src/js/controllers/tab-receive.js +++ b/src/js/controllers/tab-receive.js @@ -5,21 +5,6 @@ angular.module('copayApp.controllers').controller('tabReceiveController', functi $scope.isCordova = platformInfo.isCordova; $scope.isNW = platformInfo.isNW; - $scope.checkTips = function(force) { - storageService.getReceiveTipsAccepted(function(err, accepted) { - if (err) $log.warn(err); - if (accepted && !force) return; - - $timeout(function() { - $ionicModal.fromTemplateUrl('views/modals/receive-tips.html', { - scope: $scope - }).then(function(modal) { - $scope.receiveTipsModal = modal; - $scope.receiveTipsModal.show(); - }); - }, force ? 1 : 1000); - }); - }; $scope.shareAddress = function(addr) { if ($scope.generatingAddress) return; @@ -84,7 +69,6 @@ angular.module('copayApp.controllers').controller('tabReceiveController', functi }); }; - if (!$scope.isCordova) $scope.checkTips(); $scope.$on('Wallet/Changed', function(event, wallet) { if (!wallet) { $log.debug('No wallet provided'); diff --git a/src/js/services/profileService.js b/src/js/services/profileService.js index 30563208b..659f9dd8f 100644 --- a/src/js/services/profileService.js +++ b/src/js/services/profileService.js @@ -296,7 +296,8 @@ angular.module('copayApp.services') if (!val) { return cb(new Error('NONAGREEDDISCLAIMER: Non agreed disclaimer')); } - if (usePushNotifications) + var config = configService.getSync(); + if (config.pushNotifications.enabled && usePushNotifications) root.pushNotificationsInit(); return cb(); }); @@ -317,6 +318,8 @@ angular.module('copayApp.services') var defaults = configService.getDefaults(); var push = pushNotificationsService.init(root.wallet); + if (!push) return; + push.on('notification', function(data) { if (!data.additionalData.foreground) { $log.debug('Push notification event: ', data.message); diff --git a/src/js/services/pushNotificationsService.js b/src/js/services/pushNotificationsService.js index f6c621415..904ae4246 100644 --- a/src/js/services/pushNotificationsService.js +++ b/src/js/services/pushNotificationsService.js @@ -11,10 +11,14 @@ angular.module('copayApp.services') root.init = function(walletsClients) { var defaults = configService.getDefaults(); - var push = PushNotification.init(defaults.pushNotifications.config); + try { + var push = PushNotification.init(defaults.pushNotifications.config); + } catch(e) { + $log.error(e); + return; + }; push.on('registration', function(data) { - if (root.token) return; $log.debug('Starting push notification registration'); root.token = data.registrationId; var config = configService.getSync(); @@ -31,7 +35,7 @@ angular.module('copayApp.services') if (!config.pushNotifications.enabled) return; if (!root.token) { - $log.warn('No token available for this device. Cannot set push notifications'); + $log.warn('No token available for this device. Cannot set push notifications. Needs registration.'); return; } diff --git a/src/js/services/storageService.js b/src/js/services/storageService.js index 3e07547ac..f9f14fdf7 100644 --- a/src/js/services/storageService.js +++ b/src/js/services/storageService.js @@ -195,6 +195,14 @@ angular.module('copayApp.services') storage.remove('config', cb); }; + root.getHomeTipAccepted = function(cb) { + storage.get('homeTip', cb); + }; + + root.setHomeTipAccepted = function(val, cb) { + storage.set('homeTip', val, cb); + }; + root.setHideBalanceFlag = function(walletId, val, cb) { storage.set('hideBalance-' + walletId, val, cb); }; @@ -361,21 +369,6 @@ angular.module('copayApp.services') }); }; - root.setScanTipsAccepted = function(val, cb) { - storage.set('scanTips', val, cb); - }; - - root.getScanTipsAccepted = function(cb) { - storage.get('scanTips', cb); - }; - - root.setReceiveTipsAccepted = function(val, cb) { - storage.set('receiveTips', val, cb); - }; - - root.getReceiveTipsAccepted = function(cb) { - storage.get('receiveTips', cb); - }; root.setBackupNeededModalFlag = function(walletId, val, cb) { storage.set('showBackupNeededModal-' + walletId, val, cb); diff --git a/src/sass/views/onboarding/onboarding.scss b/src/sass/views/onboarding/onboarding.scss index 635ba7ad7..550f8de32 100644 --- a/src/sass/views/onboarding/onboarding.scss +++ b/src/sass/views/onboarding/onboarding.scss @@ -22,18 +22,27 @@ font-size: 24px; margin-top: .5rem; line-height: 1.3; + @media(max-width: 350px) { + font-size: 20px; + } } .onboarding-description { margin-top: 1rem; font-size: 16px; color: rgba(255,255,255,0.5); line-height: 1.5; + @media(max-width: 350px) { + line-height: 1.3; + } } .onboarding-tldr { font-size: 18px; margin-top: 1rem; margin-bottom: 1em; line-height: 1.3; + @media(max-width: 350px) { + font-size: 16px; + } } } @@ -55,7 +64,7 @@ %onboarding-illustration { position: absolute; width: 100%; - height: 40%; + height: 45%; margin-top: 25vh; top: 0; background-position: center; diff --git a/www/views/backup.html b/www/views/backup.html index fe43000d2..de649acc2 100644 --- a/www/views/backup.html +++ b/www/views/backup.html @@ -51,7 +51,7 @@ - + diff --git a/www/views/confirm.html b/www/views/confirm.html index aa039f4b4..0577b8ab6 100644 --- a/www/views/confirm.html +++ b/www/views/confirm.html @@ -45,13 +45,19 @@ -
- No wallet with enough funds +
+ No appropiate wallet to make this payment +
+ + + +
+ Insufficient funds
-
+
Add description @@ -59,7 +65,7 @@
- + diff --git a/www/views/includes/terms.html b/www/views/includes/terms.html index 3d17e514c..2870ed1c5 100644 --- a/www/views/includes/terms.html +++ b/www/views/includes/terms.html @@ -5,7 +5,7 @@ While the software has undergone beta testing and continues to be improved by feedback from the open-source user and developer community, we cannot guarantee that there will be no bugs in the software. You acknowledge that your use of this software is at your own discretion and in compliance with all applicable laws. You are responsible for safekeeping your passwords, private key pairs, PINs and any other codes you use to access the software.

- IF YOU LOSE ACCESS TO YOUR COPAY WALLET OR YOUR ENCRYPTED PRIVATE KEYS AND YOU HAVE NOT SEPARATELY STORED A BACKUP OF YOUR WALLET AND CORRESPONDING PASSWORD, YOU ACKNOWLEDGE AND AGREE THAT ANY BITCOIN YOU HAVE ASSOCIATED WITH THAT COPAY WALLET WILL BECOME INACCESSIBLE. All transaction requests are irreversible. The authors of the software, employees and affiliates of Bitpay, copyright holders, and BitPay, Inc. cannot retrieve your private keys or passwords if you lose or forget them and cannot guarantee transaction confirmation as they do not have control over the Bitcoin network. + IF YOU LOSE ACCESS TO YOUR BITCOIN WALLET OR YOUR ENCRYPTED PRIVATE KEYS AND YOU HAVE NOT SEPARATELY STORED A BACKUP OF YOUR WALLET AND CORRESPONDING PASSWORD, YOU ACKNOWLEDGE AND AGREE THAT ANY BITCOIN YOU HAVE ASSOCIATED WITH THAT WALLET WILL BECOME INACCESSIBLE. All transaction requests are irreversible. The authors of the software, employees and affiliates of Bitpay, copyright holders, and BitPay, Inc. cannot retrieve your private keys or passwords if you lose or forget them and cannot guarantee transaction confirmation as they do not have control over the Bitcoin network.

To the fullest extent permitted by law, this software is provided “as is” and no representations or warranties can be made of any kind, express or implied, including but not limited to the warranties of merchantability, fitness or a particular purpose and noninfringement. You assume any and all risks associated with the use of the software. In no event shall the authors of the software, employees and affiliates of Bitpay, copyright holders, or BitPay, Inc. be held liable for any claim, damages or other liability, whether in an action of contract, tort, or otherwise, arising from, out of or in connection with the software. We reserve the right to modify this disclaimer from time to time. diff --git a/www/views/join.html b/www/views/join.html index f21080820..c1e559383 100644 --- a/www/views/join.html +++ b/www/views/join.html @@ -40,10 +40,12 @@

- +
+ + Show advanced options Hide advanced options -
+
@@ -69,23 +71,6 @@ -
-
- - WARNING: The password cannot be recovered. Be sure to write it down. The wallet can not be restored without the password. - -
-
- - - -
- diff --git a/www/views/modals/receive-tips.html b/www/views/modals/receive-tips.html deleted file mode 100644 index b148acd35..000000000 --- a/www/views/modals/receive-tips.html +++ /dev/null @@ -1,15 +0,0 @@ - - - - - - - -
-

Receive bitcoin by sharing your address

-

Other bitcoin users can scan this code to send you money

-
-
-
diff --git a/www/views/modals/scan-tips.html b/www/views/modals/scan-tips.html deleted file mode 100644 index 512b60327..000000000 --- a/www/views/modals/scan-tips.html +++ /dev/null @@ -1,15 +0,0 @@ - - - - - - - -
-

Scan the code to pay with bitcoin

-

QR codes could also contain a bitcoin wallet invitation, or an URL

-
-
-
diff --git a/www/views/modals/tx-status.html b/www/views/modals/tx-status.html index 426c762af..1c930de0d 100644 --- a/www/views/modals/tx-status.html +++ b/www/views/modals/tx-status.html @@ -1,15 +1,17 @@ -