+
-
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
+
-
+
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;
+ }
}