From 5aded68c536a8b1be2a7937fabf41456875c5208 Mon Sep 17 00:00:00 2001 From: m2049r Date: Sat, 11 Aug 2018 12:23:00 +0200 Subject: [PATCH] Improve Send Workflow (#386) * remove password query on initial spend screen * report error if send tx fails * better failed tx alert --- .../com/m2049r/xmrwallet/WalletActivity.java | 12 +----------- .../send/SendBtcConfirmWizardFragment.java | 4 ++-- .../xmrwallet/fragment/send/SendConfirm.java | 2 +- .../send/SendConfirmWizardFragment.java | 11 ++++++++--- .../xmrwallet/fragment/send/SendFragment.java | 9 ++++----- .../m2049r/xmrwallet/service/WalletService.java | 17 ++++++++++++----- 6 files changed, 28 insertions(+), 27 deletions(-) diff --git a/app/src/main/java/com/m2049r/xmrwallet/WalletActivity.java b/app/src/main/java/com/m2049r/xmrwallet/WalletActivity.java index bc91dd1..cfc81c3 100644 --- a/app/src/main/java/com/m2049r/xmrwallet/WalletActivity.java +++ b/app/src/main/java/com/m2049r/xmrwallet/WalletActivity.java @@ -431,17 +431,7 @@ public class WalletActivity extends BaseActivity implements WalletFragment.Liste @Override public void onSendRequest() { - if (needVerifyIdentity) { - Helper.promptPassword(WalletActivity.this, getWallet().getName(), true, new Helper.PasswordAction() { - @Override - public void action(String walletName, String password, boolean fingerprintUsed) { - replaceFragment(new SendFragment(), null, null); - needVerifyIdentity = false; - } - }); - } else { - replaceFragment(new SendFragment(), null, null); - } + replaceFragment(new SendFragment(), null, null); } @Override diff --git a/app/src/main/java/com/m2049r/xmrwallet/fragment/send/SendBtcConfirmWizardFragment.java b/app/src/main/java/com/m2049r/xmrwallet/fragment/send/SendBtcConfirmWizardFragment.java index 9288870..667bb50 100644 --- a/app/src/main/java/com/m2049r/xmrwallet/fragment/send/SendBtcConfirmWizardFragment.java +++ b/app/src/main/java/com/m2049r/xmrwallet/fragment/send/SendBtcConfirmWizardFragment.java @@ -216,9 +216,9 @@ public class SendBtcConfirmWizardFragment extends SendWizardFragment implements } @Override - public void sendFailed() { - Timber.e("SEND FAILED"); + public void sendFailed(String error) { pbProgressSend.setVisibility(View.INVISIBLE); + Toast.makeText(getContext(), getString(R.string.status_transaction_failed, error), Toast.LENGTH_LONG).show(); } @Override diff --git a/app/src/main/java/com/m2049r/xmrwallet/fragment/send/SendConfirm.java b/app/src/main/java/com/m2049r/xmrwallet/fragment/send/SendConfirm.java index 965ca4c..69e97c8 100644 --- a/app/src/main/java/com/m2049r/xmrwallet/fragment/send/SendConfirm.java +++ b/app/src/main/java/com/m2049r/xmrwallet/fragment/send/SendConfirm.java @@ -19,7 +19,7 @@ package com.m2049r.xmrwallet.fragment.send; import com.m2049r.xmrwallet.model.PendingTransaction; interface SendConfirm { - void sendFailed(); + void sendFailed(String errorText); void createTransactionFailed(String errorText); diff --git a/app/src/main/java/com/m2049r/xmrwallet/fragment/send/SendConfirmWizardFragment.java b/app/src/main/java/com/m2049r/xmrwallet/fragment/send/SendConfirmWizardFragment.java index fe8395f..4b89c2e 100644 --- a/app/src/main/java/com/m2049r/xmrwallet/fragment/send/SendConfirmWizardFragment.java +++ b/app/src/main/java/com/m2049r/xmrwallet/fragment/send/SendConfirmWizardFragment.java @@ -145,17 +145,22 @@ public class SendConfirmWizardFragment extends SendWizardFragment implements Sen } @Override - public void sendFailed() { + public void sendFailed(String errorText) { pbProgressSend.setVisibility(View.INVISIBLE); + showAlert(getString(R.string.send_create_tx_error_title), errorText); } @Override public void createTransactionFailed(String errorText) { hideProgress(); + showAlert(getString(R.string.send_create_tx_error_title), errorText); + } + + private void showAlert(String title, String message) { AlertDialog.Builder builder = new AlertDialog.Builder(getActivity()); builder.setCancelable(true). - setTitle(getString(R.string.send_create_tx_error_title)). - setMessage(errorText). + setTitle(title). + setMessage(message). create(). show(); } diff --git a/app/src/main/java/com/m2049r/xmrwallet/fragment/send/SendFragment.java b/app/src/main/java/com/m2049r/xmrwallet/fragment/send/SendFragment.java index e2964a1..bdf13dd 100644 --- a/app/src/main/java/com/m2049r/xmrwallet/fragment/send/SendFragment.java +++ b/app/src/main/java/com/m2049r/xmrwallet/fragment/send/SendFragment.java @@ -534,12 +534,11 @@ public class SendFragment extends Fragment public void onSendTransactionFailed(final String error) { Timber.d("error=%s", error); committedTx = null; - Toast.makeText(getContext(), getString(R.string.status_transaction_failed, error), Toast.LENGTH_SHORT).show(); - enableNavigation(); - final SendConfirm fragment = getSendConfirm(); - if (fragment != null) { - fragment.sendFailed(); + final SendConfirm confirm = getSendConfirm(); + if (confirm != null) { + confirm.sendFailed(getString(R.string.status_transaction_failed, error)); } + enableNavigation(); } @Override diff --git a/app/src/main/java/com/m2049r/xmrwallet/service/WalletService.java b/app/src/main/java/com/m2049r/xmrwallet/service/WalletService.java index e06f9e6..f5d67df 100644 --- a/app/src/main/java/com/m2049r/xmrwallet/service/WalletService.java +++ b/app/src/main/java/com/m2049r/xmrwallet/service/WalletService.java @@ -340,19 +340,21 @@ public class WalletService extends Service { Wallet myWallet = getWallet(); Timber.d("SEND TX for wallet: %s", myWallet.getName()); PendingTransaction pendingTransaction = myWallet.getPendingTransaction(); - if ((pendingTransaction == null) - || (pendingTransaction.getStatus() != PendingTransaction.Status.Status_Ok)) { + if (pendingTransaction == null) { + throw new IllegalArgumentException("PendingTransaction is null"); // die + } + if (pendingTransaction.getStatus() != PendingTransaction.Status.Status_Ok) { Timber.e("PendingTransaction is %s", pendingTransaction.getStatus()); final String error = pendingTransaction.getErrorString(); myWallet.disposePendingTransaction(); // it's broken anyway if (observer != null) observer.onSendTransactionFailed(error); return; } - final String txid = pendingTransaction.getFirstTxId(); + final String txid = pendingTransaction.getFirstTxId(); // tx ids vanish after commit()! boolean success = pendingTransaction.commit("", true); - myWallet.disposePendingTransaction(); - if (observer != null) observer.onTransactionSent(txid); if (success) { + myWallet.disposePendingTransaction(); + if (observer != null) observer.onTransactionSent(txid); String notes = extras.getString(REQUEST_CMD_SEND_NOTES); if ((notes != null) && (!notes.isEmpty())) { myWallet.setUserNote(txid, notes); @@ -364,6 +366,11 @@ public class WalletService extends Service { } if (observer != null) observer.onWalletStored(rc); listener.updated = true; + } else { + final String error = pendingTransaction.getErrorString(); + myWallet.disposePendingTransaction(); + if (observer != null) observer.onSendTransactionFailed(error); + return; } } else if (cmd.equals(REQUEST_CMD_SETNOTE)) { Wallet myWallet = getWallet();