diff --git a/src/main/java/com/sparrowwallet/sparrow/AppController.java b/src/main/java/com/sparrowwallet/sparrow/AppController.java index 7cbe4777..a3b99d8f 100644 --- a/src/main/java/com/sparrowwallet/sparrow/AppController.java +++ b/src/main/java/com/sparrowwallet/sparrow/AppController.java @@ -1234,7 +1234,8 @@ public class AppController implements Initializable { new CoboVaultSinglesig(), new CoboVaultMultisig(), new PassportSinglesig(), new KeystoneSinglesig(), new KeystoneMultisig(), - new CaravanMultisig()); + new CaravanMultisig(), + new KeycardShellSinglesig(), new KeycardShellMultisig()); for(WalletImport importer : walletImporters) { if(importer.isDeprecated() && !Config.get().isShowDeprecatedImportExport()) { continue; diff --git a/src/main/java/com/sparrowwallet/sparrow/control/WalletImportDialog.java b/src/main/java/com/sparrowwallet/sparrow/control/WalletImportDialog.java index eef5a156..207418fd 100644 --- a/src/main/java/com/sparrowwallet/sparrow/control/WalletImportDialog.java +++ b/src/main/java/com/sparrowwallet/sparrow/control/WalletImportDialog.java @@ -52,7 +52,7 @@ public class WalletImportDialog extends Dialog { importAccordion = new Accordion(); List keystoreImporters = List.of(new ColdcardSinglesig(), new CoboVaultSinglesig(), new Jade(), new KeystoneSinglesig(), new PassportSinglesig(), - new GordianSeedTool(), new SeedSigner(), new SpecterDIY(), new Krux(), new AirGapVault(), new Samourai()); + new GordianSeedTool(), new SeedSigner(), new SpecterDIY(), new Krux(), new AirGapVault(), new Samourai(), new KeycardShellSinglesig()); for(KeystoreFileImport importer : keystoreImporters) { if(!importer.isDeprecated() || Config.get().isShowDeprecatedImportExport()) { FileWalletKeystoreImportPane importPane = new FileWalletKeystoreImportPane(importer); diff --git a/src/main/java/com/sparrowwallet/sparrow/io/KeycardShellMultisig.java b/src/main/java/com/sparrowwallet/sparrow/io/KeycardShellMultisig.java new file mode 100644 index 00000000..29d7a945 --- /dev/null +++ b/src/main/java/com/sparrowwallet/sparrow/io/KeycardShellMultisig.java @@ -0,0 +1,53 @@ +package com.sparrowwallet.sparrow.io; + +import com.sparrowwallet.drongo.protocol.ScriptType; +import com.sparrowwallet.drongo.wallet.Keystore; +import com.sparrowwallet.drongo.wallet.WalletModel; + +import java.io.InputStream; + +public class KeycardShellMultisig extends ColdcardMultisig { + @Override + public String getName() { + return "Keycard Shell Multisig"; + } + + @Override + public String getKeystoreImportDescription(int account) { + return "Import QR created on your Keycard Shell, by selecting Connect software wallet > Bitcoin MultiSig"; + } + + @Override + public WalletModel getWalletModel() { + return WalletModel.KEYCARD_SHELL; + } + + @Override + public Keystore getKeystore(ScriptType scriptType, InputStream inputStream, String password) throws ImportException { + Keystore keystore = super.getKeystore(scriptType, inputStream, password); + keystore.setLabel("Keycard Shell"); + keystore.setWalletModel(getWalletModel()); + + return keystore; + } + + @Override + public boolean isFileFormatAvailable() { + return false; + } + + @Override + public boolean isWalletImportFileFormatAvailable() { + return false; + } + + @Override + public boolean isWalletImportScannable() { + return false; + } + + @Override + public boolean isWalletExportScannable() { + return false; + } +} diff --git a/src/main/java/com/sparrowwallet/sparrow/io/KeycardShellSinglesig.java b/src/main/java/com/sparrowwallet/sparrow/io/KeycardShellSinglesig.java new file mode 100644 index 00000000..4e8cd4a7 --- /dev/null +++ b/src/main/java/com/sparrowwallet/sparrow/io/KeycardShellSinglesig.java @@ -0,0 +1,43 @@ +package com.sparrowwallet.sparrow.io; + +import com.sparrowwallet.drongo.protocol.ScriptType; +import com.sparrowwallet.drongo.wallet.Keystore; +import com.sparrowwallet.drongo.wallet.WalletModel; + +import java.io.InputStream; + +public class KeycardShellSinglesig extends KeystoneSinglesig { + @Override + public String getName() { + return "Keycard Shell"; + } + + @Override + public String getKeystoreImportDescription(int account) { + return "Import QR created on your Keycard Shell, by selecting Connect software wallet > Bitcoin"; + } + + @Override + public WalletModel getWalletModel() { + return WalletModel.KEYCARD_SHELL; + } + + @Override + public Keystore getKeystore(ScriptType scriptType, InputStream inputStream, String password) throws ImportException { + Keystore keystore = super.getKeystore(scriptType, inputStream, password); + keystore.setLabel("Keycard Shell"); + keystore.setWalletModel(getWalletModel()); + + return keystore; + } + + @Override + public boolean isFileFormatAvailable() { + return false; + } + + @Override + public boolean isWalletImportFileFormatAvailable() { + return false; + } +} diff --git a/src/main/java/com/sparrowwallet/sparrow/keystoreimport/HwAirgappedController.java b/src/main/java/com/sparrowwallet/sparrow/keystoreimport/HwAirgappedController.java index 9a504de7..f18588d5 100644 --- a/src/main/java/com/sparrowwallet/sparrow/keystoreimport/HwAirgappedController.java +++ b/src/main/java/com/sparrowwallet/sparrow/keystoreimport/HwAirgappedController.java @@ -26,9 +26,9 @@ public class HwAirgappedController extends KeystoreImportDetailController { public void initializeView() { List fileImporters = Collections.emptyList(); if(getMasterController().getWallet().getPolicyType().equals(PolicyType.SINGLE)) { - fileImporters = List.of(new ColdcardSinglesig(), new CoboVaultSinglesig(), new Jade(), new KeystoneSinglesig(), new PassportSinglesig(), new SeedSigner(), new GordianSeedTool(), new SpecterDIY(), new Krux(), new AirGapVault()); + fileImporters = List.of(new ColdcardSinglesig(), new CoboVaultSinglesig(), new Jade(), new KeystoneSinglesig(), new PassportSinglesig(), new SeedSigner(), new GordianSeedTool(), new SpecterDIY(), new Krux(), new AirGapVault(), new KeycardShellSinglesig()); } else if(getMasterController().getWallet().getPolicyType().equals(PolicyType.MULTI)) { - fileImporters = List.of(new Bip129(), new ColdcardMultisig(), new CoboVaultMultisig(), new JadeMultisig(), new KeystoneMultisig(), new PassportMultisig(), new SeedSigner(), new GordianSeedTool(), new SpecterDIY(), new Krux()); + fileImporters = List.of(new Bip129(), new ColdcardMultisig(), new CoboVaultMultisig(), new JadeMultisig(), new KeystoneMultisig(), new PassportMultisig(), new SeedSigner(), new GordianSeedTool(), new SpecterDIY(), new Krux(), new KeycardShellMultisig()); } for(KeystoreFileImport importer : fileImporters) { diff --git a/src/main/resources/image/walletmodel/keycard-icon-invert.svg b/src/main/resources/image/walletmodel/keycard-icon-invert.svg new file mode 100644 index 00000000..59c61ab2 --- /dev/null +++ b/src/main/resources/image/walletmodel/keycard-icon-invert.svg @@ -0,0 +1,12 @@ + + + + + + + + \ No newline at end of file diff --git a/src/main/resources/image/walletmodel/keycard-icon.svg b/src/main/resources/image/walletmodel/keycard-icon.svg new file mode 100644 index 00000000..1e45518c --- /dev/null +++ b/src/main/resources/image/walletmodel/keycard-icon.svg @@ -0,0 +1,12 @@ + + + + + + + + \ No newline at end of file diff --git a/src/main/resources/image/walletmodel/keycard-invert.svg b/src/main/resources/image/walletmodel/keycard-invert.svg new file mode 100644 index 00000000..221f1f86 --- /dev/null +++ b/src/main/resources/image/walletmodel/keycard-invert.svg @@ -0,0 +1,12 @@ + + + + + + + + \ No newline at end of file diff --git a/src/main/resources/image/walletmodel/keycard.svg b/src/main/resources/image/walletmodel/keycard.svg new file mode 100644 index 00000000..9ed9622c --- /dev/null +++ b/src/main/resources/image/walletmodel/keycard.svg @@ -0,0 +1,12 @@ + + + + + + + + \ No newline at end of file