diff --git a/core/src/main/java/bisq/core/payment/AustraliaPayid.java b/core/src/main/java/bisq/core/payment/AustraliaPayid.java
new file mode 100644
index 00000000000..a64c62b42ac
--- /dev/null
+++ b/core/src/main/java/bisq/core/payment/AustraliaPayid.java
@@ -0,0 +1,53 @@
+/*
+ * This file is part of Bisq.
+ *
+ * Bisq is free software: you can redistribute it and/or modify it
+ * under the terms of the GNU Affero General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or (at
+ * your option) any later version.
+ *
+ * Bisq is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU Affero General Public
+ * License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public License
+ * along with Bisq. If not, see .
+ */
+
+package bisq.core.payment;
+
+import bisq.core.locale.FiatCurrency;
+import bisq.core.payment.payload.AustraliaPayidPayload;
+import bisq.core.payment.payload.PaymentAccountPayload;
+import bisq.core.payment.payload.PaymentMethod;
+
+public final class AustraliaPayid extends PaymentAccount {
+ public AustraliaPayid() {
+ super(PaymentMethod.AUSTRALIA_PAYID);
+ setSingleTradeCurrency(new FiatCurrency("AUD"));
+ }
+
+ @Override
+ protected PaymentAccountPayload createPayload() {
+ return new AustraliaPayidPayload(paymentMethod.getId(), id);
+ }
+
+ public String getPayid() {
+ return ((AustraliaPayidPayload) paymentAccountPayload).getPayid();
+ }
+
+ public void setPayid(String payid) {
+ if (payid == null) payid = "";
+ ((AustraliaPayidPayload) paymentAccountPayload).setPayid(payid);
+ }
+
+ public String getBankAccountName() {
+ return ((AustraliaPayidPayload) paymentAccountPayload).getBankAccountName();
+ }
+
+ public void setBankAccountName(String bankAccountName) {
+ if (bankAccountName == null) bankAccountName = "";
+ ((AustraliaPayidPayload) paymentAccountPayload).setBankAccountName(bankAccountName);
+ }
+}
diff --git a/core/src/main/java/bisq/core/payment/PaymentAccountFactory.java b/core/src/main/java/bisq/core/payment/PaymentAccountFactory.java
index 9cf7972f8a1..71c52a82711 100644
--- a/core/src/main/java/bisq/core/payment/PaymentAccountFactory.java
+++ b/core/src/main/java/bisq/core/payment/PaymentAccountFactory.java
@@ -46,6 +46,8 @@ public static PaymentAccount getPaymentAccount(PaymentMethod paymentMethod) {
return new SpecificBanksAccount();
case PaymentMethod.JAPAN_BANK_ID:
return new JapanBankAccount();
+ case PaymentMethod.AUSTRALIA_PAYID_ID:
+ return new AustraliaPayid();
case PaymentMethod.ALI_PAY_ID:
return new AliPayAccount();
case PaymentMethod.WECHAT_PAY_ID:
diff --git a/core/src/main/java/bisq/core/payment/payload/AustraliaPayidPayload.java b/core/src/main/java/bisq/core/payment/payload/AustraliaPayidPayload.java
new file mode 100644
index 00000000000..50539cd4c0a
--- /dev/null
+++ b/core/src/main/java/bisq/core/payment/payload/AustraliaPayidPayload.java
@@ -0,0 +1,113 @@
+/*
+ * This file is part of Bisq.
+ *
+ * Bisq is free software: you can redistribute it and/or modify it
+ * under the terms of the GNU Affero General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or (at
+ * your option) any later version.
+ *
+ * Bisq is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU Affero General Public
+ * License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public License
+ * along with Bisq. If not, see .
+ */
+
+package bisq.core.payment.payload;
+
+import bisq.core.locale.Res;
+
+import bisq.common.util.CollectionUtils;
+
+import com.google.protobuf.Message;
+
+import java.nio.charset.StandardCharsets;
+
+import java.util.HashMap;
+import java.util.Map;
+
+import lombok.EqualsAndHashCode;
+import lombok.Getter;
+import lombok.Setter;
+import lombok.ToString;
+import lombok.extern.slf4j.Slf4j;
+
+@EqualsAndHashCode(callSuper = true)
+@ToString
+@Setter
+@Getter
+@Slf4j
+public final class AustraliaPayidPayload extends PaymentAccountPayload {
+ private String payid = "";
+ private String bankAccountName = "";
+
+ public AustraliaPayidPayload(String paymentMethod, String id) {
+ super(paymentMethod, id);
+ }
+
+
+ ///////////////////////////////////////////////////////////////////////////////////////////
+ // PROTO BUFFER
+ ///////////////////////////////////////////////////////////////////////////////////////////
+
+ private AustraliaPayidPayload(String paymentMethod,
+ String id,
+ String payid,
+ String bankAccountName,
+ long maxTradePeriod,
+ Map excludeFromJsonDataMap) {
+ super(paymentMethod,
+ id,
+ maxTradePeriod,
+ excludeFromJsonDataMap);
+
+ this.payid = payid;
+ this.bankAccountName = bankAccountName;
+ }
+
+ @Override
+ public Message toProtoMessage() {
+ return getPaymentAccountPayloadBuilder()
+ .setAustraliaPayidPayload(
+ protobuf.AustraliaPayidPayload.newBuilder()
+ .setPayid(payid)
+ .setBankAccountName(bankAccountName)
+ ).build();
+ }
+
+ public static AustraliaPayidPayload fromProto(protobuf.PaymentAccountPayload proto) {
+ protobuf.AustraliaPayidPayload AustraliaPayidPayload = proto.getAustraliaPayidPayload();
+ return new AustraliaPayidPayload(proto.getPaymentMethodId(),
+ proto.getId(),
+ AustraliaPayidPayload.getPayid(),
+ AustraliaPayidPayload.getBankAccountName(),
+ proto.getMaxTradePeriod(),
+ CollectionUtils.isEmpty(proto.getExcludeFromJsonDataMap()) ? null : new HashMap<>(proto.getExcludeFromJsonDataMap()));
+ }
+
+
+ ///////////////////////////////////////////////////////////////////////////////////////////
+ // API
+ ///////////////////////////////////////////////////////////////////////////////////////////
+
+ @Override
+ public String getPaymentDetails() {
+ return Res.get(paymentMethodId) + " - " + getPaymentDetailsForTradePopup().replace("\n", ", ");
+ }
+
+ @Override
+ public String getPaymentDetailsForTradePopup() {
+ return
+ Res.get("payment.australia.payid") + ": " + payid + "\n" +
+ Res.get("payment.account.owner") + ": " + bankAccountName;
+ }
+
+
+ @Override
+ public byte[] getAgeWitnessInputData() {
+ String all = this.payid + this.bankAccountName;
+ return super.getAgeWitnessInputData(all.getBytes(StandardCharsets.UTF_8));
+ }
+}
diff --git a/core/src/main/java/bisq/core/payment/payload/PaymentMethod.java b/core/src/main/java/bisq/core/payment/payload/PaymentMethod.java
index a590b8f8557..f7520aa1a9b 100644
--- a/core/src/main/java/bisq/core/payment/payload/PaymentMethod.java
+++ b/core/src/main/java/bisq/core/payment/payload/PaymentMethod.java
@@ -74,6 +74,7 @@ public final class PaymentMethod implements PersistablePayload, Comparable.
+ */
+
+package bisq.desktop.components.paymentmethods;
+
+import bisq.desktop.components.InputTextField;
+import bisq.desktop.util.FormBuilder;
+import bisq.desktop.util.Layout;
+import bisq.desktop.util.validation.AustraliaPayidValidator;
+
+import bisq.core.account.witness.AccountAgeWitnessService;
+import bisq.core.locale.Res;
+import bisq.core.locale.TradeCurrency;
+import bisq.core.payment.AustraliaPayid;
+import bisq.core.payment.PaymentAccount;
+import bisq.core.payment.payload.AustraliaPayidPayload;
+import bisq.core.payment.payload.PaymentAccountPayload;
+import bisq.core.util.coin.CoinFormatter;
+import bisq.core.util.validation.InputValidator;
+
+import javafx.scene.control.TextField;
+import javafx.scene.layout.GridPane;
+
+import static bisq.desktop.util.FormBuilder.addCompactTopLabelTextField;
+import static bisq.desktop.util.FormBuilder.addTopLabelTextField;
+
+public class AustraliaPayidForm extends PaymentMethodForm {
+ private final AustraliaPayid australiaPayid;
+ private final AustraliaPayidValidator australiaPayidValidator;
+ private InputTextField mobileNrInputTextField;
+
+ public static int addFormForBuyer(GridPane gridPane, int gridRow, PaymentAccountPayload paymentAccountPayload) {
+ addCompactTopLabelTextField(gridPane, ++gridRow, Res.get("payment.account.owner"),
+ ((AustraliaPayidPayload) paymentAccountPayload).getBankAccountName());
+ addCompactTopLabelTextField(gridPane, ++gridRow, Res.get("payment.payid"),
+ ((AustraliaPayidPayload) paymentAccountPayload).getPayid());
+ return gridRow;
+ }
+
+ public AustraliaPayidForm(PaymentAccount paymentAccount,
+ AccountAgeWitnessService accountAgeWitnessService,
+ AustraliaPayidValidator australiaPayidValidator,
+ InputValidator inputValidator,
+ GridPane gridPane,
+ int gridRow,
+ CoinFormatter formatter) {
+ super(paymentAccount, accountAgeWitnessService, inputValidator, gridPane, gridRow, formatter);
+ this.australiaPayid = (AustraliaPayid) paymentAccount;
+ this.australiaPayidValidator = australiaPayidValidator;
+ }
+
+ @Override
+ 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) -> {
+ australiaPayid.setBankAccountName(newValue);
+ updateFromInputs();
+ });
+
+ mobileNrInputTextField = FormBuilder.addInputTextField(gridPane, ++gridRow, Res.get("payment.payid"));
+ mobileNrInputTextField.setValidator(australiaPayidValidator);
+ mobileNrInputTextField.textProperty().addListener((ov, oldValue, newValue) -> {
+ australiaPayid.setPayid(newValue);
+ updateFromInputs();
+ });
+
+ TradeCurrency singleTradeCurrency = australiaPayid.getSingleTradeCurrency();
+ String nameAndCode = singleTradeCurrency != null ? singleTradeCurrency.getNameAndCode() : "null";
+ addTopLabelTextField(gridPane, ++gridRow, Res.get("shared.currency"), nameAndCode);
+ addLimitations(false);
+ addAccountNameTextFieldWithAutoFillToggleButton();
+ }
+
+ @Override
+ protected void autoFillNameTextField() {
+ setAccountNameWithString(mobileNrInputTextField.getText());
+ }
+
+ @Override
+ public void addFormForDisplayAccount() {
+ gridRowFrom = gridRow;
+ addTopLabelTextField(gridPane, gridRow, Res.get("payment.account.name"),
+ australiaPayid.getAccountName(), Layout.FIRST_ROW_AND_GROUP_DISTANCE);
+ addCompactTopLabelTextField(gridPane, ++gridRow, Res.get("shared.paymentMethod"),
+ Res.get(australiaPayid.getPaymentMethod().getId()));
+ addCompactTopLabelTextField(gridPane, ++gridRow, Res.get("payment.payid"),
+ australiaPayid.getPayid());
+ TextField field = addCompactTopLabelTextField(gridPane, ++gridRow, Res.get("payment.account.owner"),
+ australiaPayid.getBankAccountName()).second;
+ field.setMouseTransparent(false);
+ TradeCurrency singleTradeCurrency = australiaPayid.getSingleTradeCurrency();
+ String nameAndCode = singleTradeCurrency != null ? singleTradeCurrency.getNameAndCode() : "null";
+ addCompactTopLabelTextField(gridPane, ++gridRow, Res.get("shared.currency"), nameAndCode);
+ addLimitations(true);
+ }
+
+ @Override
+ public void updateAllInputsValid() {
+ allInputsValid.set(isAccountNameValid()
+ && australiaPayidValidator.validate(australiaPayid.getPayid()).isValid
+ && inputValidator.validate(australiaPayid.getBankAccountName()).isValid
+ && australiaPayid.getTradeCurrencies().size() > 0);
+ }
+}
diff --git a/desktop/src/main/java/bisq/desktop/main/account/content/fiataccounts/FiatAccountsView.java b/desktop/src/main/java/bisq/desktop/main/account/content/fiataccounts/FiatAccountsView.java
index e111fb2dc73..7574a28371f 100644
--- a/desktop/src/main/java/bisq/desktop/main/account/content/fiataccounts/FiatAccountsView.java
+++ b/desktop/src/main/java/bisq/desktop/main/account/content/fiataccounts/FiatAccountsView.java
@@ -21,6 +21,7 @@
import bisq.desktop.components.TitledGroupBg;
import bisq.desktop.components.paymentmethods.AdvancedCashForm;
import bisq.desktop.components.paymentmethods.AliPayForm;
+import bisq.desktop.components.paymentmethods.AustraliaPayidForm;
import bisq.desktop.components.paymentmethods.CashDepositForm;
import bisq.desktop.components.paymentmethods.ChaseQuickPayForm;
import bisq.desktop.components.paymentmethods.ClearXchangeForm;
@@ -54,6 +55,7 @@
import bisq.desktop.util.Layout;
import bisq.desktop.util.validation.AdvancedCashValidator;
import bisq.desktop.util.validation.AliPayValidator;
+import bisq.desktop.util.validation.AustraliaPayidValidator;
import bisq.desktop.util.validation.BICValidator;
import bisq.desktop.util.validation.ChaseQuickPayValidator;
import bisq.desktop.util.validation.ClearXchangeValidator;
@@ -76,6 +78,7 @@
import bisq.core.account.witness.AccountAgeWitnessService;
import bisq.core.locale.Res;
import bisq.core.offer.OfferRestrictions;
+import bisq.core.payment.AustraliaPayid;
import bisq.core.payment.CashDepositAccount;
import bisq.core.payment.ClearXchangeAccount;
import bisq.core.payment.F2FAccount;
@@ -139,6 +142,7 @@ public class FiatAccountsView extends PaymentAccountsView doSaveNewAccount(paymentAccount))
.show();
+ } else if (paymentAccount instanceof AustraliaPayid) {
+ new Popup().information(Res.get("payment.payid.info", currencyName, currencyName))
+ .width(900)
+ .closeButtonText(Res.get("shared.cancel"))
+ .actionButtonText(Res.get("shared.iConfirm"))
+ .onAction(() -> doSaveNewAccount(paymentAccount))
+ .show();
} else {
doSaveNewAccount(paymentAccount);
}
@@ -457,6 +470,8 @@ private PaymentMethodForm getPaymentMethodForm(PaymentMethod paymentMethod, Paym
return new SpecificBankForm(paymentAccount, accountAgeWitnessService, inputValidator, root, gridRow, formatter);
case PaymentMethod.JAPAN_BANK_ID:
return new JapanBankTransferForm(paymentAccount, accountAgeWitnessService, japanBankTransferValidator, inputValidator, root, gridRow, formatter);
+ case PaymentMethod.AUSTRALIA_PAYID_ID:
+ return new AustraliaPayidForm(paymentAccount, accountAgeWitnessService, australiapayidValidator, inputValidator, root, gridRow, formatter);
case PaymentMethod.ALI_PAY_ID:
return new AliPayForm(paymentAccount, accountAgeWitnessService, aliPayValidator, inputValidator, root, gridRow, formatter);
case PaymentMethod.WECHAT_PAY_ID:
diff --git a/desktop/src/main/java/bisq/desktop/util/validation/AustraliaPayidAccountNameValidator.java b/desktop/src/main/java/bisq/desktop/util/validation/AustraliaPayidAccountNameValidator.java
new file mode 100644
index 00000000000..4c6635e85ab
--- /dev/null
+++ b/desktop/src/main/java/bisq/desktop/util/validation/AustraliaPayidAccountNameValidator.java
@@ -0,0 +1,51 @@
+
+/*
+ * This file is part of Bisq.
+ *
+ * Bisq is free software: you can redistribute it and/or modify it
+ * under the terms of the GNU Affero General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or (at
+ * your option) any later version.
+ *
+ * Bisq is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU Affero General Public
+ * License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public License
+ * along with Bisq. If not, see .
+ */
+
+package bisq.desktop.util.validation;
+
+import bisq.core.util.validation.InputValidator;
+import bisq.core.util.validation.RegexValidator;
+
+import javax.inject.Inject;
+
+public final class AustraliaPayidAccountNameValidator extends InputValidator {
+ @Override
+ public ValidationResult validate(String input) {
+ ValidationResult result = super.validate(input);
+
+ if (result.isValid)
+ result = lengthValidator.validate(input);
+ if (result.isValid)
+ result = regexValidator.validate(input);
+
+ return result;
+ }
+
+ private final LengthValidator lengthValidator;
+ private final RegexValidator regexValidator;
+
+ @Inject
+ public AustraliaPayidAccountNameValidator(LengthValidator lengthValidator, RegexValidator regexValidator) {
+
+ lengthValidator.setMinLength(1);
+ lengthValidator.setMaxLength(40);
+ this.lengthValidator = lengthValidator;
+
+ this.regexValidator = regexValidator;
+ }
+}
diff --git a/desktop/src/main/java/bisq/desktop/util/validation/AustraliaPayidValidator.java b/desktop/src/main/java/bisq/desktop/util/validation/AustraliaPayidValidator.java
new file mode 100644
index 00000000000..62ddc30cc90
--- /dev/null
+++ b/desktop/src/main/java/bisq/desktop/util/validation/AustraliaPayidValidator.java
@@ -0,0 +1,56 @@
+/*
+ * This file is part of Bisq.
+ *
+ * Bisq is free software: you can redistribute it and/or modify it
+ * under the terms of the GNU Affero General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or (at
+ * your option) any later version.
+ *
+ * Bisq is distributed in the hope that it will be useful, but WITHOUT
+ * ANY WARRANTY; without even the implied warranty of MERCHANTABILITY or
+ * FITNESS FOR A PARTICULAR PURPOSE. See the GNU Affero General Public
+ * License for more details.
+ *
+ * You should have received a copy of the GNU Affero General Public License
+ * along with Bisq. If not, see .
+ */
+
+package bisq.desktop.util.validation;
+
+import bisq.core.util.validation.InputValidator;
+
+public final class AustraliaPayidValidator extends InputValidator {
+
+ private final EmailValidator emailValidator;
+
+ ///////////////////////////////////////////////////////////////////////////////////////////
+ // Public methods
+ ///////////////////////////////////////////////////////////////////////////////////////////
+
+ public AustraliaPayidValidator() {
+ emailValidator = new EmailValidator();
+ }
+
+ @Override
+ public ValidationResult validate(String input) {
+ ValidationResult result = validateIfNotEmpty(input);
+ if (!result.isValid) {
+ return result;
+ } else {
+ ValidationResult emailResult = emailValidator.validate(input);
+ if (emailResult.isValid)
+ return emailResult;
+ else
+ return validatePhoneNumber(input);
+ }
+ }
+
+ ///////////////////////////////////////////////////////////////////////////////////////////
+ // Private methods
+ ///////////////////////////////////////////////////////////////////////////////////////////
+
+ // TODO not impl yet -> see InteracETransferValidator
+ private ValidationResult validatePhoneNumber(String input) {
+ return super.validate(input);
+ }
+}
diff --git a/proto/src/main/proto/pb.proto b/proto/src/main/proto/pb.proto
index 55e6a8df391..f84329db5e0 100644
--- a/proto/src/main/proto/pb.proto
+++ b/proto/src/main/proto/pb.proto
@@ -933,6 +933,7 @@ message PaymentAccountPayload {
InstantCryptoCurrencyAccountPayload instant_crypto_currency_account_payload = 27;
JapanBankAccountPayload japan_bank_account_payload = 28;
TransferwiseAccountPayload Transferwise_account_payload = 29;
+ AustraliaPayidPayload australia_payid_payload = 30;
}
map exclude_from_json_data = 15;
}
@@ -1000,6 +1001,11 @@ message JapanBankAccountPayload {
string bank_account_number = 7;
}
+message AustraliaPayidPayload {
+ string bank_account_name = 1;
+ string payid = 2;
+}
+
message SpecificBanksAccountPayload {
repeated string accepted_banks = 1;
}