Improve Send Workflow (#386)
* remove password query on initial spend screen * report error if send tx fails * better failed tx alert
This commit is contained in:
parent
d78a2be120
commit
5aded68c53
|
@ -431,17 +431,7 @@ public class WalletActivity extends BaseActivity implements WalletFragment.Liste
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onSendRequest() {
|
public void onSendRequest() {
|
||||||
if (needVerifyIdentity) {
|
replaceFragment(new SendFragment(), null, null);
|
||||||
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);
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|
|
@ -216,9 +216,9 @@ public class SendBtcConfirmWizardFragment extends SendWizardFragment implements
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void sendFailed() {
|
public void sendFailed(String error) {
|
||||||
Timber.e("SEND FAILED");
|
|
||||||
pbProgressSend.setVisibility(View.INVISIBLE);
|
pbProgressSend.setVisibility(View.INVISIBLE);
|
||||||
|
Toast.makeText(getContext(), getString(R.string.status_transaction_failed, error), Toast.LENGTH_LONG).show();
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|
|
@ -19,7 +19,7 @@ package com.m2049r.xmrwallet.fragment.send;
|
||||||
import com.m2049r.xmrwallet.model.PendingTransaction;
|
import com.m2049r.xmrwallet.model.PendingTransaction;
|
||||||
|
|
||||||
interface SendConfirm {
|
interface SendConfirm {
|
||||||
void sendFailed();
|
void sendFailed(String errorText);
|
||||||
|
|
||||||
void createTransactionFailed(String errorText);
|
void createTransactionFailed(String errorText);
|
||||||
|
|
||||||
|
|
|
@ -145,17 +145,22 @@ public class SendConfirmWizardFragment extends SendWizardFragment implements Sen
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void sendFailed() {
|
public void sendFailed(String errorText) {
|
||||||
pbProgressSend.setVisibility(View.INVISIBLE);
|
pbProgressSend.setVisibility(View.INVISIBLE);
|
||||||
|
showAlert(getString(R.string.send_create_tx_error_title), errorText);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void createTransactionFailed(String errorText) {
|
public void createTransactionFailed(String errorText) {
|
||||||
hideProgress();
|
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());
|
AlertDialog.Builder builder = new AlertDialog.Builder(getActivity());
|
||||||
builder.setCancelable(true).
|
builder.setCancelable(true).
|
||||||
setTitle(getString(R.string.send_create_tx_error_title)).
|
setTitle(title).
|
||||||
setMessage(errorText).
|
setMessage(message).
|
||||||
create().
|
create().
|
||||||
show();
|
show();
|
||||||
}
|
}
|
||||||
|
|
|
@ -534,12 +534,11 @@ public class SendFragment extends Fragment
|
||||||
public void onSendTransactionFailed(final String error) {
|
public void onSendTransactionFailed(final String error) {
|
||||||
Timber.d("error=%s", error);
|
Timber.d("error=%s", error);
|
||||||
committedTx = null;
|
committedTx = null;
|
||||||
Toast.makeText(getContext(), getString(R.string.status_transaction_failed, error), Toast.LENGTH_SHORT).show();
|
final SendConfirm confirm = getSendConfirm();
|
||||||
enableNavigation();
|
if (confirm != null) {
|
||||||
final SendConfirm fragment = getSendConfirm();
|
confirm.sendFailed(getString(R.string.status_transaction_failed, error));
|
||||||
if (fragment != null) {
|
|
||||||
fragment.sendFailed();
|
|
||||||
}
|
}
|
||||||
|
enableNavigation();
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|
|
@ -340,19 +340,21 @@ public class WalletService extends Service {
|
||||||
Wallet myWallet = getWallet();
|
Wallet myWallet = getWallet();
|
||||||
Timber.d("SEND TX for wallet: %s", myWallet.getName());
|
Timber.d("SEND TX for wallet: %s", myWallet.getName());
|
||||||
PendingTransaction pendingTransaction = myWallet.getPendingTransaction();
|
PendingTransaction pendingTransaction = myWallet.getPendingTransaction();
|
||||||
if ((pendingTransaction == null)
|
if (pendingTransaction == null) {
|
||||||
|| (pendingTransaction.getStatus() != PendingTransaction.Status.Status_Ok)) {
|
throw new IllegalArgumentException("PendingTransaction is null"); // die
|
||||||
|
}
|
||||||
|
if (pendingTransaction.getStatus() != PendingTransaction.Status.Status_Ok) {
|
||||||
Timber.e("PendingTransaction is %s", pendingTransaction.getStatus());
|
Timber.e("PendingTransaction is %s", pendingTransaction.getStatus());
|
||||||
final String error = pendingTransaction.getErrorString();
|
final String error = pendingTransaction.getErrorString();
|
||||||
myWallet.disposePendingTransaction(); // it's broken anyway
|
myWallet.disposePendingTransaction(); // it's broken anyway
|
||||||
if (observer != null) observer.onSendTransactionFailed(error);
|
if (observer != null) observer.onSendTransactionFailed(error);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
final String txid = pendingTransaction.getFirstTxId();
|
final String txid = pendingTransaction.getFirstTxId(); // tx ids vanish after commit()!
|
||||||
boolean success = pendingTransaction.commit("", true);
|
boolean success = pendingTransaction.commit("", true);
|
||||||
myWallet.disposePendingTransaction();
|
|
||||||
if (observer != null) observer.onTransactionSent(txid);
|
|
||||||
if (success) {
|
if (success) {
|
||||||
|
myWallet.disposePendingTransaction();
|
||||||
|
if (observer != null) observer.onTransactionSent(txid);
|
||||||
String notes = extras.getString(REQUEST_CMD_SEND_NOTES);
|
String notes = extras.getString(REQUEST_CMD_SEND_NOTES);
|
||||||
if ((notes != null) && (!notes.isEmpty())) {
|
if ((notes != null) && (!notes.isEmpty())) {
|
||||||
myWallet.setUserNote(txid, notes);
|
myWallet.setUserNote(txid, notes);
|
||||||
|
@ -364,6 +366,11 @@ public class WalletService extends Service {
|
||||||
}
|
}
|
||||||
if (observer != null) observer.onWalletStored(rc);
|
if (observer != null) observer.onWalletStored(rc);
|
||||||
listener.updated = true;
|
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)) {
|
} else if (cmd.equals(REQUEST_CMD_SETNOTE)) {
|
||||||
Wallet myWallet = getWallet();
|
Wallet myWallet = getWallet();
|
||||||
|
|
Loading…
Reference in New Issue