├── .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 | --------------------------------------------------------------------------------