├── .gitignore
├── assets
└── screenshots.png
├── Variant-Kyoto
├── app
│ ├── src
│ │ ├── main
│ │ │ ├── java
│ │ │ │ └── org
│ │ │ │ │ └── bitcoindevkit
│ │ │ │ │ └── devkitwallet
│ │ │ │ │ ├── presentation
│ │ │ │ │ ├── ui
│ │ │ │ │ │ ├── screens
│ │ │ │ │ │ │ └── drawer
│ │ │ │ │ │ │ │ └── RecoveryPhraseScreen.kt
│ │ │ │ │ │ └── components
│ │ │ │ │ │ │ ├── CustomSnackbar.kt
│ │ │ │ │ │ │ ├── NeutralButton.kt
│ │ │ │ │ │ │ ├── SecondaryScreensAppBar.kt
│ │ │ │ │ │ │ └── RadioButtonWithLabel.kt
│ │ │ │ │ ├── viewmodels
│ │ │ │ │ │ ├── mvi
│ │ │ │ │ │ │ ├── MviReceiveScreen.kt
│ │ │ │ │ │ │ ├── MviSendScreen.kt
│ │ │ │ │ │ │ └── MviWalletScreen.kt
│ │ │ │ │ │ ├── AddressViewModel.kt
│ │ │ │ │ │ └── SendViewModel.kt
│ │ │ │ │ ├── theme
│ │ │ │ │ │ ├── Theme.kt
│ │ │ │ │ │ ├── DevkitWalletColors.kt
│ │ │ │ │ │ ├── Type.kt
│ │ │ │ │ │ └── Fonts.kt
│ │ │ │ │ └── navigation
│ │ │ │ │ │ └── Destinations.kt
│ │ │ │ │ ├── domain
│ │ │ │ │ ├── CurrencyUnit.kt
│ │ │ │ │ ├── utils
│ │ │ │ │ │ ├── FormatInBtc.kt
│ │ │ │ │ │ ├── Timestamps.kt
│ │ │ │ │ │ └── ProtobufExtensions.kt
│ │ │ │ │ ├── DwLogger.kt
│ │ │ │ │ ├── ActiveWalletsRepository.kt
│ │ │ │ │ ├── BlockchainClient.kt
│ │ │ │ │ └── BlockchainClientsConfig.kt
│ │ │ │ │ └── data
│ │ │ │ │ ├── TxDetails.kt
│ │ │ │ │ ├── WalletConfigs.kt
│ │ │ │ │ └── UserPreferencesSerializer.kt
│ │ │ ├── res
│ │ │ │ ├── values
│ │ │ │ │ ├── strings.xml
│ │ │ │ │ ├── colors.xml
│ │ │ │ │ ├── themes.xml
│ │ │ │ │ └── splash.xml
│ │ │ │ ├── font
│ │ │ │ │ ├── ia_writer_mono_bold.ttf
│ │ │ │ │ ├── ia_writer_mono_regular.ttf
│ │ │ │ │ ├── ia_writer_quattro_bold.ttf
│ │ │ │ │ ├── ia_writer_quattro_regular.ttf
│ │ │ │ │ ├── ia_writer_mono_bold_italic.ttf
│ │ │ │ │ ├── ia_writer_mono_regular_italic.ttf
│ │ │ │ │ ├── ia_writer_quattro_bold_italic.ttf
│ │ │ │ │ └── ia_writer_quattro_regular_italic.ttf
│ │ │ │ ├── mipmap-hdpi
│ │ │ │ │ ├── ic_launcher.png
│ │ │ │ │ ├── ic_launcher_bdk.png
│ │ │ │ │ ├── ic_launcher_round.png
│ │ │ │ │ └── ic_launcher_bdk_round.png
│ │ │ │ ├── mipmap-mdpi
│ │ │ │ │ ├── ic_launcher.png
│ │ │ │ │ ├── ic_launcher_bdk.png
│ │ │ │ │ ├── ic_launcher_round.png
│ │ │ │ │ └── ic_launcher_bdk_round.png
│ │ │ │ ├── mipmap-xhdpi
│ │ │ │ │ ├── ic_launcher.png
│ │ │ │ │ ├── ic_launcher_bdk.png
│ │ │ │ │ ├── ic_launcher_round.png
│ │ │ │ │ └── ic_launcher_bdk_round.png
│ │ │ │ ├── mipmap-xxhdpi
│ │ │ │ │ ├── ic_launcher.png
│ │ │ │ │ ├── ic_launcher_bdk.png
│ │ │ │ │ ├── ic_launcher_round.png
│ │ │ │ │ └── ic_launcher_bdk_round.png
│ │ │ │ ├── mipmap-xxxhdpi
│ │ │ │ │ ├── ic_launcher.png
│ │ │ │ │ ├── ic_launcher_bdk.png
│ │ │ │ │ ├── ic_launcher_round.png
│ │ │ │ │ └── ic_launcher_bdk_round.png
│ │ │ │ ├── drawable
│ │ │ │ │ ├── ic_launcher_bdk_background.xml
│ │ │ │ │ ├── launch_screen.xml
│ │ │ │ │ ├── ic_bitcoin_logo.xml
│ │ │ │ │ └── ic_testnet_logo.xml
│ │ │ │ ├── mipmap-anydpi-v26
│ │ │ │ │ ├── ic_launcher_bdk.xml
│ │ │ │ │ ├── ic_launcher.xml
│ │ │ │ │ ├── ic_launcher_bdk_round.xml
│ │ │ │ │ └── ic_launcher_round.xml
│ │ │ │ └── drawable-v24
│ │ │ │ │ └── ic_launcher_foreground.xml
│ │ │ ├── ic_launcher_bdk-playstore.png
│ │ │ ├── proto
│ │ │ │ └── wallets.proto
│ │ │ └── AndroidManifest.xml
│ │ └── test
│ │ │ └── java
│ │ │ └── org
│ │ │ └── bitcoindevkit
│ │ │ └── devkitwallet
│ │ │ └── ExampleUnitTest.kt
│ └── proguard-rules.pro
├── justfile
├── gradle
│ └── wrapper
│ │ ├── gradle-wrapper.jar
│ │ └── gradle-wrapper.properties
├── gradle.properties
├── .gitignore
├── .editorconfig
└── settings.gradle.kts
├── Variant-1.0
├── app
│ ├── src
│ │ ├── main
│ │ │ ├── res
│ │ │ │ ├── values
│ │ │ │ │ ├── strings.xml
│ │ │ │ │ ├── colors.xml
│ │ │ │ │ ├── themes.xml
│ │ │ │ │ └── splash.xml
│ │ │ │ ├── font
│ │ │ │ │ ├── ia_writer_mono_bold.ttf
│ │ │ │ │ ├── ia_writer_mono_regular.ttf
│ │ │ │ │ ├── ia_writer_quattro_bold.ttf
│ │ │ │ │ ├── ia_writer_mono_bold_italic.ttf
│ │ │ │ │ ├── ia_writer_quattro_regular.ttf
│ │ │ │ │ ├── ia_writer_mono_regular_italic.ttf
│ │ │ │ │ ├── ia_writer_quattro_bold_italic.ttf
│ │ │ │ │ └── ia_writer_quattro_regular_italic.ttf
│ │ │ │ ├── mipmap-hdpi
│ │ │ │ │ ├── ic_launcher.png
│ │ │ │ │ ├── ic_launcher_bdk.png
│ │ │ │ │ ├── ic_launcher_round.png
│ │ │ │ │ └── ic_launcher_bdk_round.png
│ │ │ │ ├── mipmap-mdpi
│ │ │ │ │ ├── ic_launcher.png
│ │ │ │ │ ├── ic_launcher_bdk.png
│ │ │ │ │ ├── ic_launcher_round.png
│ │ │ │ │ └── ic_launcher_bdk_round.png
│ │ │ │ ├── mipmap-xhdpi
│ │ │ │ │ ├── ic_launcher.png
│ │ │ │ │ ├── ic_launcher_bdk.png
│ │ │ │ │ ├── ic_launcher_round.png
│ │ │ │ │ └── ic_launcher_bdk_round.png
│ │ │ │ ├── mipmap-xxhdpi
│ │ │ │ │ ├── ic_launcher.png
│ │ │ │ │ ├── ic_launcher_bdk.png
│ │ │ │ │ ├── ic_launcher_round.png
│ │ │ │ │ └── ic_launcher_bdk_round.png
│ │ │ │ ├── mipmap-xxxhdpi
│ │ │ │ │ ├── ic_launcher.png
│ │ │ │ │ ├── ic_launcher_bdk.png
│ │ │ │ │ ├── ic_launcher_round.png
│ │ │ │ │ └── ic_launcher_bdk_round.png
│ │ │ │ ├── drawable
│ │ │ │ │ ├── ic_launcher_bdk_background.xml
│ │ │ │ │ ├── launch_screen.xml
│ │ │ │ │ ├── ic_bitcoin_logo.xml
│ │ │ │ │ └── ic_testnet_logo.xml
│ │ │ │ ├── mipmap-anydpi-v26
│ │ │ │ │ ├── ic_launcher.xml
│ │ │ │ │ ├── ic_launcher_bdk.xml
│ │ │ │ │ ├── ic_launcher_bdk_round.xml
│ │ │ │ │ └── ic_launcher_round.xml
│ │ │ │ └── drawable-v24
│ │ │ │ │ └── ic_launcher_foreground.xml
│ │ │ ├── ic_launcher_bdk-playstore.png
│ │ │ ├── java
│ │ │ │ └── org
│ │ │ │ │ └── bitcoindevkit
│ │ │ │ │ └── devkitwallet
│ │ │ │ │ ├── domain
│ │ │ │ │ ├── CurrencyUnit.kt
│ │ │ │ │ ├── utils
│ │ │ │ │ │ ├── FormatInBtc.kt
│ │ │ │ │ │ ├── Timestamps.kt
│ │ │ │ │ │ └── ProtobufExtensions.kt
│ │ │ │ │ ├── BlockchainClient.kt
│ │ │ │ │ ├── DwLogger.kt
│ │ │ │ │ └── UserPreferencesRepository.kt
│ │ │ │ │ ├── presentation
│ │ │ │ │ ├── viewmodels
│ │ │ │ │ │ ├── mvi
│ │ │ │ │ │ │ ├── MviReceiveScreen.kt
│ │ │ │ │ │ │ ├── MviWalletScreen.kt
│ │ │ │ │ │ │ └── MviSendScreen.kt
│ │ │ │ │ │ ├── AddressViewModel.kt
│ │ │ │ │ │ └── SendViewModel.kt
│ │ │ │ │ ├── theme
│ │ │ │ │ │ ├── Theme.kt
│ │ │ │ │ │ ├── DevkitWalletColors.kt
│ │ │ │ │ │ ├── Type.kt
│ │ │ │ │ │ └── Fonts.kt
│ │ │ │ │ ├── navigation
│ │ │ │ │ │ └── Destinations.kt
│ │ │ │ │ └── ui
│ │ │ │ │ │ └── components
│ │ │ │ │ │ ├── CustomSnackbar.kt
│ │ │ │ │ │ ├── NeutralButton.kt
│ │ │ │ │ │ ├── SecondaryScreensAppBar.kt
│ │ │ │ │ │ └── RadioButtonWithLabel.kt
│ │ │ │ │ └── data
│ │ │ │ │ ├── WalletConfigs.kt
│ │ │ │ │ ├── TxDetails.kt
│ │ │ │ │ └── UserPreferencesSerializer.kt
│ │ │ ├── proto
│ │ │ │ └── wallets.proto
│ │ │ └── AndroidManifest.xml
│ │ └── test
│ │ │ └── java
│ │ │ └── org
│ │ │ └── bitcoindevkit
│ │ │ └── devkitwallet
│ │ │ └── ExampleUnitTest.kt
│ └── proguard-rules.pro
├── justfile
├── gradle
│ └── wrapper
│ │ ├── gradle-wrapper.jar
│ │ └── gradle-wrapper.properties
├── gradle.properties
├── .gitignore
├── settings.gradle.kts
└── .editorconfig
├── Variant-Esplora
├── app
│ ├── src
│ │ ├── main
│ │ │ ├── res
│ │ │ │ ├── values
│ │ │ │ │ ├── strings.xml
│ │ │ │ │ ├── colors.xml
│ │ │ │ │ ├── themes.xml
│ │ │ │ │ └── splash.xml
│ │ │ │ ├── mipmap-hdpi
│ │ │ │ │ ├── ic_launcher.png
│ │ │ │ │ ├── ic_launcher_bdk.png
│ │ │ │ │ ├── ic_launcher_round.png
│ │ │ │ │ └── ic_launcher_bdk_round.png
│ │ │ │ ├── mipmap-mdpi
│ │ │ │ │ ├── ic_launcher.png
│ │ │ │ │ ├── ic_launcher_bdk.png
│ │ │ │ │ ├── ic_launcher_round.png
│ │ │ │ │ └── ic_launcher_bdk_round.png
│ │ │ │ ├── font
│ │ │ │ │ ├── ia_writer_mono_bold.ttf
│ │ │ │ │ ├── ia_writer_mono_regular.ttf
│ │ │ │ │ ├── ia_writer_quattro_bold.ttf
│ │ │ │ │ ├── ia_writer_quattro_regular.ttf
│ │ │ │ │ ├── ia_writer_mono_bold_italic.ttf
│ │ │ │ │ ├── ia_writer_mono_regular_italic.ttf
│ │ │ │ │ ├── ia_writer_quattro_bold_italic.ttf
│ │ │ │ │ └── ia_writer_quattro_regular_italic.ttf
│ │ │ │ ├── mipmap-xhdpi
│ │ │ │ │ ├── ic_launcher.png
│ │ │ │ │ ├── ic_launcher_bdk.png
│ │ │ │ │ ├── ic_launcher_round.png
│ │ │ │ │ └── ic_launcher_bdk_round.png
│ │ │ │ ├── mipmap-xxhdpi
│ │ │ │ │ ├── ic_launcher.png
│ │ │ │ │ ├── ic_launcher_bdk.png
│ │ │ │ │ ├── ic_launcher_round.png
│ │ │ │ │ └── ic_launcher_bdk_round.png
│ │ │ │ ├── mipmap-xxxhdpi
│ │ │ │ │ ├── ic_launcher.png
│ │ │ │ │ ├── ic_launcher_bdk.png
│ │ │ │ │ ├── ic_launcher_round.png
│ │ │ │ │ └── ic_launcher_bdk_round.png
│ │ │ │ ├── drawable
│ │ │ │ │ ├── ic_launcher_bdk_background.xml
│ │ │ │ │ ├── launch_screen.xml
│ │ │ │ │ ├── ic_bitcoin_logo.xml
│ │ │ │ │ └── ic_testnet_logo.xml
│ │ │ │ ├── mipmap-anydpi-v26
│ │ │ │ │ ├── ic_launcher.xml
│ │ │ │ │ ├── ic_launcher_bdk.xml
│ │ │ │ │ ├── ic_launcher_bdk_round.xml
│ │ │ │ │ └── ic_launcher_round.xml
│ │ │ │ └── drawable-v24
│ │ │ │ │ └── ic_launcher_foreground.xml
│ │ │ ├── ic_launcher_bdk-playstore.png
│ │ │ ├── java
│ │ │ │ └── org
│ │ │ │ │ └── bitcoindevkit
│ │ │ │ │ └── devkitwallet
│ │ │ │ │ ├── domain
│ │ │ │ │ ├── CurrencyUnit.kt
│ │ │ │ │ ├── utils
│ │ │ │ │ │ ├── FormatInBtc.kt
│ │ │ │ │ │ ├── Timestamps.kt
│ │ │ │ │ │ └── ProtobufExtensions.kt
│ │ │ │ │ ├── BlockchainClient.kt
│ │ │ │ │ ├── DwLogger.kt
│ │ │ │ │ ├── UserPreferencesRepository.kt
│ │ │ │ │ └── BlockchainClientsConfig.kt
│ │ │ │ │ ├── presentation
│ │ │ │ │ ├── theme
│ │ │ │ │ │ ├── Theme.kt
│ │ │ │ │ │ ├── DevkitWalletColors.kt
│ │ │ │ │ │ ├── Type.kt
│ │ │ │ │ │ └── Fonts.kt
│ │ │ │ │ ├── navigation
│ │ │ │ │ │ └── Destinations.kt
│ │ │ │ │ ├── ui
│ │ │ │ │ │ └── components
│ │ │ │ │ │ │ ├── CustomSnackbar.kt
│ │ │ │ │ │ │ ├── NeutralButton.kt
│ │ │ │ │ │ │ ├── SecondaryScreensAppBar.kt
│ │ │ │ │ │ │ └── RadioButtonWithLabel.kt
│ │ │ │ │ └── viewmodels
│ │ │ │ │ │ └── AddressViewModel.kt
│ │ │ │ │ └── data
│ │ │ │ │ ├── WalletConfigs.kt
│ │ │ │ │ ├── TxDetails.kt
│ │ │ │ │ └── UserPreferencesSerializer.kt
│ │ │ ├── proto
│ │ │ │ └── wallets.proto
│ │ │ └── AndroidManifest.xml
│ │ └── test
│ │ │ └── java
│ │ │ └── org
│ │ │ └── bitcoindevkit
│ │ │ └── devkitwallet
│ │ │ └── ExampleUnitTest.kt
│ └── proguard-rules.pro
├── justfile
├── gradle
│ └── wrapper
│ │ ├── gradle-wrapper.jar
│ │ └── gradle-wrapper.properties
├── gradle.properties
├── .gitignore
├── .editorconfig
└── settings.gradle.kts
├── Variant-0.32
├── app
│ ├── src
│ │ ├── main
│ │ │ ├── res
│ │ │ │ ├── values
│ │ │ │ │ ├── strings.xml
│ │ │ │ │ ├── colors.xml
│ │ │ │ │ └── themes.xml
│ │ │ │ ├── font
│ │ │ │ │ ├── fira_mono.ttf
│ │ │ │ │ ├── fira_mono_medium.ttf
│ │ │ │ │ ├── jetbrains_mono_light.ttf
│ │ │ │ │ ├── jetbrains_mono_regular.ttf
│ │ │ │ │ └── jetbrains_mono_semibold.ttf
│ │ │ │ ├── drawable
│ │ │ │ │ ├── faucet_address.png
│ │ │ │ │ ├── ic_launcher_bdk_background.xml
│ │ │ │ │ ├── launch_screen.xml
│ │ │ │ │ ├── ic_round_expand_more_24.xml
│ │ │ │ │ ├── ic_bitcoin_logo.xml
│ │ │ │ │ └── ic_testnet_logo.xml
│ │ │ │ ├── mipmap-hdpi
│ │ │ │ │ ├── ic_launcher.png
│ │ │ │ │ ├── ic_launcher_bdk.png
│ │ │ │ │ ├── ic_launcher_round.png
│ │ │ │ │ └── ic_launcher_bdk_round.png
│ │ │ │ ├── mipmap-mdpi
│ │ │ │ │ ├── ic_launcher.png
│ │ │ │ │ ├── ic_launcher_bdk.png
│ │ │ │ │ ├── ic_launcher_round.png
│ │ │ │ │ └── ic_launcher_bdk_round.png
│ │ │ │ ├── mipmap-xhdpi
│ │ │ │ │ ├── ic_launcher.png
│ │ │ │ │ ├── ic_launcher_bdk.png
│ │ │ │ │ ├── ic_launcher_round.png
│ │ │ │ │ └── ic_launcher_bdk_round.png
│ │ │ │ ├── mipmap-xxhdpi
│ │ │ │ │ ├── ic_launcher.png
│ │ │ │ │ ├── ic_launcher_bdk.png
│ │ │ │ │ ├── ic_launcher_round.png
│ │ │ │ │ └── ic_launcher_bdk_round.png
│ │ │ │ ├── mipmap-xxxhdpi
│ │ │ │ │ ├── ic_launcher.png
│ │ │ │ │ ├── ic_launcher_bdk.png
│ │ │ │ │ ├── ic_launcher_round.png
│ │ │ │ │ └── ic_launcher_bdk_round.png
│ │ │ │ ├── mipmap-anydpi-v26
│ │ │ │ │ ├── ic_launcher.xml
│ │ │ │ │ ├── ic_launcher_round.xml
│ │ │ │ │ ├── ic_launcher_bdk.xml
│ │ │ │ │ └── ic_launcher_bdk_round.xml
│ │ │ │ └── drawable-v24
│ │ │ │ │ └── ic_launcher_foreground.xml
│ │ │ ├── ic_launcher_bdk-playstore.png
│ │ │ ├── java
│ │ │ │ └── com
│ │ │ │ │ └── goldenraven
│ │ │ │ │ └── devkitwallet
│ │ │ │ │ ├── utils
│ │ │ │ │ ├── FormatInBtc.kt
│ │ │ │ │ ├── Timestamps.kt
│ │ │ │ │ └── SharedPreferencesManager.kt
│ │ │ │ │ ├── ui
│ │ │ │ │ ├── theme
│ │ │ │ │ │ ├── Theme.kt
│ │ │ │ │ │ ├── Type.kt
│ │ │ │ │ │ ├── DevkitWalletColors.kt
│ │ │ │ │ │ └── Fonts.kt
│ │ │ │ │ ├── Screen.kt
│ │ │ │ │ ├── components
│ │ │ │ │ │ ├── NeutralButton.kt
│ │ │ │ │ │ └── SecondaryScreensAppBar.kt
│ │ │ │ │ └── screens
│ │ │ │ │ │ └── drawer
│ │ │ │ │ │ └── RecoveryPhraseScreen.kt
│ │ │ │ │ ├── viewmodels
│ │ │ │ │ ├── AddressViewModel.kt
│ │ │ │ │ └── WalletViewModel.kt
│ │ │ │ │ └── DevkitWalletApplication.kt
│ │ │ └── AndroidManifest.xml
│ │ └── test
│ │ │ └── java
│ │ │ └── com
│ │ │ └── goldenraven
│ │ │ └── devkitwallet
│ │ │ └── ExampleUnitTest.kt
│ └── proguard-rules.pro
├── gradle
│ └── wrapper
│ │ ├── gradle-wrapper.jar
│ │ └── gradle-wrapper.properties
├── build.gradle.kts
├── gradle.properties
├── .gitignore
└── settings.gradle.kts
├── .github
└── workflows
│ ├── docs.yaml
│ └── ktlint.yaml
└── README.md
/.gitignore:
--------------------------------------------------------------------------------
1 | /.idea
2 | /Variant — Kyoto/.idea
3 |
--------------------------------------------------------------------------------
/assets/screenshots.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/bitcoindevkit/devkit-wallet/HEAD/assets/screenshots.png
--------------------------------------------------------------------------------
/Variant-Kyoto/app/src/main/java/org/bitcoindevkit/devkitwallet/presentation/ui/screens/drawer/RecoveryPhraseScreen.kt:
--------------------------------------------------------------------------------
1 |
--------------------------------------------------------------------------------
/Variant-1.0/app/src/main/res/values/strings.xml:
--------------------------------------------------------------------------------
1 |
2 | Devkit Wallet
3 |
4 |
--------------------------------------------------------------------------------
/Variant-Kyoto/app/src/main/res/values/strings.xml:
--------------------------------------------------------------------------------
1 |
2 | Devkit Wallet
3 |
4 |
--------------------------------------------------------------------------------
/Variant-1.0/justfile:
--------------------------------------------------------------------------------
1 | @list:
2 | just --list
3 |
4 | check:
5 | ./gradlew ktlintCheck
6 |
7 | format:
8 | ./gradlew ktlintFormat
9 |
--------------------------------------------------------------------------------
/Variant-Esplora/app/src/main/res/values/strings.xml:
--------------------------------------------------------------------------------
1 |
2 | Devkit Wallet
3 |
4 |
--------------------------------------------------------------------------------
/Variant-Esplora/justfile:
--------------------------------------------------------------------------------
1 | @list:
2 | just --list
3 |
4 | check:
5 | ./gradlew ktlintCheck
6 |
7 | format:
8 | ./gradlew ktlintFormat
9 |
--------------------------------------------------------------------------------
/Variant-Kyoto/justfile:
--------------------------------------------------------------------------------
1 | @list:
2 | just --list
3 |
4 | check:
5 | ./gradlew ktlintCheck
6 |
7 | format:
8 | ./gradlew ktlintFormat
9 |
--------------------------------------------------------------------------------
/Variant-0.32/app/src/main/res/values/strings.xml:
--------------------------------------------------------------------------------
1 |
2 | BDK Android Sample Wallet
3 |
4 |
--------------------------------------------------------------------------------
/Variant-1.0/gradle/wrapper/gradle-wrapper.jar:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/bitcoindevkit/devkit-wallet/HEAD/Variant-1.0/gradle/wrapper/gradle-wrapper.jar
--------------------------------------------------------------------------------
/Variant-0.32/gradle/wrapper/gradle-wrapper.jar:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/bitcoindevkit/devkit-wallet/HEAD/Variant-0.32/gradle/wrapper/gradle-wrapper.jar
--------------------------------------------------------------------------------
/Variant-Kyoto/gradle/wrapper/gradle-wrapper.jar:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/bitcoindevkit/devkit-wallet/HEAD/Variant-Kyoto/gradle/wrapper/gradle-wrapper.jar
--------------------------------------------------------------------------------
/Variant-0.32/app/src/main/res/font/fira_mono.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/bitcoindevkit/devkit-wallet/HEAD/Variant-0.32/app/src/main/res/font/fira_mono.ttf
--------------------------------------------------------------------------------
/Variant-Esplora/gradle/wrapper/gradle-wrapper.jar:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/bitcoindevkit/devkit-wallet/HEAD/Variant-Esplora/gradle/wrapper/gradle-wrapper.jar
--------------------------------------------------------------------------------
/Variant-0.32/app/src/main/ic_launcher_bdk-playstore.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/bitcoindevkit/devkit-wallet/HEAD/Variant-0.32/app/src/main/ic_launcher_bdk-playstore.png
--------------------------------------------------------------------------------
/Variant-0.32/app/src/main/res/font/fira_mono_medium.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/bitcoindevkit/devkit-wallet/HEAD/Variant-0.32/app/src/main/res/font/fira_mono_medium.ttf
--------------------------------------------------------------------------------
/Variant-1.0/app/src/main/ic_launcher_bdk-playstore.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/bitcoindevkit/devkit-wallet/HEAD/Variant-1.0/app/src/main/ic_launcher_bdk-playstore.png
--------------------------------------------------------------------------------
/Variant-1.0/app/src/main/res/values/colors.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 | #203b46
4 |
5 |
--------------------------------------------------------------------------------
/Variant-0.32/app/src/main/res/drawable/faucet_address.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/bitcoindevkit/devkit-wallet/HEAD/Variant-0.32/app/src/main/res/drawable/faucet_address.png
--------------------------------------------------------------------------------
/Variant-0.32/app/src/main/res/mipmap-hdpi/ic_launcher.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/bitcoindevkit/devkit-wallet/HEAD/Variant-0.32/app/src/main/res/mipmap-hdpi/ic_launcher.png
--------------------------------------------------------------------------------
/Variant-0.32/app/src/main/res/mipmap-mdpi/ic_launcher.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/bitcoindevkit/devkit-wallet/HEAD/Variant-0.32/app/src/main/res/mipmap-mdpi/ic_launcher.png
--------------------------------------------------------------------------------
/Variant-0.32/app/src/main/res/values/colors.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 | #203b46
4 |
5 |
--------------------------------------------------------------------------------
/Variant-1.0/app/src/main/res/font/ia_writer_mono_bold.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/bitcoindevkit/devkit-wallet/HEAD/Variant-1.0/app/src/main/res/font/ia_writer_mono_bold.ttf
--------------------------------------------------------------------------------
/Variant-1.0/app/src/main/res/mipmap-hdpi/ic_launcher.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/bitcoindevkit/devkit-wallet/HEAD/Variant-1.0/app/src/main/res/mipmap-hdpi/ic_launcher.png
--------------------------------------------------------------------------------
/Variant-1.0/app/src/main/res/mipmap-mdpi/ic_launcher.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/bitcoindevkit/devkit-wallet/HEAD/Variant-1.0/app/src/main/res/mipmap-mdpi/ic_launcher.png
--------------------------------------------------------------------------------
/Variant-1.0/app/src/main/res/mipmap-xhdpi/ic_launcher.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/bitcoindevkit/devkit-wallet/HEAD/Variant-1.0/app/src/main/res/mipmap-xhdpi/ic_launcher.png
--------------------------------------------------------------------------------
/Variant-Esplora/app/src/main/res/values/colors.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 | #203b46
4 |
5 |
--------------------------------------------------------------------------------
/Variant-Kyoto/app/src/main/ic_launcher_bdk-playstore.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/bitcoindevkit/devkit-wallet/HEAD/Variant-Kyoto/app/src/main/ic_launcher_bdk-playstore.png
--------------------------------------------------------------------------------
/Variant-Kyoto/app/src/main/res/values/colors.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 | #203b46
4 |
5 |
--------------------------------------------------------------------------------
/Variant-0.32/app/src/main/res/font/jetbrains_mono_light.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/bitcoindevkit/devkit-wallet/HEAD/Variant-0.32/app/src/main/res/font/jetbrains_mono_light.ttf
--------------------------------------------------------------------------------
/Variant-0.32/app/src/main/res/mipmap-xhdpi/ic_launcher.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/bitcoindevkit/devkit-wallet/HEAD/Variant-0.32/app/src/main/res/mipmap-xhdpi/ic_launcher.png
--------------------------------------------------------------------------------
/Variant-0.32/app/src/main/res/mipmap-xxhdpi/ic_launcher.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/bitcoindevkit/devkit-wallet/HEAD/Variant-0.32/app/src/main/res/mipmap-xxhdpi/ic_launcher.png
--------------------------------------------------------------------------------
/Variant-0.32/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/bitcoindevkit/devkit-wallet/HEAD/Variant-0.32/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png
--------------------------------------------------------------------------------
/Variant-1.0/app/src/main/res/font/ia_writer_mono_regular.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/bitcoindevkit/devkit-wallet/HEAD/Variant-1.0/app/src/main/res/font/ia_writer_mono_regular.ttf
--------------------------------------------------------------------------------
/Variant-1.0/app/src/main/res/font/ia_writer_quattro_bold.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/bitcoindevkit/devkit-wallet/HEAD/Variant-1.0/app/src/main/res/font/ia_writer_quattro_bold.ttf
--------------------------------------------------------------------------------
/Variant-1.0/app/src/main/res/mipmap-hdpi/ic_launcher_bdk.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/bitcoindevkit/devkit-wallet/HEAD/Variant-1.0/app/src/main/res/mipmap-hdpi/ic_launcher_bdk.png
--------------------------------------------------------------------------------
/Variant-1.0/app/src/main/res/mipmap-mdpi/ic_launcher_bdk.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/bitcoindevkit/devkit-wallet/HEAD/Variant-1.0/app/src/main/res/mipmap-mdpi/ic_launcher_bdk.png
--------------------------------------------------------------------------------
/Variant-1.0/app/src/main/res/mipmap-xxhdpi/ic_launcher.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/bitcoindevkit/devkit-wallet/HEAD/Variant-1.0/app/src/main/res/mipmap-xxhdpi/ic_launcher.png
--------------------------------------------------------------------------------
/Variant-1.0/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/bitcoindevkit/devkit-wallet/HEAD/Variant-1.0/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png
--------------------------------------------------------------------------------
/Variant-Esplora/app/src/main/ic_launcher_bdk-playstore.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/bitcoindevkit/devkit-wallet/HEAD/Variant-Esplora/app/src/main/ic_launcher_bdk-playstore.png
--------------------------------------------------------------------------------
/Variant-Esplora/app/src/main/res/mipmap-hdpi/ic_launcher.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/bitcoindevkit/devkit-wallet/HEAD/Variant-Esplora/app/src/main/res/mipmap-hdpi/ic_launcher.png
--------------------------------------------------------------------------------
/Variant-Esplora/app/src/main/res/mipmap-mdpi/ic_launcher.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/bitcoindevkit/devkit-wallet/HEAD/Variant-Esplora/app/src/main/res/mipmap-mdpi/ic_launcher.png
--------------------------------------------------------------------------------
/Variant-Kyoto/app/src/main/res/font/ia_writer_mono_bold.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/bitcoindevkit/devkit-wallet/HEAD/Variant-Kyoto/app/src/main/res/font/ia_writer_mono_bold.ttf
--------------------------------------------------------------------------------
/Variant-Kyoto/app/src/main/res/mipmap-hdpi/ic_launcher.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/bitcoindevkit/devkit-wallet/HEAD/Variant-Kyoto/app/src/main/res/mipmap-hdpi/ic_launcher.png
--------------------------------------------------------------------------------
/Variant-Kyoto/app/src/main/res/mipmap-mdpi/ic_launcher.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/bitcoindevkit/devkit-wallet/HEAD/Variant-Kyoto/app/src/main/res/mipmap-mdpi/ic_launcher.png
--------------------------------------------------------------------------------
/Variant-Kyoto/app/src/main/res/mipmap-xhdpi/ic_launcher.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/bitcoindevkit/devkit-wallet/HEAD/Variant-Kyoto/app/src/main/res/mipmap-xhdpi/ic_launcher.png
--------------------------------------------------------------------------------
/Variant-Kyoto/app/src/main/res/mipmap-xxhdpi/ic_launcher.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/bitcoindevkit/devkit-wallet/HEAD/Variant-Kyoto/app/src/main/res/mipmap-xxhdpi/ic_launcher.png
--------------------------------------------------------------------------------
/Variant-0.32/app/src/main/res/font/jetbrains_mono_regular.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/bitcoindevkit/devkit-wallet/HEAD/Variant-0.32/app/src/main/res/font/jetbrains_mono_regular.ttf
--------------------------------------------------------------------------------
/Variant-0.32/app/src/main/res/font/jetbrains_mono_semibold.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/bitcoindevkit/devkit-wallet/HEAD/Variant-0.32/app/src/main/res/font/jetbrains_mono_semibold.ttf
--------------------------------------------------------------------------------
/Variant-0.32/app/src/main/res/mipmap-hdpi/ic_launcher_bdk.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/bitcoindevkit/devkit-wallet/HEAD/Variant-0.32/app/src/main/res/mipmap-hdpi/ic_launcher_bdk.png
--------------------------------------------------------------------------------
/Variant-0.32/app/src/main/res/mipmap-mdpi/ic_launcher_bdk.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/bitcoindevkit/devkit-wallet/HEAD/Variant-0.32/app/src/main/res/mipmap-mdpi/ic_launcher_bdk.png
--------------------------------------------------------------------------------
/Variant-0.32/app/src/main/res/mipmap-xhdpi/ic_launcher_bdk.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/bitcoindevkit/devkit-wallet/HEAD/Variant-0.32/app/src/main/res/mipmap-xhdpi/ic_launcher_bdk.png
--------------------------------------------------------------------------------
/Variant-1.0/app/src/main/res/mipmap-hdpi/ic_launcher_round.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/bitcoindevkit/devkit-wallet/HEAD/Variant-1.0/app/src/main/res/mipmap-hdpi/ic_launcher_round.png
--------------------------------------------------------------------------------
/Variant-1.0/app/src/main/res/mipmap-mdpi/ic_launcher_round.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/bitcoindevkit/devkit-wallet/HEAD/Variant-1.0/app/src/main/res/mipmap-mdpi/ic_launcher_round.png
--------------------------------------------------------------------------------
/Variant-1.0/app/src/main/res/mipmap-xhdpi/ic_launcher_bdk.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/bitcoindevkit/devkit-wallet/HEAD/Variant-1.0/app/src/main/res/mipmap-xhdpi/ic_launcher_bdk.png
--------------------------------------------------------------------------------
/Variant-1.0/app/src/main/res/mipmap-xxhdpi/ic_launcher_bdk.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/bitcoindevkit/devkit-wallet/HEAD/Variant-1.0/app/src/main/res/mipmap-xxhdpi/ic_launcher_bdk.png
--------------------------------------------------------------------------------
/Variant-Esplora/app/src/main/res/font/ia_writer_mono_bold.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/bitcoindevkit/devkit-wallet/HEAD/Variant-Esplora/app/src/main/res/font/ia_writer_mono_bold.ttf
--------------------------------------------------------------------------------
/Variant-Esplora/app/src/main/res/mipmap-xhdpi/ic_launcher.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/bitcoindevkit/devkit-wallet/HEAD/Variant-Esplora/app/src/main/res/mipmap-xhdpi/ic_launcher.png
--------------------------------------------------------------------------------
/Variant-Esplora/app/src/main/res/mipmap-xxhdpi/ic_launcher.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/bitcoindevkit/devkit-wallet/HEAD/Variant-Esplora/app/src/main/res/mipmap-xxhdpi/ic_launcher.png
--------------------------------------------------------------------------------
/Variant-Kyoto/app/src/main/res/font/ia_writer_mono_regular.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/bitcoindevkit/devkit-wallet/HEAD/Variant-Kyoto/app/src/main/res/font/ia_writer_mono_regular.ttf
--------------------------------------------------------------------------------
/Variant-Kyoto/app/src/main/res/font/ia_writer_quattro_bold.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/bitcoindevkit/devkit-wallet/HEAD/Variant-Kyoto/app/src/main/res/font/ia_writer_quattro_bold.ttf
--------------------------------------------------------------------------------
/Variant-Kyoto/app/src/main/res/mipmap-hdpi/ic_launcher_bdk.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/bitcoindevkit/devkit-wallet/HEAD/Variant-Kyoto/app/src/main/res/mipmap-hdpi/ic_launcher_bdk.png
--------------------------------------------------------------------------------
/Variant-Kyoto/app/src/main/res/mipmap-mdpi/ic_launcher_bdk.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/bitcoindevkit/devkit-wallet/HEAD/Variant-Kyoto/app/src/main/res/mipmap-mdpi/ic_launcher_bdk.png
--------------------------------------------------------------------------------
/Variant-Kyoto/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/bitcoindevkit/devkit-wallet/HEAD/Variant-Kyoto/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png
--------------------------------------------------------------------------------
/Variant-0.32/app/src/main/res/mipmap-hdpi/ic_launcher_round.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/bitcoindevkit/devkit-wallet/HEAD/Variant-0.32/app/src/main/res/mipmap-hdpi/ic_launcher_round.png
--------------------------------------------------------------------------------
/Variant-0.32/app/src/main/res/mipmap-mdpi/ic_launcher_round.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/bitcoindevkit/devkit-wallet/HEAD/Variant-0.32/app/src/main/res/mipmap-mdpi/ic_launcher_round.png
--------------------------------------------------------------------------------
/Variant-0.32/app/src/main/res/mipmap-xhdpi/ic_launcher_round.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/bitcoindevkit/devkit-wallet/HEAD/Variant-0.32/app/src/main/res/mipmap-xhdpi/ic_launcher_round.png
--------------------------------------------------------------------------------
/Variant-0.32/app/src/main/res/mipmap-xxhdpi/ic_launcher_bdk.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/bitcoindevkit/devkit-wallet/HEAD/Variant-0.32/app/src/main/res/mipmap-xxhdpi/ic_launcher_bdk.png
--------------------------------------------------------------------------------
/Variant-0.32/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/bitcoindevkit/devkit-wallet/HEAD/Variant-0.32/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.png
--------------------------------------------------------------------------------
/Variant-0.32/app/src/main/res/mipmap-xxxhdpi/ic_launcher_bdk.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/bitcoindevkit/devkit-wallet/HEAD/Variant-0.32/app/src/main/res/mipmap-xxxhdpi/ic_launcher_bdk.png
--------------------------------------------------------------------------------
/Variant-0.32/build.gradle.kts:
--------------------------------------------------------------------------------
1 | plugins {
2 | id("com.android.application").version("8.2.0").apply(false)
3 | id("org.jetbrains.kotlin.android").version("1.9.20").apply(false)
4 | }
5 |
--------------------------------------------------------------------------------
/Variant-1.0/app/src/main/res/font/ia_writer_mono_bold_italic.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/bitcoindevkit/devkit-wallet/HEAD/Variant-1.0/app/src/main/res/font/ia_writer_mono_bold_italic.ttf
--------------------------------------------------------------------------------
/Variant-1.0/app/src/main/res/font/ia_writer_quattro_regular.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/bitcoindevkit/devkit-wallet/HEAD/Variant-1.0/app/src/main/res/font/ia_writer_quattro_regular.ttf
--------------------------------------------------------------------------------
/Variant-1.0/app/src/main/res/mipmap-xhdpi/ic_launcher_round.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/bitcoindevkit/devkit-wallet/HEAD/Variant-1.0/app/src/main/res/mipmap-xhdpi/ic_launcher_round.png
--------------------------------------------------------------------------------
/Variant-1.0/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/bitcoindevkit/devkit-wallet/HEAD/Variant-1.0/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.png
--------------------------------------------------------------------------------
/Variant-1.0/app/src/main/res/mipmap-xxxhdpi/ic_launcher_bdk.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/bitcoindevkit/devkit-wallet/HEAD/Variant-1.0/app/src/main/res/mipmap-xxxhdpi/ic_launcher_bdk.png
--------------------------------------------------------------------------------
/Variant-1.0/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/bitcoindevkit/devkit-wallet/HEAD/Variant-1.0/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png
--------------------------------------------------------------------------------
/Variant-Esplora/app/src/main/res/font/ia_writer_mono_regular.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/bitcoindevkit/devkit-wallet/HEAD/Variant-Esplora/app/src/main/res/font/ia_writer_mono_regular.ttf
--------------------------------------------------------------------------------
/Variant-Esplora/app/src/main/res/font/ia_writer_quattro_bold.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/bitcoindevkit/devkit-wallet/HEAD/Variant-Esplora/app/src/main/res/font/ia_writer_quattro_bold.ttf
--------------------------------------------------------------------------------
/Variant-Esplora/app/src/main/res/mipmap-hdpi/ic_launcher_bdk.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/bitcoindevkit/devkit-wallet/HEAD/Variant-Esplora/app/src/main/res/mipmap-hdpi/ic_launcher_bdk.png
--------------------------------------------------------------------------------
/Variant-Esplora/app/src/main/res/mipmap-mdpi/ic_launcher_bdk.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/bitcoindevkit/devkit-wallet/HEAD/Variant-Esplora/app/src/main/res/mipmap-mdpi/ic_launcher_bdk.png
--------------------------------------------------------------------------------
/Variant-Esplora/app/src/main/res/mipmap-xhdpi/ic_launcher_bdk.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/bitcoindevkit/devkit-wallet/HEAD/Variant-Esplora/app/src/main/res/mipmap-xhdpi/ic_launcher_bdk.png
--------------------------------------------------------------------------------
/Variant-Esplora/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/bitcoindevkit/devkit-wallet/HEAD/Variant-Esplora/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png
--------------------------------------------------------------------------------
/Variant-Kyoto/app/src/main/res/font/ia_writer_quattro_regular.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/bitcoindevkit/devkit-wallet/HEAD/Variant-Kyoto/app/src/main/res/font/ia_writer_quattro_regular.ttf
--------------------------------------------------------------------------------
/Variant-Kyoto/app/src/main/res/mipmap-hdpi/ic_launcher_round.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/bitcoindevkit/devkit-wallet/HEAD/Variant-Kyoto/app/src/main/res/mipmap-hdpi/ic_launcher_round.png
--------------------------------------------------------------------------------
/Variant-Kyoto/app/src/main/res/mipmap-mdpi/ic_launcher_round.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/bitcoindevkit/devkit-wallet/HEAD/Variant-Kyoto/app/src/main/res/mipmap-mdpi/ic_launcher_round.png
--------------------------------------------------------------------------------
/Variant-Kyoto/app/src/main/res/mipmap-xhdpi/ic_launcher_bdk.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/bitcoindevkit/devkit-wallet/HEAD/Variant-Kyoto/app/src/main/res/mipmap-xhdpi/ic_launcher_bdk.png
--------------------------------------------------------------------------------
/Variant-Kyoto/app/src/main/res/mipmap-xhdpi/ic_launcher_round.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/bitcoindevkit/devkit-wallet/HEAD/Variant-Kyoto/app/src/main/res/mipmap-xhdpi/ic_launcher_round.png
--------------------------------------------------------------------------------
/Variant-Kyoto/app/src/main/res/mipmap-xxhdpi/ic_launcher_bdk.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/bitcoindevkit/devkit-wallet/HEAD/Variant-Kyoto/app/src/main/res/mipmap-xxhdpi/ic_launcher_bdk.png
--------------------------------------------------------------------------------
/Variant-Kyoto/app/src/main/res/mipmap-xxxhdpi/ic_launcher_bdk.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/bitcoindevkit/devkit-wallet/HEAD/Variant-Kyoto/app/src/main/res/mipmap-xxxhdpi/ic_launcher_bdk.png
--------------------------------------------------------------------------------
/Variant-0.32/app/src/main/res/mipmap-hdpi/ic_launcher_bdk_round.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/bitcoindevkit/devkit-wallet/HEAD/Variant-0.32/app/src/main/res/mipmap-hdpi/ic_launcher_bdk_round.png
--------------------------------------------------------------------------------
/Variant-0.32/app/src/main/res/mipmap-mdpi/ic_launcher_bdk_round.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/bitcoindevkit/devkit-wallet/HEAD/Variant-0.32/app/src/main/res/mipmap-mdpi/ic_launcher_bdk_round.png
--------------------------------------------------------------------------------
/Variant-0.32/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/bitcoindevkit/devkit-wallet/HEAD/Variant-0.32/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png
--------------------------------------------------------------------------------
/Variant-1.0/app/src/main/res/font/ia_writer_mono_regular_italic.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/bitcoindevkit/devkit-wallet/HEAD/Variant-1.0/app/src/main/res/font/ia_writer_mono_regular_italic.ttf
--------------------------------------------------------------------------------
/Variant-1.0/app/src/main/res/font/ia_writer_quattro_bold_italic.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/bitcoindevkit/devkit-wallet/HEAD/Variant-1.0/app/src/main/res/font/ia_writer_quattro_bold_italic.ttf
--------------------------------------------------------------------------------
/Variant-1.0/app/src/main/res/mipmap-hdpi/ic_launcher_bdk_round.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/bitcoindevkit/devkit-wallet/HEAD/Variant-1.0/app/src/main/res/mipmap-hdpi/ic_launcher_bdk_round.png
--------------------------------------------------------------------------------
/Variant-1.0/app/src/main/res/mipmap-mdpi/ic_launcher_bdk_round.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/bitcoindevkit/devkit-wallet/HEAD/Variant-1.0/app/src/main/res/mipmap-mdpi/ic_launcher_bdk_round.png
--------------------------------------------------------------------------------
/Variant-1.0/app/src/main/res/mipmap-xhdpi/ic_launcher_bdk_round.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/bitcoindevkit/devkit-wallet/HEAD/Variant-1.0/app/src/main/res/mipmap-xhdpi/ic_launcher_bdk_round.png
--------------------------------------------------------------------------------
/Variant-Esplora/app/src/main/res/font/ia_writer_quattro_regular.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/bitcoindevkit/devkit-wallet/HEAD/Variant-Esplora/app/src/main/res/font/ia_writer_quattro_regular.ttf
--------------------------------------------------------------------------------
/Variant-Esplora/app/src/main/res/mipmap-hdpi/ic_launcher_round.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/bitcoindevkit/devkit-wallet/HEAD/Variant-Esplora/app/src/main/res/mipmap-hdpi/ic_launcher_round.png
--------------------------------------------------------------------------------
/Variant-Esplora/app/src/main/res/mipmap-mdpi/ic_launcher_round.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/bitcoindevkit/devkit-wallet/HEAD/Variant-Esplora/app/src/main/res/mipmap-mdpi/ic_launcher_round.png
--------------------------------------------------------------------------------
/Variant-Esplora/app/src/main/res/mipmap-xhdpi/ic_launcher_round.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/bitcoindevkit/devkit-wallet/HEAD/Variant-Esplora/app/src/main/res/mipmap-xhdpi/ic_launcher_round.png
--------------------------------------------------------------------------------
/Variant-Esplora/app/src/main/res/mipmap-xxhdpi/ic_launcher_bdk.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/bitcoindevkit/devkit-wallet/HEAD/Variant-Esplora/app/src/main/res/mipmap-xxhdpi/ic_launcher_bdk.png
--------------------------------------------------------------------------------
/Variant-Esplora/app/src/main/res/mipmap-xxxhdpi/ic_launcher_bdk.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/bitcoindevkit/devkit-wallet/HEAD/Variant-Esplora/app/src/main/res/mipmap-xxxhdpi/ic_launcher_bdk.png
--------------------------------------------------------------------------------
/Variant-Kyoto/app/src/main/res/font/ia_writer_mono_bold_italic.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/bitcoindevkit/devkit-wallet/HEAD/Variant-Kyoto/app/src/main/res/font/ia_writer_mono_bold_italic.ttf
--------------------------------------------------------------------------------
/Variant-Kyoto/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/bitcoindevkit/devkit-wallet/HEAD/Variant-Kyoto/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.png
--------------------------------------------------------------------------------
/Variant-Kyoto/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/bitcoindevkit/devkit-wallet/HEAD/Variant-Kyoto/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png
--------------------------------------------------------------------------------
/Variant-0.32/app/src/main/res/mipmap-xhdpi/ic_launcher_bdk_round.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/bitcoindevkit/devkit-wallet/HEAD/Variant-0.32/app/src/main/res/mipmap-xhdpi/ic_launcher_bdk_round.png
--------------------------------------------------------------------------------
/Variant-0.32/app/src/main/res/mipmap-xxhdpi/ic_launcher_bdk_round.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/bitcoindevkit/devkit-wallet/HEAD/Variant-0.32/app/src/main/res/mipmap-xxhdpi/ic_launcher_bdk_round.png
--------------------------------------------------------------------------------
/Variant-0.32/app/src/main/res/mipmap-xxxhdpi/ic_launcher_bdk_round.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/bitcoindevkit/devkit-wallet/HEAD/Variant-0.32/app/src/main/res/mipmap-xxxhdpi/ic_launcher_bdk_round.png
--------------------------------------------------------------------------------
/Variant-1.0/app/src/main/res/font/ia_writer_quattro_regular_italic.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/bitcoindevkit/devkit-wallet/HEAD/Variant-1.0/app/src/main/res/font/ia_writer_quattro_regular_italic.ttf
--------------------------------------------------------------------------------
/Variant-1.0/app/src/main/res/mipmap-xxhdpi/ic_launcher_bdk_round.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/bitcoindevkit/devkit-wallet/HEAD/Variant-1.0/app/src/main/res/mipmap-xxhdpi/ic_launcher_bdk_round.png
--------------------------------------------------------------------------------
/Variant-1.0/app/src/main/res/mipmap-xxxhdpi/ic_launcher_bdk_round.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/bitcoindevkit/devkit-wallet/HEAD/Variant-1.0/app/src/main/res/mipmap-xxxhdpi/ic_launcher_bdk_round.png
--------------------------------------------------------------------------------
/Variant-Esplora/app/src/main/res/font/ia_writer_mono_bold_italic.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/bitcoindevkit/devkit-wallet/HEAD/Variant-Esplora/app/src/main/res/font/ia_writer_mono_bold_italic.ttf
--------------------------------------------------------------------------------
/Variant-Esplora/app/src/main/res/mipmap-hdpi/ic_launcher_bdk_round.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/bitcoindevkit/devkit-wallet/HEAD/Variant-Esplora/app/src/main/res/mipmap-hdpi/ic_launcher_bdk_round.png
--------------------------------------------------------------------------------
/Variant-Esplora/app/src/main/res/mipmap-mdpi/ic_launcher_bdk_round.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/bitcoindevkit/devkit-wallet/HEAD/Variant-Esplora/app/src/main/res/mipmap-mdpi/ic_launcher_bdk_round.png
--------------------------------------------------------------------------------
/Variant-Esplora/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/bitcoindevkit/devkit-wallet/HEAD/Variant-Esplora/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.png
--------------------------------------------------------------------------------
/Variant-Esplora/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/bitcoindevkit/devkit-wallet/HEAD/Variant-Esplora/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png
--------------------------------------------------------------------------------
/Variant-Kyoto/app/src/main/res/font/ia_writer_mono_regular_italic.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/bitcoindevkit/devkit-wallet/HEAD/Variant-Kyoto/app/src/main/res/font/ia_writer_mono_regular_italic.ttf
--------------------------------------------------------------------------------
/Variant-Kyoto/app/src/main/res/font/ia_writer_quattro_bold_italic.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/bitcoindevkit/devkit-wallet/HEAD/Variant-Kyoto/app/src/main/res/font/ia_writer_quattro_bold_italic.ttf
--------------------------------------------------------------------------------
/Variant-Kyoto/app/src/main/res/mipmap-hdpi/ic_launcher_bdk_round.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/bitcoindevkit/devkit-wallet/HEAD/Variant-Kyoto/app/src/main/res/mipmap-hdpi/ic_launcher_bdk_round.png
--------------------------------------------------------------------------------
/Variant-Kyoto/app/src/main/res/mipmap-mdpi/ic_launcher_bdk_round.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/bitcoindevkit/devkit-wallet/HEAD/Variant-Kyoto/app/src/main/res/mipmap-mdpi/ic_launcher_bdk_round.png
--------------------------------------------------------------------------------
/Variant-Kyoto/app/src/main/res/mipmap-xhdpi/ic_launcher_bdk_round.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/bitcoindevkit/devkit-wallet/HEAD/Variant-Kyoto/app/src/main/res/mipmap-xhdpi/ic_launcher_bdk_round.png
--------------------------------------------------------------------------------
/Variant-Kyoto/app/src/main/res/mipmap-xxhdpi/ic_launcher_bdk_round.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/bitcoindevkit/devkit-wallet/HEAD/Variant-Kyoto/app/src/main/res/mipmap-xxhdpi/ic_launcher_bdk_round.png
--------------------------------------------------------------------------------
/Variant-Esplora/app/src/main/res/font/ia_writer_mono_regular_italic.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/bitcoindevkit/devkit-wallet/HEAD/Variant-Esplora/app/src/main/res/font/ia_writer_mono_regular_italic.ttf
--------------------------------------------------------------------------------
/Variant-Esplora/app/src/main/res/font/ia_writer_quattro_bold_italic.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/bitcoindevkit/devkit-wallet/HEAD/Variant-Esplora/app/src/main/res/font/ia_writer_quattro_bold_italic.ttf
--------------------------------------------------------------------------------
/Variant-Esplora/app/src/main/res/mipmap-xhdpi/ic_launcher_bdk_round.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/bitcoindevkit/devkit-wallet/HEAD/Variant-Esplora/app/src/main/res/mipmap-xhdpi/ic_launcher_bdk_round.png
--------------------------------------------------------------------------------
/Variant-Esplora/app/src/main/res/mipmap-xxhdpi/ic_launcher_bdk_round.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/bitcoindevkit/devkit-wallet/HEAD/Variant-Esplora/app/src/main/res/mipmap-xxhdpi/ic_launcher_bdk_round.png
--------------------------------------------------------------------------------
/Variant-Kyoto/app/src/main/res/font/ia_writer_quattro_regular_italic.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/bitcoindevkit/devkit-wallet/HEAD/Variant-Kyoto/app/src/main/res/font/ia_writer_quattro_regular_italic.ttf
--------------------------------------------------------------------------------
/Variant-Kyoto/app/src/main/res/mipmap-xxxhdpi/ic_launcher_bdk_round.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/bitcoindevkit/devkit-wallet/HEAD/Variant-Kyoto/app/src/main/res/mipmap-xxxhdpi/ic_launcher_bdk_round.png
--------------------------------------------------------------------------------
/Variant-Esplora/app/src/main/res/font/ia_writer_quattro_regular_italic.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/bitcoindevkit/devkit-wallet/HEAD/Variant-Esplora/app/src/main/res/font/ia_writer_quattro_regular_italic.ttf
--------------------------------------------------------------------------------
/Variant-Esplora/app/src/main/res/mipmap-xxxhdpi/ic_launcher_bdk_round.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/bitcoindevkit/devkit-wallet/HEAD/Variant-Esplora/app/src/main/res/mipmap-xxxhdpi/ic_launcher_bdk_round.png
--------------------------------------------------------------------------------
/Variant-1.0/gradle.properties:
--------------------------------------------------------------------------------
1 | org.gradle.jvmargs=-Xmx2048m -Dfile.encoding=UTF-8
2 | android.useAndroidX=true
3 | android.enableJetifier=true
4 | android.nonTransitiveRClass=false
5 | android.nonFinalResIds=false
6 |
--------------------------------------------------------------------------------
/Variant-Esplora/gradle.properties:
--------------------------------------------------------------------------------
1 | org.gradle.jvmargs=-Xmx2048m -Dfile.encoding=UTF-8
2 | android.useAndroidX=true
3 | android.enableJetifier=true
4 | android.nonTransitiveRClass=false
5 | android.nonFinalResIds=false
6 |
--------------------------------------------------------------------------------
/Variant-0.32/gradle/wrapper/gradle-wrapper.properties:
--------------------------------------------------------------------------------
1 | distributionBase=GRADLE_USER_HOME
2 | distributionPath=wrapper/dists
3 | distributionUrl=https\://services.gradle.org/distributions/gradle-8.2-bin.zip
4 | zipStoreBase=GRADLE_USER_HOME
5 | zipStorePath=wrapper/dists
6 |
--------------------------------------------------------------------------------
/Variant-1.0/gradle/wrapper/gradle-wrapper.properties:
--------------------------------------------------------------------------------
1 | distributionBase=GRADLE_USER_HOME
2 | distributionPath=wrapper/dists
3 | distributionUrl=https\://services.gradle.org/distributions/gradle-8.10.2-bin.zip
4 | zipStoreBase=GRADLE_USER_HOME
5 | zipStorePath=wrapper/dists
6 |
--------------------------------------------------------------------------------
/Variant-Esplora/gradle/wrapper/gradle-wrapper.properties:
--------------------------------------------------------------------------------
1 | distributionBase=GRADLE_USER_HOME
2 | distributionPath=wrapper/dists
3 | distributionUrl=https\://services.gradle.org/distributions/gradle-9.2.0-bin.zip
4 | zipStoreBase=GRADLE_USER_HOME
5 | zipStorePath=wrapper/dists
6 |
--------------------------------------------------------------------------------
/Variant-Kyoto/gradle/wrapper/gradle-wrapper.properties:
--------------------------------------------------------------------------------
1 | distributionBase=GRADLE_USER_HOME
2 | distributionPath=wrapper/dists
3 | distributionUrl=https\://services.gradle.org/distributions/gradle-8.13-bin.zip
4 | zipStoreBase=GRADLE_USER_HOME
5 | zipStorePath=wrapper/dists
6 |
--------------------------------------------------------------------------------
/Variant-0.32/gradle.properties:
--------------------------------------------------------------------------------
1 | org.gradle.jvmargs=-Xmx2048m -Dfile.encoding=UTF-8
2 | android.useAndroidX=true
3 | kotlin.code.style=official
4 | android.enableJetifier=true
5 | android.defaults.buildfeatures.buildconfig=true
6 | android.nonTransitiveRClass=false
7 | android.nonFinalResIds=false
8 |
--------------------------------------------------------------------------------
/Variant-Kyoto/gradle.properties:
--------------------------------------------------------------------------------
1 | org.gradle.jvmargs=-Xmx2048m -Dfile.encoding=UTF-8
2 | android.useAndroidX=true
3 | kotlin.code.style=official
4 | android.enableJetifier=true
5 | android.defaults.buildfeatures.buildconfig=true
6 | android.nonTransitiveRClass=false
7 | android.nonFinalResIds=false
8 |
--------------------------------------------------------------------------------
/Variant-0.32/app/src/test/java/com/goldenraven/devkitwallet/ExampleUnitTest.kt:
--------------------------------------------------------------------------------
1 | package com.goldenraven.devkitwallet
2 |
3 | import org.junit.Test
4 |
5 | import org.junit.Assert.*
6 |
7 | class ExampleUnitTest {
8 | @Test
9 | fun addition_isCorrect() {
10 | assertEquals(4, 2 + 2)
11 | }
12 | }
13 |
--------------------------------------------------------------------------------
/Variant-1.0/app/src/test/java/org/bitcoindevkit/devkitwallet/ExampleUnitTest.kt:
--------------------------------------------------------------------------------
1 | package org.bitcoindevkit.devkitwallet
2 |
3 | import org.junit.Assert.assertEquals
4 | import org.junit.Test
5 |
6 | class ExampleUnitTest {
7 | @Test
8 | fun addition_isCorrect() {
9 | assertEquals(4, 2 + 2)
10 | }
11 | }
12 |
--------------------------------------------------------------------------------
/Variant-Esplora/app/src/test/java/org/bitcoindevkit/devkitwallet/ExampleUnitTest.kt:
--------------------------------------------------------------------------------
1 | package org.bitcoindevkit.devkitwallet
2 |
3 | import org.junit.Assert.assertEquals
4 | import org.junit.Test
5 |
6 | class ExampleUnitTest {
7 | @Test
8 | fun addition_isCorrect() {
9 | assertEquals(4, 2 + 2)
10 | }
11 | }
12 |
--------------------------------------------------------------------------------
/Variant-Kyoto/app/src/test/java/org/bitcoindevkit/devkitwallet/ExampleUnitTest.kt:
--------------------------------------------------------------------------------
1 | package org.bitcoindevkit.devkitwallet
2 |
3 | import org.junit.Assert.assertEquals
4 | import org.junit.Test
5 |
6 | class ExampleUnitTest {
7 | @Test
8 | fun addition_isCorrect() {
9 | assertEquals(4, 2 + 2)
10 | }
11 | }
12 |
--------------------------------------------------------------------------------
/Variant-1.0/app/src/main/res/values/themes.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
7 |
8 |
--------------------------------------------------------------------------------
/Variant-0.32/app/src/main/res/drawable/ic_launcher_bdk_background.xml:
--------------------------------------------------------------------------------
1 |
2 |
5 |
6 |
7 |
8 |
9 |
10 |
--------------------------------------------------------------------------------
/Variant-0.32/app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
--------------------------------------------------------------------------------
/Variant-1.0/app/src/main/res/drawable/ic_launcher_bdk_background.xml:
--------------------------------------------------------------------------------
1 |
2 |
5 |
6 |
7 |
8 |
9 |
10 |
--------------------------------------------------------------------------------
/Variant-Esplora/app/src/main/res/values/themes.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
7 |
8 |
--------------------------------------------------------------------------------
/Variant-Kyoto/app/src/main/res/values/themes.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
7 |
8 |
--------------------------------------------------------------------------------
/Variant-0.32/app/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
--------------------------------------------------------------------------------
/Variant-Esplora/app/src/main/res/drawable/ic_launcher_bdk_background.xml:
--------------------------------------------------------------------------------
1 |
2 |
5 |
6 |
7 |
8 |
9 |
10 |
--------------------------------------------------------------------------------
/Variant-Kyoto/app/src/main/res/drawable/ic_launcher_bdk_background.xml:
--------------------------------------------------------------------------------
1 |
2 |
5 |
6 |
7 |
8 |
9 |
10 |
--------------------------------------------------------------------------------
/Variant-0.32/app/src/main/res/mipmap-anydpi-v26/ic_launcher_bdk.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
--------------------------------------------------------------------------------
/Variant-1.0/app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
--------------------------------------------------------------------------------
/Variant-1.0/app/src/main/res/mipmap-anydpi-v26/ic_launcher_bdk.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
--------------------------------------------------------------------------------
/Variant-Kyoto/app/src/main/res/mipmap-anydpi-v26/ic_launcher_bdk.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
--------------------------------------------------------------------------------
/Variant-0.32/app/src/main/res/mipmap-anydpi-v26/ic_launcher_bdk_round.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
--------------------------------------------------------------------------------
/Variant-1.0/app/src/main/res/mipmap-anydpi-v26/ic_launcher_bdk_round.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
--------------------------------------------------------------------------------
/Variant-Esplora/app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
--------------------------------------------------------------------------------
/Variant-Esplora/app/src/main/res/mipmap-anydpi-v26/ic_launcher_bdk.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
--------------------------------------------------------------------------------
/Variant-Kyoto/app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
--------------------------------------------------------------------------------
/Variant-Kyoto/app/src/main/res/mipmap-anydpi-v26/ic_launcher_bdk_round.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
--------------------------------------------------------------------------------
/Variant-1.0/app/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
--------------------------------------------------------------------------------
/Variant-Esplora/app/src/main/res/mipmap-anydpi-v26/ic_launcher_bdk_round.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
--------------------------------------------------------------------------------
/Variant-Esplora/app/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
--------------------------------------------------------------------------------
/Variant-Kyoto/app/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
6 |
--------------------------------------------------------------------------------
/Variant-1.0/app/src/main/java/org/bitcoindevkit/devkitwallet/domain/CurrencyUnit.kt:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright 2021-2025 thunderbiscuit and contributors.
3 | * Use of this source code is governed by the Apache 2.0 license that can be found in the ./LICENSE file.
4 | */
5 |
6 | package org.bitcoindevkit.devkitwallet.domain
7 |
8 | enum class CurrencyUnit {
9 | Bitcoin,
10 | Satoshi,
11 | }
12 |
--------------------------------------------------------------------------------
/Variant-Kyoto/app/src/main/java/org/bitcoindevkit/devkitwallet/domain/CurrencyUnit.kt:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright 2021-2024 thunderbiscuit and contributors.
3 | * Use of this source code is governed by the Apache 2.0 license that can be found in the ./LICENSE file.
4 | */
5 |
6 | package org.bitcoindevkit.devkitwallet.domain
7 |
8 | enum class CurrencyUnit {
9 | Bitcoin,
10 | Satoshi,
11 | }
12 |
--------------------------------------------------------------------------------
/.github/workflows/docs.yaml:
--------------------------------------------------------------------------------
1 | name: Deploy Companion Documentation Website
2 |
3 | on: workflow_dispatch
4 |
5 | jobs:
6 | deploy:
7 | runs-on: ubuntu-latest
8 | steps:
9 | - uses: actions/checkout@v2
10 | - uses: actions/setup-python@v2
11 | with:
12 | python-version: 3.x
13 | - run: pip install mkdocs-material
14 | - run: mkdocs gh-deploy --force
15 |
--------------------------------------------------------------------------------
/Variant-Esplora/app/src/main/java/org/bitcoindevkit/devkitwallet/domain/CurrencyUnit.kt:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright 2021-2025 thunderbiscuit and contributors.
3 | * Use of this source code is governed by the Apache 2.0 license that can be found in the ./LICENSE file.
4 | */
5 |
6 | package org.bitcoindevkit.devkitwallet.domain
7 |
8 | enum class CurrencyUnit {
9 | Bitcoin,
10 | Satoshi,
11 | }
12 |
--------------------------------------------------------------------------------
/Variant-0.32/.gitignore:
--------------------------------------------------------------------------------
1 | *.iml
2 | .gradle
3 | /.idea/
4 | .DS_Store
5 | /build
6 | /app/build/
7 | /captures
8 | .externalNativeBuild
9 | .cxx
10 | app-simple-wallet/local.properties
11 | app-advanced-features/local.properties
12 | app-ui-only/local.properties
13 | app-simple-wallet/app/build/
14 | app/build/
15 | app-ui-only/app/build/
16 | app-clean/
17 | .idea/
18 | local.properties
19 | app.run.xml
20 |
--------------------------------------------------------------------------------
/Variant-Kyoto/.gitignore:
--------------------------------------------------------------------------------
1 | *.iml
2 | .gradle
3 | /.idea/
4 | .DS_Store
5 | /build
6 | /app/build/
7 | /captures
8 | .externalNativeBuild
9 | .cxx
10 | app-simple-wallet/local.properties
11 | app-advanced-features/local.properties
12 | app-ui-only/local.properties
13 | app-simple-wallet/app/build/
14 | app/build/
15 | app-ui-only/app/build/
16 | app-clean/
17 | .idea/
18 | local.properties
19 | app.run.xml
20 | release/
21 |
--------------------------------------------------------------------------------
/Variant-0.32/app/src/main/java/com/goldenraven/devkitwallet/utils/FormatInBtc.kt:
--------------------------------------------------------------------------------
1 | package com.goldenraven.devkitwallet.utils
2 |
3 | import java.text.DecimalFormat
4 |
5 | fun ULong?.formatInBtc(): String {
6 | val balanceInSats = if (this == 0UL || this == null) {
7 | 0F
8 | } else {
9 | this.toFloat().div(100_000_000)
10 | }
11 | return DecimalFormat("0.00000000").format(balanceInSats)
12 | }
13 |
--------------------------------------------------------------------------------
/Variant-1.0/.gitignore:
--------------------------------------------------------------------------------
1 | *.iml
2 | .gradle
3 | /.idea/
4 | .DS_Store
5 | /build
6 | /app/build/
7 | /captures
8 | .externalNativeBuild
9 | .cxx
10 | app-simple-wallet/local.properties
11 | app-advanced-features/local.properties
12 | app-ui-only/local.properties
13 | app-simple-wallet/app/build/
14 | app/build/
15 | app-ui-only/app/build/
16 | app-clean/
17 | .idea/
18 | local.properties
19 | app.run.xml
20 | release/
21 | .kotlin/
22 |
--------------------------------------------------------------------------------
/Variant-Esplora/.gitignore:
--------------------------------------------------------------------------------
1 | *.iml
2 | .gradle
3 | /.idea/
4 | .DS_Store
5 | /build
6 | /app/build/
7 | /captures
8 | .externalNativeBuild
9 | .cxx
10 | app-simple-wallet/local.properties
11 | app-advanced-features/local.properties
12 | app-ui-only/local.properties
13 | app-simple-wallet/app/build/
14 | app/build/
15 | app-ui-only/app/build/
16 | app-clean/
17 | .idea/
18 | local.properties
19 | app.run.xml
20 | release/
21 | .kotlin/
22 |
--------------------------------------------------------------------------------
/Variant-0.32/app/src/main/res/drawable/launch_screen.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
10 |
11 |
12 |
--------------------------------------------------------------------------------
/Variant-1.0/app/src/main/res/drawable/launch_screen.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
10 |
11 |
12 |
--------------------------------------------------------------------------------
/Variant-Kyoto/app/src/main/res/drawable/launch_screen.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
10 |
11 |
12 |
--------------------------------------------------------------------------------
/Variant-Esplora/app/src/main/res/drawable/launch_screen.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 |
5 |
10 |
11 |
12 |
--------------------------------------------------------------------------------
/Variant-1.0/app/src/main/res/values/splash.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
8 |
9 |
--------------------------------------------------------------------------------
/Variant-Esplora/app/src/main/res/values/splash.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
8 |
9 |
--------------------------------------------------------------------------------
/Variant-Kyoto/app/src/main/res/values/splash.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
8 |
9 |
--------------------------------------------------------------------------------
/.github/workflows/ktlint.yaml:
--------------------------------------------------------------------------------
1 | name: Ktlint Check
2 |
3 | on: [workflow_dispatch, pull_request]
4 |
5 | jobs:
6 | ktlint:
7 | name: "Run Ktlint Check"
8 | runs-on: ubuntu-22.04
9 |
10 | steps:
11 | - name: "Checkout branch"
12 | uses: actions/checkout@v4
13 |
14 | - name: "Set up JDK 17"
15 | uses: actions/setup-java@v4
16 | with:
17 | distribution: temurin
18 | java-version: 17
19 |
20 | - name: "Run Ktlint Check"
21 | run: ./gradlew ktlintCheck
22 |
--------------------------------------------------------------------------------
/Variant-0.32/app/src/main/res/drawable/ic_round_expand_more_24.xml:
--------------------------------------------------------------------------------
1 |
4 |
5 |
6 |
--------------------------------------------------------------------------------
/Variant-0.32/app/src/main/res/values/themes.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
7 |
8 |
11 |
12 |
--------------------------------------------------------------------------------
/Variant-1.0/settings.gradle.kts:
--------------------------------------------------------------------------------
1 | rootProject.name = "Devkit Wallet (1.0 API)"
2 | include("app")
3 |
4 | pluginManagement {
5 | repositories {
6 | google()
7 | gradlePluginPortal()
8 | mavenCentral()
9 | }
10 | }
11 |
12 | dependencyResolutionManagement {
13 | repositories {
14 | google()
15 | mavenCentral()
16 |
17 | // Snapshots repository
18 | maven("https://s01.oss.sonatype.org/content/repositories/snapshots/")
19 |
20 | // Local Maven (~/.m2/repository/)
21 | // mavenLocal()
22 | }
23 | }
24 |
--------------------------------------------------------------------------------
/Variant-Kyoto/.editorconfig:
--------------------------------------------------------------------------------
1 | # Root .editorconfig file
2 | root = true
3 |
4 | [*.{kt,kts}]
5 | indent_style = space
6 | max_line_length = 120
7 | ktlint_standard_trailing-comma-on-call-site = disabled
8 | ktlint_standard_multiline-expression-wrapping = disabled
9 | ktlint_standard_string-template-indent = disabled
10 | ktlint_function_signature_rule_force_multiline_when_parameter_count_greater_or_equal_than = 5
11 | ktlint_function_naming_ignore_when_annotated_with=Composable
12 | ktlint_standard_function-expression-body = disabled
13 | ktlint_standard_class-signature = disabled
14 |
--------------------------------------------------------------------------------
/Variant-Kyoto/settings.gradle.kts:
--------------------------------------------------------------------------------
1 | rootProject.name = "Devkit Wallet (Kyoto)"
2 | include("app")
3 |
4 | pluginManagement {
5 | repositories {
6 | google()
7 | gradlePluginPortal()
8 | mavenCentral()
9 | }
10 | }
11 |
12 | dependencyResolutionManagement {
13 | repositories {
14 | google()
15 | mavenCentral()
16 |
17 | // Snapshots repository
18 | maven("https://s01.oss.sonatype.org/content/repositories/snapshots/")
19 |
20 | // Local Maven (~/.m2/repository/)
21 | mavenLocal()
22 | }
23 | }
24 |
--------------------------------------------------------------------------------
/Variant-0.32/settings.gradle.kts:
--------------------------------------------------------------------------------
1 | rootProject.name = "Devkit Wallet (0.32.1 API)"
2 | include("app")
3 |
4 | pluginManagement {
5 | repositories {
6 | google()
7 | gradlePluginPortal()
8 | mavenCentral()
9 | }
10 | }
11 |
12 | dependencyResolutionManagement {
13 | repositories {
14 | google()
15 | mavenCentral()
16 |
17 | // snapshot repository
18 | maven("https://s01.oss.sonatype.org/content/repositories/snapshots/")
19 |
20 | // Local Maven (~/.m2/repository/)
21 | // mavenLocal()
22 | }
23 | }
24 |
--------------------------------------------------------------------------------
/Variant-1.0/.editorconfig:
--------------------------------------------------------------------------------
1 | # Root .editorconfig file
2 | root = true
3 |
4 | [*.{kt,kts}]
5 | indent_style = space
6 | max_line_length = 120
7 |
8 | ktlint_standard_trailing-comma-on-call-site = disabled
9 | ktlint_standard_multiline-expression-wrapping = disabled
10 | ktlint_standard_string-template-indent = disabled
11 | ktlint_function_signature_rule_force_multiline_when_parameter_count_greater_or_equal_than = 5
12 | ktlint_function_naming_ignore_when_annotated_with=Composable
13 | ktlint_standard_function-expression-body = disabled
14 | ktlint_standard_class-signature = disabled
15 |
--------------------------------------------------------------------------------
/Variant-Esplora/.editorconfig:
--------------------------------------------------------------------------------
1 | # Root .editorconfig file
2 | root = true
3 |
4 | [*.{kt,kts}]
5 | indent_style = space
6 | max_line_length = 120
7 |
8 | ktlint_standard_trailing-comma-on-call-site = disabled
9 | ktlint_standard_multiline-expression-wrapping = disabled
10 | ktlint_standard_string-template-indent = disabled
11 | ktlint_function_signature_rule_force_multiline_when_parameter_count_greater_or_equal_than = 5
12 | ktlint_function_naming_ignore_when_annotated_with=Composable
13 | ktlint_standard_function-expression-body = disabled
14 | ktlint_standard_class-signature = disabled
15 |
--------------------------------------------------------------------------------
/Variant-Esplora/settings.gradle.kts:
--------------------------------------------------------------------------------
1 | rootProject.name = "Devkit Wallet (Esplora)"
2 | include("app")
3 |
4 | pluginManagement {
5 | repositories {
6 | google()
7 | gradlePluginPortal()
8 | mavenCentral()
9 | }
10 | }
11 |
12 | dependencyResolutionManagement {
13 | repositories {
14 | google()
15 | mavenCentral()
16 |
17 | // Snapshots repository
18 | maven("https://s01.oss.sonatype.org/content/repositories/snapshots/")
19 |
20 | // Local Maven (~/.m2/repository/)
21 | // mavenLocal()
22 | }
23 | }
24 |
--------------------------------------------------------------------------------
/Variant-1.0/app/src/main/java/org/bitcoindevkit/devkitwallet/presentation/viewmodels/mvi/MviReceiveScreen.kt:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright 2021-2025 thunderbiscuit and contributors.
3 | * Use of this source code is governed by the Apache 2.0 license that can be found in the ./LICENSE file.
4 | */
5 |
6 | package org.bitcoindevkit.devkitwallet.presentation.viewmodels.mvi
7 |
8 | data class ReceiveScreenState(
9 | val address: String? = null,
10 | val addressIndex: UInt? = null,
11 | )
12 |
13 | sealed interface ReceiveScreenAction {
14 | data object UpdateAddress : ReceiveScreenAction
15 | }
16 |
--------------------------------------------------------------------------------
/Variant-Kyoto/app/src/main/java/org/bitcoindevkit/devkitwallet/presentation/viewmodels/mvi/MviReceiveScreen.kt:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright 2021-2024 thunderbiscuit and contributors.
3 | * Use of this source code is governed by the Apache 2.0 license that can be found in the ./LICENSE file.
4 | */
5 |
6 | package org.bitcoindevkit.devkitwallet.presentation.viewmodels.mvi
7 |
8 | data class ReceiveScreenState(
9 | val address: String? = null,
10 | val addressIndex: UInt? = null,
11 | )
12 |
13 | sealed interface ReceiveScreenAction {
14 | data object UpdateAddress : ReceiveScreenAction
15 | }
16 |
--------------------------------------------------------------------------------
/Variant-1.0/app/src/main/java/org/bitcoindevkit/devkitwallet/domain/utils/FormatInBtc.kt:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright 2021-2025 thunderbiscuit and contributors.
3 | * Use of this source code is governed by the Apache 2.0 license that can be found in the ./LICENSE file.
4 | */
5 |
6 | package org.bitcoindevkit.devkitwallet.domain.utils
7 |
8 | import java.text.DecimalFormat
9 |
10 | fun ULong?.formatInBtc(): String {
11 | val balanceInSats =
12 | if (this == 0UL || this == null) {
13 | 0F
14 | } else {
15 | this.toDouble().div(100_000_000)
16 | }
17 | return DecimalFormat("0.00000000").format(balanceInSats)
18 | }
19 |
--------------------------------------------------------------------------------
/Variant-Kyoto/app/src/main/java/org/bitcoindevkit/devkitwallet/domain/utils/FormatInBtc.kt:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright 2021-2024 thunderbiscuit and contributors.
3 | * Use of this source code is governed by the Apache 2.0 license that can be found in the ./LICENSE file.
4 | */
5 |
6 | package org.bitcoindevkit.devkitwallet.domain.utils
7 |
8 | import java.text.DecimalFormat
9 |
10 | fun ULong?.formatInBtc(): String {
11 | val balanceInSats =
12 | if (this == 0UL || this == null) {
13 | 0F
14 | } else {
15 | this.toDouble().div(100_000_000)
16 | }
17 | return DecimalFormat("0.00000000").format(balanceInSats)
18 | }
19 |
--------------------------------------------------------------------------------
/Variant-Esplora/app/src/main/java/org/bitcoindevkit/devkitwallet/domain/utils/FormatInBtc.kt:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright 2021-2025 thunderbiscuit and contributors.
3 | * Use of this source code is governed by the Apache 2.0 license that can be found in the ./LICENSE file.
4 | */
5 |
6 | package org.bitcoindevkit.devkitwallet.domain.utils
7 |
8 | import java.text.DecimalFormat
9 |
10 | fun ULong?.formatInBtc(): String {
11 | val balanceInSats =
12 | if (this == 0UL || this == null) {
13 | 0F
14 | } else {
15 | this.toDouble().div(100_000_000)
16 | }
17 | return DecimalFormat("0.00000000").format(balanceInSats)
18 | }
19 |
--------------------------------------------------------------------------------
/Variant-0.32/app/src/main/java/com/goldenraven/devkitwallet/ui/theme/Theme.kt:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright 2020-2023 thunderbiscuit and contributors.
3 | * Use of this source code is governed by the Apache 2.0 license that can be found in the ./LICENSE file.
4 | */
5 |
6 | package com.goldenraven.devkitwallet.ui.theme
7 |
8 | import androidx.compose.material3.MaterialTheme
9 | import androidx.compose.runtime.Composable
10 |
11 | @Composable
12 | fun DevkitTheme(content: @Composable () -> Unit) {
13 | MaterialTheme(
14 | // colorScheme = devkitColors,
15 | // shapes = devkitShapes,
16 | typography = devkitTypography,
17 | content = content
18 | )
19 | }
20 |
--------------------------------------------------------------------------------
/Variant-Kyoto/app/src/main/java/org/bitcoindevkit/devkitwallet/data/TxDetails.kt:
--------------------------------------------------------------------------------
1 | package org.bitcoindevkit.devkitwallet.data
2 |
3 | import org.bitcoindevkit.FeeRate
4 | import org.bitcoindevkit.Transaction
5 |
6 | data class TxDetails(
7 | val transaction: Transaction,
8 | val txid: String,
9 | val sent: ULong,
10 | val received: ULong,
11 | val fee: ULong,
12 | val feeRate: FeeRate?,
13 | val pending: Boolean,
14 | val confirmationBlock: ConfirmationBlock?,
15 | val confirmationTimestamp: Timestamp?,
16 | )
17 |
18 | @JvmInline
19 | value class Timestamp(val timestamp: ULong)
20 |
21 | @JvmInline
22 | value class ConfirmationBlock(val height: UInt)
23 |
--------------------------------------------------------------------------------
/Variant-0.32/app/src/main/java/com/goldenraven/devkitwallet/utils/Timestamps.kt:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright 2021 thunderbiscuit and contributors.
3 | * Use of this source code is governed by the Apache 2.0 license that can be found in the ./LICENSE file.
4 | */
5 |
6 | package com.goldenraven.devkitwallet.utils
7 |
8 | import android.text.format.DateFormat
9 | import java.util.Calendar
10 | import java.util.Locale
11 |
12 | // extension function on the ULong timestamp provided in the Transaction.Confirmed type
13 | fun ULong.timestampToString(): String {
14 | val calendar = Calendar.getInstance(Locale.ENGLISH)
15 | calendar.timeInMillis = (this * 1000u).toLong()
16 | return DateFormat.format("MMMM d yyyy HH:mm", calendar).toString()
17 | }
18 |
--------------------------------------------------------------------------------
/Variant-1.0/app/src/main/java/org/bitcoindevkit/devkitwallet/domain/utils/Timestamps.kt:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright 2021-2025 thunderbiscuit and contributors.
3 | * Use of this source code is governed by the Apache 2.0 license that can be found in the ./LICENSE file.
4 | */
5 |
6 | package org.bitcoindevkit.devkitwallet.domain.utils
7 |
8 | import android.text.format.DateFormat
9 | import java.util.Calendar
10 | import java.util.Locale
11 |
12 | // extension function on the ULong timestamp provided in the Transaction.Confirmed type
13 | fun ULong.timestampToString(): String {
14 | val calendar = Calendar.getInstance(Locale.ENGLISH)
15 | calendar.timeInMillis = (this * 1000u).toLong()
16 | return DateFormat.format("MMMM d yyyy HH:mm", calendar).toString()
17 | }
18 |
--------------------------------------------------------------------------------
/Variant-Esplora/app/src/main/java/org/bitcoindevkit/devkitwallet/domain/utils/Timestamps.kt:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright 2021-2025 thunderbiscuit and contributors.
3 | * Use of this source code is governed by the Apache 2.0 license that can be found in the ./LICENSE file.
4 | */
5 |
6 | package org.bitcoindevkit.devkitwallet.domain.utils
7 |
8 | import android.text.format.DateFormat
9 | import java.util.Calendar
10 | import java.util.Locale
11 |
12 | // extension function on the ULong timestamp provided in the Transaction.Confirmed type
13 | fun ULong.timestampToString(): String {
14 | val calendar = Calendar.getInstance(Locale.ENGLISH)
15 | calendar.timeInMillis = (this * 1000u).toLong()
16 | return DateFormat.format("MMMM d yyyy HH:mm", calendar).toString()
17 | }
18 |
--------------------------------------------------------------------------------
/Variant-Kyoto/app/src/main/java/org/bitcoindevkit/devkitwallet/domain/utils/Timestamps.kt:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright 2021-2024 thunderbiscuit and contributors.
3 | * Use of this source code is governed by the Apache 2.0 license that can be found in the ./LICENSE file.
4 | */
5 |
6 | package org.bitcoindevkit.devkitwallet.domain.utils
7 |
8 | import android.text.format.DateFormat
9 | import java.util.Calendar
10 | import java.util.Locale
11 |
12 | // extension function on the ULong timestamp provided in the Transaction.Confirmed type
13 | fun ULong.timestampToString(): String {
14 | val calendar = Calendar.getInstance(Locale.ENGLISH)
15 | calendar.timeInMillis = (this * 1000u).toLong()
16 | return DateFormat.format("MMMM d yyyy HH:mm", calendar).toString()
17 | }
18 |
--------------------------------------------------------------------------------
/Variant-1.0/app/src/main/proto/wallets.proto:
--------------------------------------------------------------------------------
1 | syntax = "proto3";
2 |
3 | option java_package = "org.bitcoindevkit.devkitwallet.data";
4 | option java_multiple_files = true;
5 |
6 | message UserPreferences {
7 | bool introDone = 1;
8 | repeated SingleWallet wallets = 2;
9 | }
10 |
11 | message SingleWallet {
12 | string id = 1;
13 | string name = 2;
14 | ActiveWalletNetwork network = 3;
15 | ActiveWalletScriptType scriptType = 4;
16 | string descriptor = 5;
17 | string changeDescriptor = 6;
18 | string recoveryPhrase = 7;
19 | bool fullScanCompleted = 8;
20 | }
21 |
22 | enum ActiveWalletNetwork {
23 | TESTNET = 0;
24 | SIGNET = 1;
25 | REGTEST = 2;
26 | }
27 |
28 | enum ActiveWalletScriptType {
29 | P2WPKH = 0;
30 | P2TR = 1;
31 | UNKNOWN = 2;
32 | }
33 |
--------------------------------------------------------------------------------
/Variant-Kyoto/app/src/main/proto/wallets.proto:
--------------------------------------------------------------------------------
1 | syntax = "proto3";
2 |
3 | option java_package = "org.bitcoindevkit.devkitwallet.data";
4 | option java_multiple_files = true;
5 |
6 | message UserPreferences {
7 | bool introDone = 1;
8 | repeated SingleWallet wallets = 2;
9 | }
10 |
11 | message SingleWallet {
12 | string id = 1;
13 | string name = 2;
14 | ActiveWalletNetwork network = 3;
15 | ActiveWalletScriptType scriptType = 4;
16 | string descriptor = 5;
17 | string changeDescriptor = 6;
18 | string recoveryPhrase = 7;
19 | bool fullScanCompleted = 8;
20 | }
21 |
22 | enum ActiveWalletNetwork {
23 | TESTNET = 0;
24 | SIGNET = 1;
25 | REGTEST = 2;
26 | }
27 |
28 | enum ActiveWalletScriptType {
29 | P2WPKH = 0;
30 | P2TR = 1;
31 | UNKNOWN = 2;
32 | }
33 |
--------------------------------------------------------------------------------
/Variant-1.0/app/src/main/java/org/bitcoindevkit/devkitwallet/presentation/theme/Theme.kt:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright 2021-2025 thunderbiscuit and contributors.
3 | * Use of this source code is governed by the Apache 2.0 license that can be found in the ./LICENSE file.
4 | */
5 |
6 | package org.bitcoindevkit.devkitwallet.presentation.theme
7 |
8 | import androidx.compose.material3.MaterialTheme
9 | import androidx.compose.runtime.Composable
10 |
11 | @Composable
12 | fun DevkitTheme(content: @Composable () -> Unit) {
13 | MaterialTheme(
14 | // colorScheme = devkitColors,
15 | // shapes = devkitShapes,
16 | typography = devkitTypography,
17 | content = content
18 | )
19 | }
20 |
21 | // NOTES ON THE UI
22 | // - The standard padding is 32dp for start/end, 16dp for top/bottom
23 |
--------------------------------------------------------------------------------
/Variant-1.0/app/src/main/java/org/bitcoindevkit/devkitwallet/presentation/viewmodels/mvi/MviWalletScreen.kt:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright 2021-2025 thunderbiscuit and contributors.
3 | * Use of this source code is governed by the Apache 2.0 license that can be found in the ./LICENSE file.
4 | */
5 |
6 | package org.bitcoindevkit.devkitwallet.presentation.viewmodels.mvi
7 |
8 | import org.bitcoindevkit.devkitwallet.domain.CurrencyUnit
9 |
10 | data class WalletScreenState(
11 | val balance: ULong = 0u,
12 | val syncing: Boolean = false,
13 | val unit: CurrencyUnit = CurrencyUnit.Bitcoin,
14 | val esploraEndpoint: String = "",
15 | )
16 |
17 | sealed interface WalletScreenAction {
18 | data object UpdateBalance : WalletScreenAction
19 |
20 | data object SwitchUnit : WalletScreenAction
21 | }
22 |
--------------------------------------------------------------------------------
/Variant-Esplora/app/src/main/proto/wallets.proto:
--------------------------------------------------------------------------------
1 | syntax = "proto3";
2 |
3 | option java_package = "org.bitcoindevkit.devkitwallet.data";
4 | option java_multiple_files = true;
5 |
6 | message UserPreferences {
7 | bool introDone = 1;
8 | repeated SingleWallet wallets = 2;
9 | }
10 |
11 | message SingleWallet {
12 | string id = 1;
13 | string name = 2;
14 | ActiveWalletNetwork network = 3;
15 | ActiveWalletScriptType scriptType = 4;
16 | string descriptor = 5;
17 | string changeDescriptor = 6;
18 | string recoveryPhrase = 7;
19 | bool fullScanCompleted = 8;
20 | }
21 |
22 | enum ActiveWalletNetwork {
23 | REGTEST = 0;
24 | SIGNET = 1;
25 | TESTNET3 = 2;
26 | TESTNET4 = 3;
27 | }
28 |
29 | enum ActiveWalletScriptType {
30 | P2WPKH = 0;
31 | P2TR = 1;
32 | UNKNOWN = 2;
33 | }
34 |
--------------------------------------------------------------------------------
/Variant-1.0/app/src/main/java/org/bitcoindevkit/devkitwallet/data/WalletConfigs.kt:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright 2021-2025 thunderbiscuit and contributors.
3 | * Use of this source code is governed by the Apache 2.0 license that can be found in the ./LICENSE file.
4 | */
5 |
6 | package org.bitcoindevkit.devkitwallet.data
7 |
8 | import org.bitcoindevkit.Descriptor
9 | import org.bitcoindevkit.Network
10 |
11 | data class NewWalletConfig(
12 | val name: String,
13 | val network: Network,
14 | val scriptType: ActiveWalletScriptType,
15 | )
16 |
17 | data class RecoverWalletConfig(
18 | val name: String,
19 | val network: Network,
20 | val scriptType: ActiveWalletScriptType?,
21 | val recoveryPhrase: String?,
22 | val descriptor: Descriptor,
23 | val changeDescriptor: Descriptor,
24 | )
25 |
--------------------------------------------------------------------------------
/Variant-Esplora/app/src/main/java/org/bitcoindevkit/devkitwallet/presentation/theme/Theme.kt:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright 2021-2025 thunderbiscuit and contributors.
3 | * Use of this source code is governed by the Apache 2.0 license that can be found in the ./LICENSE file.
4 | */
5 |
6 | package org.bitcoindevkit.devkitwallet.presentation.theme
7 |
8 | import androidx.compose.material3.MaterialTheme
9 | import androidx.compose.runtime.Composable
10 |
11 | @Composable
12 | fun DevkitTheme(content: @Composable () -> Unit) {
13 | MaterialTheme(
14 | // colorScheme = devkitColors,
15 | // shapes = devkitShapes,
16 | typography = devkitTypography,
17 | content = content
18 | )
19 | }
20 |
21 | // NOTES ON THE UI
22 | // - The standard padding is 32dp for start/end, 16dp for top/bottom
23 |
--------------------------------------------------------------------------------
/Variant-Kyoto/app/src/main/java/org/bitcoindevkit/devkitwallet/data/WalletConfigs.kt:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright 2021-2024 thunderbiscuit and contributors.
3 | * Use of this source code is governed by the Apache 2.0 license that can be found in the ./LICENSE file.
4 | */
5 |
6 | package org.bitcoindevkit.devkitwallet.data
7 |
8 | import org.bitcoindevkit.Descriptor
9 | import org.bitcoindevkit.Network
10 |
11 | data class NewWalletConfig(
12 | val name: String,
13 | val network: Network,
14 | val scriptType: ActiveWalletScriptType,
15 | )
16 |
17 | data class RecoverWalletConfig(
18 | val name: String,
19 | val network: Network,
20 | val scriptType: ActiveWalletScriptType?,
21 | val recoveryPhrase: String?,
22 | val descriptor: Descriptor,
23 | val changeDescriptor: Descriptor,
24 | )
25 |
--------------------------------------------------------------------------------
/Variant-Kyoto/app/src/main/java/org/bitcoindevkit/devkitwallet/presentation/theme/Theme.kt:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright 2021-2024 thunderbiscuit and contributors.
3 | * Use of this source code is governed by the Apache 2.0 license that can be found in the ./LICENSE file.
4 | */
5 |
6 | package org.bitcoindevkit.devkitwallet.presentation.theme
7 |
8 | import androidx.compose.material3.MaterialTheme
9 | import androidx.compose.runtime.Composable
10 |
11 | @Composable
12 | fun DevkitTheme(content: @Composable () -> Unit) {
13 | MaterialTheme(
14 | // colorScheme = devkitColors,
15 | // shapes = devkitShapes,
16 | typography = devkitTypography,
17 | content = content,
18 | )
19 | }
20 |
21 | // NOTES ON THE UI
22 | // - The standard padding is 32dp for start/end, 16dp for top/bottom
23 |
--------------------------------------------------------------------------------
/Variant-Esplora/app/src/main/java/org/bitcoindevkit/devkitwallet/data/WalletConfigs.kt:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright 2021-2025 thunderbiscuit and contributors.
3 | * Use of this source code is governed by the Apache 2.0 license that can be found in the ./LICENSE file.
4 | */
5 |
6 | package org.bitcoindevkit.devkitwallet.data
7 |
8 | import org.bitcoindevkit.Descriptor
9 | import org.bitcoindevkit.Network
10 |
11 | data class NewWalletConfig(
12 | val name: String,
13 | val network: Network,
14 | val scriptType: ActiveWalletScriptType,
15 | )
16 |
17 | data class RecoverWalletConfig(
18 | val name: String,
19 | val network: Network,
20 | val scriptType: ActiveWalletScriptType?,
21 | val recoveryPhrase: String?,
22 | val descriptor: Descriptor,
23 | val changeDescriptor: Descriptor,
24 | )
25 |
--------------------------------------------------------------------------------
/Variant-0.32/app/src/main/java/com/goldenraven/devkitwallet/ui/theme/Type.kt:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright 2020-2023 thunderbiscuit and contributors.
3 | * Use of this source code is governed by the Apache 2.0 license that can be found in the ./LICENSE file.
4 | */
5 |
6 | package com.goldenraven.devkitwallet.ui.theme
7 |
8 | import androidx.compose.material3.Typography
9 | import androidx.compose.ui.text.TextStyle
10 | import androidx.compose.ui.text.font.FontWeight
11 | import androidx.compose.ui.unit.sp
12 |
13 | internal val devkitTypography = Typography(
14 | labelLarge = TextStyle(
15 | fontFamily = jetBrainsMonoLight,
16 | fontWeight = FontWeight.Light,
17 | fontSize = 16.sp,
18 | lineHeight = 28.sp
19 | ),
20 | )
21 |
22 | // These are the default text styles used by Material3 components:
23 | // Buttons: labelLarge
24 |
--------------------------------------------------------------------------------
/Variant-0.32/app/proguard-rules.pro:
--------------------------------------------------------------------------------
1 | # Add project specific ProGuard rules here.
2 | # You can control the set of applied configuration files using the
3 | # proguardFiles setting in build.gradle.kts.
4 | #
5 | # For more details, see
6 | # http://developer.android.com/guide/developing/tools/proguard.html
7 |
8 | # If your project uses WebView with JS, uncomment the following
9 | # and specify the fully qualified class name to the JavaScript interface
10 | # class:
11 | #-keepclassmembers class fqcn.of.javascript.interface.for.webview {
12 | # public *;
13 | #}
14 |
15 | # Uncomment this to preserve the line number information for
16 | # debugging stack traces.
17 | #-keepattributes SourceFile,LineNumberTable
18 |
19 | # If you keep the line number information, uncomment this to
20 | # hide the original source file name.
21 | #-renamesourcefileattribute SourceFile
--------------------------------------------------------------------------------
/Variant-1.0/app/proguard-rules.pro:
--------------------------------------------------------------------------------
1 | # Add project specific ProGuard rules here.
2 | # You can control the set of applied configuration files using the
3 | # proguardFiles setting in build.gradle.kts.
4 | #
5 | # For more details, see
6 | # http://developer.android.com/guide/developing/tools/proguard.html
7 |
8 | # If your project uses WebView with JS, uncomment the following
9 | # and specify the fully qualified class name to the JavaScript interface
10 | # class:
11 | #-keepclassmembers class fqcn.of.javascript.interface.for.webview {
12 | # public *;
13 | #}
14 |
15 | # Uncomment this to preserve the line number information for
16 | # debugging stack traces.
17 | #-keepattributes SourceFile,LineNumberTable
18 |
19 | # If you keep the line number information, uncomment this to
20 | # hide the original source file name.
21 | #-renamesourcefileattribute SourceFile
--------------------------------------------------------------------------------
/Variant-Esplora/app/proguard-rules.pro:
--------------------------------------------------------------------------------
1 | # Add project specific ProGuard rules here.
2 | # You can control the set of applied configuration files using the
3 | # proguardFiles setting in build.gradle.kts.
4 | #
5 | # For more details, see
6 | # http://developer.android.com/guide/developing/tools/proguard.html
7 |
8 | # If your project uses WebView with JS, uncomment the following
9 | # and specify the fully qualified class name to the JavaScript interface
10 | # class:
11 | #-keepclassmembers class fqcn.of.javascript.interface.for.webview {
12 | # public *;
13 | #}
14 |
15 | # Uncomment this to preserve the line number information for
16 | # debugging stack traces.
17 | #-keepattributes SourceFile,LineNumberTable
18 |
19 | # If you keep the line number information, uncomment this to
20 | # hide the original source file name.
21 | #-renamesourcefileattribute SourceFile
--------------------------------------------------------------------------------
/Variant-Kyoto/app/proguard-rules.pro:
--------------------------------------------------------------------------------
1 | # Add project specific ProGuard rules here.
2 | # You can control the set of applied configuration files using the
3 | # proguardFiles setting in build.gradle.kts.
4 | #
5 | # For more details, see
6 | # http://developer.android.com/guide/developing/tools/proguard.html
7 |
8 | # If your project uses WebView with JS, uncomment the following
9 | # and specify the fully qualified class name to the JavaScript interface
10 | # class:
11 | #-keepclassmembers class fqcn.of.javascript.interface.for.webview {
12 | # public *;
13 | #}
14 |
15 | # Uncomment this to preserve the line number information for
16 | # debugging stack traces.
17 | #-keepattributes SourceFile,LineNumberTable
18 |
19 | # If you keep the line number information, uncomment this to
20 | # hide the original source file name.
21 | #-renamesourcefileattribute SourceFile
--------------------------------------------------------------------------------
/Variant-1.0/app/src/main/java/org/bitcoindevkit/devkitwallet/data/TxDetails.kt:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright 2021-2025 thunderbiscuit and contributors.
3 | * Use of this source code is governed by the Apache 2.0 license that can be found in the ./LICENSE file.
4 | */
5 |
6 | package org.bitcoindevkit.devkitwallet.data
7 |
8 | import org.bitcoindevkit.FeeRate
9 | import org.bitcoindevkit.Transaction
10 |
11 | data class TxDetails(
12 | val transaction: Transaction,
13 | val txid: String,
14 | val sent: ULong,
15 | val received: ULong,
16 | val fee: ULong,
17 | val feeRate: FeeRate?,
18 | val pending: Boolean,
19 | val confirmationBlock: ConfirmationBlock?,
20 | val confirmationTimestamp: Timestamp?,
21 | )
22 |
23 | @JvmInline
24 | value class Timestamp(val timestamp: ULong)
25 |
26 | @JvmInline
27 | value class ConfirmationBlock(val height: UInt)
28 |
--------------------------------------------------------------------------------
/Variant-Esplora/app/src/main/java/org/bitcoindevkit/devkitwallet/data/TxDetails.kt:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright 2021-2025 thunderbiscuit and contributors.
3 | * Use of this source code is governed by the Apache 2.0 license that can be found in the ./LICENSE file.
4 | */
5 |
6 | package org.bitcoindevkit.devkitwallet.data
7 |
8 | import org.bitcoindevkit.FeeRate
9 | import org.bitcoindevkit.Transaction
10 |
11 | data class TxDetails(
12 | val transaction: Transaction,
13 | val txid: String,
14 | val sent: ULong,
15 | val received: ULong,
16 | val fee: ULong,
17 | val feeRate: FeeRate?,
18 | val pending: Boolean,
19 | val confirmationBlock: ConfirmationBlock?,
20 | val confirmationTimestamp: Timestamp?,
21 | )
22 |
23 | @JvmInline
24 | value class Timestamp(val timestamp: ULong)
25 |
26 | @JvmInline
27 | value class ConfirmationBlock(val height: UInt)
28 |
--------------------------------------------------------------------------------
/Variant-1.0/app/src/main/java/org/bitcoindevkit/devkitwallet/presentation/viewmodels/mvi/MviSendScreen.kt:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright 2021-2025 thunderbiscuit and contributors.
3 | * Use of this source code is governed by the Apache 2.0 license that can be found in the ./LICENSE file.
4 | */
5 |
6 | package org.bitcoindevkit.devkitwallet.presentation.viewmodels.mvi
7 |
8 | // data class SendScreenState(
9 | // val address: String? = null,
10 | // )
11 |
12 | sealed class SendScreenAction {
13 | data class Broadcast(val txDataBundle: TxDataBundle) : SendScreenAction()
14 | }
15 |
16 | data class TxDataBundle(
17 | val recipients: List,
18 | val feeRate: ULong,
19 | val transactionType: TransactionType,
20 | )
21 |
22 | data class Recipient(var address: String, var amount: ULong)
23 |
24 | enum class TransactionType {
25 | STANDARD,
26 | SEND_ALL,
27 | }
28 |
--------------------------------------------------------------------------------
/Variant-0.32/app/src/main/java/com/goldenraven/devkitwallet/ui/theme/DevkitWalletColors.kt:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright 2020-2023 thunderbiscuit and contributors.
3 | * Use of this source code is governed by the Apache 2.0 license that can be found in the ./LICENSE file.
4 | */
5 |
6 | package com.goldenraven.devkitwallet.ui.theme
7 |
8 | import androidx.compose.ui.graphics.Color
9 |
10 | object DevkitWalletColors {
11 | val primaryDark: Color = Color(0xFF203B46) // App bar
12 | val primary: Color = Color(0xFF264653) // Background
13 | val primaryLight: Color = Color(0xFF335F70) // Behind balance primary light
14 | val white: Color = Color(0xffffffff) // Most text
15 | val secondary: Color = Color(0xFF2A9D8F) // Buttons
16 | val accent1: Color = Color(0xFFE9C46A) // Receive button
17 | val accent2: Color = Color(0xFFE76F51) // Send button
18 | }
19 |
--------------------------------------------------------------------------------
/Variant-0.32/app/src/main/java/com/goldenraven/devkitwallet/viewmodels/AddressViewModel.kt:
--------------------------------------------------------------------------------
1 | package com.goldenraven.devkitwallet.viewmodels
2 |
3 | import androidx.lifecycle.LiveData
4 | import androidx.lifecycle.MutableLiveData
5 | import androidx.lifecycle.ViewModel
6 | import com.goldenraven.devkitwallet.domain.Wallet
7 |
8 | internal class AddressViewModel : ViewModel() {
9 | private var _address: MutableLiveData = MutableLiveData(null)
10 | val address: LiveData
11 | get() = _address
12 |
13 | private var _addressIndex: MutableLiveData = MutableLiveData(0u)
14 | val addressIndex: LiveData
15 | get() = _addressIndex
16 |
17 | fun updateAddress() {
18 | val newAddress = Wallet.getNewAddress()
19 | _address.value = newAddress.address.asString()
20 | _addressIndex.value = newAddress.index
21 | }
22 | }
23 |
--------------------------------------------------------------------------------
/Variant-Kyoto/app/src/main/java/org/bitcoindevkit/devkitwallet/presentation/theme/DevkitWalletColors.kt:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright 2021-2024 thunderbiscuit and contributors.
3 | * Use of this source code is governed by the Apache 2.0 license that can be found in the ./LICENSE file.
4 | */
5 |
6 | package org.bitcoindevkit.devkitwallet.presentation.theme
7 |
8 | import androidx.compose.ui.graphics.Color
9 |
10 | object DevkitWalletColors {
11 | val primaryDark: Color = Color(0xFF203B46) // App bar
12 | val primary: Color = Color(0xFF264653) // Background
13 | val primaryLight: Color = Color(0xFF335F70) // Behind balance primary light
14 | val white: Color = Color(0xffffffff) // Most text
15 | val secondary: Color = Color(0xFF2A9D8F) // Buttons
16 | val accent1: Color = Color(0xFFE9C46A) // Receive button
17 | val accent2: Color = Color(0xFFE76F51) // Send button
18 | }
19 |
20 | internal val TestPink = Color(0xffff1493)
21 |
--------------------------------------------------------------------------------
/Variant-Kyoto/app/src/main/java/org/bitcoindevkit/devkitwallet/presentation/viewmodels/mvi/MviSendScreen.kt:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright 2021-2024 thunderbiscuit and contributors.
3 | * Use of this source code is governed by the Apache 2.0 license that can be found in the ./LICENSE file.
4 | */
5 |
6 | package org.bitcoindevkit.devkitwallet.presentation.viewmodels.mvi
7 |
8 | // data class SendScreenState(
9 | // val address: String? = null,
10 | // )
11 |
12 | sealed class SendScreenAction {
13 | data class Broadcast(val txDataBundle: TxDataBundle) : SendScreenAction()
14 | }
15 |
16 | data class TxDataBundle(
17 | val recipients: List,
18 | val feeRate: ULong,
19 | val transactionType: TransactionType,
20 | val rbfDisabled: Boolean = false,
21 | val opReturnMsg: String? = null,
22 | )
23 |
24 | data class Recipient(var address: String, var amount: ULong)
25 |
26 | enum class TransactionType {
27 | STANDARD,
28 | SEND_ALL,
29 | }
30 |
--------------------------------------------------------------------------------
/Variant-1.0/app/src/main/java/org/bitcoindevkit/devkitwallet/presentation/theme/DevkitWalletColors.kt:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright 2021-2025 thunderbiscuit and contributors.
3 | * Use of this source code is governed by the Apache 2.0 license that can be found in the ./LICENSE file.
4 | */
5 |
6 | package org.bitcoindevkit.devkitwallet.presentation.theme
7 |
8 | import androidx.compose.ui.graphics.Color
9 |
10 | @Suppress("ktlint:standard:comment-spacing")
11 | object DevkitWalletColors {
12 | val primaryDark: Color = Color(0xFF203B46) // App bar
13 | val primary: Color = Color(0xFF264653) // Background
14 | val primaryLight: Color = Color(0xFF335F70) // Behind balance primary light
15 | val white: Color = Color(0xffffffff) // Most text
16 | val secondary: Color = Color(0xFF2A9D8F) // Buttons
17 | val accent1: Color = Color(0xFFE9C46A) // Receive button
18 | val accent2: Color = Color(0xFFE76F51) // Send button
19 | }
20 |
21 | internal val TestPink = Color(0xffff1493)
22 |
--------------------------------------------------------------------------------
/Variant-Esplora/app/src/main/java/org/bitcoindevkit/devkitwallet/presentation/theme/DevkitWalletColors.kt:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright 2021-2025 thunderbiscuit and contributors.
3 | * Use of this source code is governed by the Apache 2.0 license that can be found in the ./LICENSE file.
4 | */
5 |
6 | package org.bitcoindevkit.devkitwallet.presentation.theme
7 |
8 | import androidx.compose.ui.graphics.Color
9 |
10 | @Suppress("ktlint:standard:comment-spacing")
11 | object DevkitWalletColors {
12 | val primaryDark: Color = Color(0xFF203B46) // App bar
13 | val primary: Color = Color(0xFF264653) // Background
14 | val primaryLight: Color = Color(0xFF335F70) // Behind balance primary light
15 | val white: Color = Color(0xffffffff) // Most text
16 | val secondary: Color = Color(0xFF2A9D8F) // Buttons
17 | val accent1: Color = Color(0xFFE9C46A) // Receive button
18 | val accent2: Color = Color(0xFFE76F51) // Send button
19 | }
20 |
21 | internal val TestPink = Color(0xffff1493)
22 |
--------------------------------------------------------------------------------
/Variant-1.0/app/src/main/AndroidManifest.xml:
--------------------------------------------------------------------------------
1 |
2 |
4 |
5 |
6 |
13 |
14 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
28 |
29 |
--------------------------------------------------------------------------------
/Variant-Esplora/app/src/main/AndroidManifest.xml:
--------------------------------------------------------------------------------
1 |
2 |
4 |
5 |
6 |
13 |
14 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
28 |
29 |
--------------------------------------------------------------------------------
/Variant-0.32/app/src/main/AndroidManifest.xml:
--------------------------------------------------------------------------------
1 |
2 |
4 |
5 |
6 |
14 |
15 |
19 |
20 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
28 |
29 |
--------------------------------------------------------------------------------
/Variant-1.0/app/src/main/java/org/bitcoindevkit/devkitwallet/presentation/theme/Type.kt:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright 2021-2025 thunderbiscuit and contributors.
3 | * Use of this source code is governed by the Apache 2.0 license that can be found in the ./LICENSE file.
4 | */
5 |
6 | package org.bitcoindevkit.devkitwallet.presentation.theme
7 |
8 | import androidx.compose.material3.Typography
9 | import androidx.compose.ui.text.TextStyle
10 | import androidx.compose.ui.text.font.FontWeight
11 | import androidx.compose.ui.unit.sp
12 |
13 | internal val devkitTypography =
14 | Typography(
15 | labelLarge =
16 | TextStyle(
17 | fontFamily = quattroRegular,
18 | fontWeight = FontWeight.Normal,
19 | fontSize = 16.sp,
20 | lineHeight = 28.sp
21 | ),
22 | )
23 |
24 | // These are the default text styles used by Material3 components:
25 | // Buttons: labelLarge
26 |
27 | internal val standardText = TextStyle(
28 | color = DevkitWalletColors.white,
29 | fontFamily = quattroRegular,
30 | fontSize = 14.sp,
31 | fontWeight = FontWeight.Normal,
32 | )
33 |
--------------------------------------------------------------------------------
/Variant-0.32/app/src/main/java/com/goldenraven/devkitwallet/ui/Screen.kt:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright 2021-2023 thunderbiscuit and contributors.
3 | * Use of this source code is governed by the Apache 2.0 license that can be found in the ./LICENSE file.
4 | */
5 |
6 | package com.goldenraven.devkitwallet.ui
7 |
8 | sealed class Screen(val route: String) {
9 | // create wallet screens
10 | object WalletChoiceScreen : Screen("wallet_choice_screen")
11 | object WalletRecoveryScreen : Screen("wallet_recovery_screen")
12 |
13 | // home screens
14 | object WalletScreen : Screen("wallet_screen")
15 | object AboutScreen : Screen("about_screen")
16 | object RecoveryPhraseScreen : Screen("recovery_phrase_screen")
17 | object ElectrumScreen : Screen("electrum_screen")
18 |
19 | // wallet screens
20 | object HomeScreen : Screen("home_screen")
21 | object SendScreen : Screen("send_screen")
22 | object ReceiveScreen : Screen("receive_screen")
23 | object RBFScreen : Screen("rbf_screen")
24 | object TransactionsScreen : Screen("transactions_screen")
25 | object TransactionScreen : Screen("transaction_screen")
26 | }
27 |
--------------------------------------------------------------------------------
/Variant-Esplora/app/src/main/java/org/bitcoindevkit/devkitwallet/presentation/theme/Type.kt:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright 2021-2025 thunderbiscuit and contributors.
3 | * Use of this source code is governed by the Apache 2.0 license that can be found in the ./LICENSE file.
4 | */
5 |
6 | package org.bitcoindevkit.devkitwallet.presentation.theme
7 |
8 | import androidx.compose.material3.Typography
9 | import androidx.compose.ui.text.TextStyle
10 | import androidx.compose.ui.text.font.FontWeight
11 | import androidx.compose.ui.unit.sp
12 |
13 | internal val devkitTypography =
14 | Typography(
15 | labelLarge =
16 | TextStyle(
17 | fontFamily = quattroRegular,
18 | fontWeight = FontWeight.Normal,
19 | fontSize = 16.sp,
20 | lineHeight = 28.sp
21 | ),
22 | )
23 |
24 | // These are the default text styles used by Material3 components:
25 | // Buttons: labelLarge
26 |
27 | internal val standardText = TextStyle(
28 | color = DevkitWalletColors.white,
29 | fontFamily = quattroRegular,
30 | fontSize = 14.sp,
31 | fontWeight = FontWeight.Normal,
32 | )
33 |
--------------------------------------------------------------------------------
/Variant-1.0/app/src/main/java/org/bitcoindevkit/devkitwallet/data/UserPreferencesSerializer.kt:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright 2021-2025 thunderbiscuit and contributors.
3 | * Use of this source code is governed by the Apache 2.0 license that can be found in the ./LICENSE file.
4 | */
5 |
6 | package org.bitcoindevkit.devkitwallet.data
7 |
8 | import androidx.datastore.core.CorruptionException
9 | import androidx.datastore.core.Serializer
10 | import com.google.protobuf.InvalidProtocolBufferException
11 | import java.io.InputStream
12 | import java.io.OutputStream
13 |
14 | object UserPreferencesSerializer : Serializer {
15 | override val defaultValue: UserPreferences = UserPreferences.getDefaultInstance()
16 |
17 | override suspend fun readFrom(input: InputStream): UserPreferences {
18 | try {
19 | return UserPreferences.parseFrom(input)
20 | } catch (exception: InvalidProtocolBufferException) {
21 | throw CorruptionException("Cannot read proto.", exception)
22 | }
23 | }
24 |
25 | override suspend fun writeTo(t: UserPreferences, output: OutputStream) {
26 | t.writeTo(output)
27 | }
28 | }
29 |
--------------------------------------------------------------------------------
/Variant-Esplora/app/src/main/java/org/bitcoindevkit/devkitwallet/data/UserPreferencesSerializer.kt:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright 2021-2025 thunderbiscuit and contributors.
3 | * Use of this source code is governed by the Apache 2.0 license that can be found in the ./LICENSE file.
4 | */
5 |
6 | package org.bitcoindevkit.devkitwallet.data
7 |
8 | import androidx.datastore.core.CorruptionException
9 | import androidx.datastore.core.Serializer
10 | import com.google.protobuf.InvalidProtocolBufferException
11 | import java.io.InputStream
12 | import java.io.OutputStream
13 |
14 | object UserPreferencesSerializer : Serializer {
15 | override val defaultValue: UserPreferences = UserPreferences.getDefaultInstance()
16 |
17 | override suspend fun readFrom(input: InputStream): UserPreferences {
18 | try {
19 | return UserPreferences.parseFrom(input)
20 | } catch (exception: InvalidProtocolBufferException) {
21 | throw CorruptionException("Cannot read proto.", exception)
22 | }
23 | }
24 |
25 | override suspend fun writeTo(t: UserPreferences, output: OutputStream) {
26 | t.writeTo(output)
27 | }
28 | }
29 |
--------------------------------------------------------------------------------
/Variant-Kyoto/app/src/main/java/org/bitcoindevkit/devkitwallet/data/UserPreferencesSerializer.kt:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright 2021-2024 thunderbiscuit and contributors.
3 | * Use of this source code is governed by the Apache 2.0 license that can be found in the ./LICENSE file.
4 | */
5 |
6 | package org.bitcoindevkit.devkitwallet.data
7 |
8 | import androidx.datastore.core.CorruptionException
9 | import androidx.datastore.core.Serializer
10 | import com.google.protobuf.InvalidProtocolBufferException
11 | import java.io.InputStream
12 | import java.io.OutputStream
13 |
14 | object UserPreferencesSerializer : Serializer {
15 | override val defaultValue: UserPreferences = UserPreferences.getDefaultInstance()
16 |
17 | override suspend fun readFrom(input: InputStream): UserPreferences {
18 | try {
19 | return UserPreferences.parseFrom(input)
20 | } catch (exception: InvalidProtocolBufferException) {
21 | throw CorruptionException("Cannot read proto.", exception)
22 | }
23 | }
24 |
25 | override suspend fun writeTo(t: UserPreferences, output: OutputStream) {
26 | t.writeTo(output)
27 | }
28 | }
29 |
--------------------------------------------------------------------------------
/Variant-0.32/app/src/main/java/com/goldenraven/devkitwallet/ui/theme/Fonts.kt:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright 2020-2023 thunderbiscuit and contributors.
3 | * Use of this source code is governed by the Apache 2.0 license that can be found in the ./LICENSE file.
4 | */
5 |
6 | package com.goldenraven.devkitwallet.ui.theme
7 |
8 | import androidx.compose.ui.text.font.Font
9 | import androidx.compose.ui.text.font.FontFamily
10 | import androidx.compose.ui.text.font.FontStyle
11 | import androidx.compose.ui.text.font.FontWeight
12 | import com.goldenraven.devkitwallet.R
13 |
14 | val jetBrainsMonoLight = FontFamily(
15 | Font(
16 | resId = R.font.jetbrains_mono_light,
17 | weight = FontWeight.Light,
18 | style = FontStyle.Normal
19 | )
20 | )
21 |
22 | val jetBrainsMonoRegular = FontFamily(
23 | Font(
24 | resId = R.font.jetbrains_mono_regular,
25 | weight = FontWeight.Normal,
26 | style = FontStyle.Normal
27 | )
28 | )
29 |
30 | val jetBrainsMonoSemiBold = FontFamily(
31 | Font(
32 | resId = R.font.jetbrains_mono_semibold,
33 | weight = FontWeight.SemiBold,
34 | style = FontStyle.Normal
35 | )
36 | )
37 |
--------------------------------------------------------------------------------
/Variant-Kyoto/app/src/main/java/org/bitcoindevkit/devkitwallet/presentation/viewmodels/mvi/MviWalletScreen.kt:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright 2021-2024 thunderbiscuit and contributors.
3 | * Use of this source code is governed by the Apache 2.0 license that can be found in the ./LICENSE file.
4 | */
5 |
6 | package org.bitcoindevkit.devkitwallet.presentation.viewmodels.mvi
7 |
8 | import org.bitcoindevkit.devkitwallet.domain.CurrencyUnit
9 |
10 | data class WalletScreenState(
11 | val balance: ULong = 0u,
12 | val unit: CurrencyUnit = CurrencyUnit.Bitcoin,
13 | val latestBlock: UInt = 0u,
14 | val snackbarMessage: String? = null,
15 | val kyotoNodeStatus: KyotoNodeStatus = KyotoNodeStatus.Stopped,
16 | )
17 |
18 | sealed interface WalletScreenAction {
19 | data object UpdateBalance : WalletScreenAction
20 |
21 | data object SwitchUnit : WalletScreenAction
22 |
23 | data object StartKyotoNode : WalletScreenAction
24 |
25 | data object StopKyotoNode : WalletScreenAction
26 |
27 | data object StartKyotoSync : WalletScreenAction
28 |
29 | data object ClearSnackbar : WalletScreenAction
30 | }
31 |
32 | enum class KyotoNodeStatus {
33 | Running,
34 | Stopped,
35 | }
36 |
--------------------------------------------------------------------------------
/Variant-Kyoto/app/src/main/AndroidManifest.xml:
--------------------------------------------------------------------------------
1 |
2 |
4 |
5 |
6 |
7 |
8 |
15 |
16 |
21 |
22 |
23 |
24 |
25 |
26 |
27 |
28 |
29 |
30 |
31 |
--------------------------------------------------------------------------------
/Variant-0.32/app/src/main/java/com/goldenraven/devkitwallet/DevkitWalletApplication.kt:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright 2021 thunderbiscuit and contributors.
3 | * Use of this source code is governed by the Apache 2.0 license that can be found in the ./LICENSE file.
4 | */
5 |
6 | package com.goldenraven.devkitwallet
7 |
8 | import android.app.Application
9 | import android.content.Context
10 | import com.goldenraven.devkitwallet.utils.SharedPreferencesManager
11 | import com.goldenraven.devkitwallet.domain.Repository
12 | import com.goldenraven.devkitwallet.domain.Wallet
13 |
14 | class DevkitWalletApplication : Application() {
15 | override fun onCreate() {
16 | super.onCreate()
17 |
18 | // initialize Wallet object (singleton) with path variable
19 | Wallet.setPath(applicationContext.filesDir.toString())
20 |
21 | // initialize shared preferences manager object (singleton)
22 | val sharedPreferencesManager = SharedPreferencesManager(
23 | sharedPreferences = applicationContext.getSharedPreferences("current_wallet", Context.MODE_PRIVATE)
24 | )
25 |
26 | // initialize Repository object with shared preferences
27 | Repository.setSharedPreferences(sharedPreferencesManager)
28 | }
29 | }
30 |
--------------------------------------------------------------------------------
/Variant-1.0/app/src/main/java/org/bitcoindevkit/devkitwallet/domain/utils/ProtobufExtensions.kt:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright 2021-2025 thunderbiscuit and contributors.
3 | * Use of this source code is governed by the Apache 2.0 license that can be found in the ./LICENSE file.
4 | */
5 |
6 | package org.bitcoindevkit.devkitwallet.domain.utils
7 |
8 | import org.bitcoindevkit.Network
9 | import org.bitcoindevkit.devkitwallet.data.ActiveWalletNetwork
10 |
11 | fun Network.intoProto(): ActiveWalletNetwork {
12 | return when (this) {
13 | Network.REGTEST -> ActiveWalletNetwork.REGTEST
14 | Network.TESTNET -> ActiveWalletNetwork.TESTNET
15 | Network.TESTNET4 -> throw IllegalArgumentException("Bitcoin testnet 4 network is not supported")
16 | Network.SIGNET -> ActiveWalletNetwork.SIGNET
17 | Network.BITCOIN -> throw IllegalArgumentException("Bitcoin mainnet network is not supported")
18 | }
19 | }
20 |
21 | fun ActiveWalletNetwork.intoDomain(): Network {
22 | return when (this) {
23 | ActiveWalletNetwork.TESTNET -> Network.TESTNET
24 | ActiveWalletNetwork.SIGNET -> Network.SIGNET
25 | ActiveWalletNetwork.REGTEST -> Network.REGTEST
26 | ActiveWalletNetwork.UNRECOGNIZED -> throw IllegalArgumentException("Unrecognized network")
27 | }
28 | }
29 |
--------------------------------------------------------------------------------
/Variant-Kyoto/app/src/main/java/org/bitcoindevkit/devkitwallet/domain/utils/ProtobufExtensions.kt:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright 2021-2024 thunderbiscuit and contributors.
3 | * Use of this source code is governed by the Apache 2.0 license that can be found in the ./LICENSE file.
4 | */
5 |
6 | package org.bitcoindevkit.devkitwallet.domain.utils
7 |
8 | import org.bitcoindevkit.Network
9 | import org.bitcoindevkit.devkitwallet.data.ActiveWalletNetwork
10 |
11 | fun Network.intoProto(): ActiveWalletNetwork {
12 | return when (this) {
13 | Network.TESTNET -> ActiveWalletNetwork.TESTNET
14 | Network.TESTNET4 -> throw IllegalArgumentException("Bitcoin testnet 4 network is not supported")
15 | Network.SIGNET -> ActiveWalletNetwork.SIGNET
16 | Network.REGTEST -> ActiveWalletNetwork.REGTEST
17 | Network.BITCOIN -> throw IllegalArgumentException("Bitcoin mainnet network is not supported")
18 | }
19 | }
20 |
21 | fun ActiveWalletNetwork.intoDomain(): Network {
22 | return when (this) {
23 | ActiveWalletNetwork.TESTNET -> Network.TESTNET
24 | ActiveWalletNetwork.SIGNET -> Network.SIGNET
25 | ActiveWalletNetwork.REGTEST -> Network.REGTEST
26 | ActiveWalletNetwork.UNRECOGNIZED -> throw IllegalArgumentException("Unrecognized network")
27 | }
28 | }
29 |
--------------------------------------------------------------------------------
/Variant-1.0/app/src/main/java/org/bitcoindevkit/devkitwallet/presentation/navigation/Destinations.kt:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright 2021-2025 thunderbiscuit and contributors.
3 | * Use of this source code is governed by the Apache 2.0 license that can be found in the ./LICENSE file.
4 | */
5 |
6 | package org.bitcoindevkit.devkitwallet.presentation.navigation
7 |
8 | import kotlinx.serialization.Serializable
9 |
10 | // Create wallet navigation destinations
11 | @Serializable
12 | object WalletChoiceScreen
13 |
14 | @Serializable
15 | object ActiveWalletsScreen
16 |
17 | @Serializable
18 | object CreateNewWalletScreen
19 |
20 | @Serializable
21 | object WalletRecoveryScreen
22 |
23 | // Home navigation destinations
24 | @Serializable
25 | object WalletScreen
26 |
27 | @Serializable
28 | object AboutScreen
29 |
30 | @Serializable
31 | object RecoveryPhraseScreen
32 |
33 | @Serializable
34 | object BlockchainClientScreen
35 |
36 | @Serializable
37 | object LogsScreen
38 |
39 | // Wallet navigation destinations
40 | @Serializable
41 | object HomeScreen
42 |
43 | @Serializable
44 | object ReceiveScreen
45 |
46 | @Serializable
47 | object SendScreen
48 |
49 | @Serializable
50 | object TransactionHistoryScreen
51 |
52 | @Serializable
53 | data class TransactionScreen(val txid: String)
54 |
55 | @Serializable
56 | data class RbfScreen(val txid: String)
57 |
--------------------------------------------------------------------------------
/Variant-Esplora/app/src/main/java/org/bitcoindevkit/devkitwallet/presentation/navigation/Destinations.kt:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright 2021-2025 thunderbiscuit and contributors.
3 | * Use of this source code is governed by the Apache 2.0 license that can be found in the ./LICENSE file.
4 | */
5 |
6 | package org.bitcoindevkit.devkitwallet.presentation.navigation
7 |
8 | import kotlinx.serialization.Serializable
9 |
10 | // Create wallet navigation destinations
11 | @Serializable
12 | object WalletChoiceScreen
13 |
14 | @Serializable
15 | object ActiveWalletsScreen
16 |
17 | @Serializable
18 | object CreateNewWalletScreen
19 |
20 | @Serializable
21 | object WalletRecoveryScreen
22 |
23 | // Home navigation destinations
24 | @Serializable
25 | object WalletScreen
26 |
27 | @Serializable
28 | object AboutScreen
29 |
30 | @Serializable
31 | object RecoveryPhraseScreen
32 |
33 | @Serializable
34 | object BlockchainClientScreen
35 |
36 | @Serializable
37 | object LogsScreen
38 |
39 | // Wallet navigation destinations
40 | @Serializable
41 | object HomeScreen
42 |
43 | @Serializable
44 | object ReceiveScreen
45 |
46 | @Serializable
47 | object SendScreen
48 |
49 | @Serializable
50 | object TransactionHistoryScreen
51 |
52 | @Serializable
53 | data class TransactionScreen(val txid: String)
54 |
55 | @Serializable
56 | data class RbfScreen(val txid: String)
57 |
--------------------------------------------------------------------------------
/Variant-Kyoto/app/src/main/java/org/bitcoindevkit/devkitwallet/presentation/navigation/Destinations.kt:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright 2021-2024 thunderbiscuit and contributors.
3 | * Use of this source code is governed by the Apache 2.0 license that can be found in the ./LICENSE file.
4 | */
5 |
6 | package org.bitcoindevkit.devkitwallet.presentation.navigation
7 |
8 | import kotlinx.serialization.Serializable
9 |
10 | // Create wallet navigation destinations
11 | @Serializable
12 | object WalletChoiceScreen
13 |
14 | @Serializable
15 | object ActiveWalletsScreen
16 |
17 | @Serializable
18 | object CreateNewWalletScreen
19 |
20 | @Serializable
21 | object WalletRecoveryScreen
22 |
23 | // Home navigation destinations
24 | @Serializable
25 | object WalletScreen
26 |
27 | @Serializable
28 | object AboutScreen
29 |
30 | @Serializable
31 | object RecoveryPhraseScreen
32 |
33 | @Serializable
34 | object BlockchainClientScreen
35 |
36 | @Serializable
37 | object LogsScreen
38 |
39 | // Wallet navigation destinations
40 | @Serializable
41 | object HomeScreen
42 |
43 | @Serializable
44 | object ReceiveScreen
45 |
46 | @Serializable
47 | object SendScreen
48 |
49 | @Serializable
50 | object TransactionHistoryScreen
51 |
52 | @Serializable
53 | data class TransactionScreen(val txid: String)
54 |
55 | @Serializable
56 | data class RbfScreen(val txid: String)
57 |
--------------------------------------------------------------------------------
/Variant-1.0/app/src/main/java/org/bitcoindevkit/devkitwallet/presentation/theme/Fonts.kt:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright 2021-2025 thunderbiscuit and contributors.
3 | * Use of this source code is governed by the Apache 2.0 license that can be found in the ./LICENSE file.
4 | */
5 |
6 | package org.bitcoindevkit.devkitwallet.presentation.theme
7 |
8 | import androidx.compose.ui.text.font.Font
9 | import androidx.compose.ui.text.font.FontFamily
10 | import androidx.compose.ui.text.font.FontStyle
11 | import androidx.compose.ui.text.font.FontWeight
12 | import org.bitcoindevkit.devkitwallet.R
13 |
14 | val quattroRegular = FontFamily(
15 | Font(
16 | resId = R.font.ia_writer_quattro_regular,
17 | weight = FontWeight.Normal,
18 | style = FontStyle.Normal
19 | )
20 | )
21 |
22 | val quattroBold = FontFamily(
23 | Font(
24 | resId = R.font.ia_writer_quattro_bold,
25 | weight = FontWeight.Bold,
26 | style = FontStyle.Normal
27 | )
28 | )
29 |
30 | val monoRegular = FontFamily(
31 | Font(
32 | resId = R.font.ia_writer_mono_regular,
33 | weight = FontWeight.Normal,
34 | style = FontStyle.Normal
35 | )
36 | )
37 |
38 | val monoBold = FontFamily(
39 | Font(
40 | resId = R.font.ia_writer_mono_bold,
41 | weight = FontWeight.Bold,
42 | style = FontStyle.Normal
43 | )
44 | )
45 |
--------------------------------------------------------------------------------
/Variant-Esplora/app/src/main/java/org/bitcoindevkit/devkitwallet/domain/utils/ProtobufExtensions.kt:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright 2021-2025 thunderbiscuit and contributors.
3 | * Use of this source code is governed by the Apache 2.0 license that can be found in the ./LICENSE file.
4 | */
5 |
6 | package org.bitcoindevkit.devkitwallet.domain.utils
7 |
8 | import org.bitcoindevkit.Network
9 | import org.bitcoindevkit.devkitwallet.data.ActiveWalletNetwork
10 |
11 | fun Network.intoProto(): ActiveWalletNetwork {
12 | return when (this) {
13 | Network.REGTEST -> ActiveWalletNetwork.REGTEST
14 | Network.TESTNET -> ActiveWalletNetwork.TESTNET3
15 | Network.TESTNET4 -> ActiveWalletNetwork.TESTNET4
16 | Network.SIGNET -> ActiveWalletNetwork.SIGNET
17 | Network.BITCOIN -> throw IllegalArgumentException("Bitcoin mainnet network is not supported")
18 | }
19 | }
20 |
21 | @Suppress("ktlint:standard:no-multi-spaces")
22 | fun ActiveWalletNetwork.intoDomain(): Network {
23 | return when (this) {
24 | ActiveWalletNetwork.REGTEST -> Network.REGTEST
25 | ActiveWalletNetwork.SIGNET -> Network.SIGNET
26 | ActiveWalletNetwork.TESTNET3 -> Network.TESTNET
27 | ActiveWalletNetwork.TESTNET4 -> Network.TESTNET4
28 | ActiveWalletNetwork.UNRECOGNIZED -> throw IllegalArgumentException("Unrecognized network")
29 | }
30 | }
31 |
--------------------------------------------------------------------------------
/Variant-Esplora/app/src/main/java/org/bitcoindevkit/devkitwallet/presentation/theme/Fonts.kt:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright 2021-2025 thunderbiscuit and contributors.
3 | * Use of this source code is governed by the Apache 2.0 license that can be found in the ./LICENSE file.
4 | */
5 |
6 | package org.bitcoindevkit.devkitwallet.presentation.theme
7 |
8 | import androidx.compose.ui.text.font.Font
9 | import androidx.compose.ui.text.font.FontFamily
10 | import androidx.compose.ui.text.font.FontStyle
11 | import androidx.compose.ui.text.font.FontWeight
12 | import org.bitcoindevkit.devkitwallet.R
13 |
14 | val quattroRegular = FontFamily(
15 | Font(
16 | resId = R.font.ia_writer_quattro_regular,
17 | weight = FontWeight.Normal,
18 | style = FontStyle.Normal
19 | )
20 | )
21 |
22 | val quattroBold = FontFamily(
23 | Font(
24 | resId = R.font.ia_writer_quattro_bold,
25 | weight = FontWeight.Bold,
26 | style = FontStyle.Normal
27 | )
28 | )
29 |
30 | val monoRegular = FontFamily(
31 | Font(
32 | resId = R.font.ia_writer_mono_regular,
33 | weight = FontWeight.Normal,
34 | style = FontStyle.Normal
35 | )
36 | )
37 |
38 | val monoBold = FontFamily(
39 | Font(
40 | resId = R.font.ia_writer_mono_bold,
41 | weight = FontWeight.Bold,
42 | style = FontStyle.Normal
43 | )
44 | )
45 |
--------------------------------------------------------------------------------
/Variant-Kyoto/app/src/main/java/org/bitcoindevkit/devkitwallet/presentation/theme/Type.kt:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright 2021-2024 thunderbiscuit and contributors.
3 | * Use of this source code is governed by the Apache 2.0 license that can be found in the ./LICENSE file.
4 | */
5 |
6 | package org.bitcoindevkit.devkitwallet.presentation.theme
7 |
8 | import androidx.compose.material3.Typography
9 | import androidx.compose.ui.text.TextStyle
10 | import androidx.compose.ui.text.font.FontWeight
11 | import androidx.compose.ui.unit.sp
12 |
13 | internal val devkitTypography =
14 | Typography(
15 | labelLarge =
16 | TextStyle(
17 | fontFamily = quattroRegular,
18 | fontWeight = FontWeight.Normal,
19 | color = DevkitWalletColors.white,
20 | fontSize = 16.sp,
21 | lineHeight = 28.sp,
22 | ),
23 | )
24 |
25 | val introText =
26 | TextStyle(
27 | fontFamily = quattroRegular,
28 | fontWeight = FontWeight.Normal,
29 | fontSize = 18.sp,
30 | lineHeight = 28.sp,
31 | )
32 |
33 | // These are the default text styles used by Material3 components:
34 | // Buttons: labelLarge
35 |
36 | internal val standardText =
37 | TextStyle(
38 | color = DevkitWalletColors.white,
39 | fontFamily = quattroRegular,
40 | fontSize = 14.sp,
41 | fontWeight = FontWeight.Normal,
42 | )
43 |
--------------------------------------------------------------------------------
/Variant-0.32/app/src/main/java/com/goldenraven/devkitwallet/ui/components/NeutralButton.kt:
--------------------------------------------------------------------------------
1 | package com.goldenraven.devkitwallet.ui.components
2 |
3 | import androidx.compose.foundation.layout.fillMaxWidth
4 | import androidx.compose.foundation.layout.height
5 | import androidx.compose.foundation.layout.padding
6 | import androidx.compose.foundation.shape.RoundedCornerShape
7 | import androidx.compose.material3.Button
8 | import androidx.compose.material3.ButtonDefaults
9 | import androidx.compose.material3.Text
10 | import androidx.compose.runtime.Composable
11 | import androidx.compose.ui.Modifier
12 | import androidx.compose.ui.draw.shadow
13 | import androidx.compose.ui.unit.dp
14 | import com.goldenraven.devkitwallet.ui.theme.DevkitWalletColors
15 |
16 | @Composable
17 | fun NeutralButton(text: String, enabled: Boolean, onClick: () -> Unit) {
18 | Button(
19 | onClick = onClick,
20 | colors = ButtonDefaults.buttonColors(
21 | containerColor = DevkitWalletColors.secondary,
22 | disabledContainerColor = DevkitWalletColors.secondary,
23 | ),
24 | shape = RoundedCornerShape(16.dp),
25 | enabled = enabled,
26 | modifier = Modifier
27 | .height(80.dp)
28 | .fillMaxWidth(0.9f)
29 | .padding(vertical = 8.dp, horizontal = 8.dp)
30 | .shadow(elevation = 4.dp, shape = RoundedCornerShape(16.dp))
31 | ) {
32 | Text(
33 | text = text,
34 | )
35 | }
36 | }
37 |
--------------------------------------------------------------------------------
/Variant-Kyoto/app/src/main/java/org/bitcoindevkit/devkitwallet/domain/DwLogger.kt:
--------------------------------------------------------------------------------
1 | package org.bitcoindevkit.devkitwallet.domain
2 |
3 | import java.time.Instant
4 | import java.time.ZoneId
5 | import java.time.temporal.ChronoUnit
6 |
7 | object DwLogger {
8 | private const val MAX_LOGS = 5000
9 | private val logEntries = ArrayDeque(MAX_LOGS)
10 | private val lock = Any()
11 |
12 | fun log(tag: LogLevel, message: String) {
13 | synchronized(lock) {
14 | if (logEntries.size >= MAX_LOGS) {
15 | logEntries.removeLast()
16 | }
17 | val millis = System.currentTimeMillis()
18 | val dateTime =
19 | Instant
20 | .ofEpochMilli(millis)
21 | .atZone(ZoneId.systemDefault())
22 | .toLocalDateTime()
23 | .truncatedTo(ChronoUnit.SECONDS)
24 |
25 | logEntries.addFirst("$dateTime $tag $message")
26 | }
27 | }
28 |
29 | fun getLogs(): List {
30 | synchronized(lock) {
31 | return logEntries.toList()
32 | }
33 | }
34 |
35 | enum class LogLevel {
36 | INFO,
37 | WARN,
38 | ERROR,
39 | ;
40 |
41 | override fun toString(): String {
42 | return when (this) {
43 | INFO -> "[INFO] "
44 | WARN -> "[WARN] "
45 | ERROR -> "[ERROR]"
46 | }
47 | }
48 | }
49 | }
50 |
--------------------------------------------------------------------------------
/Variant-Kyoto/app/src/main/java/org/bitcoindevkit/devkitwallet/presentation/theme/Fonts.kt:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright 2021-2024 thunderbiscuit and contributors.
3 | * Use of this source code is governed by the Apache 2.0 license that can be found in the ./LICENSE file.
4 | */
5 |
6 | package org.bitcoindevkit.devkitwallet.presentation.theme
7 |
8 | import androidx.compose.ui.text.font.Font
9 | import androidx.compose.ui.text.font.FontFamily
10 | import androidx.compose.ui.text.font.FontStyle
11 | import androidx.compose.ui.text.font.FontWeight
12 | import org.bitcoindevkit.devkitwallet.R
13 |
14 | val quattroRegular =
15 | FontFamily(
16 | Font(
17 | resId = R.font.ia_writer_quattro_regular,
18 | weight = FontWeight.Normal,
19 | style = FontStyle.Normal,
20 | ),
21 | )
22 |
23 | val quattroBold =
24 | FontFamily(
25 | Font(
26 | resId = R.font.ia_writer_quattro_bold,
27 | weight = FontWeight.Bold,
28 | style = FontStyle.Normal,
29 | ),
30 | )
31 |
32 | val monoRegular =
33 | FontFamily(
34 | Font(
35 | resId = R.font.ia_writer_mono_regular,
36 | weight = FontWeight.Normal,
37 | style = FontStyle.Normal,
38 | ),
39 | )
40 |
41 | val monoBold =
42 | FontFamily(
43 | Font(
44 | resId = R.font.ia_writer_mono_bold,
45 | weight = FontWeight.Bold,
46 | style = FontStyle.Normal,
47 | ),
48 | )
49 |
--------------------------------------------------------------------------------
/Variant-0.32/app/src/main/res/drawable/ic_bitcoin_logo.xml:
--------------------------------------------------------------------------------
1 |
6 |
9 |
12 |
13 |
--------------------------------------------------------------------------------
/Variant-0.32/app/src/main/res/drawable/ic_testnet_logo.xml:
--------------------------------------------------------------------------------
1 |
6 |
9 |
12 |
13 |
--------------------------------------------------------------------------------
/Variant-1.0/app/src/main/res/drawable/ic_bitcoin_logo.xml:
--------------------------------------------------------------------------------
1 |
6 |
9 |
12 |
13 |
--------------------------------------------------------------------------------
/Variant-1.0/app/src/main/res/drawable/ic_testnet_logo.xml:
--------------------------------------------------------------------------------
1 |
6 |
9 |
12 |
13 |
--------------------------------------------------------------------------------
/Variant-Kyoto/app/src/main/res/drawable/ic_bitcoin_logo.xml:
--------------------------------------------------------------------------------
1 |
6 |
9 |
12 |
13 |
--------------------------------------------------------------------------------
/Variant-Kyoto/app/src/main/res/drawable/ic_testnet_logo.xml:
--------------------------------------------------------------------------------
1 |
6 |
9 |
12 |
13 |
--------------------------------------------------------------------------------
/Variant-Esplora/app/src/main/res/drawable/ic_bitcoin_logo.xml:
--------------------------------------------------------------------------------
1 |
6 |
9 |
12 |
13 |
--------------------------------------------------------------------------------
/Variant-Esplora/app/src/main/res/drawable/ic_testnet_logo.xml:
--------------------------------------------------------------------------------
1 |
6 |
9 |
12 |
13 |
--------------------------------------------------------------------------------
/Variant-1.0/app/src/main/java/org/bitcoindevkit/devkitwallet/domain/BlockchainClient.kt:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright 2021-2025 thunderbiscuit and contributors.
3 | * Use of this source code is governed by the Apache 2.0 license that can be found in the ./LICENSE file.
4 | */
5 |
6 | package org.bitcoindevkit.devkitwallet.domain
7 |
8 | import org.bitcoindevkit.FullScanRequest
9 | import org.bitcoindevkit.SyncRequest
10 | import org.bitcoindevkit.Transaction
11 | import org.bitcoindevkit.Update
12 | import org.bitcoindevkit.EsploraClient as BdkEsploraClient
13 |
14 | interface BlockchainClient {
15 | fun clientId(): String
16 |
17 | fun fullScan(fullScanRequest: FullScanRequest, stopGap: ULong): Update
18 |
19 | fun sync(syncRequest: SyncRequest): Update
20 |
21 | fun broadcast(transaction: Transaction): Unit
22 |
23 | fun endpoint(): String
24 | }
25 |
26 | class EsploraClient(private val url: String) : BlockchainClient {
27 | private val client = BdkEsploraClient(url)
28 |
29 | override fun clientId(): String {
30 | return url
31 | }
32 |
33 | override fun fullScan(fullScanRequest: FullScanRequest, stopGap: ULong): Update {
34 | return client.fullScan(fullScanRequest, stopGap, parallelRequests = 2u)
35 | }
36 |
37 | override fun sync(syncRequest: SyncRequest): Update {
38 | return client.sync(syncRequest, parallelRequests = 2u)
39 | }
40 |
41 | override fun broadcast(transaction: Transaction) {
42 | client.broadcast(transaction)
43 | }
44 |
45 | override fun endpoint(): String {
46 | return url
47 | }
48 | }
49 |
--------------------------------------------------------------------------------
/Variant-1.0/app/src/main/java/org/bitcoindevkit/devkitwallet/presentation/ui/components/CustomSnackbar.kt:
--------------------------------------------------------------------------------
1 | package org.bitcoindevkit.devkitwallet.presentation.ui.components
2 |
3 | import androidx.compose.foundation.layout.padding
4 | import androidx.compose.material3.Icon
5 | import androidx.compose.material3.IconButton
6 | import androidx.compose.material3.Snackbar
7 | import androidx.compose.material3.SnackbarData
8 | import androidx.compose.material3.Text
9 | import androidx.compose.runtime.Composable
10 | import androidx.compose.ui.Modifier
11 | import androidx.compose.ui.unit.dp
12 | import androidx.compose.ui.unit.sp
13 | import com.composables.icons.lucide.Lucide
14 | import com.composables.icons.lucide.X
15 | import org.bitcoindevkit.devkitwallet.presentation.theme.DevkitWalletColors
16 | import org.bitcoindevkit.devkitwallet.presentation.theme.quattroRegular
17 |
18 | @Composable
19 | fun CustomSnackbar(data: SnackbarData) {
20 | Snackbar(
21 | modifier = Modifier.padding(12.dp),
22 | action = {
23 | IconButton(
24 | onClick = { data.performAction() }
25 | ) {
26 | Icon(
27 | imageVector = Lucide.X,
28 | contentDescription = "Ok",
29 | tint = DevkitWalletColors.white
30 | )
31 | }
32 | },
33 | containerColor = DevkitWalletColors.primaryLight,
34 | ) {
35 | Text(
36 | text = data.visuals.message,
37 | fontFamily = quattroRegular,
38 | fontSize = 14.sp
39 | )
40 | }
41 | }
42 |
--------------------------------------------------------------------------------
/Variant-Esplora/app/src/main/java/org/bitcoindevkit/devkitwallet/domain/BlockchainClient.kt:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright 2021-2025 thunderbiscuit and contributors.
3 | * Use of this source code is governed by the Apache 2.0 license that can be found in the ./LICENSE file.
4 | */
5 |
6 | package org.bitcoindevkit.devkitwallet.domain
7 |
8 | import org.bitcoindevkit.FullScanRequest
9 | import org.bitcoindevkit.SyncRequest
10 | import org.bitcoindevkit.Transaction
11 | import org.bitcoindevkit.Update
12 | import org.bitcoindevkit.EsploraClient as BdkEsploraClient
13 |
14 | interface BlockchainClient {
15 | fun clientId(): String
16 |
17 | fun fullScan(fullScanRequest: FullScanRequest, stopGap: ULong): Update
18 |
19 | fun sync(syncRequest: SyncRequest): Update
20 |
21 | fun broadcast(transaction: Transaction): Unit
22 |
23 | fun endpoint(): String
24 | }
25 |
26 | class EsploraClient(private val url: String) : BlockchainClient {
27 | private val client = BdkEsploraClient(url)
28 |
29 | override fun clientId(): String {
30 | return url
31 | }
32 |
33 | override fun fullScan(fullScanRequest: FullScanRequest, stopGap: ULong): Update {
34 | return client.fullScan(fullScanRequest, stopGap, parallelRequests = 2u)
35 | }
36 |
37 | override fun sync(syncRequest: SyncRequest): Update {
38 | return client.sync(syncRequest, parallelRequests = 2u)
39 | }
40 |
41 | override fun broadcast(transaction: Transaction) {
42 | client.broadcast(transaction)
43 | }
44 |
45 | override fun endpoint(): String {
46 | return url
47 | }
48 | }
49 |
--------------------------------------------------------------------------------
/Variant-Esplora/app/src/main/java/org/bitcoindevkit/devkitwallet/presentation/ui/components/CustomSnackbar.kt:
--------------------------------------------------------------------------------
1 | package org.bitcoindevkit.devkitwallet.presentation.ui.components
2 |
3 | import androidx.compose.foundation.layout.padding
4 | import androidx.compose.material3.Icon
5 | import androidx.compose.material3.IconButton
6 | import androidx.compose.material3.Snackbar
7 | import androidx.compose.material3.SnackbarData
8 | import androidx.compose.material3.Text
9 | import androidx.compose.runtime.Composable
10 | import androidx.compose.ui.Modifier
11 | import androidx.compose.ui.unit.dp
12 | import androidx.compose.ui.unit.sp
13 | import com.composables.icons.lucide.Lucide
14 | import com.composables.icons.lucide.X
15 | import org.bitcoindevkit.devkitwallet.presentation.theme.DevkitWalletColors
16 | import org.bitcoindevkit.devkitwallet.presentation.theme.quattroRegular
17 |
18 | @Composable
19 | fun CustomSnackbar(data: SnackbarData) {
20 | Snackbar(
21 | modifier = Modifier.padding(12.dp),
22 | action = {
23 | IconButton(
24 | onClick = { data.performAction() }
25 | ) {
26 | Icon(
27 | imageVector = Lucide.X,
28 | contentDescription = "Ok",
29 | tint = DevkitWalletColors.white
30 | )
31 | }
32 | },
33 | containerColor = DevkitWalletColors.primaryLight,
34 | ) {
35 | Text(
36 | text = data.visuals.message,
37 | fontFamily = quattroRegular,
38 | fontSize = 14.sp
39 | )
40 | }
41 | }
42 |
--------------------------------------------------------------------------------
/Variant-Kyoto/app/src/main/java/org/bitcoindevkit/devkitwallet/presentation/ui/components/CustomSnackbar.kt:
--------------------------------------------------------------------------------
1 | package org.bitcoindevkit.devkitwallet.presentation.ui.components
2 |
3 | import androidx.compose.foundation.layout.padding
4 | import androidx.compose.material3.Icon
5 | import androidx.compose.material3.IconButton
6 | import androidx.compose.material3.Snackbar
7 | import androidx.compose.material3.SnackbarData
8 | import androidx.compose.material3.Text
9 | import androidx.compose.runtime.Composable
10 | import androidx.compose.ui.Modifier
11 | import androidx.compose.ui.unit.dp
12 | import androidx.compose.ui.unit.sp
13 | import com.composables.icons.lucide.Lucide
14 | import com.composables.icons.lucide.X
15 | import org.bitcoindevkit.devkitwallet.presentation.theme.DevkitWalletColors
16 | import org.bitcoindevkit.devkitwallet.presentation.theme.quattroRegular
17 |
18 | @Composable
19 | fun CustomSnackbar(data: SnackbarData) {
20 | Snackbar(
21 | modifier = Modifier.padding(12.dp),
22 | action = {
23 | IconButton(
24 | onClick = { data.performAction() },
25 | ) {
26 | Icon(
27 | imageVector = Lucide.X,
28 | contentDescription = "Ok",
29 | tint = DevkitWalletColors.white,
30 | )
31 | }
32 | },
33 | containerColor = DevkitWalletColors.primaryLight,
34 | ) {
35 | Text(
36 | text = data.visuals.message,
37 | fontFamily = quattroRegular,
38 | fontSize = 14.sp,
39 | )
40 | }
41 | }
42 |
--------------------------------------------------------------------------------
/Variant-1.0/app/src/main/java/org/bitcoindevkit/devkitwallet/domain/DwLogger.kt:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright 2021-2025 thunderbiscuit and contributors.
3 | * Use of this source code is governed by the Apache 2.0 license that can be found in the ./LICENSE file.
4 | */
5 |
6 | package org.bitcoindevkit.devkitwallet.domain
7 |
8 | import java.time.Instant
9 | import java.time.ZoneId
10 | import java.time.temporal.ChronoUnit
11 |
12 | object DwLogger {
13 | private const val MAX_LOGS = 5000
14 | private val logEntries = ArrayDeque(MAX_LOGS)
15 | private val lock = Any()
16 |
17 | fun log(tag: LogLevel, message: String) {
18 | synchronized(lock) {
19 | if (logEntries.size >= MAX_LOGS) {
20 | logEntries.removeLast()
21 | }
22 | val millis = System.currentTimeMillis()
23 | val dateTime = Instant.ofEpochMilli(millis)
24 | .atZone(ZoneId.systemDefault())
25 | .toLocalDateTime()
26 | .truncatedTo(ChronoUnit.SECONDS)
27 |
28 | logEntries.addFirst("$dateTime $tag $message")
29 | }
30 | }
31 |
32 | fun getLogs(): List {
33 | synchronized(lock) {
34 | return logEntries.toList()
35 | }
36 | }
37 |
38 | enum class LogLevel {
39 | INFO,
40 | WARN,
41 | ERROR;
42 |
43 | override fun toString(): String {
44 | return when (this) {
45 | INFO -> "[INFO] "
46 | WARN -> "[WARN] "
47 | ERROR -> "[ERROR]"
48 | }
49 | }
50 | }
51 | }
52 |
--------------------------------------------------------------------------------
/Variant-0.32/app/src/main/java/com/goldenraven/devkitwallet/ui/components/SecondaryScreensAppBar.kt:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright 2021-2023 thunderbiscuit and contributors.
3 | * Use of this source code is governed by the Apache 2.0 license that can be found in the ./LICENSE file.
4 | */
5 |
6 | package com.goldenraven.devkitwallet.ui.components
7 |
8 | import androidx.compose.material.icons.Icons
9 | import androidx.compose.material.icons.rounded.ArrowBack
10 | import androidx.compose.material3.*
11 | import androidx.compose.runtime.Composable
12 | import androidx.compose.ui.unit.sp
13 | import com.goldenraven.devkitwallet.ui.theme.DevkitWalletColors
14 | import com.goldenraven.devkitwallet.ui.theme.jetBrainsMonoRegular
15 |
16 | @OptIn(ExperimentalMaterial3Api::class)
17 | @Composable
18 | internal fun SecondaryScreensAppBar(
19 | title: String,
20 | navigation: () -> Unit
21 | ) {
22 | TopAppBar(
23 | title = {
24 | Text(
25 | text = title,
26 | color = DevkitWalletColors.white,
27 | fontSize = 18.sp,
28 | fontFamily = jetBrainsMonoRegular
29 | )
30 | },
31 | navigationIcon = {
32 | IconButton(onClick = navigation) {
33 | Icon(
34 | imageVector = Icons.Rounded.ArrowBack,
35 | contentDescription = "Back",
36 | tint = DevkitWalletColors.white
37 | )
38 | }
39 | },
40 | colors = TopAppBarDefaults.topAppBarColors(
41 | containerColor = DevkitWalletColors.primaryDark,
42 | )
43 | )
44 | }
45 |
--------------------------------------------------------------------------------
/Variant-1.0/app/src/main/java/org/bitcoindevkit/devkitwallet/presentation/viewmodels/AddressViewModel.kt:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright 2021-2025 thunderbiscuit and contributors.
3 | * Use of this source code is governed by the Apache 2.0 license that can be found in the ./LICENSE file.
4 | */
5 |
6 | package org.bitcoindevkit.devkitwallet.presentation.viewmodels
7 |
8 | import androidx.compose.runtime.getValue
9 | import androidx.compose.runtime.mutableStateOf
10 | import androidx.compose.runtime.setValue
11 | import androidx.lifecycle.ViewModel
12 | import org.bitcoindevkit.AddressInfo
13 | import org.bitcoindevkit.devkitwallet.domain.DwLogger
14 | import org.bitcoindevkit.devkitwallet.domain.DwLogger.LogLevel.INFO
15 | import org.bitcoindevkit.devkitwallet.domain.Wallet
16 | import org.bitcoindevkit.devkitwallet.presentation.viewmodels.mvi.ReceiveScreenAction
17 | import org.bitcoindevkit.devkitwallet.presentation.viewmodels.mvi.ReceiveScreenState
18 |
19 | internal class AddressViewModel(private val wallet: Wallet) : ViewModel() {
20 | var state: ReceiveScreenState by mutableStateOf(ReceiveScreenState())
21 | private set
22 |
23 | fun onAction(action: ReceiveScreenAction) {
24 | when (action) {
25 | is ReceiveScreenAction.UpdateAddress -> updateAddress()
26 | }
27 | }
28 |
29 | private fun updateAddress() {
30 | val newAddress: AddressInfo = wallet.getNewAddress()
31 | DwLogger.log(INFO, "Revealing new address at index ${newAddress.index}")
32 |
33 | state = ReceiveScreenState(
34 | address = newAddress.address.toString(),
35 | addressIndex = newAddress.index
36 | )
37 | }
38 | }
39 |
--------------------------------------------------------------------------------
/Variant-0.32/app/src/main/java/com/goldenraven/devkitwallet/viewmodels/WalletViewModel.kt:
--------------------------------------------------------------------------------
1 | package com.goldenraven.devkitwallet.viewmodels
2 |
3 | import androidx.lifecycle.LiveData
4 | import androidx.lifecycle.MutableLiveData
5 | import androidx.lifecycle.ViewModel
6 | import androidx.lifecycle.viewModelScope
7 | import com.goldenraven.devkitwallet.domain.Wallet
8 | import kotlinx.coroutines.Dispatchers
9 | import kotlinx.coroutines.launch
10 | import kotlinx.coroutines.withContext
11 |
12 | internal class WalletViewModel : ViewModel() {
13 |
14 | private var _balance: MutableLiveData = MutableLiveData(0u)
15 | val balance: LiveData
16 | get() = _balance
17 |
18 | private var _syncing: MutableLiveData = MutableLiveData(false)
19 | val syncing: LiveData
20 | get() = _syncing
21 |
22 | private var _unit: MutableLiveData = MutableLiveData(CurrencyUnit.Bitcoin)
23 | val unit: LiveData
24 | get() = _unit
25 |
26 | fun switchUnit() {
27 | _unit.value = when (_unit.value) {
28 | CurrencyUnit.Bitcoin -> CurrencyUnit.Satoshi
29 | CurrencyUnit.Satoshi -> CurrencyUnit.Bitcoin
30 | null -> CurrencyUnit.Bitcoin
31 | }
32 | }
33 |
34 | fun updateBalance() {
35 | _syncing.value = true
36 | viewModelScope.launch(Dispatchers.IO) {
37 | Wallet.sync()
38 | withContext(Dispatchers.Main) {
39 | _balance.value = Wallet.getBalance()
40 | _syncing.value = false
41 | }
42 | }
43 | }
44 | }
45 |
46 | enum class CurrencyUnit {
47 | Bitcoin,
48 | Satoshi
49 | }
50 |
--------------------------------------------------------------------------------
/Variant-Kyoto/app/src/main/java/org/bitcoindevkit/devkitwallet/presentation/viewmodels/AddressViewModel.kt:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright 2021-2024 thunderbiscuit and contributors.
3 | * Use of this source code is governed by the Apache 2.0 license that can be found in the ./LICENSE file.
4 | */
5 |
6 | package org.bitcoindevkit.devkitwallet.presentation.viewmodels
7 |
8 | import androidx.compose.runtime.getValue
9 | import androidx.compose.runtime.mutableStateOf
10 | import androidx.compose.runtime.setValue
11 | import androidx.lifecycle.ViewModel
12 | import org.bitcoindevkit.AddressInfo
13 | import org.bitcoindevkit.devkitwallet.domain.DwLogger
14 | import org.bitcoindevkit.devkitwallet.domain.DwLogger.LogLevel.INFO
15 | import org.bitcoindevkit.devkitwallet.domain.Wallet
16 | import org.bitcoindevkit.devkitwallet.presentation.viewmodels.mvi.ReceiveScreenAction
17 | import org.bitcoindevkit.devkitwallet.presentation.viewmodels.mvi.ReceiveScreenState
18 |
19 | internal class AddressViewModel(private val wallet: Wallet) : ViewModel() {
20 | var state: ReceiveScreenState by mutableStateOf(ReceiveScreenState())
21 | private set
22 |
23 | fun onAction(action: ReceiveScreenAction) {
24 | when (action) {
25 | is ReceiveScreenAction.UpdateAddress -> updateAddress()
26 | }
27 | }
28 |
29 | private fun updateAddress() {
30 | val newAddress: AddressInfo = wallet.getNewAddress()
31 | DwLogger.log(INFO, "Revealing new address at index ${newAddress.index}")
32 |
33 | state =
34 | ReceiveScreenState(
35 | address = newAddress.address.toString(),
36 | addressIndex = newAddress.index,
37 | )
38 | }
39 | }
40 |
--------------------------------------------------------------------------------
/Variant-Esplora/app/src/main/java/org/bitcoindevkit/devkitwallet/domain/DwLogger.kt:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright 2021-2025 thunderbiscuit and contributors.
3 | * Use of this source code is governed by the Apache 2.0 license that can be found in the ./LICENSE file.
4 | */
5 |
6 | package org.bitcoindevkit.devkitwallet.domain
7 |
8 | import java.time.Instant
9 | import java.time.ZoneId
10 | import java.time.temporal.ChronoUnit
11 |
12 | object DwLogger {
13 | private const val MAX_LOGS = 5000
14 | private val logEntries = ArrayDeque(MAX_LOGS)
15 | private val lock = Any()
16 |
17 | fun log(tag: LogLevel, message: String) {
18 | synchronized(lock) {
19 | if (logEntries.size >= MAX_LOGS) {
20 | logEntries.removeLast()
21 | }
22 | val millis = System.currentTimeMillis()
23 | val dateTime = Instant
24 | .ofEpochMilli(millis)
25 | .atZone(ZoneId.systemDefault())
26 | .toLocalDateTime()
27 | .truncatedTo(ChronoUnit.SECONDS)
28 |
29 | logEntries.addFirst("$dateTime $tag $message")
30 | }
31 | }
32 |
33 | fun getLogs(): List {
34 | synchronized(lock) {
35 | return logEntries.toList()
36 | }
37 | }
38 |
39 | @Suppress("ktlint:standard:no-multi-spaces")
40 | enum class LogLevel {
41 | INFO,
42 | WARN,
43 | ERROR,
44 | ;
45 |
46 | override fun toString(): String {
47 | return when (this) {
48 | INFO -> "[INFO] "
49 | WARN -> "[WARN] "
50 | ERROR -> "[ERROR]"
51 | }
52 | }
53 | }
54 | }
55 |
--------------------------------------------------------------------------------
/Variant-1.0/app/src/main/java/org/bitcoindevkit/devkitwallet/presentation/ui/components/NeutralButton.kt:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright 2021-2025 thunderbiscuit and contributors.
3 | * Use of this source code is governed by the Apache 2.0 license that can be found in the ./LICENSE file.
4 | */
5 |
6 | package org.bitcoindevkit.devkitwallet.presentation.ui.components
7 |
8 | import androidx.compose.foundation.layout.fillMaxWidth
9 | import androidx.compose.foundation.layout.height
10 | import androidx.compose.foundation.layout.padding
11 | import androidx.compose.foundation.shape.RoundedCornerShape
12 | import androidx.compose.material3.Button
13 | import androidx.compose.material3.ButtonDefaults
14 | import androidx.compose.material3.Text
15 | import androidx.compose.runtime.Composable
16 | import androidx.compose.ui.Modifier
17 | import androidx.compose.ui.draw.shadow
18 | import androidx.compose.ui.unit.dp
19 | import org.bitcoindevkit.devkitwallet.presentation.theme.DevkitWalletColors
20 |
21 | @Composable
22 | fun NeutralButton(text: String, enabled: Boolean = true, modifier: Modifier? = null, onClick: () -> Unit) {
23 | Button(
24 | onClick = onClick,
25 | colors =
26 | ButtonDefaults.buttonColors(
27 | containerColor = DevkitWalletColors.secondary,
28 | disabledContainerColor = DevkitWalletColors.secondary,
29 | ),
30 | shape = RoundedCornerShape(16.dp),
31 | enabled = enabled,
32 | modifier = modifier ?: Modifier
33 | .height(80.dp)
34 | .fillMaxWidth(0.9f)
35 | .padding(vertical = 8.dp, horizontal = 8.dp)
36 | .shadow(elevation = 4.dp, shape = RoundedCornerShape(16.dp))
37 | ) {
38 | Text(
39 | text = text,
40 | )
41 | }
42 | }
43 |
--------------------------------------------------------------------------------
/Variant-Esplora/app/src/main/java/org/bitcoindevkit/devkitwallet/presentation/ui/components/NeutralButton.kt:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright 2021-2025 thunderbiscuit and contributors.
3 | * Use of this source code is governed by the Apache 2.0 license that can be found in the ./LICENSE file.
4 | */
5 |
6 | package org.bitcoindevkit.devkitwallet.presentation.ui.components
7 |
8 | import androidx.compose.foundation.layout.fillMaxWidth
9 | import androidx.compose.foundation.layout.height
10 | import androidx.compose.foundation.layout.padding
11 | import androidx.compose.foundation.shape.RoundedCornerShape
12 | import androidx.compose.material3.Button
13 | import androidx.compose.material3.ButtonDefaults
14 | import androidx.compose.material3.Text
15 | import androidx.compose.runtime.Composable
16 | import androidx.compose.ui.Modifier
17 | import androidx.compose.ui.draw.shadow
18 | import androidx.compose.ui.unit.dp
19 | import org.bitcoindevkit.devkitwallet.presentation.theme.DevkitWalletColors
20 |
21 | @Composable
22 | fun NeutralButton(text: String, enabled: Boolean = true, modifier: Modifier? = null, onClick: () -> Unit) {
23 | Button(
24 | onClick = onClick,
25 | colors =
26 | ButtonDefaults.buttonColors(
27 | containerColor = DevkitWalletColors.secondary,
28 | disabledContainerColor = DevkitWalletColors.secondary,
29 | ),
30 | shape = RoundedCornerShape(16.dp),
31 | enabled = enabled,
32 | modifier = modifier ?: Modifier
33 | .height(80.dp)
34 | .fillMaxWidth(0.9f)
35 | .padding(vertical = 8.dp, horizontal = 8.dp)
36 | .shadow(elevation = 4.dp, shape = RoundedCornerShape(16.dp))
37 | ) {
38 | Text(
39 | text = text,
40 | )
41 | }
42 | }
43 |
--------------------------------------------------------------------------------
/Variant-0.32/app/src/main/java/com/goldenraven/devkitwallet/utils/SharedPreferencesManager.kt:
--------------------------------------------------------------------------------
1 |
2 | package com.goldenraven.devkitwallet.utils
3 |
4 | import android.content.SharedPreferences
5 |
6 |
7 | private const val PREFS_WALLET_INITIALISED = "initialized"
8 | private const val PREFS_PATH = "path"
9 | private const val PREFS_DESCRIPTOR = "descriptor"
10 | private const val PREFS_CHANGE_DESCRIPTOR = "changeDescriptor"
11 | private const val PREFS_MNEMONIC = "mnemonic"
12 |
13 | class SharedPreferencesManager(private val sharedPreferences: SharedPreferences) {
14 |
15 | var path: String
16 | get() = sharedPreferences.getString(PREFS_PATH, "") ?: ""
17 | set(value) {
18 | sharedPreferences.edit()?.putString(PREFS_PATH, value)?.apply()
19 | }
20 |
21 | var descriptor: String
22 | get() = sharedPreferences.getString(PREFS_DESCRIPTOR, "") ?: ""
23 | set(value) {
24 | sharedPreferences.edit()?.putString(PREFS_DESCRIPTOR, value)?.apply()
25 | }
26 |
27 | var changeDescriptor: String
28 | get() = sharedPreferences.getString(PREFS_CHANGE_DESCRIPTOR, "") ?: ""
29 | set(value) {
30 | sharedPreferences.edit()?.putString(PREFS_CHANGE_DESCRIPTOR, value)?.apply()
31 | }
32 |
33 | var mnemonic: String
34 | get() = sharedPreferences.getString(PREFS_MNEMONIC, "No seed phrase saved")
35 | ?: "Seed phrase not there"
36 | set(value) {
37 | sharedPreferences.edit()?.putString(PREFS_MNEMONIC, value)?.apply()
38 | }
39 |
40 | var walletInitialised: Boolean
41 | get() = sharedPreferences.getBoolean(PREFS_WALLET_INITIALISED, false)
42 | set(value) {
43 | sharedPreferences.edit()?.putBoolean(PREFS_WALLET_INITIALISED, value)?.apply()
44 | }
45 | }
46 |
--------------------------------------------------------------------------------
/Variant-Kyoto/app/src/main/java/org/bitcoindevkit/devkitwallet/presentation/ui/components/NeutralButton.kt:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright 2021-2024 thunderbiscuit and contributors.
3 | * Use of this source code is governed by the Apache 2.0 license that can be found in the ./LICENSE file.
4 | */
5 |
6 | package org.bitcoindevkit.devkitwallet.presentation.ui.components
7 |
8 | import androidx.compose.foundation.layout.fillMaxWidth
9 | import androidx.compose.foundation.layout.height
10 | import androidx.compose.foundation.layout.padding
11 | import androidx.compose.foundation.shape.RoundedCornerShape
12 | import androidx.compose.material3.Button
13 | import androidx.compose.material3.ButtonDefaults
14 | import androidx.compose.material3.Text
15 | import androidx.compose.runtime.Composable
16 | import androidx.compose.ui.Modifier
17 | import androidx.compose.ui.draw.shadow
18 | import androidx.compose.ui.unit.dp
19 | import org.bitcoindevkit.devkitwallet.presentation.theme.DevkitWalletColors
20 |
21 | @Composable
22 | fun NeutralButton(text: String, enabled: Boolean, modifier: Modifier? = null, onClick: () -> Unit) {
23 | Button(
24 | onClick = onClick,
25 | colors =
26 | ButtonDefaults.buttonColors(
27 | containerColor = DevkitWalletColors.secondary,
28 | disabledContainerColor = DevkitWalletColors.secondary,
29 | ),
30 | shape = RoundedCornerShape(16.dp),
31 | enabled = enabled,
32 | modifier =
33 | modifier ?: Modifier
34 | .height(80.dp)
35 | .fillMaxWidth(0.9f)
36 | .padding(vertical = 8.dp, horizontal = 8.dp)
37 | .shadow(elevation = 4.dp, shape = RoundedCornerShape(16.dp)),
38 | ) {
39 | Text(
40 | text = text,
41 | )
42 | }
43 | }
44 |
--------------------------------------------------------------------------------
/Variant-0.32/app/src/main/res/drawable-v24/ic_launcher_foreground.xml:
--------------------------------------------------------------------------------
1 |
7 |
8 |
9 |
15 |
18 |
21 |
22 |
23 |
24 |
30 |
--------------------------------------------------------------------------------
/Variant-1.0/app/src/main/res/drawable-v24/ic_launcher_foreground.xml:
--------------------------------------------------------------------------------
1 |
7 |
8 |
9 |
15 |
18 |
21 |
22 |
23 |
24 |
30 |
--------------------------------------------------------------------------------
/Variant-Kyoto/app/src/main/res/drawable-v24/ic_launcher_foreground.xml:
--------------------------------------------------------------------------------
1 |
7 |
8 |
9 |
15 |
18 |
21 |
22 |
23 |
24 |
30 |
--------------------------------------------------------------------------------
/Variant-Esplora/app/src/main/res/drawable-v24/ic_launcher_foreground.xml:
--------------------------------------------------------------------------------
1 |
7 |
8 |
9 |
15 |
18 |
21 |
22 |
23 |
24 |
30 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | # Devkit Wallet
2 |
3 |
4 |
5 |
6 |
7 | The _Devkit Wallet_ is a wallet built as a reference app for the [bitcoindevkit](https://github.com/bitcoindevkit) on Android. It is a fork of the long-standing [Devkit Wallet](https://github.com/thunderbiscuit/devkit-wallet), a repository showcasing the bitcoindevkit library for beginner and advanced Android developers. This repository is not intended produce a production-ready wallet, and the apps only work on Testnet3, Testnet4, Signet, and Regtest.
8 |
9 | The demo apps are built with the following goals in mind:
10 | 1. Be a reference application for the bitcoindevkit API on Android.
11 | 2. Showcase some of the more advanced features of the bitcoindevkit library.
12 |
13 | ## Variants
14 |
15 | The app is available in a few variants, each showcasing different features or versions of the bitcoindevkit libraries. The variants each have their own directory, and are standalone applications by themselves. After cloning the repository, developers should open the variants in their own Android Studio instance.
16 |
17 | - **[Variant — Esplora](https://github.com/bitcoindevkit/devkit-wallet/tree/master/Variant%20%E2%80%94%20Esplora):** The default branch. This app receives its bitcoin data from a public Esplora instance.
18 | - **[Variant — Kyoto](https://github.com/bitcoindevkit/devkit-wallet/tree/master/Variant%20%E2%80%94%20Kyoto):** This app uses Compact Block Filters to sync its wallet.
19 | - **[Variant — 1.0](https://github.com/bitcoindevkit/devkit-wallet/tree/master/Variant%20%E2%80%94%201.0):** This app uses the `1.2.0` version of the bitcoindevkit library, showcasing the 1.0 API.
20 | - **[Variant — 0.32](https://github.com/bitcoindevkit/devkit-wallet/tree/master/Variant%20%E2%80%94%200.30):** This app uses the `0.32.1` version of the bitcoindevkit library, showcasing the pre-1.0 API.
21 |
--------------------------------------------------------------------------------
/Variant-Esplora/app/src/main/java/org/bitcoindevkit/devkitwallet/presentation/viewmodels/AddressViewModel.kt:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright 2021-2025 thunderbiscuit and contributors.
3 | * Use of this source code is governed by the Apache 2.0 license that can be found in the ./LICENSE file.
4 | */
5 |
6 | package org.bitcoindevkit.devkitwallet.presentation.viewmodels
7 |
8 | import androidx.lifecycle.ViewModel
9 | import kotlinx.coroutines.flow.MutableStateFlow
10 | import kotlinx.coroutines.flow.StateFlow
11 | import kotlinx.coroutines.flow.asStateFlow
12 | import kotlinx.coroutines.flow.update
13 | import org.bitcoindevkit.AddressInfo
14 | import org.bitcoindevkit.devkitwallet.domain.DwLogger
15 | import org.bitcoindevkit.devkitwallet.domain.DwLogger.LogLevel.INFO
16 | import org.bitcoindevkit.devkitwallet.domain.Wallet
17 |
18 | data class ReceiveScreenState(
19 | val address: String? = null,
20 | val addressIndex: UInt? = null,
21 | )
22 |
23 | sealed interface ReceiveScreenAction {
24 | data object UpdateAddress : ReceiveScreenAction
25 | }
26 |
27 | internal class AddressViewModel(private val wallet: Wallet) : ViewModel() {
28 | private val _state: MutableStateFlow = MutableStateFlow(ReceiveScreenState())
29 | val state: StateFlow = _state.asStateFlow()
30 |
31 | fun onAction(action: ReceiveScreenAction) {
32 | when (action) {
33 | is ReceiveScreenAction.UpdateAddress -> updateAddress()
34 | }
35 | }
36 |
37 | private fun updateAddress() {
38 | val newAddress: AddressInfo = wallet.getNewAddress()
39 | DwLogger.log(INFO, "Revealing new address at index ${newAddress.index}")
40 |
41 | _state.update {
42 | ReceiveScreenState(
43 | address = newAddress.address.toString(),
44 | addressIndex = newAddress.index
45 | )
46 | }
47 | }
48 | }
49 |
--------------------------------------------------------------------------------
/Variant-1.0/app/src/main/java/org/bitcoindevkit/devkitwallet/presentation/ui/components/SecondaryScreensAppBar.kt:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright 2021-2025 thunderbiscuit and contributors.
3 | * Use of this source code is governed by the Apache 2.0 license that can be found in the ./LICENSE file.
4 | */
5 |
6 | package org.bitcoindevkit.devkitwallet.presentation.ui.components
7 |
8 | import androidx.compose.material.icons.Icons
9 | import androidx.compose.material.icons.automirrored.rounded.ArrowBack
10 | import androidx.compose.material3.ExperimentalMaterial3Api
11 | import androidx.compose.material3.Icon
12 | import androidx.compose.material3.IconButton
13 | import androidx.compose.material3.Text
14 | import androidx.compose.material3.TopAppBar
15 | import androidx.compose.material3.TopAppBarDefaults
16 | import androidx.compose.runtime.Composable
17 | import androidx.compose.ui.unit.sp
18 | import org.bitcoindevkit.devkitwallet.presentation.theme.DevkitWalletColors
19 | import org.bitcoindevkit.devkitwallet.presentation.theme.quattroRegular
20 |
21 | @OptIn(ExperimentalMaterial3Api::class)
22 | @Composable
23 | internal fun SecondaryScreensAppBar(title: String, navigation: () -> Unit) {
24 | TopAppBar(
25 | title = {
26 | Text(
27 | text = title,
28 | color = DevkitWalletColors.white,
29 | fontSize = 18.sp,
30 | fontFamily = quattroRegular
31 | )
32 | },
33 | navigationIcon = {
34 | IconButton(onClick = navigation) {
35 | Icon(
36 | imageVector = Icons.AutoMirrored.Rounded.ArrowBack,
37 | contentDescription = "Back",
38 | tint = DevkitWalletColors.white
39 | )
40 | }
41 | },
42 | colors =
43 | TopAppBarDefaults.topAppBarColors(
44 | containerColor = DevkitWalletColors.primaryDark,
45 | )
46 | )
47 | }
48 |
--------------------------------------------------------------------------------
/Variant-Esplora/app/src/main/java/org/bitcoindevkit/devkitwallet/presentation/ui/components/SecondaryScreensAppBar.kt:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright 2021-2025 thunderbiscuit and contributors.
3 | * Use of this source code is governed by the Apache 2.0 license that can be found in the ./LICENSE file.
4 | */
5 |
6 | package org.bitcoindevkit.devkitwallet.presentation.ui.components
7 |
8 | import androidx.compose.material.icons.Icons
9 | import androidx.compose.material.icons.automirrored.rounded.ArrowBack
10 | import androidx.compose.material3.ExperimentalMaterial3Api
11 | import androidx.compose.material3.Icon
12 | import androidx.compose.material3.IconButton
13 | import androidx.compose.material3.Text
14 | import androidx.compose.material3.TopAppBar
15 | import androidx.compose.material3.TopAppBarDefaults
16 | import androidx.compose.runtime.Composable
17 | import androidx.compose.ui.unit.sp
18 | import org.bitcoindevkit.devkitwallet.presentation.theme.DevkitWalletColors
19 | import org.bitcoindevkit.devkitwallet.presentation.theme.quattroRegular
20 |
21 | @OptIn(ExperimentalMaterial3Api::class)
22 | @Composable
23 | internal fun SecondaryScreensAppBar(title: String, navigation: () -> Unit) {
24 | TopAppBar(
25 | title = {
26 | Text(
27 | text = title,
28 | color = DevkitWalletColors.white,
29 | fontSize = 18.sp,
30 | fontFamily = quattroRegular
31 | )
32 | },
33 | navigationIcon = {
34 | IconButton(onClick = navigation) {
35 | Icon(
36 | imageVector = Icons.AutoMirrored.Rounded.ArrowBack,
37 | contentDescription = "Back",
38 | tint = DevkitWalletColors.white
39 | )
40 | }
41 | },
42 | colors =
43 | TopAppBarDefaults.topAppBarColors(
44 | containerColor = DevkitWalletColors.primaryDark,
45 | )
46 | )
47 | }
48 |
--------------------------------------------------------------------------------
/Variant-Kyoto/app/src/main/java/org/bitcoindevkit/devkitwallet/presentation/ui/components/SecondaryScreensAppBar.kt:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright 2021-2024 thunderbiscuit and contributors.
3 | * Use of this source code is governed by the Apache 2.0 license that can be found in the ./LICENSE file.
4 | */
5 |
6 | package org.bitcoindevkit.devkitwallet.presentation.ui.components
7 |
8 | import androidx.compose.material.icons.Icons
9 | import androidx.compose.material.icons.automirrored.rounded.ArrowBack
10 | import androidx.compose.material3.ExperimentalMaterial3Api
11 | import androidx.compose.material3.Icon
12 | import androidx.compose.material3.IconButton
13 | import androidx.compose.material3.Text
14 | import androidx.compose.material3.TopAppBar
15 | import androidx.compose.material3.TopAppBarDefaults
16 | import androidx.compose.runtime.Composable
17 | import androidx.compose.ui.unit.sp
18 | import org.bitcoindevkit.devkitwallet.presentation.theme.DevkitWalletColors
19 | import org.bitcoindevkit.devkitwallet.presentation.theme.quattroRegular
20 |
21 | @OptIn(ExperimentalMaterial3Api::class)
22 | @Composable
23 | internal fun SecondaryScreensAppBar(title: String, navigation: () -> Unit) {
24 | TopAppBar(
25 | title = {
26 | Text(
27 | text = title,
28 | color = DevkitWalletColors.white,
29 | fontSize = 18.sp,
30 | fontFamily = quattroRegular,
31 | )
32 | },
33 | navigationIcon = {
34 | IconButton(onClick = navigation) {
35 | Icon(
36 | imageVector = Icons.AutoMirrored.Rounded.ArrowBack,
37 | contentDescription = "Back",
38 | tint = DevkitWalletColors.white,
39 | )
40 | }
41 | },
42 | colors =
43 | TopAppBarDefaults.topAppBarColors(
44 | containerColor = DevkitWalletColors.primaryDark,
45 | ),
46 | )
47 | }
48 |
--------------------------------------------------------------------------------
/Variant-1.0/app/src/main/java/org/bitcoindevkit/devkitwallet/domain/UserPreferencesRepository.kt:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright 2021-2025 thunderbiscuit and contributors.
3 | * Use of this source code is governed by the Apache 2.0 license that can be found in the ./LICENSE file.
4 | */
5 |
6 | package org.bitcoindevkit.devkitwallet.domain
7 |
8 | import androidx.datastore.core.DataStore
9 | import kotlinx.coroutines.flow.first
10 | import org.bitcoindevkit.devkitwallet.data.SingleWallet
11 | import org.bitcoindevkit.devkitwallet.data.UserPreferences
12 |
13 | class UserPreferencesRepository(
14 | private val userPreferencesStore: DataStore,
15 | ) {
16 | suspend fun fetchIntroDone(): Boolean {
17 | return userPreferencesStore.data.first().introDone
18 | }
19 |
20 | suspend fun setIntroDone() {
21 | userPreferencesStore.updateData { currentPreferences ->
22 | currentPreferences.toBuilder().setIntroDone(true).build()
23 | }
24 | }
25 |
26 | suspend fun fetchActiveWallets(): List {
27 | return userPreferencesStore.data.first().walletsList
28 | }
29 |
30 | suspend fun updateActiveWallets(singleWallet: SingleWallet) {
31 | userPreferencesStore.updateData { currentPreferences ->
32 | currentPreferences.toBuilder().addWallets(singleWallet).build()
33 | }
34 | }
35 |
36 | suspend fun setFullScanCompleted(walletId: String) {
37 | userPreferencesStore.updateData { currentPreferences ->
38 | val updatedWalletsList = currentPreferences.walletsList.map { wallet ->
39 | if (wallet.id == walletId) {
40 | wallet.toBuilder().setFullScanCompleted(true).build()
41 | } else {
42 | wallet
43 | }
44 | }
45 | currentPreferences
46 | .toBuilder()
47 | .clearWallets()
48 | .addAllWallets(updatedWalletsList)
49 | .build()
50 | }
51 | }
52 | }
53 |
--------------------------------------------------------------------------------
/Variant-Esplora/app/src/main/java/org/bitcoindevkit/devkitwallet/domain/UserPreferencesRepository.kt:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright 2021-2025 thunderbiscuit and contributors.
3 | * Use of this source code is governed by the Apache 2.0 license that can be found in the ./LICENSE file.
4 | */
5 |
6 | package org.bitcoindevkit.devkitwallet.domain
7 |
8 | import androidx.datastore.core.DataStore
9 | import kotlinx.coroutines.flow.first
10 | import org.bitcoindevkit.devkitwallet.data.SingleWallet
11 | import org.bitcoindevkit.devkitwallet.data.UserPreferences
12 |
13 | class UserPreferencesRepository(
14 | private val userPreferencesStore: DataStore,
15 | ) {
16 | suspend fun fetchIntroDone(): Boolean {
17 | return userPreferencesStore.data.first().introDone
18 | }
19 |
20 | suspend fun setIntroDone() {
21 | userPreferencesStore.updateData { currentPreferences ->
22 | currentPreferences.toBuilder().setIntroDone(true).build()
23 | }
24 | }
25 |
26 | suspend fun fetchActiveWallets(): List {
27 | return userPreferencesStore.data.first().walletsList
28 | }
29 |
30 | suspend fun updateActiveWallets(singleWallet: SingleWallet) {
31 | userPreferencesStore.updateData { currentPreferences ->
32 | currentPreferences.toBuilder().addWallets(singleWallet).build()
33 | }
34 | }
35 |
36 | suspend fun setFullScanCompleted(walletId: String) {
37 | userPreferencesStore.updateData { currentPreferences ->
38 | val updatedWalletsList = currentPreferences.walletsList.map { wallet ->
39 | if (wallet.id == walletId) {
40 | wallet.toBuilder().setFullScanCompleted(true).build()
41 | } else {
42 | wallet
43 | }
44 | }
45 | currentPreferences
46 | .toBuilder()
47 | .clearWallets()
48 | .addAllWallets(updatedWalletsList)
49 | .build()
50 | }
51 | }
52 | }
53 |
--------------------------------------------------------------------------------
/Variant-Kyoto/app/src/main/java/org/bitcoindevkit/devkitwallet/domain/ActiveWalletsRepository.kt:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright 2021-2024 thunderbiscuit and contributors.
3 | * Use of this source code is governed by the Apache 2.0 license that can be found in the ./LICENSE file.
4 | */
5 |
6 | package org.bitcoindevkit.devkitwallet.domain
7 |
8 | import androidx.datastore.core.DataStore
9 | import kotlinx.coroutines.flow.first
10 | import org.bitcoindevkit.devkitwallet.data.SingleWallet
11 | import org.bitcoindevkit.devkitwallet.data.UserPreferences
12 |
13 | class UserPreferencesRepository(
14 | private val userPreferencesStore: DataStore,
15 | ) {
16 | suspend fun fetchIntroDone(): Boolean {
17 | return userPreferencesStore.data.first().introDone
18 | }
19 |
20 | suspend fun setIntroDone() {
21 | userPreferencesStore.updateData { currentPreferences ->
22 | currentPreferences.toBuilder().setIntroDone(true).build()
23 | }
24 | }
25 |
26 | suspend fun fetchActiveWallets(): List {
27 | return userPreferencesStore.data.first().walletsList
28 | }
29 |
30 | suspend fun updateActiveWallets(singleWallet: SingleWallet) {
31 | userPreferencesStore.updateData { currentPreferences ->
32 | currentPreferences.toBuilder().addWallets(singleWallet).build()
33 | }
34 | }
35 |
36 | suspend fun setFullScanCompleted(walletId: String) {
37 | userPreferencesStore.updateData { currentPreferences ->
38 | val updatedWalletsList =
39 | currentPreferences.walletsList.map { wallet ->
40 | if (wallet.id == walletId) {
41 | wallet.toBuilder().setFullScanCompleted(true).build()
42 | } else {
43 | wallet
44 | }
45 | }
46 | currentPreferences
47 | .toBuilder()
48 | .clearWallets()
49 | .addAllWallets(updatedWalletsList)
50 | .build()
51 | }
52 | }
53 | }
54 |
--------------------------------------------------------------------------------
/Variant-1.0/app/src/main/java/org/bitcoindevkit/devkitwallet/presentation/ui/components/RadioButtonWithLabel.kt:
--------------------------------------------------------------------------------
1 | package org.bitcoindevkit.devkitwallet.presentation.ui.components
2 |
3 | import androidx.compose.foundation.clickable
4 | import androidx.compose.foundation.layout.Arrangement
5 | import androidx.compose.foundation.layout.Row
6 | import androidx.compose.foundation.layout.padding
7 | import androidx.compose.foundation.layout.size
8 | import androidx.compose.foundation.selection.selectable
9 | import androidx.compose.material3.RadioButton
10 | import androidx.compose.material3.RadioButtonDefaults
11 | import androidx.compose.material3.Text
12 | import androidx.compose.runtime.Composable
13 | import androidx.compose.ui.Alignment
14 | import androidx.compose.ui.Modifier
15 | import androidx.compose.ui.unit.dp
16 | import androidx.compose.ui.unit.sp
17 | import org.bitcoindevkit.devkitwallet.presentation.theme.DevkitWalletColors
18 | import org.bitcoindevkit.devkitwallet.presentation.theme.monoRegular
19 |
20 | @Composable
21 | fun RadioButtonWithLabel(label: String, isSelected: Boolean, onSelect: () -> Unit) {
22 | Row(
23 | verticalAlignment = Alignment.CenterVertically,
24 | horizontalArrangement = Arrangement.spacedBy(4.dp),
25 | modifier = Modifier
26 | .padding(0.dp)
27 | .selectable(
28 | selected = isSelected,
29 | onClick = onSelect
30 | )
31 | ) {
32 | RadioButton(
33 | selected = isSelected,
34 | onClick = onSelect,
35 | colors = RadioButtonDefaults.colors(
36 | selectedColor = DevkitWalletColors.accent1,
37 | unselectedColor = DevkitWalletColors.accent2
38 | ),
39 | modifier = Modifier
40 | .padding(start = 8.dp)
41 | .size(40.dp)
42 | )
43 | Text(
44 | text = label,
45 | color = DevkitWalletColors.white,
46 | fontFamily = monoRegular,
47 | fontSize = 12.sp,
48 | modifier = Modifier
49 | .clickable(onClick = onSelect)
50 | .padding(0.dp)
51 | )
52 | }
53 | }
54 |
--------------------------------------------------------------------------------
/Variant-Esplora/app/src/main/java/org/bitcoindevkit/devkitwallet/presentation/ui/components/RadioButtonWithLabel.kt:
--------------------------------------------------------------------------------
1 | package org.bitcoindevkit.devkitwallet.presentation.ui.components
2 |
3 | import androidx.compose.foundation.clickable
4 | import androidx.compose.foundation.layout.Arrangement
5 | import androidx.compose.foundation.layout.Row
6 | import androidx.compose.foundation.layout.padding
7 | import androidx.compose.foundation.layout.size
8 | import androidx.compose.foundation.selection.selectable
9 | import androidx.compose.material3.RadioButton
10 | import androidx.compose.material3.RadioButtonDefaults
11 | import androidx.compose.material3.Text
12 | import androidx.compose.runtime.Composable
13 | import androidx.compose.ui.Alignment
14 | import androidx.compose.ui.Modifier
15 | import androidx.compose.ui.unit.dp
16 | import androidx.compose.ui.unit.sp
17 | import org.bitcoindevkit.devkitwallet.presentation.theme.DevkitWalletColors
18 | import org.bitcoindevkit.devkitwallet.presentation.theme.monoRegular
19 |
20 | @Composable
21 | fun RadioButtonWithLabel(label: String, isSelected: Boolean, onSelect: () -> Unit) {
22 | Row(
23 | verticalAlignment = Alignment.CenterVertically,
24 | horizontalArrangement = Arrangement.spacedBy(4.dp),
25 | modifier = Modifier
26 | .padding(0.dp)
27 | .selectable(
28 | selected = isSelected,
29 | onClick = onSelect
30 | )
31 | ) {
32 | RadioButton(
33 | selected = isSelected,
34 | onClick = onSelect,
35 | colors = RadioButtonDefaults.colors(
36 | selectedColor = DevkitWalletColors.accent1,
37 | unselectedColor = DevkitWalletColors.accent2
38 | ),
39 | modifier = Modifier
40 | .padding(start = 8.dp)
41 | .size(40.dp)
42 | )
43 | Text(
44 | text = label,
45 | color = DevkitWalletColors.white,
46 | fontFamily = monoRegular,
47 | fontSize = 12.sp,
48 | modifier = Modifier
49 | .clickable(onClick = onSelect)
50 | .padding(0.dp)
51 | )
52 | }
53 | }
54 |
--------------------------------------------------------------------------------
/Variant-Kyoto/app/src/main/java/org/bitcoindevkit/devkitwallet/domain/BlockchainClient.kt:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright 2021-2024 thunderbiscuit and contributors.
3 | * Use of this source code is governed by the Apache 2.0 license that can be found in the ./LICENSE file.
4 | */
5 |
6 | package org.bitcoindevkit.devkitwallet.domain
7 |
8 | import org.bitcoindevkit.FullScanRequest
9 | import org.bitcoindevkit.SyncRequest
10 | import org.bitcoindevkit.Transaction
11 | import org.bitcoindevkit.Update
12 | import org.bitcoindevkit.ElectrumClient as BdkElectrumClient
13 | import org.bitcoindevkit.EsploraClient as BdkEsploraClient
14 |
15 | interface BlockchainClient {
16 | fun clientId(): String
17 |
18 | fun fullScan(fullScanRequest: FullScanRequest, stopGap: ULong): Update
19 |
20 | fun sync(syncRequest: SyncRequest): Update
21 |
22 | fun broadcast(transaction: Transaction): Unit
23 | }
24 |
25 | class EsploraClient(private val url: String) : BlockchainClient {
26 | private val client = BdkEsploraClient(url)
27 |
28 | override fun clientId(): String {
29 | return url
30 | }
31 |
32 | override fun fullScan(fullScanRequest: FullScanRequest, stopGap: ULong): Update {
33 | return client.fullScan(fullScanRequest, stopGap, parallelRequests = 2u)
34 | }
35 |
36 | override fun sync(syncRequest: SyncRequest): Update {
37 | return client.sync(syncRequest, parallelRequests = 2u)
38 | }
39 |
40 | override fun broadcast(transaction: Transaction) {
41 | client.broadcast(transaction)
42 | }
43 | }
44 |
45 | class ElectrumClient(private val url: String) : BlockchainClient {
46 | private val client = BdkElectrumClient(url)
47 |
48 | override fun clientId(): String {
49 | return url
50 | }
51 |
52 | override fun fullScan(fullScanRequest: FullScanRequest, stopGap: ULong): Update {
53 | return client.fullScan(fullScanRequest, stopGap, batchSize = 10uL, fetchPrevTxouts = true)
54 | }
55 |
56 | override fun sync(syncRequest: SyncRequest): Update {
57 | return client.sync(syncRequest, batchSize = 2uL, fetchPrevTxouts = true)
58 | }
59 |
60 | override fun broadcast(transaction: Transaction) {
61 | throw NotImplementedError("ElectrumClient.broadcast() is not implemented")
62 | }
63 | }
64 |
--------------------------------------------------------------------------------
/Variant-1.0/app/src/main/java/org/bitcoindevkit/devkitwallet/presentation/viewmodels/SendViewModel.kt:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright 2021-2025 thunderbiscuit and contributors.
3 | * Use of this source code is governed by the Apache 2.0 license that can be found in the ./LICENSE file.
4 | */
5 |
6 | package org.bitcoindevkit.devkitwallet.presentation.viewmodels
7 |
8 | import android.util.Log
9 | import androidx.lifecycle.ViewModel
10 | import org.bitcoindevkit.FeeRate
11 | import org.bitcoindevkit.Psbt
12 | import org.bitcoindevkit.devkitwallet.domain.Wallet
13 | import org.bitcoindevkit.devkitwallet.presentation.viewmodels.mvi.SendScreenAction
14 | import org.bitcoindevkit.devkitwallet.presentation.viewmodels.mvi.TransactionType
15 | import org.bitcoindevkit.devkitwallet.presentation.viewmodels.mvi.TxDataBundle
16 |
17 | private const val TAG = "SendViewModel"
18 |
19 | internal class SendViewModel(private val wallet: Wallet) : ViewModel() {
20 | fun onAction(action: SendScreenAction) {
21 | when (action) {
22 | is SendScreenAction.Broadcast -> broadcast(action.txDataBundle)
23 | }
24 | }
25 |
26 | private fun broadcast(txInfo: TxDataBundle) {
27 | try {
28 | // Create, sign, and broadcast
29 | val psbt: Psbt =
30 | when (txInfo.transactionType) {
31 | TransactionType.STANDARD ->
32 | wallet.createTransaction(
33 | recipientList = txInfo.recipients,
34 | feeRate = FeeRate.fromSatPerVb(txInfo.feeRate),
35 | )
36 | // TransactionType.SEND_ALL -> Wallet.createSendAllTransaction(recipientList[0].address, FeeRate.fromSatPerVb(feeRate), rbfEnabled, opReturnMsg)
37 | TransactionType.SEND_ALL -> throw NotImplementedError("Send all not implemented")
38 | }
39 | val isSigned = wallet.sign(psbt)
40 | if (isSigned) {
41 | val txid: String = wallet.broadcast(psbt)
42 | Log.i(TAG, "Transaction was broadcast! txid: $txid")
43 | } else {
44 | Log.i(TAG, "Transaction not signed.")
45 | }
46 | } catch (e: Throwable) {
47 | Log.i(TAG, "Broadcast error: ${e.message}")
48 | }
49 | }
50 | }
51 |
--------------------------------------------------------------------------------
/Variant-Kyoto/app/src/main/java/org/bitcoindevkit/devkitwallet/presentation/ui/components/RadioButtonWithLabel.kt:
--------------------------------------------------------------------------------
1 | package org.bitcoindevkit.devkitwallet.presentation.ui.components
2 |
3 | import androidx.compose.foundation.clickable
4 | import androidx.compose.foundation.layout.Arrangement
5 | import androidx.compose.foundation.layout.Row
6 | import androidx.compose.foundation.layout.padding
7 | import androidx.compose.foundation.layout.size
8 | import androidx.compose.foundation.selection.selectable
9 | import androidx.compose.material3.RadioButton
10 | import androidx.compose.material3.RadioButtonDefaults
11 | import androidx.compose.material3.Text
12 | import androidx.compose.runtime.Composable
13 | import androidx.compose.ui.Alignment
14 | import androidx.compose.ui.Modifier
15 | import androidx.compose.ui.unit.dp
16 | import androidx.compose.ui.unit.sp
17 | import org.bitcoindevkit.devkitwallet.presentation.theme.DevkitWalletColors
18 | import org.bitcoindevkit.devkitwallet.presentation.theme.monoRegular
19 |
20 | @Composable
21 | fun RadioButtonWithLabel(label: String, isSelected: Boolean, onSelect: () -> Unit) {
22 | Row(
23 | verticalAlignment = Alignment.CenterVertically,
24 | horizontalArrangement = Arrangement.spacedBy(4.dp),
25 | modifier =
26 | Modifier
27 | .padding(0.dp)
28 | .selectable(
29 | selected = isSelected,
30 | onClick = onSelect,
31 | ),
32 | ) {
33 | RadioButton(
34 | selected = isSelected,
35 | onClick = onSelect,
36 | colors =
37 | RadioButtonDefaults.colors(
38 | selectedColor = DevkitWalletColors.accent1,
39 | unselectedColor = DevkitWalletColors.accent2,
40 | ),
41 | modifier =
42 | Modifier
43 | .padding(start = 8.dp)
44 | .size(40.dp),
45 | )
46 | Text(
47 | text = label,
48 | color = DevkitWalletColors.white,
49 | fontFamily = monoRegular,
50 | fontSize = 12.sp,
51 | modifier =
52 | Modifier
53 | .clickable(onClick = onSelect)
54 | .padding(0.dp),
55 | )
56 | }
57 | }
58 |
--------------------------------------------------------------------------------
/Variant-Esplora/app/src/main/java/org/bitcoindevkit/devkitwallet/domain/BlockchainClientsConfig.kt:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright 2021-2025 thunderbiscuit and contributors.
3 | * Use of this source code is governed by the Apache 2.0 license that can be found in the ./LICENSE file.
4 | */
5 |
6 | package org.bitcoindevkit.devkitwallet.domain
7 |
8 | import org.bitcoindevkit.Network
9 |
10 | class BlockchainClientsConfig {
11 | private var defaultClient: BlockchainClient? = null
12 | private val allClients: MutableList = mutableListOf()
13 |
14 | fun getClient(): BlockchainClient? {
15 | return defaultClient
16 | }
17 |
18 | fun addClient(client: BlockchainClient, setDefault: Boolean) {
19 | allClients.forEach {
20 | if (it.clientId() == client.clientId()) {
21 | throw IllegalArgumentException(
22 | "Client with url ${client.clientId()} already exists"
23 | )
24 | }
25 | }
26 | if (allClients.size >= 8) throw IllegalArgumentException("Maximum number of clients (8) reached")
27 | allClients.add(client)
28 | if (setDefault) {
29 | defaultClient = client
30 | }
31 | }
32 |
33 | fun setDefaultClient(clientId: String) {
34 | val client = allClients.find { it.clientId() == clientId }
35 | if (client == null) throw IllegalArgumentException("Client with url $clientId not found")
36 | defaultClient = client
37 | }
38 |
39 | companion object {
40 | @Suppress("ktlint:standard:no-multi-spaces")
41 | fun createDefaultConfig(network: Network): BlockchainClientsConfig {
42 | val config = BlockchainClientsConfig()
43 | when (network) {
44 | Network.REGTEST -> config.addClient(EsploraClient("http://10.0.2.2:3002"), true)
45 | Network.SIGNET -> config.addClient(EsploraClient("https://blockstream.info/signet/api/"), true)
46 | Network.TESTNET -> config.addClient(EsploraClient("https://blockstream.info/testnet/api/"), true)
47 | Network.TESTNET4 -> config.addClient(EsploraClient("https://mempool.space/testnet4/api/"), true)
48 | Network.BITCOIN -> throw IllegalArgumentException("This app does not support mainnet")
49 | }
50 | return config
51 | }
52 | }
53 | }
54 |
--------------------------------------------------------------------------------
/Variant-Kyoto/app/src/main/java/org/bitcoindevkit/devkitwallet/presentation/viewmodels/SendViewModel.kt:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright 2021-2024 thunderbiscuit and contributors.
3 | * Use of this source code is governed by the Apache 2.0 license that can be found in the ./LICENSE file.
4 | */
5 |
6 | package org.bitcoindevkit.devkitwallet.presentation.viewmodels
7 |
8 | import android.util.Log
9 | import androidx.lifecycle.ViewModel
10 | import org.bitcoindevkit.FeeRate
11 | import org.bitcoindevkit.Psbt
12 | import org.bitcoindevkit.devkitwallet.domain.Wallet
13 | import org.bitcoindevkit.devkitwallet.presentation.viewmodels.mvi.SendScreenAction
14 | import org.bitcoindevkit.devkitwallet.presentation.viewmodels.mvi.TransactionType
15 | import org.bitcoindevkit.devkitwallet.presentation.viewmodels.mvi.TxDataBundle
16 |
17 | private const val TAG = "SendViewModel"
18 |
19 | internal class SendViewModel(private val wallet: Wallet) : ViewModel() {
20 | fun onAction(action: SendScreenAction) {
21 | when (action) {
22 | is SendScreenAction.Broadcast -> broadcast(action.txDataBundle)
23 | }
24 | }
25 |
26 | private fun broadcast(txInfo: TxDataBundle) {
27 | try {
28 | // Create, sign, and broadcast
29 | val psbt: Psbt =
30 | when (txInfo.transactionType) {
31 | TransactionType.STANDARD ->
32 | wallet.createTransaction(
33 | recipientList = txInfo.recipients,
34 | feeRate = FeeRate.fromSatPerVb(txInfo.feeRate),
35 | opReturnMsg = txInfo.opReturnMsg,
36 | )
37 | // TransactionType.SEND_ALL -> Wallet.createSendAllTransaction(recipientList[0].address, FeeRate.fromSatPerVb(feeRate), rbfEnabled, opReturnMsg)
38 | TransactionType.SEND_ALL -> throw NotImplementedError("Send all not implemented")
39 | }
40 | val isSigned = wallet.sign(psbt)
41 | if (isSigned) {
42 | val txid: String = wallet.broadcast(psbt)
43 | Log.i(TAG, "Transaction was broadcast! txid: $txid")
44 | } else {
45 | Log.i(TAG, "Transaction not signed.")
46 | }
47 | } catch (e: Throwable) {
48 | Log.i(TAG, "Broadcast error: ${e.message}")
49 | }
50 | }
51 | }
52 |
--------------------------------------------------------------------------------
/Variant-0.32/app/src/main/java/com/goldenraven/devkitwallet/ui/screens/drawer/RecoveryPhraseScreen.kt:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright 2020-2023 thunderbiscuit and contributors.
3 | * Use of this source code is governed by the Apache 2.0 license that can be found in the ./LICENSE file.
4 | */
5 |
6 | package com.goldenraven.devkitwallet.ui.screens.drawer
7 |
8 | import androidx.compose.foundation.layout.*
9 | import androidx.compose.material3.*
10 | import androidx.compose.runtime.Composable
11 | import androidx.compose.ui.Modifier
12 | import androidx.compose.ui.tooling.preview.Devices
13 | import androidx.compose.ui.tooling.preview.Preview
14 | import androidx.compose.ui.unit.dp
15 | import androidx.navigation.NavController
16 | import androidx.navigation.compose.rememberNavController
17 | import com.goldenraven.devkitwallet.domain.Repository
18 | import com.goldenraven.devkitwallet.ui.Screen
19 | import com.goldenraven.devkitwallet.ui.components.SecondaryScreensAppBar
20 | import com.goldenraven.devkitwallet.ui.theme.DevkitWalletColors
21 | import com.goldenraven.devkitwallet.ui.theme.jetBrainsMonoLight
22 |
23 | @Composable
24 | internal fun RecoveryPhraseScreen(navController: NavController) {
25 |
26 | val seedPhrase: String = Repository.getMnemonic()
27 | val wordList: List = seedPhrase.split(" ")
28 |
29 | Scaffold(
30 | topBar = {
31 | SecondaryScreensAppBar(
32 | title = "Your Recovery Phrase",
33 | navigation = { navController.navigate(Screen.WalletScreen.route) }
34 | )
35 | },
36 | containerColor = DevkitWalletColors.primary
37 | ) { paddingValues ->
38 | Column(
39 | modifier = Modifier
40 | .fillMaxSize()
41 | .padding(paddingValues)
42 | .padding(all = 32.dp)
43 | ) {
44 | wordList.forEachIndexed { index, item ->
45 | Text(
46 | text = "${index + 1}. $item",
47 | modifier = Modifier.weight(weight = 1F),
48 | color = DevkitWalletColors.white,
49 | fontFamily = jetBrainsMonoLight
50 | )
51 | }
52 | }
53 | }
54 | }
55 |
56 | @Preview(device = Devices.PIXEL_4, showBackground = true)
57 | @Composable
58 | internal fun PreviewRecoveryPhraseScreen() {
59 | RecoveryPhraseScreen(rememberNavController())
60 | }
61 |
--------------------------------------------------------------------------------
/Variant-Kyoto/app/src/main/java/org/bitcoindevkit/devkitwallet/domain/BlockchainClientsConfig.kt:
--------------------------------------------------------------------------------
1 | /*
2 | * Copyright 2021-2024 thunderbiscuit and contributors.
3 | * Use of this source code is governed by the Apache 2.0 license that can be found in the ./LICENSE file.
4 | */
5 |
6 | package org.bitcoindevkit.devkitwallet.domain
7 |
8 | import org.bitcoindevkit.Network
9 |
10 | class BlockchainClientsConfig {
11 | private var defaultClient: BlockchainClient? = null
12 | private val allClients: MutableList = mutableListOf()
13 |
14 | fun getClient(): BlockchainClient? {
15 | return defaultClient
16 | }
17 |
18 | fun addClient(client: BlockchainClient, setDefault: Boolean) {
19 | allClients.forEach {
20 | if (it.clientId() == client.clientId()) {
21 | throw IllegalArgumentException(
22 | "Client with url ${client.clientId()} already exists"
23 | )
24 | }
25 | }
26 | if (allClients.size >= 8) throw IllegalArgumentException("Maximum number of clients (8) reached")
27 | allClients.add(client)
28 | if (setDefault) {
29 | defaultClient = client
30 | }
31 | }
32 |
33 | fun setDefaultClient(clientId: String) {
34 | val client = allClients.find { it.clientId() == clientId }
35 | if (client == null) throw IllegalArgumentException("Client with url $clientId not found")
36 | defaultClient = client
37 | }
38 |
39 | companion object {
40 | fun createDefaultConfig(network: Network): BlockchainClientsConfig {
41 | val config = BlockchainClientsConfig()
42 | when (network) {
43 | Network.REGTEST -> {
44 | config.addClient(EsploraClient("http://10.0.2.2:3002"), true)
45 | }
46 | Network.TESTNET -> {
47 | config.addClient(ElectrumClient("ssl://electrum.blockstream.info:60002"), true)
48 | }
49 | Network.TESTNET4 -> throw IllegalArgumentException("This app does not support testnet 4 yet")
50 | Network.SIGNET -> {
51 | config.addClient(ElectrumClient("ssl://mempool.space:60602"), true)
52 | }
53 | Network.BITCOIN -> throw IllegalArgumentException("This app does not support mainnet")
54 | }
55 | return config
56 | }
57 | }
58 | }
59 |
--------------------------------------------------------------------------------