diff --git a/src/main/java/com/sparrowwallet/sparrow/control/QRDisplayDialog.java b/src/main/java/com/sparrowwallet/sparrow/control/QRDisplayDialog.java index 19339379..8943e64f 100644 --- a/src/main/java/com/sparrowwallet/sparrow/control/QRDisplayDialog.java +++ b/src/main/java/com/sparrowwallet/sparrow/control/QRDisplayDialog.java @@ -32,7 +32,7 @@ import java.util.Locale; import java.util.Optional; @SuppressWarnings("deprecation") -public class QRDisplayDialog extends Dialog { +public class QRDisplayDialog extends Dialog { private static final Logger log = LoggerFactory.getLogger(QRDisplayDialog.class); private static final int MIN_FRAGMENT_LENGTH = 10; @@ -58,14 +58,14 @@ public class QRDisplayDialog extends Dialog { private static boolean initialDensityChange; public QRDisplayDialog(String type, byte[] data, boolean addLegacyEncodingOption) throws UR.URException { - this(UR.fromBytes(type, data), addLegacyEncodingOption); + this(UR.fromBytes(type, data), addLegacyEncodingOption, false); } public QRDisplayDialog(UR ur) { - this(ur, false); + this(ur, false, false); } - public QRDisplayDialog(UR ur, boolean addLegacyEncodingOption) { + public QRDisplayDialog(UR ur, boolean addLegacyEncodingOption, boolean addScanButton) { this.ur = ur; this.addLegacyEncodingOption = addLegacyEncodingOption; this.encoder = new UREncoder(ur, Config.get().getQrDensity().getMaxFragmentLength(), MIN_FRAGMENT_LENGTH, 0); @@ -98,11 +98,16 @@ public class QRDisplayDialog extends Dialog { dialogPane.getButtonTypes().add(densityButtonType); } + if(addScanButton) { + final ButtonType scanButtonType = new javafx.scene.control.ButtonType("Scan QR", ButtonBar.ButtonData.NEXT_FORWARD); + dialogPane.getButtonTypes().add(scanButtonType); + } + dialogPane.setPrefWidth(40 + QR_WIDTH + 40); dialogPane.setPrefHeight(40 + QR_HEIGHT + 85); AppServices.moveToActiveWindowScreen(this); - setResultConverter(dialogButton -> dialogButton != cancelButtonType ? ur : null); + setResultConverter(dialogButton -> dialogButton); } public QRDisplayDialog(String data) { @@ -125,7 +130,7 @@ public class QRDisplayDialog extends Dialog { dialogPane.setPrefHeight(40 + QR_HEIGHT + 85); AppServices.moveToActiveWindowScreen(this); - setResultConverter(dialogButton -> dialogButton != cancelButtonType ? ur : null); + setResultConverter(dialogButton -> dialogButton); } private void createAnimateQRService() { @@ -280,6 +285,12 @@ public class QRDisplayDialog extends Dialog { return density; } + } else if(buttonType.getButtonData() == ButtonBar.ButtonData.NEXT_FORWARD) { + Button scanButton = (Button)super.createButton(buttonType); + scanButton.setGraphicTextGap(5); + scanButton.setGraphic(getGlyph(FontAwesome5.Glyph.CAMERA)); + + return scanButton; } return super.createButton(buttonType); diff --git a/src/main/java/com/sparrowwallet/sparrow/transaction/HeadersController.java b/src/main/java/com/sparrowwallet/sparrow/transaction/HeadersController.java index fbe230bd..c5b98b8f 100644 --- a/src/main/java/com/sparrowwallet/sparrow/transaction/HeadersController.java +++ b/src/main/java/com/sparrowwallet/sparrow/transaction/HeadersController.java @@ -874,8 +874,11 @@ public class HeadersController extends TransactionFormController implements Init //Don't include non witness utxo fields for segwit wallets when displaying the PSBT as a QR - it can add greatly to the time required for scanning boolean includeNonWitnessUtxos = !Arrays.asList(ScriptType.WITNESS_TYPES).contains(headersForm.getSigningWallet().getScriptType()); CryptoPSBT cryptoPSBT = new CryptoPSBT(headersForm.getPsbt().serialize(true, includeNonWitnessUtxos)); - QRDisplayDialog qrDisplayDialog = new QRDisplayDialog(cryptoPSBT.toUR(), addLegacyEncodingOption); - qrDisplayDialog.show(); + QRDisplayDialog qrDisplayDialog = new QRDisplayDialog(cryptoPSBT.toUR(), addLegacyEncodingOption, true); + Optional optButtonType = qrDisplayDialog.showAndWait(); + if(optButtonType.isPresent() && optButtonType.get().getButtonData() == ButtonBar.ButtonData.NEXT_FORWARD) { + scanPSBT(event); + } } public void scanPSBT(ActionEvent event) {