mirror of https://github.com/m2049r/xmrwallet.git
use settleAmount (#768)
This commit is contained in:
parent
2c2a5314d4
commit
c4958f6c54
|
@ -349,7 +349,7 @@ public class SendAddressWizardFragment extends SendWizardFragment {
|
|||
|
||||
private boolean checkAddress() {
|
||||
boolean ok = checkAddressNoError();
|
||||
if (!ok) {
|
||||
if (possibleCryptos.isEmpty()) {
|
||||
etAddress.setError(getString(R.string.send_address_invalid));
|
||||
} else {
|
||||
etAddress.setError(null);
|
||||
|
|
|
@ -90,7 +90,6 @@ public class SendBtcAmountWizardFragment extends SendWizardFragment {
|
|||
return view;
|
||||
}
|
||||
|
||||
|
||||
@Override
|
||||
public boolean onValidateFields() {
|
||||
Timber.i(maxBtc + "/" + minBtc);
|
||||
|
|
|
@ -359,40 +359,22 @@ public class SendBtcConfirmWizardFragment extends SendWizardFragment implements
|
|||
}
|
||||
|
||||
private RequestQuote xmrtoQuote = null;
|
||||
private int stageARetries = 0;
|
||||
private final int RETRIES = 3;
|
||||
private double stageAPrice = 0;
|
||||
|
||||
private void processStageA(final RequestQuote requestQuote) {
|
||||
Timber.d("processCreateOrder %s", requestQuote.getId());
|
||||
TxDataBtc txDataBtc = (TxDataBtc) sendListener.getTxData();
|
||||
// verify the BTC amount is correct (price can change and we can only specify XMR amount)
|
||||
// verify the BTC amount is correct
|
||||
if (requestQuote.getBtcAmount() != txDataBtc.getBtcAmount()) {
|
||||
if (--stageARetries <= 0) {
|
||||
Timber.d("Failed to get quote");
|
||||
getView().post(() ->
|
||||
showStageError(ShiftError.Error.SERVICE.toString(),
|
||||
getString(R.string.shift_noquote),
|
||||
getString(R.string.shift_checkamount)));
|
||||
return; // just stop for now
|
||||
}
|
||||
if (stageAPrice == requestQuote.getPrice()) {
|
||||
// same price but different BTC amount - something else is wrong (e.g. too many decimals)
|
||||
Timber.d("Price unchanged");
|
||||
getView().post(() ->
|
||||
showStageError(ShiftError.Error.SERVICE.toString(),
|
||||
getString(R.string.shift_noquote),
|
||||
getString(R.string.shift_checkamount)));
|
||||
return; // just stop for now
|
||||
}
|
||||
stageAPrice = requestQuote.getPrice();
|
||||
// recalc XMR and try again
|
||||
txDataBtc.setAmount(txDataBtc.getBtcAmount() / requestQuote.getPrice());
|
||||
getView().post(this::stageAOneShot);
|
||||
return; // stageA will run in the main thread
|
||||
Timber.d("Failed to get quote");
|
||||
getView().post(() -> showStageError(ShiftError.Error.SERVICE.toString(),
|
||||
getString(R.string.shift_noquote),
|
||||
getString(R.string.shift_checkamount)));
|
||||
return; // just stop for now
|
||||
}
|
||||
xmrtoQuote = requestQuote;
|
||||
txDataBtc.setAmount(xmrtoQuote.getXmrAmount());
|
||||
getView().post(() -> {
|
||||
// show data from the actual quote as that is what is used to
|
||||
NumberFormat df = NumberFormat.getInstance(Locale.US);
|
||||
df.setMaximumFractionDigits(12);
|
||||
final String btcAmount = df.format(xmrtoQuote.getBtcAmount());
|
||||
|
@ -438,18 +420,12 @@ public class SendBtcConfirmWizardFragment extends SendWizardFragment implements
|
|||
}
|
||||
|
||||
private void stageA() {
|
||||
stageARetries = RETRIES;
|
||||
stageAOneShot();
|
||||
}
|
||||
|
||||
private void stageAOneShot() {
|
||||
if (!isResumed) return;
|
||||
Timber.d("Request Quote");
|
||||
xmrtoQuote = null;
|
||||
xmrtoOrder = null;
|
||||
showProgress(1, getString(R.string.label_send_progress_xmrto_create));
|
||||
TxDataBtc txDataBtc = (TxDataBtc) sendListener.getTxData();
|
||||
stageAPrice = 0;
|
||||
|
||||
ShiftCallback<RequestQuote> callback = new ShiftCallback<RequestQuote>() {
|
||||
@Override
|
||||
|
@ -473,7 +449,7 @@ public class SendBtcConfirmWizardFragment extends SendWizardFragment implements
|
|||
}
|
||||
};
|
||||
|
||||
getXmrToApi().requestQuote(txDataBtc.getAmountAsDouble(), callback);
|
||||
getXmrToApi().requestQuote(txDataBtc.getBtcAmount(), callback);
|
||||
}
|
||||
|
||||
private CreateOrder xmrtoOrder = null;
|
||||
|
|
|
@ -74,10 +74,10 @@ class RequestQuoteImpl implements RequestQuote {
|
|||
price = jsonObject.getDouble("rate");
|
||||
}
|
||||
|
||||
public static void call(@NonNull final ShiftApiCall api, final double xmrAmount,
|
||||
public static void call(@NonNull final ShiftApiCall api, final double btcAmount,
|
||||
@NonNull final ShiftCallback<RequestQuote> callback) {
|
||||
try {
|
||||
final JSONObject request = createRequest(xmrAmount);
|
||||
final JSONObject request = createRequest(btcAmount);
|
||||
api.call("quotes", request, new NetworkCallback() {
|
||||
@Override
|
||||
public void onSuccess(JSONObject jsonObject) {
|
||||
|
@ -104,13 +104,13 @@ class RequestQuoteImpl implements RequestQuote {
|
|||
* @param xmrAmount how much XMR to shift to BTC
|
||||
*/
|
||||
|
||||
static JSONObject createRequest(final double xmrAmount) throws JSONException {
|
||||
static JSONObject createRequest(final double btcAmount) throws JSONException {
|
||||
final JSONObject jsonObject = new JSONObject();
|
||||
jsonObject.put("depositMethod", "xmr");
|
||||
jsonObject.put("settleMethod", ServiceHelper.ASSET);
|
||||
// #sideshift is silly and likes numbers as strings
|
||||
String amount = AmountFormatter.format(xmrAmount);
|
||||
jsonObject.put("depositAmount", amount);
|
||||
String amount = AmountFormatter.format(btcAmount);
|
||||
jsonObject.put("settleAmount", amount);
|
||||
return jsonObject;
|
||||
}
|
||||
|
||||
|
|
|
@ -64,8 +64,8 @@ public class SideShiftApiImpl implements SideShiftApi, ShiftApiCall {
|
|||
}
|
||||
|
||||
@Override
|
||||
public void requestQuote(final double xmrAmount, @NonNull final ShiftCallback<RequestQuote> callback) {
|
||||
RequestQuoteImpl.call(this, xmrAmount, callback);
|
||||
public void requestQuote(final double btcAmount, @NonNull final ShiftCallback<RequestQuote> callback) {
|
||||
RequestQuoteImpl.call(this, btcAmount, callback);
|
||||
}
|
||||
|
||||
@Override
|
||||
|
|
|
@ -95,7 +95,7 @@ public class SideShiftApiRequestQuoteTest {
|
|||
@Test
|
||||
public void requestQuote_shouldContainValidBody() throws InterruptedException {
|
||||
|
||||
final String validBody = "{\"depositAmount\":\"1.01\",\"settleMethod\":\"btc\",\"depositMethod\":\"xmr\"}";
|
||||
final String validBody = "{\"settleAmount\":\"1.01\",\"settleMethod\":\"btc\",\"depositMethod\":\"xmr\"}";
|
||||
xmrToApi.requestQuote(1.01, mockXmrToCallback);
|
||||
|
||||
RecordedRequest request = mockWebServer.takeRequest();
|
||||
|
@ -106,18 +106,18 @@ public class SideShiftApiRequestQuoteTest {
|
|||
@Test
|
||||
public void requestQuote_wasSuccessfulShouldRespondWithQuote()
|
||||
throws TimeoutException {
|
||||
final double xmrAmount = 1.01;
|
||||
final double btcAmount = 1.01;
|
||||
final double rate = 0.00397838;
|
||||
final String uuid = "66fc0749-f320-4361-b0fb-7873576cba67";
|
||||
MockResponse jsonMockResponse = new MockResponse().setBody(
|
||||
createMockRequestQuoteResponse(xmrAmount, rate, uuid));
|
||||
createMockRequestQuoteResponse(btcAmount, rate, uuid));
|
||||
mockWebServer.enqueue(jsonMockResponse);
|
||||
|
||||
xmrToApi.requestQuote(xmrAmount, new ShiftCallback<RequestQuote>() {
|
||||
xmrToApi.requestQuote(btcAmount, new ShiftCallback<RequestQuote>() {
|
||||
@Override
|
||||
public void onSuccess(final RequestQuote quote) {
|
||||
waiter.assertEquals(quote.getBtcAmount(), xmrAmount * rate);
|
||||
waiter.assertEquals(quote.getXmrAmount(), xmrAmount);
|
||||
waiter.assertEquals(quote.getXmrAmount(), btcAmount / rate);
|
||||
waiter.assertEquals(quote.getBtcAmount(), btcAmount);
|
||||
waiter.assertEquals(quote.getId(), uuid);
|
||||
waiter.resume();
|
||||
}
|
||||
|
@ -181,17 +181,17 @@ public class SideShiftApiRequestQuoteTest {
|
|||
waiter.await();
|
||||
}
|
||||
|
||||
private String createMockRequestQuoteResponse(final double xmrAmount, final double rate,
|
||||
private String createMockRequestQuoteResponse(final double btcAmount, final double rate,
|
||||
final String uuid) {
|
||||
|
||||
return "{\n" +
|
||||
"\"createdAt\":\"2021-02-04T13:09:14.484Z\",\n" +
|
||||
"\"depositAmount\":\"" + xmrAmount + "\",\n" +
|
||||
"\"settleAmount\":\"" + btcAmount + "\",\n" +
|
||||
"\"depositMethod\":\"xmr\",\n" +
|
||||
"\"expiresAt\":\"2021-02-04T13:24:14.484Z\",\n" +
|
||||
"\"id\":\"" + uuid + "\",\n" +
|
||||
"\"rate\":\"" + rate + "\",\n" +
|
||||
"\"settleAmount\":\"" + (xmrAmount * rate) + "\",\n" +
|
||||
"\"depositAmount\":\"" + (btcAmount / rate) + "\",\n" +
|
||||
"\"settleMethod\":\"btc\"\n" +
|
||||
"}";
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue