diff --git a/.gitignore b/.gitignore index 54427aba1..16ebb09f3 100644 --- a/.gitignore +++ b/.gitignore @@ -84,6 +84,9 @@ Session.vim .netrwhist *~ +.tags +.tags1 + # SASS src/sass/*.css .sass-cache diff --git a/app-template/config-template.xml b/app-template/config-template.xml index 5a72f4560..1db63c59a 100644 --- a/app-template/config-template.xml +++ b/app-template/config-template.xml @@ -16,18 +16,21 @@ - - - - - - - + + + + + + + + + + @@ -57,8 +60,9 @@ - - + + + @@ -67,9 +71,8 @@ - - + + @@ -87,7 +90,6 @@ - @@ -101,8 +103,7 @@ - - + diff --git a/package.json b/package.json index 524e9b58b..c690d4989 100644 --- a/package.json +++ b/package.json @@ -27,8 +27,8 @@ "bitcore-wallet-client": "4.3.1", "bower": "^1.7.9", "chai": "^3.5.0", - "cordova": "5.4.1", "cordova-android": "5.1.1", + "cordova-custom-config": "^3.0.5", "cordova-plugin-qrscanner": "^2.3.1", "coveralls": "^2.11.9", "express": "^4.11.2", @@ -89,12 +89,10 @@ "clean-all": "git clean -dfx && npm install" }, "devDependencies": { - "androidmanifest": "^2.0.0", - "cordova": "^5.4.1", - "globby": "^6.0.0", + "cordova": "^6.3.1", + "grunt": "^1.0.1", "ionic": "^2.1.0", - "plist": "^2.0.1", "trash-cli": "^1.4.0", - "xcode": "^0.8.2" + "lodash": "^4.3.0" } } diff --git a/src/js/controllers/copayers.js b/src/js/controllers/copayers.js index 765db7d52..d9568cb1a 100644 --- a/src/js/controllers/copayers.js +++ b/src/js/controllers/copayers.js @@ -3,15 +3,11 @@ angular.module('copayApp.controllers').controller('copayersController', function($scope, $log, $timeout, $stateParams, $state, $rootScope, $ionicHistory, lodash, profileService, walletService, popupService, platformInfo, gettextCatalog, ongoingProcess) { + $scope.isCordova = platformInfo.isCordova; $scope.$on("$ionicView.beforeEnter", function(event, data) { - init(); - }); - - var init = function() { - $scope.isCordova = platformInfo.isCordova; - $scope.wallet = profileService.getWallet($stateParams.walletId); + $scope.wallet = profileService.getWallet(data.stateParams.walletId); updateWallet(); - }; + }); $rootScope.$on('bwsEvent', function() { updateWallet(); @@ -40,7 +36,9 @@ angular.module('copayApp.controllers').controller('copayersController', }; $scope.showDeletePopup = function() { - popupService.showConfirm(gettextCatalog.getString('Confirm'), gettextCatalog.getString('Are you sure you want to delete this wallet?'), null, null, function(res) { + var title = gettextCatalog.getString('Confirm'); + var msg = gettextCatalog.getString('Are you sure you want to cancel and delete this wallet?'); + popupService.showConfirm(title, msg, null, null, function(res) { if (res) deleteWallet(); }); }; diff --git a/src/js/controllers/onboarding/disclaimer.js b/src/js/controllers/onboarding/disclaimer.js index 7459b18da..a18be4e6d 100644 --- a/src/js/controllers/onboarding/disclaimer.js +++ b/src/js/controllers/onboarding/disclaimer.js @@ -1,6 +1,11 @@ 'use strict'; -angular.module('copayApp.controllers').controller('disclaimerController', function($scope, $timeout, $state, $log, $ionicModal, profileService, uxLanguage, externalLinkService, storageService, $stateParams) { +angular.module('copayApp.controllers').controller('disclaimerController', function($scope, $timeout, $state, $log, $ionicModal, profileService, uxLanguage, externalLinkService, storageService, $stateParams, startupService) { + + $scope.$on("$ionicView.afterEnter", function() { + startupService.ready(); + }); + $scope.init = function() { $scope.lang = uxLanguage.currentLanguage; $scope.terms = {}; diff --git a/src/js/controllers/onboarding/tour.js b/src/js/controllers/onboarding/tour.js index c16eba67e..c2a38791e 100644 --- a/src/js/controllers/onboarding/tour.js +++ b/src/js/controllers/onboarding/tour.js @@ -34,6 +34,9 @@ angular.module('copayApp.controllers').controller('tourController', var rate = rateService.toFiat(btcAmount * 1e8, localCurrency); $scope.localCurrencySymbol = '$'; $scope.localCurrencyPerBtc = $filter('formatFiatAmount')(parseFloat(rate.toFixed(2), 10)); + $timeout(function() { + $scope.$apply(); + }) }); }); @@ -50,7 +53,7 @@ angular.module('copayApp.controllers').controller('tourController', ongoingProcess.set('creatingWallet', false); popupService.showAlert( gettextCatalog.getString('Cannot Create Wallet'), err, - function() { + function() { retryCount = 0; return $scope.createDefaultWallet(); }, gettextCatalog.getString('Retry')); diff --git a/src/js/controllers/onboarding/welcomeController.js b/src/js/controllers/onboarding/welcomeController.js index 6a7154c55..3a1651f75 100644 --- a/src/js/controllers/onboarding/welcomeController.js +++ b/src/js/controllers/onboarding/welcomeController.js @@ -1,9 +1,13 @@ 'use strict'; -angular.module('copayApp.controllers').controller('welcomeController', function($scope, $state, $timeout, $ionicConfig, $log, profileService) { +angular.module('copayApp.controllers').controller('welcomeController', function($scope, $state, $timeout, $ionicConfig, $log, profileService, startupService) { $ionicConfig.views.swipeBackEnabled(false); + $scope.$parent.$on("$ionicView.afterEnter", function() { + startupService.ready(); + }); + $scope.goImport = function(code) { $state.go('onboarding.import', { fromOnboarding: true, diff --git a/src/js/controllers/tab-home.js b/src/js/controllers/tab-home.js index 7cad213aa..c4fa9b106 100644 --- a/src/js/controllers/tab-home.js +++ b/src/js/controllers/tab-home.js @@ -1,7 +1,7 @@ 'use strict'; angular.module('copayApp.controllers').controller('tabHomeController', - function($rootScope, $timeout, $scope, $state, $stateParams, $ionicModal, $ionicScrollDelegate, gettextCatalog, lodash, popupService, ongoingProcess, profileService, walletService, configService, $log, platformInfo, storageService, txpModalService, $window, bitpayCardService) { + function($rootScope, $timeout, $scope, $state, $stateParams, $ionicModal, $ionicScrollDelegate, gettextCatalog, lodash, popupService, ongoingProcess, profileService, walletService, configService, $log, platformInfo, storageService, txpModalService, $window, bitpayCardService, startupService) { var wallet; var listeners = []; var notifications = []; @@ -13,6 +13,10 @@ angular.module('copayApp.controllers').controller('tabHomeController', $scope.homeTip = $stateParams.fromOnboarding; $scope.isCordova = platformInfo.isCordova; + $scope.$on("$ionicView.afterEnter", function() { + startupService.ready(); + }); + if (!$scope.homeTip) { storageService.getHomeTipAccepted(function(error, value) { $scope.homeTip = (value == 'false') ? false : true; diff --git a/src/js/controllers/tab-send.js b/src/js/controllers/tab-send.js index 9636fa305..1792ccae1 100644 --- a/src/js/controllers/tab-send.js +++ b/src/js/controllers/tab-send.js @@ -114,6 +114,9 @@ angular.module('copayApp.controllers').controller('tabSendController', function( if (!wallets || !wallets.length) { $scope.hasFunds = false; + $timeout(function() { + $scope.$apply(); + }); } var index = 0; @@ -130,6 +133,9 @@ angular.module('copayApp.controllers').controller('tabSendController', function( } if (index == wallets.length) { $scope.hasFunds = $scope.hasFunds || false; + $timeout(function() { + $scope.$apply(); + }); } }); }); diff --git a/src/js/routes.js b/src/js/routes.js index ed29cd0a0..ec6471742 100644 --- a/src/js/routes.js +++ b/src/js/routes.js @@ -947,22 +947,21 @@ angular.module('copayApp').config(function(historicLogProvider, $provide, $logPr }); $ionicPlatform.on('resume', function() { - // Nothing tot do + // Nothing to do }); $ionicPlatform.on('menubutton', function() { window.location = '#/preferences'; }); - - setTimeout(function() { - navigator.splashscreen.hide(); - }, 500); } $log.info('Init profile...'); // Try to open local profile profileService.loadAndBindProfile(function(err) { + $ionicHistory.nextViewOptions({ + disableAnimate: true + }); if (err) { if (err.message && err.message.match('NOPROFILE')) { $log.debug('No profile... redirecting'); diff --git a/src/js/services/startupService.js b/src/js/services/startupService.js new file mode 100644 index 000000000..557d51997 --- /dev/null +++ b/src/js/services/startupService.js @@ -0,0 +1,28 @@ +'use strict'; + +angular.module('copayApp.services').service('startupService', function($log, $timeout) { + + var splashscreenVisible = true; + var statusBarVisible = false; + + function _hideSplash(){ + if(typeof navigator.splashscreen !== "undefined" && splashscreenVisible){ + $log.debug('startupService is hiding the splashscreen...'); + $timeout(function(){ + navigator.splashscreen.hide(); + }, 20); + splashscreenVisible = false; + } + } + function _showStatusBar(){ + if(typeof StatusBar !== "undefined" && !statusBarVisible){ + $log.debug('startupService is showing the StatusBar...'); + StatusBar.show(); + statusBarVisible = true; + } + } + this.ready = function() { + _showStatusBar(); + _hideSplash(); + }; +}); diff --git a/src/sass/buttons.scss b/src/sass/buttons.scss index 5c0c05713..80139248f 100644 --- a/src/sass/buttons.scss +++ b/src/sass/buttons.scss @@ -35,7 +35,8 @@ $button-secondary-active-border: transparent; @include button-outline($button-primary-bg); } &.button-primary, - &.button-secondary { + &.button-secondary, + &.button-assertive { &.button-standard { @extend %button-standard; & + .button-standard { diff --git a/src/sass/views/copayers.scss b/src/sass/views/copayers.scss index 27117e859..2f3458a4e 100644 --- a/src/sass/views/copayers.scss +++ b/src/sass/views/copayers.scss @@ -1,7 +1,13 @@ .copayers-secret { - overflow-wrap: break-word; - word-wrap: break-word; text-align: center; - font-size: 14px; + font-size: 12px; margin: 10px; + white-space: -moz-pre-wrap !important; + white-space: -pre-wrap; + white-space: -o-pre-wrap; + white-space: pre-wrap; + word-wrap: break-word; + white-space: -webkit-pre-wrap; + word-break: break-all; + white-space: normal; } diff --git a/util/hooks/android/add-custom-urls-to-android-manifest.js b/util/hooks/android/add-custom-urls-to-android-manifest.js deleted file mode 100644 index 6fd5747df..000000000 --- a/util/hooks/android/add-custom-urls-to-android-manifest.js +++ /dev/null @@ -1,27 +0,0 @@ -'use strict'; - -var AndroidManifest = require('androidmanifest'); - -var FILEPATH = 'platforms/android/AndroidManifest.xml'; -var manifest = new AndroidManifest().readFile(FILEPATH); - -var mainActivity = manifest.activity('MainActivity'); - -var customUrls = ['copay', 'bitcoin', 'bitauth']; - -customUrls.forEach(function(url){ - var selector = 'intent-filter > data[android\\:scheme=' + url + ']'; - if(mainActivity.find(selector).length > 0){ - return; - } - - var intentFilter = manifest.$(''); - intentFilter.append(''); - intentFilter.append(''); - intentFilter.append(''); - intentFilter.append(''); - mainActivity.append(intentFilter); -}); - -manifest.writeFile(FILEPATH); -console.log('custome uri schemes written to AndroidManifest'); diff --git a/util/hooks/android/prohibit-cloud-backups-in-android-manifest.js b/util/hooks/android/prohibit-cloud-backups-in-android-manifest.js deleted file mode 100644 index 1f5f4d53a..000000000 --- a/util/hooks/android/prohibit-cloud-backups-in-android-manifest.js +++ /dev/null @@ -1,18 +0,0 @@ -module.exports = function(ctx) { - var fs = ctx.requireCordovaModule('fs'), - path = ctx.requireCordovaModule('path'), - xml = ctx.requireCordovaModule('cordova-common').xmlHelpers; - - var manifestPath = path.join(ctx.opts.projectRoot, '/platforms/android/AndroidManifest.xml'); - var doc = xml.parseElementtreeSync(manifestPath); - if (doc.getroot().tag !== 'manifest') { - throw new Error(manifestPath + ' has incorrect root node name (expected "manifest")'); - } - - doc.getroot().find('./application').attrib['android:allowBackup'] = "false"; - - //write the manifest file - fs.writeFileSync(manifestPath, doc.write({ - indent: 4 - }), 'utf-8'); -}; diff --git a/www/views/copayers.html b/www/views/copayers.html index 519ba5195..c026af015 100644 --- a/www/views/copayers.html +++ b/www/views/copayers.html @@ -4,26 +4,29 @@ {{wallet.name}} + + +
- +
Share this invitation with your copayers - -
-
- -
-
- -
-
-
- {{secret || ('Loading...'|translate)}} +
+
+ +
+
+
+
+ {{secret || ('Loading...'|translate)}} +
@@ -36,30 +39,24 @@
-
-

- Waiting for copayers +
+
[ {{wallet.m}}-of-{{wallet.n}} ] -

+ Waiting for copayers +
-
+
- Waiting... + {{'Waiting...'|translate}}
-
+

Wallet incomplete and broken

Delete it and create a new one

- -
- -
diff --git a/www/views/includes/copayers.html b/www/views/includes/copayers.html index 2ab3e5f49..53fbeeebe 100644 --- a/www/views/includes/copayers.html +++ b/www/views/includes/copayers.html @@ -1,8 +1,10 @@ -
- - {{'Me'|translate}} +
+ + + {{'Me'|translate}} - - {{copayer.name}} + + + {{copayer.name}}
diff --git a/www/views/preferencesDeleteWallet.html b/www/views/preferencesDeleteWallet.html index 176981e40..de664a46b 100644 --- a/www/views/preferencesDeleteWallet.html +++ b/www/views/preferencesDeleteWallet.html @@ -16,6 +16,10 @@

- +
+ +
diff --git a/www/views/tab-send.html b/www/views/tab-send.html index 886ea93a7..3432416b4 100644 --- a/www/views/tab-send.html +++ b/www/views/tab-send.html @@ -2,8 +2,8 @@ {{'Send' | translate}} - -
+ +