Merge branch 'main' of https://github.com/cake-tech/cake_wallet into CW-20-rework-templates-on-exchange-screen

This commit is contained in:
Godwin Asuquo 2022-01-31 14:20:40 +01:00
commit 26f108ceb6
11 changed files with 98 additions and 45 deletions

View file

@ -42,4 +42,11 @@
android:name="flutterEmbedding"
android:value="2" />
</application>
<queries>
<intent>
<action android:name="android.intent.action.VIEW" />
<data android:scheme="https" />
</intent>
</queries>
</manifest>

View file

@ -1,5 +1,4 @@
import 'package:cw_core/transaction_direction.dart';
//import 'package:cake_wallet/utils/mobx.dart';
import 'package:cw_core/keyable.dart';
abstract class TransactionInfo extends Object with Keyable {
@ -18,4 +17,6 @@ abstract class TransactionInfo extends Object with Keyable {
@override
dynamic get keyIndex => id;
Map<String, dynamic> additionalInfo;
}

View file

@ -23,7 +23,13 @@ class MoneroTransactionInfo extends TransactionInfo {
accountIndex = int.parse(map['accountIndex'] as String),
addressIndex = map['addressIndex'] as int,
key = getTxKey((map['hash'] ?? '') as String),
fee = map['fee'] as int ?? 0;
fee = map['fee'] as int ?? 0 {
additionalInfo = {
'key': key,
'accountIndex': accountIndex,
'addressIndex': addressIndex
};
}
MoneroTransactionInfo.fromRow(TransactionInfoRow row)
: id = row.getHash(),
@ -36,7 +42,13 @@ class MoneroTransactionInfo extends TransactionInfo {
accountIndex = row.subaddrAccount,
addressIndex = row.subaddrIndex,
key = getTxKey(row.getHash()),
fee = row.fee;
fee = row.fee {
additionalInfo = {
'key': key,
'accountIndex': accountIndex,
'addressIndex': addressIndex
};
}
final String id;
final int height;

View file

@ -288,4 +288,9 @@ class CWMonero extends Monero {
WalletService createMoneroWalletService(Box<WalletInfo> walletInfoSource) {
return MoneroWalletService(walletInfoSource);
}
String getTransactionAddress(Object wallet, int accountIndex, int addressIndex) {
final moneroWallet = wallet as MoneroWallet;
return moneroWallet.getTransactionAddress(accountIndex, addressIndex);
}
}

View file

@ -3,9 +3,13 @@ import 'package:cake_wallet/exchange/exchange_provider.dart';
import 'package:cake_wallet/exchange/exchange_template.dart';
import 'package:cake_wallet/src/screens/base_page.dart';
import 'package:cake_wallet/src/widgets/alert_with_two_actions.dart';
import 'package:cake_wallet/src/widgets/keyboard_done_button.dart';
import 'package:flutter/cupertino.dart';
import 'package:flutter/material.dart';
import 'package:flutter_mobx/flutter_mobx.dart';
import 'package:keyboard_actions/keyboard_actions.dart';
import 'package:keyboard_actions/keyboard_actions_config.dart';
import 'package:keyboard_actions/keyboard_actions_item.dart';
import 'package:mobx/mobx.dart';
import 'package:cake_wallet/generated/i18n.dart';
import 'package:cw_core/crypto_currency.dart';
@ -28,6 +32,8 @@ class ExchangeTemplatePage extends BasePage {
final depositKey = GlobalKey<ExchangeCardState>();
final receiveKey = GlobalKey<ExchangeCardState>();
final _formKey = GlobalKey<FormState>();
final _depositAmountFocus = FocusNode();
final _receiveAmountFocus = FocusNode();
var _isReactionsSet = false;
@override
@ -36,9 +42,6 @@ class ExchangeTemplatePage extends BasePage {
@override
Color get titleColor => Colors.white;
@override
bool get resizeToAvoidBottomInset => false;
@override
bool get extendBodyBehindAppBar => true;
@ -74,7 +77,22 @@ class ExchangeTemplatePage extends BasePage {
WidgetsBinding.instance
.addPostFrameCallback((_) => _setReactions(context, exchangeViewModel));
return Container(
return KeyboardActions(
disableScroll: true,
config: KeyboardActionsConfig(
keyboardActionsPlatform: KeyboardActionsPlatform.IOS,
keyboardBarColor:
Theme.of(context).accentTextTheme.body2.backgroundColor,
nextFocus: false,
actions: [
KeyboardActionsItem(
focusNode: _depositAmountFocus,
toolbarButtons: [(_) => KeyboardDoneButton()]),
KeyboardActionsItem(
focusNode: _receiveAmountFocus,
toolbarButtons: [(_) => KeyboardDoneButton()])
]),
child: Container(
color: Theme.of(context).backgroundColor,
child: Form(
key: _formKey,
@ -121,6 +139,7 @@ class ExchangeTemplatePage extends BasePage {
padding: EdgeInsets.fromLTRB(24, 90, 24, 32),
child: Observer(
builder: (_) => ExchangeCard(
amountFocusNode: _depositAmountFocus,
key: depositKey,
title: S.of(context).you_will_send,
initialCurrency:
@ -160,6 +179,7 @@ class ExchangeTemplatePage extends BasePage {
padding: EdgeInsets.only(top: 29, left: 24, right: 24),
child: Observer(
builder: (_) => ExchangeCard(
amountFocusNode: _receiveAmountFocus,
key: receiveKey,
title: S.of(context).you_will_get,
initialCurrency:
@ -244,6 +264,7 @@ class ExchangeTemplatePage extends BasePage {
textColor: Colors.white),
]),
))
)
);
}

View file

@ -197,7 +197,6 @@ class SendPage extends BasePage {
itemCount: itemCount,
itemBuilder: (context, index) {
final template = templates[index];
return TemplateTile(
key: UniqueKey(),
to: template.name,

View file

@ -29,8 +29,11 @@ part 'send_view_model.g.dart';
class SendViewModel = SendViewModelBase with _$SendViewModel;
abstract class SendViewModelBase with Store {
SendViewModelBase(this._wallet, this._settingsStore,
this.sendTemplateViewModel, this._fiatConversationStore,
SendViewModelBase(
this._wallet,
this._settingsStore,
this.sendTemplateViewModel,
this._fiatConversationStore,
this.transactionDescriptionBox)
: state = InitialExecutionState() {
final priority = _settingsStore.priority[_wallet.type];
@ -127,15 +130,17 @@ abstract class SendViewModelBase with Store {
bool get isReadyForSend => _wallet.syncStatus is SyncedSyncStatus;
@computed
ObservableList<Template> get templates => sendTemplateViewModel.templates;
List<Template> get templates => sendTemplateViewModel.templates
.where((template) => _isEqualCurrency(template.cryptoCurrency))
.toList();
@computed
bool get isElectrumWallet => _wallet.type == WalletType.bitcoin || _wallet.type == WalletType.litecoin;
bool get hasYat
=> outputs.any((out) => out.isParsedAddress
&& out.parsedAddress.parseFrom == ParseFrom.yatRecord);
bool get isElectrumWallet =>
_wallet.type == WalletType.bitcoin || _wallet.type == WalletType.litecoin;
bool get hasYat => outputs.any((out) =>
out.isParsedAddress &&
out.parsedAddress.parseFrom == ParseFrom.yatRecord);
WalletType get walletType => _wallet.type;
final WalletBase _wallet;
@ -200,19 +205,16 @@ abstract class SendViewModelBase with Store {
case WalletType.bitcoin:
final priority = _settingsStore.priority[_wallet.type];
return bitcoin.createBitcoinTransactionCredentials(
outputs, priority);
return bitcoin.createBitcoinTransactionCredentials(outputs, priority);
case WalletType.litecoin:
final priority = _settingsStore.priority[_wallet.type];
return bitcoin.createBitcoinTransactionCredentials(
outputs, priority);
return bitcoin.createBitcoinTransactionCredentials(outputs, priority);
case WalletType.monero:
final priority = _settingsStore.priority[_wallet.type];
return monero.createMoneroTransactionCreationCredentials(
outputs: outputs,
priority: priority);
outputs: outputs, priority: priority);
default:
return null;
}
@ -229,4 +231,7 @@ abstract class SendViewModelBase with Store {
return priority.toString();
}
bool _isEqualCurrency(String currency) =>
currency.toLowerCase() == _wallet.currency.title.toLowerCase();
}

View file

@ -13,6 +13,7 @@ import 'package:mobx/mobx.dart';
import 'package:cake_wallet/store/settings_store.dart';
import 'package:cake_wallet/generated/i18n.dart';
import 'package:url_launcher/url_launcher.dart';
import 'package:cake_wallet/monero/monero.dart';
part 'transaction_details_view_model.g.dart';
@ -31,6 +32,9 @@ abstract class TransactionDetailsViewModelBase with Store {
final dateFormat = DateFormatter.withCurrentLocal();
final tx = transactionInfo;
final key = tx.additionalInfo['key'] as String;
final accountIndex = tx.additionalInfo['accountIndex'] as int;
final addressIndex = tx.additionalInfo['addressIndex'] as int;
if (wallet.type == WalletType.monero) {
final _items = [
@ -46,30 +50,27 @@ abstract class TransactionDetailsViewModelBase with Store {
value: tx.amountFormatted()),
StandartListItem(
title: S.current.transaction_details_fee, value: tx.feeFormatted()),
if (key?.isNotEmpty ?? false)
StandartListItem(title: S.current.transaction_key, value: key)
];
//if (tx.key?.isNotEmpty ?? null) {
// _items.add(
// StandartListItem(title: S.current.transaction_key, value: tx.key));
//}
if (tx.direction == TransactionDirection.incoming &&
accountIndex != null &&
addressIndex != null) {
try {
final address = monero.getTransactionAddress(wallet, accountIndex, addressIndex);
//if (tx.direction == TransactionDirection.incoming) {
// try {
// final accountIndex = tx.accountIndex;
// final addressIndex = tx.addressIndex;
//final address = moneroUtils.getTransactionAddress(wallet, accountIndex, addressIndex);
//if (address?.isNotEmpty ?? false) {
// isRecipientAddressShown = true;
// _items.add(
// StandartListItem(
// title: S.current.transaction_details_recipient_address,
// value: address));
//}
// } catch (e) {
// print(e.toString());
// }
//}
if (address?.isNotEmpty ?? false) {
isRecipientAddressShown = true;
_items.add(
StandartListItem(
title: S.current.transaction_details_recipient_address,
value: address));
}
} catch (e) {
print(e.toString());
}
}
items.addAll(_items);
}

View file

@ -20,7 +20,7 @@ MONERO_COM_PACKAGE="com.monero.app"
CAKEWALLET_NAME="Cake Wallet"
CAKEWALLET_VERSION="4.3.5"
CAKEWALLET_BUILD_NUMBER=84
CAKEWALLET_BUILD_NUMBER=85
CAKEWALLET_BUNDLE_ID="com.cakewallet.cake_wallet"
CAKEWALLET_PACKAGE="com.cakewallet.cake_wallet"

View file

@ -18,7 +18,7 @@ MONERO_COM_BUNDLE_ID="com.cakewallet.monero"
CAKEWALLET_NAME="Cake Wallet"
CAKEWALLET_VERSION="4.3.5"
CAKEWALLET_BUILD_NUMBER=78
CAKEWALLET_BUILD_NUMBER=80
CAKEWALLET_BUNDLE_ID="com.fotolockr.cakewallet"
if ! [[ " ${TYPES[*]} " =~ " ${APP_IOS_TYPE} " ]]; then

View file

@ -204,6 +204,8 @@ abstract class Monero {
MoneroWalletDetails getMoneroWalletDetails(Object wallet);
String getTransactionAddress(Object wallet, int accountIndex, int addressIndex);
int getHeigthByDate({DateTime date});
TransactionPriority getDefaultTransactionPriority();
TransactionPriority deserializeMoneroTransactionPriority({int raw});