Merge branch 'wallet/sprint/19' into wallet/task/416

This commit is contained in:
Jean-Baptiste Dominguez 2018-07-16 14:25:03 +09:00 committed by GitHub
commit 8442248e96
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
18 changed files with 7049 additions and 27 deletions

View file

@ -161,6 +161,12 @@ module.exports = function(grunt) {
], ],
dest: 'www/lib/bitcoin-cash-js.js' dest: 'www/lib/bitcoin-cash-js.js'
}, },
bitanalytics: {
src: [
'bitanalytics/bitanalytics-0.1.0.js'
],
dest: 'www/lib/bitanalytics.js'
},
js: { js: {
src: [ src: [
'src/js/app.js', 'src/js/app.js',
@ -202,7 +208,8 @@ module.exports = function(grunt) {
files: { files: {
'www/js/app.js': ['www/js/app.js'], 'www/js/app.js': ['www/js/app.js'],
'www/lib/angular-components.js': ['www/lib/angular-components.js'], 'www/lib/angular-components.js': ['www/lib/angular-components.js'],
'www/lib/bitcoin-cash-js.js': ['www/lib/bitcoin-cash-js.js'] 'www/lib/bitcoin-cash-js.js': ['www/lib/bitcoin-cash-js.js'],
'www/lib/bitanalytics.js': ['www/lib/bitanalytics.js']
} }
} }
}, },

View file

@ -11,7 +11,7 @@
<link rel="stylesheet" type="text/css" href="css/chartist.css"> <link rel="stylesheet" type="text/css" href="css/chartist.css">
<link rel="stylesheet" type="text/css" href="css/bitcoin.com.css"> <link rel="stylesheet" type="text/css" href="css/bitcoin.com.css">
<link rel="stylesheet" type="text/css" href="css/icomoon.css"> <link rel="stylesheet" type="text/css" href="css/icomoon.css">
<title>*USERVISIBLENAME* - *PURPOSELINE*</title> <title>*USERVISIBLENAME*</title>
<link rel="shortcut icon" href="img/app/favicon.ico"> <link rel="shortcut icon" href="img/app/favicon.ico">
</head> </head>
<body> <body>
@ -31,6 +31,7 @@
<script src="lib/ionic.bundle.min.js"></script> <script src="lib/ionic.bundle.min.js"></script>
<script src="lib/angular-components.js"></script> <script src="lib/angular-components.js"></script>
<script src="lib/bitcoin-cash-js.js"></script> <script src="lib/bitcoin-cash-js.js"></script>
<script src="lib/bitanalytics.js"></script>
<script type="text/javascript" charset="utf-8" src="cordova.js"></script> <script type="text/javascript" charset="utf-8" src="cordova.js"></script>
<script src="js/moment.min.js"></script> <script src="js/moment.min.js"></script>

File diff suppressed because it is too large Load diff

View file

@ -35,6 +35,16 @@ angular.module('copayApp.controllers').controller('addressbookAddController', fu
var translated = bitcoinCashJsService.readAddress(addressbook.address); var translated = bitcoinCashJsService.readAddress(addressbook.address);
addressbook.address = translated.legacy; addressbook.address = translated.legacy;
} }
var channel = "firebase";
if (platformInfo.isNW) {
channel = "ga";
}
var log = new window.BitAnalytics.LogEvent("contact_created", [{
"coin": $scope.addressbookEntry.coin
}], [channel]);
window.BitAnalytics.LogEventHandlers.postEvent(log);
$timeout(function() { $timeout(function() {
addressbookService.add(addressbook, function(err, ab) { addressbookService.add(addressbook, function(err, ab) {
if (err) { if (err) {

View file

@ -643,6 +643,19 @@ angular.module('copayApp.controllers').controller('confirmController', function(
soundService.play('misc/payment_sent.mp3'); soundService.play('misc/payment_sent.mp3');
} }
var channel = "firebase";
if (platformInfo.isNW) {
channel = "ga";
}
var log = new window.BitAnalytics.LogEvent("transfer_success", [{
"coin": $scope.wallet.coin,
"type": "outgoing",
"amount": $scope.amount,
"fees": $scope.fee
}], [channel, "adjust"]);
window.BitAnalytics.LogEventHandlers.postEvent(log);
// Should be removed
firebaseEventsService.logEvent('sent_bitcoin', { coin: $scope.wallet.coin }); firebaseEventsService.logEvent('sent_bitcoin', { coin: $scope.wallet.coin });
$timeout(function() { $timeout(function() {
$scope.$digest(); $scope.$digest();

View file

@ -75,6 +75,15 @@ angular.module('copayApp.controllers').controller('preferencesNotificationsContr
}; };
emailService.updateEmail(opts); emailService.updateEmail(opts);
var channel = "firebase";
if (platformInfo.isNW) {
channel = "ga";
}
var log = new window.BitAnalytics.LogEvent("settings_email_notification_toggle", [{
"toggle": $scope.emailNotifications.value
}], [channel]);
window.BitAnalytics.LogEventHandlers.postEvent(log);
}; };
$scope.soundNotificationsChange = function() { $scope.soundNotificationsChange = function() {

View file

@ -24,7 +24,7 @@ angular.module('copayApp.controllers').controller('tabReceiveController', functi
}); });
}; };
$scope.setAddress = function(newAddr) { $scope.setAddress = function(newAddr, copyAddress) {
$scope.addr = null; $scope.addr = null;
if (!$scope.wallet || $scope.generatingAddress || !$scope.wallet.isComplete()) return; if (!$scope.wallet || $scope.generatingAddress || !$scope.wallet.isComplete()) return;
$scope.generatingAddress = true; $scope.generatingAddress = true;
@ -58,11 +58,13 @@ angular.module('copayApp.controllers').controller('tabReceiveController', functi
paymentSubscriptionObj.addr = $scope.addr paymentSubscriptionObj.addr = $scope.addr
} }
try { if (copyAddress === true) {
clipboardService.copyToClipboard($scope.wallet.coin == 'bch' && $scope.bchAddressType.type == 'cashaddr' ? 'bitcoincash:' + $scope.addr : $scope.addr); try {
} catch (error) { clipboardService.copyToClipboard($scope.wallet.coin == 'bch' && $scope.bchAddressType.type == 'cashaddr' ? 'bitcoincash:' + $scope.addr : $scope.addr);
$log.debug("Error copying to clipboard:"); } catch (error) {
$log.debug(error); $log.debug("Error copying to clipboard:");
$log.debug(error);
}
} }
// create subscription // create subscription
var msg = JSON.stringify(paymentSubscriptionObj); var msg = JSON.stringify(paymentSubscriptionObj);
@ -143,6 +145,16 @@ angular.module('copayApp.controllers').controller('tabReceiveController', functi
} }
$scope.paymentReceivedCoin = $scope.wallet.coin; $scope.paymentReceivedCoin = $scope.wallet.coin;
var channel = "firebase";
if (platformInfo.isNW) {
channel = "ga";
}
var log = new window.BitAnalytics.LogEvent("transfer_success", [{
"coin": $scope.wallet.coin,
"type": "incoming"
}], [channel, "adjust"]);
window.BitAnalytics.LogEventHandlers.postEvent(log);
if ($state.current.name === "tabs.receive") { if ($state.current.name === "tabs.receive") {
soundService.play('misc/payment_received.mp3'); soundService.play('misc/payment_received.mp3');
} }

View file

@ -12,6 +12,13 @@ angular.module('copayApp.controllers').controller('walletDetailsController', fun
$scope.isAndroid = platformInfo.isAndroid; $scope.isAndroid = platformInfo.isAndroid;
$scope.isIOS = platformInfo.isIOS; $scope.isIOS = platformInfo.isIOS;
var channel = "firebase";
if (platformInfo.isNW) {
channel = "ga";
}
var log = new window.BitAnalytics.LogEvent("wallet_details_open", [], [channel]);
window.BitAnalytics.LogEventHandlers.postEvent(log);
$scope.amountIsCollapsible = !$scope.isAndroid; $scope.amountIsCollapsible = !$scope.isAndroid;
$scope.openExternalLink = function(url, target) { $scope.openExternalLink = function(url, target) {

View file

@ -1212,6 +1212,67 @@ angular.module('copayApp').config(function(historicLogProvider, $provide, $logPr
$ionicPlatform.ready(function() { $ionicPlatform.ready(function() {
// Init BitAnalytics
var os = platformInfo.isAndroid ? 'android' : platformInfo.isIOS ? 'ios' : 'desktop';
window.BitAnalytics.initialize(os, $window.fullVersion, {"firebase": {},
"ga": {
"trackingId": "UA-59964190-23",
"eventLabels": ["id", "icon-off"]
},
"adjust": {
"token": "au1onbhgg5q8",
"environment" : "production",
"eventTypes": {
"banner_click": "sc5i8u",
"buy_bitcoin_click": "t1vcdz",
"transfer_success": "f68evo",
"wallet_created": "nd3dg5",
"wallet_opened": "4n39l7"
}
}
});
var channel = "firebase";
if (platformInfo.isNW) {
channel = "ga";
}
// Send a log to test
var log = new window.BitAnalytics.LogEvent("wallet_opened", [], [channel, "adjust"]);
window.BitAnalytics.LogEventHandlers.postEvent(log);
var actionBanner = new window.BitAnalytics.ActionFactory.createAction('click', {
name: 'banner_click',
class: 'track_banner_click',
params: ['href-banner', 'id'],
channels: [channel, 'adjust']
});
window.BitAnalytics.ActionHandlers.trackAction(actionBanner);
var actionBuyBitcoin = new window.BitAnalytics.ActionFactory.createAction('click', {
name: 'buy_bitcoin_click',
class: 'track_buy_bitcoin_click',
params: ['href', 'id'],
channels: [channel, 'adjust']
});
window.BitAnalytics.ActionHandlers.trackAction(actionBuyBitcoin);
var actionLinkClickOut = new window.BitAnalytics.ActionFactory.createAction('click', {
name: 'link_click_out',
class: 'track_link_click_out',
params: ['href', 'id'],
channels: [channel]
});
window.BitAnalytics.ActionHandlers.trackAction(actionLinkClickOut);
var actionTabOpen = new window.BitAnalytics.ActionFactory.createAction('click', {
name: 'tab_open',
class: 'track_tab_open',
params: ['href', 'title', 'icon-off'],
channels: [channel]
});
window.BitAnalytics.ActionHandlers.trackAction(actionTabOpen);
// Init language // Init language
uxLanguage.init(function (lang) { uxLanguage.init(function (lang) {

View file

@ -427,6 +427,15 @@ angular.module('copayApp.services')
}, function(err, secret) { }, function(err, secret) {
if (err) return bwcError.cb(err, gettextCatalog.getString('Error creating wallet'), cb); if (err) return bwcError.cb(err, gettextCatalog.getString('Error creating wallet'), cb);
var channel = "firebase";
if (platformInfo.isNW) {
channel = "ga";
}
var log = new window.BitAnalytics.LogEvent("wallet_created", [{
"coin": opts.coin
}], [channel]);
window.BitAnalytics.LogEventHandlers.postEvent(log);
return cb(null, walletClient, secret); return cb(null, walletClient, secret);
}); });
}); });

View file

@ -11,8 +11,9 @@
<link rel="stylesheet" type="text/css" href="css/chartist.css"> <link rel="stylesheet" type="text/css" href="css/chartist.css">
<link rel="stylesheet" type="text/css" href="css/bitcoin.com.css"> <link rel="stylesheet" type="text/css" href="css/bitcoin.com.css">
<link rel="stylesheet" type="text/css" href="css/icomoon.css"> <link rel="stylesheet" type="text/css" href="css/icomoon.css">
<title>Bitcoin.com Wallet</title> <title>Bitcoin.com Wallet - Bitcoin.com Wallet</title>
<link rel="shortcut icon" href="img/app/favicon.ico"> <link rel="shortcut icon" href="img/app/favicon.ico">
<script src="https://www.googletagmanager.com/gtag/js?id=UA-59964190-23"></script>
</head> </head>
<body> <body>
@ -31,6 +32,7 @@
<script src="lib/ionic.bundle.min.js"></script> <script src="lib/ionic.bundle.min.js"></script>
<script src="lib/angular-components.js"></script> <script src="lib/angular-components.js"></script>
<script src="lib/bitcoin-cash-js.js"></script> <script src="lib/bitcoin-cash-js.js"></script>
<script src="lib/bitanalytics.js"></script>
<script type="text/javascript" charset="utf-8" src="cordova.js"></script> <script type="text/javascript" charset="utf-8" src="cordova.js"></script>
<script src="js/moment.min.js"></script> <script src="js/moment.min.js"></script>

View file

@ -6,14 +6,14 @@
</div> </div>
<div ng-show="!hide"> <div ng-show="!hide">
<div ng-repeat="service in services track by $index"> <div ng-repeat="service in services track by $index">
<a ng-if="service.sref" ui-sref="{{service.sref}}" class="item item-sub item-icon-left item-big-icon-left item-icon-right next-step"> <a ng-if="service.sref" ui-sref="{{service.sref}}" id="home_{{service.name}}" title="{{service.title || service.name}}" class="track_link_click_out item item-sub item-icon-left item-big-icon-left item-icon-right next-step">
<i class="icon big-icon-svg theme-circle theme-circle-community"> <i class="icon big-icon-svg theme-circle theme-circle-community">
<div class="bg {{service.icon}}"></div> <div class="bg {{service.icon}}"></div>
</i> </i>
<span>{{service.title || service.name}}</span> <span>{{service.title || service.name}}</span>
<i class="icon bp-arrow-right"></i> <i class="icon bp-arrow-right"></i>
</a> </a>
<a ng-if="!service.sref" ng-click="open('{{service.href}}')" class="item item-sub item-icon-left item-big-icon-left item-icon-right next-step"> <a ng-if="!service.sref" ng-click="open('{{service.href}}')" id="home_{{service.name}}" title="{{service.title || service.name}}" class="track_link_click_out item item-sub item-icon-left item-big-icon-left item-icon-right next-step">
<i class="icon big-icon-svg theme-circle theme-circle-community"> <i class="icon big-icon-svg theme-circle theme-circle-community">
<div class="bg {{service.icon}}"></div> <div class="bg {{service.icon}}"></div>
</i> </i>
@ -22,7 +22,7 @@
</a> </a>
</div> </div>
<div> <div>
<a ng-if="isCordova" ng-click="share()" class="item item-sub item-icon-left item-big-icon-left item-icon-right next-step"> <a ng-if="isCordova" ng-click="share()" title="Share the Wallet App" id="home_{{service.name}}" class="track_link_click_out item item-sub item-icon-left item-big-icon-left item-icon-right next-step">
<i class="icon big-icon-svg theme-circle theme-circle-community"> <i class="icon big-icon-svg theme-circle theme-circle-community">
<div class="bg icon-share"></div> <div class="bg icon-share"></div>
</i> </i>

View file

@ -6,7 +6,14 @@
</div> </div>
<div ng-show="!hide"> <div ng-show="!hide">
<div ng-repeat="service in services track by $index"> <div ng-repeat="service in services track by $index">
<a ui-sref="{{service.sref}}" class="item item-sub item-icon-left item-big-icon-left item-icon-right next-step"> <a ng-if="service.name=='buyandsell'" ui-sref="{{service.sref}}" id="home_{{service.name}}" title="{{service.title || service.name}}" class="buy_bitcoin_click item item-sub item-icon-left item-big-icon-left item-icon-right next-step">
<i class="icon big-icon-svg theme-circle">
<div class="bg {{service.icon}}"></div>
</i>
<span>{{service.title || service.name}}</span>
<i class="icon bp-arrow-right"></i>
</a>
<a ng-if="service.name!='buyandsell'" ui-sref="{{service.sref}}" id="home_{{service.name}}" title="{{service.title || service.name}}" class="track_link_click_out item item-sub item-icon-left item-big-icon-left item-icon-right next-step">
<i class="icon big-icon-svg theme-circle"> <i class="icon big-icon-svg theme-circle">
<div class="bg {{service.icon}}"></div> <div class="bg {{service.icon}}"></div>
</i> </i>

View file

@ -6,14 +6,14 @@
</div> </div>
<div ng-show="!hide"> <div ng-show="!hide">
<div ng-repeat="service in services track by $index"> <div ng-repeat="service in services track by $index">
<a ng-if="service.sref" ui-sref="{{service.sref}}" class="item item-sub item-icon-left item-big-icon-left item-icon-right next-step"> <a ng-if="service.sref" ui-sref="{{service.sref}}" id="home_{{service.name}}" title="{{service.title || service.name}}" class="track_link_click_out item item-sub item-icon-left item-big-icon-left item-icon-right next-step">
<i class="icon big-icon-svg theme-circle"> <i class="icon big-icon-svg theme-circle">
<div class="bg {{service.icon}}"></div> <div class="bg {{service.icon}}"></div>
</i> </i>
<span>{{service.title || service.name}}</span> <span>{{service.title || service.name}}</span>
<i class="icon bp-arrow-right"></i> <i class="icon bp-arrow-right"></i>
</a> </a>
<a ng-if="!service.sref" ng-click="open('{{service.href}}')" class="item item-sub item-icon-left item-big-icon-left item-icon-right next-step"> <a ng-if="!service.sref" ng-click="open('{{service.href}}')" id="home_{{service.name}}" title="{{service.title || service.name}}" class="track_link_click_out item item-sub item-icon-left item-big-icon-left item-icon-right next-step">
<i class="icon big-icon-svg theme-circle"> <i class="icon big-icon-svg theme-circle">
<div class="bg {{service.icon}}"></div> <div class="bg {{service.icon}}"></div>
</i> </i>

View file

@ -6,7 +6,7 @@
</div> </div>
<div ng-show="!hide"> <div ng-show="!hide">
<div ng-repeat="service in services track by $index"> <div ng-repeat="service in services track by $index">
<a ui-sref="{{service.sref}}" class="item item-sub item-icon-left item-big-icon-left item-icon-right next-step"> <a ui-sref="{{service.sref}}" id="home_{{service.name}}" title="{{service.title || service.name}}" class="track_link_click_out item item-sub item-icon-left item-big-icon-left item-icon-right next-step">
<i class="icon big-icon-svg theme-circle theme-circle-services"> <i class="icon big-icon-svg theme-circle theme-circle-services">
<div class="bg {{service.icon}}"></div> <div class="bg {{service.icon}}"></div>
</i> </i>

View file

@ -92,7 +92,7 @@
<div class="list card card-banner"> <div class="list card card-banner">
<ion-spinner ng-if="bannerIsLoading"></ion-spinner> <ion-spinner ng-if="bannerIsLoading"></ion-spinner>
<a ng-if="!bannerIsLoading" ng-click="openBannerUrl()"> <a id="home_banner" href-banner="{{bannerImageUrl}}" class="track_banner_click" ng-if="!bannerIsLoading" ng-click="openBannerUrl()">
<img class="card-banner__img" ng-src="{{bannerImageUrl}}"/> <img class="card-banner__img" ng-src="{{bannerImageUrl}}"/>
</a> </a>

View file

@ -48,7 +48,7 @@
</div> </div>
</div> </div>
<div> <div>
<button ng-show="addr" class="button-address" ng-click="setAddress(true)"> <button ng-show="addr" class="button-address" ng-click="setAddress(true, true)">
<span translate>Generate new address</span> <span translate>Generate new address</span>
</button><br/> </button><br/>
</div> </div>

View file

@ -1,22 +1,21 @@
<ion-tabs class="tabs-icon-top tabs-color-active-positive ion-tabs-transparent {{$root.hideTabs}}"> <ion-tabs class="tabs-icon-top tabs-color-active-positive ion-tabs-transparent {{$root.hideTabs}}">
<ion-tab class="track_tab_open" id="tab_open_home" title="{{'Home'|translate}}" icon-off="ico-home" icon-on="ico-home-selected" ui-sref="tabs.home">
<ion-tab title="{{'Home'|translate}}" icon-off="ico-home" icon-on="ico-home-selected" ui-sref="tabs.home">
<ion-nav-view name="tab-home"></ion-nav-view> <ion-nav-view name="tab-home"></ion-nav-view>
</ion-tab> </ion-tab>
<ion-tab title="{{'Receive'|translate}}" icon-off="ico-receive" icon-on="ico-receive-selected" ui-sref="tabs.receive"> <ion-tab class="track_tab_open" id="tab_open_receive" title="{{'Receive'|translate}}" icon-off="ico-receive" icon-on="ico-receive-selected" ui-sref="tabs.receive">
<ion-nav-view name="tab-receive"></ion-nav-view> <ion-nav-view name="tab-receive"></ion-nav-view>
</ion-tab> </ion-tab>
<ion-tab title="{{'Scan'|translate}}" icon-off="ico-scan" icon-on="ico-scan-selected" ng-click="chooseScanner()"> <ion-tab class="track_tab_open" id="tab_open_scan" title="{{'Scan'|translate}}" icon-off="ico-scan" icon-on="ico-scan-selected" ng-click="chooseScanner()">
<ion-nav-view name="tab-scan"></ion-nav-view> <ion-nav-view name="tab-scan"></ion-nav-view>
</ion-tab> </ion-tab>
<ion-tab title="{{'Send'|translate}}" icon-off="ico-send" icon-on="ico-send-selected" ui-sref="tabs.send"> <ion-tab class="track_tab_open" id="tab_open_send" title="{{'Send'|translate}}" icon-off="ico-send" icon-on="ico-send-selected" ui-sref="tabs.send">
<ion-nav-view name="tab-send"></ion-nav-view> <ion-nav-view name="tab-send"></ion-nav-view>
</ion-tab> </ion-tab>
<ion-tab title="{{'Settings'|translate}}" icon-off="ico-settings" icon-on="ico-settings-selected" ui-sref="tabs.settings"> <ion-tab class="track_tab_open" id="tab_open_settings" title="{{'Settings'|translate}}" icon-off="ico-settings" icon-on="ico-settings-selected" ui-sref="tabs.settings">
<ion-nav-view name="tab-settings"></ion-nav-view> <ion-nav-view name="tab-settings"></ion-nav-view>
</ion-tab> </ion-tab>
</ion-tabs> </ion-tabs>