Merge pull request #77 from Bitcoin-com/dev-jb

Dev jb
This commit is contained in:
Jean-Baptiste Dominguez 2018-04-25 16:09:40 +09:00 committed by GitHub
commit c12e47e9c1
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
13 changed files with 183 additions and 16 deletions

View file

@ -0,0 +1,42 @@
'use strict';
angular.module('copayApp.controllers').controller('preferencesPriceDisplayController', function($scope, $q, $timeout, configService, $ionicNavBarDelegate) {
$scope.save = function(priceDisplay) {
if ($scope.noSave) return;
var opts = {
wallet: {
settings: {
priceDisplay: priceDisplay
}
}
};
configService.set(opts, function(err) {
if (err) $log.debug(err);
$timeout(function() {
$scope.$apply();
});
});
};
$scope.$on("$ionicView.enter", function(event, data) {
$ionicNavBarDelegate.showBar(true);
});
$scope.$on("$ionicView.beforeEnter", function(event, data) {
$scope.init();
});
$scope.init = function () {
configService.whenAvailable(function(config) {
$scope.selectedPriceDisplay = config.wallet.settings.priceDisplay;
$timeout(function() {
$scope.$apply();
});
});
};
});

View file

@ -116,6 +116,7 @@ angular.module('copayApp.controllers').controller('tabHomeController',
}); });
configService.whenAvailable(function(config) { configService.whenAvailable(function(config) {
$scope.selectedPriceDisplay = config.wallet.settings.priceDisplay;
$scope.recentTransactionsEnabled = config.recentTransactions.enabled; $scope.recentTransactionsEnabled = config.recentTransactions.enabled;
if ($scope.recentTransactionsEnabled) getNotifications(); if ($scope.recentTransactionsEnabled) getNotifications();

View file

@ -16,6 +16,8 @@ angular.module('copayApp.controllers').controller('tabSettingsController', funct
isoCode: config.wallet.settings.alternativeIsoCode isoCode: config.wallet.settings.alternativeIsoCode
}; };
$scope.selectedPriceDisplay = config.wallet.settings.priceDisplay;
// TODO move this to a generic service // TODO move this to a generic service
bitpayAccountService.getAccounts(function(err, data) { bitpayAccountService.getAccounts(function(err, data) {
if (err) $log.error(err); if (err) $log.error(err);

View file

@ -367,6 +367,15 @@ angular.module('copayApp.controllers').controller('walletDetailsController', fun
}); });
$scope.$on("$ionicView.beforeEnter", function(event, data) { $scope.$on("$ionicView.beforeEnter", function(event, data) {
configService.whenAvailable(function (config) {
$scope.selectedPriceDisplay = config.wallet.settings.priceDisplay;
$timeout(function () {
$scope.apply();
});
});
$scope.walletId = data.stateParams.walletId; $scope.walletId = data.stateParams.walletId;
$scope.wallet = profileService.getWallet($scope.walletId); $scope.wallet = profileService.getWallet($scope.walletId);
if (!$scope.wallet) return; if (!$scope.wallet) return;

View file

@ -413,6 +413,15 @@ angular.module('copayApp').config(function(historicLogProvider, $provide, $logPr
} }
} }
}) })
.state('tabs.priceDisplay', {
url: '/priceDisplay',
views: {
'tab-settings@tabs': {
controller: 'preferencesPriceDisplayController',
templateUrl: 'views/preferencesPriceDisplay.html'
}
}
})
.state('tabs.about', { .state('tabs.about', {
url: '/about', url: '/about',
views: { views: {
@ -1199,11 +1208,46 @@ angular.module('copayApp').config(function(historicLogProvider, $provide, $logPr
} }
}); });
}) })
.run(function($rootScope, $state, $location, $log, $timeout, startupService, ionicToast, fingerprintService, $ionicHistory, $ionicPlatform, $window, appConfigService, lodash, platformInfo, profileService, uxLanguage, gettextCatalog, openURLService, storageService, scannerService, configService, emailService, /* plugins START HERE => */ buydotbitcoindotcomService, glideraService, amazonService, bitpayCardService, applicationService, mercadoLibreService) { .run(function($rootScope, $state, $location, $log, $timeout, startupService, ionicToast, fingerprintService, $ionicHistory, $ionicPlatform, $window, appConfigService, lodash, platformInfo, profileService, uxLanguage, gettextCatalog, openURLService, storageService, scannerService, configService, emailService, /* plugins START HERE => */ buydotbitcoindotcomService, glideraService, amazonService, bitpayCardService, applicationService, mercadoLibreService, rateService) {
$ionicPlatform.ready(function() {
// Init language
uxLanguage.init(function (lang) {
uxLanguage.init(); // Try to load the profile
profileService.loadAndBindProfile(function(err) {
// If err, first time so I define the currency rate by language
if (err) {
var rateCode = uxLanguage.getRateCode(lang);
$ionicPlatform.ready(function() { rateService.whenAvailable(function() {
var alternatives = rateService.listAlternatives(true);
var newAltCurrency = lodash.find(alternatives, {
'isoCode': rateCode
});
configService.whenAvailable(function(config) {
var opts = {
wallet: {
settings: {
alternativeName: newAltCurrency.name,
alternativeIsoCode: newAltCurrency.isoCode,
}
}
};
configService.set(opts, function(err) {
if (err) $log.warn(err);
});
});
$log.debug('Setting default currency : ' + newAltCurrency);
});
};
});
});
if (screen.width < 768 && platformInfo.isCordova) if (screen.width < 768 && platformInfo.isCordova)
screen.lockOrientation('portrait'); screen.lockOrientation('portrait');
@ -1278,6 +1322,7 @@ angular.module('copayApp').config(function(historicLogProvider, $provide, $logPr
$log.debug('No profile... redirecting'); $log.debug('No profile... redirecting');
$state.go('onboarding.tour'); $state.go('onboarding.tour');
} else if (err.message && err.message.match('NONAGREEDDISCLAIMER')) { } else if (err.message && err.message.match('NONAGREEDDISCLAIMER')) {
$scope.setRateByLanguage();
if (lodash.isEmpty(profileService.getWallets())) { if (lodash.isEmpty(profileService.getWallets())) {
$log.debug('No wallets and no disclaimer... redirecting'); $log.debug('No wallets and no disclaimer... redirecting');
$state.go('onboarding.tour'); $state.go('onboarding.tour');

View file

@ -69,6 +69,7 @@ angular.module('copayApp.services').factory('configService', function(storageSer
unitCode: 'btc', unitCode: 'btc',
alternativeName: 'US Dollar', alternativeName: 'US Dollar',
alternativeIsoCode: 'USD', alternativeIsoCode: 'USD',
priceDisplay: 'fiat', // 'fiat' || 'crypto'
} }
}, },
@ -181,6 +182,11 @@ angular.module('copayApp.services').factory('configService', function(storageSer
configCache.wallet.settings.unitCode = defaultConfig.wallet.settings.unitCode; configCache.wallet.settings.unitCode = defaultConfig.wallet.settings.unitCode;
} }
// If display is not configure, take the default value
if (!configCache.wallet.settings.priceDisplay) {
configCache.wallet.settings.display = defaultConfig.wallet.settings.priceDisplay;
}
// Convert tarascash wallet to new style cash wallet // Convert tarascash wallet to new style cash wallet
if (configCache.bwsbcc && configCache.bwsbcc.url && configCache.bwsbcc.url.indexOf('bwsbcc') >= 0) { if (configCache.bwsbcc && configCache.bwsbcc.url && configCache.bwsbcc.url.indexOf('bwsbcc') >= 0) {
configCache.bwsbcc = defaultConfig.bwscash.url; configCache.bwsbcc = defaultConfig.bwscash.url;

View file

@ -6,12 +6,6 @@ angular.module('copayApp.services').factory('openURLService', function($rootScop
var handleOpenURL = function(args) { var handleOpenURL = function(args) {
$log.info('Handling Open URL: ' + JSON.stringify(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: false,
disableAnimation: true
});
var url = args.url; var url = args.url;
if (!url) { if (!url) {

View file

@ -8,41 +8,53 @@ angular.module('copayApp.services')
root.availableLanguages = [{ root.availableLanguages = [{
name: 'English', name: 'English',
isoCode: 'en', isoCode: 'en',
rateCode: 'USD'
}, { }, {
name: 'Español', name: 'Español',
isoCode: 'es', isoCode: 'es',
rateCode: 'EUR'
}, { }, {
name: 'Français', name: 'Français',
isoCode: 'fr', isoCode: 'fr',
rateCode: 'EUR'
}, { }, {
name: 'Italiano', name: 'Italiano',
isoCode: 'it', isoCode: 'it',
rateCode: 'EUR'
}, { }, {
name: 'Nederlands', name: 'Nederlands',
isoCode: 'nl', isoCode: 'nl',
rateCode: 'EUR'
}, { }, {
name: 'Polski', name: 'Polski',
isoCode: 'pl', isoCode: 'pl',
rateCode: 'EUR'
}, { }, {
name: 'Deutsch', name: 'Deutsch',
isoCode: 'de', isoCode: 'de',
rateCode: 'EUR'
}, { }, {
name: '日本語', name: '日本語',
isoCode: 'ja', isoCode: 'ja',
useIdeograms: true, useIdeograms: true,
rateCode: 'JPY'
}, { }, {
name: '中文(简体)', name: '中文(简体)',
isoCode: 'zh', isoCode: 'zh',
useIdeograms: true, useIdeograms: true,
rateCode: 'CNY'
}, { }, {
name: 'Pусский', name: 'Pусский',
isoCode: 'ru', isoCode: 'ru',
rateCode: 'RUB'
}, { }, {
name: 'Português', name: 'Português',
isoCode: 'pt', isoCode: 'pt',
rateCode: 'EUR'
}, { }, {
name: '한국어', name: '한국어',
isoCode: 'ko' isoCode: 'ko',
rateCode: 'KRW'
}]; }];
// }, { // }, {
@ -105,18 +117,19 @@ angular.module('copayApp.services')
return root.availableLanguages; return root.availableLanguages;
}; };
root.init = function(cb) { root.init = function(cb, cbSuccess) {
configService.whenAvailable(function(config) { configService.whenAvailable(function(config) {
var userLang = config.wallet.settings.defaultLanguage; var userLang = config.wallet.settings.defaultLanguage;
if (userLang && userLang != root.currentLanguage) { if (userLang && userLang != root.currentLanguage) {
root._set(userLang); root._set(userLang);
if (cb) return cb(userLang);
} else { } else {
root._detect(function(lang) { root._detect(function(lang) {
root._set(lang); root._set(lang);
if (cb) return cb(lang);
}); });
} }
if (cb) return cb();
}); });
}; };
@ -126,5 +139,11 @@ angular.module('copayApp.services')
}), 'name'); }), 'name');
}; };
root.getRateCode = function(lang) {
return lodash.result(lodash.find(root.availableLanguages, {
'isoCode': lang
}), 'rateCode');
};
return root; return root;
}); });

View file

@ -28,6 +28,10 @@ body {
font-family:'ProximaNova' !important; font-family:'ProximaNova' !important;
} }
.capitalize {
text-transform: capitalize;
}
.textlogo { .textlogo {
color: #FFF; color: #FFF;
font-size: 20px; font-size: 20px;

View file

@ -7,7 +7,8 @@
Incomplete Incomplete
</span> </span>
<span ng-if="wallet.isComplete()"> <span ng-if="wallet.isComplete()">
<span ng-if="!wallet.balanceHidden && !wallet.scanning"> {{wallet.status.totalBalanceStr ? wallet.status.totalBalanceStr : ( wallet.cachedBalance ? wallet.cachedBalance + (wallet.cachedBalanceUpdatedOn ? ' &middot; ' + ( wallet.cachedBalanceUpdatedOn * 1000 | amTimeAgo) : '') : '' ) }} </span> <span ng-if="selectedPriceDisplay == 'crypto' && !wallet.balanceHidden && !wallet.scanning"> {{wallet.status.totalBalanceStr ? wallet.status.totalBalanceStr : ( wallet.cachedBalance ? wallet.cachedBalance + (wallet.cachedBalanceUpdatedOn ? ' &middot; ' + ( wallet.cachedBalanceUpdatedOn * 1000 | amTimeAgo) : '') : '' ) }} </span>
<span ng-if="selectedPriceDisplay == 'fiat' && !wallet.balanceHidden && !wallet.scanning"> {{wallet.status.totalBalanceAlternative ? wallet.status.totalBalanceAlternative : ( wallet.cachedBalance ? wallet.cachedBalance + (wallet.cachedBalanceUpdatedOn ? ' &middot; ' + ( wallet.cachedBalanceUpdatedOn * 1000 | amTimeAgo) : '') : '' ) }} {{wallet.status.alternativeIsoCode}}</span>
<span ng-if="wallet.scanning" translate> Scanning funds... </span> <span ng-if="wallet.scanning" translate> Scanning funds... </span>
<span ng-if="wallet.balanceHidden && !wallet.scanning" translate>[Balance Hidden]</span> <span ng-if="wallet.balanceHidden && !wallet.scanning" translate>[Balance Hidden]</span>

View file

@ -0,0 +1,19 @@
<ion-view id="settings-pricedisplay" class="settings" show-tabs>
<ion-nav-bar class="bar-royal">
<ion-nav-title>
{{'Price display'|translate}}
</ion-nav-title>
<ion-nav-back-button>
</ion-nav-back-button>
</ion-nav-bar>
<ion-content>
<div class="price-display">
<ion-radio class="capitalize" ng-value="'fiat'" ng-model="selectedPriceDisplay" ng-click="save(selectedPriceDisplay)">
fiat
</ion-radio>
<ion-radio class="capitalize" ng-value="'crypto'" ng-model="selectedPriceDisplay" ng-click="save(selectedPriceDisplay)">
cryptocurrency
</ion-radio>
</div>
</ion-content>
</ion-view>

View file

@ -55,7 +55,7 @@
{{currentLanguageName|translate}} {{currentLanguageName|translate}}
</span> </span>
<i class="icon bp-arrow-right"></i> <i class="icon bp-arrow-right"></i>
</a> </a>
<a class="item has-setting-value item-icon-left item-icon-right" ui-sref="tabs.altCurrency"> <a class="item has-setting-value item-icon-left item-icon-right" ui-sref="tabs.altCurrency">
<i class="icon big-icon-svg"> <i class="icon big-icon-svg">
@ -67,6 +67,17 @@
</span> </span>
<i class="icon bp-arrow-right"></i> <i class="icon bp-arrow-right"></i>
</a> </a>
<a class="item has-setting-value item-icon-left item-icon-right" ui-sref="tabs.priceDisplay">
<i class="icon big-icon-svg">
<img src="img/icon-alternative-currency.svg" class="bg"/>
</i>
<span class="setting-title">{{'Price Display' | translate}}</span>
<span class="setting-value capitalize">
{{selectedPriceDisplay}}
</span>
<i class="icon bp-arrow-right"></i>
</a>
<a class="item has-setting-value item-icon-left item-icon-right" ui-sref="tabs.fee"> <a class="item has-setting-value item-icon-left item-icon-right" ui-sref="tabs.fee">
<i class="icon big-icon-svg"> <i class="icon big-icon-svg">

View file

@ -30,7 +30,21 @@
</div> </div>
<div <div
ng-show="!updateStatusError && !wallet.balanceHidden && !wallet.scanning" ng-show="selectedPriceDisplay=='fiat' && !updateStatusError && !wallet.balanceHidden && !wallet.scanning"
on-hold="hideToggle()"
ng-style="{'transform': amountScale}"
ng-class="{amount__balance: amountIsCollapsible}">
<strong class="size-36">{{status.totalBalanceAlternative}} {{status.alternativeIsoCode}}</strong>
<div
class="size-14 amount-alternative"
ng-if="status.totalBalanceAlternative && wallet.network == 'livenet'"
ng-style="{opacity: altAmountOpacity}">
{{status.totalBalanceStr}}
</div>
</div>
<div
ng-show="selectedPriceDisplay=='crypto' && !updateStatusError && !wallet.balanceHidden && !wallet.scanning"
on-hold="hideToggle()" on-hold="hideToggle()"
ng-style="{'transform': amountScale}" ng-style="{'transform': amountScale}"
ng-class="{amount__balance: amountIsCollapsible}"> ng-class="{amount__balance: amountIsCollapsible}">