Bitcoin URI is NOT valid!
diff --git a/src/js/controllers/buyCoinbase.js b/src/js/controllers/buyCoinbase.js
index 7b40fc26a..e81c12fa5 100644
--- a/src/js/controllers/buyCoinbase.js
+++ b/src/js/controllers/buyCoinbase.js
@@ -2,8 +2,6 @@
angular.module('copayApp.controllers').controller('buyCoinbaseController',
function($scope, $modal, $log, $ionicModal, $timeout, lodash, profileService, coinbaseService, bwsError, addressService) {
-
- window.ignoreMobilePause = true;
var self = this;
var fc;
diff --git a/src/js/controllers/buyGlidera.js b/src/js/controllers/buyGlidera.js
index ef243a9a3..793c0bb51 100644
--- a/src/js/controllers/buyGlidera.js
+++ b/src/js/controllers/buyGlidera.js
@@ -8,9 +8,6 @@ angular.module('copayApp.controllers').controller('buyGlideraController',
this.error = null;
this.success = null;
this.loading = null;
-
- window.ignoreMobilePause = true;
-
var otherWallets = function(testnet) {
var network = testnet ? 'testnet' : 'livenet';
return lodash.filter(profileService.getWallets(network), function(w) {
diff --git a/src/js/controllers/coinbase.js b/src/js/controllers/coinbase.js
index 8d972a0ee..61553b3e9 100644
--- a/src/js/controllers/coinbase.js
+++ b/src/js/controllers/coinbase.js
@@ -4,7 +4,6 @@ angular.module('copayApp.controllers').controller('coinbaseController',
function($rootScope, $scope, $timeout, $modal, $ionicModal, profileService, configService, storageService, coinbaseService, lodash, platformInfo) {
var isNW = platformInfo.isNW;
- window.ignoreMobilePause = true;
this.openAuthenticateWindow = function() {
var oauthUrl = this.getAuthenticateUrl();
diff --git a/src/js/controllers/copayers.js b/src/js/controllers/copayers.js
index b263a6e29..de9e40172 100644
--- a/src/js/controllers/copayers.js
+++ b/src/js/controllers/copayers.js
@@ -92,9 +92,6 @@ angular.module('copayApp.controllers').controller('copayersController',
self.shareSecret = function(secret) {
if (isCordova) {
- if (isAndroid || isWP) {
- window.ignoreMobilePause = true;
- }
var message = gettextCatalog.getString('Join my Copay wallet. Here is the invitation code: {{secret}} You can download Copay for your phone or desktop at https://copay.io', {
secret: secret
});
diff --git a/src/js/controllers/export.js b/src/js/controllers/export.js
index 289fbf767..d5110de52 100644
--- a/src/js/controllers/export.js
+++ b/src/js/controllers/export.js
@@ -126,9 +126,6 @@ angular.module('copayApp.controllers').controller('exportController',
self.sendWalletBackup = function() {
var fc = profileService.focusedClient;
- if (isAndroid || isWP) {
- window.ignoreMobilePause = true;
- }
window.plugins.toast.showShortCenter(gettextCatalog.getString('Preparing backup...'));
var name = (fc.credentials.walletName || fc.credentials.walletId);
if (fc.alias) {
diff --git a/src/js/controllers/glideraUri.js b/src/js/controllers/glideraUri.js
index a42859e5d..32f13ee6d 100644
--- a/src/js/controllers/glideraUri.js
+++ b/src/js/controllers/glideraUri.js
@@ -3,6 +3,7 @@ angular.module('copayApp.controllers').controller('glideraUriController',
function($scope, $stateParams, $timeout, profileService, configService, glideraService, storageService, go) {
this.submitOauthCode = function(code) {
+console.log('[glideraUri.js.5:code:]'+code); //TODO
var self = this;
var glideraTestnet = configService.getSync().glidera.testnet;
var network = glideraTestnet ? 'testnet' : 'livenet';
@@ -31,6 +32,7 @@ angular.module('copayApp.controllers').controller('glideraUriController',
};
this.checkCode = function() {
+console.log('[glideraUri.js.35:$stateParams:]' + JSON.stringify($stateParams)); //TODO
this.code = $stateParams.code;
this.submitOauthCode(this.code);
};
diff --git a/src/js/controllers/import.js b/src/js/controllers/import.js
index 010520814..d44b487f1 100644
--- a/src/js/controllers/import.js
+++ b/src/js/controllers/import.js
@@ -15,14 +15,6 @@ angular.module('copayApp.controllers').controller('importController',
$scope.account = 1;
self.importErr = false;
- window.ignoreMobilePause = true;
- $scope.$on('$destroy', function() {
- $timeout(function() {
- window.ignoreMobilePause = false;
- }, 100);
- });
-
-
var updateSeedSourceSelect = function() {
self.seedOptions = [];
diff --git a/src/js/controllers/index.js b/src/js/controllers/index.js
index cc78efba0..734105396 100644
--- a/src/js/controllers/index.js
+++ b/src/js/controllers/index.js
@@ -1,6 +1,6 @@
'use strict';
-angular.module('copayApp.controllers').controller('indexController', function($rootScope, $scope, $log, $filter, $timeout, $ionicScrollDelegate, $ionicPopup, latestReleaseService, feeService, bwcService, pushNotificationsService, lodash, go, profileService, configService, rateService, storageService, addressService, gettext, gettextCatalog, amMoment, addonManager, bwsError, txFormatService, uxLanguage, glideraService, coinbaseService, platformInfo, addressbookService) {
+angular.module('copayApp.controllers').controller('indexController', function($rootScope, $scope, $log, $filter, $timeout, $ionicScrollDelegate, $ionicPopup, latestReleaseService, feeService, bwcService, pushNotificationsService, lodash, go, profileService, configService, rateService, storageService, addressService, gettext, gettextCatalog, amMoment, addonManager, bwsError, txFormatService, uxLanguage, glideraService, coinbaseService, platformInfo, addressbookService, openURLService) {
var self = this;
var SOFT_CONFIRMATION_LIMIT = 12;
var errors = bwcService.getErrors();
@@ -289,6 +289,7 @@ angular.module('copayApp.controllers').controller('indexController', function($r
initStatusHash = _walletStatusHash();
$log.debug('Updating status until it changes. initStatusHash:' + initStatusHash)
}
+
var get = function(cb) {
if (opts.walletStatus)
return cb(null, opts.walletStatus);
@@ -351,6 +352,7 @@ angular.module('copayApp.controllers').controller('indexController', function($r
self.setPendingTxps(walletStatus.pendingTxps);
// Status Shortcuts
+ self.lastUpdate = Date.now();
self.walletName = walletStatus.wallet.name;
self.walletSecret = walletStatus.wallet.secret;
self.walletStatus = walletStatus.wallet.status;
@@ -1492,59 +1494,105 @@ angular.module('copayApp.controllers').controller('indexController', function($r
}
});
- self.debouncedUpdate = lodash.throttle(function() {
- self.updateAll({
- quiet: true
- });
- self.debounceUpdateHistory();
- }, 2000, {
- leading: false,
- trailing: true
- });
+ self.debouncedUpdate = function() {
+ var now = Date.now();
+ var oneHr = 1000 * 60 * 60;
- $rootScope.$on('Local/Resume', function(event) {
- $log.debug('### Resume event');
- profileService.isDisclaimerAccepted(function(v) {
- if (!v) {
- $log.debug('Disclaimer not accepted, resume to home');
- go.path('disclaimer');
- }
- });
- self.debouncedUpdate();
- });
-
- $rootScope.$on('Local/BackupDone', function(event, walletId) {
- self.needsBackup = false;
- $log.debug('Backup done');
- storageService.setBackupFlag(walletId || self.walletId, function(err) {
- $log.debug('Backup stored');
- });
- });
-
- $rootScope.$on('Local/DeviceError', function(event, err) {
- self.showErrorPopup(err, function() {
- if (isCordova && navigator && navigator.app) {
- navigator.app.exitApp();
- }
- });
- });
-
- $rootScope.$on('Local/WalletImported', function(event, walletId) {
- self.needsBackup = false;
- storageService.setBackupFlag(walletId, function() {
- $log.debug('Backup done stored');
- addressService.expireAddress(walletId, function(err) {
- $timeout(function() {
- self.txHistory = self.completeHistory = self.txHistorySearchResults = [];
- storageService.removeTxHistory(walletId, function() {
- self.startScan(walletId);
- });
- }, 500);
+ if (!self.lastUpdate || (now - self.lastUpdate) > oneHr) {
+ self.updateAll({
+ quiet: true
+ triggerTxUpdate: true,
});
- });
+ }
});
- $rootScope.$on('NewIncomingTx', function() {
+$rootScope.$on('Local/Resume', function(event) {
+ $log.debug('### Resume event');
+ profileService.isDisclaimerAccepted(function(v) {
+ if (!v) {
+ $log.debug('Disclaimer not accepted, resume to home');
+ go.path('disclaimer');
+ }
+ });
+ self.debouncedUpdate();
+});
+
+$rootScope.$on('Local/BackupDone', function(event, walletId) {
+ self.needsBackup = false;
+ $log.debug('Backup done');
+ storageService.setBackupFlag(walletId || self.walletId, function(err) {
+ $log.debug('Backup stored');
+ });
+});
+
+$rootScope.$on('Local/DeviceError', function(event, err) {
+ self.showErrorPopup(err, function() {
+ if (isCordova && navigator && navigator.app) {
+ navigator.app.exitApp();
+ }
+ });
+});
+
+$rootScope.$on('Local/WalletImported', function(event, walletId) {
+ self.needsBackup = false;
+ storageService.setBackupFlag(walletId, function() {
+ $log.debug('Backup done stored');
+ addressService.expireAddress(walletId, function(err) {
+ $timeout(function() {
+ self.txHistory = self.completeHistory = self.txHistorySearchResults = [];
+ storageService.removeTxHistory(walletId, function() {
+ self.startScan(walletId);
+ });
+ }, 500);
+ });
+ });
+});
+
+$rootScope.$on('NewIncomingTx', function() {
+ self.newTx = true;
+ self.updateAll({
+ walletStatus: null,
+ untilItChanges: true,
+ triggerTxUpdate: true,
+ });
+});
+
+
+$rootScope.$on('NewBlock', function() {
+ if (self.glideraEnabled) {
+ $timeout(function() {
+ self.updateGlidera();
+ });
+ }
+ if (self.coinbaseEnabled) {
+ $timeout(function() {
+ self.updateCoinbase();
+ });
+ }
+ if (self.pendingAmount) {
+ self.updateAll({
+ walletStatus: null,
+ untilItChanges: null,
+ triggerTxUpdate: true,
+ });
+ } else if (self.hasUnsafeConfirmed) {
+ $log.debug('Wallet has transactions with few confirmations. Updating.')
+ if (self.network == 'testnet') {
+ self.throttledUpdateHistory();
+ } else {
+ self.debounceUpdateHistory();
+ }
+ }
+});
+
+$rootScope.$on('BalanceUpdated', function(e, n) {
+ self.setBalance(n.data);
+});
+
+
+//untilItChange TRUE
+lodash.each(['NewOutgoingTx', 'NewOutgoingTxByThirdParty'], function(eventName) {
+ $rootScope.$on(eventName, function(event) {
self.newTx = true;
self.updateAll({
walletStatus: null,
@@ -1552,244 +1600,200 @@ angular.module('copayApp.controllers').controller('indexController', function($r
triggerTxUpdate: true,
});
});
+});
-
- $rootScope.$on('NewBlock', function() {
- if (self.glideraEnabled) {
- $timeout(function() {
- self.updateGlidera();
- });
- }
- if (self.coinbaseEnabled) {
- $timeout(function() {
- self.updateCoinbase();
- });
- }
- if (self.pendingAmount) {
- self.updateAll({
- walletStatus: null,
- untilItChanges: null,
- triggerTxUpdate: true,
- });
- } else if (self.hasUnsafeConfirmed) {
- $log.debug('Wallet has transactions with few confirmations. Updating.')
- if (self.network == 'testnet') {
- self.throttledUpdateHistory();
- } else {
- self.debounceUpdateHistory();
- }
- }
- });
-
- $rootScope.$on('BalanceUpdated', function(e, n) {
- self.setBalance(n.data);
- });
-
-
- //untilItChange TRUE
- lodash.each(['NewOutgoingTx', 'NewOutgoingTxByThirdParty'], function(eventName) {
- $rootScope.$on(eventName, function(event) {
- self.newTx = true;
- self.updateAll({
- walletStatus: null,
- untilItChanges: true,
- triggerTxUpdate: true,
- });
- });
- });
-
- //untilItChange FALSE
- lodash.each(['NewTxProposal', 'TxProposalFinallyRejected', 'TxProposalRemoved', 'NewOutgoingTxByThirdParty',
- 'Local/GlideraTx'
- ], function(eventName) {
- $rootScope.$on(eventName, function(event) {
- self.updateAll({
- walletStatus: null,
- untilItChanges: null,
- triggerTxUpdate: true,
- });
- });
- });
-
-
- //untilItChange Maybe
- $rootScope.$on('Local/TxProposalAction', function(event, untilItChanges) {
- self.newTx = untilItChanges;
+//untilItChange FALSE
+lodash.each(['NewTxProposal', 'TxProposalFinallyRejected', 'TxProposalRemoved', 'NewOutgoingTxByThirdParty',
+ 'Local/GlideraTx'
+], function(eventName) {
+ $rootScope.$on(eventName, function(event) {
self.updateAll({
walletStatus: null,
- untilItChanges: untilItChanges,
+ untilItChanges: null,
triggerTxUpdate: true,
});
});
+});
- $rootScope.$on('ScanFinished', function() {
- $log.debug('Scan Finished. Updating history');
- storageService.removeTxHistory(self.walletId, function() {
- self.updateAll({
- walletStatus: null,
- triggerTxUpdate: true,
- });
+
+//untilItChange Maybe
+$rootScope.$on('Local/TxProposalAction', function(event, untilItChanges) {
+ self.newTx = untilItChanges;
+ self.updateAll({
+ walletStatus: null,
+ untilItChanges: untilItChanges,
+ triggerTxUpdate: true,
+ });
+});
+
+$rootScope.$on('ScanFinished', function() {
+ $log.debug('Scan Finished. Updating history');
+ storageService.removeTxHistory(self.walletId, function() {
+ self.updateAll({
+ walletStatus: null,
+ triggerTxUpdate: true,
});
});
+});
- lodash.each(['TxProposalRejectedBy', 'TxProposalAcceptedBy'], function(eventName) {
- $rootScope.$on(eventName, function() {
- var f = function() {
- if (self.updatingStatus) {
- return $timeout(f, 200);
- };
- self.updatePendingTxps();
+lodash.each(['TxProposalRejectedBy', 'TxProposalAcceptedBy'], function(eventName) {
+ $rootScope.$on(eventName, function() {
+ var f = function() {
+ if (self.updatingStatus) {
+ return $timeout(f, 200);
};
- f();
- });
+ self.updatePendingTxps();
+ };
+ f();
});
+});
- $rootScope.$on('Local/NoWallets', function(event) {
- $timeout(function() {
- self.hasProfile = true;
- self.noFocusedWallet = true;
- self.isComplete = null;
- self.walletName = null;
- uxLanguage.update();
-
- profileService.isDisclaimerAccepted(function(v) {
- if (v) {
- go.path('import');
- }
- });
- });
- });
-
- $rootScope.$on('Local/NewFocusedWallet', function() {
+$rootScope.$on('Local/NoWallets', function(event) {
+ $timeout(function() {
+ self.hasProfile = true;
+ self.noFocusedWallet = true;
+ self.isComplete = null;
+ self.walletName = null;
uxLanguage.update();
- self.setFocusedWallet();
- self.updateHistory();
- storageService.getCleanAndScanAddresses(function(err, walletId) {
- if (walletId && profileService.walletClients[walletId]) {
- $log.debug('Clear last address cache and Scan ', walletId);
- addressService.expireAddress(walletId, function(err) {
- self.startScan(walletId);
- });
- storageService.removeCleanAndScanAddresses(function() {
- $rootScope.$emit('Local/NewFocusedWalletReady');
- });
- } else {
- $rootScope.$emit('Local/NewFocusedWalletReady');
+ profileService.isDisclaimerAccepted(function(v) {
+ if (v) {
+ go.path('import');
}
});
});
+});
- $rootScope.$on('Local/SetTab', function(event, tab, reset) {
- self.setTab(tab, reset);
- });
+$rootScope.$on('Local/NewFocusedWallet', function() {
+ uxLanguage.update();
+ self.setFocusedWallet();
+ self.updateHistory();
+ storageService.getCleanAndScanAddresses(function(err, walletId) {
- $rootScope.$on('Local/NeedsConfirmation', function(event, txp, cb) {
-
- function openConfirmationPopup(txp, cb) {
-
- $scope.tx = txFormatService.processTx(txp);
-
- self.confirmationPopup = $ionicPopup.show({
- templateUrl: 'views/includes/confirm-tx.html',
- scope: $scope,
+ if (walletId && profileService.walletClients[walletId]) {
+ $log.debug('Clear last address cache and Scan ', walletId);
+ addressService.expireAddress(walletId, function(err) {
+ self.startScan(walletId);
});
-
- $scope.processFee = function(amount, fee) {
- var walletSettings = configService.getSync().wallet.settings;
- var feeAlternativeIsoCode = walletSettings.alternativeIsoCode;
-
- $scope.feeLevel = feeService.feeOpts[feeService.getCurrentFeeLevel()];
- $scope.feeAlternativeStr = parseFloat((rateService.toFiat(fee, feeAlternativeIsoCode)).toFixed(2), 10) + ' ' + feeAlternativeIsoCode;
- $scope.feeRateStr = (fee / (amount + fee) * 100).toFixed(2) + '%';
- };
-
- $scope.cancel = function() {
- return cb();
- };
-
- $scope.accept = function() {
- return cb(true);
- };
+ storageService.removeCleanAndScanAddresses(function() {
+ $rootScope.$emit('Local/NewFocusedWalletReady');
+ });
+ } else {
+ $rootScope.$emit('Local/NewFocusedWalletReady');
}
-
- openConfirmationPopup(txp, function(accept) {
- self.confirmationPopup.close();
- return cb(accept);
- });
});
+});
- $rootScope.$on('Local/NeedsPassword', function(event, isSetup, cb) {
+$rootScope.$on('Local/SetTab', function(event, tab, reset) {
+ self.setTab(tab, reset);
+});
- function openPasswordPopup(isSetup, cb) {
- $scope.data = {};
- $scope.data.password = null;
- $scope.isSetup = isSetup;
- $scope.isVerification = false;
- $scope.loading = false;
- var pass = null;
+$rootScope.$on('Local/NeedsConfirmation', function(event, txp, cb) {
- self.passwordPopup = $ionicPopup.show({
- templateUrl: 'views/includes/password.html',
- scope: $scope,
- });
+ function openConfirmationPopup(txp, cb) {
- $scope.cancel = function() {
- return cb('No spending password given');
- };
+ $scope.tx = txFormatService.processTx(txp);
- $scope.set = function() {
- $scope.loading = true;
- $scope.error = null;
+ self.confirmationPopup = $ionicPopup.show({
+ templateUrl: 'views/includes/confirm-tx.html',
+ scope: $scope,
+ });
- $timeout(function() {
- if (isSetup && !$scope.isVerification) {
- $scope.loading = false;
- $scope.isVerification = true;
- pass = $scope.data.password;
- $scope.data.password = null;
- return;
- }
- if (isSetup && pass != $scope.data.password) {
- $scope.loading = false;
- $scope.error = gettext('Spending Passwords do not match');
- $scope.isVerification = false;
- $scope.data.password = null;
- pass = null;
- return;
- }
- return cb(null, $scope.data.password);
- }, 100);
- };
+ $scope.processFee = function(amount, fee) {
+ var walletSettings = configService.getSync().wallet.settings;
+ var feeAlternativeIsoCode = walletSettings.alternativeIsoCode;
+
+ $scope.feeLevel = feeService.feeOpts[feeService.getCurrentFeeLevel()];
+ $scope.feeAlternativeStr = parseFloat((rateService.toFiat(fee, feeAlternativeIsoCode)).toFixed(2), 10) + ' ' + feeAlternativeIsoCode;
+ $scope.feeRateStr = (fee / (amount + fee) * 100).toFixed(2) + '%';
};
- openPasswordPopup(isSetup, function(err, pass) {
- self.passwordPopup.close();
- return cb(err, pass);
- });
+ $scope.cancel = function() {
+ return cb();
+ };
+ $scope.accept = function() {
+ return cb(true);
+ };
+ }
+
+ openConfirmationPopup(txp, function(accept) {
+ self.confirmationPopup.close();
+ return cb(accept);
});
-
- $rootScope.$on('Local/EmailUpdated', function(event, email) {
- self.preferences.email = email;
- });
-
- lodash.each(['NewCopayer', 'CopayerUpdated'], function(eventName) {
- $rootScope.$on(eventName, function() {
- // Re try to open wallet (will triggers)
- self.setFocusedWallet();
- });
- });
-
- $rootScope.$on('Local/NewEncryptionSetting', function() {
- var fc = profileService.focusedClient;
- self.isPrivKeyEncrypted = fc.isPrivKeyEncrypted();
- $timeout(function() {
- $rootScope.$apply();
- });
- });
-
-
- /* Start setup */
- lodash.assign(self, vanillaScope);
+});
+
+$rootScope.$on('Local/NeedsPassword', function(event, isSetup, cb) {
+
+ function openPasswordPopup(isSetup, cb) {
+ $scope.data = {};
+ $scope.data.password = null;
+ $scope.isSetup = isSetup;
+ $scope.isVerification = false;
+ $scope.loading = false;
+ var pass = null;
+
+ self.passwordPopup = $ionicPopup.show({
+ templateUrl: 'views/includes/password.html',
+ scope: $scope,
+ });
+
+ $scope.cancel = function() {
+ return cb('No spending password given');
+ };
+
+ $scope.set = function() {
+ $scope.loading = true;
+ $scope.error = null;
+
+ $timeout(function() {
+ if (isSetup && !$scope.isVerification) {
+ $scope.loading = false;
+ $scope.isVerification = true;
+ pass = $scope.data.password;
+ $scope.data.password = null;
+ return;
+ }
+ if (isSetup && pass != $scope.data.password) {
+ $scope.loading = false;
+ $scope.error = gettext('Spending Passwords do not match');
+ $scope.isVerification = false;
+ $scope.data.password = null;
+ pass = null;
+ return;
+ }
+ return cb(null, $scope.data.password);
+ }, 100);
+ };
+ };
+
+ openPasswordPopup(isSetup, function(err, pass) {
+ self.passwordPopup.close();
+ return cb(err, pass);
+ });
+
+});
+
+$rootScope.$on('Local/EmailUpdated', function(event, email) {
+ self.preferences.email = email;
+});
+
+lodash.each(['NewCopayer', 'CopayerUpdated'], function(eventName) {
+ $rootScope.$on(eventName, function() {
+ // Re try to open wallet (will triggers)
+ self.setFocusedWallet();
+ });
+});
+
+$rootScope.$on('Local/NewEncryptionSetting', function() {
+ var fc = profileService.focusedClient;
+ self.isPrivKeyEncrypted = fc.isPrivKeyEncrypted();
+ $timeout(function() {
+ $rootScope.$apply();
+ });
+});
+
+
+/* Start setup */
+lodash.assign(self, vanillaScope); openURLService.init();
});
diff --git a/src/js/controllers/modals/customAmount.js b/src/js/controllers/modals/customAmount.js
index 091394bcc..48db4d9cf 100644
--- a/src/js/controllers/modals/customAmount.js
+++ b/src/js/controllers/modals/customAmount.js
@@ -69,9 +69,6 @@ angular.module('copayApp.controllers').controller('customAmountController', func
$scope.shareAddress = function(uri) {
if (platformInfo.isCordova) {
- if (platformInfo.isAndroid || platformInfo.isWP) {
- window.ignoreMobilePause = true;
- }
window.plugins.socialsharing.share(uri, null, null, null);
}
};
diff --git a/src/js/controllers/paymentUri.js b/src/js/controllers/paymentUri.js
index 241d05a46..deaf152a0 100644
--- a/src/js/controllers/paymentUri.js
+++ b/src/js/controllers/paymentUri.js
@@ -1,20 +1,14 @@
'use strict';
angular.module('copayApp.controllers').controller('paymentUriController',
function($rootScope, $stateParams, $location, $timeout, profileService, configService, lodash, bitcore, go) {
-
- window.ignoreMobilePause = true;
function strip(number) {
return (parseFloat(number.toPrecision(12)));
};
// Build bitcoinURI with querystring
- this.checkBitcoinUri = function() {
+ this.init = function() {
var query = [];
- angular.forEach($location.search(), function(value, key) {
- query.push(key + "=" + value);
- });
- var queryString = query ? query.join("&") : null;
- this.bitcoinURI = $stateParams.data + (queryString ? '?' + queryString : '');
+ this.bitcoinURI = $stateParams.url;
var URI = bitcore.URI;
var isUriValid = URI.isValid(this.bitcoinURI);
diff --git a/src/js/controllers/preferencesInformation.js b/src/js/controllers/preferencesInformation.js
index a3f148c61..8f31255b1 100644
--- a/src/js/controllers/preferencesInformation.js
+++ b/src/js/controllers/preferencesInformation.js
@@ -46,10 +46,6 @@ angular.module('copayApp.controllers').controller('preferencesInformation',
this.sendAddrs = function() {
var self = this;
- if (platformInfo.isAndroid || platformInfo.isWP) {
- window.ignoreMobilePause = true;
- }
-
self.loading = true;
function formatDate(ts) {
diff --git a/src/js/controllers/sellCoinbase.js b/src/js/controllers/sellCoinbase.js
index c94a3304b..679caf9f0 100644
--- a/src/js/controllers/sellCoinbase.js
+++ b/src/js/controllers/sellCoinbase.js
@@ -3,7 +3,6 @@
angular.module('copayApp.controllers').controller('sellCoinbaseController',
function($rootScope, $scope, $modal, $log, $timeout, $ionicModal, lodash, profileService, coinbaseService, bwsError, configService, walletService, fingerprintService) {
- window.ignoreMobilePause = true;
var self = this;
var fc;
diff --git a/src/js/controllers/sellGlidera.js b/src/js/controllers/sellGlidera.js
index 53321bb80..6804e083f 100644
--- a/src/js/controllers/sellGlidera.js
+++ b/src/js/controllers/sellGlidera.js
@@ -12,8 +12,6 @@ angular.module('copayApp.controllers').controller('sellGlideraController',
this.loading = null;
var fc;
- window.ignoreMobilePause = true;
-
var otherWallets = function(testnet) {
var network = testnet ? 'testnet' : 'livenet';
return lodash.filter(profileService.getWallets(network), function(w) {
diff --git a/src/js/controllers/walletHome.js b/src/js/controllers/walletHome.js
index c80f9a1b9..d3bb4f61d 100644
--- a/src/js/controllers/walletHome.js
+++ b/src/js/controllers/walletHome.js
@@ -8,7 +8,6 @@ angular.module('copayApp.controllers').controller('walletHomeController', functi
var isChromeApp = platformInfo.isChromeApp;
var self = this;
- window.ignoreMobilePause = false;
$rootScope.shouldHideMenuBar = false;
$rootScope.wpInputFocused = false;
var config = configService.getSync();
@@ -217,9 +216,6 @@ angular.module('copayApp.controllers').controller('walletHomeController', functi
this.shareAddress = function(addr) {
if (isCordova) {
- if (isAndroid || isWP) {
- window.ignoreMobilePause = true;
- }
window.plugins.socialsharing.share('bitcoin:' + addr, null, null, null);
}
};
diff --git a/src/js/directives/qrScanner.js b/src/js/directives/qrScanner.js
index cb9bf0b88..a43ca9b1c 100644
--- a/src/js/directives/qrScanner.js
+++ b/src/js/directives/qrScanner.js
@@ -12,7 +12,6 @@ angular.module('copayApp.directives')
var onSuccess = function(result) {
$timeout(function() {
window.plugins.spinnerDialog.hide();
- window.ignoreMobilePause = false;
}, 100);
if (isWP && result.cancelled) return;
@@ -26,13 +25,11 @@ angular.module('copayApp.directives')
var onError = function(error) {
$timeout(function() {
- window.ignoreMobilePause = false;
window.plugins.spinnerDialog.hide();
}, 100);
};
$scope.cordovaOpenScanner = function() {
- window.ignoreMobilePause = true;
window.plugins.spinnerDialog.show(null, gettextCatalog.getString('Preparing camera...'), true);
$timeout(function() {
if (isIOS) {
diff --git a/src/js/init.js b/src/js/init.js
index 44392c992..e8141f5c9 100644
--- a/src/js/init.js
+++ b/src/js/init.js
@@ -7,42 +7,32 @@ angular.element(document).ready(function() {
angular.bootstrap(document, ['copayApp']);
};
- var handleBitcoinURI = function(url) {
- if (!url) return;
- console.log('Custom URL:' + url); //TODO
- var glidera = 'copay://glidera';
- var coinbase = 'copay://coinbase';
-
- if (url.indexOf('bitcoin:') == 0) {
- url = '#/uri-payment/' + url;
- } else if (url.indexOf(glidera) != -1) {
- url = '#/uri-glidera' + url.replace(glidera, '');
- } else if (url.indexOf(coinbase) != -1) {
- url = '#/uri-coinbase' + url.replace(coinbase, '');
+ function handleOpenURL(url) {
+ if ('cordova' in window) {
+ console.log('DEEP LINK:' + url);
+ cordova.fireDocumentEvent('handleopenurl', {
+ url: url
+ });
} else {
- console.log('Unknown URL!')
- };
-
- setTimeout(function() {
- window.location = url;
- }, 1000);
+ console.log("ERROR: Cannont handle open URL in non-cordova apps")
+ }
};
-
/* Cordova specific Init */
- if (window.cordova !== undefined) {
+ if ('cordova' in window) {
+
+ window.handleOpenURL = handleOpenURL;
+
document.addEventListener('deviceready', function() {
- window.handleOpenURL = handleBitcoinURI;
+
+ // Create a sticky event for handling the app being opened via a custom URL
+ cordova.addStickyDocumentEventHandler('handleopenurl');
startAngular();
}, false);
} else {
- try {
- window.handleOpenURL = handleBitcoinURI;
- } catch (e) {}
-
startAngular();
}
diff --git a/src/js/routes.js b/src/js/routes.js
index 998ac7848..d9400b67e 100644
--- a/src/js/routes.js
+++ b/src/js/routes.js
@@ -112,8 +112,8 @@ angular.module('copayApp').config(function(historicLogProvider, $provide, $logPr
}
}
})
- .state('payment', {
- url: '/uri-payment/:data',
+ .state('uripayment', {
+ url: '/uri-payment/:url',
templateUrl: 'views/paymentUri.html',
views: {
'main': {
@@ -215,7 +215,7 @@ angular.module('copayApp').config(function(historicLogProvider, $provide, $logPr
}
})
.state('uriglidera', {
- url: '/uri-glidera?code',
+ url: '/uri-glidera/:code',
needProfile: true,
views: {
'main': {
@@ -284,7 +284,7 @@ angular.module('copayApp').config(function(historicLogProvider, $provide, $logPr
}
})
.state('uricoinbase', {
- url: '/uri-coinbase?code',
+ url: '/uri-coinbase/:code',
needProfile: true,
views: {
'main': {
@@ -520,7 +520,7 @@ angular.module('copayApp').config(function(historicLogProvider, $provide, $logPr
}
});
})
- .run(function($rootScope, $state, $log, $timeout, $ionicPlatform, uriHandler, platformInfo, profileService, uxLanguage, animationService, go, gettextCatalog) {
+ .run(function($rootScope, $state, $location, $log, $timeout, $ionicPlatform, uriHandler, platformInfo, profileService, uxLanguage, animationService, go, gettextCatalog) {
$ionicPlatform.ready(function() {
if (platformInfo.isCordova) {
@@ -539,14 +539,8 @@ angular.module('copayApp').config(function(historicLogProvider, $provide, $logPr
});
$ionicPlatform.on('resume', function() {
- if (!window.ignoreMobilePause) {
- $rootScope.$emit('Local/Resume');
- }
- setTimeout(function() {
- var loc = window.location;
- var ignoreMobilePause = loc.toString().match(/(buy|sell|buycoinbase|sellcoinbase)/) ? true : false;
- window.ignoreMobilePause = ignoreMobilePause;
- }, 100);
+ // Nothing to do
+ $rootScope.$emit('Local/Resume');
});
$ionicPlatform.on('backbutton', function(event) {
@@ -575,10 +569,6 @@ angular.module('copayApp').config(function(historicLogProvider, $provide, $logPr
}, 100);
go.walletHome();
-
- setTimeout(function() {
- window.ignoreMobilePause = false;
- }, 100);
});
$ionicPlatform.on('menubutton', function() {
@@ -614,6 +604,8 @@ angular.module('copayApp').config(function(historicLogProvider, $provide, $logPr
$rootScope.$on('$stateChangeStart', function(event, toState, toParams, fromState, fromParams) {
$log.debug('Route change from:', fromState.name || '-', ' to:', toState.name);
+ $log.debug(' toParams:' + JSON.stringify(toParams || {}));
+ $log.debug(' fromParams:' + JSON.stringify(fromParams || {}));
if (!profileService.profile && toState.needProfile) {
@@ -640,17 +632,22 @@ angular.module('copayApp').config(function(historicLogProvider, $provide, $logPr
} else {
if (profileService.focusedClient && !profileService.focusedClient.isComplete() && toState.walletShouldBeComplete) {
- $state.transitionTo('copayers');
event.preventDefault();
+ $state.transitionTo('copayers');
}
}
-
- if (!animationService.transitionAnimated(fromState, toState)) {
- event.preventDefault();
- // Time for the backpane to render
- setTimeout(function() {
- $state.transitionTo(toState);
- }, 50);
- }
+// event.preventDefault();
+// $state.transitionTo(toState);
+// if (!animationService.transitionAnimated(fromState, toState)) {
+//
+// console.log('[routes.js.649] ANIMATION!'); //TODO
+// event.preventDefault();
+// // Time for the backpane to render
+// return setTimeout(function() {
+//
+// console.log('[routes.js.654] TRANSITION'); //TODO
+// $state.transitionTo(toState);
+// }, 50);
+// }
});
});
diff --git a/src/js/services/animationService.js b/src/js/services/animationService.js
index 7197194cb..6a0c8a5fb 100644
--- a/src/js/services/animationService.js
+++ b/src/js/services/animationService.js
@@ -60,6 +60,7 @@ angular.module('copayApp.services').factory('animationService', function(platfor
};
function cleanUpLater(e, e2) {
+console.log('[animationService.js.62:cleanUpLater:]'); //TODO
var cleanedUp = false,
timeoutID;
var cleanUp = function() {
diff --git a/src/js/services/configService.js b/src/js/services/configService.js
index 9af77287d..9a18c9894 100644
--- a/src/js/services/configService.js
+++ b/src/js/services/configService.js
@@ -111,11 +111,11 @@ angular.module('copayApp.services').factory('configService', function(storageSer
// Glidera
// Disabled for testnet
- configCache.glidera.testnet = false;
+ configCache.glidera.testnet = true;
// Coinbase
// Disabled for testnet
- configCache.coinbase.testnet = false;
+ configCache.coinbase.testnet = true;
$log.debug('Preferences read:', configCache)
return cb(err, configCache);
diff --git a/src/js/services/go.js b/src/js/services/go.js
index f30a2b6b7..52f00de33 100644
--- a/src/js/services/go.js
+++ b/src/js/services/go.js
@@ -48,15 +48,15 @@ angular.module('copayApp.services').factory('go', function($window, $ionicSideMe
};
root.addWallet = function() {
- $state.go('add');
+ $state.transitionTo('add');
};
root.preferences = function() {
- $state.go('preferences');
+ $state.transitionTo('preferences');
};
root.preferencesGlobal = function() {
- $state.go('preferencesGlobal');
+ $state.transitionTo('preferencesGlobal');
};
root.reload = function() {
diff --git a/src/js/services/openURL.js b/src/js/services/openURL.js
new file mode 100644
index 000000000..a7f219a40
--- /dev/null
+++ b/src/js/services/openURL.js
@@ -0,0 +1,69 @@
+'use strict';
+
+angular.module('copayApp.services').factory('openURLService', function($ionicHistory, $document, $log, $state, go) {
+ var root = {};
+
+ root.registeredUriHandlers = [{
+ name: 'Bitcoin BIP21 URL',
+ startsWith: 'bitcoin:',
+ transitionTo: 'uripayment',
+ }, {
+ name: 'Glidera Authentication Callback',
+ startsWith: 'copay://glidera',
+ transitionTo: 'uriglidera',
+ }, {
+ name: 'Coinbase Authentication Callback',
+ startsWith: 'copay://coinbase',
+ transitionTo: 'uricoinbase',
+ }];
+
+
+ var handleOpenURL = function(args) {
+ $log.info('Handling Open URL: ' + JSON.stringify(args));
+
+ // Stop it from caching the first view as one to return when the app opens
+ $ionicHistory.nextViewOptions({
+ historyRoot: true,
+ disableBack: true,
+ disableAnimation: true
+ });
+
+ if (url) {
+ window.cordova.removeDocumentEventHandler('handleopenurl');
+ window.cordova.addStickyDocumentEventHandler('handleopenurl');
+ document.removeEventListener('handleopenurl', root.handleOpenUrl);
+ }
+
+
+ var url = args.url;
+
+ lodash.each(root.registeredUriHandlers, function(x) {
+ if (url.indexOf(x.startWith) == 0) {
+ $log.debug('openURL GOT ' + x.name + ' URL');
+ return $state.transitionTo(x.transitionTo, {
+ url: url
+ });
+ }
+ });
+ $log.warn('Unknown URL! : ' + url);
+ };
+
+ var handleResume = function() {
+ $log.debug('Handle Resume @ openURL...');
+ document.addEventListener('handleopenurl', handleOpenUrl, false);
+ };
+
+ root.init = function() {
+ console.log('[openURL.js.29]'); //TODO
+ document.addEventListener('handleopenurl', handleOpenURL, false);
+ document.addEventListener('resume', handleResume, false);
+ };
+
+
+ root.registerHandler = function(x) {
+ $log.debug('Registering URL Handler: ' + x.name);
+ root.registeredUriHandlers.push(x);
+ };
+
+ return root;
+});
diff --git a/src/js/services/profileService.js b/src/js/services/profileService.js
index bd537977b..1ed664bd0 100644
--- a/src/js/services/profileService.js
+++ b/src/js/services/profileService.js
@@ -182,7 +182,6 @@ angular.module('copayApp.services')
push.on('notification', function(data) {
if (!data.additionalData.foreground) {
- window.ignoreMobilePause = true;
$log.debug('Push notification event: ', data.message);
$timeout(function() {