diff --git a/core/src/main/java/bisq/core/payment/UpholdAccount.java b/core/src/main/java/bisq/core/payment/UpholdAccount.java index af11de6be64..bc30be0e775 100644 --- a/core/src/main/java/bisq/core/payment/UpholdAccount.java +++ b/core/src/main/java/bisq/core/payment/UpholdAccount.java @@ -44,4 +44,15 @@ public void setAccountId(String accountId) { public String getAccountId() { return ((UpholdAccountPayload) paymentAccountPayload).getAccountId(); } + + public String getAccountOwner() { + return ((UpholdAccountPayload) paymentAccountPayload).getAccountOwner(); + } + + public void setAccountOwner(String accountOwner) { + if (accountOwner == null) { + accountOwner = ""; + } + ((UpholdAccountPayload) paymentAccountPayload).setAccountOwner(accountOwner); + } } diff --git a/core/src/main/java/bisq/core/payment/payload/UpholdAccountPayload.java b/core/src/main/java/bisq/core/payment/payload/UpholdAccountPayload.java index eab4293f800..a925b2721bc 100644 --- a/core/src/main/java/bisq/core/payment/payload/UpholdAccountPayload.java +++ b/core/src/main/java/bisq/core/payment/payload/UpholdAccountPayload.java @@ -19,6 +19,8 @@ import bisq.core.locale.Res; +import bisq.common.util.JsonExclude; + import com.google.protobuf.Message; import java.nio.charset.StandardCharsets; @@ -40,6 +42,10 @@ public final class UpholdAccountPayload extends PaymentAccountPayload { private String accountId = ""; + // For backward compatibility we need to exclude the new field from the contract json. + @JsonExclude + private String accountOwner = ""; + public UpholdAccountPayload(String paymentMethod, String id) { super(paymentMethod, id); } @@ -52,6 +58,7 @@ public UpholdAccountPayload(String paymentMethod, String id) { private UpholdAccountPayload(String paymentMethod, String id, String accountId, + String accountOwner, long maxTradePeriod, Map excludeFromJsonDataMap) { super(paymentMethod, @@ -60,12 +67,14 @@ private UpholdAccountPayload(String paymentMethod, excludeFromJsonDataMap); this.accountId = accountId; + this.accountOwner = accountOwner; } @Override public Message toProtoMessage() { return getPaymentAccountPayloadBuilder() .setUpholdAccountPayload(protobuf.UpholdAccountPayload.newBuilder() + .setAccountOwner(accountOwner) .setAccountId(accountId)) .build(); } @@ -74,6 +83,7 @@ public static UpholdAccountPayload fromProto(protobuf.PaymentAccountPayload prot return new UpholdAccountPayload(proto.getPaymentMethodId(), proto.getId(), proto.getUpholdAccountPayload().getAccountId(), + proto.getUpholdAccountPayload().getAccountOwner(), proto.getMaxTradePeriod(), new HashMap<>(proto.getExcludeFromJsonDataMap())); } @@ -85,12 +95,20 @@ public static UpholdAccountPayload fromProto(protobuf.PaymentAccountPayload prot @Override public String getPaymentDetails() { - return Res.get(paymentMethodId) + " - " + Res.getWithCol("payment.account") + " " + accountId; + return Res.get(paymentMethodId) + " - " + getPaymentDetailsForTradePopup().replace("\n", ", "); } @Override public String getPaymentDetailsForTradePopup() { - return getPaymentDetails(); + if (accountOwner.isEmpty()) { + return + Res.get("payment.account") + ": " + accountId + "\n" + + Res.get("payment.account.owner") + ": N/A"; + } else { + return + Res.get("payment.account") + ": " + accountId + "\n" + + Res.get("payment.account.owner") + ": " + accountOwner; + } } @Override diff --git a/desktop/src/main/java/bisq/desktop/components/paymentmethods/UpholdForm.java b/desktop/src/main/java/bisq/desktop/components/paymentmethods/UpholdForm.java index e3c4f03248b..b8290af401a 100644 --- a/desktop/src/main/java/bisq/desktop/components/paymentmethods/UpholdForm.java +++ b/desktop/src/main/java/bisq/desktop/components/paymentmethods/UpholdForm.java @@ -47,8 +47,16 @@ public class UpholdForm extends PaymentMethodForm { public static int addFormForBuyer(GridPane gridPane, int gridRow, PaymentAccountPayload paymentAccountPayload) { + String accountOwner = ((UpholdAccountPayload) paymentAccountPayload).getAccountOwner(); + if (accountOwner.isEmpty()) { + accountOwner = Res.get("payment.ask"); + } + addCompactTopLabelTextFieldWithCopyIcon(gridPane, ++gridRow, Res.get("payment.account.owner"), + accountOwner); + addCompactTopLabelTextFieldWithCopyIcon(gridPane, ++gridRow, Res.get("payment.uphold.accountId"), ((UpholdAccountPayload) paymentAccountPayload).getAccountId()); + return gridRow; } @@ -64,6 +72,14 @@ public UpholdForm(PaymentAccount paymentAccount, AccountAgeWitnessService accoun public void addFormForAddAccount() { gridRowFrom = gridRow + 1; + InputTextField holderNameInputTextField = FormBuilder.addInputTextField(gridPane, ++gridRow, + Res.get("payment.account.owner")); + holderNameInputTextField.setValidator(inputValidator); + holderNameInputTextField.textProperty().addListener((ov, oldValue, newValue) -> { + upholdAccount.setAccountOwner(newValue); + updateFromInputs(); + }); + accountIdInputTextField = FormBuilder.addInputTextField(gridPane, ++gridRow, Res.get("payment.uphold.accountId")); accountIdInputTextField.setValidator(upholdValidator); accountIdInputTextField.textProperty().addListener((ov, oldValue, newValue) -> { @@ -102,6 +118,8 @@ public void addFormForDisplayAccount() { upholdAccount.getAccountName(), Layout.FIRST_ROW_AND_GROUP_DISTANCE); addCompactTopLabelTextField(gridPane, ++gridRow, Res.get("shared.paymentMethod"), Res.get(upholdAccount.getPaymentMethod().getId())); + addCompactTopLabelTextField(gridPane, ++gridRow, Res.get("payment.account.owner"), + Res.get(upholdAccount.getAccountOwner())); TextField field = addCompactTopLabelTextField(gridPane, ++gridRow, Res.get("payment.uphold.accountId"), upholdAccount.getAccountId()).second; field.setMouseTransparent(false); diff --git a/proto/src/main/proto/pb.proto b/proto/src/main/proto/pb.proto index dfef1f67d1e..26655d5d713 100644 --- a/proto/src/main/proto/pb.proto +++ b/proto/src/main/proto/pb.proto @@ -1133,6 +1133,7 @@ message OKPayAccountPayload { message UpholdAccountPayload { string account_id = 1; + string account_owner = 2; } // Deprecated, not used anymore