From 313f829689ef98aa9fd0567abd4f9653a879e679 Mon Sep 17 00:00:00 2001 From: OleksandrSobol Date: Wed, 3 Mar 2021 20:54:23 +0200 Subject: [PATCH 01/15] CAKE-279 | integrated Wyre to the app; added buy button to dashboard page for btc wallet; added buyCryptoCurrency() method to dashboard_view_model.dart --- lib/src/screens/dashboard/dashboard_page.dart | 12 ++++-- .../dashboard/widgets/action_button.dart | 14 ++++--- .../dashboard/dashboard_view_model.dart | 38 +++++++++++++++++++ 3 files changed, 56 insertions(+), 8 deletions(-) diff --git a/lib/src/screens/dashboard/dashboard_page.dart b/lib/src/screens/dashboard/dashboard_page.dart index b88afced6..657602ad5 100644 --- a/lib/src/screens/dashboard/dashboard_page.dart +++ b/lib/src/screens/dashboard/dashboard_page.dart @@ -1,3 +1,4 @@ +import 'package:cake_wallet/entities/wallet_type.dart'; import 'package:cake_wallet/generated/i18n.dart'; import 'package:cake_wallet/routes.dart'; import 'package:cake_wallet/themes/theme_base.dart'; @@ -12,6 +13,7 @@ import 'package:cake_wallet/src/screens/dashboard/widgets/address_page.dart'; import 'package:cake_wallet/src/screens/dashboard/widgets/transactions_page.dart'; import 'package:cake_wallet/src/screens/dashboard/widgets/sync_indicator.dart'; import 'package:cake_wallet/view_model/wallet_address_list/wallet_address_list_view_model.dart'; +import 'package:flutter_mobx/flutter_mobx.dart'; import 'package:smooth_page_indicator/smooth_page_indicator.dart'; class DashboardPage extends BasePage { @@ -81,7 +83,7 @@ class DashboardPage extends BasePage { final exchangeImage = Image.asset('assets/images/transfer.png', height: 24.27, width: 22.25, color: Theme.of(context).accentTextTheme.display3.backgroundColor); - final receiveImage = Image.asset('assets/images/download.png', + final buyImage = Image.asset('assets/images/coins.png', height: 22.24, width: 24, color: Theme.of(context).accentTextTheme.display3.backgroundColor); _setEffects(); @@ -111,7 +113,7 @@ class DashboardPage extends BasePage { )), Container( padding: EdgeInsets.only(left: 45, right: 45, bottom: 24), - child: Row( + child: Observer(builder: (_) => Row( mainAxisAlignment: MainAxisAlignment.spaceAround, children: [ ActionButton( @@ -122,8 +124,12 @@ class DashboardPage extends BasePage { image: exchangeImage, title: S.of(context).exchange, route: Routes.exchange), + if (walletViewModel.type == WalletType.bitcoin) ActionButton( + image: buyImage, + title: S.of(context).buy, + onClick: () => walletViewModel.buyCryptoCurrency()), ], - ), + )), ) ], )); diff --git a/lib/src/screens/dashboard/widgets/action_button.dart b/lib/src/screens/dashboard/widgets/action_button.dart index 96635cbbb..67499f79b 100644 --- a/lib/src/screens/dashboard/widgets/action_button.dart +++ b/lib/src/screens/dashboard/widgets/action_button.dart @@ -3,14 +3,16 @@ import 'package:flutter/material.dart'; class ActionButton extends StatelessWidget { ActionButton( {@required this.image, - @required this.title, - @required this.route, - this.alignment = Alignment.center}); + @required this.title, + this.route, + this.onClick, + this.alignment = Alignment.center}); final Image image; final String title; final String route; final Alignment alignment; + final void Function() onClick; @override Widget build(BuildContext context) { @@ -23,8 +25,10 @@ class ActionButton extends StatelessWidget { children: [ GestureDetector( onTap: () { - if (route.isNotEmpty) { + if (route?.isNotEmpty ?? false) { Navigator.of(context, rootNavigator: true).pushNamed(route); + } else { + onClick?.call(); } }, child: Container( @@ -48,4 +52,4 @@ class ActionButton extends StatelessWidget { ), ); } -} +} \ No newline at end of file diff --git a/lib/view_model/dashboard/dashboard_view_model.dart b/lib/view_model/dashboard/dashboard_view_model.dart index 74b8585bb..7108e6d9f 100644 --- a/lib/view_model/dashboard/dashboard_view_model.dart +++ b/lib/view_model/dashboard/dashboard_view_model.dart @@ -1,3 +1,6 @@ +import 'dart:convert'; +import 'dart:io'; + import 'package:cake_wallet/bitcoin/bitcoin_transaction_info.dart'; import 'package:cake_wallet/bitcoin/bitcoin_wallet.dart'; import 'package:cake_wallet/entities/balance.dart'; @@ -20,6 +23,8 @@ import 'package:cake_wallet/view_model/dashboard/trade_list_item.dart'; import 'package:cake_wallet/view_model/dashboard/transaction_list_item.dart'; import 'package:cake_wallet/view_model/dashboard/action_list_item.dart'; import 'package:cake_wallet/view_model/dashboard/action_list_display_mode.dart'; +import 'package:crypto/crypto.dart'; +import 'package:http/http.dart'; import 'package:mobx/mobx.dart'; import 'package:cake_wallet/core/wallet_base.dart'; import 'package:cake_wallet/entities/sync_status.dart'; @@ -30,6 +35,9 @@ import 'package:cake_wallet/store/dashboard/trades_store.dart'; import 'package:cake_wallet/store/dashboard/trade_filter_store.dart'; import 'package:cake_wallet/store/dashboard/transaction_filter_store.dart'; import 'package:cake_wallet/view_model/dashboard/formatted_item_list.dart'; +import 'package:url_launcher/url_launcher.dart'; +import 'package:cake_wallet/.secrets.g.dart' as secrets; +import 'package:convert/convert.dart'; part 'dashboard_view_model.g.dart'; @@ -279,4 +287,34 @@ abstract class DashboardViewModelBase with Store { balanceViewModel: balanceViewModel, settingsStore: appStore.settingsStore))); } + + void buyCryptoCurrency() async { + final timestamp = DateTime.now().millisecondsSinceEpoch.toString(); + final url = 'https://api.testwyre.com/v3/orders/reserve' + '?timestamp=' + + timestamp; + final apiKey = secrets.wyre_api_key; + final secretKey = secrets.wyre_secret_key; + final accountId = secrets.wyre_account_id; + final body = { + 'destCurrency' : walletTypeToCryptoCurrency(type).title, + 'dest' : walletTypeToString(type).toLowerCase() + ':' + address, + 'referrerAccountId' : accountId, + 'lockFields' : ['destCurrency', 'dest'] + }; + + final response = await post(url, + headers: { + 'Authorization': 'Bearer $secretKey', + 'Content-Type': 'application/json', + 'cache-control': 'no-cache' + }, + body: json.encode(body) + ); + + if (response.statusCode == 200) { + final responseJSON = json.decode(response.body) as Map; + final urlFromResponse = responseJSON['url'] as String; + if (await canLaunch(urlFromResponse)) await launch(urlFromResponse); + } + } } From 60333e235df5c3dafba48e9f7a89ec3d2247245a Mon Sep 17 00:00:00 2001 From: OleksandrSobol Date: Fri, 12 Mar 2021 21:04:37 +0200 Subject: [PATCH 02/15] CAKE-279 | applied order details to the app --- android/app/src/main/AndroidManifest.xml | 2 + .../cakewallet/cake_wallet/MainActivity.java | 31 +++++++ assets/images/wyre-icon.png | Bin 0 -> 11432 bytes lib/di.dart | 21 ++++- lib/entities/find_order_by_id.dart | 40 +++++++++ lib/entities/order.dart | 55 ++++++++++++ lib/main.dart | 14 ++- lib/router.dart | 7 ++ lib/routes.dart | 1 + .../screens/dashboard/widgets/order_row.dart | 72 +++++++++++++++ .../dashboard/widgets/transactions_page.dart | 17 ++++ .../order_details/order_details_page.dart | 47 ++++++++++ lib/store/dashboard/orders_store.dart | 40 +++++++++ .../dashboard/dashboard_view_model.dart | 55 +++++++++++- lib/view_model/dashboard/order_list_item.dart | 21 +++++ lib/view_model/order_details_view_model.dart | 82 ++++++++++++++++++ 16 files changed, 498 insertions(+), 7 deletions(-) create mode 100644 assets/images/wyre-icon.png create mode 100644 lib/entities/find_order_by_id.dart create mode 100644 lib/entities/order.dart create mode 100644 lib/src/screens/dashboard/widgets/order_row.dart create mode 100644 lib/src/screens/order_details/order_details_page.dart create mode 100644 lib/store/dashboard/orders_store.dart create mode 100644 lib/view_model/dashboard/order_list_item.dart create mode 100644 lib/view_model/order_details_view_model.dart diff --git a/android/app/src/main/AndroidManifest.xml b/android/app/src/main/AndroidManifest.xml index abf27576f..f88acae04 100644 --- a/android/app/src/main/AndroidManifest.xml +++ b/android/app/src/main/AndroidManifest.xml @@ -27,6 +27,8 @@ + + diff --git a/android/app/src/main/java/com/cakewallet/cake_wallet/MainActivity.java b/android/app/src/main/java/com/cakewallet/cake_wallet/MainActivity.java index b78897919..ff3d5b8ae 100644 --- a/android/app/src/main/java/com/cakewallet/cake_wallet/MainActivity.java +++ b/android/app/src/main/java/com/cakewallet/cake_wallet/MainActivity.java @@ -1,15 +1,46 @@ package com.cakewallet.cake_wallet; +import android.content.Intent; +import android.os.Bundle; +import android.os.Handler; +import android.os.Looper; + import androidx.annotation.NonNull; +import androidx.annotation.Nullable; + +import java.nio.ByteBuffer; + import io.flutter.embedding.android.FlutterFragmentActivity; import io.flutter.embedding.engine.FlutterEngine; +import io.flutter.plugin.common.BasicMessageChannel; +import io.flutter.plugin.common.BinaryCodec; import io.flutter.plugins.GeneratedPluginRegistrant; public class MainActivity extends FlutterFragmentActivity { + public static final int DATA_EXISTS = 1; + public static final int DATA_NOT_EXISTS = 0; + BasicMessageChannel dataChannel; + Handler handler = new Handler(Looper.getMainLooper()); @Override public void configureFlutterEngine(@NonNull FlutterEngine flutterEngine) { GeneratedPluginRegistrant.registerWith(flutterEngine); + + dataChannel = new BasicMessageChannel( + flutterEngine.getDartExecutor().getBinaryMessenger(), + "data_change", BinaryCodec.INSTANCE); + } + + @Override + protected void onActivityResult(int requestCode, int resultCode, Intent data) { + super.onActivityResult(requestCode, resultCode, data); + ByteBuffer buffer = ByteBuffer.allocateDirect(4); + if (data != null) { + buffer.putInt(DATA_EXISTS); + } else { + buffer.putInt(DATA_NOT_EXISTS); + } + handler.post(() -> dataChannel.send(buffer)); } } \ No newline at end of file diff --git a/assets/images/wyre-icon.png b/assets/images/wyre-icon.png new file mode 100644 index 0000000000000000000000000000000000000000..71427231ce8f354e9d1995948b1d37baadc18740 GIT binary patch literal 11432 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 literal 0 HcmV?d00001 diff --git a/lib/di.dart b/lib/di.dart index 8d919c6ac..3b80b7d0a 100644 --- a/lib/di.dart +++ b/lib/di.dart @@ -4,6 +4,7 @@ import 'package:cake_wallet/core/wallet_service.dart'; import 'package:cake_wallet/entities/biometric_auth.dart'; import 'package:cake_wallet/entities/contact_record.dart'; import 'package:cake_wallet/entities/load_current_wallet.dart'; +import 'package:cake_wallet/entities/order.dart'; import 'package:cake_wallet/entities/transaction_description.dart'; import 'package:cake_wallet/entities/transaction_info.dart'; import 'package:cake_wallet/monero/monero_wallet_service.dart'; @@ -22,6 +23,7 @@ import 'package:cake_wallet/src/screens/faq/faq_page.dart'; import 'package:cake_wallet/src/screens/new_wallet/new_wallet_type_page.dart'; import 'package:cake_wallet/src/screens/nodes/node_create_or_edit_page.dart'; import 'package:cake_wallet/src/screens/nodes/nodes_list_page.dart'; +import 'package:cake_wallet/src/screens/order_details/order_details_page.dart'; import 'package:cake_wallet/src/screens/pin_code/pin_code_widget.dart'; import 'package:cake_wallet/src/screens/rescan/rescan_page.dart'; import 'package:cake_wallet/src/screens/restore/restore_from_backup_page.dart'; @@ -39,6 +41,7 @@ import 'package:cake_wallet/src/screens/transaction_details/transaction_details_ import 'package:cake_wallet/src/screens/wallet_keys/wallet_keys_page.dart'; import 'package:cake_wallet/src/screens/exchange/exchange_page.dart'; import 'package:cake_wallet/src/screens/exchange/exchange_template_page.dart'; +import 'package:cake_wallet/store/dashboard/orders_store.dart'; import 'package:cake_wallet/store/node_list_store.dart'; import 'package:cake_wallet/store/secret_store.dart'; import 'package:cake_wallet/store/settings_store.dart'; @@ -63,6 +66,7 @@ import 'package:cake_wallet/view_model/exchange/exchange_trade_view_model.dart'; import 'package:cake_wallet/view_model/monero_account_list/account_list_item.dart'; import 'package:cake_wallet/view_model/node_list/node_list_view_model.dart'; import 'package:cake_wallet/view_model/node_list/node_create_or_edit_view_model.dart'; +import 'package:cake_wallet/view_model/order_details_view_model.dart'; import 'package:cake_wallet/view_model/rescan_view_model.dart'; import 'package:cake_wallet/view_model/restore_from_backup_view_model.dart'; import 'package:cake_wallet/view_model/setup_pin_code_view_model.dart'; @@ -115,6 +119,7 @@ Box _tradesSource; Box