diff --git a/app-template/apply.js b/app-template/apply.js index 2f0015e34..b5de33729 100755 --- a/app-template/apply.js +++ b/app-template/apply.js @@ -15,6 +15,7 @@ var templates = { '.desktop': 'webkitbuilds/', 'setup-win.iss': 'webkitbuilds/', 'build-macos.sh': 'webkitbuilds/', + 'manifest.json': 'chrome-app/', // 'bower.json': '/', }; var configDir = process.argv[2] || 'copay'; diff --git a/app-template/manifest.json b/app-template/manifest.json index dca54d40b..78eabf8a9 100644 --- a/app-template/manifest.json +++ b/app-template/manifest.json @@ -1,7 +1,7 @@ { "manifest_version": 2, "name": "*PACKAGENAME*", - "description": "*PACKAGEDESCRIPTION*", + "description": "*DESCRIPTION*", "version": "*VERSION*", "permissions": [ "storage", diff --git a/src/js/controllers/addressbook.js b/src/js/controllers/addressbook.js index b86bbcc54..6701012ba 100644 --- a/src/js/controllers/addressbook.js +++ b/src/js/controllers/addressbook.js @@ -1,8 +1,9 @@ 'use strict'; -angular.module('copayApp.controllers').controller('addressbookListController', function($scope, $log, $timeout, addressbookService, lodash, popupService, gettextCatalog) { +angular.module('copayApp.controllers').controller('addressbookListController', function($scope, $log, $timeout, addressbookService, lodash, popupService, gettextCatalog, platformInfo) { var contacts; + $scope.isChromeApp = platformInfo.isChromeApp; var initAddressbook = function() { addressbookService.list(function(err, ab) { diff --git a/src/js/controllers/addressbookView.js b/src/js/controllers/addressbookView.js index 236070e59..347de91d9 100644 --- a/src/js/controllers/addressbookView.js +++ b/src/js/controllers/addressbookView.js @@ -1,7 +1,7 @@ 'use strict'; -angular.module('copayApp.controllers').controller('addressbookViewController', function($scope, $state, $timeout, $stateParams, lodash, addressbookService, popupService, $ionicHistory) { - +angular.module('copayApp.controllers').controller('addressbookViewController', function($scope, $state, $timeout, $stateParams, lodash, addressbookService, popupService, $ionicHistory, platformInfo) { + $scope.isChromeApp = platformInfo.isChromeApp; $scope.addressbookEntry = {}; $scope.addressbookEntry.name = $stateParams.name; $scope.addressbookEntry.email = $stateParams.email; diff --git a/src/js/controllers/amount.js b/src/js/controllers/amount.js index 250d9eec5..2a07c3ba5 100644 --- a/src/js/controllers/amount.js +++ b/src/js/controllers/amount.js @@ -7,6 +7,7 @@ angular.module('copayApp.controllers').controller('amountController', function($ var satToBtc; var SMALL_FONT_SIZE_LIMIT = 10; var LENGTH_EXPRESSION_LIMIT = 19; + $scope.isChromeApp = platformInfo.isChromeApp; $scope.$on('$ionicView.leave', function() { angular.element($window).off('keydown'); diff --git a/src/js/controllers/import.js b/src/js/controllers/import.js index df1aaf62d..d03d30286 100644 --- a/src/js/controllers/import.js +++ b/src/js/controllers/import.js @@ -36,7 +36,7 @@ angular.module('copayApp.controllers').controller('importController', id: 'trezor', label: 'Trezor Hardware Wallet', }); - $scope.seedSource = $scope.seedOptions[0]; + $scope.formData.seedSource = $scope.seedOptions[0]; } }; @@ -281,16 +281,16 @@ angular.module('copayApp.controllers').controller('importController', }; $scope.importHW = function(form) { - if (form.$invalid || $scope.formData.ccount < 0) { + if (form.$invalid || $scope.formData.account < 0) { popupService.showAlert(gettextCatalog.getString('Error'), gettextCatalog.getString('There is an error in the form')); return; } $scope.importErr = false; - var account = $scope.formData.ccount; + var account = $scope.formData.account; - if ($scope.seedSource.id == 'trezor') { + if ($scope.formData.seedSource.id == 'trezor') { if (account < 1) { popupService.showAlert(gettextCatalog.getString('Error'), gettextCatalog.getString('Invalid account number')); return; @@ -298,7 +298,7 @@ angular.module('copayApp.controllers').controller('importController', account = account - 1; } - switch ($scope.seedSource.id) { + switch ($scope.formData.seedSource.id) { case ('ledger'): ongoingProcess.set('connectingledger', true); $scope.importLedger(account); diff --git a/src/js/controllers/tab-send.js b/src/js/controllers/tab-send.js index 57b24e97b..d194b0dc3 100644 --- a/src/js/controllers/tab-send.js +++ b/src/js/controllers/tab-send.js @@ -1,11 +1,11 @@ 'use strict'; -angular.module('copayApp.controllers').controller('tabSendController', function($scope, $rootScope, $log, $timeout, $ionicScrollDelegate, addressbookService, profileService, lodash, $state, walletService, incomingData, popupService) { +angular.module('copayApp.controllers').controller('tabSendController', function($scope, $rootScope, $log, $timeout, $ionicScrollDelegate, addressbookService, profileService, lodash, $state, walletService, incomingData, popupService, platformInfo) { var originalList; var CONTACTS_SHOW_LIMIT; var currentContactsPage; - + $scope.isChromeApp = platformInfo.isChromeApp; var updateList = function() { CONTACTS_SHOW_LIMIT = 10; diff --git a/src/js/services/hwWallet.js b/src/js/services/hwWallet.js index 55d3ccc79..1c9314164 100644 --- a/src/js/services/hwWallet.js +++ b/src/js/services/hwWallet.js @@ -1,7 +1,7 @@ 'use strict'; angular.module('copayApp.services') - .factory('hwWallet', function($log, bwcService) { + .factory('hwWallet', function($log, bwcService) { var root = {}; // Ledger magic number to get xPub without user confirmation @@ -11,8 +11,7 @@ angular.module('copayApp.services') root.LIVENET_PATH = 0; root._err = function(data) { - var msg = 'Hardware Wallet Error: ' + (data.error || data.message || 'unknown'); - $log.warn(msg); + var msg = data.error || data.message || 'unknown'; return msg; }; @@ -21,13 +20,13 @@ angular.module('copayApp.services') if (!isMultisig) return root.UNISIG_ROOTPATH; // Compat - if (device == 'ledger' && account ==0) return root.UNISIG_ROOTPATH; + if (device == 'ledger' && account == 0) return root.UNISIG_ROOTPATH; return root.MULTISIG_ROOTPATH; }; root.getAddressPath = function(device, isMultisig, account) { - return root.getRootPath(device,isMultisig,account) + "'/" + root.LIVENET_PATH + "'/" + account + "'"; + return root.getRootPath(device, isMultisig, account) + "'/" + root.LIVENET_PATH + "'/" + account + "'"; } root.getEntropyPath = function(device, isMultisig, account) { @@ -35,9 +34,9 @@ angular.module('copayApp.services') // Old ledger wallet compat if (device == 'ledger' && account == 0) - return root.ENTROPY_INDEX_PATH + "0'"; + return root.ENTROPY_INDEX_PATH + "0'"; - return root.ENTROPY_INDEX_PATH + root.getRootPath(device,isMultisig,account) + "'/" + account + "'"; + return root.ENTROPY_INDEX_PATH + root.getRootPath(device, isMultisig, account) + "'/" + account + "'"; }; root.pubKeyToEntropySource = function(xPubKey) { diff --git a/src/js/services/ledger.js b/src/js/services/ledger.js index 98d892ccb..a58aa2906 100644 --- a/src/js/services/ledger.js +++ b/src/js/services/ledger.js @@ -17,7 +17,7 @@ angular.module('copayApp.services') if (!data.success) return callback(hwWallet._err(data)); - return callback(null, hwWallet.pubKeyToEntropySource(data.xpubkey)); + return callback(null, hwWallet.pubKeyToEntropySource(data.xpubkey)); }); }; @@ -27,21 +27,18 @@ angular.module('copayApp.services') root._messageAfterSession({ command: "get_xpubkey", path: path - }) + }); }; - root.getInfoForNewWallet = function(isMultisig, account, callback) { - var opts = {}; root.getEntropySource(isMultisig, account, function(err, entropySource) { if (err) return callback(err); - opts.entropySource = entropySource; root.getXPubKey(hwWallet.getAddressPath('ledger', isMultisig, account), function(data) { - if (!data.success) { - $log.warn(data.message); - return callback(data); - } + if (!data.success) return callback(data); + + var opts = {}; + opts.entropySource = entropySource; opts.extendedPublicKey = data.xpubkey; opts.externalSource = 'ledger'; opts.account = account; @@ -130,7 +127,7 @@ angular.module('copayApp.services') root._should_poll_session = false; } else if (typeof root.callbacks[data.command] == "function") { root.callbacks[data.command](data); - } + } else {} } else { root._should_poll_session = false; Object.keys(root.callbacks).forEach(function(key) { diff --git a/src/js/services/profileService.js b/src/js/services/profileService.js index d5de455b6..ae40986b8 100644 --- a/src/js/services/profileService.js +++ b/src/js/services/profileService.js @@ -636,6 +636,7 @@ angular.module('copayApp.services') }; root._normalizeMnemonic = function(words) { + if (!words || !words.indexOf) return words; var isJA = words.indexOf('\u3000') > -1; var wordList = words.split(/[\u3000\s]+/); diff --git a/src/js/services/trezor.js b/src/js/services/trezor.js index f0a40c9dd..3a3c48215 100644 --- a/src/js/services/trezor.js +++ b/src/js/services/trezor.js @@ -19,7 +19,11 @@ angular.module('copayApp.services') root.getXPubKey = function(path, callback) { $log.debug('TREZOR deriving xPub path:', path); - TrezorConnect.getXPubKey(path, callback); + try { + TrezorConnect.getXPubKey(path, callback); + } catch (e) { + callback('Error connecting Trezor'); + } }; diff --git a/src/sass/views/address-book.scss b/src/sass/views/address-book.scss index e03c8456b..b570002cd 100644 --- a/src/sass/views/address-book.scss +++ b/src/sass/views/address-book.scss @@ -130,4 +130,20 @@ display: block; color: $mid-gray; } + .big-icon-svg { + padding: 0 7px; + > .bg { + background-color: #f2f2f2; + border-radius: 50%; + width: 70px; + height: 70px; + box-shadow: 0px 1px 5px rgba($mid-gray, .1); + background-repeat: no-repeat; + background-clip: padding-box; + background-size: 103%; + &.green { + background: rgb(1, 209, 162); + } + } + } } diff --git a/www/img/icon-chrome-128.png b/www/img/icon-chrome-128.png new file mode 100644 index 000000000..0044af9ca Binary files /dev/null and b/www/img/icon-chrome-128.png differ diff --git a/www/views/addressbook.html b/www/views/addressbook.html index ba2f63c10..b98960e53 100644 --- a/www/views/addressbook.html +++ b/www/views/addressbook.html @@ -37,7 +37,8 @@ - + +

{{addrEntry.name}}

{{addrEntry.address}}

diff --git a/www/views/addressbook.view.html b/www/views/addressbook.view.html index 46b759de5..3d63abd6a 100644 --- a/www/views/addressbook.view.html +++ b/www/views/addressbook.view.html @@ -8,7 +8,10 @@
- + + + +
diff --git a/www/views/amount.html b/www/views/amount.html index d535cb079..68499b244 100644 --- a/www/views/amount.html +++ b/www/views/amount.html @@ -22,7 +22,10 @@ - + + + +
diff --git a/www/views/includes/walletInfo.html b/www/views/includes/walletInfo.html index c0f06a134..c9bb75245 100644 --- a/www/views/includes/walletInfo.html +++ b/www/views/includes/walletInfo.html @@ -1,19 +1,16 @@ -{{wallet.m}}-of-{{wallet.n}} -Auditable - - +Auditable + + - - -#{{wallet.account || 0}} + + +{{wallet.m}}-of-{{wallet.n}} +#{{wallet.credentials.account || 0}} - + - - + + - + diff --git a/www/views/tab-import-hardware.html b/www/views/tab-import-hardware.html index 92b091e2a..7f750182b 100644 --- a/www/views/tab-import-hardware.html +++ b/www/views/tab-import-hardware.html @@ -12,15 +12,15 @@ Wallet Type
- + -