diff --git a/public/views/modals/tx-details.html b/public/views/modals/tx-details.html index 31d46c5f0..b5a118a29 100644 --- a/public/views/modals/tx-details.html +++ b/public/views/modals/tx-details.html @@ -3,7 +3,7 @@ -
+
{{title}}
@@ -16,25 +16,26 @@ -
- {{btx.amountStr}} +
+ {{btx.amountStr}}
-
- +
+ {{alternativeAmountStr}} - + {{rateStr}} ({{rateDate | amDateFormat:'MM/DD/YYYY HH:mm a'}})
- Sent from {{wallet.credentials.walletName}} -
- +
+ Sent from + {{wallet.credentials.walletName}}
+
@@ -63,27 +64,26 @@ {{btx.labelTo}} - +
-
+
View transaction on the blockchain
-
- Date +
+ {{'Date'|translate}}
-
Created by
- {{btx.creatorName}} + {{'Created by'|translate}} {{btx.creatorName}} @@ -91,9 +91,8 @@
-
Fee
- {{btx.feeLevel}} ({{btx.feeStr}}) - + {{'Fee'|translate}}: {{btx.feeStr}} + Unconfirmed @@ -108,20 +107,23 @@
-
Description
- {{btx.message}} + {{'Description'|translate}} + + {{btx.message}} +
-
Merchant message
- + {{'Merchant message'|translate}} + {{btx.merchant.pr.pd.memo}}
-
Recipients
- {{btx.recipientCount}} + {{'Recipients'|translate}} + + {{btx.recipientCount}} @@ -138,21 +140,22 @@
-
- Add Memo - Memo -
- {{btx.note.body}}
- - Edited by {{btx.note.editedByName}}, - - -
+
+ {{'Memo'|translate}} + + + + + {{btx.note.body}} +
+ Edited by {{btx.note.editedByName}}, + +
+
Timeline
-
diff --git a/public/views/modals/txp-details.html b/public/views/modals/txp-details.html index 1227ca724..1f89f7b4a 100644 --- a/public/views/modals/txp-details.html +++ b/public/views/modals/txp-details.html @@ -22,32 +22,30 @@
{{tx.amountStr}}
{{tx.alternativeAmountStr}}
-
-
-
+
The payment was removed by creator
+ +
+
+
Payment accepted, but not yet broadcasted
+ + +
+
+
Payment accepted. It will be broadcasted by Glidera. In case there is a problem, it can be deleted 6 hours after it was created.
+
+
Payment Sent
+
Payment Rejected
+
-
-
-
Payment accepted, but not yet broadcasted
- - -
-
-
Payment accepted. It will be broadcasted by Glidera. In case there is a problem, it can be deleted 6 hours after it was created.
-
-
Payment Sent
-
Payment Rejected
-
- -
- Warning: this transaction has unconfirmed inputs +
+ Warning: this transaction has unconfirmed inputs
@@ -55,7 +53,7 @@ To - + Multiple recipients
@@ -73,61 +71,61 @@
- From - - - - - {{wallet.name}} + {{'From'|translate}} + + + + +
{{wallet.name}}
- Created by - + {{'Created by'|translate}} + {{tx.creatorName}}
- Memo - + {{'Memo'|translate}} + {{tx.message}}
- Fee - + {{'Fee'|translate}} + {{tx.feeStr}}
Payment details
-
  • - To - +
    + {{'To'|translate}} + {{tx.paypro.domain}} {{tx.paypro.domain}} -
  • -
  • - Expired - +
  • +
    + {{'Expired'|translate}} + - -
  • - Expires - +
  • +
    + {{'Expires'|translate}} + - -
  • - Merchant Message - {{tx.paypro.pr.pd.memo}} -
  • +
    +
    + {{'Merchant Message'|translate}} + {{tx.paypro.pr.pd.memo}} +
    Timeline
    @@ -151,16 +149,20 @@
    -
    + +
    * A payment proposal can be deleted if 1) you are the creator, and no other copayer has signed, or 2) 24 hours have passed since the proposal was created.
    -
    - diff --git a/public/views/tab-home.html b/public/views/tab-home.html index 1cd42cf19..3427914ab 100644 --- a/public/views/tab-home.html +++ b/public/views/tab-home.html @@ -25,7 +25,6 @@ Payment Proposals - {{txpsN}} diff --git a/public/views/tab-receive.html b/public/views/tab-receive.html index d8f43983b..29a605958 100644 --- a/public/views/tab-receive.html +++ b/public/views/tab-receive.html @@ -31,7 +31,7 @@
    -
    +
    Wallet not backed up
    diff --git a/public/views/tab-send.html b/public/views/tab-send.html index d23a0731f..3ab5f5f6a 100644 --- a/public/views/tab-send.html +++ b/public/views/tab-send.html @@ -4,45 +4,47 @@ -
    -
    Recipient
    - -
    +
    Recipient
    +
    Contacts - +
    - + Add a Contact + - + {{item.name}} + +
    + Show more +
    -
    +
    Transfer to Wallet
    -
    No Wallet
    - + - {{item.name}} +
    diff --git a/src/js/controllers/confirm.js b/src/js/controllers/confirm.js index 4f0a595bd..ab5440289 100644 --- a/src/js/controllers/confirm.js +++ b/src/js/controllers/confirm.js @@ -1,6 +1,6 @@ 'use strict'; -angular.module('copayApp.controllers').controller('confirmController', function($rootScope, $scope, $filter, $timeout, $ionicScrollDelegate, gettextCatalog, walletService, platformInfo, lodash, configService, rateService, $stateParams, $window, $state, $log, profileService, bitcore, $ionicPopup, gettext, txFormatService, ongoingProcess, $ionicModal, $ionicHistory, popupService) { +angular.module('copayApp.controllers').controller('confirmController', function($rootScope, $scope, $filter, $timeout, $ionicScrollDelegate, gettextCatalog, walletService, platformInfo, lodash, configService, rateService, $stateParams, $window, $state, $log, profileService, bitcore, $ionicPopup, gettext, txFormatService, ongoingProcess, $ionicModal, popupService) { var cachedTxp = {}; var isChromeApp = platformInfo.isChromeApp; diff --git a/src/js/controllers/import.js b/src/js/controllers/import.js index 388360787..bdc97e984 100644 --- a/src/js/controllers/import.js +++ b/src/js/controllers/import.js @@ -1,7 +1,7 @@ 'use strict'; angular.module('copayApp.controllers').controller('importController', - function($scope, $timeout, $log, $state, $stateParams, profileService, configService, sjcl, ledger, trezor, derivationPathHelper, platformInfo, bwcService, ongoingProcess, walletService, popupService, gettextCatalog) { + function($scope, $timeout, $log, $state, $stateParams, $ionicHistory, profileService, configService, sjcl, ledger, trezor, derivationPathHelper, platformInfo, bwcService, ongoingProcess, walletService, popupService, gettextCatalog) { var isChromeApp = platformInfo.isChromeApp; var isDevel = platformInfo.isDevel; diff --git a/src/js/controllers/modals/txDetails.js b/src/js/controllers/modals/txDetails.js index b4e45dae1..f9d7dd4ff 100644 --- a/src/js/controllers/modals/txDetails.js +++ b/src/js/controllers/modals/txDetails.js @@ -126,6 +126,9 @@ angular.module('copayApp.controllers').controller('txDetailsController', functio $scope.rateDate = res.fetchedOn; $scope.rateStr = res.rate + ' ' + $scope.alternativeIsoCode; $scope.alternativeAmountStr = $filter('formatFiatAmount')(alternativeAmountBtc * res.rate) + ' ' + $scope.alternativeIsoCode; + $timeout(function() { + $scope.$apply(); + }); } }); }; diff --git a/src/js/controllers/modals/txStatus.js b/src/js/controllers/modals/txStatus.js index d8383c5eb..c78749f1d 100644 --- a/src/js/controllers/modals/txStatus.js +++ b/src/js/controllers/modals/txStatus.js @@ -3,7 +3,7 @@ angular.module('copayApp.controllers').controller('txStatusController', function($scope, $timeout, $state, $ionicHistory, $log, addressbookService) { if ($scope.cb) $timeout($scope.cb, 100); - $scope.fromSendTab = $ionicHistory.viewHistory().backView.stateName === "tabs.send.amount" || "tabs.send"; + $scope.fromSendTab = $ionicHistory.viewHistory().backView && $ionicHistory.viewHistory().backView.stateName === "tabs.send.amount" ||  "tabs.send"; $scope.cancel = function() { $scope.txStatusModal.hide(); diff --git a/src/js/controllers/modals/txpDetails.js b/src/js/controllers/modals/txpDetails.js index 75c4a3120..23ba059b3 100644 --- a/src/js/controllers/modals/txpDetails.js +++ b/src/js/controllers/modals/txpDetails.js @@ -7,6 +7,7 @@ angular.module('copayApp.controllers').controller('txpDetailsController', functi var isGlidera = $scope.isGlidera; var GLIDERA_LOCK_TIME = 6 * 60 * 60; var now = Math.floor(Date.now() / 1000); + var countDown; $scope.init = function() { $scope.loading = null; @@ -18,6 +19,7 @@ angular.module('copayApp.controllers').controller('txpDetailsController', functi $scope.data = {}; initActionList(); + checkPaypro(); } function initActionList() { @@ -53,8 +55,6 @@ angular.module('copayApp.controllers').controller('txpDetailsController', functi $scope.sign(); }); - checkPaypro(); - // ToDo: use tx.customData instead of tx.message if (tx.message === 'Glidera transaction' && isGlidera) { tx.isGlidera = true; @@ -154,7 +154,7 @@ angular.module('copayApp.controllers').controller('txpDetailsController', functi $scope.paymentExpired = false; setExpirationTime(); - self.countDown = $interval(function() { + countDown = $interval(function() { setExpirationTime(); }, 1000); @@ -162,7 +162,7 @@ angular.module('copayApp.controllers').controller('txpDetailsController', functi var now = Math.floor(Date.now() / 1000); if (now > expirationTime) { $scope.paymentExpired = true; - if (self.countDown) $interval.cancel(self.countDown); + if (countDown) $interval.cancel(countDown); return; } var totalSecs = expirationTime - now; diff --git a/src/js/controllers/tab-receive.js b/src/js/controllers/tab-receive.js index 73d670693..9b7b2c672 100644 --- a/src/js/controllers/tab-receive.js +++ b/src/js/controllers/tab-receive.js @@ -33,12 +33,16 @@ angular.module('copayApp.controllers').controller('tabReceiveController', functi $scope.addr = null; $scope.generatingAddress = true; + $timeout(function() { + walletService.getAddress($scope.wallet, forceNew, function(err, addr) { + $scope.generatingAddress = false; + if (err) popupService.showAlert(gettextCatalog.getString('Error'), err); + $scope.addr = addr; + if ($scope.wallet.showBackupNeededModal) $scope.openBackupNeededModal(); + $scope.$apply(); + }); + }, 100); - walletService.getAddress($scope.wallet, forceNew, function(err, addr) { - $scope.generatingAddress = false; - if (err) popupService.showAlert(gettextCatalog.getString('Error'), err); - $scope.addr = addr; - }); }; $scope.$on("$ionicView.beforeEnter", function(event, data) { @@ -49,13 +53,9 @@ angular.module('copayApp.controllers').controller('tabReceiveController', functi $log.debug('No wallet provided'); return; } - $timeout(function() { - $scope.wallet = wallet; - $log.debug('Wallet changed: ' + wallet.name); - $scope.setAddress(); - if ($scope.wallet.showBackupNeededModal) $scope.openBackupNeededModal(); - $scope.$apply(); - }); + $scope.wallet = wallet; + $log.debug('Wallet changed: ' + wallet.name); + $scope.setAddress(); }); }); diff --git a/src/js/controllers/tab-send.js b/src/js/controllers/tab-send.js index 18cafd1d1..45c56dd9b 100644 --- a/src/js/controllers/tab-send.js +++ b/src/js/controllers/tab-send.js @@ -1,8 +1,10 @@ 'use strict'; -angular.module('copayApp.controllers').controller('tabSendController', function($scope, $log, $timeout, addressbookService, profileService, lodash, $state, walletService, incomingData) { +angular.module('copayApp.controllers').controller('tabSendController', function($scope, $log, $timeout, $ionicScrollDelegate, addressbookService, profileService, lodash, $state, walletService, incomingData) { var originalList; + var CONTACTS_SHOW_LIMIT = 10; + var currentContactsPage = 0; var updateList = function() { originalList = []; @@ -11,6 +13,7 @@ angular.module('copayApp.controllers').controller('tabSendController', function( onlyComplete: true }); $scope.hasWallets = lodash.isEmpty(wallets) ? false : true; + $scope.oneWallet = wallets.length == 1; lodash.each(wallets, function(v) { originalList.push({ @@ -27,9 +30,9 @@ angular.module('copayApp.controllers').controller('tabSendController', function( if (err) $log.error(err); $scope.hasContacts = lodash.isEmpty(ab) ? false : true; - var contacts = []; + var completeContacts = []; lodash.each(ab, function(v, k) { - contacts.push({ + completeContacts.push({ name: lodash.isObject(v) ? v.name : v, address: k, email: lodash.isObject(v) ? v.email : null, @@ -39,15 +42,23 @@ angular.module('copayApp.controllers').controller('tabSendController', function( }); }); + var contacts = completeContacts.slice(0, (currentContactsPage + 1) * CONTACTS_SHOW_LIMIT); + $scope.contactsShowMore = completeContacts.length > contacts.length; originalList = originalList.concat(contacts); $scope.list = lodash.clone(originalList); $timeout(function() { + $ionicScrollDelegate.resize(); $scope.$apply(); - }, 1); + }, 10); }); }; + $scope.showMore = function() { + currentContactsPage++; + updateList(); + }; + $scope.findContact = function(search) { if (incomingData.redir(search)) { diff --git a/src/js/controllers/tabsController.js b/src/js/controllers/tabsController.js index 6d1a7116f..434a1e80c 100644 --- a/src/js/controllers/tabsController.js +++ b/src/js/controllers/tabsController.js @@ -31,6 +31,10 @@ angular.module('copayApp.controllers').controller('tabsController', function($ro 'tabs.addressbook', 'tabs.addressbook.add', 'tabs.addressbook.view', + 'tabs.preferences.backupWarning', + 'tabs.preferences.backup', + 'tabs.receive.backupWarning', + 'tabs.receive.backup', ]; $rootScope.$on('$ionicView.beforeEnter', function() { diff --git a/src/js/services/profileService.js b/src/js/services/profileService.js index bb1e15084..247516f9f 100644 --- a/src/js/services/profileService.js +++ b/src/js/services/profileService.js @@ -1,6 +1,6 @@ 'use strict'; angular.module('copayApp.services') - .factory('profileService', function profileServiceFactory($rootScope, $timeout, $filter, $log, sjcl, lodash, storageService, bwcService, configService, pushNotificationsService, gettext, gettextCatalog, bwcError, uxLanguage, platformInfo, $ionicHistory, txFormatService, $state) { + .factory('profileService', function profileServiceFactory($rootScope, $timeout, $filter, $log, sjcl, lodash, storageService, bwcService, configService, pushNotificationsService, gettext, gettextCatalog, bwcError, uxLanguage, platformInfo, txFormatService, $state) { var isChromeApp = platformInfo.isChromeApp; @@ -118,7 +118,8 @@ angular.module('copayApp.services') }); _showBackupNeededModal(wallet, function(val) { - wallet.showBackupNeededModal = val; + if (wallet.needsBackup) wallet.showBackupNeededModal = val; + else wallet.showBackupNeededModal = false; }); wallet.removeAllListeners(); diff --git a/src/sass/main.scss b/src/sass/main.scss index 4974b6297..916c8f500 100644 --- a/src/sass/main.scss +++ b/src/sass/main.scss @@ -594,6 +594,10 @@ ul.wallet-selection.wallets { margin-right: 40px; } +.m55r { + margin-right: 55px; +} + .m25r { margin-right: 25px; } diff --git a/src/sass/views/includes/txp-details.scss b/src/sass/views/includes/txp-details.scss index 363466c94..28c1d977e 100644 --- a/src/sass/views/includes/txp-details.scss +++ b/src/sass/views/includes/txp-details.scss @@ -3,7 +3,7 @@ bottom: 100px; } .head { - padding-bottom: 55px; + padding-bottom: 30px; .sending-label{ line-height: 70px; font-size: 25px; diff --git a/src/sass/views/onboarding/onboard-backup-request.scss b/src/sass/views/onboarding/onboard-backup-request.scss index 693ebe0bc..22b0b6a47 100644 --- a/src/sass/views/onboarding/onboard-backup-request.scss +++ b/src/sass/views/onboarding/onboard-backup-request.scss @@ -15,9 +15,14 @@ position: absolute; bottom: 0; } + @media (min-width: 400px){ + .warning{ + height:16rem; + } + } } -@media (max-width: 400px){ +@media (max-width: 399px){ #onboarding-backup-request{ .warning{ margin: 2rem auto 1rem; @@ -52,7 +57,7 @@ @media (min-height: 980px){ #onboarding-backup-request{ #arrow-down{ - margin-top: 15rem; + margin-top: 7rem; } } } \ No newline at end of file diff --git a/src/sass/views/onboarding/onboard-collect-email.scss b/src/sass/views/onboarding/onboard-collect-email.scss index ebe7ad9b4..28eb7fe47 100644 --- a/src/sass/views/onboarding/onboard-collect-email.scss +++ b/src/sass/views/onboarding/onboard-collect-email.scss @@ -80,6 +80,19 @@ font-size:.8rem; } } + @media (min-width: 400px){ + &{ + max-width: 400px; + label{ + .checkbox{ + left:1rem; + } + .item-content{ + font-size: 1rem; + } + } + } + } } } } diff --git a/src/sass/views/tab-send.scss b/src/sass/views/tab-send.scss index bc8664ec0..bd0f19a99 100644 --- a/src/sass/views/tab-send.scss +++ b/src/sass/views/tab-send.scss @@ -16,4 +16,11 @@ position: absolute; top: 10px; } + .show-more { + text-align: center; + padding: 20px; + font-size: 16px; + color: #387ef5; + font-weight: bold; + } }