Merge pull request #70 from Bitcoin-com/optionalbtc

Adds a setting to display Bitcoin Core wallets when enabled
This commit is contained in:
Sam Cheng Hung 2018-03-28 14:01:01 +09:00 committed by GitHub
commit 7430f6ca99
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
12 changed files with 106 additions and 8 deletions

View file

@ -13,6 +13,9 @@ angular.module('copayApp.controllers').controller('advancedSettingsController',
$scope.hideNextSteps = {
value: config.hideNextSteps.enabled
};
$scope.displayBitcoinCoreEnabled = {
value: config.displayBitcoinCore.enabled
};
};
@ -49,6 +52,17 @@ angular.module('copayApp.controllers').controller('advancedSettingsController',
});
};
$scope.displayBitcoinCoreChange = function() {
var opts = {
displayBitcoinCore: {
enabled: $scope.displayBitcoinCoreEnabled.value
}
};
configService.set(opts, function(err) {
if (err) $log.debug(err);
});
};
$scope.$on("$ionicView.beforeEnter", function(event, data) {
$scope.isWindowsPhoneApp = platformInfo.isCordova && platformInfo.isWP;
updateConfig();

View file

@ -123,6 +123,8 @@ angular.module('copayApp.controllers').controller('tabHomeController',
$scope.nextStepsItems = nextStepsService.get();
}
$scope.displayBitcoinCore = config.displayBitcoinCore.enabled;
$scope.showServices = true;
pushNotificationsService.init();
firebaseEventsService.init();
@ -317,4 +319,10 @@ angular.module('copayApp.controllers').controller('tabHomeController',
}, 300);
updateAllWallets();
};
$rootScope.$on('Local/SettingsUpdated', function(e, walletId) {
configService.whenAvailable(function(config) {
$scope.displayBitcoinCore = config.displayBitcoinCore.enabled;
});
});
});

View file

@ -53,7 +53,7 @@ angular.module('copayApp.controllers').controller('tabSendController', function(
};
var updateWalletsList = function() {
var config = configService.getSync();
var networkResult = lodash.countBy($scope.wallets, 'network');
$scope.showTransferCard = $scope.hasWallets && (networkResult.livenet > 1 || networkResult.testnet > 1);
@ -79,6 +79,7 @@ angular.module('copayApp.controllers').controller('tabSendController', function(
coin: v.coin,
network: v.network,
balanceString: v.cachedBalance,
displayWallet: v.coin == 'btc' ? config.displayBitcoinCore.enabled : true,
getAddress: function(cb) {
walletService.getAddress(v, false, cb);
},

View file

@ -1,7 +1,7 @@
'use strict';
angular.module('copayApp.directives')
.directive('walletSelector', function($timeout) {
.directive('walletSelector', function($rootScope, $timeout, configService) {
return {
restrict: 'E',
templateUrl: 'views/includes/walletSelector.html',
@ -11,9 +11,11 @@ angular.module('copayApp.directives')
show: '=walletSelectorShow',
wallets: '=walletSelectorWallets',
selectedWallet: '=walletSelectorSelectedWallet',
onSelect: '=walletSelectorOnSelect'
onSelect: '=walletSelectorOnSelect',
alwaysDisplayBitcoinCore: '=walletSelectorAlwaysDisplayBitcoinCore'
},
link: function(scope, element, attrs) {
scope.displayWallet = true;
scope.hide = function() {
scope.show = false;
};
@ -26,6 +28,19 @@ angular.module('copayApp.directives')
scope.$watch('wallets', function(newValue, oldValue) {
scope.wallets = newValue;
});
scope.initDisplayBitcoinCoreConfig = function() {
configService.whenAvailable(function(config) {
scope.displayBitcoinCore = config.displayBitcoinCore.enabled;
scope.initWalletDisplay();
});
};
scope.initWalletDisplay = function() {
scope.displayWallet = scope.alwaysDisplayBitcoinCore ? true : scope.displayBitcoinCore;
};
scope.initDisplayBitcoinCoreConfig();
$rootScope.$on('Local/SettingsUpdated', function(e, walletId) {
scope.initDisplayBitcoinCoreConfig();
});
}
};
});

View file

@ -1310,6 +1310,9 @@ angular.module('copayApp').config(function(historicLogProvider, $provide, $logPr
applicationService.appLockModal('check');
});
};
profileService.initBitcoinCoreDisplay();
// After everything have been loaded
$timeout(function() {
emailService.init(); // Update email subscription if necessary

View file

@ -84,6 +84,10 @@ angular.module('copayApp.services').factory('configService', function(storageSer
enabled: true,
},
displayBitcoinCore: {
enabled: false,
},
hideNextSteps: {
enabled: isWindowsPhoneApp ? true : false,
},
@ -245,6 +249,18 @@ angular.module('copayApp.services').factory('configService', function(storageSer
return lodash.clone(defaultConfig);
};
root.checkIfConfigIsSet = function(key) {
return new Promise(function(resolve, reject) {
storageService.getConfig(function(err, localConfig) {
if (localConfig) {
configCache = JSON.parse(localConfig);
resolve(configCache.hasOwnProperty(key));
} else {
reject(false);
}
});
});
}
return root;
});

View file

@ -1037,5 +1037,29 @@ angular.module('copayApp.services')
return cb(null, txps, n);
};
root.initBitcoinCoreDisplay = function() {
configService.checkIfConfigIsSet('displayBitcoinCore').then(function(result) {
if (!result) {
var walletsBtc = root.getWallets({coin: 'btc'});
var totalBtc = 0;
walletsBtc.forEach( (value, key, index) => {
totalBtc += parseFloat(value.cachedBalance);
});
var enableDisplayBitcoinCore = totalBtc > 0 ? true : false;
var opts = {
displayBitcoinCore: {
enabled: enableDisplayBitcoinCore
}
};
configService.set(opts, function(err) {
if (err) $log.debug(err);
});
}
});
};
return root;
});

View file

@ -29,6 +29,15 @@
<ion-toggle ng-model="hideNextSteps.value" ng-if="!isWindowsPhoneApp" toggle-class="toggle-balanced" ng-change="nextStepsChange()">
<span class="toggle-label" translate>Hide Next Steps Card</span>
</ion-toggle>
<div class="item item-divider"></div>
<ion-toggle class="has-comment" ng-model="displayBitcoinCoreEnabled.value" toggle-class="toggle-balanced" ng-change="displayBitcoinCoreChange()">
<span class="toggle-label" translate>Bitcoin Core Wallet</span>
</ion-toggle>
<div class="comment" translate>
If enabled, Bitcoin Core (BTC) wallet(s) will be displayed on the Home screen. If disabled, BTC wallets will be not be deleted, only hidden.
</div>
</div>
</ion-content>
</ion-view>

View file

@ -37,13 +37,14 @@
</div>
</a>
<div class="subheader" ng-if="walletsBtc[0] && walletsBch[0]" translate>
<div class="subheader" ng-if="walletsBtc[0] && walletsBch[0] && displayWallet" translate>
<img class="wallet-coin-logo" src="img/icon-bitcoin.svg" width="18">
<span translate>Bitcoin Core (BTC)</span>
</div>
<a
ng-repeat="wallet in walletsBtc track by $index"
class="item item-icon-left item-big-icon-left item-icon-right wallet"
ng-show="displayWallet"
ng-click="selectWallet(wallet)"
>
<i class="icon big-icon-svg" ng-include="'views/includes/walletIcon.html'"></i>

View file

@ -99,7 +99,8 @@ wallet-selector-title="fromWalletSelectorTitle"
wallet-selector-wallets="fromWallets"
wallet-selector-selected-wallet="fromWallet"
wallet-selector-show="showFromWallets"
wallet-selector-on-select="onFromWalletSelect">
wallet-selector-on-select="onFromWalletSelect"
wallet-selector-always-display-bitcoin-core="true">
</wallet-selector>
<wallet-selector
@ -107,6 +108,7 @@ wallet-selector-title="toWalletSelectorTitle"
wallet-selector-wallets="toWallets"
wallet-selector-selected-wallet="toWallet"
wallet-selector-show="showToWallets"
wallet-selector-on-select="onToWalletSelect">
wallet-selector-on-select="onToWalletSelect"
wallet-selector-always-display-bitcoin-core="true">
</wallet-selector>
</ion-view>

View file

@ -78,7 +78,8 @@
</div>
</div>
<div class="list card">
<div class="list card"
ng-show="displayBitcoinCore">
<div class="item item-icon-right item-heading">
<img class="wallet-coin-logo" src="img/icon-bitcoin.svg" width="18">
<span translate>Bitcoin Core (BTC)</span>

View file

@ -70,7 +70,11 @@
<span translate>Transfer to Wallet</span>
</div>
<div class="list">
<a class="item item-icon-left item-icon-right" ng-repeat="item in list" ng-if="hasWallets && item.recipientType == 'wallet'" ng-click="goToAmount(item)">
<a class="item item-icon-left item-icon-right"
ng-repeat="item in list"
ng-if="hasWallets && item.recipientType == 'wallet'"
ng-click="goToAmount(item)"
ng-show="item.displayWallet">
<i class="icon big-icon-svg" ng-if="item.recipientType == 'wallet'" ng-init="wallet = item" ng-include="'views/includes/walletIcon.html'"></i>
{{item.name}}
<p>