Fixes for backups for Android. Fixes for send almost all amount.

This commit is contained in:
M
2021-01-29 22:18:07 +02:00
parent 5631961e47
commit 2ce34919bf
10 changed files with 60 additions and 21 deletions
+14 -7
View File
@@ -261,14 +261,20 @@ abstract class BitcoinWalletBase extends WalletBase<BitcoinBalance> with Store {
@override
Future<PendingBitcoinTransaction> createTransaction(
Object credentials) async {
const minAmount = 546;
final transactionCredentials = credentials as BitcoinTransactionCredentials;
final inputs = <BitcoinUnspent>[];
final allAmountFee =
calculateEstimatedFee(transactionCredentials.priority, null);
final allAmount = balance.confirmed - allAmountFee;
var fee = 0;
final amount = transactionCredentials.amount != null
final credentialsAmount = transactionCredentials.amount != null
? stringDoubleToBitcoinAmount(transactionCredentials.amount)
: balance.confirmed - allAmountFee;
: 0;
final amount = transactionCredentials.amount == null ||
allAmount - credentialsAmount < minAmount
? allAmount
: credentialsAmount;
final txb = bitcoin.TransactionBuilder(network: bitcoin.bitcoin);
final changeAddress = address;
var leftAmount = amount;
@@ -294,8 +300,8 @@ abstract class BitcoinWalletBase extends WalletBase<BitcoinBalance> with Store {
final totalAmount = amount + fee;
fee = transactionCredentials.amount != null
? feeAmountForPriority(
transactionCredentials.priority, inputs.length, 2)
? feeAmountForPriority(transactionCredentials.priority, inputs.length,
amount == allAmount ? 1 : 2)
: allAmountFee;
if (totalAmount > balance.confirmed) {
@@ -329,7 +335,7 @@ abstract class BitcoinWalletBase extends WalletBase<BitcoinBalance> with Store {
final feeAmount = transactionCredentials.priority.rate * estimatedSize;
final changeValue = totalInputAmount - amount - feeAmount;
if (changeValue > 0) {
if (changeValue > minAmount) {
txb.addOutput(changeAddress, changeValue);
}
@@ -375,8 +381,9 @@ abstract class BitcoinWalletBase extends WalletBase<BitcoinBalance> with Store {
} else {
inputsCount = _unspent.length;
}
return feeAmountForPriority(priority, inputsCount, 2);
// If send all, then we have no change value
return feeAmountForPriority(
priority, inputsCount, amount != null ? 2 : 1);
}
return 0;
+9 -3
View File
@@ -14,6 +14,7 @@ import 'package:cake_wallet/utils/show_pop_up.dart';
import 'package:cake_wallet/view_model/backup_view_model.dart';
import 'package:cake_wallet/core/execution_state.dart';
import 'package:cake_wallet/src/screens/base_page.dart';
import 'package:permission_handler/permission_handler.dart';
class BackupPage extends BasePage {
BackupPage(this.backupViewModelBase);
@@ -99,8 +100,6 @@ class BackupPage extends BasePage {
actionRightButton: () async {
Navigator.of(dialogContext).pop();
final backup = await backupViewModelBase.exportBackup();
await backupViewModelBase.saveToDownload(
backup.name, backup.content);
if (Platform.isAndroid) {
onExportAndroid(context, backup);
@@ -123,9 +122,16 @@ class BackupPage extends BasePage {
rightButtonText: 'Save to Downloads',
leftButtonText: 'Share',
actionRightButton: () async {
Navigator.of(dialogContext).pop();
final permission = await Permission.storage.request();
if (permission.isDenied) {
Navigator.of(dialogContext).pop();
return;
}
await backupViewModelBase.saveToDownload(
backup.name, backup.content);
Navigator.of(dialogContext).pop();
},
actionLeftButton: () {
Navigator.of(dialogContext).pop();
@@ -255,11 +255,11 @@ class ExchangeTradeState extends State<ExchangeTradeForm> {
.pendingTransaction.feeFormatted,
rightButtonText: S.of(context).ok,
leftButtonText: S.of(context).cancel,
actionRightButton: () {
actionRightButton: () async {
Navigator.of(context).pop();
widget.exchangeTradeViewModel.sendViewModel
await widget.exchangeTradeViewModel.sendViewModel
.commitTransaction();
showPopUp<void>(
await showPopUp<void>(
context: context,
builder: (BuildContext context) {
return Observer(builder: (_) {
@@ -359,10 +359,10 @@ class ExchangeTradeState extends State<ExchangeTradeForm> {
});
},
actionLeftButton: () => Navigator.of(context).pop(),
feeFiatAmount: widget.exchangeTradeViewModel.sendViewModel
.pendingTransaction.feeFormatted,
feeFiatAmount: widget.exchangeTradeViewModel.sendViewModel.pendingTransactionFeeFiatAmount
+ ' ' + widget.exchangeTradeViewModel.sendViewModel.fiat.title,
fiatAmountValue: widget.exchangeTradeViewModel.sendViewModel
.pendingTransactionFeeFiatAmount +
.pendingTransactionFiatAmount +
' ' +
widget.exchangeTradeViewModel.sendViewModel.fiat.title,
recipientTitle: S.of(context).recipient_address,
+4 -2
View File
@@ -1,5 +1,4 @@
import 'dart:io';
import 'package:cake_wallet/core/backup_service.dart';
import 'package:cake_wallet/core/execution_state.dart';
import 'package:cake_wallet/entities/secret_store_key.dart';
@@ -7,6 +6,7 @@ import 'package:cake_wallet/store/secret_store.dart';
import 'package:flutter/foundation.dart';
import 'package:flutter_secure_storage/flutter_secure_storage.dart';
import 'package:mobx/mobx.dart';
import 'package:intl/intl.dart';
part 'backup_view_model.g.dart';
@@ -56,9 +56,11 @@ abstract class BackupViewModelBase with Store {
state = IsExecutingState();
final backupContent = await backupService.exportBackup(backupPassword);
state = ExecutedSuccessfullyState();
final now = DateTime.now();
final formatter = DateFormat('yyyy-MM-dd_Hm');
return BackupExportFile(backupContent.toList(),
name: 'backup_${DateTime.now().toString()}.zip');
name: 'cake_wallet_backup_${formatter.format(now)}');
} catch (e) {
print(e.toString());
state = FailureState(e.toString());
+1
View File
@@ -167,6 +167,7 @@ abstract class SendViewModelBase with Store {
Validator get templateValidator => TemplateValidator();
@observable
PendingTransaction pendingTransaction;
@computed