Add spinner, status info and blocking popup at take offer

This commit is contained in:
Manfred Karrer 2016-03-03 02:05:04 +01:00
parent ba727ebb16
commit de569b4700
5 changed files with 21 additions and 17 deletions

View file

@ -529,7 +529,7 @@ public class CreateOfferView extends ActivatableViewAndModel<AnchorPane, CreateO
}) })
.onClose(this::close) .onClose(this::close)
.show(), .show(),
100, TimeUnit.MILLISECONDS); 500, TimeUnit.MILLISECONDS);
} }
}; };
} }

View file

@ -342,8 +342,8 @@ class CreateOfferViewModel extends ActivatableWithDataModel<CreateOfferDataModel
offer.errorMessageProperty().addListener(errorMessageListener); offer.errorMessageProperty().addListener(errorMessageListener);
dataModel.onPlaceOffer(offer, transaction -> { dataModel.onPlaceOffer(offer, transaction -> {
stopTimeoutTimer(); stopTimeoutTimer();
placeOfferCompleted.set(true);
resultHandler.run(); resultHandler.run();
placeOfferCompleted.set(true);
errorMessage.set(null); errorMessage.set(null);
}); });
} }

View file

@ -217,12 +217,9 @@ public class TakeOfferView extends ActivatableViewAndModel<AnchorPane, TakeOffer
}); });
showTransactionPublishedScreenSubscription = EasyBind.subscribe(model.showTransactionPublishedScreen, newValue -> { showTransactionPublishedScreenSubscription = EasyBind.subscribe(model.showTransactionPublishedScreen, newValue -> {
if (newValue && BitsquareApp.DEV_MODE) { if (newValue && BitsquareApp.DEV_MODE) {
newValue = false;
close(); close();
navigation.navigateTo(MainView.class, PortfolioView.class, PendingTradesView.class); navigation.navigateTo(MainView.class, PortfolioView.class, PendingTradesView.class);
} } else if (newValue && model.getTrade() != null && model.getTrade().errorMessageProperty().get() == null) {
if (newValue && model.getTrade() != null && model.getTrade().errorMessageProperty().get() == null) {
UserThread.runAfter( UserThread.runAfter(
() -> new Popup().headLine(BSResources.get("takeOffer.success.headline")) () -> new Popup().headLine(BSResources.get("takeOffer.success.headline"))
.feedback(BSResources.get("takeOffer.success.info")) .feedback(BSResources.get("takeOffer.success.info"))
@ -234,7 +231,7 @@ public class TakeOfferView extends ActivatableViewAndModel<AnchorPane, TakeOffer
, 100, TimeUnit.MILLISECONDS); , 100, TimeUnit.MILLISECONDS);
}) })
.onClose(this::close) .onClose(this::close)
.show(), 100, TimeUnit.MILLISECONDS); .show(), 500, TimeUnit.MILLISECONDS);
} }
}); });
@ -373,9 +370,10 @@ public class TakeOfferView extends ActivatableViewAndModel<AnchorPane, TakeOffer
private void onTakeOffer() { private void onTakeOffer() {
if (model.hasAcceptedArbitrators()) { if (model.hasAcceptedArbitrators()) {
offerDetailsWindow.onTakeOffer(() -> model.onTakeOffer()) offerDetailsWindow.onTakeOffer(() ->
model.onTakeOffer(() ->
offerDetailsWindow.hide()))
.show(model.getOffer(), model.dataModel.amountAsCoin.get()); .show(model.getOffer(), model.dataModel.amountAsCoin.get());
} else { } else {
new Popup().warning("You have no arbitrator selected.\n" + new Popup().warning("You have no arbitrator selected.\n" +
"You need to select at least one arbitrator.") "You need to select at least one arbitrator.")

View file

@ -91,6 +91,7 @@ class TakeOfferViewModel extends ActivatableWithDataModel<TakeOfferDataModel> im
private ChangeListener<String> offerErrorListener; private ChangeListener<String> offerErrorListener;
private ConnectionListener connectionListener; private ConnectionListener connectionListener;
private ChangeListener<Coin> feeFromFundingTxListener; private ChangeListener<Coin> feeFromFundingTxListener;
private Runnable takeOfferSucceededHandler;
/////////////////////////////////////////////////////////////////////////////////////////// ///////////////////////////////////////////////////////////////////////////////////////////
@ -177,11 +178,12 @@ class TakeOfferViewModel extends ActivatableWithDataModel<TakeOfferDataModel> im
// UI actions // UI actions
/////////////////////////////////////////////////////////////////////////////////////////// ///////////////////////////////////////////////////////////////////////////////////////////
void onTakeOffer() { void onTakeOffer(Runnable resultHandler) {
takeOfferSucceededHandler = resultHandler;
takeOfferRequested = true; takeOfferRequested = true;
showTransactionPublishedScreen.set(false); showTransactionPublishedScreen.set(false);
isTakeOfferSpinnerVisible.set(true); //isTakeOfferSpinnerVisible.set(true);
takeOfferSpinnerInfoText.set(BSResources.get("takeOffer.fundsBox.takeOfferSpinnerInfo")); //takeOfferSpinnerInfoText.set(BSResources.get("takeOffer.fundsBox.takeOfferSpinnerInfo"));
dataModel.onTakeOffer(trade -> { dataModel.onTakeOffer(trade -> {
this.trade = trade; this.trade = trade;
trade.stateProperty().addListener(tradeStateListener); trade.stateProperty().addListener(tradeStateListener);
@ -329,11 +331,15 @@ class TakeOfferViewModel extends ActivatableWithDataModel<TakeOfferDataModel> im
|| trade.getState() == Trade.State.DEPOSIT_SEEN_IN_NETWORK || trade.getState() == Trade.State.DEPOSIT_SEEN_IN_NETWORK
|| trade.getState() == Trade.State.DEPOSIT_PUBLISHED_MSG_SENT || trade.getState() == Trade.State.DEPOSIT_PUBLISHED_MSG_SENT
|| trade.getState() == Trade.State.DEPOSIT_PUBLISHED_MSG_RECEIVED) { || trade.getState() == Trade.State.DEPOSIT_PUBLISHED_MSG_RECEIVED) {
if (trade.getDepositTx() != null) if (trade.getDepositTx() != null) {
if (takeOfferSucceededHandler != null)
takeOfferSucceededHandler.run();
showTransactionPublishedScreen.set(true); showTransactionPublishedScreen.set(true);
else } else {
log.error("trade.getDepositTx() == null. That must not happen"); log.error("trade.getDepositTx() == null. That must not happen");
} }
}
takeOfferSpinnerInfoText.set(""); takeOfferSpinnerInfoText.set("");
if (errorMessage.get() == null) if (errorMessage.get() == null)

View file

@ -237,13 +237,13 @@ public class OfferDetailsWindow extends Overlay<OfferDetailsWindow> {
String takeOfferButtonText = isBuyerRole ? "Confirm take offer for buying bitcoin" : "Confirm take offer for selling bitcoin"; String takeOfferButtonText = isBuyerRole ? "Confirm take offer for buying bitcoin" : "Confirm take offer for selling bitcoin";
ImageView iconView = new ImageView(); ImageView iconView = new ImageView();
iconView.setId(isBuyOffer ? "image-buy-white" : "image-sell-white"); iconView.setId(isBuyerRole ? "image-buy-white" : "image-sell-white");
Tuple3<Button, ProgressIndicator, Label> placeOfferTuple = addButtonWithStatusAfterGroup(gridPane, ++rowIndex, isPlaceOffer ? placeOfferButtonText : takeOfferButtonText); Tuple3<Button, ProgressIndicator, Label> placeOfferTuple = addButtonWithStatusAfterGroup(gridPane, ++rowIndex, isPlaceOffer ? placeOfferButtonText : takeOfferButtonText);
Button button = placeOfferTuple.first; Button button = placeOfferTuple.first;
button.setGraphic(iconView); button.setGraphic(iconView);
button.setId(isBuyOffer ? "buy-button" : "sell-button"); button.setId(isBuyerRole ? "buy-button" : "sell-button");
button.setText(isPlaceOffer ? placeOfferButtonText : takeOfferButtonText); button.setText(isPlaceOffer ? placeOfferButtonText : takeOfferButtonText);
spinner = placeOfferTuple.second; spinner = placeOfferTuple.second;
@ -269,7 +269,7 @@ public class OfferDetailsWindow extends Overlay<OfferDetailsWindow> {
spinnerInfoLabel.setText(BSResources.get("createOffer.fundsBox.placeOfferSpinnerInfo")); spinnerInfoLabel.setText(BSResources.get("createOffer.fundsBox.placeOfferSpinnerInfo"));
placeOfferHandlerOptional.get().run(); placeOfferHandlerOptional.get().run();
} else { } else {
spinnerInfoLabel.setText("Take offer in progress..."); spinnerInfoLabel.setText(BSResources.get("takeOffer.fundsBox.takeOfferSpinnerInfo"));
takeOfferHandlerOptional.get().run(); takeOfferHandlerOptional.get().run();
} }
} else { } else {