From 46b4b59ddf21186d4706822b06d4de780f1d5161 Mon Sep 17 00:00:00 2001 From: Brandon McAnsh Date: Fri, 23 Oct 2026 15:42:10 -0400 Subject: [PATCH 01/11] build(kmp): move the leaf libraries to android+jvm Converts network:jwt, currency-math, encryption:keys, datetime and messaging onto flipcash.kmp.app.library and gives encryption:utils a jvmShared source set for its java.*/protobuf helpers. Adds :libs:parcelable, a common Parcelable/@Parcelize stand-in that typealiases android.os.Parcelable on Android, so parcelable models can live in commonMain. currency-math's test fixtures become :libs:currency-math:test-fixtures, and the desktop build reads the curve tables from the classpath. --- .../DiscreteBondingCurveInitializer.kt | 1 + apps/flipcash/shared/tokens/build.gradle.kts | 2 +- .../kotlin/KmpAppLibraryConventionPlugin.kt | 12 +++- gradle/libs.versions.toml | 10 +++ libs/currency-math/build.gradle.kts | 58 +++++++++++------- .../assets/curve.json | 0 .../assets/curve_fractional.json | 0 .../curves/DiscreteBondingCurveVectorTest.kt | 0 .../math/ContinuousBondingCurveTests.kt | 0 .../math/DiscreteBondingCurveTests.kt | 0 .../libs/currency/math/EstimationTests.kt | 0 .../math/EstimatorValueExchangeTests.kt | 0 .../flipcash/libs/currency/math/Expects.kt | 0 .../math/loader/ClasspathTableLoader.kt | 0 .../assets/discrete_cumulative_table.bin | Bin .../assets/discrete_pricing_table.bin | Bin .../libs/currency/math/Curves.android.kt | 6 ++ .../internal/loader/AndroidTableLoader.kt | 4 -- .../com/flipcash/libs/currency/math/Curves.kt | 14 +++-- .../flipcash/libs/currency/math/Estimator.kt | 0 .../com/flipcash/libs/currency/math/Units.kt | 0 .../libs/currency/math/internal/BigDecimal.kt | 0 .../libs/currency/math/internal/Constants.kt | 0 .../internal/curves/ContinuousBondingCurve.kt | 2 - .../internal/curves/DiscreteBondingCurve.kt | 0 .../math/internal}/loader/FileTableLoader.kt | 7 +-- .../math/internal/loader/TableByteLoader.kt | 5 ++ .../flipcash/libs/currency/math/Curves.jvm.kt | 6 ++ .../internal/loader/ClasspathTableLoader.kt | 12 ++++ .../currency/math/CurveTestInitializer.kt | 11 ---- .../test-fixtures/build.gradle.kts | 15 +++++ .../currency/math/CurveTestInitializer.kt | 9 +++ libs/datetime/build.gradle.kts | 28 ++++++--- .../kotlin/com/getcode/util/DateUtilsTest.kt | 0 .../com/getcode/util/InstantExtensionsTest.kt | 0 .../kotlin/com/getcode/util/DateUtils.kt | 0 .../kotlin/com/getcode/util/Instant.kt | 0 libs/encryption/keys/build.gradle.kts | 36 ++++++----- .../getcode/solana/keys/AccountMetaTest.kt | 0 .../getcode/solana/keys/KeyInitOrderTest.kt | 0 .../kotlin/com/getcode/solana/keys/KeyTest.kt | 0 .../com/getcode/solana/keys/MintTest.kt | 0 .../com/getcode/solana/keys/PublicKeyTest.kt | 0 .../utils/serializer/SerializerTest.kt | 0 .../com/getcode/solana/keys/AccountMeta.kt | 0 .../kotlin/com/getcode/solana/keys/Key.kt | 0 .../com/getcode/solana/keys/MerkleProof.kt | 0 .../kotlin/com/getcode/solana/keys/Mint.kt | 9 +-- .../com/getcode/solana/keys/PublicKey.kt | 11 ++-- .../kotlin/com/getcode/solana/keys/Types.kt | 0 .../utils/serializer/ByteListSerializer.kt | 7 ++- .../utils/serializer/MintSerializer.kt | 0 .../utils/serializer/PublicKeySerializer.kt | 0 libs/encryption/utils/build.gradle.kts | 19 +++++- .../com/getcode/utils/Base64.android.kt | 11 ++++ .../utils/Ed25519Extensions.android.kt | 6 ++ .../com/getcode/utils/Extensions.android.kt | 48 --------------- .../kotlin/com/getcode/utils/Base64.jvm.kt | 10 +++ .../com/getcode/utils/Extensions.jvmShared.kt | 44 +++++++++++++ libs/messaging/build.gradle.kts | 24 +++++--- .../com/getcode/manager/BottomBarManager.kt | 0 .../com/getcode/manager/TopBarManager.kt | 0 libs/network/jwt/build.gradle.kts | 8 ++- .../com/getcode/network/jwt/JwtProvider.kt | 0 .../getcode/network/jwt/JwtSecuredEndpoint.kt | 0 libs/parcelable/build.gradle.kts | 9 +++ .../getcode/libs/parcelable/ParcelizeTest.kt | 15 +++++ .../libs/parcelable/Parcelable.android.kt | 15 +++++ .../com/getcode/libs/parcelable/Parcelable.kt | 39 ++++++++++++ .../getcode/libs/parcelable/Parcelable.jvm.kt | 13 ++++ services/opencode/build.gradle.kts | 2 +- settings.gradle.kts | 2 + 72 files changed, 378 insertions(+), 152 deletions(-) rename libs/currency-math/src/{androidTest => androidDeviceTest}/assets/curve.json (100%) rename libs/currency-math/src/{androidTest => androidDeviceTest}/assets/curve_fractional.json (100%) rename libs/currency-math/src/{androidTest/java => androidDeviceTest/kotlin}/com/flipcash/libs/currency/math/internal/curves/DiscreteBondingCurveVectorTest.kt (100%) rename libs/currency-math/src/{test/java => androidHostTest/kotlin}/com/flipcash/libs/currency/math/ContinuousBondingCurveTests.kt (100%) rename libs/currency-math/src/{test/java => androidHostTest/kotlin}/com/flipcash/libs/currency/math/DiscreteBondingCurveTests.kt (100%) rename libs/currency-math/src/{test/java => androidHostTest/kotlin}/com/flipcash/libs/currency/math/EstimationTests.kt (100%) rename libs/currency-math/src/{test/java => androidHostTest/kotlin}/com/flipcash/libs/currency/math/EstimatorValueExchangeTests.kt (100%) rename libs/currency-math/src/{test/java => androidHostTest/kotlin}/com/flipcash/libs/currency/math/Expects.kt (100%) rename libs/currency-math/src/{test/java => androidHostTest/kotlin}/com/flipcash/libs/currency/math/loader/ClasspathTableLoader.kt (100%) rename libs/currency-math/src/{main => androidMain}/assets/discrete_cumulative_table.bin (100%) rename libs/currency-math/src/{main => androidMain}/assets/discrete_pricing_table.bin (100%) create mode 100644 libs/currency-math/src/androidMain/kotlin/com/flipcash/libs/currency/math/Curves.android.kt rename libs/currency-math/src/{main => androidMain}/kotlin/com/flipcash/libs/currency/math/internal/loader/AndroidTableLoader.kt (89%) rename libs/currency-math/src/{main => commonMain}/kotlin/com/flipcash/libs/currency/math/Curves.kt (71%) rename libs/currency-math/src/{main => commonMain}/kotlin/com/flipcash/libs/currency/math/Estimator.kt (100%) rename libs/currency-math/src/{main => commonMain}/kotlin/com/flipcash/libs/currency/math/Units.kt (100%) rename libs/currency-math/src/{main => commonMain}/kotlin/com/flipcash/libs/currency/math/internal/BigDecimal.kt (100%) rename libs/currency-math/src/{main => commonMain}/kotlin/com/flipcash/libs/currency/math/internal/Constants.kt (100%) rename libs/currency-math/src/{main => commonMain}/kotlin/com/flipcash/libs/currency/math/internal/curves/ContinuousBondingCurve.kt (99%) rename libs/currency-math/src/{main => commonMain}/kotlin/com/flipcash/libs/currency/math/internal/curves/DiscreteBondingCurve.kt (100%) rename libs/currency-math/src/{testFixtures/kotlin/com/flipcash/libs/currency/math => commonMain/kotlin/com/flipcash/libs/currency/math/internal}/loader/FileTableLoader.kt (81%) create mode 100644 libs/currency-math/src/commonMain/kotlin/com/flipcash/libs/currency/math/internal/loader/TableByteLoader.kt create mode 100644 libs/currency-math/src/jvmMain/kotlin/com/flipcash/libs/currency/math/Curves.jvm.kt create mode 100644 libs/currency-math/src/jvmMain/kotlin/com/flipcash/libs/currency/math/internal/loader/ClasspathTableLoader.kt delete mode 100644 libs/currency-math/src/testFixtures/kotlin/com/flipcash/libs/currency/math/CurveTestInitializer.kt create mode 100644 libs/currency-math/test-fixtures/build.gradle.kts create mode 100644 libs/currency-math/test-fixtures/src/commonMain/kotlin/com/flipcash/libs/currency/math/CurveTestInitializer.kt rename libs/datetime/src/{test => androidHostTest}/kotlin/com/getcode/util/DateUtilsTest.kt (100%) rename libs/datetime/src/{test => androidHostTest}/kotlin/com/getcode/util/InstantExtensionsTest.kt (100%) rename libs/datetime/src/{main => androidMain}/kotlin/com/getcode/util/DateUtils.kt (100%) rename libs/datetime/src/{main => commonMain}/kotlin/com/getcode/util/Instant.kt (100%) rename libs/encryption/keys/src/{test => androidHostTest}/kotlin/com/getcode/solana/keys/AccountMetaTest.kt (100%) rename libs/encryption/keys/src/{test => androidHostTest}/kotlin/com/getcode/solana/keys/KeyInitOrderTest.kt (100%) rename libs/encryption/keys/src/{test => androidHostTest}/kotlin/com/getcode/solana/keys/KeyTest.kt (100%) rename libs/encryption/keys/src/{test => androidHostTest}/kotlin/com/getcode/solana/keys/MintTest.kt (100%) rename libs/encryption/keys/src/{test => androidHostTest}/kotlin/com/getcode/solana/keys/PublicKeyTest.kt (100%) rename libs/encryption/keys/src/{test => androidHostTest}/kotlin/com/getcode/utils/serializer/SerializerTest.kt (100%) rename libs/encryption/keys/src/{main => commonMain}/kotlin/com/getcode/solana/keys/AccountMeta.kt (100%) rename libs/encryption/keys/src/{main => commonMain}/kotlin/com/getcode/solana/keys/Key.kt (100%) rename libs/encryption/keys/src/{main => commonMain}/kotlin/com/getcode/solana/keys/MerkleProof.kt (100%) rename libs/encryption/keys/src/{main => commonMain}/kotlin/com/getcode/solana/keys/Mint.kt (63%) rename libs/encryption/keys/src/{main => commonMain}/kotlin/com/getcode/solana/keys/PublicKey.kt (83%) rename libs/encryption/keys/src/{main => commonMain}/kotlin/com/getcode/solana/keys/Types.kt (100%) rename libs/encryption/keys/src/{main => commonMain}/kotlin/com/getcode/utils/serializer/ByteListSerializer.kt (76%) rename libs/encryption/keys/src/{main => commonMain}/kotlin/com/getcode/utils/serializer/MintSerializer.kt (100%) rename libs/encryption/keys/src/{main => commonMain}/kotlin/com/getcode/utils/serializer/PublicKeySerializer.kt (100%) create mode 100644 libs/encryption/utils/src/androidMain/kotlin/com/getcode/utils/Base64.android.kt create mode 100644 libs/encryption/utils/src/androidMain/kotlin/com/getcode/utils/Ed25519Extensions.android.kt delete mode 100644 libs/encryption/utils/src/androidMain/kotlin/com/getcode/utils/Extensions.android.kt create mode 100644 libs/encryption/utils/src/jvmMain/kotlin/com/getcode/utils/Base64.jvm.kt create mode 100644 libs/encryption/utils/src/jvmSharedMain/kotlin/com/getcode/utils/Extensions.jvmShared.kt rename libs/messaging/src/{main => androidMain}/kotlin/com/getcode/manager/BottomBarManager.kt (100%) rename libs/messaging/src/{main => commonMain}/kotlin/com/getcode/manager/TopBarManager.kt (100%) rename libs/network/jwt/src/{main => commonMain}/kotlin/com/getcode/network/jwt/JwtProvider.kt (100%) rename libs/network/jwt/src/{main => commonMain}/kotlin/com/getcode/network/jwt/JwtSecuredEndpoint.kt (100%) create mode 100644 libs/parcelable/build.gradle.kts create mode 100644 libs/parcelable/src/androidHostTest/kotlin/com/getcode/libs/parcelable/ParcelizeTest.kt create mode 100644 libs/parcelable/src/androidMain/kotlin/com/getcode/libs/parcelable/Parcelable.android.kt create mode 100644 libs/parcelable/src/commonMain/kotlin/com/getcode/libs/parcelable/Parcelable.kt create mode 100644 libs/parcelable/src/jvmMain/kotlin/com/getcode/libs/parcelable/Parcelable.jvm.kt diff --git a/apps/flipcash/app/src/main/kotlin/com/flipcash/app/internal/startup/DiscreteBondingCurveInitializer.kt b/apps/flipcash/app/src/main/kotlin/com/flipcash/app/internal/startup/DiscreteBondingCurveInitializer.kt index f030a36544..a7dbe4dc64 100644 --- a/apps/flipcash/app/src/main/kotlin/com/flipcash/app/internal/startup/DiscreteBondingCurveInitializer.kt +++ b/apps/flipcash/app/src/main/kotlin/com/flipcash/app/internal/startup/DiscreteBondingCurveInitializer.kt @@ -3,6 +3,7 @@ package com.flipcash.app.internal.startup import android.content.Context import androidx.startup.Initializer import com.flipcash.libs.currency.math.Curves +import com.flipcash.libs.currency.math.initialize /** * Preloads the discrete bonding curve tables. diff --git a/apps/flipcash/shared/tokens/build.gradle.kts b/apps/flipcash/shared/tokens/build.gradle.kts index 9f65fd8f5f..0c9906a86b 100644 --- a/apps/flipcash/shared/tokens/build.gradle.kts +++ b/apps/flipcash/shared/tokens/build.gradle.kts @@ -10,7 +10,7 @@ dependencies { testImplementation(kotlin("test")) testImplementation(libs.bundles.unit.testing) testImplementation(testFixtures(project(":ui:resources"))) - testImplementation(testFixtures(project(":libs:currency-math"))) + testImplementation(project(":libs:currency-math:test-fixtures")) testImplementation(libs.mockito.kotlin) api(project(":apps:flipcash:shared:tokens:core")) diff --git a/build-logic/convention/src/main/kotlin/KmpAppLibraryConventionPlugin.kt b/build-logic/convention/src/main/kotlin/KmpAppLibraryConventionPlugin.kt index dd47da8950..f73a5d2110 100644 --- a/build-logic/convention/src/main/kotlin/KmpAppLibraryConventionPlugin.kt +++ b/build-logic/convention/src/main/kotlin/KmpAppLibraryConventionPlugin.kt @@ -23,6 +23,8 @@ import org.jetbrains.kotlin.gradle.dsl.KotlinMultiplatformExtension * - `org.jetbrains.kotlin.multiplatform` * - `com.android.kotlin.multiplatform.library` * - `org.jetbrains.kotlin.plugin.serialization` + * - `org.jetbrains.kotlin.plugin.parcelize` -- generates Android parcel code for classes marked + * with `com.getcode.libs.parcelable.Parcelize`, the common stand-in in `:libs:parcelable` * * and declares: * - `android` -- compileSdk and minSdk from the version catalog, host tests enabled with the same @@ -52,6 +54,7 @@ class KmpAppLibraryConventionPlugin : Plugin { apply("org.jetbrains.kotlin.multiplatform") apply("com.android.kotlin.multiplatform.library") apply("org.jetbrains.kotlin.plugin.serialization") + apply("org.jetbrains.kotlin.plugin.parcelize") } val libs = extensions.getByType().named("libs") @@ -91,9 +94,14 @@ class KmpAppLibraryConventionPlugin : Plugin { optIn.addAll( "kotlin.time.ExperimentalTime", "kotlin.ExperimentalUnsignedTypes", - "kotlin.RequiresOptIn" + "kotlin.RequiresOptIn", + "kotlin.ExperimentalMultiplatform" + ) + freeCompilerArgs.addAll( + "-Xexpect-actual-classes", + "-P", + "plugin:org.jetbrains.kotlin.parcelize:additionalAnnotation=com.getcode.libs.parcelable.Parcelize" ) - freeCompilerArgs.add("-Xexpect-actual-classes") } sourceSets.named("commonMain") { diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 55493d0055..1b6dc7816c 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -45,6 +45,7 @@ compose-coil = "3.6.3" hilt = "2.59.2" hilt-jetpack = "1.4.0" +compose-multiplatform = "1.12.1" okhttp = "5.5.0" retrofit = "3.0.0" kin-sdk = "2.1.2" @@ -170,6 +171,9 @@ coil3-network = { module = "io.coil-kt.coil3:coil-network-okhttp", version.ref = # Hilt hilt-android = { module = "com.google.dagger:hilt-android", version.ref = "hilt" } +# Plain JVM jars: @Module/@Provides/@Binds and @InstallIn/SingletonComponent compile in a KMP commonMain. +dagger = { module = "com.google.dagger:dagger", version.ref = "hilt" } +hilt-core = { module = "com.google.dagger:hilt-core", version.ref = "hilt" } hilt-worker = { module = "androidx.hilt:hilt-work", version.ref = "hilt-jetpack" } hilt-android-compiler = { module = "com.google.dagger:hilt-android-compiler", version.ref = "hilt" } hilt-compiler = { module = "androidx.hilt:hilt-compiler", version.ref = "hilt-jetpack" } @@ -330,10 +334,16 @@ androidx-ui-tooling-preview = { group = "androidx.compose.ui", name = "ui-toolin androidx-ui-tooling = { group = "androidx.compose.ui", name = "ui-tooling", version.ref = "uiTooling" } androidx-foundation-layout = { group = "androidx.compose.foundation", name = "foundation-layout", version.ref = "foundationLayout" } +jetbrains-compose-runtime = { module = "org.jetbrains.compose.runtime:runtime", version.ref = "compose-multiplatform" } +# On Android these resolve to the androidx artifacts at the version the Compose BOM pins. +jetbrains-compose-foundation = { module = "org.jetbrains.compose.foundation:foundation", version.ref = "compose-multiplatform" } +jetbrains-compose-ui = { module = "org.jetbrains.compose.ui:ui", version.ref = "compose-multiplatform" } + [bundles] compose = ["compose-ui", "compose-foundation", "compose-material", "compose-material-icons-extended", "compose-animation", "compose-activities"] hilt = ["hilt-android", "javax-inject"] hilt-compiler = ["hilt-android-compiler", "hilt-compiler"] +hilt-common = ["javax-inject", "dagger", "hilt-core"] haze = ["haze", "haze-blur", "haze-materials"] room = ["androidx-room-runtime", "androidx-room-ktx", "androidx-room-paging"] firebase = ["firebase-messaging", "firebase-installations"] diff --git a/libs/currency-math/build.gradle.kts b/libs/currency-math/build.gradle.kts index 83886bf25b..89c2dc44ea 100644 --- a/libs/currency-math/build.gradle.kts +++ b/libs/currency-math/build.gradle.kts @@ -1,32 +1,45 @@ plugins { - alias(libs.plugins.flipcash.android.library) - id("com.google.devtools.ksp") - id("org.jetbrains.kotlin.plugin.parcelize") + alias(libs.plugins.flipcash.kmp.app.library) } -android { - namespace = "${Gradle.codeNamespace}.libs.currency.math" - testFixtures { - enable = true +kotlin { + android { + namespace = "${Gradle.codeNamespace}.libs.currency.math" + withDeviceTestBuilder {}.configure { + instrumentationRunner = "androidx.test.runner.AndroidJUnitRunner" + } } -} - -dependencies { - androidTestImplementation(libs.androidx.junit) - androidTestImplementation(libs.junit) - androidTestImplementation(libs.androidx.test.runner) - - implementation(libs.bundles.hilt) - implementation(project(":libs:currency-math:discrete-curve")) - testFixturesImplementation(libs.kotlinx.coroutines.core) - - testImplementation(kotlin("test")) + sourceSets { + commonMain.dependencies { + implementation(libs.javax.inject) + implementation(project(":libs:currency-math:discrete-curve")) + } + androidMain.dependencies { + implementation(libs.bundles.hilt) + } + // The desktop build ships the same table files Android packs as assets. + jvmMain { + resources.srcDir("src/androidMain/assets") + } + getByName("androidHostTest").dependencies { + implementation(kotlin("test")) + implementation(project(":libs:currency-math:test-fixtures")) + } + getByName("androidDeviceTest").dependencies { + implementation(libs.androidx.junit) + implementation(libs.junit) + implementation(libs.androidx.test.runner) + } + jvmTest.dependencies { + implementation(kotlin("test")) + } + } } val generateCurveTables by tasks.registering(GenerateCurveTables::class) { rustTableUrl.set("https://raw.githubusercontent.com/code-payments/flipcash-program/refs/heads/main/api/src/table.rs") - outputDir.set(layout.projectDirectory.dir("src/main/assets")) + outputDir.set(layout.projectDirectory.dir("src/androidMain/assets")) forceViaGradleProperty.set(providers.gradleProperty("forceCurveTables").map { true }.orElse(false)) // Always regenerate (useful for CI or development) @@ -34,7 +47,8 @@ val generateCurveTables by tasks.registering(GenerateCurveTables::class) { // forceRegenerate.set(true) } -// Make sure tables are generated before assets are merged -tasks.named("preBuild") { +// Make sure tables are generated before either platform packs them. The KMP android target has no +// preBuild task, so hook the compilations instead. +tasks.matching { it.name == "compileAndroidMain" || it.name == "jvmProcessResources" }.configureEach { dependsOn(generateCurveTables) } diff --git a/libs/currency-math/src/androidTest/assets/curve.json b/libs/currency-math/src/androidDeviceTest/assets/curve.json similarity index 100% rename from libs/currency-math/src/androidTest/assets/curve.json rename to libs/currency-math/src/androidDeviceTest/assets/curve.json diff --git a/libs/currency-math/src/androidTest/assets/curve_fractional.json b/libs/currency-math/src/androidDeviceTest/assets/curve_fractional.json similarity index 100% rename from libs/currency-math/src/androidTest/assets/curve_fractional.json rename to libs/currency-math/src/androidDeviceTest/assets/curve_fractional.json diff --git a/libs/currency-math/src/androidTest/java/com/flipcash/libs/currency/math/internal/curves/DiscreteBondingCurveVectorTest.kt b/libs/currency-math/src/androidDeviceTest/kotlin/com/flipcash/libs/currency/math/internal/curves/DiscreteBondingCurveVectorTest.kt similarity index 100% rename from libs/currency-math/src/androidTest/java/com/flipcash/libs/currency/math/internal/curves/DiscreteBondingCurveVectorTest.kt rename to libs/currency-math/src/androidDeviceTest/kotlin/com/flipcash/libs/currency/math/internal/curves/DiscreteBondingCurveVectorTest.kt diff --git a/libs/currency-math/src/test/java/com/flipcash/libs/currency/math/ContinuousBondingCurveTests.kt b/libs/currency-math/src/androidHostTest/kotlin/com/flipcash/libs/currency/math/ContinuousBondingCurveTests.kt similarity index 100% rename from libs/currency-math/src/test/java/com/flipcash/libs/currency/math/ContinuousBondingCurveTests.kt rename to libs/currency-math/src/androidHostTest/kotlin/com/flipcash/libs/currency/math/ContinuousBondingCurveTests.kt diff --git a/libs/currency-math/src/test/java/com/flipcash/libs/currency/math/DiscreteBondingCurveTests.kt b/libs/currency-math/src/androidHostTest/kotlin/com/flipcash/libs/currency/math/DiscreteBondingCurveTests.kt similarity index 100% rename from libs/currency-math/src/test/java/com/flipcash/libs/currency/math/DiscreteBondingCurveTests.kt rename to libs/currency-math/src/androidHostTest/kotlin/com/flipcash/libs/currency/math/DiscreteBondingCurveTests.kt diff --git a/libs/currency-math/src/test/java/com/flipcash/libs/currency/math/EstimationTests.kt b/libs/currency-math/src/androidHostTest/kotlin/com/flipcash/libs/currency/math/EstimationTests.kt similarity index 100% rename from libs/currency-math/src/test/java/com/flipcash/libs/currency/math/EstimationTests.kt rename to libs/currency-math/src/androidHostTest/kotlin/com/flipcash/libs/currency/math/EstimationTests.kt diff --git a/libs/currency-math/src/test/java/com/flipcash/libs/currency/math/EstimatorValueExchangeTests.kt b/libs/currency-math/src/androidHostTest/kotlin/com/flipcash/libs/currency/math/EstimatorValueExchangeTests.kt similarity index 100% rename from libs/currency-math/src/test/java/com/flipcash/libs/currency/math/EstimatorValueExchangeTests.kt rename to libs/currency-math/src/androidHostTest/kotlin/com/flipcash/libs/currency/math/EstimatorValueExchangeTests.kt diff --git a/libs/currency-math/src/test/java/com/flipcash/libs/currency/math/Expects.kt b/libs/currency-math/src/androidHostTest/kotlin/com/flipcash/libs/currency/math/Expects.kt similarity index 100% rename from libs/currency-math/src/test/java/com/flipcash/libs/currency/math/Expects.kt rename to libs/currency-math/src/androidHostTest/kotlin/com/flipcash/libs/currency/math/Expects.kt diff --git a/libs/currency-math/src/test/java/com/flipcash/libs/currency/math/loader/ClasspathTableLoader.kt b/libs/currency-math/src/androidHostTest/kotlin/com/flipcash/libs/currency/math/loader/ClasspathTableLoader.kt similarity index 100% rename from libs/currency-math/src/test/java/com/flipcash/libs/currency/math/loader/ClasspathTableLoader.kt rename to libs/currency-math/src/androidHostTest/kotlin/com/flipcash/libs/currency/math/loader/ClasspathTableLoader.kt diff --git a/libs/currency-math/src/main/assets/discrete_cumulative_table.bin b/libs/currency-math/src/androidMain/assets/discrete_cumulative_table.bin similarity index 100% rename from libs/currency-math/src/main/assets/discrete_cumulative_table.bin rename to libs/currency-math/src/androidMain/assets/discrete_cumulative_table.bin diff --git a/libs/currency-math/src/main/assets/discrete_pricing_table.bin b/libs/currency-math/src/androidMain/assets/discrete_pricing_table.bin similarity index 100% rename from libs/currency-math/src/main/assets/discrete_pricing_table.bin rename to libs/currency-math/src/androidMain/assets/discrete_pricing_table.bin diff --git a/libs/currency-math/src/androidMain/kotlin/com/flipcash/libs/currency/math/Curves.android.kt b/libs/currency-math/src/androidMain/kotlin/com/flipcash/libs/currency/math/Curves.android.kt new file mode 100644 index 0000000000..2315d289b2 --- /dev/null +++ b/libs/currency-math/src/androidMain/kotlin/com/flipcash/libs/currency/math/Curves.android.kt @@ -0,0 +1,6 @@ +package com.flipcash.libs.currency.math + +import android.content.Context +import com.flipcash.libs.currency.math.internal.loader.AndroidTableLoader + +suspend fun Curves.initialize(context: Context) = initialize(AndroidTableLoader(context)) diff --git a/libs/currency-math/src/main/kotlin/com/flipcash/libs/currency/math/internal/loader/AndroidTableLoader.kt b/libs/currency-math/src/androidMain/kotlin/com/flipcash/libs/currency/math/internal/loader/AndroidTableLoader.kt similarity index 89% rename from libs/currency-math/src/main/kotlin/com/flipcash/libs/currency/math/internal/loader/AndroidTableLoader.kt rename to libs/currency-math/src/androidMain/kotlin/com/flipcash/libs/currency/math/internal/loader/AndroidTableLoader.kt index 008ed618dd..cf1f4665fb 100644 --- a/libs/currency-math/src/main/kotlin/com/flipcash/libs/currency/math/internal/loader/AndroidTableLoader.kt +++ b/libs/currency-math/src/androidMain/kotlin/com/flipcash/libs/currency/math/internal/loader/AndroidTableLoader.kt @@ -10,10 +10,6 @@ import kotlinx.coroutines.withContext * [AndroidTableLoader]) so the JVM-only unit test suite -- which has no Android [Context] -- can * satisfy the same initialization path via `FileTableLoader`/`ClasspathTableLoader`. */ -internal interface TableByteLoader { - suspend fun loadTableBytes(name: String): ByteArray -} - internal class AndroidTableLoader(private val context: Context) : TableByteLoader { override suspend fun loadTableBytes(name: String): ByteArray = withContext(Dispatchers.IO) { context.assets.open("$name.bin").use { it.readBytes() } diff --git a/libs/currency-math/src/main/kotlin/com/flipcash/libs/currency/math/Curves.kt b/libs/currency-math/src/commonMain/kotlin/com/flipcash/libs/currency/math/Curves.kt similarity index 71% rename from libs/currency-math/src/main/kotlin/com/flipcash/libs/currency/math/Curves.kt rename to libs/currency-math/src/commonMain/kotlin/com/flipcash/libs/currency/math/Curves.kt index 725543ff15..a95bdcc871 100644 --- a/libs/currency-math/src/main/kotlin/com/flipcash/libs/currency/math/Curves.kt +++ b/libs/currency-math/src/commonMain/kotlin/com/flipcash/libs/currency/math/Curves.kt @@ -1,9 +1,9 @@ package com.flipcash.libs.currency.math -import android.content.Context import com.flipcash.libs.currency.math.internal.DefaultMintMaxTokenSupply import com.flipcash.libs.currency.math.internal.curves.DiscreteBondingCurve -import com.flipcash.libs.currency.math.internal.loader.AndroidTableLoader +import com.flipcash.libs.currency.math.internal.loader.FileTableLoader +import com.flipcash.libs.currency.math.internal.loader.TableByteLoader import java.math.BigDecimal import java.math.MathContext import java.math.RoundingMode @@ -40,10 +40,16 @@ interface BondingCurve { fun formattedTable(): String } +/** + * Loads the discrete curve's tables. Each platform adds its own `initialize` overload that picks the + * table source: the APK's assets on Android, the classpath on the desktop JVM. + */ object Curves { - suspend fun initialize(context: Context) { + internal suspend fun initialize(tableLoader: TableByteLoader) { // only discrete needs to be initialized - val tableLoader = AndroidTableLoader(context) DiscreteBondingCurve.initialize(tableLoader) } + + /** For host tests: reads the tables from this repo's source tree, found by walking up from the working directory. */ + suspend fun initializeFromSourceTree() = initialize(FileTableLoader()) } \ No newline at end of file diff --git a/libs/currency-math/src/main/kotlin/com/flipcash/libs/currency/math/Estimator.kt b/libs/currency-math/src/commonMain/kotlin/com/flipcash/libs/currency/math/Estimator.kt similarity index 100% rename from libs/currency-math/src/main/kotlin/com/flipcash/libs/currency/math/Estimator.kt rename to libs/currency-math/src/commonMain/kotlin/com/flipcash/libs/currency/math/Estimator.kt diff --git a/libs/currency-math/src/main/kotlin/com/flipcash/libs/currency/math/Units.kt b/libs/currency-math/src/commonMain/kotlin/com/flipcash/libs/currency/math/Units.kt similarity index 100% rename from libs/currency-math/src/main/kotlin/com/flipcash/libs/currency/math/Units.kt rename to libs/currency-math/src/commonMain/kotlin/com/flipcash/libs/currency/math/Units.kt diff --git a/libs/currency-math/src/main/kotlin/com/flipcash/libs/currency/math/internal/BigDecimal.kt b/libs/currency-math/src/commonMain/kotlin/com/flipcash/libs/currency/math/internal/BigDecimal.kt similarity index 100% rename from libs/currency-math/src/main/kotlin/com/flipcash/libs/currency/math/internal/BigDecimal.kt rename to libs/currency-math/src/commonMain/kotlin/com/flipcash/libs/currency/math/internal/BigDecimal.kt diff --git a/libs/currency-math/src/main/kotlin/com/flipcash/libs/currency/math/internal/Constants.kt b/libs/currency-math/src/commonMain/kotlin/com/flipcash/libs/currency/math/internal/Constants.kt similarity index 100% rename from libs/currency-math/src/main/kotlin/com/flipcash/libs/currency/math/internal/Constants.kt rename to libs/currency-math/src/commonMain/kotlin/com/flipcash/libs/currency/math/internal/Constants.kt diff --git a/libs/currency-math/src/main/kotlin/com/flipcash/libs/currency/math/internal/curves/ContinuousBondingCurve.kt b/libs/currency-math/src/commonMain/kotlin/com/flipcash/libs/currency/math/internal/curves/ContinuousBondingCurve.kt similarity index 99% rename from libs/currency-math/src/main/kotlin/com/flipcash/libs/currency/math/internal/curves/ContinuousBondingCurve.kt rename to libs/currency-math/src/commonMain/kotlin/com/flipcash/libs/currency/math/internal/curves/ContinuousBondingCurve.kt index f6f1b81754..75cd85dce0 100644 --- a/libs/currency-math/src/main/kotlin/com/flipcash/libs/currency/math/internal/curves/ContinuousBondingCurve.kt +++ b/libs/currency-math/src/commonMain/kotlin/com/flipcash/libs/currency/math/internal/curves/ContinuousBondingCurve.kt @@ -1,6 +1,5 @@ package com.flipcash.libs.currency.math.internal.curves -import android.annotation.SuppressLint import com.flipcash.libs.currency.math.BondingCurve import com.flipcash.libs.currency.math.Valuation import com.flipcash.libs.currency.math.formatter @@ -14,7 +13,6 @@ private val CURVE_A = BigDecimal("11400.230149967394933471") private val CURVE_B = BigDecimal("0.000000877175273521") private val CURVE_C = CURVE_B -@SuppressLint("VisibleForTests") internal class ContinuousBondingCurve( val a: BigDecimal, val b: BigDecimal, diff --git a/libs/currency-math/src/main/kotlin/com/flipcash/libs/currency/math/internal/curves/DiscreteBondingCurve.kt b/libs/currency-math/src/commonMain/kotlin/com/flipcash/libs/currency/math/internal/curves/DiscreteBondingCurve.kt similarity index 100% rename from libs/currency-math/src/main/kotlin/com/flipcash/libs/currency/math/internal/curves/DiscreteBondingCurve.kt rename to libs/currency-math/src/commonMain/kotlin/com/flipcash/libs/currency/math/internal/curves/DiscreteBondingCurve.kt diff --git a/libs/currency-math/src/testFixtures/kotlin/com/flipcash/libs/currency/math/loader/FileTableLoader.kt b/libs/currency-math/src/commonMain/kotlin/com/flipcash/libs/currency/math/internal/loader/FileTableLoader.kt similarity index 81% rename from libs/currency-math/src/testFixtures/kotlin/com/flipcash/libs/currency/math/loader/FileTableLoader.kt rename to libs/currency-math/src/commonMain/kotlin/com/flipcash/libs/currency/math/internal/loader/FileTableLoader.kt index c62f05d9c6..7d27d8cbef 100644 --- a/libs/currency-math/src/testFixtures/kotlin/com/flipcash/libs/currency/math/loader/FileTableLoader.kt +++ b/libs/currency-math/src/commonMain/kotlin/com/flipcash/libs/currency/math/internal/loader/FileTableLoader.kt @@ -1,16 +1,15 @@ -package com.flipcash.libs.currency.math.loader +package com.flipcash.libs.currency.math.internal.loader -import com.flipcash.libs.currency.math.internal.loader.TableByteLoader import java.io.File -class FileTableLoader(private val assetsDir: File) : TableByteLoader { +internal class FileTableLoader(private val assetsDir: File) : TableByteLoader { constructor() : this(resolveAssetsDir()) companion object { private fun resolveAssetsDir(): File { val projectRoot = findProjectRoot() - return File(projectRoot, "libs/currency-math/src/main/assets") + return File(projectRoot, "libs/currency-math/src/androidMain/assets") } private fun findProjectRoot(): File { diff --git a/libs/currency-math/src/commonMain/kotlin/com/flipcash/libs/currency/math/internal/loader/TableByteLoader.kt b/libs/currency-math/src/commonMain/kotlin/com/flipcash/libs/currency/math/internal/loader/TableByteLoader.kt new file mode 100644 index 0000000000..16e1c043e1 --- /dev/null +++ b/libs/currency-math/src/commonMain/kotlin/com/flipcash/libs/currency/math/internal/loader/TableByteLoader.kt @@ -0,0 +1,5 @@ +package com.flipcash.libs.currency.math.internal.loader + +internal interface TableByteLoader { + suspend fun loadTableBytes(name: String): ByteArray +} diff --git a/libs/currency-math/src/jvmMain/kotlin/com/flipcash/libs/currency/math/Curves.jvm.kt b/libs/currency-math/src/jvmMain/kotlin/com/flipcash/libs/currency/math/Curves.jvm.kt new file mode 100644 index 0000000000..4fb1c18631 --- /dev/null +++ b/libs/currency-math/src/jvmMain/kotlin/com/flipcash/libs/currency/math/Curves.jvm.kt @@ -0,0 +1,6 @@ +package com.flipcash.libs.currency.math + +import com.flipcash.libs.currency.math.internal.loader.ClasspathTableLoader + +/** Reads the tables the desktop build packs as JVM resources (the same files Android ships as assets). */ +suspend fun Curves.initialize() = initialize(ClasspathTableLoader()) diff --git a/libs/currency-math/src/jvmMain/kotlin/com/flipcash/libs/currency/math/internal/loader/ClasspathTableLoader.kt b/libs/currency-math/src/jvmMain/kotlin/com/flipcash/libs/currency/math/internal/loader/ClasspathTableLoader.kt new file mode 100644 index 0000000000..7c18f3f1ad --- /dev/null +++ b/libs/currency-math/src/jvmMain/kotlin/com/flipcash/libs/currency/math/internal/loader/ClasspathTableLoader.kt @@ -0,0 +1,12 @@ +package com.flipcash.libs.currency.math.internal.loader + +import kotlinx.coroutines.Dispatchers +import kotlinx.coroutines.withContext + +internal class ClasspathTableLoader : TableByteLoader { + override suspend fun loadTableBytes(name: String): ByteArray = withContext(Dispatchers.IO) { + val stream = ClasspathTableLoader::class.java.getResourceAsStream("/$name.bin") + ?: error("Missing curve table $name.bin on the classpath") + stream.use { it.readBytes() } + } +} diff --git a/libs/currency-math/src/testFixtures/kotlin/com/flipcash/libs/currency/math/CurveTestInitializer.kt b/libs/currency-math/src/testFixtures/kotlin/com/flipcash/libs/currency/math/CurveTestInitializer.kt deleted file mode 100644 index 6a23027ed6..0000000000 --- a/libs/currency-math/src/testFixtures/kotlin/com/flipcash/libs/currency/math/CurveTestInitializer.kt +++ /dev/null @@ -1,11 +0,0 @@ -package com.flipcash.libs.currency.math - -import com.flipcash.libs.currency.math.internal.curves.DiscreteBondingCurve -import com.flipcash.libs.currency.math.loader.FileTableLoader -import kotlinx.coroutines.runBlocking - -object CurveTestInitializer { - fun initialize() { - runBlocking { DiscreteBondingCurve.initialize(FileTableLoader()) } - } -} diff --git a/libs/currency-math/test-fixtures/build.gradle.kts b/libs/currency-math/test-fixtures/build.gradle.kts new file mode 100644 index 0000000000..ba32e5c763 --- /dev/null +++ b/libs/currency-math/test-fixtures/build.gradle.kts @@ -0,0 +1,15 @@ +plugins { + alias(libs.plugins.flipcash.kmp.app.library) +} + +kotlin { + android { + namespace = "${Gradle.codeNamespace}.libs.currency.math.testfixtures" + } + + sourceSets { + commonMain.dependencies { + api(project(":libs:currency-math")) + } + } +} diff --git a/libs/currency-math/test-fixtures/src/commonMain/kotlin/com/flipcash/libs/currency/math/CurveTestInitializer.kt b/libs/currency-math/test-fixtures/src/commonMain/kotlin/com/flipcash/libs/currency/math/CurveTestInitializer.kt new file mode 100644 index 0000000000..1a64c18ef3 --- /dev/null +++ b/libs/currency-math/test-fixtures/src/commonMain/kotlin/com/flipcash/libs/currency/math/CurveTestInitializer.kt @@ -0,0 +1,9 @@ +package com.flipcash.libs.currency.math + +import kotlinx.coroutines.runBlocking + +object CurveTestInitializer { + fun initialize() { + runBlocking { Curves.initializeFromSourceTree() } + } +} diff --git a/libs/datetime/build.gradle.kts b/libs/datetime/build.gradle.kts index b5b2253720..74235dd8d5 100644 --- a/libs/datetime/build.gradle.kts +++ b/libs/datetime/build.gradle.kts @@ -1,14 +1,24 @@ plugins { - alias(libs.plugins.flipcash.android.library.compose) + alias(libs.plugins.flipcash.kmp.app.library) + alias(libs.plugins.compose.compiler) } -android { - namespace = "${Gradle.codeNamespace}.util.datetime" -} - -dependencies { - api(libs.kotlinx.datetime) +kotlin { + android { + namespace = "${Gradle.codeNamespace}.util.datetime" + } - testImplementation(kotlin("test")) - testImplementation(libs.robolectric) + sourceSets { + commonMain.dependencies { + api(libs.kotlinx.datetime) + implementation(libs.jetbrains.compose.runtime) + } + androidMain.dependencies { + implementation(libs.jetbrains.compose.ui) + } + getByName("androidHostTest").dependencies { + implementation(kotlin("test")) + implementation(libs.robolectric) + } + } } diff --git a/libs/datetime/src/test/kotlin/com/getcode/util/DateUtilsTest.kt b/libs/datetime/src/androidHostTest/kotlin/com/getcode/util/DateUtilsTest.kt similarity index 100% rename from libs/datetime/src/test/kotlin/com/getcode/util/DateUtilsTest.kt rename to libs/datetime/src/androidHostTest/kotlin/com/getcode/util/DateUtilsTest.kt diff --git a/libs/datetime/src/test/kotlin/com/getcode/util/InstantExtensionsTest.kt b/libs/datetime/src/androidHostTest/kotlin/com/getcode/util/InstantExtensionsTest.kt similarity index 100% rename from libs/datetime/src/test/kotlin/com/getcode/util/InstantExtensionsTest.kt rename to libs/datetime/src/androidHostTest/kotlin/com/getcode/util/InstantExtensionsTest.kt diff --git a/libs/datetime/src/main/kotlin/com/getcode/util/DateUtils.kt b/libs/datetime/src/androidMain/kotlin/com/getcode/util/DateUtils.kt similarity index 100% rename from libs/datetime/src/main/kotlin/com/getcode/util/DateUtils.kt rename to libs/datetime/src/androidMain/kotlin/com/getcode/util/DateUtils.kt diff --git a/libs/datetime/src/main/kotlin/com/getcode/util/Instant.kt b/libs/datetime/src/commonMain/kotlin/com/getcode/util/Instant.kt similarity index 100% rename from libs/datetime/src/main/kotlin/com/getcode/util/Instant.kt rename to libs/datetime/src/commonMain/kotlin/com/getcode/util/Instant.kt diff --git a/libs/encryption/keys/build.gradle.kts b/libs/encryption/keys/build.gradle.kts index 4e4c81f68c..a45f13b8e3 100644 --- a/libs/encryption/keys/build.gradle.kts +++ b/libs/encryption/keys/build.gradle.kts @@ -1,21 +1,27 @@ plugins { - alias(libs.plugins.flipcash.android.library) + alias(libs.plugins.flipcash.kmp.app.library) } -android { - namespace = "${Gradle.codeNamespace}.encryption.keys" -} - -dependencies { - implementation(project(":libs:encryption:base58")) - implementation(project(":libs:encryption:sha256")) - implementation(project(":libs:encryption:utils")) +kotlin { + android { + namespace = "${Gradle.codeNamespace}.encryption.keys" + } - implementation(libs.protobuf.kotlin.lite) - implementation(libs.grpc.okhttp) - implementation(libs.grpc.kotlin) - implementation(libs.bundles.kotlinx.serialization) + sourceSets { + commonMain.dependencies { + implementation(project(":libs:encryption:base58")) + implementation(project(":libs:encryption:sha256")) + implementation(project(":libs:encryption:utils")) + implementation(project(":libs:parcelable")) - testImplementation(kotlin("test")) - testImplementation(libs.robolectric) + implementation(libs.protobuf.kotlin.lite) + implementation(libs.grpc.okhttp) + implementation(libs.grpc.kotlin) + implementation(libs.bundles.kotlinx.serialization) + } + getByName("androidHostTest").dependencies { + implementation(kotlin("test")) + implementation(libs.robolectric) + } + } } diff --git a/libs/encryption/keys/src/test/kotlin/com/getcode/solana/keys/AccountMetaTest.kt b/libs/encryption/keys/src/androidHostTest/kotlin/com/getcode/solana/keys/AccountMetaTest.kt similarity index 100% rename from libs/encryption/keys/src/test/kotlin/com/getcode/solana/keys/AccountMetaTest.kt rename to libs/encryption/keys/src/androidHostTest/kotlin/com/getcode/solana/keys/AccountMetaTest.kt diff --git a/libs/encryption/keys/src/test/kotlin/com/getcode/solana/keys/KeyInitOrderTest.kt b/libs/encryption/keys/src/androidHostTest/kotlin/com/getcode/solana/keys/KeyInitOrderTest.kt similarity index 100% rename from libs/encryption/keys/src/test/kotlin/com/getcode/solana/keys/KeyInitOrderTest.kt rename to libs/encryption/keys/src/androidHostTest/kotlin/com/getcode/solana/keys/KeyInitOrderTest.kt diff --git a/libs/encryption/keys/src/test/kotlin/com/getcode/solana/keys/KeyTest.kt b/libs/encryption/keys/src/androidHostTest/kotlin/com/getcode/solana/keys/KeyTest.kt similarity index 100% rename from libs/encryption/keys/src/test/kotlin/com/getcode/solana/keys/KeyTest.kt rename to libs/encryption/keys/src/androidHostTest/kotlin/com/getcode/solana/keys/KeyTest.kt diff --git a/libs/encryption/keys/src/test/kotlin/com/getcode/solana/keys/MintTest.kt b/libs/encryption/keys/src/androidHostTest/kotlin/com/getcode/solana/keys/MintTest.kt similarity index 100% rename from libs/encryption/keys/src/test/kotlin/com/getcode/solana/keys/MintTest.kt rename to libs/encryption/keys/src/androidHostTest/kotlin/com/getcode/solana/keys/MintTest.kt diff --git a/libs/encryption/keys/src/test/kotlin/com/getcode/solana/keys/PublicKeyTest.kt b/libs/encryption/keys/src/androidHostTest/kotlin/com/getcode/solana/keys/PublicKeyTest.kt similarity index 100% rename from libs/encryption/keys/src/test/kotlin/com/getcode/solana/keys/PublicKeyTest.kt rename to libs/encryption/keys/src/androidHostTest/kotlin/com/getcode/solana/keys/PublicKeyTest.kt diff --git a/libs/encryption/keys/src/test/kotlin/com/getcode/utils/serializer/SerializerTest.kt b/libs/encryption/keys/src/androidHostTest/kotlin/com/getcode/utils/serializer/SerializerTest.kt similarity index 100% rename from libs/encryption/keys/src/test/kotlin/com/getcode/utils/serializer/SerializerTest.kt rename to libs/encryption/keys/src/androidHostTest/kotlin/com/getcode/utils/serializer/SerializerTest.kt diff --git a/libs/encryption/keys/src/main/kotlin/com/getcode/solana/keys/AccountMeta.kt b/libs/encryption/keys/src/commonMain/kotlin/com/getcode/solana/keys/AccountMeta.kt similarity index 100% rename from libs/encryption/keys/src/main/kotlin/com/getcode/solana/keys/AccountMeta.kt rename to libs/encryption/keys/src/commonMain/kotlin/com/getcode/solana/keys/AccountMeta.kt diff --git a/libs/encryption/keys/src/main/kotlin/com/getcode/solana/keys/Key.kt b/libs/encryption/keys/src/commonMain/kotlin/com/getcode/solana/keys/Key.kt similarity index 100% rename from libs/encryption/keys/src/main/kotlin/com/getcode/solana/keys/Key.kt rename to libs/encryption/keys/src/commonMain/kotlin/com/getcode/solana/keys/Key.kt diff --git a/libs/encryption/keys/src/main/kotlin/com/getcode/solana/keys/MerkleProof.kt b/libs/encryption/keys/src/commonMain/kotlin/com/getcode/solana/keys/MerkleProof.kt similarity index 100% rename from libs/encryption/keys/src/main/kotlin/com/getcode/solana/keys/MerkleProof.kt rename to libs/encryption/keys/src/commonMain/kotlin/com/getcode/solana/keys/MerkleProof.kt diff --git a/libs/encryption/keys/src/main/kotlin/com/getcode/solana/keys/Mint.kt b/libs/encryption/keys/src/commonMain/kotlin/com/getcode/solana/keys/Mint.kt similarity index 63% rename from libs/encryption/keys/src/main/kotlin/com/getcode/solana/keys/Mint.kt rename to libs/encryption/keys/src/commonMain/kotlin/com/getcode/solana/keys/Mint.kt index 5a4ee3532a..b28294443e 100644 --- a/libs/encryption/keys/src/main/kotlin/com/getcode/solana/keys/Mint.kt +++ b/libs/encryption/keys/src/commonMain/kotlin/com/getcode/solana/keys/Mint.kt @@ -1,7 +1,6 @@ package com.getcode.solana.keys -import android.os.Parcel -import android.os.Parcelable +import com.getcode.libs.parcelable.parcelableCreator import com.getcode.utils.serializer.MintAsStringSerializer import com.getcode.vendor.Base58 import kotlinx.serialization.Serializable @@ -12,11 +11,7 @@ class Mint(bytes: List): PublicKey(bytes) { companion object { @JvmField - val CREATOR: Parcelable.Creator = - object : Parcelable.Creator { - override fun createFromParcel(parcel: Parcel) = Mint(parcel.readString().orEmpty()) - override fun newArray(size: Int) = arrayOfNulls(size) - } + val CREATOR: Any = parcelableCreator({ arrayOfNulls(it) }) { parcel -> Mint(parcel.readString().orEmpty()) } val usdc: Mint get() = Mint("EPjFWdd5AufqSSqeM2qN1xzybapC8G4wEGGkZwyTDt1v") diff --git a/libs/encryption/keys/src/main/kotlin/com/getcode/solana/keys/PublicKey.kt b/libs/encryption/keys/src/commonMain/kotlin/com/getcode/solana/keys/PublicKey.kt similarity index 83% rename from libs/encryption/keys/src/main/kotlin/com/getcode/solana/keys/PublicKey.kt rename to libs/encryption/keys/src/commonMain/kotlin/com/getcode/solana/keys/PublicKey.kt index 8668741349..4aa214734d 100644 --- a/libs/encryption/keys/src/main/kotlin/com/getcode/solana/keys/PublicKey.kt +++ b/libs/encryption/keys/src/commonMain/kotlin/com/getcode/solana/keys/PublicKey.kt @@ -1,7 +1,8 @@ package com.getcode.solana.keys -import android.os.Parcel -import android.os.Parcelable +import com.getcode.libs.parcelable.Parcel +import com.getcode.libs.parcelable.Parcelable +import com.getcode.libs.parcelable.parcelableCreator import com.getcode.utils.serializer.PublicKeyAsStringSerializer import com.getcode.vendor.Base58 import com.google.protobuf.ByteString @@ -33,11 +34,7 @@ open class PublicKey(bytes: List) : Key32(bytes), Parcelable { val ZERO: PublicKey = PublicKey(ByteArray(LENGTH_32).toList()) @JvmField - val CREATOR: Parcelable.Creator = - object : Parcelable.Creator { - override fun createFromParcel(parcel: Parcel) = PublicKey(parcel) - override fun newArray(size: Int) = arrayOfNulls(size) - } + val CREATOR: Any = parcelableCreator({ arrayOfNulls(it) }) { parcel -> PublicKey(parcel) } } override fun equals(other: Any?): Boolean { diff --git a/libs/encryption/keys/src/main/kotlin/com/getcode/solana/keys/Types.kt b/libs/encryption/keys/src/commonMain/kotlin/com/getcode/solana/keys/Types.kt similarity index 100% rename from libs/encryption/keys/src/main/kotlin/com/getcode/solana/keys/Types.kt rename to libs/encryption/keys/src/commonMain/kotlin/com/getcode/solana/keys/Types.kt diff --git a/libs/encryption/keys/src/main/kotlin/com/getcode/utils/serializer/ByteListSerializer.kt b/libs/encryption/keys/src/commonMain/kotlin/com/getcode/utils/serializer/ByteListSerializer.kt similarity index 76% rename from libs/encryption/keys/src/main/kotlin/com/getcode/utils/serializer/ByteListSerializer.kt rename to libs/encryption/keys/src/commonMain/kotlin/com/getcode/utils/serializer/ByteListSerializer.kt index cca7ba75e3..ebd71a94b9 100644 --- a/libs/encryption/keys/src/main/kotlin/com/getcode/utils/serializer/ByteListSerializer.kt +++ b/libs/encryption/keys/src/commonMain/kotlin/com/getcode/utils/serializer/ByteListSerializer.kt @@ -1,6 +1,7 @@ package com.getcode.utils.serializer -import android.util.Base64 +import com.getcode.utils.decodeBase64 +import com.getcode.utils.encodeBase64 import kotlinx.serialization.KSerializer import kotlinx.serialization.descriptors.PrimitiveKind import kotlinx.serialization.descriptors.PrimitiveSerialDescriptor @@ -12,10 +13,10 @@ object ByteListAsBase64Serializer : KSerializer> { override val descriptor: SerialDescriptor = PrimitiveSerialDescriptor("ByteList", PrimitiveKind.STRING) override fun serialize(encoder: Encoder, value: List) { - encoder.encodeString(Base64.encodeToString(value.toByteArray(), Base64.NO_WRAP)) + encoder.encodeString(value.toByteArray().encodeBase64()) } override fun deserialize(decoder: Decoder): List { - return Base64.decode(decoder.decodeString(), Base64.NO_WRAP).toList() + return decoder.decodeString().decodeBase64().toList() } } diff --git a/libs/encryption/keys/src/main/kotlin/com/getcode/utils/serializer/MintSerializer.kt b/libs/encryption/keys/src/commonMain/kotlin/com/getcode/utils/serializer/MintSerializer.kt similarity index 100% rename from libs/encryption/keys/src/main/kotlin/com/getcode/utils/serializer/MintSerializer.kt rename to libs/encryption/keys/src/commonMain/kotlin/com/getcode/utils/serializer/MintSerializer.kt diff --git a/libs/encryption/keys/src/main/kotlin/com/getcode/utils/serializer/PublicKeySerializer.kt b/libs/encryption/keys/src/commonMain/kotlin/com/getcode/utils/serializer/PublicKeySerializer.kt similarity index 100% rename from libs/encryption/keys/src/main/kotlin/com/getcode/utils/serializer/PublicKeySerializer.kt rename to libs/encryption/keys/src/commonMain/kotlin/com/getcode/utils/serializer/PublicKeySerializer.kt diff --git a/libs/encryption/utils/build.gradle.kts b/libs/encryption/utils/build.gradle.kts index 79e57d881d..41a6ca18d0 100644 --- a/libs/encryption/utils/build.gradle.kts +++ b/libs/encryption/utils/build.gradle.kts @@ -1,8 +1,21 @@ +import org.jetbrains.kotlin.gradle.plugin.KotlinPlatformType + plugins { alias(libs.plugins.flipcash.kmp.library) } +@OptIn(org.jetbrains.kotlin.gradle.ExperimentalKotlinGradlePluginApi::class) kotlin { + // jvmShared: code for both JVM targets (Android and desktop) that needs java.* or protobuf. + applyDefaultHierarchyTemplate { + common { + group("jvmShared") { + withJvm() + withCompilations { it.platformType == KotlinPlatformType.androidJvm } + } + } + } + android { namespace = "com.getcode.encryption.utils" withHostTest {} @@ -14,10 +27,14 @@ kotlin { implementation(project(":libs:encryption:base58")) } } + getByName("jvmSharedMain") { + dependencies { + implementation(libs.protobuf.kotlin.lite) + } + } androidMain { dependencies { implementation(project(":libs:encryption:ed25519")) - implementation(libs.protobuf.kotlin.lite) implementation(libs.bundles.kotlinx.serialization) implementation(libs.timber) } diff --git a/libs/encryption/utils/src/androidMain/kotlin/com/getcode/utils/Base64.android.kt b/libs/encryption/utils/src/androidMain/kotlin/com/getcode/utils/Base64.android.kt new file mode 100644 index 0000000000..790debf0d3 --- /dev/null +++ b/libs/encryption/utils/src/androidMain/kotlin/com/getcode/utils/Base64.android.kt @@ -0,0 +1,11 @@ +package com.getcode.utils + +import android.util.Base64 + +internal actual fun base64Encode(bytes: ByteArray, urlSafe: Boolean): ByteArray = + Base64.encode(bytes, flags(urlSafe)) + +internal actual fun base64Decode(bytes: ByteArray, urlSafe: Boolean): ByteArray = + Base64.decode(bytes, flags(urlSafe)) + +private fun flags(urlSafe: Boolean) = if (urlSafe) Base64.NO_WRAP or Base64.URL_SAFE else Base64.NO_WRAP diff --git a/libs/encryption/utils/src/androidMain/kotlin/com/getcode/utils/Ed25519Extensions.android.kt b/libs/encryption/utils/src/androidMain/kotlin/com/getcode/utils/Ed25519Extensions.android.kt new file mode 100644 index 0000000000..c5edb257bf --- /dev/null +++ b/libs/encryption/utils/src/androidMain/kotlin/com/getcode/utils/Ed25519Extensions.android.kt @@ -0,0 +1,6 @@ +package com.getcode.utils + +import com.getcode.ed25519.Ed25519 +import com.getcode.vendor.Base58 + +fun Ed25519.KeyPair.getPublicKeyBase58(): String = Base58.encode(publicKeyBytes) diff --git a/libs/encryption/utils/src/androidMain/kotlin/com/getcode/utils/Extensions.android.kt b/libs/encryption/utils/src/androidMain/kotlin/com/getcode/utils/Extensions.android.kt deleted file mode 100644 index 6bbbd55e96..0000000000 --- a/libs/encryption/utils/src/androidMain/kotlin/com/getcode/utils/Extensions.android.kt +++ /dev/null @@ -1,48 +0,0 @@ -package com.getcode.utils - -import android.util.Base64 -import com.getcode.ed25519.Ed25519 -import com.getcode.vendor.Base58 -import com.google.protobuf.ByteString -import java.net.URLDecoder -import java.net.URLEncoder -import java.security.MessageDigest -import java.security.NoSuchAlgorithmException - -fun List.toByteString(): ByteString = ByteString.copyFrom(this.toByteArray()) -fun ByteArray.toByteString(): ByteString = ByteString.copyFrom(this) - -val List.base64: String - get() = Base64.encodeToString(toByteArray(), Base64.NO_WRAP) - -fun String.decodeBase64(): ByteArray = Base64.decode(this, Base64.NO_WRAP) - -fun String.decodeBase64UrlSafe(): ByteArray = Base64.decode(this, Base64.NO_WRAP or Base64.URL_SAFE) - -fun ByteArray.decodeBase64(): ByteArray = Base64.decode(this, Base64.NO_WRAP) - -val ByteArray.base64: String - get() = Base64.encodeToString(this, Base64.NO_WRAP) - -fun ByteArray.encodeBase64(urlSafe: Boolean = false): String { - val flags = if (urlSafe) Base64.NO_WRAP or Base64.URL_SAFE else Base64.NO_WRAP - return Base64.encodeToString(this, flags) -} - -fun ByteArray.encodeBase64ToArray(): ByteArray = Base64.encode(this, Base64.NO_WRAP) - -fun ByteArray.sha512(): ByteArray { - return try { - MessageDigest.getInstance("SHA-512") - .apply { update(this@sha512) } - .digest() - } catch (e: NoSuchAlgorithmException) { - throw RuntimeException("SHA-512 not implemented") - } -} - -fun String.urlEncode(): String = URLEncoder.encode(this, "UTF-8") - -fun String.urlDecode(): String = URLDecoder.decode(this, "UTF-8") - -fun Ed25519.KeyPair.getPublicKeyBase58(): String = Base58.encode(publicKeyBytes) diff --git a/libs/encryption/utils/src/jvmMain/kotlin/com/getcode/utils/Base64.jvm.kt b/libs/encryption/utils/src/jvmMain/kotlin/com/getcode/utils/Base64.jvm.kt new file mode 100644 index 0000000000..37539363e2 --- /dev/null +++ b/libs/encryption/utils/src/jvmMain/kotlin/com/getcode/utils/Base64.jvm.kt @@ -0,0 +1,10 @@ +package com.getcode.utils + +import java.util.Base64 + +// android.util.Base64.decode tolerates missing padding; java.util.Base64's decoder does too. +internal actual fun base64Encode(bytes: ByteArray, urlSafe: Boolean): ByteArray = + (if (urlSafe) Base64.getUrlEncoder() else Base64.getEncoder()).encode(bytes) + +internal actual fun base64Decode(bytes: ByteArray, urlSafe: Boolean): ByteArray = + (if (urlSafe) Base64.getUrlDecoder() else Base64.getDecoder()).decode(bytes) diff --git a/libs/encryption/utils/src/jvmSharedMain/kotlin/com/getcode/utils/Extensions.jvmShared.kt b/libs/encryption/utils/src/jvmSharedMain/kotlin/com/getcode/utils/Extensions.jvmShared.kt new file mode 100644 index 0000000000..47efb02dc2 --- /dev/null +++ b/libs/encryption/utils/src/jvmSharedMain/kotlin/com/getcode/utils/Extensions.jvmShared.kt @@ -0,0 +1,44 @@ +package com.getcode.utils + +import com.google.protobuf.ByteString +import java.net.URLDecoder +import java.net.URLEncoder +import java.security.MessageDigest +import java.security.NoSuchAlgorithmException + +fun List.toByteString(): ByteString = ByteString.copyFrom(this.toByteArray()) +fun ByteArray.toByteString(): ByteString = ByteString.copyFrom(this) + +// Base64 goes through the platform: android.util.Base64 on Android (unchanged), java.util.Base64 on the desktop JVM. +internal expect fun base64Encode(bytes: ByteArray, urlSafe: Boolean): ByteArray +internal expect fun base64Decode(bytes: ByteArray, urlSafe: Boolean): ByteArray + +val List.base64: String + get() = toByteArray().base64 + +fun String.decodeBase64(): ByteArray = base64Decode(toByteArray(), urlSafe = false) + +fun String.decodeBase64UrlSafe(): ByteArray = base64Decode(toByteArray(), urlSafe = true) + +fun ByteArray.decodeBase64(): ByteArray = base64Decode(this, urlSafe = false) + +val ByteArray.base64: String + get() = encodeBase64() + +fun ByteArray.encodeBase64(urlSafe: Boolean = false): String = String(base64Encode(this, urlSafe), Charsets.US_ASCII) + +fun ByteArray.encodeBase64ToArray(): ByteArray = base64Encode(this, urlSafe = false) + +fun ByteArray.sha512(): ByteArray { + return try { + MessageDigest.getInstance("SHA-512") + .apply { update(this@sha512) } + .digest() + } catch (e: NoSuchAlgorithmException) { + throw RuntimeException("SHA-512 not implemented") + } +} + +fun String.urlEncode(): String = URLEncoder.encode(this, "UTF-8") + +fun String.urlDecode(): String = URLDecoder.decode(this, "UTF-8") diff --git a/libs/messaging/build.gradle.kts b/libs/messaging/build.gradle.kts index 133be35447..f791759ead 100644 --- a/libs/messaging/build.gradle.kts +++ b/libs/messaging/build.gradle.kts @@ -1,13 +1,21 @@ plugins { - alias(libs.plugins.flipcash.android.library.compose) + alias(libs.plugins.flipcash.kmp.app.library) + alias(libs.plugins.compose.compiler) } -android { - namespace = "${Gradle.codeNamespace}.libs.messaging" -} +kotlin { + android { + namespace = "${Gradle.codeNamespace}.libs.messaging" + } -dependencies { - api(libs.kotlin.stdlib) - api(libs.kotlinx.coroutines.core) - api(libs.timber) + sourceSets { + commonMain.dependencies { + api(libs.kotlin.stdlib) + api(libs.kotlinx.coroutines.core) + implementation(libs.jetbrains.compose.foundation) + } + androidMain.dependencies { + api(libs.timber) + } + } } diff --git a/libs/messaging/src/main/kotlin/com/getcode/manager/BottomBarManager.kt b/libs/messaging/src/androidMain/kotlin/com/getcode/manager/BottomBarManager.kt similarity index 100% rename from libs/messaging/src/main/kotlin/com/getcode/manager/BottomBarManager.kt rename to libs/messaging/src/androidMain/kotlin/com/getcode/manager/BottomBarManager.kt diff --git a/libs/messaging/src/main/kotlin/com/getcode/manager/TopBarManager.kt b/libs/messaging/src/commonMain/kotlin/com/getcode/manager/TopBarManager.kt similarity index 100% rename from libs/messaging/src/main/kotlin/com/getcode/manager/TopBarManager.kt rename to libs/messaging/src/commonMain/kotlin/com/getcode/manager/TopBarManager.kt diff --git a/libs/network/jwt/build.gradle.kts b/libs/network/jwt/build.gradle.kts index 4ae483c8bd..907929211b 100644 --- a/libs/network/jwt/build.gradle.kts +++ b/libs/network/jwt/build.gradle.kts @@ -1,7 +1,9 @@ plugins { - alias(libs.plugins.flipcash.android.library) + alias(libs.plugins.flipcash.kmp.app.library) } -android { - namespace = "${Gradle.codeNamespace}.libs.network.jwt" +kotlin { + android { + namespace = "${Gradle.codeNamespace}.libs.network.jwt" + } } diff --git a/libs/network/jwt/src/main/kotlin/com/getcode/network/jwt/JwtProvider.kt b/libs/network/jwt/src/commonMain/kotlin/com/getcode/network/jwt/JwtProvider.kt similarity index 100% rename from libs/network/jwt/src/main/kotlin/com/getcode/network/jwt/JwtProvider.kt rename to libs/network/jwt/src/commonMain/kotlin/com/getcode/network/jwt/JwtProvider.kt diff --git a/libs/network/jwt/src/main/kotlin/com/getcode/network/jwt/JwtSecuredEndpoint.kt b/libs/network/jwt/src/commonMain/kotlin/com/getcode/network/jwt/JwtSecuredEndpoint.kt similarity index 100% rename from libs/network/jwt/src/main/kotlin/com/getcode/network/jwt/JwtSecuredEndpoint.kt rename to libs/network/jwt/src/commonMain/kotlin/com/getcode/network/jwt/JwtSecuredEndpoint.kt diff --git a/libs/parcelable/build.gradle.kts b/libs/parcelable/build.gradle.kts new file mode 100644 index 0000000000..e06a9d2d4b --- /dev/null +++ b/libs/parcelable/build.gradle.kts @@ -0,0 +1,9 @@ +plugins { + alias(libs.plugins.flipcash.kmp.app.library) +} + +kotlin { + android { + namespace = "${Gradle.codeNamespace}.libs.parcelable" + } +} diff --git a/libs/parcelable/src/androidHostTest/kotlin/com/getcode/libs/parcelable/ParcelizeTest.kt b/libs/parcelable/src/androidHostTest/kotlin/com/getcode/libs/parcelable/ParcelizeTest.kt new file mode 100644 index 0000000000..de1cca403b --- /dev/null +++ b/libs/parcelable/src/androidHostTest/kotlin/com/getcode/libs/parcelable/ParcelizeTest.kt @@ -0,0 +1,15 @@ +package com.getcode.libs.parcelable + +import kotlin.test.Test +import kotlin.test.assertNotNull + +@Parcelize +data class Sample(val name: String) : Parcelable + +class ParcelizeTest { + @Test + fun `common Parcelize annotation generates a CREATOR`() { + // The parcelize plugin only adds the field when it treats the common annotation as its own. + assertNotNull(Sample::class.java.getField("CREATOR").get(null) as? android.os.Parcelable.Creator<*>) + } +} diff --git a/libs/parcelable/src/androidMain/kotlin/com/getcode/libs/parcelable/Parcelable.android.kt b/libs/parcelable/src/androidMain/kotlin/com/getcode/libs/parcelable/Parcelable.android.kt new file mode 100644 index 0000000000..a8b89a1439 --- /dev/null +++ b/libs/parcelable/src/androidMain/kotlin/com/getcode/libs/parcelable/Parcelable.android.kt @@ -0,0 +1,15 @@ +package com.getcode.libs.parcelable + +actual typealias Parcelable = android.os.Parcelable + +actual typealias Parcel = android.os.Parcel + +actual fun parcelableCreator(newArray: (Int) -> Array, create: (Parcel) -> T): Any = + object : android.os.Parcelable.Creator { + override fun createFromParcel(source: Parcel): T = create(source) + override fun newArray(size: Int): Array = newArray(size) + } + +actual typealias Parcelize = kotlinx.parcelize.Parcelize + +actual typealias IgnoredOnParcel = kotlinx.parcelize.IgnoredOnParcel diff --git a/libs/parcelable/src/commonMain/kotlin/com/getcode/libs/parcelable/Parcelable.kt b/libs/parcelable/src/commonMain/kotlin/com/getcode/libs/parcelable/Parcelable.kt new file mode 100644 index 0000000000..fe69aed7b3 --- /dev/null +++ b/libs/parcelable/src/commonMain/kotlin/com/getcode/libs/parcelable/Parcelable.kt @@ -0,0 +1,39 @@ +package com.getcode.libs.parcelable + +/** + * `android.os.Parcelable` on Android; on the desktop JVM a plain interface nothing reads. + * + * The two members are declared so a class can hand-write its parcel format in common code. + * Classes that use [Parcelize] implement neither. + */ +expect interface Parcelable { + fun describeContents(): Int + fun writeToParcel(dest: Parcel, flags: Int) +} + +/** `android.os.Parcel` on Android. The desktop JVM never creates one. */ +expect class Parcel { + fun writeString(value: String?) + fun readString(): String? +} + +/** + * Builds the `CREATOR` a hand-written [Parcelable] needs on Android. Android finds the field by + * reflection and casts it, so the declared type can stay [Any] in common code. + */ +expect fun parcelableCreator(newArray: (Int) -> Array, create: (Parcel) -> T): Any + +/** + * Common stand-in for `kotlinx.parcelize.Parcelize`. The parcelize compiler plugin is told to + * treat it as its own (`additionalAnnotation`), so it generates the Android implementation. + */ +@OptionalExpectation +@Target(AnnotationTarget.CLASS) +@Retention(AnnotationRetention.BINARY) +expect annotation class Parcelize() + +/** Common stand-in for `kotlinx.parcelize.IgnoredOnParcel`. */ +@OptionalExpectation +@Target(AnnotationTarget.PROPERTY) +@Retention(AnnotationRetention.SOURCE) +expect annotation class IgnoredOnParcel() diff --git a/libs/parcelable/src/jvmMain/kotlin/com/getcode/libs/parcelable/Parcelable.jvm.kt b/libs/parcelable/src/jvmMain/kotlin/com/getcode/libs/parcelable/Parcelable.jvm.kt new file mode 100644 index 0000000000..f8b472d1e6 --- /dev/null +++ b/libs/parcelable/src/jvmMain/kotlin/com/getcode/libs/parcelable/Parcelable.jvm.kt @@ -0,0 +1,13 @@ +package com.getcode.libs.parcelable + +actual interface Parcelable { + actual fun describeContents(): Int + actual fun writeToParcel(dest: Parcel, flags: Int) +} + +actual class Parcel private constructor() { + actual fun writeString(value: String?): Unit = throw UnsupportedOperationException() + actual fun readString(): String? = throw UnsupportedOperationException() +} + +actual fun parcelableCreator(newArray: (Int) -> Array, create: (Parcel) -> T): Any = Unit diff --git a/services/opencode/build.gradle.kts b/services/opencode/build.gradle.kts index a7f5334f2d..67b88e1945 100644 --- a/services/opencode/build.gradle.kts +++ b/services/opencode/build.gradle.kts @@ -92,5 +92,5 @@ dependencies { testImplementation(kotlin("test")) testImplementation(libs.bundles.unit.testing) - testImplementation(testFixtures(project(":libs:currency-math"))) + testImplementation(project(":libs:currency-math:test-fixtures")) } diff --git a/settings.gradle.kts b/settings.gradle.kts index ce47d2b015..4ad45e5ae7 100644 --- a/settings.gradle.kts +++ b/settings.gradle.kts @@ -201,6 +201,8 @@ include( ":libs:codes:kikcode", ":libs:coroutines", ":libs:coroutines:test-fixtures", + ":libs:parcelable", + ":libs:currency-math:test-fixtures", ":libs:crypto:kin", ":libs:crypto:solana", ":libs:currency", From 5d41abf248b5d9ea7a4e7753a1477f9a30b6f4a2 Mon Sep 17 00:00:00 2001 From: Brandon McAnsh Date: Fri, 23 Oct 2026 15:44:34 -0400 Subject: [PATCH 02/11] build(parcelable): split hand-written parcel members into ManualParcelable A common @Parcelize class implemented the JVM Parcelable's abstract members on Android only, so it failed to compile for jvm. Parcelable is now a member-free marker; PublicKey, which writes its own parcel format, implements ManualParcelable. --- libs/encryption/keys/build.gradle.kts | 2 +- .../kotlin/com/getcode/solana/keys/PublicKey.kt | 4 ++-- .../kotlin/com/getcode/utils/ErrorUtilsTest.kt | 0 .../kotlin/com/getcode/utils/FileTreeTest.kt | 0 .../com/getcode/utils/MetadataBuilderTest.kt | 0 .../com/getcode/utils/PiiMaskingPluginTest.kt | 0 .../kotlin/com/getcode/utils/TraceManagerTest.kt | 0 .../kotlin/com/getcode/utils/FileTree.kt | 0 .../kotlin/com/getcode/utils/BreadcrumbSink.kt | 0 .../kotlin/com/getcode/utils/CodeServerError.kt | 0 .../com/getcode/utils/ConditionallyNotifiable.kt | 0 .../kotlin/com/getcode/utils/ErrorReporter.kt | 0 .../kotlin/com/getcode/utils/ErrorUtils.kt | 0 .../kotlin/com/getcode/utils/Logging.kt | 0 .../kotlin/com/getcode/utils/NotifiableError.kt | 0 .../kotlin/com/getcode/utils/PiiMaskingPlugin.kt | 0 .../com/getcode/utils/RpcBodyFilterPlugin.kt | 0 .../kotlin/com/getcode/utils/TraceLogPlugin.kt | 0 .../kotlin/com/getcode/utils/UnreportedError.kt | 0 .../getcode/libs/parcelable/Parcelable.android.kt | 5 +++++ .../com/getcode/libs/parcelable/Parcelable.kt | 14 ++++++++++---- .../com/getcode/libs/parcelable/ParcelizeProbe.kt | 4 ++++ .../com/getcode/libs/parcelable/Parcelable.jvm.kt | 4 +++- 23 files changed, 25 insertions(+), 8 deletions(-) rename libs/logging/src/{test => androidHostTest}/kotlin/com/getcode/utils/ErrorUtilsTest.kt (100%) rename libs/logging/src/{test => androidHostTest}/kotlin/com/getcode/utils/FileTreeTest.kt (100%) rename libs/logging/src/{test => androidHostTest}/kotlin/com/getcode/utils/MetadataBuilderTest.kt (100%) rename libs/logging/src/{test => androidHostTest}/kotlin/com/getcode/utils/PiiMaskingPluginTest.kt (100%) rename libs/logging/src/{test => androidHostTest}/kotlin/com/getcode/utils/TraceManagerTest.kt (100%) rename libs/logging/src/{main => androidMain}/kotlin/com/getcode/utils/FileTree.kt (100%) rename libs/logging/src/{main => commonMain}/kotlin/com/getcode/utils/BreadcrumbSink.kt (100%) rename libs/logging/src/{main => commonMain}/kotlin/com/getcode/utils/CodeServerError.kt (100%) rename libs/logging/src/{main => commonMain}/kotlin/com/getcode/utils/ConditionallyNotifiable.kt (100%) rename libs/logging/src/{main => commonMain}/kotlin/com/getcode/utils/ErrorReporter.kt (100%) rename libs/logging/src/{main => commonMain}/kotlin/com/getcode/utils/ErrorUtils.kt (100%) rename libs/logging/src/{main => commonMain}/kotlin/com/getcode/utils/Logging.kt (100%) rename libs/logging/src/{main => commonMain}/kotlin/com/getcode/utils/NotifiableError.kt (100%) rename libs/logging/src/{main => commonMain}/kotlin/com/getcode/utils/PiiMaskingPlugin.kt (100%) rename libs/logging/src/{main => commonMain}/kotlin/com/getcode/utils/RpcBodyFilterPlugin.kt (100%) rename libs/logging/src/{main => commonMain}/kotlin/com/getcode/utils/TraceLogPlugin.kt (100%) rename libs/logging/src/{main => commonMain}/kotlin/com/getcode/utils/UnreportedError.kt (100%) create mode 100644 libs/parcelable/src/commonTest/kotlin/com/getcode/libs/parcelable/ParcelizeProbe.kt diff --git a/libs/encryption/keys/build.gradle.kts b/libs/encryption/keys/build.gradle.kts index a45f13b8e3..14c70fec7a 100644 --- a/libs/encryption/keys/build.gradle.kts +++ b/libs/encryption/keys/build.gradle.kts @@ -12,7 +12,7 @@ kotlin { implementation(project(":libs:encryption:base58")) implementation(project(":libs:encryption:sha256")) implementation(project(":libs:encryption:utils")) - implementation(project(":libs:parcelable")) + api(project(":libs:parcelable")) implementation(libs.protobuf.kotlin.lite) implementation(libs.grpc.okhttp) diff --git a/libs/encryption/keys/src/commonMain/kotlin/com/getcode/solana/keys/PublicKey.kt b/libs/encryption/keys/src/commonMain/kotlin/com/getcode/solana/keys/PublicKey.kt index 4aa214734d..fbdb8bf627 100644 --- a/libs/encryption/keys/src/commonMain/kotlin/com/getcode/solana/keys/PublicKey.kt +++ b/libs/encryption/keys/src/commonMain/kotlin/com/getcode/solana/keys/PublicKey.kt @@ -1,7 +1,7 @@ package com.getcode.solana.keys import com.getcode.libs.parcelable.Parcel -import com.getcode.libs.parcelable.Parcelable +import com.getcode.libs.parcelable.ManualParcelable import com.getcode.libs.parcelable.parcelableCreator import com.getcode.utils.serializer.PublicKeyAsStringSerializer import com.getcode.vendor.Base58 @@ -9,7 +9,7 @@ import com.google.protobuf.ByteString import kotlinx.serialization.Serializable @Serializable(with = PublicKeyAsStringSerializer::class) -open class PublicKey(bytes: List) : Key32(bytes), Parcelable { +open class PublicKey(bytes: List) : Key32(bytes), ManualParcelable { constructor(base58: String): this(Base58.decode(base58).toList()) diff --git a/libs/logging/src/test/kotlin/com/getcode/utils/ErrorUtilsTest.kt b/libs/logging/src/androidHostTest/kotlin/com/getcode/utils/ErrorUtilsTest.kt similarity index 100% rename from libs/logging/src/test/kotlin/com/getcode/utils/ErrorUtilsTest.kt rename to libs/logging/src/androidHostTest/kotlin/com/getcode/utils/ErrorUtilsTest.kt diff --git a/libs/logging/src/test/kotlin/com/getcode/utils/FileTreeTest.kt b/libs/logging/src/androidHostTest/kotlin/com/getcode/utils/FileTreeTest.kt similarity index 100% rename from libs/logging/src/test/kotlin/com/getcode/utils/FileTreeTest.kt rename to libs/logging/src/androidHostTest/kotlin/com/getcode/utils/FileTreeTest.kt diff --git a/libs/logging/src/test/kotlin/com/getcode/utils/MetadataBuilderTest.kt b/libs/logging/src/androidHostTest/kotlin/com/getcode/utils/MetadataBuilderTest.kt similarity index 100% rename from libs/logging/src/test/kotlin/com/getcode/utils/MetadataBuilderTest.kt rename to libs/logging/src/androidHostTest/kotlin/com/getcode/utils/MetadataBuilderTest.kt diff --git a/libs/logging/src/test/kotlin/com/getcode/utils/PiiMaskingPluginTest.kt b/libs/logging/src/androidHostTest/kotlin/com/getcode/utils/PiiMaskingPluginTest.kt similarity index 100% rename from libs/logging/src/test/kotlin/com/getcode/utils/PiiMaskingPluginTest.kt rename to libs/logging/src/androidHostTest/kotlin/com/getcode/utils/PiiMaskingPluginTest.kt diff --git a/libs/logging/src/test/kotlin/com/getcode/utils/TraceManagerTest.kt b/libs/logging/src/androidHostTest/kotlin/com/getcode/utils/TraceManagerTest.kt similarity index 100% rename from libs/logging/src/test/kotlin/com/getcode/utils/TraceManagerTest.kt rename to libs/logging/src/androidHostTest/kotlin/com/getcode/utils/TraceManagerTest.kt diff --git a/libs/logging/src/main/kotlin/com/getcode/utils/FileTree.kt b/libs/logging/src/androidMain/kotlin/com/getcode/utils/FileTree.kt similarity index 100% rename from libs/logging/src/main/kotlin/com/getcode/utils/FileTree.kt rename to libs/logging/src/androidMain/kotlin/com/getcode/utils/FileTree.kt diff --git a/libs/logging/src/main/kotlin/com/getcode/utils/BreadcrumbSink.kt b/libs/logging/src/commonMain/kotlin/com/getcode/utils/BreadcrumbSink.kt similarity index 100% rename from libs/logging/src/main/kotlin/com/getcode/utils/BreadcrumbSink.kt rename to libs/logging/src/commonMain/kotlin/com/getcode/utils/BreadcrumbSink.kt diff --git a/libs/logging/src/main/kotlin/com/getcode/utils/CodeServerError.kt b/libs/logging/src/commonMain/kotlin/com/getcode/utils/CodeServerError.kt similarity index 100% rename from libs/logging/src/main/kotlin/com/getcode/utils/CodeServerError.kt rename to libs/logging/src/commonMain/kotlin/com/getcode/utils/CodeServerError.kt diff --git a/libs/logging/src/main/kotlin/com/getcode/utils/ConditionallyNotifiable.kt b/libs/logging/src/commonMain/kotlin/com/getcode/utils/ConditionallyNotifiable.kt similarity index 100% rename from libs/logging/src/main/kotlin/com/getcode/utils/ConditionallyNotifiable.kt rename to libs/logging/src/commonMain/kotlin/com/getcode/utils/ConditionallyNotifiable.kt diff --git a/libs/logging/src/main/kotlin/com/getcode/utils/ErrorReporter.kt b/libs/logging/src/commonMain/kotlin/com/getcode/utils/ErrorReporter.kt similarity index 100% rename from libs/logging/src/main/kotlin/com/getcode/utils/ErrorReporter.kt rename to libs/logging/src/commonMain/kotlin/com/getcode/utils/ErrorReporter.kt diff --git a/libs/logging/src/main/kotlin/com/getcode/utils/ErrorUtils.kt b/libs/logging/src/commonMain/kotlin/com/getcode/utils/ErrorUtils.kt similarity index 100% rename from libs/logging/src/main/kotlin/com/getcode/utils/ErrorUtils.kt rename to libs/logging/src/commonMain/kotlin/com/getcode/utils/ErrorUtils.kt diff --git a/libs/logging/src/main/kotlin/com/getcode/utils/Logging.kt b/libs/logging/src/commonMain/kotlin/com/getcode/utils/Logging.kt similarity index 100% rename from libs/logging/src/main/kotlin/com/getcode/utils/Logging.kt rename to libs/logging/src/commonMain/kotlin/com/getcode/utils/Logging.kt diff --git a/libs/logging/src/main/kotlin/com/getcode/utils/NotifiableError.kt b/libs/logging/src/commonMain/kotlin/com/getcode/utils/NotifiableError.kt similarity index 100% rename from libs/logging/src/main/kotlin/com/getcode/utils/NotifiableError.kt rename to libs/logging/src/commonMain/kotlin/com/getcode/utils/NotifiableError.kt diff --git a/libs/logging/src/main/kotlin/com/getcode/utils/PiiMaskingPlugin.kt b/libs/logging/src/commonMain/kotlin/com/getcode/utils/PiiMaskingPlugin.kt similarity index 100% rename from libs/logging/src/main/kotlin/com/getcode/utils/PiiMaskingPlugin.kt rename to libs/logging/src/commonMain/kotlin/com/getcode/utils/PiiMaskingPlugin.kt diff --git a/libs/logging/src/main/kotlin/com/getcode/utils/RpcBodyFilterPlugin.kt b/libs/logging/src/commonMain/kotlin/com/getcode/utils/RpcBodyFilterPlugin.kt similarity index 100% rename from libs/logging/src/main/kotlin/com/getcode/utils/RpcBodyFilterPlugin.kt rename to libs/logging/src/commonMain/kotlin/com/getcode/utils/RpcBodyFilterPlugin.kt diff --git a/libs/logging/src/main/kotlin/com/getcode/utils/TraceLogPlugin.kt b/libs/logging/src/commonMain/kotlin/com/getcode/utils/TraceLogPlugin.kt similarity index 100% rename from libs/logging/src/main/kotlin/com/getcode/utils/TraceLogPlugin.kt rename to libs/logging/src/commonMain/kotlin/com/getcode/utils/TraceLogPlugin.kt diff --git a/libs/logging/src/main/kotlin/com/getcode/utils/UnreportedError.kt b/libs/logging/src/commonMain/kotlin/com/getcode/utils/UnreportedError.kt similarity index 100% rename from libs/logging/src/main/kotlin/com/getcode/utils/UnreportedError.kt rename to libs/logging/src/commonMain/kotlin/com/getcode/utils/UnreportedError.kt diff --git a/libs/parcelable/src/androidMain/kotlin/com/getcode/libs/parcelable/Parcelable.android.kt b/libs/parcelable/src/androidMain/kotlin/com/getcode/libs/parcelable/Parcelable.android.kt index a8b89a1439..f06cb51e54 100644 --- a/libs/parcelable/src/androidMain/kotlin/com/getcode/libs/parcelable/Parcelable.android.kt +++ b/libs/parcelable/src/androidMain/kotlin/com/getcode/libs/parcelable/Parcelable.android.kt @@ -2,6 +2,11 @@ package com.getcode.libs.parcelable actual typealias Parcelable = android.os.Parcelable +actual interface ManualParcelable : Parcelable { + actual override fun describeContents(): Int + actual override fun writeToParcel(dest: Parcel, flags: Int) +} + actual typealias Parcel = android.os.Parcel actual fun parcelableCreator(newArray: (Int) -> Array, create: (Parcel) -> T): Any = diff --git a/libs/parcelable/src/commonMain/kotlin/com/getcode/libs/parcelable/Parcelable.kt b/libs/parcelable/src/commonMain/kotlin/com/getcode/libs/parcelable/Parcelable.kt index fe69aed7b3..c36000ae8c 100644 --- a/libs/parcelable/src/commonMain/kotlin/com/getcode/libs/parcelable/Parcelable.kt +++ b/libs/parcelable/src/commonMain/kotlin/com/getcode/libs/parcelable/Parcelable.kt @@ -1,12 +1,18 @@ package com.getcode.libs.parcelable /** - * `android.os.Parcelable` on Android; on the desktop JVM a plain interface nothing reads. + * `android.os.Parcelable` on Android; on the desktop JVM a marker interface nothing reads. * - * The two members are declared so a class can hand-write its parcel format in common code. - * Classes that use [Parcelize] implement neither. + * Common code sees no members, so a [Parcelize] class compiles on both targets. A class that + * writes its own parcel format implements [ManualParcelable] instead. */ -expect interface Parcelable { +expect interface Parcelable + +/** + * A sub-interface of `android.os.Parcelable` on Android, with the two members declared so a class can + * hand-write its parcel format in common code. + */ +expect interface ManualParcelable : Parcelable { fun describeContents(): Int fun writeToParcel(dest: Parcel, flags: Int) } diff --git a/libs/parcelable/src/commonTest/kotlin/com/getcode/libs/parcelable/ParcelizeProbe.kt b/libs/parcelable/src/commonTest/kotlin/com/getcode/libs/parcelable/ParcelizeProbe.kt new file mode 100644 index 0000000000..7631dbe02f --- /dev/null +++ b/libs/parcelable/src/commonTest/kotlin/com/getcode/libs/parcelable/ParcelizeProbe.kt @@ -0,0 +1,4 @@ +package com.getcode.libs.parcelable + +@Parcelize +data class ParcelizeProbe(val name: String, val count: Int) : Parcelable diff --git a/libs/parcelable/src/jvmMain/kotlin/com/getcode/libs/parcelable/Parcelable.jvm.kt b/libs/parcelable/src/jvmMain/kotlin/com/getcode/libs/parcelable/Parcelable.jvm.kt index f8b472d1e6..4e8741c5c6 100644 --- a/libs/parcelable/src/jvmMain/kotlin/com/getcode/libs/parcelable/Parcelable.jvm.kt +++ b/libs/parcelable/src/jvmMain/kotlin/com/getcode/libs/parcelable/Parcelable.jvm.kt @@ -1,6 +1,8 @@ package com.getcode.libs.parcelable -actual interface Parcelable { +actual interface Parcelable + +actual interface ManualParcelable : Parcelable { actual fun describeContents(): Int actual fun writeToParcel(dest: Parcel, flags: Int) } From 0ddf461c880bbbe7fd71e1c3228f1a72e1f3b40d Mon Sep 17 00:00:00 2001 From: Brandon McAnsh Date: Fri, 23 Oct 2026 15:51:10 -0400 Subject: [PATCH 03/11] build(logging): move libs:logging to android+jvm Timber, SystemClock and android.database.SQLException move behind PlatformLog actuals; FileTree stays in androidMain and plugs in through LogFileStore. The library had debug and release values for NOTIFY_ERRORS, which a single-variant KMP target can't carry, so the app now sets BuildFlags from its own BuildConfig at startup. --- apps/flipcash/app/build.gradle.kts | 6 ++ .../app/internal/startup/TraceInitializer.kt | 4 ++ libs/logging/build.gradle.kts | 47 ++++++--------- .../kotlin/com/getcode/utils/FileTree.kt | 12 ++-- .../com/getcode/utils/PlatformLog.android.kt | 32 +++++++++++ .../kotlin/com/getcode/utils/BuildFlags.kt | 18 ++++++ .../kotlin/com/getcode/utils/ErrorUtils.kt | 9 +-- .../kotlin/com/getcode/utils/Logging.kt | 57 +++++++++---------- .../kotlin/com/getcode/utils/PlatformLog.kt | 34 +++++++++++ .../com/getcode/utils/PlatformLog.jvm.kt | 24 ++++++++ 10 files changed, 173 insertions(+), 70 deletions(-) create mode 100644 libs/logging/src/androidMain/kotlin/com/getcode/utils/PlatformLog.android.kt create mode 100644 libs/logging/src/commonMain/kotlin/com/getcode/utils/BuildFlags.kt create mode 100644 libs/logging/src/commonMain/kotlin/com/getcode/utils/PlatformLog.kt create mode 100644 libs/logging/src/jvmMain/kotlin/com/getcode/utils/PlatformLog.jvm.kt diff --git a/apps/flipcash/app/build.gradle.kts b/apps/flipcash/app/build.gradle.kts index 42b2d1e676..8c621ee69d 100644 --- a/apps/flipcash/app/build.gradle.kts +++ b/apps/flipcash/app/build.gradle.kts @@ -86,12 +86,18 @@ android { buildTypes { getByName("release") { resValue("string", "applicationId", appNamespace) + buildConfigField("Boolean", "NOTIFY_ERRORS", "true") isMinifyEnabled = !skipExpensiveReleaseTasks isShrinkResources = !skipExpensiveReleaseTasks proguardFiles(getDefaultProguardFile("proguard-android-optimize.txt"), "proguard-rules.pro") } getByName("debug") { resValue("string", "applicationId", appNamespace) + buildConfigField( + "Boolean", + "NOTIFY_ERRORS", + tryReadProperty(rootProject.rootDir, "NOTIFY_ERRORS", "false") + ) signingConfig = signingConfigs.getByName("contributors") val debugMinifyEnabled = tryReadProperty(rootProject.rootDir, "DEBUG_MINIFY", "false").toBooleanStrictOrNull() ?: false diff --git a/apps/flipcash/app/src/main/kotlin/com/flipcash/app/internal/startup/TraceInitializer.kt b/apps/flipcash/app/src/main/kotlin/com/flipcash/app/internal/startup/TraceInitializer.kt index 57831c3500..667f244df9 100644 --- a/apps/flipcash/app/src/main/kotlin/com/flipcash/app/internal/startup/TraceInitializer.kt +++ b/apps/flipcash/app/src/main/kotlin/com/flipcash/app/internal/startup/TraceInitializer.kt @@ -11,8 +11,10 @@ import com.flipcash.app.internal.debug.TestLab import com.flipcash.app.internal.debug.bugsnagReleaseStage import com.flipcash.app.updates.ReleaseStage import com.flipcash.app.updates.ReleaseStageProvider +import com.getcode.utils.BuildFlags import com.getcode.utils.ErrorUtils import com.getcode.utils.TraceManager +import com.getcode.utils.initialize import dagger.hilt.EntryPoint import dagger.hilt.InstallIn import dagger.hilt.android.EntryPointAccessors @@ -28,6 +30,8 @@ class TraceInitializer: Initializer { } override fun create(context: Context) { + BuildFlags.isDebug = BuildConfig.DEBUG + BuildFlags.notifyErrors = BuildConfig.NOTIFY_ERRORS TraceManager.initialize(context) if (BuildConfig.DEBUG) { diff --git a/libs/logging/build.gradle.kts b/libs/logging/build.gradle.kts index 6baf81d2b1..91d7fd6e48 100644 --- a/libs/logging/build.gradle.kts +++ b/libs/logging/build.gradle.kts @@ -1,37 +1,26 @@ plugins { - alias(libs.plugins.flipcash.android.library) + alias(libs.plugins.flipcash.kmp.app.library) } -android { - namespace = "${Gradle.codeNamespace}.libs.logging" +kotlin { + android { + namespace = "${Gradle.codeNamespace}.libs.logging" + } - buildTypes { - getByName("release") { - buildConfigField("Boolean", "NOTIFY_ERRORS", "true") + sourceSets { + commonMain.dependencies { + implementation(libs.androidx.annotation) + implementation(libs.grpc.kotlin) + implementation(project(":libs:messaging")) + implementation(libs.ocp.client.protocol) + implementation(libs.flipcash2.client.protocol) } - getByName("debug") { - buildConfigField( - "Boolean", - "NOTIFY_ERRORS", - tryReadProperty(rootProject.rootDir, "NOTIFY_ERRORS", "false") - ) + androidMain.dependencies { + api(libs.timber) + } + getByName("androidHostTest").dependencies { + implementation(kotlin("test")) + implementation(libs.robolectric) } } - - buildFeatures { - buildConfig = true - } -} - -dependencies { - testImplementation(kotlin("test")) - testImplementation(libs.robolectric) - - api(libs.timber) - implementation(libs.androidx.annotation) - implementation(libs.grpc.kotlin) - implementation(project(":libs:messaging")) - - implementation(libs.ocp.client.protocol) - implementation(libs.flipcash2.client.protocol) } diff --git a/libs/logging/src/androidMain/kotlin/com/getcode/utils/FileTree.kt b/libs/logging/src/androidMain/kotlin/com/getcode/utils/FileTree.kt index 19f9437eec..e7405364a6 100644 --- a/libs/logging/src/androidMain/kotlin/com/getcode/utils/FileTree.kt +++ b/libs/logging/src/androidMain/kotlin/com/getcode/utils/FileTree.kt @@ -24,7 +24,7 @@ import java.util.TimeZone class FileTree( context: Context, private val plugins: () -> List, -) : Timber.Tree() { +) : Timber.Tree(), LogFileStore { private val traceDir = File(context.filesDir, "traces").apply { mkdirs() } private val logFile = File(traceDir, "trace.log") @@ -46,7 +46,7 @@ class FileTree( * immediately receive the most recent [LOG_STREAM_BUFFER_CAPACITY] lines * via replay cache, so the in-app viewer opens already populated. */ - val logStream: SharedFlow = logFlow.asSharedFlow() + override val logStream: SharedFlow = logFlow.asSharedFlow() init { // Clear previous session logs on cold launch @@ -95,7 +95,7 @@ class FileTree( logFlow.tryEmit(processed!!) } - fun getLogFile(includeHeader: Boolean = true): File? { + override fun getLogFile(includeHeader: Boolean): File? { if (!logFile.exists() || logFile.length() == 0L) return null synchronized(lock) { exportFile.delete() @@ -112,7 +112,7 @@ class FileTree( } @OptIn(ExperimentalCoroutinesApi::class) - fun clearLogs() { + override fun clearLogs() { synchronized(lock) { logFile.delete() exportFile.delete() @@ -121,6 +121,10 @@ class FileTree( logFlow.resetReplayCache() } + override fun close() { + Timber.uproot(this) + } + companion object { /** Max number of log lines retained in the live stream's replay cache. */ const val LOG_STREAM_BUFFER_CAPACITY = 1000 diff --git a/libs/logging/src/androidMain/kotlin/com/getcode/utils/PlatformLog.android.kt b/libs/logging/src/androidMain/kotlin/com/getcode/utils/PlatformLog.android.kt new file mode 100644 index 0000000000..bb9eab709a --- /dev/null +++ b/libs/logging/src/androidMain/kotlin/com/getcode/utils/PlatformLog.android.kt @@ -0,0 +1,32 @@ +package com.getcode.utils + +import android.content.Context +import android.database.SQLException +import android.os.SystemClock +import timber.log.Timber + +internal actual object PlatformLog { + actual fun log(priority: Int, tag: String?, message: String) { + val tree = if (tag == null) Timber else Timber.tag(tag) + tree.log(priority, message) + } + + actual fun error(throwable: Throwable) { + Timber.e(throwable) + } +} + +internal actual fun isPlatformSqlException(throwable: Throwable): Boolean = throwable is SQLException + +internal actual fun elapsedRealtimeMillis(): Long = SystemClock.elapsedRealtime() + +/** + * Plants a [FileTree] and initializes [TraceManager] with it. Safe to call multiple times; + * subsequent calls are no-ops. + */ +fun TraceManager.initialize(context: Context) { + if (initialized) return + val tree = FileTree(context, plugins = { plugins }) + Timber.plant(tree) + initialize(tree) +} diff --git a/libs/logging/src/commonMain/kotlin/com/getcode/utils/BuildFlags.kt b/libs/logging/src/commonMain/kotlin/com/getcode/utils/BuildFlags.kt new file mode 100644 index 0000000000..92a82a0118 --- /dev/null +++ b/libs/logging/src/commonMain/kotlin/com/getcode/utils/BuildFlags.kt @@ -0,0 +1,18 @@ +package com.getcode.utils + +/** + * Build-type flags the app sets at startup. + * + * KMP library modules have a single variant and no `BuildConfig`, so a value that used to differ + * between a library's debug and release builds is read here instead. Both default to the release + * value until the app sets them. + */ +object BuildFlags { + /** What a library's `BuildConfig.DEBUG` used to report. */ + @Volatile + var isDebug: Boolean = false + + /** Whether [ErrorUtils] forwards errors to its reporters. */ + @Volatile + var notifyErrors: Boolean = true +} diff --git a/libs/logging/src/commonMain/kotlin/com/getcode/utils/ErrorUtils.kt b/libs/logging/src/commonMain/kotlin/com/getcode/utils/ErrorUtils.kt index 5fa512d292..01a3d10e75 100644 --- a/libs/logging/src/commonMain/kotlin/com/getcode/utils/ErrorUtils.kt +++ b/libs/logging/src/commonMain/kotlin/com/getcode/utils/ErrorUtils.kt @@ -1,14 +1,11 @@ package com.getcode.utils -import android.database.SQLException -import com.getcode.libs.logging.BuildConfig import com.getcode.manager.TopBarManager import io.grpc.Status import io.grpc.StatusException import io.grpc.StatusRuntimeException import kotlinx.coroutines.CancellationException import kotlinx.coroutines.TimeoutCancellationException -import timber.log.Timber import java.net.ConnectException import java.net.SocketException import java.net.UnknownHostException @@ -48,7 +45,7 @@ object ErrorUtils { if (isIgnoredGrpcStatus(throwableCause)) return - Timber.e(throwable) + PlatformLog.error(throwable) if (isRuntimeError(throwable)) return @@ -61,7 +58,7 @@ object ErrorUtils { ) } - if (BuildConfig.NOTIFY_ERRORS && shouldReport(throwable, throwableCause)) { + if (BuildFlags.notifyErrors && shouldReport(throwable, throwableCause)) { val isNotifiable = when { throwable is ConditionallyNotifiable -> throwable.isNotifiable throwableCause is ConditionallyNotifiable -> throwableCause.isNotifiable @@ -146,7 +143,7 @@ object ErrorUtils { throwable.cause is StatusException private fun isSuppressibleError(throwable: Throwable): Boolean = - throwable is SQLException || throwable is SuppressibleException || throwable is TimeoutCancellationException + isPlatformSqlException(throwable) || throwable is SuppressibleException || throwable is TimeoutCancellationException } fun Throwable.isNetworkError(): Boolean = diff --git a/libs/logging/src/commonMain/kotlin/com/getcode/utils/Logging.kt b/libs/logging/src/commonMain/kotlin/com/getcode/utils/Logging.kt index 636d9e5681..e4e39fe8b2 100644 --- a/libs/logging/src/commonMain/kotlin/com/getcode/utils/Logging.kt +++ b/libs/logging/src/commonMain/kotlin/com/getcode/utils/Logging.kt @@ -1,13 +1,9 @@ package com.getcode.utils -import android.annotation.SuppressLint -import android.content.Context -import android.os.SystemClock import kotlinx.coroutines.channels.BufferOverflow import kotlinx.coroutines.flow.MutableSharedFlow import kotlinx.coroutines.flow.SharedFlow import kotlinx.coroutines.flow.asSharedFlow -import timber.log.Timber import java.io.File import kotlin.time.Duration import kotlin.time.TimeSource @@ -57,7 +53,7 @@ sealed interface TraceType { * - [BreadcrumbSink]s — forward structured breadcrumbs to external services (e.g. Bugsnag). */ object TraceManager { - private var fileTree: FileTree? = null + private var logFile: LogFileStore? = null /** `true` after [initialize] has been called. [trace] is a no-op until then. */ var initialized: Boolean = false @@ -100,13 +96,13 @@ object TraceManager { fun recordClockDrift(driftMillis: Long, source: ClockSource) { clockDriftMillis = driftMillis clockDriftSource = source - clockDriftSyncElapsedRealtime = SystemClock.elapsedRealtime() + clockDriftSyncElapsedRealtime = elapsedRealtimeMillis() } /** Latest clock-drift measurement, or `null` if no server time has been observed yet. */ fun clockDriftSnapshot(): ClockDriftSnapshot? { val drift = clockDriftMillis ?: return null - val ageMillis = clockDriftSyncElapsedRealtime?.let { SystemClock.elapsedRealtime() - it } + val ageMillis = clockDriftSyncElapsedRealtime?.let { elapsedRealtimeMillis() - it } return ClockDriftSnapshot( driftMillis = drift, source = clockDriftSource, @@ -127,22 +123,22 @@ object TraceManager { fun sinks(): List = breadcrumbSinks /** - * Bootstraps Timber with a [FileTree], plants default plugins - * ([PiiMaskingPlugin], [RpcBodyFilterPlugin]), and marks the manager - * as [initialized]. Safe to call multiple times; subsequent calls are no-ops. + * Plants default plugins ([PiiMaskingPlugin], [RpcBodyFilterPlugin]), keeps [logFile] for + * [getLogFile], [logStream] and [clearLogs], and marks the manager as [initialized]. Safe to + * call multiple times; subsequent calls are no-ops. + * + * Android calls this through `TraceManager.initialize(context)`, which supplies a FileTree. */ - fun initialize(context: Context) { + fun initialize(logFile: LogFileStore? = null) { if (initialized) return - val tree = FileTree(context, plugins = { plugins }) - fileTree = tree + this.logFile = logFile addPlugin(PiiMaskingPlugin()) addPlugin(RpcBodyFilterPlugin()) - Timber.plant(tree) initialized = true } /** Returns the current log file, or `null` if not yet initialized. */ - fun getLogFile(includeHeader: Boolean = true): File? = fileTree?.getLogFile(includeHeader) + fun getLogFile(includeHeader: Boolean = true): File? = logFile?.getLogFile(includeHeader) /** * Hot stream of processed log lines for live in-app viewers. Emits only @@ -150,7 +146,7 @@ object TraceManager { * empty [SharedFlow] that will never emit. */ val logStream: SharedFlow - get() = fileTree?.logStream ?: EmptyLogStream + get() = logFile?.logStream ?: EmptyLogStream private val EmptyLogStream: SharedFlow = MutableSharedFlow( replay = 0, @@ -159,14 +155,14 @@ object TraceManager { ).asSharedFlow() fun clearLogs() { - fileTree?.clearLogs() + logFile?.clearLogs() } /** Tears down all state. Intended for tests only. */ @androidx.annotation.VisibleForTesting internal fun reset() { - fileTree?.let { Timber.uproot(it) } - fileTree = null + logFile?.close() + logFile = null initialized = false plugins.clear() breadcrumbSinks.clear() @@ -194,7 +190,7 @@ enum class ClockSource { } /** - * Primary logging entry point. Writes [message] to Timber and forwards a + * Primary logging entry point. Writes [message] to the platform log (Timber on Android) and forwards a * breadcrumb to every registered [BreadcrumbSink]. * * No-op if [TraceManager] has not been [initialized][TraceManager.initialize], @@ -206,7 +202,6 @@ enum class ClockSource { * @param error If non-null, forwarded to [ErrorUtils.handleError] after logging. * @param type Categorization that determines the Timber log level. */ -@SuppressLint("TimberExceptionLogging") fun trace( message: String, tag: String? = null, @@ -217,7 +212,6 @@ fun trace( if (!TraceManager.initialized) return val tagBlock = tag?.let { "[$it] " } - val tree = if (tagBlock == null) Timber else Timber.tag(tagBlock) val metadataMap = metadata { metadata() } @@ -228,16 +222,17 @@ fun trace( message } - when (type) { - TraceType.Error -> tree.e(logMessage) - TraceType.Log -> tree.d(logMessage) - TraceType.Navigation -> tree.d(logMessage) - TraceType.Network -> tree.i(logMessage) - TraceType.Process -> tree.d(logMessage) - TraceType.Silent -> tree.d(logMessage) - TraceType.StateChange -> tree.d(logMessage) - TraceType.User -> tree.d(logMessage) + val priority = when (type) { + TraceType.Error -> LogPriority.ERROR + TraceType.Log -> LogPriority.DEBUG + TraceType.Navigation -> LogPriority.DEBUG + TraceType.Network -> LogPriority.INFO + TraceType.Process -> LogPriority.DEBUG + TraceType.Silent -> LogPriority.DEBUG + TraceType.StateChange -> LogPriority.DEBUG + TraceType.User -> LogPriority.DEBUG } + PlatformLog.log(priority, tagBlock, logMessage) val rawBreadcrumb = if (tag != null) "$tagBlock $message" else message val sinks = TraceManager.sinks() diff --git a/libs/logging/src/commonMain/kotlin/com/getcode/utils/PlatformLog.kt b/libs/logging/src/commonMain/kotlin/com/getcode/utils/PlatformLog.kt new file mode 100644 index 0000000000..aa2588a5bf --- /dev/null +++ b/libs/logging/src/commonMain/kotlin/com/getcode/utils/PlatformLog.kt @@ -0,0 +1,34 @@ +package com.getcode.utils + +import kotlinx.coroutines.flow.SharedFlow +import java.io.File + +/** Log levels, numbered as `android.util.Log` numbers them so Android passes them straight through. */ +object LogPriority { + const val VERBOSE = 2 + const val DEBUG = 3 + const val INFO = 4 + const val WARN = 5 + const val ERROR = 6 +} + +/** Where [trace] and [ErrorUtils] write: Timber on Android, standard error on the desktop JVM. */ +internal expect object PlatformLog { + fun log(priority: Int, tag: String?, message: String) + fun error(throwable: Throwable) +} + +/** The platform's `SQLException`, which [ErrorUtils] treats as suppressible. */ +internal expect fun isPlatformSqlException(throwable: Throwable): Boolean + +/** Milliseconds on a clock that keeps running while the device sleeps. */ +internal expect fun elapsedRealtimeMillis(): Long + +/** The on-disk log behind [TraceManager.getLogFile], [TraceManager.logStream] and [TraceManager.clearLogs]. */ +interface LogFileStore { + val logStream: SharedFlow + fun getLogFile(includeHeader: Boolean = true): File? + fun clearLogs() + /** Stops writing to the log. Called when [TraceManager] is reset. */ + fun close() +} diff --git a/libs/logging/src/jvmMain/kotlin/com/getcode/utils/PlatformLog.jvm.kt b/libs/logging/src/jvmMain/kotlin/com/getcode/utils/PlatformLog.jvm.kt new file mode 100644 index 0000000000..f91e3777b3 --- /dev/null +++ b/libs/logging/src/jvmMain/kotlin/com/getcode/utils/PlatformLog.jvm.kt @@ -0,0 +1,24 @@ +package com.getcode.utils + +import java.sql.SQLException + +internal actual object PlatformLog { + actual fun log(priority: Int, tag: String?, message: String) { + val level = when (priority) { + LogPriority.VERBOSE -> "V" + LogPriority.DEBUG -> "D" + LogPriority.INFO -> "I" + LogPriority.WARN -> "W" + else -> "E" + } + System.err.println("$level ${tag.orEmpty()}$message") + } + + actual fun error(throwable: Throwable) { + throwable.printStackTrace() + } +} + +internal actual fun isPlatformSqlException(throwable: Throwable): Boolean = throwable is SQLException + +internal actual fun elapsedRealtimeMillis(): Long = System.nanoTime() / 1_000_000 From 6e5146a71365fc5c66d48285be2ca59f3f1b9ac7 Mon Sep 17 00:00:00 2001 From: Brandon McAnsh Date: Fri, 23 Oct 2026 15:57:53 -0400 Subject: [PATCH 04/11] build(resources): move ui:resources to android + jvm ResourceHelper keeps the members that return plain types in commonMain. The four that return Drawable, Typeface, DisplayMetrics and File move to AndroidResourceHelper, which only the access-key screens use; the app binds both. FakeResourceHelper moves from testFixtures to :ui:resources:test-fixtures, since the KMP library target has no testFixtures. --- .../com/flipcash/app/inject/AppModule.kt | 10 ++++- .../internal/BackupKeyScreenViewModel.kt | 4 +- apps/flipcash/features/cash/build.gradle.kts | 2 +- .../contact-verification/build.gradle.kts | 2 +- apps/flipcash/features/login/build.gradle.kts | 2 +- .../login/internal/LoginAccessKeyViewModel.kt | 4 +- apps/flipcash/features/menu/build.gradle.kts | 2 +- .../features/myaccount/build.gradle.kts | 2 +- .../features/tipping/build.gradle.kts | 2 +- .../features/transactions/build.gradle.kts | 2 +- .../features/user-profile/build.gradle.kts | 2 +- .../features/withdrawal/build.gradle.kts | 2 +- .../app/accesskey/BaseAccessKeyViewModel.kt | 4 +- apps/flipcash/shared/session/build.gradle.kts | 2 +- .../shared/shareable/build.gradle.kts | 2 +- apps/flipcash/shared/tokens/build.gradle.kts | 2 +- .../transaction-history/build.gradle.kts | 2 +- settings.gradle.kts | 1 + ui/resources/build.gradle.kts | 39 +++++++++++------- .../util/resources/AndroidResourceHelper.kt | 19 +++++++++ .../util/resources/AndroidResources.kt | 2 +- .../util/resources/AndroidSettingsHelper.kt | 0 .../getcode/util/resources/ContentReader.kt | 0 .../res/drawable-nodpi/ic_bill_globe.webp | Bin .../res/drawable-nodpi/ic_bill_grid.webp | Bin .../res/drawable-nodpi/ic_bill_hexagons.webp | Bin .../ic_bill_security_strip.webp | Bin .../res/drawable-nodpi/ic_bill_waves.webp | Bin .../res/drawable-nodpi/ic_flag_ad.webp | Bin .../res/drawable-nodpi/ic_flag_ae.webp | Bin .../res/drawable-nodpi/ic_flag_af.webp | Bin .../res/drawable-nodpi/ic_flag_ag.webp | Bin .../res/drawable-nodpi/ic_flag_ai.webp | Bin .../res/drawable-nodpi/ic_flag_al.webp | Bin .../res/drawable-nodpi/ic_flag_am.webp | Bin .../res/drawable-nodpi/ic_flag_an.webp | Bin .../res/drawable-nodpi/ic_flag_ao.webp | Bin .../res/drawable-nodpi/ic_flag_aq.webp | Bin .../res/drawable-nodpi/ic_flag_ar.webp | Bin .../res/drawable-nodpi/ic_flag_as.webp | Bin .../res/drawable-nodpi/ic_flag_at.webp | Bin .../res/drawable-nodpi/ic_flag_au.webp | Bin .../res/drawable-nodpi/ic_flag_aw.webp | Bin .../res/drawable-nodpi/ic_flag_ax.webp | Bin .../res/drawable-nodpi/ic_flag_az.webp | Bin .../res/drawable-nodpi/ic_flag_ba.webp | Bin .../res/drawable-nodpi/ic_flag_bb.webp | Bin .../res/drawable-nodpi/ic_flag_bd.webp | Bin .../res/drawable-nodpi/ic_flag_be.webp | Bin .../res/drawable-nodpi/ic_flag_bf.webp | Bin .../res/drawable-nodpi/ic_flag_bg.webp | Bin .../res/drawable-nodpi/ic_flag_bh.webp | Bin .../res/drawable-nodpi/ic_flag_bi.webp | Bin .../res/drawable-nodpi/ic_flag_bj.webp | Bin .../res/drawable-nodpi/ic_flag_bl.webp | Bin .../res/drawable-nodpi/ic_flag_bm.webp | Bin .../res/drawable-nodpi/ic_flag_bn.webp | Bin .../res/drawable-nodpi/ic_flag_bo.webp | Bin .../res/drawable-nodpi/ic_flag_bq.webp | Bin .../res/drawable-nodpi/ic_flag_br.webp | Bin .../res/drawable-nodpi/ic_flag_bs.webp | Bin .../res/drawable-nodpi/ic_flag_bt.webp | Bin .../res/drawable-nodpi/ic_flag_bv.webp | Bin .../res/drawable-nodpi/ic_flag_bw.webp | Bin .../res/drawable-nodpi/ic_flag_by.webp | Bin .../res/drawable-nodpi/ic_flag_bz.webp | Bin .../res/drawable-nodpi/ic_flag_ca.webp | Bin .../res/drawable-nodpi/ic_flag_cc.webp | Bin .../res/drawable-nodpi/ic_flag_cd.webp | Bin .../res/drawable-nodpi/ic_flag_cf.webp | Bin .../res/drawable-nodpi/ic_flag_cg.webp | Bin .../res/drawable-nodpi/ic_flag_ch.webp | Bin .../res/drawable-nodpi/ic_flag_ci.webp | Bin .../res/drawable-nodpi/ic_flag_ck.webp | Bin .../res/drawable-nodpi/ic_flag_cl.webp | Bin .../res/drawable-nodpi/ic_flag_cm.webp | Bin .../res/drawable-nodpi/ic_flag_cn.webp | Bin .../res/drawable-nodpi/ic_flag_co.webp | Bin .../res/drawable-nodpi/ic_flag_cr.webp | Bin .../res/drawable-nodpi/ic_flag_cu.webp | Bin .../res/drawable-nodpi/ic_flag_cv.webp | Bin .../res/drawable-nodpi/ic_flag_cw.webp | Bin .../res/drawable-nodpi/ic_flag_cx.webp | Bin .../res/drawable-nodpi/ic_flag_cy.webp | Bin .../res/drawable-nodpi/ic_flag_cz.webp | Bin .../res/drawable-nodpi/ic_flag_de.webp | Bin .../res/drawable-nodpi/ic_flag_dj.webp | Bin .../res/drawable-nodpi/ic_flag_dk.webp | Bin .../res/drawable-nodpi/ic_flag_dm.webp | Bin .../res/drawable-nodpi/ic_flag_do.webp | Bin .../res/drawable-nodpi/ic_flag_dz.webp | Bin .../res/drawable-nodpi/ic_flag_ec.webp | Bin .../res/drawable-nodpi/ic_flag_ee.webp | Bin .../res/drawable-nodpi/ic_flag_eg.webp | Bin .../res/drawable-nodpi/ic_flag_eh.webp | Bin .../res/drawable-nodpi/ic_flag_eo.webp | Bin .../res/drawable-nodpi/ic_flag_er.webp | Bin .../res/drawable-nodpi/ic_flag_es.webp | Bin .../res/drawable-nodpi/ic_flag_et.webp | Bin .../res/drawable-nodpi/ic_flag_eu.webp | Bin .../res/drawable-nodpi/ic_flag_fi.webp | Bin .../res/drawable-nodpi/ic_flag_fj.webp | Bin .../res/drawable-nodpi/ic_flag_fk.webp | Bin .../res/drawable-nodpi/ic_flag_fm.webp | Bin .../res/drawable-nodpi/ic_flag_fo.webp | Bin .../res/drawable-nodpi/ic_flag_fr.webp | Bin .../res/drawable-nodpi/ic_flag_ga.webp | Bin .../res/drawable-nodpi/ic_flag_gb.webp | Bin .../res/drawable-nodpi/ic_flag_gd.webp | Bin .../res/drawable-nodpi/ic_flag_ge.webp | Bin .../res/drawable-nodpi/ic_flag_gf.webp | Bin .../res/drawable-nodpi/ic_flag_gg.webp | Bin .../res/drawable-nodpi/ic_flag_gh.webp | Bin .../res/drawable-nodpi/ic_flag_gi.webp | Bin .../res/drawable-nodpi/ic_flag_gl.webp | Bin .../res/drawable-nodpi/ic_flag_gm.webp | Bin .../res/drawable-nodpi/ic_flag_gn.webp | Bin .../res/drawable-nodpi/ic_flag_gp.webp | Bin .../res/drawable-nodpi/ic_flag_gq.webp | Bin .../res/drawable-nodpi/ic_flag_gr.webp | Bin .../res/drawable-nodpi/ic_flag_gs.webp | Bin .../res/drawable-nodpi/ic_flag_gt.webp | Bin .../res/drawable-nodpi/ic_flag_gu.webp | Bin .../res/drawable-nodpi/ic_flag_gw.webp | Bin .../res/drawable-nodpi/ic_flag_gy.webp | Bin .../res/drawable-nodpi/ic_flag_hk.webp | Bin .../res/drawable-nodpi/ic_flag_hm.webp | Bin .../res/drawable-nodpi/ic_flag_hn.webp | Bin .../res/drawable-nodpi/ic_flag_hr.webp | Bin .../res/drawable-nodpi/ic_flag_ht.webp | Bin .../res/drawable-nodpi/ic_flag_hu.webp | Bin .../res/drawable-nodpi/ic_flag_id.webp | Bin .../res/drawable-nodpi/ic_flag_ie.webp | Bin .../res/drawable-nodpi/ic_flag_il.webp | Bin .../res/drawable-nodpi/ic_flag_im.webp | Bin .../res/drawable-nodpi/ic_flag_in.webp | Bin .../res/drawable-nodpi/ic_flag_io.webp | Bin .../res/drawable-nodpi/ic_flag_iq.webp | Bin .../res/drawable-nodpi/ic_flag_ir.webp | Bin .../res/drawable-nodpi/ic_flag_is.webp | Bin .../res/drawable-nodpi/ic_flag_it.webp | Bin .../res/drawable-nodpi/ic_flag_je.webp | Bin .../res/drawable-nodpi/ic_flag_jm.webp | Bin .../res/drawable-nodpi/ic_flag_jo.webp | Bin .../res/drawable-nodpi/ic_flag_jp.webp | Bin .../res/drawable-nodpi/ic_flag_ke.webp | Bin .../res/drawable-nodpi/ic_flag_kg.webp | Bin .../res/drawable-nodpi/ic_flag_kh.webp | Bin .../res/drawable-nodpi/ic_flag_ki.webp | Bin .../res/drawable-nodpi/ic_flag_km.webp | Bin .../res/drawable-nodpi/ic_flag_kn.webp | Bin .../res/drawable-nodpi/ic_flag_kp.webp | Bin .../res/drawable-nodpi/ic_flag_kr.webp | Bin .../res/drawable-nodpi/ic_flag_kw.webp | Bin .../res/drawable-nodpi/ic_flag_ky.webp | Bin .../res/drawable-nodpi/ic_flag_kz.webp | Bin .../res/drawable-nodpi/ic_flag_la.webp | Bin .../res/drawable-nodpi/ic_flag_lb.webp | Bin .../res/drawable-nodpi/ic_flag_lc.webp | Bin .../res/drawable-nodpi/ic_flag_li.webp | Bin .../res/drawable-nodpi/ic_flag_lk.webp | Bin .../res/drawable-nodpi/ic_flag_lr.webp | Bin .../res/drawable-nodpi/ic_flag_ls.webp | Bin .../res/drawable-nodpi/ic_flag_lt.webp | Bin .../res/drawable-nodpi/ic_flag_lu.webp | Bin .../res/drawable-nodpi/ic_flag_lv.webp | Bin .../res/drawable-nodpi/ic_flag_ly.webp | Bin .../res/drawable-nodpi/ic_flag_ma.webp | Bin .../res/drawable-nodpi/ic_flag_mc.webp | Bin .../res/drawable-nodpi/ic_flag_md.webp | Bin .../res/drawable-nodpi/ic_flag_me.webp | Bin .../res/drawable-nodpi/ic_flag_mf.webp | Bin .../res/drawable-nodpi/ic_flag_mg.webp | Bin .../res/drawable-nodpi/ic_flag_mh.webp | Bin .../res/drawable-nodpi/ic_flag_mk.webp | Bin .../res/drawable-nodpi/ic_flag_ml.webp | Bin .../res/drawable-nodpi/ic_flag_mm.webp | Bin .../res/drawable-nodpi/ic_flag_mn.webp | Bin .../res/drawable-nodpi/ic_flag_mo.webp | Bin .../res/drawable-nodpi/ic_flag_mp.webp | Bin .../res/drawable-nodpi/ic_flag_mq.webp | Bin .../res/drawable-nodpi/ic_flag_mr.webp | Bin .../res/drawable-nodpi/ic_flag_ms.webp | Bin .../res/drawable-nodpi/ic_flag_mt.webp | Bin .../res/drawable-nodpi/ic_flag_mu.webp | Bin .../res/drawable-nodpi/ic_flag_mv.webp | Bin .../res/drawable-nodpi/ic_flag_mw.webp | Bin .../res/drawable-nodpi/ic_flag_mx.webp | Bin .../res/drawable-nodpi/ic_flag_my.webp | Bin .../res/drawable-nodpi/ic_flag_mz.webp | Bin .../res/drawable-nodpi/ic_flag_na.webp | Bin .../res/drawable-nodpi/ic_flag_nc.webp | Bin .../res/drawable-nodpi/ic_flag_ne.webp | Bin .../res/drawable-nodpi/ic_flag_nf.webp | Bin .../res/drawable-nodpi/ic_flag_ng.webp | Bin .../res/drawable-nodpi/ic_flag_ni.webp | Bin .../res/drawable-nodpi/ic_flag_nl.webp | Bin .../res/drawable-nodpi/ic_flag_no.webp | Bin .../res/drawable-nodpi/ic_flag_np.webp | Bin .../res/drawable-nodpi/ic_flag_nr.webp | Bin .../res/drawable-nodpi/ic_flag_nu.webp | Bin .../res/drawable-nodpi/ic_flag_nz.webp | Bin .../res/drawable-nodpi/ic_flag_om.webp | Bin .../res/drawable-nodpi/ic_flag_pa.webp | Bin .../res/drawable-nodpi/ic_flag_pe.webp | Bin .../res/drawable-nodpi/ic_flag_pf.webp | Bin .../res/drawable-nodpi/ic_flag_pg.webp | Bin .../res/drawable-nodpi/ic_flag_ph.webp | Bin .../res/drawable-nodpi/ic_flag_pk.webp | Bin .../res/drawable-nodpi/ic_flag_pl.webp | Bin .../res/drawable-nodpi/ic_flag_pm.webp | Bin .../res/drawable-nodpi/ic_flag_pn.webp | Bin .../res/drawable-nodpi/ic_flag_pr.webp | Bin .../res/drawable-nodpi/ic_flag_ps.webp | Bin .../res/drawable-nodpi/ic_flag_pt.webp | Bin .../res/drawable-nodpi/ic_flag_pw.webp | Bin .../res/drawable-nodpi/ic_flag_py.webp | Bin .../res/drawable-nodpi/ic_flag_qa.webp | Bin .../res/drawable-nodpi/ic_flag_re.webp | Bin .../res/drawable-nodpi/ic_flag_ro.webp | Bin .../res/drawable-nodpi/ic_flag_rs.webp | Bin .../res/drawable-nodpi/ic_flag_ru.webp | Bin .../res/drawable-nodpi/ic_flag_rw.webp | Bin .../res/drawable-nodpi/ic_flag_sa.webp | Bin .../res/drawable-nodpi/ic_flag_sb.webp | Bin .../res/drawable-nodpi/ic_flag_sc.webp | Bin .../res/drawable-nodpi/ic_flag_sd.webp | Bin .../res/drawable-nodpi/ic_flag_se.webp | Bin .../res/drawable-nodpi/ic_flag_sg.webp | Bin .../res/drawable-nodpi/ic_flag_sh.webp | Bin .../res/drawable-nodpi/ic_flag_si.webp | Bin .../res/drawable-nodpi/ic_flag_sj.webp | Bin .../res/drawable-nodpi/ic_flag_sk.webp | Bin .../res/drawable-nodpi/ic_flag_sl.webp | Bin .../res/drawable-nodpi/ic_flag_sm.webp | Bin .../res/drawable-nodpi/ic_flag_sn.webp | Bin .../res/drawable-nodpi/ic_flag_so.webp | Bin .../res/drawable-nodpi/ic_flag_sr.webp | Bin .../res/drawable-nodpi/ic_flag_ss.webp | Bin .../res/drawable-nodpi/ic_flag_st.webp | Bin .../res/drawable-nodpi/ic_flag_sv.webp | Bin .../res/drawable-nodpi/ic_flag_sx.webp | Bin .../res/drawable-nodpi/ic_flag_sy.webp | Bin .../res/drawable-nodpi/ic_flag_sz.webp | Bin .../res/drawable-nodpi/ic_flag_tc.webp | Bin .../res/drawable-nodpi/ic_flag_td.webp | Bin .../res/drawable-nodpi/ic_flag_tf.webp | Bin .../res/drawable-nodpi/ic_flag_tg.webp | Bin .../res/drawable-nodpi/ic_flag_th.webp | Bin .../res/drawable-nodpi/ic_flag_tj.webp | Bin .../res/drawable-nodpi/ic_flag_tk.webp | Bin .../res/drawable-nodpi/ic_flag_tl.webp | Bin .../res/drawable-nodpi/ic_flag_tm.webp | Bin .../res/drawable-nodpi/ic_flag_tn.webp | Bin .../res/drawable-nodpi/ic_flag_to.webp | Bin .../res/drawable-nodpi/ic_flag_tr.webp | Bin .../res/drawable-nodpi/ic_flag_tt.webp | Bin .../res/drawable-nodpi/ic_flag_tv.webp | Bin .../res/drawable-nodpi/ic_flag_tw.webp | Bin .../res/drawable-nodpi/ic_flag_tz.webp | Bin .../res/drawable-nodpi/ic_flag_ua.webp | Bin .../res/drawable-nodpi/ic_flag_ug.webp | Bin .../res/drawable-nodpi/ic_flag_um.webp | Bin .../res/drawable-nodpi/ic_flag_us.webp | Bin .../res/drawable-nodpi/ic_flag_uy.webp | Bin .../res/drawable-nodpi/ic_flag_uz.webp | Bin .../res/drawable-nodpi/ic_flag_va.webp | Bin .../res/drawable-nodpi/ic_flag_vc.webp | Bin .../res/drawable-nodpi/ic_flag_ve.webp | Bin .../res/drawable-nodpi/ic_flag_vg.webp | Bin .../res/drawable-nodpi/ic_flag_vi.webp | Bin .../res/drawable-nodpi/ic_flag_vn.webp | Bin .../res/drawable-nodpi/ic_flag_vu.webp | Bin .../res/drawable-nodpi/ic_flag_wf.webp | Bin .../res/drawable-nodpi/ic_flag_ws.webp | Bin .../res/drawable-nodpi/ic_flag_ye.webp | Bin .../res/drawable-nodpi/ic_flag_yt.webp | Bin .../res/drawable-nodpi/ic_flag_za.webp | Bin .../res/drawable-nodpi/ic_flag_zm.webp | Bin .../res/drawable-nodpi/ic_flag_zw.webp | Bin .../res/drawable-nodpi/ic_flag_zz.webp | Bin .../drawable-nodpi/ic_placeholder_user.webp | Bin .../res/drawable-nodpi/video_sell_kin_2x.webp | Bin .../res/drawable-xhdpi/ic_bill_grid.webp | Bin .../res/drawable-xhdpi/ic_bill_hexagons.webp | Bin .../res/drawable-xxhdpi/ic_bill_grid.webp | Bin .../res/drawable-xxhdpi/ic_bill_hexagons.webp | Bin .../res/drawable-xxxhdpi/ic_bill_grid.webp | Bin .../drawable-xxxhdpi/ic_bill_hexagons.webp | Bin .../res/drawable/ic_android_icon.xml | 0 .../res/drawable/ic_apple_icon.xml | 0 .../res/drawable/ic_arrow_back.xml | 0 .../res/drawable/ic_bezier_curve.xml | 0 .../res/drawable/ic_bill_close.xml | 0 .../res/drawable/ic_chain_link.xml | 0 .../res/drawable/ic_chat.xml | 0 .../res/drawable/ic_check.xml | 0 .../res/drawable/ic_check_circle.xml | 0 .../res/drawable/ic_check_white.xml | 0 .../res/drawable/ic_checked_blue.xml | 0 .../res/drawable/ic_checked_green.xml | 0 .../res/drawable/ic_chevron_left.xml | 0 .../res/drawable/ic_chevron_right.xml | 0 .../res/drawable/ic_copy.xml | 0 .../res/drawable/ic_crown.xml | 0 .../res/drawable/ic_delete.xml | 0 .../res/drawable/ic_dropdown.xml | 0 .../drawable/ic_exclamation_octagon_fill.xml | 0 .../res/drawable/ic_file_bend.xml | 0 .../res/drawable/ic_file_download.xml | 0 .../res/drawable/ic_kin_brand.xml | 0 .../res/drawable/ic_kin_red.xml | 0 .../res/drawable/ic_kin_white.xml | 0 .../res/drawable/ic_kin_white_outline.xml | 0 .../res/drawable/ic_kin_white_small.xml | 0 .../res/drawable/ic_remote_send.xml | 0 .../res/drawable/ic_settings_outline.xml | 0 .../res/drawable/ic_share_os.xml | 0 .../res/drawable/ic_twitter_x.xml | 0 .../res/drawable/ic_unchecked.xml | 0 .../res/drawable/ic_wifi_slash.xml | 0 .../res/drawable/ic_x_octagon_fill.xml | 0 .../res/drawable/ic_xmark_red.xml | 0 .../res/values/strings-localized.xml | 0 .../res/values/strings.xml | 0 .../getcode/util/resources/ResourceHelper.kt | 30 +++----------- .../getcode/util/resources/SettingsHelper.kt | 0 .../getcode/util/resources/icons/Delete.kt | 0 .../util/resources/icons/ImageVector.kt | 0 .../util/resources/icons/MessageCircle.kt | 0 ui/resources/test-fixtures/build.gradle.kts | 13 ++++++ .../util/resources/FakeResourceHelper.kt | 2 +- 332 files changed, 91 insertions(+), 63 deletions(-) create mode 100644 ui/resources/src/androidMain/kotlin/com/getcode/util/resources/AndroidResourceHelper.kt rename ui/resources/src/{main/java => androidMain/kotlin}/com/getcode/util/resources/AndroidResources.kt (99%) rename ui/resources/src/{main/java => androidMain/kotlin}/com/getcode/util/resources/AndroidSettingsHelper.kt (100%) rename ui/resources/src/{main/java => androidMain/kotlin}/com/getcode/util/resources/ContentReader.kt (100%) rename ui/resources/src/{main => androidMain}/res/drawable-nodpi/ic_bill_globe.webp (100%) rename ui/resources/src/{main => androidMain}/res/drawable-nodpi/ic_bill_grid.webp (100%) rename ui/resources/src/{main => androidMain}/res/drawable-nodpi/ic_bill_hexagons.webp (100%) rename ui/resources/src/{main => androidMain}/res/drawable-nodpi/ic_bill_security_strip.webp (100%) rename ui/resources/src/{main => androidMain}/res/drawable-nodpi/ic_bill_waves.webp (100%) rename ui/resources/src/{main => androidMain}/res/drawable-nodpi/ic_flag_ad.webp (100%) rename ui/resources/src/{main => androidMain}/res/drawable-nodpi/ic_flag_ae.webp (100%) rename ui/resources/src/{main => androidMain}/res/drawable-nodpi/ic_flag_af.webp (100%) rename ui/resources/src/{main => androidMain}/res/drawable-nodpi/ic_flag_ag.webp (100%) rename ui/resources/src/{main => androidMain}/res/drawable-nodpi/ic_flag_ai.webp (100%) rename ui/resources/src/{main => androidMain}/res/drawable-nodpi/ic_flag_al.webp (100%) rename ui/resources/src/{main => androidMain}/res/drawable-nodpi/ic_flag_am.webp (100%) rename ui/resources/src/{main => androidMain}/res/drawable-nodpi/ic_flag_an.webp (100%) rename ui/resources/src/{main => androidMain}/res/drawable-nodpi/ic_flag_ao.webp (100%) rename ui/resources/src/{main => androidMain}/res/drawable-nodpi/ic_flag_aq.webp (100%) rename ui/resources/src/{main => androidMain}/res/drawable-nodpi/ic_flag_ar.webp (100%) rename ui/resources/src/{main => androidMain}/res/drawable-nodpi/ic_flag_as.webp (100%) rename ui/resources/src/{main => androidMain}/res/drawable-nodpi/ic_flag_at.webp (100%) rename ui/resources/src/{main => androidMain}/res/drawable-nodpi/ic_flag_au.webp (100%) rename ui/resources/src/{main => androidMain}/res/drawable-nodpi/ic_flag_aw.webp (100%) rename ui/resources/src/{main => androidMain}/res/drawable-nodpi/ic_flag_ax.webp (100%) rename ui/resources/src/{main => androidMain}/res/drawable-nodpi/ic_flag_az.webp (100%) rename ui/resources/src/{main => androidMain}/res/drawable-nodpi/ic_flag_ba.webp (100%) rename ui/resources/src/{main => androidMain}/res/drawable-nodpi/ic_flag_bb.webp (100%) rename ui/resources/src/{main => androidMain}/res/drawable-nodpi/ic_flag_bd.webp (100%) rename ui/resources/src/{main => androidMain}/res/drawable-nodpi/ic_flag_be.webp (100%) rename ui/resources/src/{main => androidMain}/res/drawable-nodpi/ic_flag_bf.webp (100%) rename ui/resources/src/{main => androidMain}/res/drawable-nodpi/ic_flag_bg.webp (100%) rename ui/resources/src/{main => androidMain}/res/drawable-nodpi/ic_flag_bh.webp (100%) rename ui/resources/src/{main => androidMain}/res/drawable-nodpi/ic_flag_bi.webp (100%) rename ui/resources/src/{main => androidMain}/res/drawable-nodpi/ic_flag_bj.webp (100%) rename ui/resources/src/{main => androidMain}/res/drawable-nodpi/ic_flag_bl.webp (100%) rename ui/resources/src/{main => androidMain}/res/drawable-nodpi/ic_flag_bm.webp (100%) rename ui/resources/src/{main => androidMain}/res/drawable-nodpi/ic_flag_bn.webp (100%) rename ui/resources/src/{main => androidMain}/res/drawable-nodpi/ic_flag_bo.webp (100%) rename ui/resources/src/{main => androidMain}/res/drawable-nodpi/ic_flag_bq.webp (100%) rename ui/resources/src/{main => androidMain}/res/drawable-nodpi/ic_flag_br.webp (100%) rename ui/resources/src/{main => androidMain}/res/drawable-nodpi/ic_flag_bs.webp (100%) rename ui/resources/src/{main => androidMain}/res/drawable-nodpi/ic_flag_bt.webp (100%) rename ui/resources/src/{main => androidMain}/res/drawable-nodpi/ic_flag_bv.webp (100%) rename ui/resources/src/{main => androidMain}/res/drawable-nodpi/ic_flag_bw.webp (100%) rename ui/resources/src/{main => androidMain}/res/drawable-nodpi/ic_flag_by.webp (100%) rename ui/resources/src/{main => androidMain}/res/drawable-nodpi/ic_flag_bz.webp (100%) rename ui/resources/src/{main => androidMain}/res/drawable-nodpi/ic_flag_ca.webp (100%) rename ui/resources/src/{main => androidMain}/res/drawable-nodpi/ic_flag_cc.webp (100%) rename ui/resources/src/{main => androidMain}/res/drawable-nodpi/ic_flag_cd.webp (100%) rename ui/resources/src/{main => androidMain}/res/drawable-nodpi/ic_flag_cf.webp (100%) rename ui/resources/src/{main => androidMain}/res/drawable-nodpi/ic_flag_cg.webp (100%) rename ui/resources/src/{main => androidMain}/res/drawable-nodpi/ic_flag_ch.webp (100%) rename ui/resources/src/{main => androidMain}/res/drawable-nodpi/ic_flag_ci.webp (100%) rename ui/resources/src/{main => androidMain}/res/drawable-nodpi/ic_flag_ck.webp (100%) rename ui/resources/src/{main => androidMain}/res/drawable-nodpi/ic_flag_cl.webp (100%) rename ui/resources/src/{main => androidMain}/res/drawable-nodpi/ic_flag_cm.webp (100%) rename ui/resources/src/{main => androidMain}/res/drawable-nodpi/ic_flag_cn.webp (100%) rename ui/resources/src/{main => androidMain}/res/drawable-nodpi/ic_flag_co.webp (100%) rename ui/resources/src/{main => androidMain}/res/drawable-nodpi/ic_flag_cr.webp (100%) rename ui/resources/src/{main => androidMain}/res/drawable-nodpi/ic_flag_cu.webp (100%) rename ui/resources/src/{main => androidMain}/res/drawable-nodpi/ic_flag_cv.webp (100%) rename ui/resources/src/{main => androidMain}/res/drawable-nodpi/ic_flag_cw.webp (100%) rename ui/resources/src/{main => androidMain}/res/drawable-nodpi/ic_flag_cx.webp (100%) rename ui/resources/src/{main => androidMain}/res/drawable-nodpi/ic_flag_cy.webp (100%) rename ui/resources/src/{main => androidMain}/res/drawable-nodpi/ic_flag_cz.webp (100%) rename ui/resources/src/{main => androidMain}/res/drawable-nodpi/ic_flag_de.webp (100%) rename ui/resources/src/{main => androidMain}/res/drawable-nodpi/ic_flag_dj.webp (100%) rename ui/resources/src/{main => androidMain}/res/drawable-nodpi/ic_flag_dk.webp (100%) rename ui/resources/src/{main => androidMain}/res/drawable-nodpi/ic_flag_dm.webp (100%) rename ui/resources/src/{main => androidMain}/res/drawable-nodpi/ic_flag_do.webp (100%) rename ui/resources/src/{main => androidMain}/res/drawable-nodpi/ic_flag_dz.webp (100%) rename ui/resources/src/{main => androidMain}/res/drawable-nodpi/ic_flag_ec.webp (100%) rename ui/resources/src/{main => androidMain}/res/drawable-nodpi/ic_flag_ee.webp (100%) rename ui/resources/src/{main => androidMain}/res/drawable-nodpi/ic_flag_eg.webp (100%) rename ui/resources/src/{main => androidMain}/res/drawable-nodpi/ic_flag_eh.webp (100%) rename ui/resources/src/{main => androidMain}/res/drawable-nodpi/ic_flag_eo.webp (100%) rename ui/resources/src/{main => androidMain}/res/drawable-nodpi/ic_flag_er.webp (100%) rename ui/resources/src/{main => androidMain}/res/drawable-nodpi/ic_flag_es.webp (100%) rename ui/resources/src/{main => androidMain}/res/drawable-nodpi/ic_flag_et.webp (100%) rename ui/resources/src/{main => androidMain}/res/drawable-nodpi/ic_flag_eu.webp (100%) rename ui/resources/src/{main => androidMain}/res/drawable-nodpi/ic_flag_fi.webp (100%) rename ui/resources/src/{main => androidMain}/res/drawable-nodpi/ic_flag_fj.webp (100%) rename ui/resources/src/{main => androidMain}/res/drawable-nodpi/ic_flag_fk.webp (100%) rename ui/resources/src/{main => androidMain}/res/drawable-nodpi/ic_flag_fm.webp (100%) rename ui/resources/src/{main => androidMain}/res/drawable-nodpi/ic_flag_fo.webp (100%) rename ui/resources/src/{main => androidMain}/res/drawable-nodpi/ic_flag_fr.webp (100%) rename ui/resources/src/{main => androidMain}/res/drawable-nodpi/ic_flag_ga.webp (100%) rename ui/resources/src/{main => androidMain}/res/drawable-nodpi/ic_flag_gb.webp (100%) rename ui/resources/src/{main => androidMain}/res/drawable-nodpi/ic_flag_gd.webp (100%) rename ui/resources/src/{main => androidMain}/res/drawable-nodpi/ic_flag_ge.webp (100%) rename ui/resources/src/{main => androidMain}/res/drawable-nodpi/ic_flag_gf.webp (100%) rename ui/resources/src/{main => androidMain}/res/drawable-nodpi/ic_flag_gg.webp (100%) rename ui/resources/src/{main => androidMain}/res/drawable-nodpi/ic_flag_gh.webp (100%) rename ui/resources/src/{main => androidMain}/res/drawable-nodpi/ic_flag_gi.webp (100%) rename ui/resources/src/{main => androidMain}/res/drawable-nodpi/ic_flag_gl.webp (100%) rename ui/resources/src/{main => androidMain}/res/drawable-nodpi/ic_flag_gm.webp (100%) rename ui/resources/src/{main => androidMain}/res/drawable-nodpi/ic_flag_gn.webp (100%) rename ui/resources/src/{main => androidMain}/res/drawable-nodpi/ic_flag_gp.webp (100%) rename ui/resources/src/{main => androidMain}/res/drawable-nodpi/ic_flag_gq.webp (100%) rename ui/resources/src/{main => androidMain}/res/drawable-nodpi/ic_flag_gr.webp (100%) rename ui/resources/src/{main => androidMain}/res/drawable-nodpi/ic_flag_gs.webp (100%) rename ui/resources/src/{main => androidMain}/res/drawable-nodpi/ic_flag_gt.webp (100%) rename ui/resources/src/{main => androidMain}/res/drawable-nodpi/ic_flag_gu.webp (100%) rename ui/resources/src/{main => androidMain}/res/drawable-nodpi/ic_flag_gw.webp (100%) rename ui/resources/src/{main => androidMain}/res/drawable-nodpi/ic_flag_gy.webp (100%) rename ui/resources/src/{main => androidMain}/res/drawable-nodpi/ic_flag_hk.webp (100%) rename ui/resources/src/{main => androidMain}/res/drawable-nodpi/ic_flag_hm.webp (100%) rename ui/resources/src/{main => androidMain}/res/drawable-nodpi/ic_flag_hn.webp (100%) rename ui/resources/src/{main => androidMain}/res/drawable-nodpi/ic_flag_hr.webp (100%) rename ui/resources/src/{main => androidMain}/res/drawable-nodpi/ic_flag_ht.webp (100%) rename ui/resources/src/{main => androidMain}/res/drawable-nodpi/ic_flag_hu.webp (100%) rename ui/resources/src/{main => androidMain}/res/drawable-nodpi/ic_flag_id.webp (100%) rename ui/resources/src/{main => androidMain}/res/drawable-nodpi/ic_flag_ie.webp (100%) rename ui/resources/src/{main => androidMain}/res/drawable-nodpi/ic_flag_il.webp (100%) rename ui/resources/src/{main => androidMain}/res/drawable-nodpi/ic_flag_im.webp (100%) rename ui/resources/src/{main => androidMain}/res/drawable-nodpi/ic_flag_in.webp (100%) rename ui/resources/src/{main => androidMain}/res/drawable-nodpi/ic_flag_io.webp (100%) rename ui/resources/src/{main => androidMain}/res/drawable-nodpi/ic_flag_iq.webp (100%) rename ui/resources/src/{main => androidMain}/res/drawable-nodpi/ic_flag_ir.webp (100%) rename ui/resources/src/{main => androidMain}/res/drawable-nodpi/ic_flag_is.webp (100%) rename ui/resources/src/{main => androidMain}/res/drawable-nodpi/ic_flag_it.webp (100%) rename ui/resources/src/{main => androidMain}/res/drawable-nodpi/ic_flag_je.webp (100%) rename ui/resources/src/{main => androidMain}/res/drawable-nodpi/ic_flag_jm.webp (100%) rename ui/resources/src/{main => androidMain}/res/drawable-nodpi/ic_flag_jo.webp (100%) rename ui/resources/src/{main => androidMain}/res/drawable-nodpi/ic_flag_jp.webp (100%) rename ui/resources/src/{main => androidMain}/res/drawable-nodpi/ic_flag_ke.webp (100%) rename ui/resources/src/{main => androidMain}/res/drawable-nodpi/ic_flag_kg.webp (100%) rename ui/resources/src/{main => androidMain}/res/drawable-nodpi/ic_flag_kh.webp (100%) rename ui/resources/src/{main => androidMain}/res/drawable-nodpi/ic_flag_ki.webp (100%) rename ui/resources/src/{main => androidMain}/res/drawable-nodpi/ic_flag_km.webp (100%) rename ui/resources/src/{main => androidMain}/res/drawable-nodpi/ic_flag_kn.webp (100%) rename ui/resources/src/{main => androidMain}/res/drawable-nodpi/ic_flag_kp.webp (100%) rename ui/resources/src/{main => androidMain}/res/drawable-nodpi/ic_flag_kr.webp (100%) rename ui/resources/src/{main => androidMain}/res/drawable-nodpi/ic_flag_kw.webp (100%) rename ui/resources/src/{main => androidMain}/res/drawable-nodpi/ic_flag_ky.webp (100%) rename ui/resources/src/{main => androidMain}/res/drawable-nodpi/ic_flag_kz.webp (100%) rename ui/resources/src/{main => androidMain}/res/drawable-nodpi/ic_flag_la.webp (100%) rename ui/resources/src/{main => androidMain}/res/drawable-nodpi/ic_flag_lb.webp (100%) rename ui/resources/src/{main => androidMain}/res/drawable-nodpi/ic_flag_lc.webp (100%) rename ui/resources/src/{main => androidMain}/res/drawable-nodpi/ic_flag_li.webp (100%) rename ui/resources/src/{main => androidMain}/res/drawable-nodpi/ic_flag_lk.webp (100%) rename ui/resources/src/{main => androidMain}/res/drawable-nodpi/ic_flag_lr.webp (100%) rename ui/resources/src/{main => androidMain}/res/drawable-nodpi/ic_flag_ls.webp (100%) rename ui/resources/src/{main => androidMain}/res/drawable-nodpi/ic_flag_lt.webp (100%) rename ui/resources/src/{main => androidMain}/res/drawable-nodpi/ic_flag_lu.webp (100%) rename ui/resources/src/{main => androidMain}/res/drawable-nodpi/ic_flag_lv.webp (100%) rename ui/resources/src/{main => androidMain}/res/drawable-nodpi/ic_flag_ly.webp (100%) rename ui/resources/src/{main => androidMain}/res/drawable-nodpi/ic_flag_ma.webp (100%) rename ui/resources/src/{main => androidMain}/res/drawable-nodpi/ic_flag_mc.webp (100%) rename ui/resources/src/{main => androidMain}/res/drawable-nodpi/ic_flag_md.webp (100%) rename ui/resources/src/{main => androidMain}/res/drawable-nodpi/ic_flag_me.webp (100%) rename ui/resources/src/{main => androidMain}/res/drawable-nodpi/ic_flag_mf.webp (100%) rename ui/resources/src/{main => androidMain}/res/drawable-nodpi/ic_flag_mg.webp (100%) rename ui/resources/src/{main => androidMain}/res/drawable-nodpi/ic_flag_mh.webp (100%) rename ui/resources/src/{main => androidMain}/res/drawable-nodpi/ic_flag_mk.webp (100%) rename ui/resources/src/{main => androidMain}/res/drawable-nodpi/ic_flag_ml.webp (100%) rename ui/resources/src/{main => androidMain}/res/drawable-nodpi/ic_flag_mm.webp (100%) rename ui/resources/src/{main => androidMain}/res/drawable-nodpi/ic_flag_mn.webp (100%) rename ui/resources/src/{main => androidMain}/res/drawable-nodpi/ic_flag_mo.webp (100%) rename ui/resources/src/{main => androidMain}/res/drawable-nodpi/ic_flag_mp.webp (100%) rename ui/resources/src/{main => androidMain}/res/drawable-nodpi/ic_flag_mq.webp (100%) rename ui/resources/src/{main => androidMain}/res/drawable-nodpi/ic_flag_mr.webp (100%) rename ui/resources/src/{main => androidMain}/res/drawable-nodpi/ic_flag_ms.webp (100%) rename ui/resources/src/{main => androidMain}/res/drawable-nodpi/ic_flag_mt.webp (100%) rename ui/resources/src/{main => androidMain}/res/drawable-nodpi/ic_flag_mu.webp (100%) rename ui/resources/src/{main => androidMain}/res/drawable-nodpi/ic_flag_mv.webp (100%) rename ui/resources/src/{main => androidMain}/res/drawable-nodpi/ic_flag_mw.webp (100%) rename ui/resources/src/{main => androidMain}/res/drawable-nodpi/ic_flag_mx.webp (100%) rename ui/resources/src/{main => androidMain}/res/drawable-nodpi/ic_flag_my.webp (100%) rename ui/resources/src/{main => androidMain}/res/drawable-nodpi/ic_flag_mz.webp (100%) rename ui/resources/src/{main => androidMain}/res/drawable-nodpi/ic_flag_na.webp (100%) rename ui/resources/src/{main => androidMain}/res/drawable-nodpi/ic_flag_nc.webp (100%) rename ui/resources/src/{main => androidMain}/res/drawable-nodpi/ic_flag_ne.webp (100%) rename ui/resources/src/{main => androidMain}/res/drawable-nodpi/ic_flag_nf.webp (100%) rename ui/resources/src/{main => androidMain}/res/drawable-nodpi/ic_flag_ng.webp (100%) rename ui/resources/src/{main => androidMain}/res/drawable-nodpi/ic_flag_ni.webp (100%) rename ui/resources/src/{main => androidMain}/res/drawable-nodpi/ic_flag_nl.webp (100%) rename ui/resources/src/{main => androidMain}/res/drawable-nodpi/ic_flag_no.webp (100%) rename ui/resources/src/{main => androidMain}/res/drawable-nodpi/ic_flag_np.webp (100%) rename ui/resources/src/{main => androidMain}/res/drawable-nodpi/ic_flag_nr.webp (100%) rename ui/resources/src/{main => androidMain}/res/drawable-nodpi/ic_flag_nu.webp (100%) rename ui/resources/src/{main => androidMain}/res/drawable-nodpi/ic_flag_nz.webp (100%) rename ui/resources/src/{main => androidMain}/res/drawable-nodpi/ic_flag_om.webp (100%) rename ui/resources/src/{main => androidMain}/res/drawable-nodpi/ic_flag_pa.webp (100%) rename ui/resources/src/{main => androidMain}/res/drawable-nodpi/ic_flag_pe.webp (100%) rename ui/resources/src/{main => androidMain}/res/drawable-nodpi/ic_flag_pf.webp (100%) rename ui/resources/src/{main => androidMain}/res/drawable-nodpi/ic_flag_pg.webp (100%) rename ui/resources/src/{main => androidMain}/res/drawable-nodpi/ic_flag_ph.webp (100%) rename ui/resources/src/{main => androidMain}/res/drawable-nodpi/ic_flag_pk.webp (100%) rename ui/resources/src/{main => androidMain}/res/drawable-nodpi/ic_flag_pl.webp (100%) rename ui/resources/src/{main => androidMain}/res/drawable-nodpi/ic_flag_pm.webp (100%) rename ui/resources/src/{main => androidMain}/res/drawable-nodpi/ic_flag_pn.webp (100%) rename ui/resources/src/{main => androidMain}/res/drawable-nodpi/ic_flag_pr.webp (100%) rename ui/resources/src/{main => androidMain}/res/drawable-nodpi/ic_flag_ps.webp (100%) rename ui/resources/src/{main => androidMain}/res/drawable-nodpi/ic_flag_pt.webp (100%) rename ui/resources/src/{main => androidMain}/res/drawable-nodpi/ic_flag_pw.webp (100%) rename ui/resources/src/{main => androidMain}/res/drawable-nodpi/ic_flag_py.webp (100%) rename ui/resources/src/{main => androidMain}/res/drawable-nodpi/ic_flag_qa.webp (100%) rename ui/resources/src/{main => androidMain}/res/drawable-nodpi/ic_flag_re.webp (100%) rename ui/resources/src/{main => androidMain}/res/drawable-nodpi/ic_flag_ro.webp (100%) rename ui/resources/src/{main => androidMain}/res/drawable-nodpi/ic_flag_rs.webp (100%) rename ui/resources/src/{main => androidMain}/res/drawable-nodpi/ic_flag_ru.webp (100%) rename ui/resources/src/{main => androidMain}/res/drawable-nodpi/ic_flag_rw.webp (100%) rename ui/resources/src/{main => androidMain}/res/drawable-nodpi/ic_flag_sa.webp (100%) rename ui/resources/src/{main => androidMain}/res/drawable-nodpi/ic_flag_sb.webp (100%) rename ui/resources/src/{main => androidMain}/res/drawable-nodpi/ic_flag_sc.webp (100%) rename ui/resources/src/{main => androidMain}/res/drawable-nodpi/ic_flag_sd.webp (100%) rename ui/resources/src/{main => androidMain}/res/drawable-nodpi/ic_flag_se.webp (100%) rename ui/resources/src/{main => androidMain}/res/drawable-nodpi/ic_flag_sg.webp (100%) rename ui/resources/src/{main => androidMain}/res/drawable-nodpi/ic_flag_sh.webp (100%) rename ui/resources/src/{main => androidMain}/res/drawable-nodpi/ic_flag_si.webp (100%) rename ui/resources/src/{main => androidMain}/res/drawable-nodpi/ic_flag_sj.webp (100%) rename ui/resources/src/{main => androidMain}/res/drawable-nodpi/ic_flag_sk.webp (100%) rename ui/resources/src/{main => androidMain}/res/drawable-nodpi/ic_flag_sl.webp (100%) rename ui/resources/src/{main => androidMain}/res/drawable-nodpi/ic_flag_sm.webp (100%) rename ui/resources/src/{main => androidMain}/res/drawable-nodpi/ic_flag_sn.webp (100%) rename ui/resources/src/{main => androidMain}/res/drawable-nodpi/ic_flag_so.webp (100%) rename ui/resources/src/{main => androidMain}/res/drawable-nodpi/ic_flag_sr.webp (100%) rename ui/resources/src/{main => androidMain}/res/drawable-nodpi/ic_flag_ss.webp (100%) rename ui/resources/src/{main => androidMain}/res/drawable-nodpi/ic_flag_st.webp (100%) rename ui/resources/src/{main => androidMain}/res/drawable-nodpi/ic_flag_sv.webp (100%) rename ui/resources/src/{main => androidMain}/res/drawable-nodpi/ic_flag_sx.webp (100%) rename ui/resources/src/{main => androidMain}/res/drawable-nodpi/ic_flag_sy.webp (100%) rename ui/resources/src/{main => androidMain}/res/drawable-nodpi/ic_flag_sz.webp (100%) rename ui/resources/src/{main => androidMain}/res/drawable-nodpi/ic_flag_tc.webp (100%) rename ui/resources/src/{main => androidMain}/res/drawable-nodpi/ic_flag_td.webp (100%) rename ui/resources/src/{main => androidMain}/res/drawable-nodpi/ic_flag_tf.webp (100%) rename ui/resources/src/{main => androidMain}/res/drawable-nodpi/ic_flag_tg.webp (100%) rename ui/resources/src/{main => androidMain}/res/drawable-nodpi/ic_flag_th.webp (100%) rename ui/resources/src/{main => androidMain}/res/drawable-nodpi/ic_flag_tj.webp (100%) rename ui/resources/src/{main => androidMain}/res/drawable-nodpi/ic_flag_tk.webp (100%) rename ui/resources/src/{main => androidMain}/res/drawable-nodpi/ic_flag_tl.webp (100%) rename ui/resources/src/{main => androidMain}/res/drawable-nodpi/ic_flag_tm.webp (100%) rename ui/resources/src/{main => androidMain}/res/drawable-nodpi/ic_flag_tn.webp (100%) rename ui/resources/src/{main => androidMain}/res/drawable-nodpi/ic_flag_to.webp (100%) rename ui/resources/src/{main => androidMain}/res/drawable-nodpi/ic_flag_tr.webp (100%) rename ui/resources/src/{main => androidMain}/res/drawable-nodpi/ic_flag_tt.webp (100%) rename ui/resources/src/{main => androidMain}/res/drawable-nodpi/ic_flag_tv.webp (100%) rename ui/resources/src/{main => androidMain}/res/drawable-nodpi/ic_flag_tw.webp (100%) rename ui/resources/src/{main => androidMain}/res/drawable-nodpi/ic_flag_tz.webp (100%) rename ui/resources/src/{main => androidMain}/res/drawable-nodpi/ic_flag_ua.webp (100%) rename ui/resources/src/{main => androidMain}/res/drawable-nodpi/ic_flag_ug.webp (100%) rename ui/resources/src/{main => androidMain}/res/drawable-nodpi/ic_flag_um.webp (100%) rename ui/resources/src/{main => androidMain}/res/drawable-nodpi/ic_flag_us.webp (100%) rename ui/resources/src/{main => androidMain}/res/drawable-nodpi/ic_flag_uy.webp (100%) rename ui/resources/src/{main => androidMain}/res/drawable-nodpi/ic_flag_uz.webp (100%) rename ui/resources/src/{main => androidMain}/res/drawable-nodpi/ic_flag_va.webp (100%) rename ui/resources/src/{main => androidMain}/res/drawable-nodpi/ic_flag_vc.webp (100%) rename ui/resources/src/{main => androidMain}/res/drawable-nodpi/ic_flag_ve.webp (100%) rename ui/resources/src/{main => androidMain}/res/drawable-nodpi/ic_flag_vg.webp (100%) rename ui/resources/src/{main => androidMain}/res/drawable-nodpi/ic_flag_vi.webp (100%) rename ui/resources/src/{main => androidMain}/res/drawable-nodpi/ic_flag_vn.webp (100%) rename ui/resources/src/{main => androidMain}/res/drawable-nodpi/ic_flag_vu.webp (100%) rename ui/resources/src/{main => androidMain}/res/drawable-nodpi/ic_flag_wf.webp (100%) rename ui/resources/src/{main => androidMain}/res/drawable-nodpi/ic_flag_ws.webp (100%) rename ui/resources/src/{main => androidMain}/res/drawable-nodpi/ic_flag_ye.webp (100%) rename ui/resources/src/{main => androidMain}/res/drawable-nodpi/ic_flag_yt.webp (100%) rename ui/resources/src/{main => androidMain}/res/drawable-nodpi/ic_flag_za.webp (100%) rename ui/resources/src/{main => androidMain}/res/drawable-nodpi/ic_flag_zm.webp (100%) rename ui/resources/src/{main => androidMain}/res/drawable-nodpi/ic_flag_zw.webp (100%) rename ui/resources/src/{main => androidMain}/res/drawable-nodpi/ic_flag_zz.webp (100%) rename ui/resources/src/{main => androidMain}/res/drawable-nodpi/ic_placeholder_user.webp (100%) rename ui/resources/src/{main => androidMain}/res/drawable-nodpi/video_sell_kin_2x.webp (100%) rename ui/resources/src/{main => androidMain}/res/drawable-xhdpi/ic_bill_grid.webp (100%) rename ui/resources/src/{main => androidMain}/res/drawable-xhdpi/ic_bill_hexagons.webp (100%) rename ui/resources/src/{main => androidMain}/res/drawable-xxhdpi/ic_bill_grid.webp (100%) rename ui/resources/src/{main => androidMain}/res/drawable-xxhdpi/ic_bill_hexagons.webp (100%) rename ui/resources/src/{main => androidMain}/res/drawable-xxxhdpi/ic_bill_grid.webp (100%) rename ui/resources/src/{main => androidMain}/res/drawable-xxxhdpi/ic_bill_hexagons.webp (100%) rename ui/resources/src/{main => androidMain}/res/drawable/ic_android_icon.xml (100%) rename ui/resources/src/{main => androidMain}/res/drawable/ic_apple_icon.xml (100%) rename ui/resources/src/{main => androidMain}/res/drawable/ic_arrow_back.xml (100%) rename ui/resources/src/{main => androidMain}/res/drawable/ic_bezier_curve.xml (100%) rename ui/resources/src/{main => androidMain}/res/drawable/ic_bill_close.xml (100%) rename ui/resources/src/{main => androidMain}/res/drawable/ic_chain_link.xml (100%) rename ui/resources/src/{main => androidMain}/res/drawable/ic_chat.xml (100%) rename ui/resources/src/{main => androidMain}/res/drawable/ic_check.xml (100%) rename ui/resources/src/{main => androidMain}/res/drawable/ic_check_circle.xml (100%) rename ui/resources/src/{main => androidMain}/res/drawable/ic_check_white.xml (100%) rename ui/resources/src/{main => androidMain}/res/drawable/ic_checked_blue.xml (100%) rename ui/resources/src/{main => androidMain}/res/drawable/ic_checked_green.xml (100%) rename ui/resources/src/{main => androidMain}/res/drawable/ic_chevron_left.xml (100%) rename ui/resources/src/{main => androidMain}/res/drawable/ic_chevron_right.xml (100%) rename ui/resources/src/{main => androidMain}/res/drawable/ic_copy.xml (100%) rename ui/resources/src/{main => androidMain}/res/drawable/ic_crown.xml (100%) rename ui/resources/src/{main => androidMain}/res/drawable/ic_delete.xml (100%) rename ui/resources/src/{main => androidMain}/res/drawable/ic_dropdown.xml (100%) rename ui/resources/src/{main => androidMain}/res/drawable/ic_exclamation_octagon_fill.xml (100%) rename ui/resources/src/{main => androidMain}/res/drawable/ic_file_bend.xml (100%) rename ui/resources/src/{main => androidMain}/res/drawable/ic_file_download.xml (100%) rename ui/resources/src/{main => androidMain}/res/drawable/ic_kin_brand.xml (100%) rename ui/resources/src/{main => androidMain}/res/drawable/ic_kin_red.xml (100%) rename ui/resources/src/{main => androidMain}/res/drawable/ic_kin_white.xml (100%) rename ui/resources/src/{main => androidMain}/res/drawable/ic_kin_white_outline.xml (100%) rename ui/resources/src/{main => androidMain}/res/drawable/ic_kin_white_small.xml (100%) rename ui/resources/src/{main => androidMain}/res/drawable/ic_remote_send.xml (100%) rename ui/resources/src/{main => androidMain}/res/drawable/ic_settings_outline.xml (100%) rename ui/resources/src/{main => androidMain}/res/drawable/ic_share_os.xml (100%) rename ui/resources/src/{main => androidMain}/res/drawable/ic_twitter_x.xml (100%) rename ui/resources/src/{main => androidMain}/res/drawable/ic_unchecked.xml (100%) rename ui/resources/src/{main => androidMain}/res/drawable/ic_wifi_slash.xml (100%) rename ui/resources/src/{main => androidMain}/res/drawable/ic_x_octagon_fill.xml (100%) rename ui/resources/src/{main => androidMain}/res/drawable/ic_xmark_red.xml (100%) rename ui/resources/src/{main => androidMain}/res/values/strings-localized.xml (100%) rename ui/resources/src/{main => androidMain}/res/values/strings.xml (100%) rename ui/resources/src/{main/java => commonMain/kotlin}/com/getcode/util/resources/ResourceHelper.kt (72%) rename ui/resources/src/{main/java => commonMain/kotlin}/com/getcode/util/resources/SettingsHelper.kt (100%) rename ui/resources/src/{main/java => commonMain/kotlin}/com/getcode/util/resources/icons/Delete.kt (100%) rename ui/resources/src/{main/java => commonMain/kotlin}/com/getcode/util/resources/icons/ImageVector.kt (100%) rename ui/resources/src/{main/java => commonMain/kotlin}/com/getcode/util/resources/icons/MessageCircle.kt (100%) create mode 100644 ui/resources/test-fixtures/build.gradle.kts rename ui/resources/{src/testFixtures => test-fixtures/src/main}/kotlin/com/getcode/util/resources/FakeResourceHelper.kt (98%) diff --git a/apps/flipcash/app/src/main/kotlin/com/flipcash/app/inject/AppModule.kt b/apps/flipcash/app/src/main/kotlin/com/flipcash/app/inject/AppModule.kt index cbc65b893a..1c03924035 100644 --- a/apps/flipcash/app/src/main/kotlin/com/flipcash/app/inject/AppModule.kt +++ b/apps/flipcash/app/src/main/kotlin/com/flipcash/app/inject/AppModule.kt @@ -13,6 +13,7 @@ import com.getcode.util.resources.AndroidContentReader import com.getcode.util.resources.AndroidResources import com.getcode.util.resources.AndroidSettingsHelper import com.getcode.util.resources.ContentReader +import com.getcode.util.resources.AndroidResourceHelper import com.getcode.util.resources.ResourceHelper import com.getcode.util.resources.SettingsHelper import dagger.Module @@ -43,9 +44,14 @@ object AppModule { ): ContentReader = AndroidContentReader(context) @Provides - fun providesResourceHelper( + fun providesAndroidResourceHelper( @ApplicationContext context: Context, - ): ResourceHelper = AndroidResources(context) + ): AndroidResourceHelper = AndroidResources(context) + + @Provides + fun providesResourceHelper( + resources: AndroidResourceHelper, + ): ResourceHelper = resources @Provides fun providesSettingsHelper( diff --git a/apps/flipcash/features/backupkey/src/main/kotlin/com/flipcash/app/backupkey/internal/BackupKeyScreenViewModel.kt b/apps/flipcash/features/backupkey/src/main/kotlin/com/flipcash/app/backupkey/internal/BackupKeyScreenViewModel.kt index 082361df7d..ca5c97d98c 100644 --- a/apps/flipcash/features/backupkey/src/main/kotlin/com/flipcash/app/backupkey/internal/BackupKeyScreenViewModel.kt +++ b/apps/flipcash/features/backupkey/src/main/kotlin/com/flipcash/app/backupkey/internal/BackupKeyScreenViewModel.kt @@ -6,7 +6,7 @@ import com.flipcash.libs.coroutines.DispatcherProvider import com.flipcash.services.user.UserManager import com.getcode.libs.qr.QRCodeGenerator import com.getcode.opencode.managers.MnemonicManager -import com.getcode.util.resources.ResourceHelper +import com.getcode.util.resources.AndroidResourceHelper import com.getcode.view.LoadingSuccessState import dagger.hilt.android.lifecycle.HiltViewModel import kotlinx.coroutines.delay @@ -16,7 +16,7 @@ import kotlin.time.Duration.Companion.seconds @HiltViewModel internal class BackupKeyScreenViewModel @Inject constructor( - resources: ResourceHelper, + resources: AndroidResourceHelper, mnemonicManager: MnemonicManager, mediaSaver: MediaSaver, userManager: UserManager, diff --git a/apps/flipcash/features/cash/build.gradle.kts b/apps/flipcash/features/cash/build.gradle.kts index 750d1d06ee..748344538f 100644 --- a/apps/flipcash/features/cash/build.gradle.kts +++ b/apps/flipcash/features/cash/build.gradle.kts @@ -9,7 +9,7 @@ android { dependencies { testImplementation(kotlin("test")) testImplementation(libs.bundles.unit.testing) - testImplementation(testFixtures(project(":ui:resources"))) + testImplementation(project(":ui:resources:test-fixtures")) testImplementation(libs.mockito.kotlin) testImplementation(libs.robolectric) diff --git a/apps/flipcash/features/contact-verification/build.gradle.kts b/apps/flipcash/features/contact-verification/build.gradle.kts index 3f36620e35..38cbfb9c12 100644 --- a/apps/flipcash/features/contact-verification/build.gradle.kts +++ b/apps/flipcash/features/contact-verification/build.gradle.kts @@ -9,7 +9,7 @@ android { dependencies { testImplementation(kotlin("test")) testImplementation(libs.bundles.unit.testing) - testImplementation(testFixtures(project(":ui:resources"))) + testImplementation(project(":ui:resources:test-fixtures")) testImplementation(libs.mockito.kotlin) implementation(libs.bundles.kotlinx.serialization) diff --git a/apps/flipcash/features/login/build.gradle.kts b/apps/flipcash/features/login/build.gradle.kts index 8b4a065713..fdc0140b53 100644 --- a/apps/flipcash/features/login/build.gradle.kts +++ b/apps/flipcash/features/login/build.gradle.kts @@ -9,7 +9,7 @@ android { dependencies { testImplementation(kotlin("test")) testImplementation(libs.bundles.unit.testing) - testImplementation(testFixtures(project(":ui:resources"))) + testImplementation(project(":ui:resources:test-fixtures")) testImplementation(libs.mockito.kotlin) testImplementation(libs.bundles.compose.ui.testing) diff --git a/apps/flipcash/features/login/src/main/kotlin/com/flipcash/app/login/internal/LoginAccessKeyViewModel.kt b/apps/flipcash/features/login/src/main/kotlin/com/flipcash/app/login/internal/LoginAccessKeyViewModel.kt index 8da7981d8e..9c7cd604ed 100644 --- a/apps/flipcash/features/login/src/main/kotlin/com/flipcash/app/login/internal/LoginAccessKeyViewModel.kt +++ b/apps/flipcash/features/login/src/main/kotlin/com/flipcash/app/login/internal/LoginAccessKeyViewModel.kt @@ -15,7 +15,7 @@ import com.flipcash.services.user.UserManager import com.getcode.libs.qr.QRCodeGenerator import com.getcode.manager.BottomBarManager import com.getcode.opencode.managers.MnemonicManager -import com.getcode.util.resources.ResourceHelper +import com.getcode.util.resources.AndroidResourceHelper import com.getcode.view.LoadingSuccessState import dagger.hilt.android.lifecycle.HiltViewModel import kotlinx.coroutines.delay @@ -24,7 +24,7 @@ import javax.inject.Inject @HiltViewModel internal class LoginAccessKeyViewModel @Inject constructor( - private val resources: ResourceHelper, + private val resources: AndroidResourceHelper, mnemonicManager: MnemonicManager, qrCodeGenerator: QRCodeGenerator, mediaSaver: MediaSaver, diff --git a/apps/flipcash/features/menu/build.gradle.kts b/apps/flipcash/features/menu/build.gradle.kts index 3d8bf2d322..c4858b7a56 100644 --- a/apps/flipcash/features/menu/build.gradle.kts +++ b/apps/flipcash/features/menu/build.gradle.kts @@ -11,7 +11,7 @@ dependencies { testImplementation(libs.kotlinx.coroutines.test) testImplementation(libs.robolectric) testImplementation(libs.bundles.unit.testing) - testImplementation(testFixtures(project(":ui:resources"))) + testImplementation(project(":ui:resources:test-fixtures")) implementation(libs.bundles.haze) diff --git a/apps/flipcash/features/myaccount/build.gradle.kts b/apps/flipcash/features/myaccount/build.gradle.kts index 3362ff2d55..781f5d7348 100644 --- a/apps/flipcash/features/myaccount/build.gradle.kts +++ b/apps/flipcash/features/myaccount/build.gradle.kts @@ -10,7 +10,7 @@ dependencies { testImplementation(kotlin("test")) testImplementation(libs.bundles.unit.testing) testImplementation(libs.bundles.compose.ui.testing) - testImplementation(testFixtures(project(":ui:resources"))) + testImplementation(project(":ui:resources:test-fixtures")) implementation(libs.bundles.haze) implementation(libs.compose.paging) diff --git a/apps/flipcash/features/tipping/build.gradle.kts b/apps/flipcash/features/tipping/build.gradle.kts index db2603d881..2c4f4a7910 100644 --- a/apps/flipcash/features/tipping/build.gradle.kts +++ b/apps/flipcash/features/tipping/build.gradle.kts @@ -9,7 +9,7 @@ android { dependencies { testImplementation(kotlin("test")) testImplementation(libs.bundles.unit.testing) - testImplementation(testFixtures(project(":ui:resources"))) + testImplementation(project(":ui:resources:test-fixtures")) testImplementation(testFixtures(project(":apps:flipcash:shared:analytics"))) testImplementation(libs.robolectric) diff --git a/apps/flipcash/features/transactions/build.gradle.kts b/apps/flipcash/features/transactions/build.gradle.kts index bc4506aa2f..777a85f700 100644 --- a/apps/flipcash/features/transactions/build.gradle.kts +++ b/apps/flipcash/features/transactions/build.gradle.kts @@ -9,7 +9,7 @@ android { dependencies { testImplementation(kotlin("test")) testImplementation(libs.bundles.unit.testing) - testImplementation(testFixtures(project(":ui:resources"))) + testImplementation(project(":ui:resources:test-fixtures")) testImplementation(libs.mockito.kotlin) implementation(libs.compose.paging) diff --git a/apps/flipcash/features/user-profile/build.gradle.kts b/apps/flipcash/features/user-profile/build.gradle.kts index 07815031be..e82b55b0a1 100644 --- a/apps/flipcash/features/user-profile/build.gradle.kts +++ b/apps/flipcash/features/user-profile/build.gradle.kts @@ -9,7 +9,7 @@ android { dependencies { testImplementation(kotlin("test")) testImplementation(libs.bundles.unit.testing) - testImplementation(testFixtures(project(":ui:resources"))) + testImplementation(project(":ui:resources:test-fixtures")) testImplementation(libs.mockito.kotlin) implementation(libs.bundles.kotlinx.serialization) diff --git a/apps/flipcash/features/withdrawal/build.gradle.kts b/apps/flipcash/features/withdrawal/build.gradle.kts index a2a6ac1bfc..2d2fb40188 100644 --- a/apps/flipcash/features/withdrawal/build.gradle.kts +++ b/apps/flipcash/features/withdrawal/build.gradle.kts @@ -9,7 +9,7 @@ android { dependencies { testImplementation(kotlin("test")) testImplementation(libs.bundles.unit.testing) - testImplementation(testFixtures(project(":ui:resources"))) + testImplementation(project(":ui:resources:test-fixtures")) testImplementation(libs.bundles.compose.ui.testing) implementation(project(":apps:flipcash:shared:amount-entry")) diff --git a/apps/flipcash/shared/accesskey/src/main/kotlin/com/flipcash/app/accesskey/BaseAccessKeyViewModel.kt b/apps/flipcash/shared/accesskey/src/main/kotlin/com/flipcash/app/accesskey/BaseAccessKeyViewModel.kt index a8886ef6c9..33ef7b3f6a 100644 --- a/apps/flipcash/shared/accesskey/src/main/kotlin/com/flipcash/app/accesskey/BaseAccessKeyViewModel.kt +++ b/apps/flipcash/shared/accesskey/src/main/kotlin/com/flipcash/app/accesskey/BaseAccessKeyViewModel.kt @@ -24,7 +24,7 @@ import com.getcode.theme.Alert import com.getcode.theme.GradientSpec import com.getcode.theme.White import com.getcode.ui.utils.toAGColor -import com.getcode.util.resources.ResourceHelper +import com.getcode.util.resources.AndroidResourceHelper import com.getcode.utils.TraceType import com.getcode.utils.decodeBase64 import com.getcode.utils.trace @@ -59,7 +59,7 @@ data class AccessKeyUiModel( ) abstract class BaseAccessKeyViewModel( - private val resources: ResourceHelper, + private val resources: AndroidResourceHelper, private val mnemonicManager: MnemonicManager, private val mediaSaver: MediaSaver, userManager: UserManager, diff --git a/apps/flipcash/shared/session/build.gradle.kts b/apps/flipcash/shared/session/build.gradle.kts index d89ecb4b3d..9fb357fa99 100644 --- a/apps/flipcash/shared/session/build.gradle.kts +++ b/apps/flipcash/shared/session/build.gradle.kts @@ -10,7 +10,7 @@ dependencies { testImplementation(kotlin("test")) testImplementation(libs.bundles.unit.testing) testImplementation(project(":libs:coroutines:test-fixtures")) - testImplementation(testFixtures(project(":ui:resources"))) + testImplementation(project(":ui:resources:test-fixtures")) implementation(project(":apps:flipcash:shared:blob")) implementation(project(":apps:flipcash:shared:blocklist")) diff --git a/apps/flipcash/shared/shareable/build.gradle.kts b/apps/flipcash/shared/shareable/build.gradle.kts index 574501ca49..52a8a2b5df 100644 --- a/apps/flipcash/shared/shareable/build.gradle.kts +++ b/apps/flipcash/shared/shareable/build.gradle.kts @@ -10,7 +10,7 @@ dependencies { testImplementation(kotlin("test")) testImplementation(libs.bundles.unit.testing) testImplementation(libs.robolectric) - testImplementation(testFixtures(project(":ui:resources"))) + testImplementation(project(":ui:resources:test-fixtures")) implementation(libs.bundles.kotlinx.serialization) diff --git a/apps/flipcash/shared/tokens/build.gradle.kts b/apps/flipcash/shared/tokens/build.gradle.kts index 0c9906a86b..e7825e9269 100644 --- a/apps/flipcash/shared/tokens/build.gradle.kts +++ b/apps/flipcash/shared/tokens/build.gradle.kts @@ -9,7 +9,7 @@ android { dependencies { testImplementation(kotlin("test")) testImplementation(libs.bundles.unit.testing) - testImplementation(testFixtures(project(":ui:resources"))) + testImplementation(project(":ui:resources:test-fixtures")) testImplementation(project(":libs:currency-math:test-fixtures")) testImplementation(libs.mockito.kotlin) diff --git a/apps/flipcash/shared/transaction-history/build.gradle.kts b/apps/flipcash/shared/transaction-history/build.gradle.kts index e79a443160..ee44a7fbf1 100644 --- a/apps/flipcash/shared/transaction-history/build.gradle.kts +++ b/apps/flipcash/shared/transaction-history/build.gradle.kts @@ -22,7 +22,7 @@ dependencies { testImplementation(libs.bundles.unit.testing) testImplementation(libs.robolectric) - testImplementation(testFixtures(project(":ui:resources"))) + testImplementation(project(":ui:resources:test-fixtures")) // Screenshot renders only: FlipcashPreview for the theme, ExchangeStub for the currency flag // LocalExchange would otherwise resolve to ExchangeNull. testImplementation(project(":apps:flipcash:shared:theme")) diff --git a/settings.gradle.kts b/settings.gradle.kts index 4ad45e5ae7..9db5357f60 100644 --- a/settings.gradle.kts +++ b/settings.gradle.kts @@ -262,6 +262,7 @@ include( ":ui:components", ":ui:navigation", ":ui:resources", + ":ui:resources:test-fixtures", ":ui:scanner", ":ui:testing", ":ui:theme", diff --git a/ui/resources/build.gradle.kts b/ui/resources/build.gradle.kts index cd0dc3c181..47fa09cfd2 100644 --- a/ui/resources/build.gradle.kts +++ b/ui/resources/build.gradle.kts @@ -1,22 +1,29 @@ plugins { - alias(libs.plugins.flipcash.android.library.compose) + alias(libs.plugins.flipcash.kmp.app.library) + alias(libs.plugins.compose.compiler) } -android { - namespace = "${Gradle.codeNamespace}.util.resources" - testFixtures { - enable = true +kotlin { + android { + namespace = "${Gradle.codeNamespace}.util.resources" + androidResources { + enable = true + } } -} - -dependencies { - testFixturesImplementation(platform(libs.compose.bom)) - testFixturesImplementation(libs.compose.ui) - api(libs.androidx.annotation) - api(libs.androidx.appcompat) - api(libs.androidx.core) - implementation(libs.androidx.exifinterface) - api(libs.kotlin.stdlib) - api(libs.kotlinx.coroutines.core) + sourceSets { + commonMain.dependencies { + api(libs.androidx.annotation) + api(libs.kotlin.stdlib) + api(libs.kotlinx.coroutines.core) + api(libs.jetbrains.compose.runtime) + api(libs.jetbrains.compose.ui) + } + androidMain.dependencies { + api(libs.androidx.appcompat) + api(libs.androidx.core) + implementation(libs.androidx.exifinterface) + implementation(libs.timber) + } + } } diff --git a/ui/resources/src/androidMain/kotlin/com/getcode/util/resources/AndroidResourceHelper.kt b/ui/resources/src/androidMain/kotlin/com/getcode/util/resources/AndroidResourceHelper.kt new file mode 100644 index 0000000000..8018d3268a --- /dev/null +++ b/ui/resources/src/androidMain/kotlin/com/getcode/util/resources/AndroidResourceHelper.kt @@ -0,0 +1,19 @@ +package com.getcode.util.resources + +import android.graphics.Typeface +import android.graphics.drawable.Drawable +import android.util.DisplayMetrics +import androidx.annotation.DrawableRes +import androidx.annotation.FontRes +import java.io.File + +/** The [ResourceHelper] members that return Android types. */ +interface AndroidResourceHelper : ResourceHelper { + fun getDir(name: String, mode: Int): File? + + val displayMetrics: DisplayMetrics + + fun getDrawable(@DrawableRes drawableResId: Int): Drawable? + + fun getFont(@FontRes fontResId: Int): Typeface? +} diff --git a/ui/resources/src/main/java/com/getcode/util/resources/AndroidResources.kt b/ui/resources/src/androidMain/kotlin/com/getcode/util/resources/AndroidResources.kt similarity index 99% rename from ui/resources/src/main/java/com/getcode/util/resources/AndroidResources.kt rename to ui/resources/src/androidMain/kotlin/com/getcode/util/resources/AndroidResources.kt index a2fc26c4f4..db84bf05b6 100644 --- a/ui/resources/src/main/java/com/getcode/util/resources/AndroidResources.kt +++ b/ui/resources/src/androidMain/kotlin/com/getcode/util/resources/AndroidResources.kt @@ -15,7 +15,7 @@ import java.io.File class AndroidResources( private val context: Context, -) : ResourceHelper { +) : AndroidResourceHelper { override fun getString(@StringRes resourceId: Int): String { return context.getString(resourceId) diff --git a/ui/resources/src/main/java/com/getcode/util/resources/AndroidSettingsHelper.kt b/ui/resources/src/androidMain/kotlin/com/getcode/util/resources/AndroidSettingsHelper.kt similarity index 100% rename from ui/resources/src/main/java/com/getcode/util/resources/AndroidSettingsHelper.kt rename to ui/resources/src/androidMain/kotlin/com/getcode/util/resources/AndroidSettingsHelper.kt diff --git a/ui/resources/src/main/java/com/getcode/util/resources/ContentReader.kt b/ui/resources/src/androidMain/kotlin/com/getcode/util/resources/ContentReader.kt similarity index 100% rename from ui/resources/src/main/java/com/getcode/util/resources/ContentReader.kt rename to ui/resources/src/androidMain/kotlin/com/getcode/util/resources/ContentReader.kt diff --git a/ui/resources/src/main/res/drawable-nodpi/ic_bill_globe.webp b/ui/resources/src/androidMain/res/drawable-nodpi/ic_bill_globe.webp similarity index 100% rename from ui/resources/src/main/res/drawable-nodpi/ic_bill_globe.webp rename to ui/resources/src/androidMain/res/drawable-nodpi/ic_bill_globe.webp diff --git a/ui/resources/src/main/res/drawable-nodpi/ic_bill_grid.webp b/ui/resources/src/androidMain/res/drawable-nodpi/ic_bill_grid.webp similarity index 100% rename from ui/resources/src/main/res/drawable-nodpi/ic_bill_grid.webp rename to ui/resources/src/androidMain/res/drawable-nodpi/ic_bill_grid.webp diff --git a/ui/resources/src/main/res/drawable-nodpi/ic_bill_hexagons.webp b/ui/resources/src/androidMain/res/drawable-nodpi/ic_bill_hexagons.webp similarity index 100% rename from ui/resources/src/main/res/drawable-nodpi/ic_bill_hexagons.webp rename to ui/resources/src/androidMain/res/drawable-nodpi/ic_bill_hexagons.webp diff --git a/ui/resources/src/main/res/drawable-nodpi/ic_bill_security_strip.webp b/ui/resources/src/androidMain/res/drawable-nodpi/ic_bill_security_strip.webp similarity index 100% rename from ui/resources/src/main/res/drawable-nodpi/ic_bill_security_strip.webp rename to ui/resources/src/androidMain/res/drawable-nodpi/ic_bill_security_strip.webp diff --git a/ui/resources/src/main/res/drawable-nodpi/ic_bill_waves.webp b/ui/resources/src/androidMain/res/drawable-nodpi/ic_bill_waves.webp similarity index 100% rename from ui/resources/src/main/res/drawable-nodpi/ic_bill_waves.webp rename to ui/resources/src/androidMain/res/drawable-nodpi/ic_bill_waves.webp diff --git a/ui/resources/src/main/res/drawable-nodpi/ic_flag_ad.webp b/ui/resources/src/androidMain/res/drawable-nodpi/ic_flag_ad.webp similarity index 100% rename from ui/resources/src/main/res/drawable-nodpi/ic_flag_ad.webp rename to ui/resources/src/androidMain/res/drawable-nodpi/ic_flag_ad.webp diff --git a/ui/resources/src/main/res/drawable-nodpi/ic_flag_ae.webp b/ui/resources/src/androidMain/res/drawable-nodpi/ic_flag_ae.webp similarity index 100% rename from ui/resources/src/main/res/drawable-nodpi/ic_flag_ae.webp rename to ui/resources/src/androidMain/res/drawable-nodpi/ic_flag_ae.webp diff --git a/ui/resources/src/main/res/drawable-nodpi/ic_flag_af.webp b/ui/resources/src/androidMain/res/drawable-nodpi/ic_flag_af.webp similarity index 100% rename from ui/resources/src/main/res/drawable-nodpi/ic_flag_af.webp rename to ui/resources/src/androidMain/res/drawable-nodpi/ic_flag_af.webp diff --git a/ui/resources/src/main/res/drawable-nodpi/ic_flag_ag.webp b/ui/resources/src/androidMain/res/drawable-nodpi/ic_flag_ag.webp similarity index 100% rename from ui/resources/src/main/res/drawable-nodpi/ic_flag_ag.webp rename to ui/resources/src/androidMain/res/drawable-nodpi/ic_flag_ag.webp diff --git a/ui/resources/src/main/res/drawable-nodpi/ic_flag_ai.webp b/ui/resources/src/androidMain/res/drawable-nodpi/ic_flag_ai.webp similarity index 100% rename from ui/resources/src/main/res/drawable-nodpi/ic_flag_ai.webp rename to ui/resources/src/androidMain/res/drawable-nodpi/ic_flag_ai.webp diff --git a/ui/resources/src/main/res/drawable-nodpi/ic_flag_al.webp b/ui/resources/src/androidMain/res/drawable-nodpi/ic_flag_al.webp similarity index 100% rename from ui/resources/src/main/res/drawable-nodpi/ic_flag_al.webp rename to ui/resources/src/androidMain/res/drawable-nodpi/ic_flag_al.webp diff --git a/ui/resources/src/main/res/drawable-nodpi/ic_flag_am.webp b/ui/resources/src/androidMain/res/drawable-nodpi/ic_flag_am.webp similarity index 100% rename from ui/resources/src/main/res/drawable-nodpi/ic_flag_am.webp rename to ui/resources/src/androidMain/res/drawable-nodpi/ic_flag_am.webp diff --git a/ui/resources/src/main/res/drawable-nodpi/ic_flag_an.webp b/ui/resources/src/androidMain/res/drawable-nodpi/ic_flag_an.webp similarity index 100% rename from ui/resources/src/main/res/drawable-nodpi/ic_flag_an.webp rename to ui/resources/src/androidMain/res/drawable-nodpi/ic_flag_an.webp diff --git a/ui/resources/src/main/res/drawable-nodpi/ic_flag_ao.webp b/ui/resources/src/androidMain/res/drawable-nodpi/ic_flag_ao.webp similarity index 100% rename from ui/resources/src/main/res/drawable-nodpi/ic_flag_ao.webp rename to ui/resources/src/androidMain/res/drawable-nodpi/ic_flag_ao.webp diff --git a/ui/resources/src/main/res/drawable-nodpi/ic_flag_aq.webp b/ui/resources/src/androidMain/res/drawable-nodpi/ic_flag_aq.webp similarity index 100% rename from ui/resources/src/main/res/drawable-nodpi/ic_flag_aq.webp rename to ui/resources/src/androidMain/res/drawable-nodpi/ic_flag_aq.webp diff --git a/ui/resources/src/main/res/drawable-nodpi/ic_flag_ar.webp b/ui/resources/src/androidMain/res/drawable-nodpi/ic_flag_ar.webp similarity index 100% rename from ui/resources/src/main/res/drawable-nodpi/ic_flag_ar.webp rename to ui/resources/src/androidMain/res/drawable-nodpi/ic_flag_ar.webp diff --git a/ui/resources/src/main/res/drawable-nodpi/ic_flag_as.webp b/ui/resources/src/androidMain/res/drawable-nodpi/ic_flag_as.webp similarity index 100% rename from ui/resources/src/main/res/drawable-nodpi/ic_flag_as.webp rename to ui/resources/src/androidMain/res/drawable-nodpi/ic_flag_as.webp diff --git a/ui/resources/src/main/res/drawable-nodpi/ic_flag_at.webp b/ui/resources/src/androidMain/res/drawable-nodpi/ic_flag_at.webp similarity index 100% rename from ui/resources/src/main/res/drawable-nodpi/ic_flag_at.webp rename to ui/resources/src/androidMain/res/drawable-nodpi/ic_flag_at.webp diff --git a/ui/resources/src/main/res/drawable-nodpi/ic_flag_au.webp b/ui/resources/src/androidMain/res/drawable-nodpi/ic_flag_au.webp similarity index 100% rename from ui/resources/src/main/res/drawable-nodpi/ic_flag_au.webp rename to ui/resources/src/androidMain/res/drawable-nodpi/ic_flag_au.webp diff --git a/ui/resources/src/main/res/drawable-nodpi/ic_flag_aw.webp b/ui/resources/src/androidMain/res/drawable-nodpi/ic_flag_aw.webp similarity index 100% rename from ui/resources/src/main/res/drawable-nodpi/ic_flag_aw.webp rename to ui/resources/src/androidMain/res/drawable-nodpi/ic_flag_aw.webp diff --git a/ui/resources/src/main/res/drawable-nodpi/ic_flag_ax.webp b/ui/resources/src/androidMain/res/drawable-nodpi/ic_flag_ax.webp similarity index 100% rename from ui/resources/src/main/res/drawable-nodpi/ic_flag_ax.webp rename to ui/resources/src/androidMain/res/drawable-nodpi/ic_flag_ax.webp diff --git a/ui/resources/src/main/res/drawable-nodpi/ic_flag_az.webp b/ui/resources/src/androidMain/res/drawable-nodpi/ic_flag_az.webp similarity index 100% rename from ui/resources/src/main/res/drawable-nodpi/ic_flag_az.webp rename to ui/resources/src/androidMain/res/drawable-nodpi/ic_flag_az.webp diff --git a/ui/resources/src/main/res/drawable-nodpi/ic_flag_ba.webp b/ui/resources/src/androidMain/res/drawable-nodpi/ic_flag_ba.webp similarity index 100% rename from ui/resources/src/main/res/drawable-nodpi/ic_flag_ba.webp rename to ui/resources/src/androidMain/res/drawable-nodpi/ic_flag_ba.webp diff --git a/ui/resources/src/main/res/drawable-nodpi/ic_flag_bb.webp b/ui/resources/src/androidMain/res/drawable-nodpi/ic_flag_bb.webp similarity index 100% rename from ui/resources/src/main/res/drawable-nodpi/ic_flag_bb.webp rename to ui/resources/src/androidMain/res/drawable-nodpi/ic_flag_bb.webp diff --git a/ui/resources/src/main/res/drawable-nodpi/ic_flag_bd.webp b/ui/resources/src/androidMain/res/drawable-nodpi/ic_flag_bd.webp similarity index 100% rename from ui/resources/src/main/res/drawable-nodpi/ic_flag_bd.webp rename to ui/resources/src/androidMain/res/drawable-nodpi/ic_flag_bd.webp diff --git a/ui/resources/src/main/res/drawable-nodpi/ic_flag_be.webp b/ui/resources/src/androidMain/res/drawable-nodpi/ic_flag_be.webp similarity index 100% rename from ui/resources/src/main/res/drawable-nodpi/ic_flag_be.webp rename to ui/resources/src/androidMain/res/drawable-nodpi/ic_flag_be.webp diff --git a/ui/resources/src/main/res/drawable-nodpi/ic_flag_bf.webp b/ui/resources/src/androidMain/res/drawable-nodpi/ic_flag_bf.webp similarity index 100% rename from ui/resources/src/main/res/drawable-nodpi/ic_flag_bf.webp rename to ui/resources/src/androidMain/res/drawable-nodpi/ic_flag_bf.webp diff --git a/ui/resources/src/main/res/drawable-nodpi/ic_flag_bg.webp b/ui/resources/src/androidMain/res/drawable-nodpi/ic_flag_bg.webp similarity index 100% rename from ui/resources/src/main/res/drawable-nodpi/ic_flag_bg.webp rename to ui/resources/src/androidMain/res/drawable-nodpi/ic_flag_bg.webp diff --git a/ui/resources/src/main/res/drawable-nodpi/ic_flag_bh.webp b/ui/resources/src/androidMain/res/drawable-nodpi/ic_flag_bh.webp similarity index 100% rename from ui/resources/src/main/res/drawable-nodpi/ic_flag_bh.webp rename to ui/resources/src/androidMain/res/drawable-nodpi/ic_flag_bh.webp diff --git a/ui/resources/src/main/res/drawable-nodpi/ic_flag_bi.webp b/ui/resources/src/androidMain/res/drawable-nodpi/ic_flag_bi.webp similarity index 100% rename from ui/resources/src/main/res/drawable-nodpi/ic_flag_bi.webp rename to ui/resources/src/androidMain/res/drawable-nodpi/ic_flag_bi.webp diff --git a/ui/resources/src/main/res/drawable-nodpi/ic_flag_bj.webp b/ui/resources/src/androidMain/res/drawable-nodpi/ic_flag_bj.webp similarity index 100% rename from ui/resources/src/main/res/drawable-nodpi/ic_flag_bj.webp rename to ui/resources/src/androidMain/res/drawable-nodpi/ic_flag_bj.webp diff --git a/ui/resources/src/main/res/drawable-nodpi/ic_flag_bl.webp b/ui/resources/src/androidMain/res/drawable-nodpi/ic_flag_bl.webp similarity index 100% rename from ui/resources/src/main/res/drawable-nodpi/ic_flag_bl.webp rename to ui/resources/src/androidMain/res/drawable-nodpi/ic_flag_bl.webp diff --git a/ui/resources/src/main/res/drawable-nodpi/ic_flag_bm.webp b/ui/resources/src/androidMain/res/drawable-nodpi/ic_flag_bm.webp similarity index 100% rename from ui/resources/src/main/res/drawable-nodpi/ic_flag_bm.webp rename to ui/resources/src/androidMain/res/drawable-nodpi/ic_flag_bm.webp diff --git a/ui/resources/src/main/res/drawable-nodpi/ic_flag_bn.webp b/ui/resources/src/androidMain/res/drawable-nodpi/ic_flag_bn.webp similarity index 100% rename from ui/resources/src/main/res/drawable-nodpi/ic_flag_bn.webp rename to ui/resources/src/androidMain/res/drawable-nodpi/ic_flag_bn.webp diff --git a/ui/resources/src/main/res/drawable-nodpi/ic_flag_bo.webp b/ui/resources/src/androidMain/res/drawable-nodpi/ic_flag_bo.webp similarity index 100% rename from ui/resources/src/main/res/drawable-nodpi/ic_flag_bo.webp rename to ui/resources/src/androidMain/res/drawable-nodpi/ic_flag_bo.webp diff --git a/ui/resources/src/main/res/drawable-nodpi/ic_flag_bq.webp b/ui/resources/src/androidMain/res/drawable-nodpi/ic_flag_bq.webp similarity index 100% rename from ui/resources/src/main/res/drawable-nodpi/ic_flag_bq.webp rename to ui/resources/src/androidMain/res/drawable-nodpi/ic_flag_bq.webp diff --git a/ui/resources/src/main/res/drawable-nodpi/ic_flag_br.webp b/ui/resources/src/androidMain/res/drawable-nodpi/ic_flag_br.webp similarity index 100% rename from ui/resources/src/main/res/drawable-nodpi/ic_flag_br.webp rename to ui/resources/src/androidMain/res/drawable-nodpi/ic_flag_br.webp diff --git a/ui/resources/src/main/res/drawable-nodpi/ic_flag_bs.webp b/ui/resources/src/androidMain/res/drawable-nodpi/ic_flag_bs.webp similarity index 100% rename from ui/resources/src/main/res/drawable-nodpi/ic_flag_bs.webp rename to ui/resources/src/androidMain/res/drawable-nodpi/ic_flag_bs.webp diff --git a/ui/resources/src/main/res/drawable-nodpi/ic_flag_bt.webp b/ui/resources/src/androidMain/res/drawable-nodpi/ic_flag_bt.webp similarity index 100% rename from ui/resources/src/main/res/drawable-nodpi/ic_flag_bt.webp rename to ui/resources/src/androidMain/res/drawable-nodpi/ic_flag_bt.webp diff --git a/ui/resources/src/main/res/drawable-nodpi/ic_flag_bv.webp b/ui/resources/src/androidMain/res/drawable-nodpi/ic_flag_bv.webp similarity index 100% rename from ui/resources/src/main/res/drawable-nodpi/ic_flag_bv.webp rename to ui/resources/src/androidMain/res/drawable-nodpi/ic_flag_bv.webp diff --git a/ui/resources/src/main/res/drawable-nodpi/ic_flag_bw.webp b/ui/resources/src/androidMain/res/drawable-nodpi/ic_flag_bw.webp similarity index 100% rename from ui/resources/src/main/res/drawable-nodpi/ic_flag_bw.webp rename to ui/resources/src/androidMain/res/drawable-nodpi/ic_flag_bw.webp diff --git a/ui/resources/src/main/res/drawable-nodpi/ic_flag_by.webp b/ui/resources/src/androidMain/res/drawable-nodpi/ic_flag_by.webp similarity index 100% rename from ui/resources/src/main/res/drawable-nodpi/ic_flag_by.webp rename to ui/resources/src/androidMain/res/drawable-nodpi/ic_flag_by.webp diff --git a/ui/resources/src/main/res/drawable-nodpi/ic_flag_bz.webp b/ui/resources/src/androidMain/res/drawable-nodpi/ic_flag_bz.webp similarity index 100% rename from ui/resources/src/main/res/drawable-nodpi/ic_flag_bz.webp rename to ui/resources/src/androidMain/res/drawable-nodpi/ic_flag_bz.webp diff --git a/ui/resources/src/main/res/drawable-nodpi/ic_flag_ca.webp b/ui/resources/src/androidMain/res/drawable-nodpi/ic_flag_ca.webp similarity index 100% rename from ui/resources/src/main/res/drawable-nodpi/ic_flag_ca.webp rename to ui/resources/src/androidMain/res/drawable-nodpi/ic_flag_ca.webp diff --git a/ui/resources/src/main/res/drawable-nodpi/ic_flag_cc.webp b/ui/resources/src/androidMain/res/drawable-nodpi/ic_flag_cc.webp similarity index 100% rename from ui/resources/src/main/res/drawable-nodpi/ic_flag_cc.webp rename to ui/resources/src/androidMain/res/drawable-nodpi/ic_flag_cc.webp diff --git a/ui/resources/src/main/res/drawable-nodpi/ic_flag_cd.webp b/ui/resources/src/androidMain/res/drawable-nodpi/ic_flag_cd.webp similarity index 100% rename from ui/resources/src/main/res/drawable-nodpi/ic_flag_cd.webp rename to ui/resources/src/androidMain/res/drawable-nodpi/ic_flag_cd.webp diff --git a/ui/resources/src/main/res/drawable-nodpi/ic_flag_cf.webp b/ui/resources/src/androidMain/res/drawable-nodpi/ic_flag_cf.webp similarity index 100% rename from ui/resources/src/main/res/drawable-nodpi/ic_flag_cf.webp rename to ui/resources/src/androidMain/res/drawable-nodpi/ic_flag_cf.webp diff --git a/ui/resources/src/main/res/drawable-nodpi/ic_flag_cg.webp b/ui/resources/src/androidMain/res/drawable-nodpi/ic_flag_cg.webp similarity index 100% rename from ui/resources/src/main/res/drawable-nodpi/ic_flag_cg.webp rename to ui/resources/src/androidMain/res/drawable-nodpi/ic_flag_cg.webp diff --git a/ui/resources/src/main/res/drawable-nodpi/ic_flag_ch.webp b/ui/resources/src/androidMain/res/drawable-nodpi/ic_flag_ch.webp similarity index 100% rename from ui/resources/src/main/res/drawable-nodpi/ic_flag_ch.webp rename to ui/resources/src/androidMain/res/drawable-nodpi/ic_flag_ch.webp diff --git a/ui/resources/src/main/res/drawable-nodpi/ic_flag_ci.webp b/ui/resources/src/androidMain/res/drawable-nodpi/ic_flag_ci.webp similarity index 100% rename from ui/resources/src/main/res/drawable-nodpi/ic_flag_ci.webp rename to ui/resources/src/androidMain/res/drawable-nodpi/ic_flag_ci.webp diff --git a/ui/resources/src/main/res/drawable-nodpi/ic_flag_ck.webp b/ui/resources/src/androidMain/res/drawable-nodpi/ic_flag_ck.webp similarity index 100% rename from ui/resources/src/main/res/drawable-nodpi/ic_flag_ck.webp rename to ui/resources/src/androidMain/res/drawable-nodpi/ic_flag_ck.webp diff --git a/ui/resources/src/main/res/drawable-nodpi/ic_flag_cl.webp b/ui/resources/src/androidMain/res/drawable-nodpi/ic_flag_cl.webp similarity index 100% rename from ui/resources/src/main/res/drawable-nodpi/ic_flag_cl.webp rename to ui/resources/src/androidMain/res/drawable-nodpi/ic_flag_cl.webp diff --git a/ui/resources/src/main/res/drawable-nodpi/ic_flag_cm.webp b/ui/resources/src/androidMain/res/drawable-nodpi/ic_flag_cm.webp similarity index 100% rename from ui/resources/src/main/res/drawable-nodpi/ic_flag_cm.webp rename to ui/resources/src/androidMain/res/drawable-nodpi/ic_flag_cm.webp diff --git a/ui/resources/src/main/res/drawable-nodpi/ic_flag_cn.webp b/ui/resources/src/androidMain/res/drawable-nodpi/ic_flag_cn.webp similarity index 100% rename from ui/resources/src/main/res/drawable-nodpi/ic_flag_cn.webp rename to ui/resources/src/androidMain/res/drawable-nodpi/ic_flag_cn.webp diff --git a/ui/resources/src/main/res/drawable-nodpi/ic_flag_co.webp b/ui/resources/src/androidMain/res/drawable-nodpi/ic_flag_co.webp similarity index 100% rename from ui/resources/src/main/res/drawable-nodpi/ic_flag_co.webp rename to ui/resources/src/androidMain/res/drawable-nodpi/ic_flag_co.webp diff --git a/ui/resources/src/main/res/drawable-nodpi/ic_flag_cr.webp b/ui/resources/src/androidMain/res/drawable-nodpi/ic_flag_cr.webp similarity index 100% rename from ui/resources/src/main/res/drawable-nodpi/ic_flag_cr.webp rename to ui/resources/src/androidMain/res/drawable-nodpi/ic_flag_cr.webp diff --git a/ui/resources/src/main/res/drawable-nodpi/ic_flag_cu.webp b/ui/resources/src/androidMain/res/drawable-nodpi/ic_flag_cu.webp similarity index 100% rename from ui/resources/src/main/res/drawable-nodpi/ic_flag_cu.webp rename to ui/resources/src/androidMain/res/drawable-nodpi/ic_flag_cu.webp diff --git a/ui/resources/src/main/res/drawable-nodpi/ic_flag_cv.webp b/ui/resources/src/androidMain/res/drawable-nodpi/ic_flag_cv.webp similarity index 100% rename from ui/resources/src/main/res/drawable-nodpi/ic_flag_cv.webp rename to ui/resources/src/androidMain/res/drawable-nodpi/ic_flag_cv.webp diff --git a/ui/resources/src/main/res/drawable-nodpi/ic_flag_cw.webp b/ui/resources/src/androidMain/res/drawable-nodpi/ic_flag_cw.webp similarity index 100% rename from ui/resources/src/main/res/drawable-nodpi/ic_flag_cw.webp rename to ui/resources/src/androidMain/res/drawable-nodpi/ic_flag_cw.webp diff --git a/ui/resources/src/main/res/drawable-nodpi/ic_flag_cx.webp b/ui/resources/src/androidMain/res/drawable-nodpi/ic_flag_cx.webp similarity index 100% rename from ui/resources/src/main/res/drawable-nodpi/ic_flag_cx.webp rename to ui/resources/src/androidMain/res/drawable-nodpi/ic_flag_cx.webp diff --git a/ui/resources/src/main/res/drawable-nodpi/ic_flag_cy.webp b/ui/resources/src/androidMain/res/drawable-nodpi/ic_flag_cy.webp similarity index 100% rename from ui/resources/src/main/res/drawable-nodpi/ic_flag_cy.webp rename to ui/resources/src/androidMain/res/drawable-nodpi/ic_flag_cy.webp diff --git a/ui/resources/src/main/res/drawable-nodpi/ic_flag_cz.webp b/ui/resources/src/androidMain/res/drawable-nodpi/ic_flag_cz.webp similarity index 100% rename from ui/resources/src/main/res/drawable-nodpi/ic_flag_cz.webp rename to ui/resources/src/androidMain/res/drawable-nodpi/ic_flag_cz.webp diff --git a/ui/resources/src/main/res/drawable-nodpi/ic_flag_de.webp b/ui/resources/src/androidMain/res/drawable-nodpi/ic_flag_de.webp similarity index 100% rename from ui/resources/src/main/res/drawable-nodpi/ic_flag_de.webp rename to ui/resources/src/androidMain/res/drawable-nodpi/ic_flag_de.webp diff --git a/ui/resources/src/main/res/drawable-nodpi/ic_flag_dj.webp b/ui/resources/src/androidMain/res/drawable-nodpi/ic_flag_dj.webp similarity index 100% rename from ui/resources/src/main/res/drawable-nodpi/ic_flag_dj.webp rename to ui/resources/src/androidMain/res/drawable-nodpi/ic_flag_dj.webp diff --git a/ui/resources/src/main/res/drawable-nodpi/ic_flag_dk.webp b/ui/resources/src/androidMain/res/drawable-nodpi/ic_flag_dk.webp similarity index 100% rename from ui/resources/src/main/res/drawable-nodpi/ic_flag_dk.webp rename to ui/resources/src/androidMain/res/drawable-nodpi/ic_flag_dk.webp diff --git a/ui/resources/src/main/res/drawable-nodpi/ic_flag_dm.webp b/ui/resources/src/androidMain/res/drawable-nodpi/ic_flag_dm.webp similarity index 100% rename from ui/resources/src/main/res/drawable-nodpi/ic_flag_dm.webp rename to ui/resources/src/androidMain/res/drawable-nodpi/ic_flag_dm.webp diff --git a/ui/resources/src/main/res/drawable-nodpi/ic_flag_do.webp b/ui/resources/src/androidMain/res/drawable-nodpi/ic_flag_do.webp similarity index 100% rename from ui/resources/src/main/res/drawable-nodpi/ic_flag_do.webp rename to ui/resources/src/androidMain/res/drawable-nodpi/ic_flag_do.webp diff --git a/ui/resources/src/main/res/drawable-nodpi/ic_flag_dz.webp b/ui/resources/src/androidMain/res/drawable-nodpi/ic_flag_dz.webp similarity index 100% rename from ui/resources/src/main/res/drawable-nodpi/ic_flag_dz.webp rename to ui/resources/src/androidMain/res/drawable-nodpi/ic_flag_dz.webp diff --git a/ui/resources/src/main/res/drawable-nodpi/ic_flag_ec.webp b/ui/resources/src/androidMain/res/drawable-nodpi/ic_flag_ec.webp similarity index 100% rename from ui/resources/src/main/res/drawable-nodpi/ic_flag_ec.webp rename to ui/resources/src/androidMain/res/drawable-nodpi/ic_flag_ec.webp diff --git a/ui/resources/src/main/res/drawable-nodpi/ic_flag_ee.webp b/ui/resources/src/androidMain/res/drawable-nodpi/ic_flag_ee.webp similarity index 100% rename from ui/resources/src/main/res/drawable-nodpi/ic_flag_ee.webp rename to ui/resources/src/androidMain/res/drawable-nodpi/ic_flag_ee.webp diff --git a/ui/resources/src/main/res/drawable-nodpi/ic_flag_eg.webp b/ui/resources/src/androidMain/res/drawable-nodpi/ic_flag_eg.webp similarity index 100% rename from ui/resources/src/main/res/drawable-nodpi/ic_flag_eg.webp rename to ui/resources/src/androidMain/res/drawable-nodpi/ic_flag_eg.webp diff --git a/ui/resources/src/main/res/drawable-nodpi/ic_flag_eh.webp b/ui/resources/src/androidMain/res/drawable-nodpi/ic_flag_eh.webp similarity index 100% rename from ui/resources/src/main/res/drawable-nodpi/ic_flag_eh.webp rename to ui/resources/src/androidMain/res/drawable-nodpi/ic_flag_eh.webp diff --git a/ui/resources/src/main/res/drawable-nodpi/ic_flag_eo.webp b/ui/resources/src/androidMain/res/drawable-nodpi/ic_flag_eo.webp similarity index 100% rename from ui/resources/src/main/res/drawable-nodpi/ic_flag_eo.webp rename to ui/resources/src/androidMain/res/drawable-nodpi/ic_flag_eo.webp diff --git a/ui/resources/src/main/res/drawable-nodpi/ic_flag_er.webp b/ui/resources/src/androidMain/res/drawable-nodpi/ic_flag_er.webp similarity index 100% rename from ui/resources/src/main/res/drawable-nodpi/ic_flag_er.webp rename to ui/resources/src/androidMain/res/drawable-nodpi/ic_flag_er.webp diff --git a/ui/resources/src/main/res/drawable-nodpi/ic_flag_es.webp b/ui/resources/src/androidMain/res/drawable-nodpi/ic_flag_es.webp similarity index 100% rename from ui/resources/src/main/res/drawable-nodpi/ic_flag_es.webp rename to ui/resources/src/androidMain/res/drawable-nodpi/ic_flag_es.webp diff --git a/ui/resources/src/main/res/drawable-nodpi/ic_flag_et.webp b/ui/resources/src/androidMain/res/drawable-nodpi/ic_flag_et.webp similarity index 100% rename from ui/resources/src/main/res/drawable-nodpi/ic_flag_et.webp rename to ui/resources/src/androidMain/res/drawable-nodpi/ic_flag_et.webp diff --git a/ui/resources/src/main/res/drawable-nodpi/ic_flag_eu.webp b/ui/resources/src/androidMain/res/drawable-nodpi/ic_flag_eu.webp similarity index 100% rename from ui/resources/src/main/res/drawable-nodpi/ic_flag_eu.webp rename to ui/resources/src/androidMain/res/drawable-nodpi/ic_flag_eu.webp diff --git a/ui/resources/src/main/res/drawable-nodpi/ic_flag_fi.webp b/ui/resources/src/androidMain/res/drawable-nodpi/ic_flag_fi.webp similarity index 100% rename from ui/resources/src/main/res/drawable-nodpi/ic_flag_fi.webp rename to ui/resources/src/androidMain/res/drawable-nodpi/ic_flag_fi.webp diff --git a/ui/resources/src/main/res/drawable-nodpi/ic_flag_fj.webp b/ui/resources/src/androidMain/res/drawable-nodpi/ic_flag_fj.webp similarity index 100% rename from ui/resources/src/main/res/drawable-nodpi/ic_flag_fj.webp rename to ui/resources/src/androidMain/res/drawable-nodpi/ic_flag_fj.webp diff --git a/ui/resources/src/main/res/drawable-nodpi/ic_flag_fk.webp b/ui/resources/src/androidMain/res/drawable-nodpi/ic_flag_fk.webp similarity index 100% rename from ui/resources/src/main/res/drawable-nodpi/ic_flag_fk.webp rename to ui/resources/src/androidMain/res/drawable-nodpi/ic_flag_fk.webp diff --git a/ui/resources/src/main/res/drawable-nodpi/ic_flag_fm.webp b/ui/resources/src/androidMain/res/drawable-nodpi/ic_flag_fm.webp similarity index 100% rename from ui/resources/src/main/res/drawable-nodpi/ic_flag_fm.webp rename to ui/resources/src/androidMain/res/drawable-nodpi/ic_flag_fm.webp diff --git a/ui/resources/src/main/res/drawable-nodpi/ic_flag_fo.webp b/ui/resources/src/androidMain/res/drawable-nodpi/ic_flag_fo.webp similarity index 100% rename from ui/resources/src/main/res/drawable-nodpi/ic_flag_fo.webp rename to ui/resources/src/androidMain/res/drawable-nodpi/ic_flag_fo.webp diff --git a/ui/resources/src/main/res/drawable-nodpi/ic_flag_fr.webp b/ui/resources/src/androidMain/res/drawable-nodpi/ic_flag_fr.webp similarity index 100% rename from ui/resources/src/main/res/drawable-nodpi/ic_flag_fr.webp rename to ui/resources/src/androidMain/res/drawable-nodpi/ic_flag_fr.webp diff --git a/ui/resources/src/main/res/drawable-nodpi/ic_flag_ga.webp b/ui/resources/src/androidMain/res/drawable-nodpi/ic_flag_ga.webp similarity index 100% rename from ui/resources/src/main/res/drawable-nodpi/ic_flag_ga.webp rename to ui/resources/src/androidMain/res/drawable-nodpi/ic_flag_ga.webp diff --git a/ui/resources/src/main/res/drawable-nodpi/ic_flag_gb.webp b/ui/resources/src/androidMain/res/drawable-nodpi/ic_flag_gb.webp similarity index 100% rename from ui/resources/src/main/res/drawable-nodpi/ic_flag_gb.webp rename to ui/resources/src/androidMain/res/drawable-nodpi/ic_flag_gb.webp diff --git a/ui/resources/src/main/res/drawable-nodpi/ic_flag_gd.webp b/ui/resources/src/androidMain/res/drawable-nodpi/ic_flag_gd.webp similarity index 100% rename from ui/resources/src/main/res/drawable-nodpi/ic_flag_gd.webp rename to ui/resources/src/androidMain/res/drawable-nodpi/ic_flag_gd.webp diff --git a/ui/resources/src/main/res/drawable-nodpi/ic_flag_ge.webp b/ui/resources/src/androidMain/res/drawable-nodpi/ic_flag_ge.webp similarity index 100% rename from ui/resources/src/main/res/drawable-nodpi/ic_flag_ge.webp rename to ui/resources/src/androidMain/res/drawable-nodpi/ic_flag_ge.webp diff --git a/ui/resources/src/main/res/drawable-nodpi/ic_flag_gf.webp b/ui/resources/src/androidMain/res/drawable-nodpi/ic_flag_gf.webp similarity index 100% rename from ui/resources/src/main/res/drawable-nodpi/ic_flag_gf.webp rename to ui/resources/src/androidMain/res/drawable-nodpi/ic_flag_gf.webp diff --git a/ui/resources/src/main/res/drawable-nodpi/ic_flag_gg.webp b/ui/resources/src/androidMain/res/drawable-nodpi/ic_flag_gg.webp similarity index 100% rename from ui/resources/src/main/res/drawable-nodpi/ic_flag_gg.webp rename to ui/resources/src/androidMain/res/drawable-nodpi/ic_flag_gg.webp diff --git a/ui/resources/src/main/res/drawable-nodpi/ic_flag_gh.webp b/ui/resources/src/androidMain/res/drawable-nodpi/ic_flag_gh.webp similarity index 100% rename from ui/resources/src/main/res/drawable-nodpi/ic_flag_gh.webp rename to ui/resources/src/androidMain/res/drawable-nodpi/ic_flag_gh.webp diff --git a/ui/resources/src/main/res/drawable-nodpi/ic_flag_gi.webp b/ui/resources/src/androidMain/res/drawable-nodpi/ic_flag_gi.webp similarity index 100% rename from ui/resources/src/main/res/drawable-nodpi/ic_flag_gi.webp rename to ui/resources/src/androidMain/res/drawable-nodpi/ic_flag_gi.webp diff --git a/ui/resources/src/main/res/drawable-nodpi/ic_flag_gl.webp b/ui/resources/src/androidMain/res/drawable-nodpi/ic_flag_gl.webp similarity index 100% rename from ui/resources/src/main/res/drawable-nodpi/ic_flag_gl.webp rename to ui/resources/src/androidMain/res/drawable-nodpi/ic_flag_gl.webp diff --git a/ui/resources/src/main/res/drawable-nodpi/ic_flag_gm.webp b/ui/resources/src/androidMain/res/drawable-nodpi/ic_flag_gm.webp similarity index 100% rename from ui/resources/src/main/res/drawable-nodpi/ic_flag_gm.webp rename to ui/resources/src/androidMain/res/drawable-nodpi/ic_flag_gm.webp diff --git a/ui/resources/src/main/res/drawable-nodpi/ic_flag_gn.webp b/ui/resources/src/androidMain/res/drawable-nodpi/ic_flag_gn.webp similarity index 100% rename from ui/resources/src/main/res/drawable-nodpi/ic_flag_gn.webp rename to ui/resources/src/androidMain/res/drawable-nodpi/ic_flag_gn.webp diff --git a/ui/resources/src/main/res/drawable-nodpi/ic_flag_gp.webp b/ui/resources/src/androidMain/res/drawable-nodpi/ic_flag_gp.webp similarity index 100% rename from ui/resources/src/main/res/drawable-nodpi/ic_flag_gp.webp rename to ui/resources/src/androidMain/res/drawable-nodpi/ic_flag_gp.webp diff --git a/ui/resources/src/main/res/drawable-nodpi/ic_flag_gq.webp b/ui/resources/src/androidMain/res/drawable-nodpi/ic_flag_gq.webp similarity index 100% rename from ui/resources/src/main/res/drawable-nodpi/ic_flag_gq.webp rename to ui/resources/src/androidMain/res/drawable-nodpi/ic_flag_gq.webp diff --git a/ui/resources/src/main/res/drawable-nodpi/ic_flag_gr.webp b/ui/resources/src/androidMain/res/drawable-nodpi/ic_flag_gr.webp similarity index 100% rename from ui/resources/src/main/res/drawable-nodpi/ic_flag_gr.webp rename to ui/resources/src/androidMain/res/drawable-nodpi/ic_flag_gr.webp diff --git a/ui/resources/src/main/res/drawable-nodpi/ic_flag_gs.webp b/ui/resources/src/androidMain/res/drawable-nodpi/ic_flag_gs.webp similarity index 100% rename from ui/resources/src/main/res/drawable-nodpi/ic_flag_gs.webp rename to ui/resources/src/androidMain/res/drawable-nodpi/ic_flag_gs.webp diff --git a/ui/resources/src/main/res/drawable-nodpi/ic_flag_gt.webp b/ui/resources/src/androidMain/res/drawable-nodpi/ic_flag_gt.webp similarity index 100% rename from ui/resources/src/main/res/drawable-nodpi/ic_flag_gt.webp rename to ui/resources/src/androidMain/res/drawable-nodpi/ic_flag_gt.webp diff --git a/ui/resources/src/main/res/drawable-nodpi/ic_flag_gu.webp b/ui/resources/src/androidMain/res/drawable-nodpi/ic_flag_gu.webp similarity index 100% rename from ui/resources/src/main/res/drawable-nodpi/ic_flag_gu.webp rename to ui/resources/src/androidMain/res/drawable-nodpi/ic_flag_gu.webp diff --git a/ui/resources/src/main/res/drawable-nodpi/ic_flag_gw.webp b/ui/resources/src/androidMain/res/drawable-nodpi/ic_flag_gw.webp similarity index 100% rename from ui/resources/src/main/res/drawable-nodpi/ic_flag_gw.webp rename to ui/resources/src/androidMain/res/drawable-nodpi/ic_flag_gw.webp diff --git a/ui/resources/src/main/res/drawable-nodpi/ic_flag_gy.webp b/ui/resources/src/androidMain/res/drawable-nodpi/ic_flag_gy.webp similarity index 100% rename from ui/resources/src/main/res/drawable-nodpi/ic_flag_gy.webp rename to ui/resources/src/androidMain/res/drawable-nodpi/ic_flag_gy.webp diff --git a/ui/resources/src/main/res/drawable-nodpi/ic_flag_hk.webp b/ui/resources/src/androidMain/res/drawable-nodpi/ic_flag_hk.webp similarity index 100% rename from ui/resources/src/main/res/drawable-nodpi/ic_flag_hk.webp rename to ui/resources/src/androidMain/res/drawable-nodpi/ic_flag_hk.webp diff --git a/ui/resources/src/main/res/drawable-nodpi/ic_flag_hm.webp b/ui/resources/src/androidMain/res/drawable-nodpi/ic_flag_hm.webp similarity index 100% rename from ui/resources/src/main/res/drawable-nodpi/ic_flag_hm.webp rename to ui/resources/src/androidMain/res/drawable-nodpi/ic_flag_hm.webp diff --git a/ui/resources/src/main/res/drawable-nodpi/ic_flag_hn.webp b/ui/resources/src/androidMain/res/drawable-nodpi/ic_flag_hn.webp similarity index 100% rename from ui/resources/src/main/res/drawable-nodpi/ic_flag_hn.webp rename to ui/resources/src/androidMain/res/drawable-nodpi/ic_flag_hn.webp diff --git a/ui/resources/src/main/res/drawable-nodpi/ic_flag_hr.webp b/ui/resources/src/androidMain/res/drawable-nodpi/ic_flag_hr.webp similarity index 100% rename from ui/resources/src/main/res/drawable-nodpi/ic_flag_hr.webp rename to ui/resources/src/androidMain/res/drawable-nodpi/ic_flag_hr.webp diff --git a/ui/resources/src/main/res/drawable-nodpi/ic_flag_ht.webp b/ui/resources/src/androidMain/res/drawable-nodpi/ic_flag_ht.webp similarity index 100% rename from ui/resources/src/main/res/drawable-nodpi/ic_flag_ht.webp rename to ui/resources/src/androidMain/res/drawable-nodpi/ic_flag_ht.webp diff --git a/ui/resources/src/main/res/drawable-nodpi/ic_flag_hu.webp b/ui/resources/src/androidMain/res/drawable-nodpi/ic_flag_hu.webp similarity index 100% rename from ui/resources/src/main/res/drawable-nodpi/ic_flag_hu.webp rename to ui/resources/src/androidMain/res/drawable-nodpi/ic_flag_hu.webp diff --git a/ui/resources/src/main/res/drawable-nodpi/ic_flag_id.webp b/ui/resources/src/androidMain/res/drawable-nodpi/ic_flag_id.webp similarity index 100% rename from ui/resources/src/main/res/drawable-nodpi/ic_flag_id.webp rename to ui/resources/src/androidMain/res/drawable-nodpi/ic_flag_id.webp diff --git a/ui/resources/src/main/res/drawable-nodpi/ic_flag_ie.webp b/ui/resources/src/androidMain/res/drawable-nodpi/ic_flag_ie.webp similarity index 100% rename from ui/resources/src/main/res/drawable-nodpi/ic_flag_ie.webp rename to ui/resources/src/androidMain/res/drawable-nodpi/ic_flag_ie.webp diff --git a/ui/resources/src/main/res/drawable-nodpi/ic_flag_il.webp b/ui/resources/src/androidMain/res/drawable-nodpi/ic_flag_il.webp similarity index 100% rename from ui/resources/src/main/res/drawable-nodpi/ic_flag_il.webp rename to ui/resources/src/androidMain/res/drawable-nodpi/ic_flag_il.webp diff --git a/ui/resources/src/main/res/drawable-nodpi/ic_flag_im.webp b/ui/resources/src/androidMain/res/drawable-nodpi/ic_flag_im.webp similarity index 100% rename from ui/resources/src/main/res/drawable-nodpi/ic_flag_im.webp rename to ui/resources/src/androidMain/res/drawable-nodpi/ic_flag_im.webp diff --git a/ui/resources/src/main/res/drawable-nodpi/ic_flag_in.webp b/ui/resources/src/androidMain/res/drawable-nodpi/ic_flag_in.webp similarity index 100% rename from ui/resources/src/main/res/drawable-nodpi/ic_flag_in.webp rename to ui/resources/src/androidMain/res/drawable-nodpi/ic_flag_in.webp diff --git a/ui/resources/src/main/res/drawable-nodpi/ic_flag_io.webp b/ui/resources/src/androidMain/res/drawable-nodpi/ic_flag_io.webp similarity index 100% rename from ui/resources/src/main/res/drawable-nodpi/ic_flag_io.webp rename to ui/resources/src/androidMain/res/drawable-nodpi/ic_flag_io.webp diff --git a/ui/resources/src/main/res/drawable-nodpi/ic_flag_iq.webp b/ui/resources/src/androidMain/res/drawable-nodpi/ic_flag_iq.webp similarity index 100% rename from ui/resources/src/main/res/drawable-nodpi/ic_flag_iq.webp rename to ui/resources/src/androidMain/res/drawable-nodpi/ic_flag_iq.webp diff --git a/ui/resources/src/main/res/drawable-nodpi/ic_flag_ir.webp b/ui/resources/src/androidMain/res/drawable-nodpi/ic_flag_ir.webp similarity index 100% rename from ui/resources/src/main/res/drawable-nodpi/ic_flag_ir.webp rename to ui/resources/src/androidMain/res/drawable-nodpi/ic_flag_ir.webp diff --git a/ui/resources/src/main/res/drawable-nodpi/ic_flag_is.webp b/ui/resources/src/androidMain/res/drawable-nodpi/ic_flag_is.webp similarity index 100% rename from ui/resources/src/main/res/drawable-nodpi/ic_flag_is.webp rename to ui/resources/src/androidMain/res/drawable-nodpi/ic_flag_is.webp diff --git a/ui/resources/src/main/res/drawable-nodpi/ic_flag_it.webp b/ui/resources/src/androidMain/res/drawable-nodpi/ic_flag_it.webp similarity index 100% rename from ui/resources/src/main/res/drawable-nodpi/ic_flag_it.webp rename to ui/resources/src/androidMain/res/drawable-nodpi/ic_flag_it.webp diff --git a/ui/resources/src/main/res/drawable-nodpi/ic_flag_je.webp b/ui/resources/src/androidMain/res/drawable-nodpi/ic_flag_je.webp similarity index 100% rename from ui/resources/src/main/res/drawable-nodpi/ic_flag_je.webp rename to ui/resources/src/androidMain/res/drawable-nodpi/ic_flag_je.webp diff --git a/ui/resources/src/main/res/drawable-nodpi/ic_flag_jm.webp b/ui/resources/src/androidMain/res/drawable-nodpi/ic_flag_jm.webp similarity index 100% rename from ui/resources/src/main/res/drawable-nodpi/ic_flag_jm.webp rename to ui/resources/src/androidMain/res/drawable-nodpi/ic_flag_jm.webp diff --git a/ui/resources/src/main/res/drawable-nodpi/ic_flag_jo.webp b/ui/resources/src/androidMain/res/drawable-nodpi/ic_flag_jo.webp similarity index 100% rename from ui/resources/src/main/res/drawable-nodpi/ic_flag_jo.webp rename to ui/resources/src/androidMain/res/drawable-nodpi/ic_flag_jo.webp diff --git a/ui/resources/src/main/res/drawable-nodpi/ic_flag_jp.webp b/ui/resources/src/androidMain/res/drawable-nodpi/ic_flag_jp.webp similarity index 100% rename from ui/resources/src/main/res/drawable-nodpi/ic_flag_jp.webp rename to ui/resources/src/androidMain/res/drawable-nodpi/ic_flag_jp.webp diff --git a/ui/resources/src/main/res/drawable-nodpi/ic_flag_ke.webp b/ui/resources/src/androidMain/res/drawable-nodpi/ic_flag_ke.webp similarity index 100% rename from ui/resources/src/main/res/drawable-nodpi/ic_flag_ke.webp rename to ui/resources/src/androidMain/res/drawable-nodpi/ic_flag_ke.webp diff --git a/ui/resources/src/main/res/drawable-nodpi/ic_flag_kg.webp b/ui/resources/src/androidMain/res/drawable-nodpi/ic_flag_kg.webp similarity index 100% rename from ui/resources/src/main/res/drawable-nodpi/ic_flag_kg.webp rename to ui/resources/src/androidMain/res/drawable-nodpi/ic_flag_kg.webp diff --git a/ui/resources/src/main/res/drawable-nodpi/ic_flag_kh.webp b/ui/resources/src/androidMain/res/drawable-nodpi/ic_flag_kh.webp similarity index 100% rename from ui/resources/src/main/res/drawable-nodpi/ic_flag_kh.webp rename to ui/resources/src/androidMain/res/drawable-nodpi/ic_flag_kh.webp diff --git a/ui/resources/src/main/res/drawable-nodpi/ic_flag_ki.webp b/ui/resources/src/androidMain/res/drawable-nodpi/ic_flag_ki.webp similarity index 100% rename from ui/resources/src/main/res/drawable-nodpi/ic_flag_ki.webp rename to ui/resources/src/androidMain/res/drawable-nodpi/ic_flag_ki.webp diff --git a/ui/resources/src/main/res/drawable-nodpi/ic_flag_km.webp b/ui/resources/src/androidMain/res/drawable-nodpi/ic_flag_km.webp similarity index 100% rename from ui/resources/src/main/res/drawable-nodpi/ic_flag_km.webp rename to ui/resources/src/androidMain/res/drawable-nodpi/ic_flag_km.webp diff --git a/ui/resources/src/main/res/drawable-nodpi/ic_flag_kn.webp b/ui/resources/src/androidMain/res/drawable-nodpi/ic_flag_kn.webp similarity index 100% rename from ui/resources/src/main/res/drawable-nodpi/ic_flag_kn.webp rename to ui/resources/src/androidMain/res/drawable-nodpi/ic_flag_kn.webp diff --git a/ui/resources/src/main/res/drawable-nodpi/ic_flag_kp.webp b/ui/resources/src/androidMain/res/drawable-nodpi/ic_flag_kp.webp similarity index 100% rename from ui/resources/src/main/res/drawable-nodpi/ic_flag_kp.webp rename to ui/resources/src/androidMain/res/drawable-nodpi/ic_flag_kp.webp diff --git a/ui/resources/src/main/res/drawable-nodpi/ic_flag_kr.webp b/ui/resources/src/androidMain/res/drawable-nodpi/ic_flag_kr.webp similarity index 100% rename from ui/resources/src/main/res/drawable-nodpi/ic_flag_kr.webp rename to ui/resources/src/androidMain/res/drawable-nodpi/ic_flag_kr.webp diff --git a/ui/resources/src/main/res/drawable-nodpi/ic_flag_kw.webp b/ui/resources/src/androidMain/res/drawable-nodpi/ic_flag_kw.webp similarity index 100% rename from ui/resources/src/main/res/drawable-nodpi/ic_flag_kw.webp rename to ui/resources/src/androidMain/res/drawable-nodpi/ic_flag_kw.webp diff --git a/ui/resources/src/main/res/drawable-nodpi/ic_flag_ky.webp b/ui/resources/src/androidMain/res/drawable-nodpi/ic_flag_ky.webp similarity index 100% rename from ui/resources/src/main/res/drawable-nodpi/ic_flag_ky.webp rename to ui/resources/src/androidMain/res/drawable-nodpi/ic_flag_ky.webp diff --git a/ui/resources/src/main/res/drawable-nodpi/ic_flag_kz.webp b/ui/resources/src/androidMain/res/drawable-nodpi/ic_flag_kz.webp similarity index 100% rename from ui/resources/src/main/res/drawable-nodpi/ic_flag_kz.webp rename to ui/resources/src/androidMain/res/drawable-nodpi/ic_flag_kz.webp diff --git a/ui/resources/src/main/res/drawable-nodpi/ic_flag_la.webp b/ui/resources/src/androidMain/res/drawable-nodpi/ic_flag_la.webp similarity index 100% rename from ui/resources/src/main/res/drawable-nodpi/ic_flag_la.webp rename to ui/resources/src/androidMain/res/drawable-nodpi/ic_flag_la.webp diff --git a/ui/resources/src/main/res/drawable-nodpi/ic_flag_lb.webp b/ui/resources/src/androidMain/res/drawable-nodpi/ic_flag_lb.webp similarity index 100% rename from ui/resources/src/main/res/drawable-nodpi/ic_flag_lb.webp rename to ui/resources/src/androidMain/res/drawable-nodpi/ic_flag_lb.webp diff --git a/ui/resources/src/main/res/drawable-nodpi/ic_flag_lc.webp b/ui/resources/src/androidMain/res/drawable-nodpi/ic_flag_lc.webp similarity index 100% rename from ui/resources/src/main/res/drawable-nodpi/ic_flag_lc.webp rename to ui/resources/src/androidMain/res/drawable-nodpi/ic_flag_lc.webp diff --git a/ui/resources/src/main/res/drawable-nodpi/ic_flag_li.webp b/ui/resources/src/androidMain/res/drawable-nodpi/ic_flag_li.webp similarity index 100% rename from ui/resources/src/main/res/drawable-nodpi/ic_flag_li.webp rename to ui/resources/src/androidMain/res/drawable-nodpi/ic_flag_li.webp diff --git a/ui/resources/src/main/res/drawable-nodpi/ic_flag_lk.webp b/ui/resources/src/androidMain/res/drawable-nodpi/ic_flag_lk.webp similarity index 100% rename from ui/resources/src/main/res/drawable-nodpi/ic_flag_lk.webp rename to ui/resources/src/androidMain/res/drawable-nodpi/ic_flag_lk.webp diff --git a/ui/resources/src/main/res/drawable-nodpi/ic_flag_lr.webp b/ui/resources/src/androidMain/res/drawable-nodpi/ic_flag_lr.webp similarity index 100% rename from ui/resources/src/main/res/drawable-nodpi/ic_flag_lr.webp rename to ui/resources/src/androidMain/res/drawable-nodpi/ic_flag_lr.webp diff --git a/ui/resources/src/main/res/drawable-nodpi/ic_flag_ls.webp b/ui/resources/src/androidMain/res/drawable-nodpi/ic_flag_ls.webp similarity index 100% rename from ui/resources/src/main/res/drawable-nodpi/ic_flag_ls.webp rename to ui/resources/src/androidMain/res/drawable-nodpi/ic_flag_ls.webp diff --git a/ui/resources/src/main/res/drawable-nodpi/ic_flag_lt.webp b/ui/resources/src/androidMain/res/drawable-nodpi/ic_flag_lt.webp similarity index 100% rename from ui/resources/src/main/res/drawable-nodpi/ic_flag_lt.webp rename to ui/resources/src/androidMain/res/drawable-nodpi/ic_flag_lt.webp diff --git a/ui/resources/src/main/res/drawable-nodpi/ic_flag_lu.webp b/ui/resources/src/androidMain/res/drawable-nodpi/ic_flag_lu.webp similarity index 100% rename from ui/resources/src/main/res/drawable-nodpi/ic_flag_lu.webp rename to ui/resources/src/androidMain/res/drawable-nodpi/ic_flag_lu.webp diff --git a/ui/resources/src/main/res/drawable-nodpi/ic_flag_lv.webp b/ui/resources/src/androidMain/res/drawable-nodpi/ic_flag_lv.webp similarity index 100% rename from ui/resources/src/main/res/drawable-nodpi/ic_flag_lv.webp rename to ui/resources/src/androidMain/res/drawable-nodpi/ic_flag_lv.webp diff --git a/ui/resources/src/main/res/drawable-nodpi/ic_flag_ly.webp b/ui/resources/src/androidMain/res/drawable-nodpi/ic_flag_ly.webp similarity index 100% rename from ui/resources/src/main/res/drawable-nodpi/ic_flag_ly.webp rename to ui/resources/src/androidMain/res/drawable-nodpi/ic_flag_ly.webp diff --git a/ui/resources/src/main/res/drawable-nodpi/ic_flag_ma.webp b/ui/resources/src/androidMain/res/drawable-nodpi/ic_flag_ma.webp similarity index 100% rename from ui/resources/src/main/res/drawable-nodpi/ic_flag_ma.webp rename to ui/resources/src/androidMain/res/drawable-nodpi/ic_flag_ma.webp diff --git a/ui/resources/src/main/res/drawable-nodpi/ic_flag_mc.webp b/ui/resources/src/androidMain/res/drawable-nodpi/ic_flag_mc.webp similarity index 100% rename from ui/resources/src/main/res/drawable-nodpi/ic_flag_mc.webp rename to ui/resources/src/androidMain/res/drawable-nodpi/ic_flag_mc.webp diff --git a/ui/resources/src/main/res/drawable-nodpi/ic_flag_md.webp b/ui/resources/src/androidMain/res/drawable-nodpi/ic_flag_md.webp similarity index 100% rename from ui/resources/src/main/res/drawable-nodpi/ic_flag_md.webp rename to ui/resources/src/androidMain/res/drawable-nodpi/ic_flag_md.webp diff --git a/ui/resources/src/main/res/drawable-nodpi/ic_flag_me.webp b/ui/resources/src/androidMain/res/drawable-nodpi/ic_flag_me.webp similarity index 100% rename from ui/resources/src/main/res/drawable-nodpi/ic_flag_me.webp rename to ui/resources/src/androidMain/res/drawable-nodpi/ic_flag_me.webp diff --git a/ui/resources/src/main/res/drawable-nodpi/ic_flag_mf.webp b/ui/resources/src/androidMain/res/drawable-nodpi/ic_flag_mf.webp similarity index 100% rename from ui/resources/src/main/res/drawable-nodpi/ic_flag_mf.webp rename to ui/resources/src/androidMain/res/drawable-nodpi/ic_flag_mf.webp diff --git a/ui/resources/src/main/res/drawable-nodpi/ic_flag_mg.webp b/ui/resources/src/androidMain/res/drawable-nodpi/ic_flag_mg.webp similarity index 100% rename from ui/resources/src/main/res/drawable-nodpi/ic_flag_mg.webp rename to ui/resources/src/androidMain/res/drawable-nodpi/ic_flag_mg.webp diff --git a/ui/resources/src/main/res/drawable-nodpi/ic_flag_mh.webp b/ui/resources/src/androidMain/res/drawable-nodpi/ic_flag_mh.webp similarity index 100% rename from ui/resources/src/main/res/drawable-nodpi/ic_flag_mh.webp rename to ui/resources/src/androidMain/res/drawable-nodpi/ic_flag_mh.webp diff --git a/ui/resources/src/main/res/drawable-nodpi/ic_flag_mk.webp b/ui/resources/src/androidMain/res/drawable-nodpi/ic_flag_mk.webp similarity index 100% rename from ui/resources/src/main/res/drawable-nodpi/ic_flag_mk.webp rename to ui/resources/src/androidMain/res/drawable-nodpi/ic_flag_mk.webp diff --git a/ui/resources/src/main/res/drawable-nodpi/ic_flag_ml.webp b/ui/resources/src/androidMain/res/drawable-nodpi/ic_flag_ml.webp similarity index 100% rename from ui/resources/src/main/res/drawable-nodpi/ic_flag_ml.webp rename to ui/resources/src/androidMain/res/drawable-nodpi/ic_flag_ml.webp diff --git a/ui/resources/src/main/res/drawable-nodpi/ic_flag_mm.webp b/ui/resources/src/androidMain/res/drawable-nodpi/ic_flag_mm.webp similarity index 100% rename from ui/resources/src/main/res/drawable-nodpi/ic_flag_mm.webp rename to ui/resources/src/androidMain/res/drawable-nodpi/ic_flag_mm.webp diff --git a/ui/resources/src/main/res/drawable-nodpi/ic_flag_mn.webp b/ui/resources/src/androidMain/res/drawable-nodpi/ic_flag_mn.webp similarity index 100% rename from ui/resources/src/main/res/drawable-nodpi/ic_flag_mn.webp rename to ui/resources/src/androidMain/res/drawable-nodpi/ic_flag_mn.webp diff --git a/ui/resources/src/main/res/drawable-nodpi/ic_flag_mo.webp b/ui/resources/src/androidMain/res/drawable-nodpi/ic_flag_mo.webp similarity index 100% rename from ui/resources/src/main/res/drawable-nodpi/ic_flag_mo.webp rename to ui/resources/src/androidMain/res/drawable-nodpi/ic_flag_mo.webp diff --git a/ui/resources/src/main/res/drawable-nodpi/ic_flag_mp.webp b/ui/resources/src/androidMain/res/drawable-nodpi/ic_flag_mp.webp similarity index 100% rename from ui/resources/src/main/res/drawable-nodpi/ic_flag_mp.webp rename to ui/resources/src/androidMain/res/drawable-nodpi/ic_flag_mp.webp diff --git a/ui/resources/src/main/res/drawable-nodpi/ic_flag_mq.webp b/ui/resources/src/androidMain/res/drawable-nodpi/ic_flag_mq.webp similarity index 100% rename from ui/resources/src/main/res/drawable-nodpi/ic_flag_mq.webp rename to ui/resources/src/androidMain/res/drawable-nodpi/ic_flag_mq.webp diff --git a/ui/resources/src/main/res/drawable-nodpi/ic_flag_mr.webp b/ui/resources/src/androidMain/res/drawable-nodpi/ic_flag_mr.webp similarity index 100% rename from ui/resources/src/main/res/drawable-nodpi/ic_flag_mr.webp rename to ui/resources/src/androidMain/res/drawable-nodpi/ic_flag_mr.webp diff --git a/ui/resources/src/main/res/drawable-nodpi/ic_flag_ms.webp b/ui/resources/src/androidMain/res/drawable-nodpi/ic_flag_ms.webp similarity index 100% rename from ui/resources/src/main/res/drawable-nodpi/ic_flag_ms.webp rename to ui/resources/src/androidMain/res/drawable-nodpi/ic_flag_ms.webp diff --git a/ui/resources/src/main/res/drawable-nodpi/ic_flag_mt.webp b/ui/resources/src/androidMain/res/drawable-nodpi/ic_flag_mt.webp similarity index 100% rename from ui/resources/src/main/res/drawable-nodpi/ic_flag_mt.webp rename to ui/resources/src/androidMain/res/drawable-nodpi/ic_flag_mt.webp diff --git a/ui/resources/src/main/res/drawable-nodpi/ic_flag_mu.webp b/ui/resources/src/androidMain/res/drawable-nodpi/ic_flag_mu.webp similarity index 100% rename from ui/resources/src/main/res/drawable-nodpi/ic_flag_mu.webp rename to ui/resources/src/androidMain/res/drawable-nodpi/ic_flag_mu.webp diff --git a/ui/resources/src/main/res/drawable-nodpi/ic_flag_mv.webp b/ui/resources/src/androidMain/res/drawable-nodpi/ic_flag_mv.webp similarity index 100% rename from ui/resources/src/main/res/drawable-nodpi/ic_flag_mv.webp rename to ui/resources/src/androidMain/res/drawable-nodpi/ic_flag_mv.webp diff --git a/ui/resources/src/main/res/drawable-nodpi/ic_flag_mw.webp b/ui/resources/src/androidMain/res/drawable-nodpi/ic_flag_mw.webp similarity index 100% rename from ui/resources/src/main/res/drawable-nodpi/ic_flag_mw.webp rename to ui/resources/src/androidMain/res/drawable-nodpi/ic_flag_mw.webp diff --git a/ui/resources/src/main/res/drawable-nodpi/ic_flag_mx.webp b/ui/resources/src/androidMain/res/drawable-nodpi/ic_flag_mx.webp similarity index 100% rename from ui/resources/src/main/res/drawable-nodpi/ic_flag_mx.webp rename to ui/resources/src/androidMain/res/drawable-nodpi/ic_flag_mx.webp diff --git a/ui/resources/src/main/res/drawable-nodpi/ic_flag_my.webp b/ui/resources/src/androidMain/res/drawable-nodpi/ic_flag_my.webp similarity index 100% rename from ui/resources/src/main/res/drawable-nodpi/ic_flag_my.webp rename to ui/resources/src/androidMain/res/drawable-nodpi/ic_flag_my.webp diff --git a/ui/resources/src/main/res/drawable-nodpi/ic_flag_mz.webp b/ui/resources/src/androidMain/res/drawable-nodpi/ic_flag_mz.webp similarity index 100% rename from ui/resources/src/main/res/drawable-nodpi/ic_flag_mz.webp rename to ui/resources/src/androidMain/res/drawable-nodpi/ic_flag_mz.webp diff --git a/ui/resources/src/main/res/drawable-nodpi/ic_flag_na.webp b/ui/resources/src/androidMain/res/drawable-nodpi/ic_flag_na.webp similarity index 100% rename from ui/resources/src/main/res/drawable-nodpi/ic_flag_na.webp rename to ui/resources/src/androidMain/res/drawable-nodpi/ic_flag_na.webp diff --git a/ui/resources/src/main/res/drawable-nodpi/ic_flag_nc.webp b/ui/resources/src/androidMain/res/drawable-nodpi/ic_flag_nc.webp similarity index 100% rename from ui/resources/src/main/res/drawable-nodpi/ic_flag_nc.webp rename to ui/resources/src/androidMain/res/drawable-nodpi/ic_flag_nc.webp diff --git a/ui/resources/src/main/res/drawable-nodpi/ic_flag_ne.webp b/ui/resources/src/androidMain/res/drawable-nodpi/ic_flag_ne.webp similarity index 100% rename from ui/resources/src/main/res/drawable-nodpi/ic_flag_ne.webp rename to ui/resources/src/androidMain/res/drawable-nodpi/ic_flag_ne.webp diff --git a/ui/resources/src/main/res/drawable-nodpi/ic_flag_nf.webp b/ui/resources/src/androidMain/res/drawable-nodpi/ic_flag_nf.webp similarity index 100% rename from ui/resources/src/main/res/drawable-nodpi/ic_flag_nf.webp rename to ui/resources/src/androidMain/res/drawable-nodpi/ic_flag_nf.webp diff --git a/ui/resources/src/main/res/drawable-nodpi/ic_flag_ng.webp b/ui/resources/src/androidMain/res/drawable-nodpi/ic_flag_ng.webp similarity index 100% rename from ui/resources/src/main/res/drawable-nodpi/ic_flag_ng.webp rename to ui/resources/src/androidMain/res/drawable-nodpi/ic_flag_ng.webp diff --git a/ui/resources/src/main/res/drawable-nodpi/ic_flag_ni.webp b/ui/resources/src/androidMain/res/drawable-nodpi/ic_flag_ni.webp similarity index 100% rename from ui/resources/src/main/res/drawable-nodpi/ic_flag_ni.webp rename to ui/resources/src/androidMain/res/drawable-nodpi/ic_flag_ni.webp diff --git a/ui/resources/src/main/res/drawable-nodpi/ic_flag_nl.webp b/ui/resources/src/androidMain/res/drawable-nodpi/ic_flag_nl.webp similarity index 100% rename from ui/resources/src/main/res/drawable-nodpi/ic_flag_nl.webp rename to ui/resources/src/androidMain/res/drawable-nodpi/ic_flag_nl.webp diff --git a/ui/resources/src/main/res/drawable-nodpi/ic_flag_no.webp b/ui/resources/src/androidMain/res/drawable-nodpi/ic_flag_no.webp similarity index 100% rename from ui/resources/src/main/res/drawable-nodpi/ic_flag_no.webp rename to ui/resources/src/androidMain/res/drawable-nodpi/ic_flag_no.webp diff --git a/ui/resources/src/main/res/drawable-nodpi/ic_flag_np.webp b/ui/resources/src/androidMain/res/drawable-nodpi/ic_flag_np.webp similarity index 100% rename from ui/resources/src/main/res/drawable-nodpi/ic_flag_np.webp rename to ui/resources/src/androidMain/res/drawable-nodpi/ic_flag_np.webp diff --git a/ui/resources/src/main/res/drawable-nodpi/ic_flag_nr.webp b/ui/resources/src/androidMain/res/drawable-nodpi/ic_flag_nr.webp similarity index 100% rename from ui/resources/src/main/res/drawable-nodpi/ic_flag_nr.webp rename to ui/resources/src/androidMain/res/drawable-nodpi/ic_flag_nr.webp diff --git a/ui/resources/src/main/res/drawable-nodpi/ic_flag_nu.webp b/ui/resources/src/androidMain/res/drawable-nodpi/ic_flag_nu.webp similarity index 100% rename from ui/resources/src/main/res/drawable-nodpi/ic_flag_nu.webp rename to ui/resources/src/androidMain/res/drawable-nodpi/ic_flag_nu.webp diff --git a/ui/resources/src/main/res/drawable-nodpi/ic_flag_nz.webp b/ui/resources/src/androidMain/res/drawable-nodpi/ic_flag_nz.webp similarity index 100% rename from ui/resources/src/main/res/drawable-nodpi/ic_flag_nz.webp rename to ui/resources/src/androidMain/res/drawable-nodpi/ic_flag_nz.webp diff --git a/ui/resources/src/main/res/drawable-nodpi/ic_flag_om.webp b/ui/resources/src/androidMain/res/drawable-nodpi/ic_flag_om.webp similarity index 100% rename from ui/resources/src/main/res/drawable-nodpi/ic_flag_om.webp rename to ui/resources/src/androidMain/res/drawable-nodpi/ic_flag_om.webp diff --git a/ui/resources/src/main/res/drawable-nodpi/ic_flag_pa.webp b/ui/resources/src/androidMain/res/drawable-nodpi/ic_flag_pa.webp similarity index 100% rename from ui/resources/src/main/res/drawable-nodpi/ic_flag_pa.webp rename to ui/resources/src/androidMain/res/drawable-nodpi/ic_flag_pa.webp diff --git a/ui/resources/src/main/res/drawable-nodpi/ic_flag_pe.webp b/ui/resources/src/androidMain/res/drawable-nodpi/ic_flag_pe.webp similarity index 100% rename from ui/resources/src/main/res/drawable-nodpi/ic_flag_pe.webp rename to ui/resources/src/androidMain/res/drawable-nodpi/ic_flag_pe.webp diff --git a/ui/resources/src/main/res/drawable-nodpi/ic_flag_pf.webp b/ui/resources/src/androidMain/res/drawable-nodpi/ic_flag_pf.webp similarity index 100% rename from ui/resources/src/main/res/drawable-nodpi/ic_flag_pf.webp rename to ui/resources/src/androidMain/res/drawable-nodpi/ic_flag_pf.webp diff --git a/ui/resources/src/main/res/drawable-nodpi/ic_flag_pg.webp b/ui/resources/src/androidMain/res/drawable-nodpi/ic_flag_pg.webp similarity index 100% rename from ui/resources/src/main/res/drawable-nodpi/ic_flag_pg.webp rename to ui/resources/src/androidMain/res/drawable-nodpi/ic_flag_pg.webp diff --git a/ui/resources/src/main/res/drawable-nodpi/ic_flag_ph.webp b/ui/resources/src/androidMain/res/drawable-nodpi/ic_flag_ph.webp similarity index 100% rename from ui/resources/src/main/res/drawable-nodpi/ic_flag_ph.webp rename to ui/resources/src/androidMain/res/drawable-nodpi/ic_flag_ph.webp diff --git a/ui/resources/src/main/res/drawable-nodpi/ic_flag_pk.webp b/ui/resources/src/androidMain/res/drawable-nodpi/ic_flag_pk.webp similarity index 100% rename from ui/resources/src/main/res/drawable-nodpi/ic_flag_pk.webp rename to ui/resources/src/androidMain/res/drawable-nodpi/ic_flag_pk.webp diff --git a/ui/resources/src/main/res/drawable-nodpi/ic_flag_pl.webp b/ui/resources/src/androidMain/res/drawable-nodpi/ic_flag_pl.webp similarity index 100% rename from ui/resources/src/main/res/drawable-nodpi/ic_flag_pl.webp rename to ui/resources/src/androidMain/res/drawable-nodpi/ic_flag_pl.webp diff --git a/ui/resources/src/main/res/drawable-nodpi/ic_flag_pm.webp b/ui/resources/src/androidMain/res/drawable-nodpi/ic_flag_pm.webp similarity index 100% rename from ui/resources/src/main/res/drawable-nodpi/ic_flag_pm.webp rename to ui/resources/src/androidMain/res/drawable-nodpi/ic_flag_pm.webp diff --git a/ui/resources/src/main/res/drawable-nodpi/ic_flag_pn.webp b/ui/resources/src/androidMain/res/drawable-nodpi/ic_flag_pn.webp similarity index 100% rename from ui/resources/src/main/res/drawable-nodpi/ic_flag_pn.webp rename to ui/resources/src/androidMain/res/drawable-nodpi/ic_flag_pn.webp diff --git a/ui/resources/src/main/res/drawable-nodpi/ic_flag_pr.webp b/ui/resources/src/androidMain/res/drawable-nodpi/ic_flag_pr.webp similarity index 100% rename from ui/resources/src/main/res/drawable-nodpi/ic_flag_pr.webp rename to ui/resources/src/androidMain/res/drawable-nodpi/ic_flag_pr.webp diff --git a/ui/resources/src/main/res/drawable-nodpi/ic_flag_ps.webp b/ui/resources/src/androidMain/res/drawable-nodpi/ic_flag_ps.webp similarity index 100% rename from ui/resources/src/main/res/drawable-nodpi/ic_flag_ps.webp rename to ui/resources/src/androidMain/res/drawable-nodpi/ic_flag_ps.webp diff --git a/ui/resources/src/main/res/drawable-nodpi/ic_flag_pt.webp b/ui/resources/src/androidMain/res/drawable-nodpi/ic_flag_pt.webp similarity index 100% rename from ui/resources/src/main/res/drawable-nodpi/ic_flag_pt.webp rename to ui/resources/src/androidMain/res/drawable-nodpi/ic_flag_pt.webp diff --git a/ui/resources/src/main/res/drawable-nodpi/ic_flag_pw.webp b/ui/resources/src/androidMain/res/drawable-nodpi/ic_flag_pw.webp similarity index 100% rename from ui/resources/src/main/res/drawable-nodpi/ic_flag_pw.webp rename to ui/resources/src/androidMain/res/drawable-nodpi/ic_flag_pw.webp diff --git a/ui/resources/src/main/res/drawable-nodpi/ic_flag_py.webp b/ui/resources/src/androidMain/res/drawable-nodpi/ic_flag_py.webp similarity index 100% rename from ui/resources/src/main/res/drawable-nodpi/ic_flag_py.webp rename to ui/resources/src/androidMain/res/drawable-nodpi/ic_flag_py.webp diff --git a/ui/resources/src/main/res/drawable-nodpi/ic_flag_qa.webp b/ui/resources/src/androidMain/res/drawable-nodpi/ic_flag_qa.webp similarity index 100% rename from ui/resources/src/main/res/drawable-nodpi/ic_flag_qa.webp rename to ui/resources/src/androidMain/res/drawable-nodpi/ic_flag_qa.webp diff --git a/ui/resources/src/main/res/drawable-nodpi/ic_flag_re.webp b/ui/resources/src/androidMain/res/drawable-nodpi/ic_flag_re.webp similarity index 100% rename from ui/resources/src/main/res/drawable-nodpi/ic_flag_re.webp rename to ui/resources/src/androidMain/res/drawable-nodpi/ic_flag_re.webp diff --git a/ui/resources/src/main/res/drawable-nodpi/ic_flag_ro.webp b/ui/resources/src/androidMain/res/drawable-nodpi/ic_flag_ro.webp similarity index 100% rename from ui/resources/src/main/res/drawable-nodpi/ic_flag_ro.webp rename to ui/resources/src/androidMain/res/drawable-nodpi/ic_flag_ro.webp diff --git a/ui/resources/src/main/res/drawable-nodpi/ic_flag_rs.webp b/ui/resources/src/androidMain/res/drawable-nodpi/ic_flag_rs.webp similarity index 100% rename from ui/resources/src/main/res/drawable-nodpi/ic_flag_rs.webp rename to ui/resources/src/androidMain/res/drawable-nodpi/ic_flag_rs.webp diff --git a/ui/resources/src/main/res/drawable-nodpi/ic_flag_ru.webp b/ui/resources/src/androidMain/res/drawable-nodpi/ic_flag_ru.webp similarity index 100% rename from ui/resources/src/main/res/drawable-nodpi/ic_flag_ru.webp rename to ui/resources/src/androidMain/res/drawable-nodpi/ic_flag_ru.webp diff --git a/ui/resources/src/main/res/drawable-nodpi/ic_flag_rw.webp b/ui/resources/src/androidMain/res/drawable-nodpi/ic_flag_rw.webp similarity index 100% rename from ui/resources/src/main/res/drawable-nodpi/ic_flag_rw.webp rename to ui/resources/src/androidMain/res/drawable-nodpi/ic_flag_rw.webp diff --git a/ui/resources/src/main/res/drawable-nodpi/ic_flag_sa.webp b/ui/resources/src/androidMain/res/drawable-nodpi/ic_flag_sa.webp similarity index 100% rename from ui/resources/src/main/res/drawable-nodpi/ic_flag_sa.webp rename to ui/resources/src/androidMain/res/drawable-nodpi/ic_flag_sa.webp diff --git a/ui/resources/src/main/res/drawable-nodpi/ic_flag_sb.webp b/ui/resources/src/androidMain/res/drawable-nodpi/ic_flag_sb.webp similarity index 100% rename from ui/resources/src/main/res/drawable-nodpi/ic_flag_sb.webp rename to ui/resources/src/androidMain/res/drawable-nodpi/ic_flag_sb.webp diff --git a/ui/resources/src/main/res/drawable-nodpi/ic_flag_sc.webp b/ui/resources/src/androidMain/res/drawable-nodpi/ic_flag_sc.webp similarity index 100% rename from ui/resources/src/main/res/drawable-nodpi/ic_flag_sc.webp rename to ui/resources/src/androidMain/res/drawable-nodpi/ic_flag_sc.webp diff --git a/ui/resources/src/main/res/drawable-nodpi/ic_flag_sd.webp b/ui/resources/src/androidMain/res/drawable-nodpi/ic_flag_sd.webp similarity index 100% rename from ui/resources/src/main/res/drawable-nodpi/ic_flag_sd.webp rename to ui/resources/src/androidMain/res/drawable-nodpi/ic_flag_sd.webp diff --git a/ui/resources/src/main/res/drawable-nodpi/ic_flag_se.webp b/ui/resources/src/androidMain/res/drawable-nodpi/ic_flag_se.webp similarity index 100% rename from ui/resources/src/main/res/drawable-nodpi/ic_flag_se.webp rename to ui/resources/src/androidMain/res/drawable-nodpi/ic_flag_se.webp diff --git a/ui/resources/src/main/res/drawable-nodpi/ic_flag_sg.webp b/ui/resources/src/androidMain/res/drawable-nodpi/ic_flag_sg.webp similarity index 100% rename from ui/resources/src/main/res/drawable-nodpi/ic_flag_sg.webp rename to ui/resources/src/androidMain/res/drawable-nodpi/ic_flag_sg.webp diff --git a/ui/resources/src/main/res/drawable-nodpi/ic_flag_sh.webp b/ui/resources/src/androidMain/res/drawable-nodpi/ic_flag_sh.webp similarity index 100% rename from ui/resources/src/main/res/drawable-nodpi/ic_flag_sh.webp rename to ui/resources/src/androidMain/res/drawable-nodpi/ic_flag_sh.webp diff --git a/ui/resources/src/main/res/drawable-nodpi/ic_flag_si.webp b/ui/resources/src/androidMain/res/drawable-nodpi/ic_flag_si.webp similarity index 100% rename from ui/resources/src/main/res/drawable-nodpi/ic_flag_si.webp rename to ui/resources/src/androidMain/res/drawable-nodpi/ic_flag_si.webp diff --git a/ui/resources/src/main/res/drawable-nodpi/ic_flag_sj.webp b/ui/resources/src/androidMain/res/drawable-nodpi/ic_flag_sj.webp similarity index 100% rename from ui/resources/src/main/res/drawable-nodpi/ic_flag_sj.webp rename to ui/resources/src/androidMain/res/drawable-nodpi/ic_flag_sj.webp diff --git a/ui/resources/src/main/res/drawable-nodpi/ic_flag_sk.webp b/ui/resources/src/androidMain/res/drawable-nodpi/ic_flag_sk.webp similarity index 100% rename from ui/resources/src/main/res/drawable-nodpi/ic_flag_sk.webp rename to ui/resources/src/androidMain/res/drawable-nodpi/ic_flag_sk.webp diff --git a/ui/resources/src/main/res/drawable-nodpi/ic_flag_sl.webp b/ui/resources/src/androidMain/res/drawable-nodpi/ic_flag_sl.webp similarity index 100% rename from ui/resources/src/main/res/drawable-nodpi/ic_flag_sl.webp rename to ui/resources/src/androidMain/res/drawable-nodpi/ic_flag_sl.webp diff --git a/ui/resources/src/main/res/drawable-nodpi/ic_flag_sm.webp b/ui/resources/src/androidMain/res/drawable-nodpi/ic_flag_sm.webp similarity index 100% rename from ui/resources/src/main/res/drawable-nodpi/ic_flag_sm.webp rename to ui/resources/src/androidMain/res/drawable-nodpi/ic_flag_sm.webp diff --git a/ui/resources/src/main/res/drawable-nodpi/ic_flag_sn.webp b/ui/resources/src/androidMain/res/drawable-nodpi/ic_flag_sn.webp similarity index 100% rename from ui/resources/src/main/res/drawable-nodpi/ic_flag_sn.webp rename to ui/resources/src/androidMain/res/drawable-nodpi/ic_flag_sn.webp diff --git a/ui/resources/src/main/res/drawable-nodpi/ic_flag_so.webp b/ui/resources/src/androidMain/res/drawable-nodpi/ic_flag_so.webp similarity index 100% rename from ui/resources/src/main/res/drawable-nodpi/ic_flag_so.webp rename to ui/resources/src/androidMain/res/drawable-nodpi/ic_flag_so.webp diff --git a/ui/resources/src/main/res/drawable-nodpi/ic_flag_sr.webp b/ui/resources/src/androidMain/res/drawable-nodpi/ic_flag_sr.webp similarity index 100% rename from ui/resources/src/main/res/drawable-nodpi/ic_flag_sr.webp rename to ui/resources/src/androidMain/res/drawable-nodpi/ic_flag_sr.webp diff --git a/ui/resources/src/main/res/drawable-nodpi/ic_flag_ss.webp b/ui/resources/src/androidMain/res/drawable-nodpi/ic_flag_ss.webp similarity index 100% rename from ui/resources/src/main/res/drawable-nodpi/ic_flag_ss.webp rename to ui/resources/src/androidMain/res/drawable-nodpi/ic_flag_ss.webp diff --git a/ui/resources/src/main/res/drawable-nodpi/ic_flag_st.webp b/ui/resources/src/androidMain/res/drawable-nodpi/ic_flag_st.webp similarity index 100% rename from ui/resources/src/main/res/drawable-nodpi/ic_flag_st.webp rename to ui/resources/src/androidMain/res/drawable-nodpi/ic_flag_st.webp diff --git a/ui/resources/src/main/res/drawable-nodpi/ic_flag_sv.webp b/ui/resources/src/androidMain/res/drawable-nodpi/ic_flag_sv.webp similarity index 100% rename from ui/resources/src/main/res/drawable-nodpi/ic_flag_sv.webp rename to ui/resources/src/androidMain/res/drawable-nodpi/ic_flag_sv.webp diff --git a/ui/resources/src/main/res/drawable-nodpi/ic_flag_sx.webp b/ui/resources/src/androidMain/res/drawable-nodpi/ic_flag_sx.webp similarity index 100% rename from ui/resources/src/main/res/drawable-nodpi/ic_flag_sx.webp rename to ui/resources/src/androidMain/res/drawable-nodpi/ic_flag_sx.webp diff --git a/ui/resources/src/main/res/drawable-nodpi/ic_flag_sy.webp b/ui/resources/src/androidMain/res/drawable-nodpi/ic_flag_sy.webp similarity index 100% rename from ui/resources/src/main/res/drawable-nodpi/ic_flag_sy.webp rename to ui/resources/src/androidMain/res/drawable-nodpi/ic_flag_sy.webp diff --git a/ui/resources/src/main/res/drawable-nodpi/ic_flag_sz.webp b/ui/resources/src/androidMain/res/drawable-nodpi/ic_flag_sz.webp similarity index 100% rename from ui/resources/src/main/res/drawable-nodpi/ic_flag_sz.webp rename to ui/resources/src/androidMain/res/drawable-nodpi/ic_flag_sz.webp diff --git a/ui/resources/src/main/res/drawable-nodpi/ic_flag_tc.webp b/ui/resources/src/androidMain/res/drawable-nodpi/ic_flag_tc.webp similarity index 100% rename from ui/resources/src/main/res/drawable-nodpi/ic_flag_tc.webp rename to ui/resources/src/androidMain/res/drawable-nodpi/ic_flag_tc.webp diff --git a/ui/resources/src/main/res/drawable-nodpi/ic_flag_td.webp b/ui/resources/src/androidMain/res/drawable-nodpi/ic_flag_td.webp similarity index 100% rename from ui/resources/src/main/res/drawable-nodpi/ic_flag_td.webp rename to ui/resources/src/androidMain/res/drawable-nodpi/ic_flag_td.webp diff --git a/ui/resources/src/main/res/drawable-nodpi/ic_flag_tf.webp b/ui/resources/src/androidMain/res/drawable-nodpi/ic_flag_tf.webp similarity index 100% rename from ui/resources/src/main/res/drawable-nodpi/ic_flag_tf.webp rename to ui/resources/src/androidMain/res/drawable-nodpi/ic_flag_tf.webp diff --git a/ui/resources/src/main/res/drawable-nodpi/ic_flag_tg.webp b/ui/resources/src/androidMain/res/drawable-nodpi/ic_flag_tg.webp similarity index 100% rename from ui/resources/src/main/res/drawable-nodpi/ic_flag_tg.webp rename to ui/resources/src/androidMain/res/drawable-nodpi/ic_flag_tg.webp diff --git a/ui/resources/src/main/res/drawable-nodpi/ic_flag_th.webp b/ui/resources/src/androidMain/res/drawable-nodpi/ic_flag_th.webp similarity index 100% rename from ui/resources/src/main/res/drawable-nodpi/ic_flag_th.webp rename to ui/resources/src/androidMain/res/drawable-nodpi/ic_flag_th.webp diff --git a/ui/resources/src/main/res/drawable-nodpi/ic_flag_tj.webp b/ui/resources/src/androidMain/res/drawable-nodpi/ic_flag_tj.webp similarity index 100% rename from ui/resources/src/main/res/drawable-nodpi/ic_flag_tj.webp rename to ui/resources/src/androidMain/res/drawable-nodpi/ic_flag_tj.webp diff --git a/ui/resources/src/main/res/drawable-nodpi/ic_flag_tk.webp b/ui/resources/src/androidMain/res/drawable-nodpi/ic_flag_tk.webp similarity index 100% rename from ui/resources/src/main/res/drawable-nodpi/ic_flag_tk.webp rename to ui/resources/src/androidMain/res/drawable-nodpi/ic_flag_tk.webp diff --git a/ui/resources/src/main/res/drawable-nodpi/ic_flag_tl.webp b/ui/resources/src/androidMain/res/drawable-nodpi/ic_flag_tl.webp similarity index 100% rename from ui/resources/src/main/res/drawable-nodpi/ic_flag_tl.webp rename to ui/resources/src/androidMain/res/drawable-nodpi/ic_flag_tl.webp diff --git a/ui/resources/src/main/res/drawable-nodpi/ic_flag_tm.webp b/ui/resources/src/androidMain/res/drawable-nodpi/ic_flag_tm.webp similarity index 100% rename from ui/resources/src/main/res/drawable-nodpi/ic_flag_tm.webp rename to ui/resources/src/androidMain/res/drawable-nodpi/ic_flag_tm.webp diff --git a/ui/resources/src/main/res/drawable-nodpi/ic_flag_tn.webp b/ui/resources/src/androidMain/res/drawable-nodpi/ic_flag_tn.webp similarity index 100% rename from ui/resources/src/main/res/drawable-nodpi/ic_flag_tn.webp rename to ui/resources/src/androidMain/res/drawable-nodpi/ic_flag_tn.webp diff --git a/ui/resources/src/main/res/drawable-nodpi/ic_flag_to.webp b/ui/resources/src/androidMain/res/drawable-nodpi/ic_flag_to.webp similarity index 100% rename from ui/resources/src/main/res/drawable-nodpi/ic_flag_to.webp rename to ui/resources/src/androidMain/res/drawable-nodpi/ic_flag_to.webp diff --git a/ui/resources/src/main/res/drawable-nodpi/ic_flag_tr.webp b/ui/resources/src/androidMain/res/drawable-nodpi/ic_flag_tr.webp similarity index 100% rename from ui/resources/src/main/res/drawable-nodpi/ic_flag_tr.webp rename to ui/resources/src/androidMain/res/drawable-nodpi/ic_flag_tr.webp diff --git a/ui/resources/src/main/res/drawable-nodpi/ic_flag_tt.webp b/ui/resources/src/androidMain/res/drawable-nodpi/ic_flag_tt.webp similarity index 100% rename from ui/resources/src/main/res/drawable-nodpi/ic_flag_tt.webp rename to ui/resources/src/androidMain/res/drawable-nodpi/ic_flag_tt.webp diff --git a/ui/resources/src/main/res/drawable-nodpi/ic_flag_tv.webp b/ui/resources/src/androidMain/res/drawable-nodpi/ic_flag_tv.webp similarity index 100% rename from ui/resources/src/main/res/drawable-nodpi/ic_flag_tv.webp rename to ui/resources/src/androidMain/res/drawable-nodpi/ic_flag_tv.webp diff --git a/ui/resources/src/main/res/drawable-nodpi/ic_flag_tw.webp b/ui/resources/src/androidMain/res/drawable-nodpi/ic_flag_tw.webp similarity index 100% rename from ui/resources/src/main/res/drawable-nodpi/ic_flag_tw.webp rename to ui/resources/src/androidMain/res/drawable-nodpi/ic_flag_tw.webp diff --git a/ui/resources/src/main/res/drawable-nodpi/ic_flag_tz.webp b/ui/resources/src/androidMain/res/drawable-nodpi/ic_flag_tz.webp similarity index 100% rename from ui/resources/src/main/res/drawable-nodpi/ic_flag_tz.webp rename to ui/resources/src/androidMain/res/drawable-nodpi/ic_flag_tz.webp diff --git a/ui/resources/src/main/res/drawable-nodpi/ic_flag_ua.webp b/ui/resources/src/androidMain/res/drawable-nodpi/ic_flag_ua.webp similarity index 100% rename from ui/resources/src/main/res/drawable-nodpi/ic_flag_ua.webp rename to ui/resources/src/androidMain/res/drawable-nodpi/ic_flag_ua.webp diff --git a/ui/resources/src/main/res/drawable-nodpi/ic_flag_ug.webp b/ui/resources/src/androidMain/res/drawable-nodpi/ic_flag_ug.webp similarity index 100% rename from ui/resources/src/main/res/drawable-nodpi/ic_flag_ug.webp rename to ui/resources/src/androidMain/res/drawable-nodpi/ic_flag_ug.webp diff --git a/ui/resources/src/main/res/drawable-nodpi/ic_flag_um.webp b/ui/resources/src/androidMain/res/drawable-nodpi/ic_flag_um.webp similarity index 100% rename from ui/resources/src/main/res/drawable-nodpi/ic_flag_um.webp rename to ui/resources/src/androidMain/res/drawable-nodpi/ic_flag_um.webp diff --git a/ui/resources/src/main/res/drawable-nodpi/ic_flag_us.webp b/ui/resources/src/androidMain/res/drawable-nodpi/ic_flag_us.webp similarity index 100% rename from ui/resources/src/main/res/drawable-nodpi/ic_flag_us.webp rename to ui/resources/src/androidMain/res/drawable-nodpi/ic_flag_us.webp diff --git a/ui/resources/src/main/res/drawable-nodpi/ic_flag_uy.webp b/ui/resources/src/androidMain/res/drawable-nodpi/ic_flag_uy.webp similarity index 100% rename from ui/resources/src/main/res/drawable-nodpi/ic_flag_uy.webp rename to ui/resources/src/androidMain/res/drawable-nodpi/ic_flag_uy.webp diff --git a/ui/resources/src/main/res/drawable-nodpi/ic_flag_uz.webp b/ui/resources/src/androidMain/res/drawable-nodpi/ic_flag_uz.webp similarity index 100% rename from ui/resources/src/main/res/drawable-nodpi/ic_flag_uz.webp rename to ui/resources/src/androidMain/res/drawable-nodpi/ic_flag_uz.webp diff --git a/ui/resources/src/main/res/drawable-nodpi/ic_flag_va.webp b/ui/resources/src/androidMain/res/drawable-nodpi/ic_flag_va.webp similarity index 100% rename from ui/resources/src/main/res/drawable-nodpi/ic_flag_va.webp rename to ui/resources/src/androidMain/res/drawable-nodpi/ic_flag_va.webp diff --git a/ui/resources/src/main/res/drawable-nodpi/ic_flag_vc.webp b/ui/resources/src/androidMain/res/drawable-nodpi/ic_flag_vc.webp similarity index 100% rename from ui/resources/src/main/res/drawable-nodpi/ic_flag_vc.webp rename to ui/resources/src/androidMain/res/drawable-nodpi/ic_flag_vc.webp diff --git a/ui/resources/src/main/res/drawable-nodpi/ic_flag_ve.webp b/ui/resources/src/androidMain/res/drawable-nodpi/ic_flag_ve.webp similarity index 100% rename from ui/resources/src/main/res/drawable-nodpi/ic_flag_ve.webp rename to ui/resources/src/androidMain/res/drawable-nodpi/ic_flag_ve.webp diff --git a/ui/resources/src/main/res/drawable-nodpi/ic_flag_vg.webp b/ui/resources/src/androidMain/res/drawable-nodpi/ic_flag_vg.webp similarity index 100% rename from ui/resources/src/main/res/drawable-nodpi/ic_flag_vg.webp rename to ui/resources/src/androidMain/res/drawable-nodpi/ic_flag_vg.webp diff --git a/ui/resources/src/main/res/drawable-nodpi/ic_flag_vi.webp b/ui/resources/src/androidMain/res/drawable-nodpi/ic_flag_vi.webp similarity index 100% rename from ui/resources/src/main/res/drawable-nodpi/ic_flag_vi.webp rename to ui/resources/src/androidMain/res/drawable-nodpi/ic_flag_vi.webp diff --git a/ui/resources/src/main/res/drawable-nodpi/ic_flag_vn.webp b/ui/resources/src/androidMain/res/drawable-nodpi/ic_flag_vn.webp similarity index 100% rename from ui/resources/src/main/res/drawable-nodpi/ic_flag_vn.webp rename to ui/resources/src/androidMain/res/drawable-nodpi/ic_flag_vn.webp diff --git a/ui/resources/src/main/res/drawable-nodpi/ic_flag_vu.webp b/ui/resources/src/androidMain/res/drawable-nodpi/ic_flag_vu.webp similarity index 100% rename from ui/resources/src/main/res/drawable-nodpi/ic_flag_vu.webp rename to ui/resources/src/androidMain/res/drawable-nodpi/ic_flag_vu.webp diff --git a/ui/resources/src/main/res/drawable-nodpi/ic_flag_wf.webp b/ui/resources/src/androidMain/res/drawable-nodpi/ic_flag_wf.webp similarity index 100% rename from ui/resources/src/main/res/drawable-nodpi/ic_flag_wf.webp rename to ui/resources/src/androidMain/res/drawable-nodpi/ic_flag_wf.webp diff --git a/ui/resources/src/main/res/drawable-nodpi/ic_flag_ws.webp b/ui/resources/src/androidMain/res/drawable-nodpi/ic_flag_ws.webp similarity index 100% rename from ui/resources/src/main/res/drawable-nodpi/ic_flag_ws.webp rename to ui/resources/src/androidMain/res/drawable-nodpi/ic_flag_ws.webp diff --git a/ui/resources/src/main/res/drawable-nodpi/ic_flag_ye.webp b/ui/resources/src/androidMain/res/drawable-nodpi/ic_flag_ye.webp similarity index 100% rename from ui/resources/src/main/res/drawable-nodpi/ic_flag_ye.webp rename to ui/resources/src/androidMain/res/drawable-nodpi/ic_flag_ye.webp diff --git a/ui/resources/src/main/res/drawable-nodpi/ic_flag_yt.webp b/ui/resources/src/androidMain/res/drawable-nodpi/ic_flag_yt.webp similarity index 100% rename from ui/resources/src/main/res/drawable-nodpi/ic_flag_yt.webp rename to ui/resources/src/androidMain/res/drawable-nodpi/ic_flag_yt.webp diff --git a/ui/resources/src/main/res/drawable-nodpi/ic_flag_za.webp b/ui/resources/src/androidMain/res/drawable-nodpi/ic_flag_za.webp similarity index 100% rename from ui/resources/src/main/res/drawable-nodpi/ic_flag_za.webp rename to ui/resources/src/androidMain/res/drawable-nodpi/ic_flag_za.webp diff --git a/ui/resources/src/main/res/drawable-nodpi/ic_flag_zm.webp b/ui/resources/src/androidMain/res/drawable-nodpi/ic_flag_zm.webp similarity index 100% rename from ui/resources/src/main/res/drawable-nodpi/ic_flag_zm.webp rename to ui/resources/src/androidMain/res/drawable-nodpi/ic_flag_zm.webp diff --git a/ui/resources/src/main/res/drawable-nodpi/ic_flag_zw.webp b/ui/resources/src/androidMain/res/drawable-nodpi/ic_flag_zw.webp similarity index 100% rename from ui/resources/src/main/res/drawable-nodpi/ic_flag_zw.webp rename to ui/resources/src/androidMain/res/drawable-nodpi/ic_flag_zw.webp diff --git a/ui/resources/src/main/res/drawable-nodpi/ic_flag_zz.webp b/ui/resources/src/androidMain/res/drawable-nodpi/ic_flag_zz.webp similarity index 100% rename from ui/resources/src/main/res/drawable-nodpi/ic_flag_zz.webp rename to ui/resources/src/androidMain/res/drawable-nodpi/ic_flag_zz.webp diff --git a/ui/resources/src/main/res/drawable-nodpi/ic_placeholder_user.webp b/ui/resources/src/androidMain/res/drawable-nodpi/ic_placeholder_user.webp similarity index 100% rename from ui/resources/src/main/res/drawable-nodpi/ic_placeholder_user.webp rename to ui/resources/src/androidMain/res/drawable-nodpi/ic_placeholder_user.webp diff --git a/ui/resources/src/main/res/drawable-nodpi/video_sell_kin_2x.webp b/ui/resources/src/androidMain/res/drawable-nodpi/video_sell_kin_2x.webp similarity index 100% rename from ui/resources/src/main/res/drawable-nodpi/video_sell_kin_2x.webp rename to ui/resources/src/androidMain/res/drawable-nodpi/video_sell_kin_2x.webp diff --git a/ui/resources/src/main/res/drawable-xhdpi/ic_bill_grid.webp b/ui/resources/src/androidMain/res/drawable-xhdpi/ic_bill_grid.webp similarity index 100% rename from ui/resources/src/main/res/drawable-xhdpi/ic_bill_grid.webp rename to ui/resources/src/androidMain/res/drawable-xhdpi/ic_bill_grid.webp diff --git a/ui/resources/src/main/res/drawable-xhdpi/ic_bill_hexagons.webp b/ui/resources/src/androidMain/res/drawable-xhdpi/ic_bill_hexagons.webp similarity index 100% rename from ui/resources/src/main/res/drawable-xhdpi/ic_bill_hexagons.webp rename to ui/resources/src/androidMain/res/drawable-xhdpi/ic_bill_hexagons.webp diff --git a/ui/resources/src/main/res/drawable-xxhdpi/ic_bill_grid.webp b/ui/resources/src/androidMain/res/drawable-xxhdpi/ic_bill_grid.webp similarity index 100% rename from ui/resources/src/main/res/drawable-xxhdpi/ic_bill_grid.webp rename to ui/resources/src/androidMain/res/drawable-xxhdpi/ic_bill_grid.webp diff --git a/ui/resources/src/main/res/drawable-xxhdpi/ic_bill_hexagons.webp b/ui/resources/src/androidMain/res/drawable-xxhdpi/ic_bill_hexagons.webp similarity index 100% rename from ui/resources/src/main/res/drawable-xxhdpi/ic_bill_hexagons.webp rename to ui/resources/src/androidMain/res/drawable-xxhdpi/ic_bill_hexagons.webp diff --git a/ui/resources/src/main/res/drawable-xxxhdpi/ic_bill_grid.webp b/ui/resources/src/androidMain/res/drawable-xxxhdpi/ic_bill_grid.webp similarity index 100% rename from ui/resources/src/main/res/drawable-xxxhdpi/ic_bill_grid.webp rename to ui/resources/src/androidMain/res/drawable-xxxhdpi/ic_bill_grid.webp diff --git a/ui/resources/src/main/res/drawable-xxxhdpi/ic_bill_hexagons.webp b/ui/resources/src/androidMain/res/drawable-xxxhdpi/ic_bill_hexagons.webp similarity index 100% rename from ui/resources/src/main/res/drawable-xxxhdpi/ic_bill_hexagons.webp rename to ui/resources/src/androidMain/res/drawable-xxxhdpi/ic_bill_hexagons.webp diff --git a/ui/resources/src/main/res/drawable/ic_android_icon.xml b/ui/resources/src/androidMain/res/drawable/ic_android_icon.xml similarity index 100% rename from ui/resources/src/main/res/drawable/ic_android_icon.xml rename to ui/resources/src/androidMain/res/drawable/ic_android_icon.xml diff --git a/ui/resources/src/main/res/drawable/ic_apple_icon.xml b/ui/resources/src/androidMain/res/drawable/ic_apple_icon.xml similarity index 100% rename from ui/resources/src/main/res/drawable/ic_apple_icon.xml rename to ui/resources/src/androidMain/res/drawable/ic_apple_icon.xml diff --git a/ui/resources/src/main/res/drawable/ic_arrow_back.xml b/ui/resources/src/androidMain/res/drawable/ic_arrow_back.xml similarity index 100% rename from ui/resources/src/main/res/drawable/ic_arrow_back.xml rename to ui/resources/src/androidMain/res/drawable/ic_arrow_back.xml diff --git a/ui/resources/src/main/res/drawable/ic_bezier_curve.xml b/ui/resources/src/androidMain/res/drawable/ic_bezier_curve.xml similarity index 100% rename from ui/resources/src/main/res/drawable/ic_bezier_curve.xml rename to ui/resources/src/androidMain/res/drawable/ic_bezier_curve.xml diff --git a/ui/resources/src/main/res/drawable/ic_bill_close.xml b/ui/resources/src/androidMain/res/drawable/ic_bill_close.xml similarity index 100% rename from ui/resources/src/main/res/drawable/ic_bill_close.xml rename to ui/resources/src/androidMain/res/drawable/ic_bill_close.xml diff --git a/ui/resources/src/main/res/drawable/ic_chain_link.xml b/ui/resources/src/androidMain/res/drawable/ic_chain_link.xml similarity index 100% rename from ui/resources/src/main/res/drawable/ic_chain_link.xml rename to ui/resources/src/androidMain/res/drawable/ic_chain_link.xml diff --git a/ui/resources/src/main/res/drawable/ic_chat.xml b/ui/resources/src/androidMain/res/drawable/ic_chat.xml similarity index 100% rename from ui/resources/src/main/res/drawable/ic_chat.xml rename to ui/resources/src/androidMain/res/drawable/ic_chat.xml diff --git a/ui/resources/src/main/res/drawable/ic_check.xml b/ui/resources/src/androidMain/res/drawable/ic_check.xml similarity index 100% rename from ui/resources/src/main/res/drawable/ic_check.xml rename to ui/resources/src/androidMain/res/drawable/ic_check.xml diff --git a/ui/resources/src/main/res/drawable/ic_check_circle.xml b/ui/resources/src/androidMain/res/drawable/ic_check_circle.xml similarity index 100% rename from ui/resources/src/main/res/drawable/ic_check_circle.xml rename to ui/resources/src/androidMain/res/drawable/ic_check_circle.xml diff --git a/ui/resources/src/main/res/drawable/ic_check_white.xml b/ui/resources/src/androidMain/res/drawable/ic_check_white.xml similarity index 100% rename from ui/resources/src/main/res/drawable/ic_check_white.xml rename to ui/resources/src/androidMain/res/drawable/ic_check_white.xml diff --git a/ui/resources/src/main/res/drawable/ic_checked_blue.xml b/ui/resources/src/androidMain/res/drawable/ic_checked_blue.xml similarity index 100% rename from ui/resources/src/main/res/drawable/ic_checked_blue.xml rename to ui/resources/src/androidMain/res/drawable/ic_checked_blue.xml diff --git a/ui/resources/src/main/res/drawable/ic_checked_green.xml b/ui/resources/src/androidMain/res/drawable/ic_checked_green.xml similarity index 100% rename from ui/resources/src/main/res/drawable/ic_checked_green.xml rename to ui/resources/src/androidMain/res/drawable/ic_checked_green.xml diff --git a/ui/resources/src/main/res/drawable/ic_chevron_left.xml b/ui/resources/src/androidMain/res/drawable/ic_chevron_left.xml similarity index 100% rename from ui/resources/src/main/res/drawable/ic_chevron_left.xml rename to ui/resources/src/androidMain/res/drawable/ic_chevron_left.xml diff --git a/ui/resources/src/main/res/drawable/ic_chevron_right.xml b/ui/resources/src/androidMain/res/drawable/ic_chevron_right.xml similarity index 100% rename from ui/resources/src/main/res/drawable/ic_chevron_right.xml rename to ui/resources/src/androidMain/res/drawable/ic_chevron_right.xml diff --git a/ui/resources/src/main/res/drawable/ic_copy.xml b/ui/resources/src/androidMain/res/drawable/ic_copy.xml similarity index 100% rename from ui/resources/src/main/res/drawable/ic_copy.xml rename to ui/resources/src/androidMain/res/drawable/ic_copy.xml diff --git a/ui/resources/src/main/res/drawable/ic_crown.xml b/ui/resources/src/androidMain/res/drawable/ic_crown.xml similarity index 100% rename from ui/resources/src/main/res/drawable/ic_crown.xml rename to ui/resources/src/androidMain/res/drawable/ic_crown.xml diff --git a/ui/resources/src/main/res/drawable/ic_delete.xml b/ui/resources/src/androidMain/res/drawable/ic_delete.xml similarity index 100% rename from ui/resources/src/main/res/drawable/ic_delete.xml rename to ui/resources/src/androidMain/res/drawable/ic_delete.xml diff --git a/ui/resources/src/main/res/drawable/ic_dropdown.xml b/ui/resources/src/androidMain/res/drawable/ic_dropdown.xml similarity index 100% rename from ui/resources/src/main/res/drawable/ic_dropdown.xml rename to ui/resources/src/androidMain/res/drawable/ic_dropdown.xml diff --git a/ui/resources/src/main/res/drawable/ic_exclamation_octagon_fill.xml b/ui/resources/src/androidMain/res/drawable/ic_exclamation_octagon_fill.xml similarity index 100% rename from ui/resources/src/main/res/drawable/ic_exclamation_octagon_fill.xml rename to ui/resources/src/androidMain/res/drawable/ic_exclamation_octagon_fill.xml diff --git a/ui/resources/src/main/res/drawable/ic_file_bend.xml b/ui/resources/src/androidMain/res/drawable/ic_file_bend.xml similarity index 100% rename from ui/resources/src/main/res/drawable/ic_file_bend.xml rename to ui/resources/src/androidMain/res/drawable/ic_file_bend.xml diff --git a/ui/resources/src/main/res/drawable/ic_file_download.xml b/ui/resources/src/androidMain/res/drawable/ic_file_download.xml similarity index 100% rename from ui/resources/src/main/res/drawable/ic_file_download.xml rename to ui/resources/src/androidMain/res/drawable/ic_file_download.xml diff --git a/ui/resources/src/main/res/drawable/ic_kin_brand.xml b/ui/resources/src/androidMain/res/drawable/ic_kin_brand.xml similarity index 100% rename from ui/resources/src/main/res/drawable/ic_kin_brand.xml rename to ui/resources/src/androidMain/res/drawable/ic_kin_brand.xml diff --git a/ui/resources/src/main/res/drawable/ic_kin_red.xml b/ui/resources/src/androidMain/res/drawable/ic_kin_red.xml similarity index 100% rename from ui/resources/src/main/res/drawable/ic_kin_red.xml rename to ui/resources/src/androidMain/res/drawable/ic_kin_red.xml diff --git a/ui/resources/src/main/res/drawable/ic_kin_white.xml b/ui/resources/src/androidMain/res/drawable/ic_kin_white.xml similarity index 100% rename from ui/resources/src/main/res/drawable/ic_kin_white.xml rename to ui/resources/src/androidMain/res/drawable/ic_kin_white.xml diff --git a/ui/resources/src/main/res/drawable/ic_kin_white_outline.xml b/ui/resources/src/androidMain/res/drawable/ic_kin_white_outline.xml similarity index 100% rename from ui/resources/src/main/res/drawable/ic_kin_white_outline.xml rename to ui/resources/src/androidMain/res/drawable/ic_kin_white_outline.xml diff --git a/ui/resources/src/main/res/drawable/ic_kin_white_small.xml b/ui/resources/src/androidMain/res/drawable/ic_kin_white_small.xml similarity index 100% rename from ui/resources/src/main/res/drawable/ic_kin_white_small.xml rename to ui/resources/src/androidMain/res/drawable/ic_kin_white_small.xml diff --git a/ui/resources/src/main/res/drawable/ic_remote_send.xml b/ui/resources/src/androidMain/res/drawable/ic_remote_send.xml similarity index 100% rename from ui/resources/src/main/res/drawable/ic_remote_send.xml rename to ui/resources/src/androidMain/res/drawable/ic_remote_send.xml diff --git a/ui/resources/src/main/res/drawable/ic_settings_outline.xml b/ui/resources/src/androidMain/res/drawable/ic_settings_outline.xml similarity index 100% rename from ui/resources/src/main/res/drawable/ic_settings_outline.xml rename to ui/resources/src/androidMain/res/drawable/ic_settings_outline.xml diff --git a/ui/resources/src/main/res/drawable/ic_share_os.xml b/ui/resources/src/androidMain/res/drawable/ic_share_os.xml similarity index 100% rename from ui/resources/src/main/res/drawable/ic_share_os.xml rename to ui/resources/src/androidMain/res/drawable/ic_share_os.xml diff --git a/ui/resources/src/main/res/drawable/ic_twitter_x.xml b/ui/resources/src/androidMain/res/drawable/ic_twitter_x.xml similarity index 100% rename from ui/resources/src/main/res/drawable/ic_twitter_x.xml rename to ui/resources/src/androidMain/res/drawable/ic_twitter_x.xml diff --git a/ui/resources/src/main/res/drawable/ic_unchecked.xml b/ui/resources/src/androidMain/res/drawable/ic_unchecked.xml similarity index 100% rename from ui/resources/src/main/res/drawable/ic_unchecked.xml rename to ui/resources/src/androidMain/res/drawable/ic_unchecked.xml diff --git a/ui/resources/src/main/res/drawable/ic_wifi_slash.xml b/ui/resources/src/androidMain/res/drawable/ic_wifi_slash.xml similarity index 100% rename from ui/resources/src/main/res/drawable/ic_wifi_slash.xml rename to ui/resources/src/androidMain/res/drawable/ic_wifi_slash.xml diff --git a/ui/resources/src/main/res/drawable/ic_x_octagon_fill.xml b/ui/resources/src/androidMain/res/drawable/ic_x_octagon_fill.xml similarity index 100% rename from ui/resources/src/main/res/drawable/ic_x_octagon_fill.xml rename to ui/resources/src/androidMain/res/drawable/ic_x_octagon_fill.xml diff --git a/ui/resources/src/main/res/drawable/ic_xmark_red.xml b/ui/resources/src/androidMain/res/drawable/ic_xmark_red.xml similarity index 100% rename from ui/resources/src/main/res/drawable/ic_xmark_red.xml rename to ui/resources/src/androidMain/res/drawable/ic_xmark_red.xml diff --git a/ui/resources/src/main/res/values/strings-localized.xml b/ui/resources/src/androidMain/res/values/strings-localized.xml similarity index 100% rename from ui/resources/src/main/res/values/strings-localized.xml rename to ui/resources/src/androidMain/res/values/strings-localized.xml diff --git a/ui/resources/src/main/res/values/strings.xml b/ui/resources/src/androidMain/res/values/strings.xml similarity index 100% rename from ui/resources/src/main/res/values/strings.xml rename to ui/resources/src/androidMain/res/values/strings.xml diff --git a/ui/resources/src/main/java/com/getcode/util/resources/ResourceHelper.kt b/ui/resources/src/commonMain/kotlin/com/getcode/util/resources/ResourceHelper.kt similarity index 72% rename from ui/resources/src/main/java/com/getcode/util/resources/ResourceHelper.kt rename to ui/resources/src/commonMain/kotlin/com/getcode/util/resources/ResourceHelper.kt index f129e1b0ff..fb339aa961 100644 --- a/ui/resources/src/main/java/com/getcode/util/resources/ResourceHelper.kt +++ b/ui/resources/src/commonMain/kotlin/com/getcode/util/resources/ResourceHelper.kt @@ -1,17 +1,17 @@ package com.getcode.util.resources -import android.graphics.Typeface -import android.graphics.drawable.Drawable -import android.util.DisplayMetrics import androidx.annotation.DimenRes -import androidx.annotation.DrawableRes -import androidx.annotation.FontRes import androidx.annotation.PluralsRes import androidx.annotation.RawRes import androidx.annotation.StringRes import androidx.compose.runtime.staticCompositionLocalOf -import java.io.File +/** + * Looks up app resources by their Android resource ID. + * + * Members that return Android types (`Drawable`, `Typeface`, `DisplayMetrics`, `getDir`) live on + * `AndroidResourceHelper` in androidMain. + */ interface ResourceHelper { fun getString(@StringRes resourceId: Int): String @@ -29,15 +29,7 @@ interface ResourceHelper { fun getDimension(@DimenRes dimenId: Int, default: Float = 0f): Float fun getDimensionPixelSize(@DimenRes dimenId: Int, default: Int = 0): Int - fun getDir(name: String, mode: Int): File? - - val displayMetrics: DisplayMetrics - - fun getDrawable(@DrawableRes drawableResId: Int): Drawable? - fun getIdentifier(name: String, type: ResourceType): Int? - - fun getFont(@FontRes fontResId: Int): Typeface? } sealed interface ResourceType { @@ -70,15 +62,5 @@ private object NoOpResources : ResourceHelper { override fun getDimensionPixelSize(dimenId: Int, default: Int): Int = 0 - override fun getDir(name: String, mode: Int): File? = null - - override val displayMetrics: DisplayMetrics - get() = TODO("Not yet implemented") - - override fun getDrawable(drawableResId: Int): Drawable? = null - override fun getIdentifier(name: String, type: ResourceType): Int? = null - - override fun getFont(fontResId: Int): Typeface? = null - } \ No newline at end of file diff --git a/ui/resources/src/main/java/com/getcode/util/resources/SettingsHelper.kt b/ui/resources/src/commonMain/kotlin/com/getcode/util/resources/SettingsHelper.kt similarity index 100% rename from ui/resources/src/main/java/com/getcode/util/resources/SettingsHelper.kt rename to ui/resources/src/commonMain/kotlin/com/getcode/util/resources/SettingsHelper.kt diff --git a/ui/resources/src/main/java/com/getcode/util/resources/icons/Delete.kt b/ui/resources/src/commonMain/kotlin/com/getcode/util/resources/icons/Delete.kt similarity index 100% rename from ui/resources/src/main/java/com/getcode/util/resources/icons/Delete.kt rename to ui/resources/src/commonMain/kotlin/com/getcode/util/resources/icons/Delete.kt diff --git a/ui/resources/src/main/java/com/getcode/util/resources/icons/ImageVector.kt b/ui/resources/src/commonMain/kotlin/com/getcode/util/resources/icons/ImageVector.kt similarity index 100% rename from ui/resources/src/main/java/com/getcode/util/resources/icons/ImageVector.kt rename to ui/resources/src/commonMain/kotlin/com/getcode/util/resources/icons/ImageVector.kt diff --git a/ui/resources/src/main/java/com/getcode/util/resources/icons/MessageCircle.kt b/ui/resources/src/commonMain/kotlin/com/getcode/util/resources/icons/MessageCircle.kt similarity index 100% rename from ui/resources/src/main/java/com/getcode/util/resources/icons/MessageCircle.kt rename to ui/resources/src/commonMain/kotlin/com/getcode/util/resources/icons/MessageCircle.kt diff --git a/ui/resources/test-fixtures/build.gradle.kts b/ui/resources/test-fixtures/build.gradle.kts new file mode 100644 index 0000000000..8e13fc2224 --- /dev/null +++ b/ui/resources/test-fixtures/build.gradle.kts @@ -0,0 +1,13 @@ +plugins { + alias(libs.plugins.flipcash.android.library) +} + +android { + namespace = "${Gradle.codeNamespace}.util.resources.testfixtures" +} + +dependencies { + api(project(":ui:resources")) + implementation(platform(libs.compose.bom)) + implementation(libs.compose.ui) +} diff --git a/ui/resources/src/testFixtures/kotlin/com/getcode/util/resources/FakeResourceHelper.kt b/ui/resources/test-fixtures/src/main/kotlin/com/getcode/util/resources/FakeResourceHelper.kt similarity index 98% rename from ui/resources/src/testFixtures/kotlin/com/getcode/util/resources/FakeResourceHelper.kt rename to ui/resources/test-fixtures/src/main/kotlin/com/getcode/util/resources/FakeResourceHelper.kt index 973ede92b9..e9881b8b62 100644 --- a/ui/resources/src/testFixtures/kotlin/com/getcode/util/resources/FakeResourceHelper.kt +++ b/ui/resources/test-fixtures/src/main/kotlin/com/getcode/util/resources/FakeResourceHelper.kt @@ -8,7 +8,7 @@ import java.net.URL import java.net.URLClassLoader import java.util.jar.JarFile -class FakeResourceHelper(vararg rClasses: Class<*>) : ResourceHelper { +class FakeResourceHelper(vararg rClasses: Class<*>) : AndroidResourceHelper { private val nameMap: Map = if (rClasses.isNotEmpty()) { buildMapFrom(rClasses) From bad06787479520c109e59554c9ea3f79f865c39a Mon Sep 17 00:00:00 2001 From: Brandon McAnsh Date: Fri, 23 Oct 2026 16:02:33 -0400 Subject: [PATCH 05/11] build(kmp): move currency, models, locale and connectivity APIs to android+jvm Currency icons sit behind an expect object (null on desktop), and SocialProfile's file extension lookup gets a JVM copy of the AOSP MimeTypeMap rules. --- libs/currency/build.gradle.kts | 35 ++++---- .../com/getcode/utils/CurrencyFormat.kt | 35 ++++++++ .../getcode/utils/CurrencyIcons.android.kt | 9 ++ .../drawable/ic_currency_dollar_active.xml | 0 .../drawable/ic_currency_dollar_inactive.xml | 0 .../res/drawable/ic_currency_kin.xml | 0 .../res/drawable/ic_currency_xaf.xml | 0 .../res/drawable/ic_currency_xof.xml | 0 .../kotlin/com/getcode/model/Currency.kt | 0 .../kotlin/com/getcode/model/CurrencyCode.kt | 0 .../kotlin/com/getcode/model/Kin.kt | 4 +- .../kotlin/com/getcode/model/Rate.kt | 4 +- .../kotlin/com/getcode/model/RegionCode.kt | 0 .../kotlin/com/getcode/utils/Currency.kt | 49 +++++++++++ .../kotlin/com/getcode/utils/CurrencyIcons.kt | 11 +++ .../kotlin/com/getcode/utils/CurrencyUtils.kt | 10 +-- .../kotlin/com/getcode/utils/FormatUtils.kt | 0 .../getcode/utils/serializer/KinSerializer.kt | 0 .../utils/serializer/RateSerializer.kt | 0 .../com/getcode/utils/CurrencyIcons.jvm.kt | 7 ++ .../main/kotlin/com/getcode/utils/Currency.kt | 82 ------------------- libs/locale/public/build.gradle.kts | 28 ++++--- .../com/getcode/util/locale/LocaleUtils.kt | 0 .../com/getcode/util/locale/LocaleHelper.kt | 0 libs/models/build.gradle.kts | 30 +++---- .../social/user/FileExtension.android.kt | 6 ++ .../kotlin/com/getcode/model/Cursor.kt | 0 .../kotlin/com/getcode/model/EncryptedData.kt | 0 .../kotlin/com/getcode/model/ID.kt | 0 .../kotlin/com/getcode/model/PointerStatus.kt | 0 .../getcode/model/chat/AnnouncementAction.kt | 0 .../com/getcode/model/chat/ChatMessage.kt | 0 .../kotlin/com/getcode/model/chat/ChatType.kt | 0 .../com/getcode/model/chat/MessageContent.kt | 0 .../com/getcode/model/chat/MessageStatus.kt | 0 .../kotlin/com/getcode/model/chat/Platform.kt | 0 .../kotlin/com/getcode/model/chat/Pointer.kt | 0 .../com/getcode/model/chat/Reference.kt | 0 .../kotlin/com/getcode/model/chat/Sender.kt | 4 +- .../kotlin/com/getcode/model/chat/Title.kt | 0 .../kotlin/com/getcode/model/chat/Verb.kt | 0 .../model/social/user/FileExtension.kt | 4 + .../model/social/user/SocialProfile.kt | 3 +- .../serialization/InstantIso8601Serializer.kt | 0 .../kotlin/com/getcode/utils/UUID.kt | 0 .../utils/serializer/UUIDSerializer.kt | 0 .../model/social/user/FileExtension.jvm.kt | 17 ++++ .../connectivity/public/build.gradle.kts | 41 ++++++---- .../utils/network/ConnectionTypeTest.kt | 0 .../getcode/utils/network/PollUntilTest.kt | 0 .../com/getcode/utils/network/RetryTest.kt | 0 .../connectivity/ConnectionStatusProvider.kt | 0 .../network/NetworkConnectionListener.kt | 0 .../com/getcode/utils/network/Polling.kt | 0 .../kotlin/com/getcode/utils/network/Retry.kt | 0 55 files changed, 226 insertions(+), 153 deletions(-) create mode 100644 libs/currency/src/androidMain/kotlin/com/getcode/utils/CurrencyFormat.kt create mode 100644 libs/currency/src/androidMain/kotlin/com/getcode/utils/CurrencyIcons.android.kt rename libs/currency/src/{main => androidMain}/res/drawable/ic_currency_dollar_active.xml (100%) rename libs/currency/src/{main => androidMain}/res/drawable/ic_currency_dollar_inactive.xml (100%) rename libs/currency/src/{main => androidMain}/res/drawable/ic_currency_kin.xml (100%) rename libs/currency/src/{main => androidMain}/res/drawable/ic_currency_xaf.xml (100%) rename libs/currency/src/{main => androidMain}/res/drawable/ic_currency_xof.xml (100%) rename libs/currency/src/{main => commonMain}/kotlin/com/getcode/model/Currency.kt (100%) rename libs/currency/src/{main => commonMain}/kotlin/com/getcode/model/CurrencyCode.kt (100%) rename libs/currency/src/{main => commonMain}/kotlin/com/getcode/model/Kin.kt (96%) rename libs/currency/src/{main => commonMain}/kotlin/com/getcode/model/Rate.kt (78%) rename libs/currency/src/{main => commonMain}/kotlin/com/getcode/model/RegionCode.kt (100%) create mode 100644 libs/currency/src/commonMain/kotlin/com/getcode/utils/Currency.kt create mode 100644 libs/currency/src/commonMain/kotlin/com/getcode/utils/CurrencyIcons.kt rename libs/currency/src/{main => commonMain}/kotlin/com/getcode/utils/CurrencyUtils.kt (92%) rename libs/currency/src/{main => commonMain}/kotlin/com/getcode/utils/FormatUtils.kt (100%) rename libs/currency/src/{main => commonMain}/kotlin/com/getcode/utils/serializer/KinSerializer.kt (100%) rename libs/currency/src/{main => commonMain}/kotlin/com/getcode/utils/serializer/RateSerializer.kt (100%) create mode 100644 libs/currency/src/jvmMain/kotlin/com/getcode/utils/CurrencyIcons.jvm.kt delete mode 100644 libs/currency/src/main/kotlin/com/getcode/utils/Currency.kt rename libs/locale/public/src/{main => androidMain}/kotlin/com/getcode/util/locale/LocaleUtils.kt (100%) rename libs/locale/public/src/{main => commonMain}/kotlin/com/getcode/util/locale/LocaleHelper.kt (100%) create mode 100644 libs/models/src/androidMain/kotlin/com/getcode/model/social/user/FileExtension.android.kt rename libs/models/src/{main => commonMain}/kotlin/com/getcode/model/Cursor.kt (100%) rename libs/models/src/{main => commonMain}/kotlin/com/getcode/model/EncryptedData.kt (100%) rename libs/models/src/{main => commonMain}/kotlin/com/getcode/model/ID.kt (100%) rename libs/models/src/{main => commonMain}/kotlin/com/getcode/model/PointerStatus.kt (100%) rename libs/models/src/{main => commonMain}/kotlin/com/getcode/model/chat/AnnouncementAction.kt (100%) rename libs/models/src/{main => commonMain}/kotlin/com/getcode/model/chat/ChatMessage.kt (100%) rename libs/models/src/{main => commonMain}/kotlin/com/getcode/model/chat/ChatType.kt (100%) rename libs/models/src/{main => commonMain}/kotlin/com/getcode/model/chat/MessageContent.kt (100%) rename libs/models/src/{main => commonMain}/kotlin/com/getcode/model/chat/MessageStatus.kt (100%) rename libs/models/src/{main => commonMain}/kotlin/com/getcode/model/chat/Platform.kt (100%) rename libs/models/src/{main => commonMain}/kotlin/com/getcode/model/chat/Pointer.kt (100%) rename libs/models/src/{main => commonMain}/kotlin/com/getcode/model/chat/Reference.kt (100%) rename libs/models/src/{main => commonMain}/kotlin/com/getcode/model/chat/Sender.kt (96%) rename libs/models/src/{main => commonMain}/kotlin/com/getcode/model/chat/Title.kt (100%) rename libs/models/src/{main => commonMain}/kotlin/com/getcode/model/chat/Verb.kt (100%) create mode 100644 libs/models/src/commonMain/kotlin/com/getcode/model/social/user/FileExtension.kt rename libs/models/src/{main => commonMain}/kotlin/com/getcode/model/social/user/SocialProfile.kt (96%) rename libs/models/src/{main => commonMain}/kotlin/com/getcode/serialization/InstantIso8601Serializer.kt (100%) rename libs/models/src/{main => commonMain}/kotlin/com/getcode/utils/UUID.kt (100%) rename libs/models/src/{main => commonMain}/kotlin/com/getcode/utils/serializer/UUIDSerializer.kt (100%) create mode 100644 libs/models/src/jvmMain/kotlin/com/getcode/model/social/user/FileExtension.jvm.kt rename libs/network/connectivity/public/src/{test => androidHostTest}/kotlin/com/getcode/utils/network/ConnectionTypeTest.kt (100%) rename libs/network/connectivity/public/src/{test => androidHostTest}/kotlin/com/getcode/utils/network/PollUntilTest.kt (100%) rename libs/network/connectivity/public/src/{test => androidHostTest}/kotlin/com/getcode/utils/network/RetryTest.kt (100%) rename libs/network/connectivity/public/src/{main => androidMain}/kotlin/com/getcode/utils/network/connectivity/ConnectionStatusProvider.kt (100%) rename libs/network/connectivity/public/src/{main => commonMain}/kotlin/com/getcode/utils/network/NetworkConnectionListener.kt (100%) rename libs/network/connectivity/public/src/{main => commonMain}/kotlin/com/getcode/utils/network/Polling.kt (100%) rename libs/network/connectivity/public/src/{main => commonMain}/kotlin/com/getcode/utils/network/Retry.kt (100%) diff --git a/libs/currency/build.gradle.kts b/libs/currency/build.gradle.kts index 67ff4a3adb..7aac9e1ab4 100644 --- a/libs/currency/build.gradle.kts +++ b/libs/currency/build.gradle.kts @@ -1,20 +1,27 @@ plugins { - alias(libs.plugins.flipcash.android.library.compose) + alias(libs.plugins.flipcash.kmp.app.library) + alias(libs.plugins.compose.compiler) id("org.jetbrains.kotlin.plugin.parcelize") } -android { - namespace = "${Gradle.codeNamespace}.libs.currency" -} - -dependencies { - implementation(project(":ui:resources")) - - implementation(libs.bundles.kotlinx.serialization) - implementation(libs.kotlinx.datetime) - implementation(libs.bundles.hilt) +kotlin { + android { + namespace = "${Gradle.codeNamespace}.libs.currency" + androidResources { + enable = true + } + } - androidTestImplementation(libs.androidx.junit) - androidTestImplementation(libs.junit) - androidTestImplementation(libs.androidx.test.runner) + sourceSets { + commonMain.dependencies { + api(project(":libs:parcelable")) + implementation(project(":ui:resources")) + implementation(libs.bundles.kotlinx.serialization) + implementation(libs.kotlinx.datetime) + implementation(libs.kotlinx.coroutines.core) + implementation(libs.jetbrains.compose.runtime) + implementation(libs.androidx.annotation) + implementation(libs.javax.inject) + } + } } diff --git a/libs/currency/src/androidMain/kotlin/com/getcode/utils/CurrencyFormat.kt b/libs/currency/src/androidMain/kotlin/com/getcode/utils/CurrencyFormat.kt new file mode 100644 index 0000000000..448b41b74c --- /dev/null +++ b/libs/currency/src/androidMain/kotlin/com/getcode/utils/CurrencyFormat.kt @@ -0,0 +1,35 @@ +package com.getcode.utils + +import com.getcode.model.Currency +import com.getcode.util.resources.ResourceHelper + +fun Currency.format(resources: ResourceHelper, amount: Double): String { + return formatAmountString( + resources, + this, + amount + ) +} + +fun formatAmountString( + resources: ResourceHelper, + currency: Currency, + amount: Double, + kinSuffix: String = resources.getString(com.getcode.util.resources.R.string.core_kin), + suffix: String = resources.getString(com.getcode.util.resources.R.string.core_ofKin) +): String { + val isKin = currency.code == Currency.Kin.code + + return if (isKin) { + "${FormatUtils.formatWholeRoundDown(amount)}${if (kinSuffix.isNotEmpty()) " $kinSuffix" else ""}" + } else { + when { + currency.code == currency.symbol -> { + FormatUtils.format(amount) + if (suffix.isNotEmpty()) " $suffix" else "" + } + else -> { + "${currency.symbol}${FormatUtils.format(amount)}" + if (suffix.isNotEmpty()) " $suffix" else "" + } + } + } +} \ No newline at end of file diff --git a/libs/currency/src/androidMain/kotlin/com/getcode/utils/CurrencyIcons.android.kt b/libs/currency/src/androidMain/kotlin/com/getcode/utils/CurrencyIcons.android.kt new file mode 100644 index 0000000000..d2c437ef80 --- /dev/null +++ b/libs/currency/src/androidMain/kotlin/com/getcode/utils/CurrencyIcons.android.kt @@ -0,0 +1,9 @@ +package com.getcode.utils + +import com.getcode.libs.currency.R + +internal actual object CurrencyIcons { + actual val kin: Int? = R.drawable.ic_currency_kin + actual val xaf: Int? = R.drawable.ic_currency_xaf + actual val xof: Int? = R.drawable.ic_currency_xof +} diff --git a/libs/currency/src/main/res/drawable/ic_currency_dollar_active.xml b/libs/currency/src/androidMain/res/drawable/ic_currency_dollar_active.xml similarity index 100% rename from libs/currency/src/main/res/drawable/ic_currency_dollar_active.xml rename to libs/currency/src/androidMain/res/drawable/ic_currency_dollar_active.xml diff --git a/libs/currency/src/main/res/drawable/ic_currency_dollar_inactive.xml b/libs/currency/src/androidMain/res/drawable/ic_currency_dollar_inactive.xml similarity index 100% rename from libs/currency/src/main/res/drawable/ic_currency_dollar_inactive.xml rename to libs/currency/src/androidMain/res/drawable/ic_currency_dollar_inactive.xml diff --git a/libs/currency/src/main/res/drawable/ic_currency_kin.xml b/libs/currency/src/androidMain/res/drawable/ic_currency_kin.xml similarity index 100% rename from libs/currency/src/main/res/drawable/ic_currency_kin.xml rename to libs/currency/src/androidMain/res/drawable/ic_currency_kin.xml diff --git a/libs/currency/src/main/res/drawable/ic_currency_xaf.xml b/libs/currency/src/androidMain/res/drawable/ic_currency_xaf.xml similarity index 100% rename from libs/currency/src/main/res/drawable/ic_currency_xaf.xml rename to libs/currency/src/androidMain/res/drawable/ic_currency_xaf.xml diff --git a/libs/currency/src/main/res/drawable/ic_currency_xof.xml b/libs/currency/src/androidMain/res/drawable/ic_currency_xof.xml similarity index 100% rename from libs/currency/src/main/res/drawable/ic_currency_xof.xml rename to libs/currency/src/androidMain/res/drawable/ic_currency_xof.xml diff --git a/libs/currency/src/main/kotlin/com/getcode/model/Currency.kt b/libs/currency/src/commonMain/kotlin/com/getcode/model/Currency.kt similarity index 100% rename from libs/currency/src/main/kotlin/com/getcode/model/Currency.kt rename to libs/currency/src/commonMain/kotlin/com/getcode/model/Currency.kt diff --git a/libs/currency/src/main/kotlin/com/getcode/model/CurrencyCode.kt b/libs/currency/src/commonMain/kotlin/com/getcode/model/CurrencyCode.kt similarity index 100% rename from libs/currency/src/main/kotlin/com/getcode/model/CurrencyCode.kt rename to libs/currency/src/commonMain/kotlin/com/getcode/model/CurrencyCode.kt diff --git a/libs/currency/src/main/kotlin/com/getcode/model/Kin.kt b/libs/currency/src/commonMain/kotlin/com/getcode/model/Kin.kt similarity index 96% rename from libs/currency/src/main/kotlin/com/getcode/model/Kin.kt rename to libs/currency/src/commonMain/kotlin/com/getcode/model/Kin.kt index ae4df25d3c..ca6d385115 100644 --- a/libs/currency/src/main/kotlin/com/getcode/model/Kin.kt +++ b/libs/currency/src/commonMain/kotlin/com/getcode/model/Kin.kt @@ -1,7 +1,7 @@ package com.getcode.model -import android.os.Parcelable -import kotlinx.parcelize.Parcelize +import com.getcode.libs.parcelable.Parcelable +import com.getcode.libs.parcelable.Parcelize import java.math.BigDecimal import java.math.RoundingMode import kotlin.math.floor diff --git a/libs/currency/src/main/kotlin/com/getcode/model/Rate.kt b/libs/currency/src/commonMain/kotlin/com/getcode/model/Rate.kt similarity index 78% rename from libs/currency/src/main/kotlin/com/getcode/model/Rate.kt rename to libs/currency/src/commonMain/kotlin/com/getcode/model/Rate.kt index 1fe4ab900c..6cee497078 100644 --- a/libs/currency/src/main/kotlin/com/getcode/model/Rate.kt +++ b/libs/currency/src/commonMain/kotlin/com/getcode/model/Rate.kt @@ -1,7 +1,7 @@ package com.getcode.model -import android.os.Parcelable -import kotlinx.parcelize.Parcelize +import com.getcode.libs.parcelable.Parcelable +import com.getcode.libs.parcelable.Parcelize import kotlinx.serialization.Serializable @Parcelize diff --git a/libs/currency/src/main/kotlin/com/getcode/model/RegionCode.kt b/libs/currency/src/commonMain/kotlin/com/getcode/model/RegionCode.kt similarity index 100% rename from libs/currency/src/main/kotlin/com/getcode/model/RegionCode.kt rename to libs/currency/src/commonMain/kotlin/com/getcode/model/RegionCode.kt diff --git a/libs/currency/src/commonMain/kotlin/com/getcode/utils/Currency.kt b/libs/currency/src/commonMain/kotlin/com/getcode/utils/Currency.kt new file mode 100644 index 0000000000..55574c3fc0 --- /dev/null +++ b/libs/currency/src/commonMain/kotlin/com/getcode/utils/Currency.kt @@ -0,0 +1,49 @@ +package com.getcode.utils + +import androidx.annotation.DrawableRes +import androidx.compose.runtime.Composable +import com.getcode.model.Currency +import com.getcode.model.CurrencyCode +import com.getcode.util.resources.LocalResources +import com.getcode.util.resources.ResourceHelper +import com.getcode.util.resources.ResourceType + +val Currency.Companion.Kin: Currency + get() = Currency(CurrencyCode.KIN.name, "Kin", CurrencyIcons.kin, "K", 1.00,) + +@get:DrawableRes +val CurrencyCode.flagResId: Int? + @Composable get() { + if (this.name == "KIN") return CurrencyIcons.kin + if (this.name == "XAF") return CurrencyIcons.xaf + if (this.name == "XOF") return CurrencyIcons.xof + + return getRegion()?.name?.let { + getFlag(LocalResources.current!!, it) + } + } + +@DrawableRes +fun Currency.flagResId(resourceHelper: ResourceHelper): Int? { + if (code == "KIN") return CurrencyIcons.kin + if (code == "XAF") return CurrencyIcons.xaf + if (code == "XOF") return CurrencyIcons.xof + + return CurrencyCode.tryValueOf(code)?.let { currency -> + currency.getRegion()?.name + }?.let { regionName -> + getFlag(resourceHelper, regionName) + } +} + + +@DrawableRes +@Suppress("DiscouragedApi") +private fun getFlag(resourceHelper: ResourceHelper, countryCode: String): Int? { + if (countryCode.isEmpty()) return null + val resourceName = "ic_flag_${countryCode.lowercase()}" + return resourceHelper.getIdentifier( + resourceName, + ResourceType.Drawable, + ) +} diff --git a/libs/currency/src/commonMain/kotlin/com/getcode/utils/CurrencyIcons.kt b/libs/currency/src/commonMain/kotlin/com/getcode/utils/CurrencyIcons.kt new file mode 100644 index 0000000000..f3cfe6c501 --- /dev/null +++ b/libs/currency/src/commonMain/kotlin/com/getcode/utils/CurrencyIcons.kt @@ -0,0 +1,11 @@ +package com.getcode.utils + +/** + * Drawable resource IDs for the currencies that have no country flag. Android maps them to the + * module's drawables; desktop has no Android resources, so they are null there. + */ +internal expect object CurrencyIcons { + val kin: Int? + val xaf: Int? + val xof: Int? +} diff --git a/libs/currency/src/main/kotlin/com/getcode/utils/CurrencyUtils.kt b/libs/currency/src/commonMain/kotlin/com/getcode/utils/CurrencyUtils.kt similarity index 92% rename from libs/currency/src/main/kotlin/com/getcode/utils/CurrencyUtils.kt rename to libs/currency/src/commonMain/kotlin/com/getcode/utils/CurrencyUtils.kt index 30e8123a62..ad134fbfc3 100644 --- a/libs/currency/src/main/kotlin/com/getcode/utils/CurrencyUtils.kt +++ b/libs/currency/src/commonMain/kotlin/com/getcode/utils/CurrencyUtils.kt @@ -1,9 +1,7 @@ package com.getcode.utils -import android.annotation.SuppressLint import androidx.compose.runtime.ProvidableCompositionLocal import androidx.compose.runtime.staticCompositionLocalOf -import com.getcode.libs.currency.R import com.getcode.model.Currency import com.getcode.model.CurrencyCode import com.getcode.model.Rate @@ -52,9 +50,9 @@ class CurrencyUtils @Inject constructor( fun getFlagByCurrency(currencyCode: String?): Int? { currencyCode ?: return null - if (currencyCode == "KIN") return R.drawable.ic_currency_kin - if (currencyCode == "XAF") return R.drawable.ic_currency_xaf - if (currencyCode == "XOF") return R.drawable.ic_currency_xof + if (currencyCode == "KIN") return CurrencyIcons.kin + if (currencyCode == "XAF") return CurrencyIcons.xaf + if (currencyCode == "XOF") return CurrencyIcons.xof return CurrencyCode.tryValueOf(currencyCode)?.let { currency -> currency.getRegion()?.name @@ -63,7 +61,7 @@ class CurrencyUtils @Inject constructor( } } - @SuppressLint("DiscouragedApi") + @Suppress("DiscouragedApi") fun getFlag(countryCode: String): Int? { if (countryCode.isEmpty()) return null val resourceName = "ic_flag_${countryCode.lowercase()}" diff --git a/libs/currency/src/main/kotlin/com/getcode/utils/FormatUtils.kt b/libs/currency/src/commonMain/kotlin/com/getcode/utils/FormatUtils.kt similarity index 100% rename from libs/currency/src/main/kotlin/com/getcode/utils/FormatUtils.kt rename to libs/currency/src/commonMain/kotlin/com/getcode/utils/FormatUtils.kt diff --git a/libs/currency/src/main/kotlin/com/getcode/utils/serializer/KinSerializer.kt b/libs/currency/src/commonMain/kotlin/com/getcode/utils/serializer/KinSerializer.kt similarity index 100% rename from libs/currency/src/main/kotlin/com/getcode/utils/serializer/KinSerializer.kt rename to libs/currency/src/commonMain/kotlin/com/getcode/utils/serializer/KinSerializer.kt diff --git a/libs/currency/src/main/kotlin/com/getcode/utils/serializer/RateSerializer.kt b/libs/currency/src/commonMain/kotlin/com/getcode/utils/serializer/RateSerializer.kt similarity index 100% rename from libs/currency/src/main/kotlin/com/getcode/utils/serializer/RateSerializer.kt rename to libs/currency/src/commonMain/kotlin/com/getcode/utils/serializer/RateSerializer.kt diff --git a/libs/currency/src/jvmMain/kotlin/com/getcode/utils/CurrencyIcons.jvm.kt b/libs/currency/src/jvmMain/kotlin/com/getcode/utils/CurrencyIcons.jvm.kt new file mode 100644 index 0000000000..a2b87f0a88 --- /dev/null +++ b/libs/currency/src/jvmMain/kotlin/com/getcode/utils/CurrencyIcons.jvm.kt @@ -0,0 +1,7 @@ +package com.getcode.utils + +internal actual object CurrencyIcons { + actual val kin: Int? = null + actual val xaf: Int? = null + actual val xof: Int? = null +} diff --git a/libs/currency/src/main/kotlin/com/getcode/utils/Currency.kt b/libs/currency/src/main/kotlin/com/getcode/utils/Currency.kt deleted file mode 100644 index a735ba2f66..0000000000 --- a/libs/currency/src/main/kotlin/com/getcode/utils/Currency.kt +++ /dev/null @@ -1,82 +0,0 @@ -package com.getcode.utils - -import android.annotation.SuppressLint -import androidx.annotation.DrawableRes -import androidx.compose.runtime.Composable -import com.getcode.libs.currency.R -import com.getcode.model.Currency -import com.getcode.model.CurrencyCode -import com.getcode.util.resources.LocalResources -import com.getcode.util.resources.ResourceHelper -import com.getcode.util.resources.ResourceType - -val Currency.Companion.Kin: Currency - get() = Currency(CurrencyCode.KIN.name, "Kin", R.drawable.ic_currency_kin, "K", 1.00,) - -@get:DrawableRes -val CurrencyCode.flagResId: Int? - @Composable get() { - if (this.name == "KIN") return R.drawable.ic_currency_kin - if (this.name == "XAF") return R.drawable.ic_currency_xaf - if (this.name == "XOF") return R.drawable.ic_currency_xof - - return getRegion()?.name?.let { - getFlag(LocalResources.current!!, it) - } - } - -@DrawableRes -fun Currency.flagResId(resourceHelper: ResourceHelper): Int? { - if (code == "KIN") return R.drawable.ic_currency_kin - if (code == "XAF") return R.drawable.ic_currency_xaf - if (code == "XOF") return R.drawable.ic_currency_xof - - return CurrencyCode.tryValueOf(code)?.let { currency -> - currency.getRegion()?.name - }?.let { regionName -> - getFlag(resourceHelper, regionName) - } -} - - -@DrawableRes -@SuppressLint("DiscouragedApi") -private fun getFlag(resourceHelper: ResourceHelper, countryCode: String): Int? { - if (countryCode.isEmpty()) return null - val resourceName = "ic_flag_${countryCode.lowercase()}" - return resourceHelper.getIdentifier( - resourceName, - ResourceType.Drawable, - ) -} - -fun Currency.format(resources: ResourceHelper, amount: Double): String { - return formatAmountString( - resources, - this, - amount - ) -} - -fun formatAmountString( - resources: ResourceHelper, - currency: Currency, - amount: Double, - kinSuffix: String = resources.getString(com.getcode.util.resources.R.string.core_kin), - suffix: String = resources.getString(com.getcode.util.resources.R.string.core_ofKin) -): String { - val isKin = currency.code == Currency.Kin.code - - return if (isKin) { - "${FormatUtils.formatWholeRoundDown(amount)}${if (kinSuffix.isNotEmpty()) " $kinSuffix" else ""}" - } else { - when { - currency.code == currency.symbol -> { - FormatUtils.format(amount) + if (suffix.isNotEmpty()) " $suffix" else "" - } - else -> { - "${currency.symbol}${FormatUtils.format(amount)}" + if (suffix.isNotEmpty()) " $suffix" else "" - } - } - } -} \ No newline at end of file diff --git a/libs/locale/public/build.gradle.kts b/libs/locale/public/build.gradle.kts index 9c5d3353bf..efd1055d63 100644 --- a/libs/locale/public/build.gradle.kts +++ b/libs/locale/public/build.gradle.kts @@ -1,16 +1,22 @@ plugins { - alias(libs.plugins.flipcash.android.library) + alias(libs.plugins.flipcash.kmp.app.library) } -android { - namespace = "${Gradle.codeNamespace}.util.locale" -} +kotlin { + android { + namespace = "${Gradle.codeNamespace}.util.locale" + } -dependencies { - implementation(project(":libs:datetime")) - implementation(project(":libs:currency")) - implementation(libs.okhttp) - api(libs.androidx.annotation) - api(libs.kotlin.stdlib) - api(libs.kotlinx.coroutines.core) + sourceSets { + commonMain.dependencies { + implementation(project(":libs:datetime")) + implementation(project(":libs:currency")) + api(libs.androidx.annotation) + api(libs.kotlin.stdlib) + api(libs.kotlinx.coroutines.core) + } + androidMain.dependencies { + implementation(libs.okhttp) + } + } } diff --git a/libs/locale/public/src/main/kotlin/com/getcode/util/locale/LocaleUtils.kt b/libs/locale/public/src/androidMain/kotlin/com/getcode/util/locale/LocaleUtils.kt similarity index 100% rename from libs/locale/public/src/main/kotlin/com/getcode/util/locale/LocaleUtils.kt rename to libs/locale/public/src/androidMain/kotlin/com/getcode/util/locale/LocaleUtils.kt diff --git a/libs/locale/public/src/main/kotlin/com/getcode/util/locale/LocaleHelper.kt b/libs/locale/public/src/commonMain/kotlin/com/getcode/util/locale/LocaleHelper.kt similarity index 100% rename from libs/locale/public/src/main/kotlin/com/getcode/util/locale/LocaleHelper.kt rename to libs/locale/public/src/commonMain/kotlin/com/getcode/util/locale/LocaleHelper.kt diff --git a/libs/models/build.gradle.kts b/libs/models/build.gradle.kts index f7d77d5385..f5266c6654 100644 --- a/libs/models/build.gradle.kts +++ b/libs/models/build.gradle.kts @@ -1,20 +1,22 @@ plugins { - alias(libs.plugins.flipcash.android.library) + alias(libs.plugins.flipcash.kmp.app.library) id("org.jetbrains.kotlin.plugin.parcelize") } -android { - namespace = "${Gradle.codeNamespace}.libs.models" -} - -dependencies { - implementation(project(":libs:encryption:base58")) - implementation(project(":libs:encryption:ed25519")) - implementation(project(":libs:encryption:keys")) - implementation(project(":libs:encryption:utils")) - implementation(project(":libs:currency")) - implementation(libs.bundles.kotlinx.serialization) +kotlin { + android { + namespace = "${Gradle.codeNamespace}.libs.models" + } - implementation(libs.androidx.room.runtime) - implementation(libs.androidx.room.ktx) + sourceSets { + commonMain.dependencies { + api(project(":libs:parcelable")) + implementation(project(":libs:encryption:base58")) + implementation(project(":libs:encryption:ed25519")) + implementation(project(":libs:encryption:keys")) + implementation(project(":libs:encryption:utils")) + implementation(project(":libs:currency")) + implementation(libs.bundles.kotlinx.serialization) + } + } } diff --git a/libs/models/src/androidMain/kotlin/com/getcode/model/social/user/FileExtension.android.kt b/libs/models/src/androidMain/kotlin/com/getcode/model/social/user/FileExtension.android.kt new file mode 100644 index 0000000000..af0eda358d --- /dev/null +++ b/libs/models/src/androidMain/kotlin/com/getcode/model/social/user/FileExtension.android.kt @@ -0,0 +1,6 @@ +package com.getcode.model.social.user + +import android.webkit.MimeTypeMap + +internal actual fun fileExtensionFromUrl(url: String): String = + MimeTypeMap.getFileExtensionFromUrl(url) diff --git a/libs/models/src/main/kotlin/com/getcode/model/Cursor.kt b/libs/models/src/commonMain/kotlin/com/getcode/model/Cursor.kt similarity index 100% rename from libs/models/src/main/kotlin/com/getcode/model/Cursor.kt rename to libs/models/src/commonMain/kotlin/com/getcode/model/Cursor.kt diff --git a/libs/models/src/main/kotlin/com/getcode/model/EncryptedData.kt b/libs/models/src/commonMain/kotlin/com/getcode/model/EncryptedData.kt similarity index 100% rename from libs/models/src/main/kotlin/com/getcode/model/EncryptedData.kt rename to libs/models/src/commonMain/kotlin/com/getcode/model/EncryptedData.kt diff --git a/libs/models/src/main/kotlin/com/getcode/model/ID.kt b/libs/models/src/commonMain/kotlin/com/getcode/model/ID.kt similarity index 100% rename from libs/models/src/main/kotlin/com/getcode/model/ID.kt rename to libs/models/src/commonMain/kotlin/com/getcode/model/ID.kt diff --git a/libs/models/src/main/kotlin/com/getcode/model/PointerStatus.kt b/libs/models/src/commonMain/kotlin/com/getcode/model/PointerStatus.kt similarity index 100% rename from libs/models/src/main/kotlin/com/getcode/model/PointerStatus.kt rename to libs/models/src/commonMain/kotlin/com/getcode/model/PointerStatus.kt diff --git a/libs/models/src/main/kotlin/com/getcode/model/chat/AnnouncementAction.kt b/libs/models/src/commonMain/kotlin/com/getcode/model/chat/AnnouncementAction.kt similarity index 100% rename from libs/models/src/main/kotlin/com/getcode/model/chat/AnnouncementAction.kt rename to libs/models/src/commonMain/kotlin/com/getcode/model/chat/AnnouncementAction.kt diff --git a/libs/models/src/main/kotlin/com/getcode/model/chat/ChatMessage.kt b/libs/models/src/commonMain/kotlin/com/getcode/model/chat/ChatMessage.kt similarity index 100% rename from libs/models/src/main/kotlin/com/getcode/model/chat/ChatMessage.kt rename to libs/models/src/commonMain/kotlin/com/getcode/model/chat/ChatMessage.kt diff --git a/libs/models/src/main/kotlin/com/getcode/model/chat/ChatType.kt b/libs/models/src/commonMain/kotlin/com/getcode/model/chat/ChatType.kt similarity index 100% rename from libs/models/src/main/kotlin/com/getcode/model/chat/ChatType.kt rename to libs/models/src/commonMain/kotlin/com/getcode/model/chat/ChatType.kt diff --git a/libs/models/src/main/kotlin/com/getcode/model/chat/MessageContent.kt b/libs/models/src/commonMain/kotlin/com/getcode/model/chat/MessageContent.kt similarity index 100% rename from libs/models/src/main/kotlin/com/getcode/model/chat/MessageContent.kt rename to libs/models/src/commonMain/kotlin/com/getcode/model/chat/MessageContent.kt diff --git a/libs/models/src/main/kotlin/com/getcode/model/chat/MessageStatus.kt b/libs/models/src/commonMain/kotlin/com/getcode/model/chat/MessageStatus.kt similarity index 100% rename from libs/models/src/main/kotlin/com/getcode/model/chat/MessageStatus.kt rename to libs/models/src/commonMain/kotlin/com/getcode/model/chat/MessageStatus.kt diff --git a/libs/models/src/main/kotlin/com/getcode/model/chat/Platform.kt b/libs/models/src/commonMain/kotlin/com/getcode/model/chat/Platform.kt similarity index 100% rename from libs/models/src/main/kotlin/com/getcode/model/chat/Platform.kt rename to libs/models/src/commonMain/kotlin/com/getcode/model/chat/Platform.kt diff --git a/libs/models/src/main/kotlin/com/getcode/model/chat/Pointer.kt b/libs/models/src/commonMain/kotlin/com/getcode/model/chat/Pointer.kt similarity index 100% rename from libs/models/src/main/kotlin/com/getcode/model/chat/Pointer.kt rename to libs/models/src/commonMain/kotlin/com/getcode/model/chat/Pointer.kt diff --git a/libs/models/src/main/kotlin/com/getcode/model/chat/Reference.kt b/libs/models/src/commonMain/kotlin/com/getcode/model/chat/Reference.kt similarity index 100% rename from libs/models/src/main/kotlin/com/getcode/model/chat/Reference.kt rename to libs/models/src/commonMain/kotlin/com/getcode/model/chat/Reference.kt diff --git a/libs/models/src/main/kotlin/com/getcode/model/chat/Sender.kt b/libs/models/src/commonMain/kotlin/com/getcode/model/chat/Sender.kt similarity index 96% rename from libs/models/src/main/kotlin/com/getcode/model/chat/Sender.kt rename to libs/models/src/commonMain/kotlin/com/getcode/model/chat/Sender.kt index 7b95a8915e..ef23584c66 100644 --- a/libs/models/src/main/kotlin/com/getcode/model/chat/Sender.kt +++ b/libs/models/src/commonMain/kotlin/com/getcode/model/chat/Sender.kt @@ -1,9 +1,9 @@ package com.getcode.model.chat -import android.os.Parcelable +import com.getcode.libs.parcelable.Parcelable import com.getcode.model.ID import com.getcode.model.social.user.XExtraData -import kotlinx.parcelize.Parcelize +import com.getcode.libs.parcelable.Parcelize import kotlinx.serialization.json.Json @Parcelize diff --git a/libs/models/src/main/kotlin/com/getcode/model/chat/Title.kt b/libs/models/src/commonMain/kotlin/com/getcode/model/chat/Title.kt similarity index 100% rename from libs/models/src/main/kotlin/com/getcode/model/chat/Title.kt rename to libs/models/src/commonMain/kotlin/com/getcode/model/chat/Title.kt diff --git a/libs/models/src/main/kotlin/com/getcode/model/chat/Verb.kt b/libs/models/src/commonMain/kotlin/com/getcode/model/chat/Verb.kt similarity index 100% rename from libs/models/src/main/kotlin/com/getcode/model/chat/Verb.kt rename to libs/models/src/commonMain/kotlin/com/getcode/model/chat/Verb.kt diff --git a/libs/models/src/commonMain/kotlin/com/getcode/model/social/user/FileExtension.kt b/libs/models/src/commonMain/kotlin/com/getcode/model/social/user/FileExtension.kt new file mode 100644 index 0000000000..7b426d85d6 --- /dev/null +++ b/libs/models/src/commonMain/kotlin/com/getcode/model/social/user/FileExtension.kt @@ -0,0 +1,4 @@ +package com.getcode.model.social.user + +/** The file extension of [url], or an empty string; Android's `MimeTypeMap` rules. */ +internal expect fun fileExtensionFromUrl(url: String): String diff --git a/libs/models/src/main/kotlin/com/getcode/model/social/user/SocialProfile.kt b/libs/models/src/commonMain/kotlin/com/getcode/model/social/user/SocialProfile.kt similarity index 96% rename from libs/models/src/main/kotlin/com/getcode/model/social/user/SocialProfile.kt rename to libs/models/src/commonMain/kotlin/com/getcode/model/social/user/SocialProfile.kt index 2adca2b575..db74cdf709 100644 --- a/libs/models/src/main/kotlin/com/getcode/model/social/user/SocialProfile.kt +++ b/libs/models/src/commonMain/kotlin/com/getcode/model/social/user/SocialProfile.kt @@ -1,6 +1,5 @@ package com.getcode.model.social.user -import android.webkit.MimeTypeMap import com.getcode.model.chat.LinkedSocialProfile import kotlinx.serialization.Serializable import kotlinx.serialization.encodeToString @@ -47,7 +46,7 @@ sealed interface SocialProfile { val profilePicUrl: String? get() { val url = _profilePicUrl ?: return null - val extension = MimeTypeMap.getFileExtensionFromUrl(url) + val extension = fileExtensionFromUrl(url) val urlWithoutExtension = url.removeSuffix(extension) val urlWithoutType = urlWithoutExtension.substringBeforeLast("_") diff --git a/libs/models/src/main/kotlin/com/getcode/serialization/InstantIso8601Serializer.kt b/libs/models/src/commonMain/kotlin/com/getcode/serialization/InstantIso8601Serializer.kt similarity index 100% rename from libs/models/src/main/kotlin/com/getcode/serialization/InstantIso8601Serializer.kt rename to libs/models/src/commonMain/kotlin/com/getcode/serialization/InstantIso8601Serializer.kt diff --git a/libs/models/src/main/kotlin/com/getcode/utils/UUID.kt b/libs/models/src/commonMain/kotlin/com/getcode/utils/UUID.kt similarity index 100% rename from libs/models/src/main/kotlin/com/getcode/utils/UUID.kt rename to libs/models/src/commonMain/kotlin/com/getcode/utils/UUID.kt diff --git a/libs/models/src/main/kotlin/com/getcode/utils/serializer/UUIDSerializer.kt b/libs/models/src/commonMain/kotlin/com/getcode/utils/serializer/UUIDSerializer.kt similarity index 100% rename from libs/models/src/main/kotlin/com/getcode/utils/serializer/UUIDSerializer.kt rename to libs/models/src/commonMain/kotlin/com/getcode/utils/serializer/UUIDSerializer.kt diff --git a/libs/models/src/jvmMain/kotlin/com/getcode/model/social/user/FileExtension.jvm.kt b/libs/models/src/jvmMain/kotlin/com/getcode/model/social/user/FileExtension.jvm.kt new file mode 100644 index 0000000000..a50b072280 --- /dev/null +++ b/libs/models/src/jvmMain/kotlin/com/getcode/model/social/user/FileExtension.jvm.kt @@ -0,0 +1,17 @@ +package com.getcode.model.social.user + +private val FILENAME = Regex("[a-zA-Z_0-9.\\-()%]+") + +/** Same rules as AOSP `MimeTypeMap.getFileExtensionFromUrl`. */ +internal actual fun fileExtensionFromUrl(url: String): String { + if (url.isEmpty()) return "" + var path = url + val fragment = path.lastIndexOf('#') + if (fragment > 0) path = path.substring(0, fragment) + val query = path.lastIndexOf('?') + if (query > 0) path = path.substring(0, query) + val filename = path.substring(path.lastIndexOf('/') + 1) + if (filename.isEmpty() || !FILENAME.matches(filename)) return "" + val dot = filename.lastIndexOf('.') + return if (dot >= 0) filename.substring(dot + 1) else "" +} diff --git a/libs/network/connectivity/public/build.gradle.kts b/libs/network/connectivity/public/build.gradle.kts index 81092157f3..632d3d1477 100644 --- a/libs/network/connectivity/public/build.gradle.kts +++ b/libs/network/connectivity/public/build.gradle.kts @@ -1,23 +1,28 @@ plugins { - alias(libs.plugins.flipcash.android.library.compose) + alias(libs.plugins.flipcash.kmp.app.library) + alias(libs.plugins.compose.compiler) } -android { - namespace = "${Gradle.codeNamespace}.libs.network" -} - -dependencies { - implementation(project(":libs:datetime")) - implementation(project(":libs:logging")) - debugImplementation(libs.compose.ui.tools) - implementation(libs.compose.ui.tools.preview) - implementation(libs.bundles.kotlinx.serialization) - implementation(libs.bundles.hilt) - - testImplementation(kotlin("test")) - testImplementation(libs.kotlinx.coroutines.test) +kotlin { + android { + namespace = "${Gradle.codeNamespace}.libs.network" + } - androidTestImplementation(libs.androidx.junit) - androidTestImplementation(libs.junit) - androidTestImplementation(libs.androidx.test.runner) + sourceSets { + commonMain.dependencies { + implementation(project(":libs:datetime")) + implementation(project(":libs:logging")) + implementation(libs.bundles.kotlinx.serialization) + implementation(libs.jetbrains.compose.runtime) + implementation(libs.javax.inject) + } + androidMain.dependencies { + implementation(project.dependencies.platform(libs.compose.bom)) + implementation(libs.compose.ui.tools.preview) + } + getByName("androidHostTest").dependencies { + implementation(kotlin("test")) + implementation(libs.kotlinx.coroutines.test) + } + } } diff --git a/libs/network/connectivity/public/src/test/kotlin/com/getcode/utils/network/ConnectionTypeTest.kt b/libs/network/connectivity/public/src/androidHostTest/kotlin/com/getcode/utils/network/ConnectionTypeTest.kt similarity index 100% rename from libs/network/connectivity/public/src/test/kotlin/com/getcode/utils/network/ConnectionTypeTest.kt rename to libs/network/connectivity/public/src/androidHostTest/kotlin/com/getcode/utils/network/ConnectionTypeTest.kt diff --git a/libs/network/connectivity/public/src/test/kotlin/com/getcode/utils/network/PollUntilTest.kt b/libs/network/connectivity/public/src/androidHostTest/kotlin/com/getcode/utils/network/PollUntilTest.kt similarity index 100% rename from libs/network/connectivity/public/src/test/kotlin/com/getcode/utils/network/PollUntilTest.kt rename to libs/network/connectivity/public/src/androidHostTest/kotlin/com/getcode/utils/network/PollUntilTest.kt diff --git a/libs/network/connectivity/public/src/test/kotlin/com/getcode/utils/network/RetryTest.kt b/libs/network/connectivity/public/src/androidHostTest/kotlin/com/getcode/utils/network/RetryTest.kt similarity index 100% rename from libs/network/connectivity/public/src/test/kotlin/com/getcode/utils/network/RetryTest.kt rename to libs/network/connectivity/public/src/androidHostTest/kotlin/com/getcode/utils/network/RetryTest.kt diff --git a/libs/network/connectivity/public/src/main/kotlin/com/getcode/utils/network/connectivity/ConnectionStatusProvider.kt b/libs/network/connectivity/public/src/androidMain/kotlin/com/getcode/utils/network/connectivity/ConnectionStatusProvider.kt similarity index 100% rename from libs/network/connectivity/public/src/main/kotlin/com/getcode/utils/network/connectivity/ConnectionStatusProvider.kt rename to libs/network/connectivity/public/src/androidMain/kotlin/com/getcode/utils/network/connectivity/ConnectionStatusProvider.kt diff --git a/libs/network/connectivity/public/src/main/kotlin/com/getcode/utils/network/NetworkConnectionListener.kt b/libs/network/connectivity/public/src/commonMain/kotlin/com/getcode/utils/network/NetworkConnectionListener.kt similarity index 100% rename from libs/network/connectivity/public/src/main/kotlin/com/getcode/utils/network/NetworkConnectionListener.kt rename to libs/network/connectivity/public/src/commonMain/kotlin/com/getcode/utils/network/NetworkConnectionListener.kt diff --git a/libs/network/connectivity/public/src/main/kotlin/com/getcode/utils/network/Polling.kt b/libs/network/connectivity/public/src/commonMain/kotlin/com/getcode/utils/network/Polling.kt similarity index 100% rename from libs/network/connectivity/public/src/main/kotlin/com/getcode/utils/network/Polling.kt rename to libs/network/connectivity/public/src/commonMain/kotlin/com/getcode/utils/network/Polling.kt diff --git a/libs/network/connectivity/public/src/main/kotlin/com/getcode/utils/network/Retry.kt b/libs/network/connectivity/public/src/commonMain/kotlin/com/getcode/utils/network/Retry.kt similarity index 100% rename from libs/network/connectivity/public/src/main/kotlin/com/getcode/utils/network/Retry.kt rename to libs/network/connectivity/public/src/commonMain/kotlin/com/getcode/utils/network/Retry.kt From fa514cbf23f2e15a949aecd08a1c235b5d395159 Mon Sep 17 00:00:00 2001 From: Brandon McAnsh Date: Fri, 23 Oct 2026 16:21:47 -0400 Subject: [PATCH 06/11] build(opencode): move services:opencode to the android+jvm KMP plugin services:opencode now builds for jvm with Hilt wiring left in androidMain. Its keys came from the Java JNI class com.getcode.ed25519.Ed25519, which has no desktop equivalent, so: - ed25519 gains a jvmShared source set with a Kotlin Ed25519 object (same members as the Java class) over Ed25519Kmp. KeyPair keeps the Base64 string fields and its Parcelable form, so stored keys are unchanged. Callers move from com.getcode.ed25519 to com.getcode.ed25519kmp. - mnemonic's DerivedKey, MnemonicPhrase and MnemonicCache, and utils' Ed25519 extensions, move from androidMain to jvmShared. - logging gains a plain Log (Timber on Android) for the two opencode files that logged without trace()'s gating. - toInstantFromMillis moves to datetime's commonMain. - UserManager reads BuildFlags.isDebug instead of opencode's BuildConfig, which a KMP library no longer generates. The KMP Android target now compiles Java (withJava()): Hilt's KSP processors emit hilt_aggregated_deps as Java, and without it the app graph lost every opencode @Module binding. Adds HeadlessBalanceTest (jvmTest), which fetches token balances from the OCP backend over grpc-okhttp with no UI or DI. It reads the phrase from FLIPCASH_TEST_MNEMONIC or flipcash.test.mnemonic in local.properties and skips when neither is set. --- .../startup/MnemonicCacheInitializer.kt | 3 +- .../accounts/AccountProfileFetcher.kt | 2 +- .../PassphraseCredentialManager.kt | 2 +- .../accounts/AccountProfileFetcherTest.kt | 2 +- .../app/shareable/ShareSheetController.kt | 2 +- .../kotlin/KmpAppLibraryConventionPlugin.kt | 3 + .../kotlin/com/getcode/util/DateUtils.kt | 2 - .../kotlin/com/getcode/util/Instant.kt | 4 +- libs/encryption/ed25519/build.gradle.kts | 17 ++ .../getcode/ed25519kmp/RandomSeed.android.kt | 9 + .../com/getcode/ed25519kmp/RandomSeed.jvm.kt | 7 + .../kotlin/com/getcode/ed25519kmp/Ed25519.kt | 87 ++++++++++ libs/encryption/mnemonic/build.gradle.kts | 19 +- .../kotlin/com/getcode/crypt/MnemonicCache.kt | 15 -- .../kotlin/com/getcode/crypt/DerivedKey.kt | 2 +- .../kotlin/com/getcode/crypt/MnemonicCache.kt | 7 + .../com/getcode/crypt/MnemonicPhrase.kt | 2 +- libs/encryption/utils/build.gradle.kts | 2 +- .../com/getcode/utils/Ed25519Extensions.kt} | 2 +- .../com/getcode/utils/PlatformLog.android.kt | 4 + .../kotlin/com/getcode/utils/PlatformLog.kt | 12 ++ .../com/getcode/utils/PlatformLog.jvm.kt | 5 + .../controllers/BlobStorageController.kt | 2 +- .../flipcash/services/extensions/KeyPair.kt | 4 +- .../services/internal/extensions/KeyPair.kt | 2 +- .../internal/network/api/AccountApi.kt | 2 +- .../internal/network/api/ActivityFeedApi.kt | 2 +- .../internal/network/api/BlobStorageApi.kt | 2 +- .../internal/network/api/BlocklistApi.kt | 2 +- .../services/internal/network/api/ChatApi.kt | 2 +- .../internal/network/api/ChatMessagingApi.kt | 2 +- .../internal/network/api/CommunityApi.kt | 2 +- .../internal/network/api/ContactListApi.kt | 2 +- .../network/api/EmailVerificationApi.kt | 2 +- .../internal/network/api/ModerationApi.kt | 2 +- .../network/api/PhoneVerificationApi.kt | 2 +- .../services/internal/network/api/PollApi.kt | 2 +- .../internal/network/api/ProfileApi.kt | 2 +- .../internal/network/api/PurchaseApi.kt | 2 +- .../services/internal/network/api/PushApi.kt | 2 +- .../internal/network/api/ReportingApi.kt | 2 +- .../internal/network/api/ResolverApi.kt | 2 +- .../internal/network/api/SettingsApi.kt | 2 +- .../internal/network/api/ThirdPartyApi.kt | 2 +- .../network/extensions/AuthenticateMessage.kt | 2 +- .../network/extensions/LocalToProtobuf.kt | 2 +- .../network/extensions/SignMessage.kt | 2 +- .../network/services/AccountService.kt | 2 +- .../network/services/ActivityFeedService.kt | 2 +- .../network/services/BlobStorageService.kt | 2 +- .../network/services/BlocklistService.kt | 2 +- .../network/services/ChatMessagingService.kt | 2 +- .../internal/network/services/ChatService.kt | 2 +- .../network/services/CommunityService.kt | 2 +- .../network/services/ContactListService.kt | 2 +- .../services/EmailVerificationService.kt | 2 +- .../network/services/EventStreamingService.kt | 2 +- .../network/services/ModerationService.kt | 2 +- .../services/PhoneVerificationService.kt | 2 +- .../internal/network/services/PollService.kt | 2 +- .../network/services/ProfileService.kt | 2 +- .../network/services/PurchaseService.kt | 2 +- .../internal/network/services/PushService.kt | 2 +- .../network/services/ReportingService.kt | 2 +- .../network/services/ResolverService.kt | 2 +- .../network/services/SettingsService.kt | 2 +- .../network/services/ThirdPartyService.kt | 2 +- .../repositories/InternalAccountRepository.kt | 2 +- .../InternalActivityFeedRepository.kt | 2 +- .../InternalBlobStorageRepository.kt | 2 +- .../InternalBlocklistRepository.kt | 2 +- .../InternalChatMessagingRepository.kt | 2 +- .../repositories/InternalChatRepository.kt | 2 +- .../InternalCommunityRepository.kt | 2 +- .../InternalContactListRepository.kt | 2 +- .../InternalContactVerificationRepository.kt | 2 +- .../InternalEventStreamingRepository.kt | 2 +- .../InternalModerationRepository.kt | 2 +- .../repositories/InternalPollRepository.kt | 2 +- .../repositories/InternalProfileRepository.kt | 2 +- .../InternalPurchaseRepository.kt | 2 +- .../repositories/InternalPushRepository.kt | 2 +- .../InternalReportingRepository.kt | 2 +- .../InternalResolverRepository.kt | 2 +- .../InternalSettingsRepository.kt | 2 +- .../InternalThirdPartyRepository.kt | 2 +- .../services/repository/AccountRepository.kt | 2 +- .../repository/ActivityFeedRepository.kt | 2 +- .../repository/BlobStorageRepository.kt | 2 +- .../repository/BlocklistRepository.kt | 2 +- .../repository/ChatMessagingRepository.kt | 2 +- .../services/repository/ChatRepository.kt | 2 +- .../repository/CommunityRepository.kt | 2 +- .../repository/ContactListRepository.kt | 2 +- .../ContactVerificationRepository.kt | 2 +- .../repository/EventStreamingRepository.kt | 2 +- .../repository/ModerationRepository.kt | 2 +- .../services/repository/PollRepository.kt | 2 +- .../services/repository/ProfileRepository.kt | 2 +- .../services/repository/PurchaseRepository.kt | 2 +- .../services/repository/PushRepository.kt | 2 +- .../repository/ReportingRepository.kt | 2 +- .../services/repository/ResolverRepository.kt | 2 +- .../services/repository/SettingsRepository.kt | 2 +- .../repository/ThirdPartyRepository.kt | 2 +- .../com/flipcash/services/user/UserManager.kt | 4 +- .../BlobStorageControllerChatMediaTest.kt | 2 +- .../controllers/BlobStorageControllerTest.kt | 2 +- .../controllers/ChatControllerTest.kt | 2 +- .../ChatMessagingControllerTest.kt | 2 +- .../EventStreamingControllerTest.kt | 2 +- .../controllers/ProfileControllerTest.kt | 2 +- .../network/api/BlobStorageApiDeadlineTest.kt | 2 +- .../services/PhoneVerificationServiceTest.kt | 2 +- services/opencode/build.gradle.kts | 162 +++++++++--------- services/opencode/consumer-rules.pro | 0 .../model/core/OpenCodePayloadTests.kt | 0 .../getcode/opencode/solana/swap/SwapTests.kt | 0 .../com/getcode/opencode/tests/PublicKey.kt | 0 .../controllers/AccountControllerTest.kt | 2 +- .../TokenControllerFetchTokenBalancesTest.kt | 0 ...sactionControllerPollIntentMetadataTest.kt | 0 .../bidi/OpenBidirectionalStreamTest.kt | 0 .../RealVerifiedFiatCalculatorTest.kt | 0 .../extensions/ByteArrayExtensionsTest.kt | 0 .../extensions/CurrencyCodeExtensionsTest.kt | 0 .../extensions/ResultExtensionsTest.kt | 0 .../extensions/VerifiedStateExtTest.kt | 0 .../manager/VerifiedProtoManagerTest.kt | 0 .../api/intents/IntentMultiTransferTest.kt | 2 +- .../network/pollers/SwapPollerTest.kt | 2 +- .../network/services/CurrencyServiceTest.kt | 2 +- .../internal/proto/ProtoWireFormatTest.kt | 0 .../opencode/internal/solana/ShortVecTest.kt | 0 .../solana/extensions/PdaDerivationTest.kt | 2 +- .../internal/solana/extensions/UInt16Test.kt | 0 .../CoinbaseStablecoinPoolAccountTest.kt | 0 .../CoinbaseStableSwapperProgramTest.kt | 0 .../programs/CurrencyCreatorProgramTest.kt | 0 .../solana/programs/ProgramAddressesTest.kt | 0 .../internal/solana/programs/SysVarTest.kt | 0 .../programs/VirtualMachineProgramTest.kt | 0 .../transactors/ClaimValidationTest.kt | 0 .../transactors/GiveBillTransactorTest.kt | 0 .../transactors/GrabBillTransactorTest.kt | 0 .../ReceiveGiftCardTransactorTest.kt | 0 .../transactors/SendGiftCardTransactorTest.kt | 0 .../model/core/OpenCodePayloadTest.kt | 0 .../model/core/errors/SodiumErrorTest.kt | 0 .../core/errors/SubmitIntentErrorTest.kt | 0 .../model/core/errors/SwapErrorTest.kt | 0 .../model/financial/DistributionTest.kt | 0 .../opencode/model/financial/FeeTest.kt | 0 .../opencode/model/financial/FiatTest.kt | 0 .../opencode/model/financial/FiatTests.kt | 0 .../model/financial/HistoricalMintDataTest.kt | 0 .../model/financial/LaunchpadSellFeeTest.kt | 0 .../opencode/model/financial/LimitsTest.kt | 0 .../opencode/model/financial/LocalFiatTest.kt | 0 .../model/financial/MintMetadataTest.kt | 0 .../opencode/model/financial/RateTest.kt | 0 .../model/transactions/SwapMetadataTest.kt | 0 .../solana/CompactMessageVectorTest.kt | 0 .../solana/InstructionIntegrationTest.kt | 0 .../solana/MultiPaymentIntentVectorTest.kt | 2 +- .../solana/SolanaMessageVectorTest.kt | 0 .../SolanaTransactionLookupTableTest.kt | 0 .../opencode/solana/VersionedMessageV0Test.kt | 0 .../swap/ClientBuiltDepositSwapV2Test.kt | 0 ...oinbaseStablecoinDepositTransactionTest.kt | 0 ...inbaseStablecoinSwapperInstructionsTest.kt | 0 .../solana/swap/ExistingCurrencyBuyFeeTest.kt | 2 +- .../swap/StablecoinSwapVersionRequestTest.kt | 2 +- .../swap/StatelessSwapInstructionsTest.kt | 0 .../com/getcode/opencode/tests/PublicKey.kt | 0 .../opencode/utils/DoubleExtensionsTest.kt | 0 .../com/getcode/opencode/utils/LongTest.kt | 0 .../com/getcode/opencode/utils/MapsTest.kt | 0 .../opencode/utils/StringExtensionsTest.kt | 0 .../opencode/utils/ThrowableExtensionsTest.kt | 0 .../resources/compact_message.json | 0 .../resources/multi_payment_intent.json | 0 .../resources/solana_message.json | 0 .../com/getcode/opencode/ControllerFactory.kt | 0 .../com/getcode/opencode/ExchangeFactory.kt | 0 .../com/getcode/opencode/NetworkFactory.kt | 0 .../com/getcode/opencode/RepositoryFactory.kt | 0 .../getcode/opencode/inject/OpenCodeModule.kt | 0 .../opencode/inject/SessionListenersModule.kt | 0 .../opencode/inject/TransactorModule.kt | 0 .../platform/ProcessLifecycle.android.kt | 25 +++ .../model/core/ScanCodeEncoder.android.kt | 5 + .../drawable/ic_currency_dollar_active.xml | 0 .../drawable/ic_currency_dollar_inactive.xml | 0 .../res/drawable/ic_currency_xaf.xml | 0 .../res/drawable/ic_currency_xof.xml | 0 .../com/getcode/opencode/ManagerFactory.kt | 0 .../com/getcode/opencode/ProtocolConfig.kt | 0 .../opencode/controllers/AccountController.kt | 0 .../opencode/controllers/BalanceController.kt | 0 .../controllers/CurrencyController.kt | 0 .../controllers/MessagingController.kt | 2 +- .../opencode/controllers/TokenController.kt | 0 .../controllers/TransactionController.kt | 2 +- .../controllers/TransactionOperations.kt | 0 .../com/getcode/opencode/events/Events.kt | 0 .../com/getcode/opencode/exchange/Exchange.kt | 0 .../exchange/VerifiedFiatCalculator.kt | 6 +- .../opencode/generators/GiftCardGenerator.kt | 0 .../opencode/generators/MnemonicGenerator.kt | 0 .../annotations/OpenCodeManagedChannel.kt | 0 .../opencode/internal/annotations/Protocol.kt | 0 .../bidi/BidirectionalStreamReference.kt | 0 .../opencode/internal/bidi/OpenStream.kt | 0 .../internal/bidi/OpenStreamForResult.kt | 0 .../domain/mapping/BillCustomizationMapper.kt | 0 .../mapping/HistoricalMintDataMapper.kt | 0 .../domain/mapping/HolderMetricsMapper.kt | 0 .../domain/mapping/LaunchpadMetadataMapper.kt | 0 .../domain/mapping/LiveMintDataMapper.kt | 0 .../domain/mapping/MarketCapMetricsMapper.kt | 0 .../internal/domain/mapping/MessageMapper.kt | 0 .../internal/domain/mapping/MintMapper.kt | 0 .../domain/mapping/OwnerBalanceMapper.kt | 0 .../domain/mapping/SocialLinkMapper.kt | 0 .../domain/mapping/SwapMetadataMapper.kt | 0 .../mapping/TransactionMetadataMapper.kt | 0 .../domain/mapping/VmMetadataMapper.kt | 0 .../repositories/InternalAccountRepository.kt | 2 +- .../repositories/InternalBalanceRepository.kt | 0 .../InternalCurrencyRepository.kt | 2 +- .../repositories/InternalEventRepository.kt | 0 .../InternalMessagingRepository.kt | 2 +- .../repositories/InternalSwapRepository.kt | 2 +- .../InternalTransactionRepository.kt | 2 +- .../internal/exchange/OpenCodeExchange.kt | 29 +--- .../exchange/RealVerifiedFiatCalculator.kt | 1 - .../opencode/internal/extensions/ByteArray.kt | 0 .../opencode/internal/extensions/Currency.kt | 0 .../internal/extensions/CurrencyCode.kt | 0 .../opencode/internal/extensions/Instant.kt | 0 .../opencode/internal/extensions/KeyPair.kt | 2 +- .../opencode/internal/extensions/PublicKey.kt | 0 .../opencode/internal/extensions/Result.kt | 0 .../internal/extensions/VerifiedState.kt | 0 .../opencode/internal/generator/Generator.kt | 0 .../internal/manager/VerifiedProtoManager.kt | 0 .../internal/network/api/AccountApi.kt | 2 +- .../internal/network/api/BalanceApi.kt | 0 .../internal/network/api/CurrencyApi.kt | 2 +- .../internal/network/api/MessagingApi.kt | 4 +- .../internal/network/api/TransactionApi.kt | 2 +- .../api/intents/IntentCreateAccount.kt | 0 .../network/api/intents/IntentDistribution.kt | 0 .../network/api/intents/IntentFundSwap.kt | 0 .../api/intents/IntentMultiTransfer.kt | 0 .../api/intents/IntentRemoteReceive.kt | 0 .../network/api/intents/IntentRemoteSend.kt | 0 .../network/api/intents/IntentStatefulSwap.kt | 0 .../api/intents/IntentStatelessSwap.kt | 0 .../network/api/intents/IntentTransfer.kt | 0 .../network/api/intents/IntentWithdraw.kt | 0 .../api/intents/actions/ActionFeePayment.kt | 2 +- .../api/intents/actions/ActionOpenAccount.kt | 2 +- .../intents/actions/ActionPublicTransfer.kt | 2 +- .../intents/actions/ActionPublicWithdraw.kt | 2 +- .../opencode/internal/network/core/GrpcApi.kt | 24 +++ .../network/executors/IntentExecutor.kt | 6 +- .../network/executors/StatefulSwapExecutor.kt | 4 +- .../executors/StatelessSwapExecutor.kt | 4 +- .../network/extensions/FoldWithSuppression.kt | 0 .../network/extensions/LocalToProtobuf.kt | 2 +- .../network/extensions/ProtobufToLocal.kt | 0 .../network/extensions/SignMessage.kt | 2 +- .../internal/network/funding/SwapFunding.kt | 0 .../internal/network/pollers/SwapPoller.kt | 2 +- .../network/serializer/UUIDSerializer.kt | 0 .../network/services/AccountService.kt | 2 +- .../network/services/BalanceService.kt | 0 .../network/services/CurrencyService.kt | 2 +- .../network/services/MessagingService.kt | 2 +- .../internal/network/services/SwapService.kt | 2 +- .../network/services/TransactionService.kt | 4 +- .../network/streamers/LiveMintDataStreamer.kt | 0 .../internal/platform/ProcessLifecycle.kt | 15 ++ .../opencode/internal/solana/Definitions.kt | 0 .../opencode/internal/solana/ShortVec.kt | 0 .../extensions/AssociatedTokenAccount.kt | 0 .../extensions/ExtractServerParameters.kt | 0 .../internal/solana/extensions/PublicKey.kt | 2 +- .../extensions/TimelockDerivedAccounts.kt | 0 .../internal/solana/extensions/Token.kt | 0 .../internal/solana/extensions/UInt16.kt | 0 .../model/CoinbaseStablecoinPoolAccount.kt | 0 .../solana/model/CoinbaseSwapAccounts.kt | 0 .../solana/model/MessageAddressLookupTable.kt | 0 .../opencode/internal/solana/model/SwapId.kt | 4 +- .../opencode/internal/solana/model/Vault.kt | 0 .../solana/programs/AssociatedTokenProgram.kt | 0 ...AssociatedTokenProgram_CreateIdempotent.kt | 0 .../programs/CoinbaseStableSwapperProgram.kt | 0 .../CoinbaseStableSwapperProgram_SwapV2.kt | 0 .../solana/programs/ComputeBudgetProgram.kt | 0 ...omputeBudgetProgram_SetComputeUnitLimit.kt | 0 ...omputeBudgetProgram_SetComputeUnitPrice.kt | 0 .../solana/programs/CurrencyCreatorProgram.kt | 0 ...rencyCreatorProgram_BuyAndDepositIntoVm.kt | 0 .../CurrencyCreatorProgram_BuyTokens.kt | 0 ...rrencyCreatorProgram_InitializeCurrency.kt | 0 .../CurrencyCreatorProgram_InitializePool.kt | 0 ...encyCreatorProgram_SellAndDepositIntoVm.kt | 0 .../CurrencyCreatorProgram_SellTokens.kt | 0 .../solana/programs/InstructionType.kt | 0 .../internal/solana/programs/MemoProgram.kt | 0 .../solana/programs/MemoProgram_Memo.kt | 0 .../solana/programs/SwapValidatorProgram.kt | 0 .../internal/solana/programs/SysVar.kt | 0 .../internal/solana/programs/SystemProgram.kt | 0 .../programs/SystemProgram_AdvanceNonce.kt | 0 .../solana/programs/TimelockProgram.kt | 0 .../internal/solana/programs/TokenProgram.kt | 0 .../programs/TokenProgram_CloseAccount.kt | 0 .../solana/programs/TokenProgram_Transfer.kt | 0 .../internal/solana/programs/UsdfProgram.kt | 0 .../solana/programs/UsdfProgram_Swap.kt | 0 .../solana/programs/UsdfProgram_Transfer.kt | 0 .../solana/programs/VirtualMachineProgram.kt | 0 ...lMachineProgram_CloseSwapAccountIfEmpty.kt | 0 .../programs/VirtualMachineProgram_InitVm.kt | 0 .../VirtualMachineProgram_TransferForSwap.kt | 0 ...alMachineProgram_TransferForSwapWithFee.kt | 0 .../internal/solana/utils/DataSlice.kt | 0 .../opencode/internal/solana/utils/Differ.kt | 12 +- .../transactors/AccountClusterFactory.kt | 0 .../transactors/BillPresentationData.kt | 0 .../transactors/GiveBillTransactor.kt | 2 +- .../transactors/GrabBillTransactor.kt | 0 .../internal/transactors/PayloadFactory.kt | 2 +- .../transactors/ReceiveGiftCardTransactor.kt | 0 .../transactors/SendGiftCardTransactor.kt | 2 +- .../internal/transactors/Transactor.kt | 0 .../managers/BillTransactionManager.kt | 0 .../opencode/managers/GiftCardManager.kt | 0 .../opencode/managers/MnemonicManager.kt | 2 +- .../com/getcode/opencode/mapper/Mapper.kt | 0 .../opencode/model/accounts/AccountCluster.kt | 2 +- .../opencode/model/accounts/AccountFilter.kt | 0 .../opencode/model/accounts/AccountInfo.kt | 0 .../model/accounts/AccountResponse.kt | 0 .../opencode/model/accounts/AccountType.kt | 0 .../model/accounts/GiftCardAccount.kt | 0 .../opencode/model/accounts/PoolAccount.kt | 2 +- .../opencode/model/core/EncryptedData.kt | 2 +- .../com/getcode/opencode/model/core/ID.kt | 0 .../opencode/model/core/OpenCodePayload.kt | 5 +- .../opencode/model/core/PayloadKind.kt | 0 .../opencode/model/core/PayloadValue.kt | 0 .../opencode/model/core/ScanCodeEncoder.kt | 4 + .../com/getcode/opencode/model/core/UUID.kt | 0 .../opencode/model/core/errors/Errors.kt | 0 .../opencode/model/core/errors/SodiumError.kt | 0 .../model/core/errors/ValidationException.kt | 0 .../opencode/model/financial/Currency.kt | 0 .../opencode/model/financial/CurrencyCode.kt | 0 .../opencode/model/financial/Distribution.kt | 0 .../getcode/opencode/model/financial/Fee.kt | 0 .../getcode/opencode/model/financial/Fiat.kt | 4 +- .../model/financial/HistoricalMintData.kt | 0 .../LaunchpadReserveStateSnapshot.kt | 0 .../model/financial/LaunchpadSellFee.kt | 0 .../opencode/model/financial/Limits.kt | 0 .../opencode/model/financial/LocalFiat.kt | 4 +- .../opencode/model/financial/MintMetadata.kt | 6 +- .../model/financial/MintStreamingData.kt | 0 .../opencode/model/financial/OwnerBalance.kt | 0 .../getcode/opencode/model/financial/Rate.kt | 4 +- .../opencode/model/financial/RegionCode.kt | 0 .../model/financial/TokenCreateRequest.kt | 0 .../opencode/model/financial/TokenResult.kt | 0 .../model/financial/TokenUpdateRequest.kt | 0 .../model/messaging/KeepAliveRequest.kt | 2 +- .../opencode/model/messaging/Message.kt | 0 .../model/moderation/ModerationAttestation.kt | 0 .../model/transactions/AddressLookupTable.kt | 0 .../model/transactions/ExchangeData.kt | 0 .../model/transactions/FundSwapPool.kt | 0 .../model/transactions/LiquidityPool.kt | 0 .../transactions/StartSwapServerParameters.kt | 0 .../model/transactions/StatefulSwapRequest.kt | 2 +- .../StatefulSwapResponseServerParameters.kt | 0 .../model/transactions/StatefulSwapResult.kt | 0 .../transactions/StatelessSwapRequest.kt | 0 .../model/transactions/StatelessSwapResult.kt | 0 .../StatelessSwapServerParameters.kt | 0 .../model/transactions/SwapFundingSource.kt | 0 .../model/transactions/SwapMetadata.kt | 0 .../opencode/model/transactions/SwapRoute.kt | 0 .../model/transactions/TransactionMetadata.kt | 0 .../model/transactions/TransferRequest.kt | 0 .../transactions/WithdrawalAvailability.kt | 0 .../opencode/model/ui/BillCustomization.kt | 4 +- .../opencode/model/ui/DiscoverCategory.kt | 0 .../opencode/model/ui/WindowedRange.kt | 0 .../opencode/providers/SessionListener.kt | 0 .../providers/TokenMetadataProvider.kt | 0 .../repositories/AccountRepository.kt | 2 +- .../repositories/BalanceRepository.kt | 0 .../repositories/CurrencyRepository.kt | 2 +- .../opencode/repositories/EventRepository.kt | 0 .../repositories/MessagingRepository.kt | 2 +- .../opencode/repositories/SwapRepository.kt | 2 +- .../repositories/TransactionRepository.kt | 2 +- .../getcode/opencode/solana/Instruction.kt | 0 .../getcode/opencode/solana/LegacyMessage.kt | 0 .../com/getcode/opencode/solana/Message.kt | 0 .../getcode/opencode/solana/MessageHeader.kt | 0 .../opencode/solana/SolanaTransaction.kt | 2 +- .../opencode/solana/TransactionBuilder.kt | 0 .../opencode/solana/VersionedMessage.kt | 0 .../opencode/solana/intents/ActionGroup.kt | 0 .../opencode/solana/intents/IntentType.kt | 2 +- .../solana/intents/ServerParameter.kt | 0 .../solana/intents/actions/ActionType.kt | 2 +- .../solana/keys/ProgramDerivedAccount.kt | 0 .../solana/keys/TimelockVmSwapAccounts.kt | 0 .../CoinbaseStablecoinSwapperInstructions.kt | 0 .../CrossCurrencyExistingSwapInstructions.kt | 0 .../swap/ExistingCurrencyBuyInstructions.kt | 0 .../solana/swap/NewCurrencyBuyInstructions.kt | 0 .../opencode/solana/swap/SellInstructions.kt | 0 .../solana/swap/UsdcDepositInstructions.kt | 0 .../swap/UsdcDepositSweepInstructions.kt | 0 .../solana/swap/UsdcToUsdfSwapInstructions.kt | 0 .../solana/swap/UsdfDepositInstructions.kt | 0 .../com/getcode/opencode/utils/Double.kt | 0 .../kotlin/com/getcode/opencode/utils/Flow.kt | 6 +- .../com/getcode/opencode/utils/KeyPair.kt | 10 ++ .../kotlin/com/getcode/opencode/utils/Long.kt | 0 .../kotlin/com/getcode/opencode/utils/Maps.kt | 0 .../com/getcode/opencode/utils/Nonce.kt | 0 .../com/getcode/opencode/utils/PublicKey.kt | 2 +- .../com/getcode/opencode/utils/Result.kt | 0 .../com/getcode/opencode/utils/String.kt | 0 .../com/getcode/opencode/utils/Throwable.kt | 0 .../utils/logging/LoggingClientCall.kt | 0 .../logging/LoggingClientCallListener.kt | 0 .../utils/logging/LoggingClientInterceptor.kt | 0 .../internal/platform/ProcessLifecycle.jvm.kt | 14 ++ .../model/core/ScanCodeEncoder.jvm.kt | 4 + .../getcode/opencode/HeadlessBalanceTest.kt | 51 ++++++ .../opencode/internal/network/core/GrpcApi.kt | 39 ----- .../com/getcode/opencode/utils/KeyPair.kt | 10 -- 452 files changed, 602 insertions(+), 364 deletions(-) create mode 100644 libs/encryption/ed25519/src/androidMain/kotlin/com/getcode/ed25519kmp/RandomSeed.android.kt create mode 100644 libs/encryption/ed25519/src/jvmMain/kotlin/com/getcode/ed25519kmp/RandomSeed.jvm.kt create mode 100644 libs/encryption/ed25519/src/jvmSharedMain/kotlin/com/getcode/ed25519kmp/Ed25519.kt delete mode 100644 libs/encryption/mnemonic/src/androidMain/kotlin/com/getcode/crypt/MnemonicCache.kt rename libs/encryption/mnemonic/src/{androidMain => jvmSharedMain}/kotlin/com/getcode/crypt/DerivedKey.kt (95%) create mode 100644 libs/encryption/mnemonic/src/jvmSharedMain/kotlin/com/getcode/crypt/MnemonicCache.kt rename libs/encryption/mnemonic/src/{androidMain => jvmSharedMain}/kotlin/com/getcode/crypt/MnemonicPhrase.kt (98%) rename libs/encryption/utils/src/{androidMain/kotlin/com/getcode/utils/Ed25519Extensions.android.kt => jvmSharedMain/kotlin/com/getcode/utils/Ed25519Extensions.kt} (78%) delete mode 100644 services/opencode/consumer-rules.pro rename services/opencode/src/{androidTest => androidDeviceTest}/kotlin/com/getcode/opencode/model/core/OpenCodePayloadTests.kt (100%) rename services/opencode/src/{androidTest => androidDeviceTest}/kotlin/com/getcode/opencode/solana/swap/SwapTests.kt (100%) rename services/opencode/src/{androidTest => androidDeviceTest}/kotlin/com/getcode/opencode/tests/PublicKey.kt (100%) rename services/opencode/src/{test => androidHostTest}/kotlin/com/getcode/opencode/controllers/AccountControllerTest.kt (99%) rename services/opencode/src/{test => androidHostTest}/kotlin/com/getcode/opencode/controllers/TokenControllerFetchTokenBalancesTest.kt (100%) rename services/opencode/src/{test => androidHostTest}/kotlin/com/getcode/opencode/controllers/TransactionControllerPollIntentMetadataTest.kt (100%) rename services/opencode/src/{test => androidHostTest}/kotlin/com/getcode/opencode/internal/bidi/OpenBidirectionalStreamTest.kt (100%) rename services/opencode/src/{test => androidHostTest}/kotlin/com/getcode/opencode/internal/exchange/RealVerifiedFiatCalculatorTest.kt (100%) rename services/opencode/src/{test => androidHostTest}/kotlin/com/getcode/opencode/internal/extensions/ByteArrayExtensionsTest.kt (100%) rename services/opencode/src/{test => androidHostTest}/kotlin/com/getcode/opencode/internal/extensions/CurrencyCodeExtensionsTest.kt (100%) rename services/opencode/src/{test => androidHostTest}/kotlin/com/getcode/opencode/internal/extensions/ResultExtensionsTest.kt (100%) rename services/opencode/src/{test => androidHostTest}/kotlin/com/getcode/opencode/internal/extensions/VerifiedStateExtTest.kt (100%) rename services/opencode/src/{test => androidHostTest}/kotlin/com/getcode/opencode/internal/manager/VerifiedProtoManagerTest.kt (100%) rename services/opencode/src/{test => androidHostTest}/kotlin/com/getcode/opencode/internal/network/api/intents/IntentMultiTransferTest.kt (99%) rename services/opencode/src/{test => androidHostTest}/kotlin/com/getcode/opencode/internal/network/pollers/SwapPollerTest.kt (99%) rename services/opencode/src/{test => androidHostTest}/kotlin/com/getcode/opencode/internal/network/services/CurrencyServiceTest.kt (99%) rename services/opencode/src/{test => androidHostTest}/kotlin/com/getcode/opencode/internal/proto/ProtoWireFormatTest.kt (100%) rename services/opencode/src/{test => androidHostTest}/kotlin/com/getcode/opencode/internal/solana/ShortVecTest.kt (100%) rename services/opencode/src/{test => androidHostTest}/kotlin/com/getcode/opencode/internal/solana/extensions/PdaDerivationTest.kt (99%) rename services/opencode/src/{test => androidHostTest}/kotlin/com/getcode/opencode/internal/solana/extensions/UInt16Test.kt (100%) rename services/opencode/src/{test => androidHostTest}/kotlin/com/getcode/opencode/internal/solana/model/CoinbaseStablecoinPoolAccountTest.kt (100%) rename services/opencode/src/{test => androidHostTest}/kotlin/com/getcode/opencode/internal/solana/programs/CoinbaseStableSwapperProgramTest.kt (100%) rename services/opencode/src/{test => androidHostTest}/kotlin/com/getcode/opencode/internal/solana/programs/CurrencyCreatorProgramTest.kt (100%) rename services/opencode/src/{test => androidHostTest}/kotlin/com/getcode/opencode/internal/solana/programs/ProgramAddressesTest.kt (100%) rename services/opencode/src/{test => androidHostTest}/kotlin/com/getcode/opencode/internal/solana/programs/SysVarTest.kt (100%) rename services/opencode/src/{test => androidHostTest}/kotlin/com/getcode/opencode/internal/solana/programs/VirtualMachineProgramTest.kt (100%) rename services/opencode/src/{test => androidHostTest}/kotlin/com/getcode/opencode/internal/transactors/ClaimValidationTest.kt (100%) rename services/opencode/src/{test => androidHostTest}/kotlin/com/getcode/opencode/internal/transactors/GiveBillTransactorTest.kt (100%) rename services/opencode/src/{test => androidHostTest}/kotlin/com/getcode/opencode/internal/transactors/GrabBillTransactorTest.kt (100%) rename services/opencode/src/{test => androidHostTest}/kotlin/com/getcode/opencode/internal/transactors/ReceiveGiftCardTransactorTest.kt (100%) rename services/opencode/src/{test => androidHostTest}/kotlin/com/getcode/opencode/internal/transactors/SendGiftCardTransactorTest.kt (100%) rename services/opencode/src/{test => androidHostTest}/kotlin/com/getcode/opencode/model/core/OpenCodePayloadTest.kt (100%) rename services/opencode/src/{test => androidHostTest}/kotlin/com/getcode/opencode/model/core/errors/SodiumErrorTest.kt (100%) rename services/opencode/src/{test => androidHostTest}/kotlin/com/getcode/opencode/model/core/errors/SubmitIntentErrorTest.kt (100%) rename services/opencode/src/{test => androidHostTest}/kotlin/com/getcode/opencode/model/core/errors/SwapErrorTest.kt (100%) rename services/opencode/src/{test => androidHostTest}/kotlin/com/getcode/opencode/model/financial/DistributionTest.kt (100%) rename services/opencode/src/{test => androidHostTest}/kotlin/com/getcode/opencode/model/financial/FeeTest.kt (100%) rename services/opencode/src/{test => androidHostTest}/kotlin/com/getcode/opencode/model/financial/FiatTest.kt (100%) rename services/opencode/src/{test => androidHostTest}/kotlin/com/getcode/opencode/model/financial/FiatTests.kt (100%) rename services/opencode/src/{test => androidHostTest}/kotlin/com/getcode/opencode/model/financial/HistoricalMintDataTest.kt (100%) rename services/opencode/src/{test => androidHostTest}/kotlin/com/getcode/opencode/model/financial/LaunchpadSellFeeTest.kt (100%) rename services/opencode/src/{test => androidHostTest}/kotlin/com/getcode/opencode/model/financial/LimitsTest.kt (100%) rename services/opencode/src/{test => androidHostTest}/kotlin/com/getcode/opencode/model/financial/LocalFiatTest.kt (100%) rename services/opencode/src/{test => androidHostTest}/kotlin/com/getcode/opencode/model/financial/MintMetadataTest.kt (100%) rename services/opencode/src/{test => androidHostTest}/kotlin/com/getcode/opencode/model/financial/RateTest.kt (100%) rename services/opencode/src/{test => androidHostTest}/kotlin/com/getcode/opencode/model/transactions/SwapMetadataTest.kt (100%) rename services/opencode/src/{test => androidHostTest}/kotlin/com/getcode/opencode/solana/CompactMessageVectorTest.kt (100%) rename services/opencode/src/{test => androidHostTest}/kotlin/com/getcode/opencode/solana/InstructionIntegrationTest.kt (100%) rename services/opencode/src/{test => androidHostTest}/kotlin/com/getcode/opencode/solana/MultiPaymentIntentVectorTest.kt (99%) rename services/opencode/src/{test => androidHostTest}/kotlin/com/getcode/opencode/solana/SolanaMessageVectorTest.kt (100%) rename services/opencode/src/{test => androidHostTest}/kotlin/com/getcode/opencode/solana/SolanaTransactionLookupTableTest.kt (100%) rename services/opencode/src/{test => androidHostTest}/kotlin/com/getcode/opencode/solana/VersionedMessageV0Test.kt (100%) rename services/opencode/src/{test => androidHostTest}/kotlin/com/getcode/opencode/solana/swap/ClientBuiltDepositSwapV2Test.kt (100%) rename services/opencode/src/{test => androidHostTest}/kotlin/com/getcode/opencode/solana/swap/CoinbaseStablecoinDepositTransactionTest.kt (100%) rename services/opencode/src/{test => androidHostTest}/kotlin/com/getcode/opencode/solana/swap/CoinbaseStablecoinSwapperInstructionsTest.kt (100%) rename services/opencode/src/{test => androidHostTest}/kotlin/com/getcode/opencode/solana/swap/ExistingCurrencyBuyFeeTest.kt (99%) rename services/opencode/src/{test => androidHostTest}/kotlin/com/getcode/opencode/solana/swap/StablecoinSwapVersionRequestTest.kt (98%) rename services/opencode/src/{test => androidHostTest}/kotlin/com/getcode/opencode/solana/swap/StatelessSwapInstructionsTest.kt (100%) rename services/opencode/src/{test => androidHostTest}/kotlin/com/getcode/opencode/tests/PublicKey.kt (100%) rename services/opencode/src/{test => androidHostTest}/kotlin/com/getcode/opencode/utils/DoubleExtensionsTest.kt (100%) rename services/opencode/src/{test => androidHostTest}/kotlin/com/getcode/opencode/utils/LongTest.kt (100%) rename services/opencode/src/{test => androidHostTest}/kotlin/com/getcode/opencode/utils/MapsTest.kt (100%) rename services/opencode/src/{test => androidHostTest}/kotlin/com/getcode/opencode/utils/StringExtensionsTest.kt (100%) rename services/opencode/src/{test => androidHostTest}/kotlin/com/getcode/opencode/utils/ThrowableExtensionsTest.kt (100%) rename services/opencode/src/{test => androidHostTest}/resources/compact_message.json (100%) rename services/opencode/src/{test => androidHostTest}/resources/multi_payment_intent.json (100%) rename services/opencode/src/{test => androidHostTest}/resources/solana_message.json (100%) rename services/opencode/src/{main => androidMain}/kotlin/com/getcode/opencode/ControllerFactory.kt (100%) rename services/opencode/src/{main => androidMain}/kotlin/com/getcode/opencode/ExchangeFactory.kt (100%) rename services/opencode/src/{main => androidMain}/kotlin/com/getcode/opencode/NetworkFactory.kt (100%) rename services/opencode/src/{main => androidMain}/kotlin/com/getcode/opencode/RepositoryFactory.kt (100%) rename services/opencode/src/{main => androidMain}/kotlin/com/getcode/opencode/inject/OpenCodeModule.kt (100%) rename services/opencode/src/{main => androidMain}/kotlin/com/getcode/opencode/inject/SessionListenersModule.kt (100%) rename services/opencode/src/{main => androidMain}/kotlin/com/getcode/opencode/inject/TransactorModule.kt (100%) create mode 100644 services/opencode/src/androidMain/kotlin/com/getcode/opencode/internal/platform/ProcessLifecycle.android.kt create mode 100644 services/opencode/src/androidMain/kotlin/com/getcode/opencode/model/core/ScanCodeEncoder.android.kt rename services/opencode/src/{main => androidMain}/res/drawable/ic_currency_dollar_active.xml (100%) rename services/opencode/src/{main => androidMain}/res/drawable/ic_currency_dollar_inactive.xml (100%) rename services/opencode/src/{main => androidMain}/res/drawable/ic_currency_xaf.xml (100%) rename services/opencode/src/{main => androidMain}/res/drawable/ic_currency_xof.xml (100%) rename services/opencode/src/{main => commonMain}/kotlin/com/getcode/opencode/ManagerFactory.kt (100%) rename services/opencode/src/{main => commonMain}/kotlin/com/getcode/opencode/ProtocolConfig.kt (100%) rename services/opencode/src/{main => commonMain}/kotlin/com/getcode/opencode/controllers/AccountController.kt (100%) rename services/opencode/src/{main => commonMain}/kotlin/com/getcode/opencode/controllers/BalanceController.kt (100%) rename services/opencode/src/{main => commonMain}/kotlin/com/getcode/opencode/controllers/CurrencyController.kt (100%) rename services/opencode/src/{main => commonMain}/kotlin/com/getcode/opencode/controllers/MessagingController.kt (99%) rename services/opencode/src/{main => commonMain}/kotlin/com/getcode/opencode/controllers/TokenController.kt (100%) rename services/opencode/src/{main => commonMain}/kotlin/com/getcode/opencode/controllers/TransactionController.kt (99%) rename services/opencode/src/{main => commonMain}/kotlin/com/getcode/opencode/controllers/TransactionOperations.kt (100%) rename services/opencode/src/{main => commonMain}/kotlin/com/getcode/opencode/events/Events.kt (100%) rename services/opencode/src/{main => commonMain}/kotlin/com/getcode/opencode/exchange/Exchange.kt (100%) rename services/opencode/src/{main => commonMain}/kotlin/com/getcode/opencode/exchange/VerifiedFiatCalculator.kt (91%) rename services/opencode/src/{main => commonMain}/kotlin/com/getcode/opencode/generators/GiftCardGenerator.kt (100%) rename services/opencode/src/{main => commonMain}/kotlin/com/getcode/opencode/generators/MnemonicGenerator.kt (100%) rename services/opencode/src/{main => commonMain}/kotlin/com/getcode/opencode/internal/annotations/OpenCodeManagedChannel.kt (100%) rename services/opencode/src/{main => commonMain}/kotlin/com/getcode/opencode/internal/annotations/Protocol.kt (100%) rename services/opencode/src/{main => commonMain}/kotlin/com/getcode/opencode/internal/bidi/BidirectionalStreamReference.kt (100%) rename services/opencode/src/{main => commonMain}/kotlin/com/getcode/opencode/internal/bidi/OpenStream.kt (100%) rename services/opencode/src/{main => commonMain}/kotlin/com/getcode/opencode/internal/bidi/OpenStreamForResult.kt (100%) rename services/opencode/src/{main => commonMain}/kotlin/com/getcode/opencode/internal/domain/mapping/BillCustomizationMapper.kt (100%) rename services/opencode/src/{main => commonMain}/kotlin/com/getcode/opencode/internal/domain/mapping/HistoricalMintDataMapper.kt (100%) rename services/opencode/src/{main => commonMain}/kotlin/com/getcode/opencode/internal/domain/mapping/HolderMetricsMapper.kt (100%) rename services/opencode/src/{main => commonMain}/kotlin/com/getcode/opencode/internal/domain/mapping/LaunchpadMetadataMapper.kt (100%) rename services/opencode/src/{main => commonMain}/kotlin/com/getcode/opencode/internal/domain/mapping/LiveMintDataMapper.kt (100%) rename services/opencode/src/{main => commonMain}/kotlin/com/getcode/opencode/internal/domain/mapping/MarketCapMetricsMapper.kt (100%) rename services/opencode/src/{main => commonMain}/kotlin/com/getcode/opencode/internal/domain/mapping/MessageMapper.kt (100%) rename services/opencode/src/{main => commonMain}/kotlin/com/getcode/opencode/internal/domain/mapping/MintMapper.kt (100%) rename services/opencode/src/{main => commonMain}/kotlin/com/getcode/opencode/internal/domain/mapping/OwnerBalanceMapper.kt (100%) rename services/opencode/src/{main => commonMain}/kotlin/com/getcode/opencode/internal/domain/mapping/SocialLinkMapper.kt (100%) rename services/opencode/src/{main => commonMain}/kotlin/com/getcode/opencode/internal/domain/mapping/SwapMetadataMapper.kt (100%) rename services/opencode/src/{main => commonMain}/kotlin/com/getcode/opencode/internal/domain/mapping/TransactionMetadataMapper.kt (100%) rename services/opencode/src/{main => commonMain}/kotlin/com/getcode/opencode/internal/domain/mapping/VmMetadataMapper.kt (100%) rename services/opencode/src/{main => commonMain}/kotlin/com/getcode/opencode/internal/domain/repositories/InternalAccountRepository.kt (98%) rename services/opencode/src/{main => commonMain}/kotlin/com/getcode/opencode/internal/domain/repositories/InternalBalanceRepository.kt (100%) rename services/opencode/src/{main => commonMain}/kotlin/com/getcode/opencode/internal/domain/repositories/InternalCurrencyRepository.kt (98%) rename services/opencode/src/{main => commonMain}/kotlin/com/getcode/opencode/internal/domain/repositories/InternalEventRepository.kt (100%) rename services/opencode/src/{main => commonMain}/kotlin/com/getcode/opencode/internal/domain/repositories/InternalMessagingRepository.kt (98%) rename services/opencode/src/{main => commonMain}/kotlin/com/getcode/opencode/internal/domain/repositories/InternalSwapRepository.kt (97%) rename services/opencode/src/{main => commonMain}/kotlin/com/getcode/opencode/internal/domain/repositories/InternalTransactionRepository.kt (99%) rename services/opencode/src/{main => commonMain}/kotlin/com/getcode/opencode/internal/exchange/OpenCodeExchange.kt (89%) rename services/opencode/src/{main => commonMain}/kotlin/com/getcode/opencode/internal/exchange/RealVerifiedFiatCalculator.kt (99%) rename services/opencode/src/{main => commonMain}/kotlin/com/getcode/opencode/internal/extensions/ByteArray.kt (100%) rename services/opencode/src/{main => commonMain}/kotlin/com/getcode/opencode/internal/extensions/Currency.kt (100%) rename services/opencode/src/{main => commonMain}/kotlin/com/getcode/opencode/internal/extensions/CurrencyCode.kt (100%) rename services/opencode/src/{main => commonMain}/kotlin/com/getcode/opencode/internal/extensions/Instant.kt (100%) rename services/opencode/src/{main => commonMain}/kotlin/com/getcode/opencode/internal/extensions/KeyPair.kt (80%) rename services/opencode/src/{main => commonMain}/kotlin/com/getcode/opencode/internal/extensions/PublicKey.kt (100%) rename services/opencode/src/{main => commonMain}/kotlin/com/getcode/opencode/internal/extensions/Result.kt (100%) rename services/opencode/src/{main => commonMain}/kotlin/com/getcode/opencode/internal/extensions/VerifiedState.kt (100%) rename services/opencode/src/{main => commonMain}/kotlin/com/getcode/opencode/internal/generator/Generator.kt (100%) rename services/opencode/src/{main => commonMain}/kotlin/com/getcode/opencode/internal/manager/VerifiedProtoManager.kt (100%) rename services/opencode/src/{main => commonMain}/kotlin/com/getcode/opencode/internal/network/api/AccountApi.kt (98%) rename services/opencode/src/{main => commonMain}/kotlin/com/getcode/opencode/internal/network/api/BalanceApi.kt (100%) rename services/opencode/src/{main => commonMain}/kotlin/com/getcode/opencode/internal/network/api/CurrencyApi.kt (99%) rename services/opencode/src/{main => commonMain}/kotlin/com/getcode/opencode/internal/network/api/MessagingApi.kt (98%) rename services/opencode/src/{main => commonMain}/kotlin/com/getcode/opencode/internal/network/api/TransactionApi.kt (99%) rename services/opencode/src/{main => commonMain}/kotlin/com/getcode/opencode/internal/network/api/intents/IntentCreateAccount.kt (100%) rename services/opencode/src/{main => commonMain}/kotlin/com/getcode/opencode/internal/network/api/intents/IntentDistribution.kt (100%) rename services/opencode/src/{main => commonMain}/kotlin/com/getcode/opencode/internal/network/api/intents/IntentFundSwap.kt (100%) rename services/opencode/src/{main => commonMain}/kotlin/com/getcode/opencode/internal/network/api/intents/IntentMultiTransfer.kt (100%) rename services/opencode/src/{main => commonMain}/kotlin/com/getcode/opencode/internal/network/api/intents/IntentRemoteReceive.kt (100%) rename services/opencode/src/{main => commonMain}/kotlin/com/getcode/opencode/internal/network/api/intents/IntentRemoteSend.kt (100%) rename services/opencode/src/{main => commonMain}/kotlin/com/getcode/opencode/internal/network/api/intents/IntentStatefulSwap.kt (100%) rename services/opencode/src/{main => commonMain}/kotlin/com/getcode/opencode/internal/network/api/intents/IntentStatelessSwap.kt (100%) rename services/opencode/src/{main => commonMain}/kotlin/com/getcode/opencode/internal/network/api/intents/IntentTransfer.kt (100%) rename services/opencode/src/{main => commonMain}/kotlin/com/getcode/opencode/internal/network/api/intents/IntentWithdraw.kt (100%) rename services/opencode/src/{main => commonMain}/kotlin/com/getcode/opencode/internal/network/api/intents/actions/ActionFeePayment.kt (98%) rename services/opencode/src/{main => commonMain}/kotlin/com/getcode/opencode/internal/network/api/intents/actions/ActionOpenAccount.kt (98%) rename services/opencode/src/{main => commonMain}/kotlin/com/getcode/opencode/internal/network/api/intents/actions/ActionPublicTransfer.kt (98%) rename services/opencode/src/{main => commonMain}/kotlin/com/getcode/opencode/internal/network/api/intents/actions/ActionPublicWithdraw.kt (98%) create mode 100644 services/opencode/src/commonMain/kotlin/com/getcode/opencode/internal/network/core/GrpcApi.kt rename services/opencode/src/{main => commonMain}/kotlin/com/getcode/opencode/internal/network/executors/IntentExecutor.kt (98%) rename services/opencode/src/{main => commonMain}/kotlin/com/getcode/opencode/internal/network/executors/StatefulSwapExecutor.kt (99%) rename services/opencode/src/{main => commonMain}/kotlin/com/getcode/opencode/internal/network/executors/StatelessSwapExecutor.kt (98%) rename services/opencode/src/{main => commonMain}/kotlin/com/getcode/opencode/internal/network/extensions/FoldWithSuppression.kt (100%) rename services/opencode/src/{main => commonMain}/kotlin/com/getcode/opencode/internal/network/extensions/LocalToProtobuf.kt (99%) rename services/opencode/src/{main => commonMain}/kotlin/com/getcode/opencode/internal/network/extensions/ProtobufToLocal.kt (100%) rename services/opencode/src/{main => commonMain}/kotlin/com/getcode/opencode/internal/network/extensions/SignMessage.kt (94%) rename services/opencode/src/{main => commonMain}/kotlin/com/getcode/opencode/internal/network/funding/SwapFunding.kt (100%) rename services/opencode/src/{main => commonMain}/kotlin/com/getcode/opencode/internal/network/pollers/SwapPoller.kt (99%) rename services/opencode/src/{main => commonMain}/kotlin/com/getcode/opencode/internal/network/serializer/UUIDSerializer.kt (100%) rename services/opencode/src/{main => commonMain}/kotlin/com/getcode/opencode/internal/network/services/AccountService.kt (98%) rename services/opencode/src/{main => commonMain}/kotlin/com/getcode/opencode/internal/network/services/BalanceService.kt (100%) rename services/opencode/src/{main => commonMain}/kotlin/com/getcode/opencode/internal/network/services/CurrencyService.kt (99%) rename services/opencode/src/{main => commonMain}/kotlin/com/getcode/opencode/internal/network/services/MessagingService.kt (99%) rename services/opencode/src/{main => commonMain}/kotlin/com/getcode/opencode/internal/network/services/SwapService.kt (98%) rename services/opencode/src/{main => commonMain}/kotlin/com/getcode/opencode/internal/network/services/TransactionService.kt (99%) rename services/opencode/src/{main => commonMain}/kotlin/com/getcode/opencode/internal/network/streamers/LiveMintDataStreamer.kt (100%) create mode 100644 services/opencode/src/commonMain/kotlin/com/getcode/opencode/internal/platform/ProcessLifecycle.kt rename services/opencode/src/{main => commonMain}/kotlin/com/getcode/opencode/internal/solana/Definitions.kt (100%) rename services/opencode/src/{main => commonMain}/kotlin/com/getcode/opencode/internal/solana/ShortVec.kt (100%) rename services/opencode/src/{main => commonMain}/kotlin/com/getcode/opencode/internal/solana/extensions/AssociatedTokenAccount.kt (100%) rename services/opencode/src/{main => commonMain}/kotlin/com/getcode/opencode/internal/solana/extensions/ExtractServerParameters.kt (100%) rename services/opencode/src/{main => commonMain}/kotlin/com/getcode/opencode/internal/solana/extensions/PublicKey.kt (99%) rename services/opencode/src/{main => commonMain}/kotlin/com/getcode/opencode/internal/solana/extensions/TimelockDerivedAccounts.kt (100%) rename services/opencode/src/{main => commonMain}/kotlin/com/getcode/opencode/internal/solana/extensions/Token.kt (100%) rename services/opencode/src/{main => commonMain}/kotlin/com/getcode/opencode/internal/solana/extensions/UInt16.kt (100%) rename services/opencode/src/{main => commonMain}/kotlin/com/getcode/opencode/internal/solana/model/CoinbaseStablecoinPoolAccount.kt (100%) rename services/opencode/src/{main => commonMain}/kotlin/com/getcode/opencode/internal/solana/model/CoinbaseSwapAccounts.kt (100%) rename services/opencode/src/{main => commonMain}/kotlin/com/getcode/opencode/internal/solana/model/MessageAddressLookupTable.kt (100%) rename services/opencode/src/{main => commonMain}/kotlin/com/getcode/opencode/internal/solana/model/SwapId.kt (90%) rename services/opencode/src/{main => commonMain}/kotlin/com/getcode/opencode/internal/solana/model/Vault.kt (100%) rename services/opencode/src/{main => commonMain}/kotlin/com/getcode/opencode/internal/solana/programs/AssociatedTokenProgram.kt (100%) rename services/opencode/src/{main => commonMain}/kotlin/com/getcode/opencode/internal/solana/programs/AssociatedTokenProgram_CreateIdempotent.kt (100%) rename services/opencode/src/{main => commonMain}/kotlin/com/getcode/opencode/internal/solana/programs/CoinbaseStableSwapperProgram.kt (100%) rename services/opencode/src/{main => commonMain}/kotlin/com/getcode/opencode/internal/solana/programs/CoinbaseStableSwapperProgram_SwapV2.kt (100%) rename services/opencode/src/{main => commonMain}/kotlin/com/getcode/opencode/internal/solana/programs/ComputeBudgetProgram.kt (100%) rename services/opencode/src/{main => commonMain}/kotlin/com/getcode/opencode/internal/solana/programs/ComputeBudgetProgram_SetComputeUnitLimit.kt (100%) rename services/opencode/src/{main => commonMain}/kotlin/com/getcode/opencode/internal/solana/programs/ComputeBudgetProgram_SetComputeUnitPrice.kt (100%) rename services/opencode/src/{main => commonMain}/kotlin/com/getcode/opencode/internal/solana/programs/CurrencyCreatorProgram.kt (100%) rename services/opencode/src/{main => commonMain}/kotlin/com/getcode/opencode/internal/solana/programs/CurrencyCreatorProgram_BuyAndDepositIntoVm.kt (100%) rename services/opencode/src/{main => commonMain}/kotlin/com/getcode/opencode/internal/solana/programs/CurrencyCreatorProgram_BuyTokens.kt (100%) rename services/opencode/src/{main => commonMain}/kotlin/com/getcode/opencode/internal/solana/programs/CurrencyCreatorProgram_InitializeCurrency.kt (100%) rename services/opencode/src/{main => commonMain}/kotlin/com/getcode/opencode/internal/solana/programs/CurrencyCreatorProgram_InitializePool.kt (100%) rename services/opencode/src/{main => commonMain}/kotlin/com/getcode/opencode/internal/solana/programs/CurrencyCreatorProgram_SellAndDepositIntoVm.kt (100%) rename services/opencode/src/{main => commonMain}/kotlin/com/getcode/opencode/internal/solana/programs/CurrencyCreatorProgram_SellTokens.kt (100%) rename services/opencode/src/{main => commonMain}/kotlin/com/getcode/opencode/internal/solana/programs/InstructionType.kt (100%) rename services/opencode/src/{main => commonMain}/kotlin/com/getcode/opencode/internal/solana/programs/MemoProgram.kt (100%) rename services/opencode/src/{main => commonMain}/kotlin/com/getcode/opencode/internal/solana/programs/MemoProgram_Memo.kt (100%) rename services/opencode/src/{main => commonMain}/kotlin/com/getcode/opencode/internal/solana/programs/SwapValidatorProgram.kt (100%) rename services/opencode/src/{main => commonMain}/kotlin/com/getcode/opencode/internal/solana/programs/SysVar.kt (100%) rename services/opencode/src/{main => commonMain}/kotlin/com/getcode/opencode/internal/solana/programs/SystemProgram.kt (100%) rename services/opencode/src/{main => commonMain}/kotlin/com/getcode/opencode/internal/solana/programs/SystemProgram_AdvanceNonce.kt (100%) rename services/opencode/src/{main => commonMain}/kotlin/com/getcode/opencode/internal/solana/programs/TimelockProgram.kt (100%) rename services/opencode/src/{main => commonMain}/kotlin/com/getcode/opencode/internal/solana/programs/TokenProgram.kt (100%) rename services/opencode/src/{main => commonMain}/kotlin/com/getcode/opencode/internal/solana/programs/TokenProgram_CloseAccount.kt (100%) rename services/opencode/src/{main => commonMain}/kotlin/com/getcode/opencode/internal/solana/programs/TokenProgram_Transfer.kt (100%) rename services/opencode/src/{main => commonMain}/kotlin/com/getcode/opencode/internal/solana/programs/UsdfProgram.kt (100%) rename services/opencode/src/{main => commonMain}/kotlin/com/getcode/opencode/internal/solana/programs/UsdfProgram_Swap.kt (100%) rename services/opencode/src/{main => commonMain}/kotlin/com/getcode/opencode/internal/solana/programs/UsdfProgram_Transfer.kt (100%) rename services/opencode/src/{main => commonMain}/kotlin/com/getcode/opencode/internal/solana/programs/VirtualMachineProgram.kt (100%) rename services/opencode/src/{main => commonMain}/kotlin/com/getcode/opencode/internal/solana/programs/VirtualMachineProgram_CloseSwapAccountIfEmpty.kt (100%) rename services/opencode/src/{main => commonMain}/kotlin/com/getcode/opencode/internal/solana/programs/VirtualMachineProgram_InitVm.kt (100%) rename services/opencode/src/{main => commonMain}/kotlin/com/getcode/opencode/internal/solana/programs/VirtualMachineProgram_TransferForSwap.kt (100%) rename services/opencode/src/{main => commonMain}/kotlin/com/getcode/opencode/internal/solana/programs/VirtualMachineProgram_TransferForSwapWithFee.kt (100%) rename services/opencode/src/{main => commonMain}/kotlin/com/getcode/opencode/internal/solana/utils/DataSlice.kt (100%) rename services/opencode/src/{main => commonMain}/kotlin/com/getcode/opencode/internal/solana/utils/Differ.kt (75%) rename services/opencode/src/{main => commonMain}/kotlin/com/getcode/opencode/internal/transactors/AccountClusterFactory.kt (100%) rename services/opencode/src/{main => commonMain}/kotlin/com/getcode/opencode/internal/transactors/BillPresentationData.kt (100%) rename services/opencode/src/{main => commonMain}/kotlin/com/getcode/opencode/internal/transactors/GiveBillTransactor.kt (99%) rename services/opencode/src/{main => commonMain}/kotlin/com/getcode/opencode/internal/transactors/GrabBillTransactor.kt (100%) rename services/opencode/src/{main => commonMain}/kotlin/com/getcode/opencode/internal/transactors/PayloadFactory.kt (96%) rename services/opencode/src/{main => commonMain}/kotlin/com/getcode/opencode/internal/transactors/ReceiveGiftCardTransactor.kt (100%) rename services/opencode/src/{main => commonMain}/kotlin/com/getcode/opencode/internal/transactors/SendGiftCardTransactor.kt (99%) rename services/opencode/src/{main => commonMain}/kotlin/com/getcode/opencode/internal/transactors/Transactor.kt (100%) rename services/opencode/src/{main => commonMain}/kotlin/com/getcode/opencode/managers/BillTransactionManager.kt (100%) rename services/opencode/src/{main => commonMain}/kotlin/com/getcode/opencode/managers/GiftCardManager.kt (100%) rename services/opencode/src/{main => commonMain}/kotlin/com/getcode/opencode/managers/MnemonicManager.kt (96%) rename services/opencode/src/{main => commonMain}/kotlin/com/getcode/opencode/mapper/Mapper.kt (100%) rename services/opencode/src/{main => commonMain}/kotlin/com/getcode/opencode/model/accounts/AccountCluster.kt (98%) rename services/opencode/src/{main => commonMain}/kotlin/com/getcode/opencode/model/accounts/AccountFilter.kt (100%) rename services/opencode/src/{main => commonMain}/kotlin/com/getcode/opencode/model/accounts/AccountInfo.kt (100%) rename services/opencode/src/{main => commonMain}/kotlin/com/getcode/opencode/model/accounts/AccountResponse.kt (100%) rename services/opencode/src/{main => commonMain}/kotlin/com/getcode/opencode/model/accounts/AccountType.kt (100%) rename services/opencode/src/{main => commonMain}/kotlin/com/getcode/opencode/model/accounts/GiftCardAccount.kt (100%) rename services/opencode/src/{main => commonMain}/kotlin/com/getcode/opencode/model/accounts/PoolAccount.kt (95%) rename services/opencode/src/{main => commonMain}/kotlin/com/getcode/opencode/model/core/EncryptedData.kt (89%) rename services/opencode/src/{main => commonMain}/kotlin/com/getcode/opencode/model/core/ID.kt (100%) rename services/opencode/src/{main => commonMain}/kotlin/com/getcode/opencode/model/core/OpenCodePayload.kt (96%) rename services/opencode/src/{main => commonMain}/kotlin/com/getcode/opencode/model/core/PayloadKind.kt (100%) rename services/opencode/src/{main => commonMain}/kotlin/com/getcode/opencode/model/core/PayloadValue.kt (100%) create mode 100644 services/opencode/src/commonMain/kotlin/com/getcode/opencode/model/core/ScanCodeEncoder.kt rename services/opencode/src/{main => commonMain}/kotlin/com/getcode/opencode/model/core/UUID.kt (100%) rename services/opencode/src/{main => commonMain}/kotlin/com/getcode/opencode/model/core/errors/Errors.kt (100%) rename services/opencode/src/{main => commonMain}/kotlin/com/getcode/opencode/model/core/errors/SodiumError.kt (100%) rename services/opencode/src/{main => commonMain}/kotlin/com/getcode/opencode/model/core/errors/ValidationException.kt (100%) rename services/opencode/src/{main => commonMain}/kotlin/com/getcode/opencode/model/financial/Currency.kt (100%) rename services/opencode/src/{main => commonMain}/kotlin/com/getcode/opencode/model/financial/CurrencyCode.kt (100%) rename services/opencode/src/{main => commonMain}/kotlin/com/getcode/opencode/model/financial/Distribution.kt (100%) rename services/opencode/src/{main => commonMain}/kotlin/com/getcode/opencode/model/financial/Fee.kt (100%) rename services/opencode/src/{main => commonMain}/kotlin/com/getcode/opencode/model/financial/Fiat.kt (99%) rename services/opencode/src/{main => commonMain}/kotlin/com/getcode/opencode/model/financial/HistoricalMintData.kt (100%) rename services/opencode/src/{main => commonMain}/kotlin/com/getcode/opencode/model/financial/LaunchpadReserveStateSnapshot.kt (100%) rename services/opencode/src/{main => commonMain}/kotlin/com/getcode/opencode/model/financial/LaunchpadSellFee.kt (100%) rename services/opencode/src/{main => commonMain}/kotlin/com/getcode/opencode/model/financial/Limits.kt (100%) rename services/opencode/src/{main => commonMain}/kotlin/com/getcode/opencode/model/financial/LocalFiat.kt (98%) rename services/opencode/src/{main => commonMain}/kotlin/com/getcode/opencode/model/financial/MintMetadata.kt (98%) rename services/opencode/src/{main => commonMain}/kotlin/com/getcode/opencode/model/financial/MintStreamingData.kt (100%) rename services/opencode/src/{main => commonMain}/kotlin/com/getcode/opencode/model/financial/OwnerBalance.kt (100%) rename services/opencode/src/{main => commonMain}/kotlin/com/getcode/opencode/model/financial/Rate.kt (83%) rename services/opencode/src/{main => commonMain}/kotlin/com/getcode/opencode/model/financial/RegionCode.kt (100%) rename services/opencode/src/{main => commonMain}/kotlin/com/getcode/opencode/model/financial/TokenCreateRequest.kt (100%) rename services/opencode/src/{main => commonMain}/kotlin/com/getcode/opencode/model/financial/TokenResult.kt (100%) rename services/opencode/src/{main => commonMain}/kotlin/com/getcode/opencode/model/financial/TokenUpdateRequest.kt (100%) rename services/opencode/src/{main => commonMain}/kotlin/com/getcode/opencode/model/messaging/KeepAliveRequest.kt (83%) rename services/opencode/src/{main => commonMain}/kotlin/com/getcode/opencode/model/messaging/Message.kt (100%) rename services/opencode/src/{main => commonMain}/kotlin/com/getcode/opencode/model/moderation/ModerationAttestation.kt (100%) rename services/opencode/src/{main => commonMain}/kotlin/com/getcode/opencode/model/transactions/AddressLookupTable.kt (100%) rename services/opencode/src/{main => commonMain}/kotlin/com/getcode/opencode/model/transactions/ExchangeData.kt (100%) rename services/opencode/src/{main => commonMain}/kotlin/com/getcode/opencode/model/transactions/FundSwapPool.kt (100%) rename services/opencode/src/{main => commonMain}/kotlin/com/getcode/opencode/model/transactions/LiquidityPool.kt (100%) rename services/opencode/src/{main => commonMain}/kotlin/com/getcode/opencode/model/transactions/StartSwapServerParameters.kt (100%) rename services/opencode/src/{main => commonMain}/kotlin/com/getcode/opencode/model/transactions/StatefulSwapRequest.kt (98%) rename services/opencode/src/{main => commonMain}/kotlin/com/getcode/opencode/model/transactions/StatefulSwapResponseServerParameters.kt (100%) rename services/opencode/src/{main => commonMain}/kotlin/com/getcode/opencode/model/transactions/StatefulSwapResult.kt (100%) rename services/opencode/src/{main => commonMain}/kotlin/com/getcode/opencode/model/transactions/StatelessSwapRequest.kt (100%) rename services/opencode/src/{main => commonMain}/kotlin/com/getcode/opencode/model/transactions/StatelessSwapResult.kt (100%) rename services/opencode/src/{main => commonMain}/kotlin/com/getcode/opencode/model/transactions/StatelessSwapServerParameters.kt (100%) rename services/opencode/src/{main => commonMain}/kotlin/com/getcode/opencode/model/transactions/SwapFundingSource.kt (100%) rename services/opencode/src/{main => commonMain}/kotlin/com/getcode/opencode/model/transactions/SwapMetadata.kt (100%) rename services/opencode/src/{main => commonMain}/kotlin/com/getcode/opencode/model/transactions/SwapRoute.kt (100%) rename services/opencode/src/{main => commonMain}/kotlin/com/getcode/opencode/model/transactions/TransactionMetadata.kt (100%) rename services/opencode/src/{main => commonMain}/kotlin/com/getcode/opencode/model/transactions/TransferRequest.kt (100%) rename services/opencode/src/{main => commonMain}/kotlin/com/getcode/opencode/model/transactions/WithdrawalAvailability.kt (100%) rename services/opencode/src/{main => commonMain}/kotlin/com/getcode/opencode/model/ui/BillCustomization.kt (95%) rename services/opencode/src/{main => commonMain}/kotlin/com/getcode/opencode/model/ui/DiscoverCategory.kt (100%) rename services/opencode/src/{main => commonMain}/kotlin/com/getcode/opencode/model/ui/WindowedRange.kt (100%) rename services/opencode/src/{main => commonMain}/kotlin/com/getcode/opencode/providers/SessionListener.kt (100%) rename services/opencode/src/{main => commonMain}/kotlin/com/getcode/opencode/providers/TokenMetadataProvider.kt (100%) rename services/opencode/src/{main => commonMain}/kotlin/com/getcode/opencode/repositories/AccountRepository.kt (95%) rename services/opencode/src/{main => commonMain}/kotlin/com/getcode/opencode/repositories/BalanceRepository.kt (100%) rename services/opencode/src/{main => commonMain}/kotlin/com/getcode/opencode/repositories/CurrencyRepository.kt (97%) rename services/opencode/src/{main => commonMain}/kotlin/com/getcode/opencode/repositories/EventRepository.kt (100%) rename services/opencode/src/{main => commonMain}/kotlin/com/getcode/opencode/repositories/MessagingRepository.kt (96%) rename services/opencode/src/{main => commonMain}/kotlin/com/getcode/opencode/repositories/SwapRepository.kt (94%) rename services/opencode/src/{main => commonMain}/kotlin/com/getcode/opencode/repositories/TransactionRepository.kt (98%) rename services/opencode/src/{main => commonMain}/kotlin/com/getcode/opencode/solana/Instruction.kt (100%) rename services/opencode/src/{main => commonMain}/kotlin/com/getcode/opencode/solana/LegacyMessage.kt (100%) rename services/opencode/src/{main => commonMain}/kotlin/com/getcode/opencode/solana/Message.kt (100%) rename services/opencode/src/{main => commonMain}/kotlin/com/getcode/opencode/solana/MessageHeader.kt (100%) rename services/opencode/src/{main => commonMain}/kotlin/com/getcode/opencode/solana/SolanaTransaction.kt (99%) rename services/opencode/src/{main => commonMain}/kotlin/com/getcode/opencode/solana/TransactionBuilder.kt (100%) rename services/opencode/src/{main => commonMain}/kotlin/com/getcode/opencode/solana/VersionedMessage.kt (100%) rename services/opencode/src/{main => commonMain}/kotlin/com/getcode/opencode/solana/intents/ActionGroup.kt (100%) rename services/opencode/src/{main => commonMain}/kotlin/com/getcode/opencode/solana/intents/IntentType.kt (98%) rename services/opencode/src/{main => commonMain}/kotlin/com/getcode/opencode/solana/intents/ServerParameter.kt (100%) rename services/opencode/src/{main => commonMain}/kotlin/com/getcode/opencode/solana/intents/actions/ActionType.kt (98%) rename services/opencode/src/{main => commonMain}/kotlin/com/getcode/opencode/solana/keys/ProgramDerivedAccount.kt (100%) rename services/opencode/src/{main => commonMain}/kotlin/com/getcode/opencode/solana/keys/TimelockVmSwapAccounts.kt (100%) rename services/opencode/src/{main => commonMain}/kotlin/com/getcode/opencode/solana/swap/CoinbaseStablecoinSwapperInstructions.kt (100%) rename services/opencode/src/{main => commonMain}/kotlin/com/getcode/opencode/solana/swap/CrossCurrencyExistingSwapInstructions.kt (100%) rename services/opencode/src/{main => commonMain}/kotlin/com/getcode/opencode/solana/swap/ExistingCurrencyBuyInstructions.kt (100%) rename services/opencode/src/{main => commonMain}/kotlin/com/getcode/opencode/solana/swap/NewCurrencyBuyInstructions.kt (100%) rename services/opencode/src/{main => commonMain}/kotlin/com/getcode/opencode/solana/swap/SellInstructions.kt (100%) rename services/opencode/src/{main => commonMain}/kotlin/com/getcode/opencode/solana/swap/UsdcDepositInstructions.kt (100%) rename services/opencode/src/{main => commonMain}/kotlin/com/getcode/opencode/solana/swap/UsdcDepositSweepInstructions.kt (100%) rename services/opencode/src/{main => commonMain}/kotlin/com/getcode/opencode/solana/swap/UsdcToUsdfSwapInstructions.kt (100%) rename services/opencode/src/{main => commonMain}/kotlin/com/getcode/opencode/solana/swap/UsdfDepositInstructions.kt (100%) rename services/opencode/src/{main => commonMain}/kotlin/com/getcode/opencode/utils/Double.kt (100%) rename services/opencode/src/{main => commonMain}/kotlin/com/getcode/opencode/utils/Flow.kt (97%) create mode 100644 services/opencode/src/commonMain/kotlin/com/getcode/opencode/utils/KeyPair.kt rename services/opencode/src/{main => commonMain}/kotlin/com/getcode/opencode/utils/Long.kt (100%) rename services/opencode/src/{main => commonMain}/kotlin/com/getcode/opencode/utils/Maps.kt (100%) rename services/opencode/src/{main => commonMain}/kotlin/com/getcode/opencode/utils/Nonce.kt (100%) rename services/opencode/src/{main => commonMain}/kotlin/com/getcode/opencode/utils/PublicKey.kt (85%) rename services/opencode/src/{main => commonMain}/kotlin/com/getcode/opencode/utils/Result.kt (100%) rename services/opencode/src/{main => commonMain}/kotlin/com/getcode/opencode/utils/String.kt (100%) rename services/opencode/src/{main => commonMain}/kotlin/com/getcode/opencode/utils/Throwable.kt (100%) rename services/opencode/src/{main => commonMain}/kotlin/com/getcode/opencode/utils/logging/LoggingClientCall.kt (100%) rename services/opencode/src/{main => commonMain}/kotlin/com/getcode/opencode/utils/logging/LoggingClientCallListener.kt (100%) rename services/opencode/src/{main => commonMain}/kotlin/com/getcode/opencode/utils/logging/LoggingClientInterceptor.kt (100%) create mode 100644 services/opencode/src/jvmMain/kotlin/com/getcode/opencode/internal/platform/ProcessLifecycle.jvm.kt create mode 100644 services/opencode/src/jvmMain/kotlin/com/getcode/opencode/model/core/ScanCodeEncoder.jvm.kt create mode 100644 services/opencode/src/jvmTest/kotlin/com/getcode/opencode/HeadlessBalanceTest.kt delete mode 100644 services/opencode/src/main/kotlin/com/getcode/opencode/internal/network/core/GrpcApi.kt delete mode 100644 services/opencode/src/main/kotlin/com/getcode/opencode/utils/KeyPair.kt diff --git a/apps/flipcash/app/src/main/kotlin/com/flipcash/app/internal/startup/MnemonicCacheInitializer.kt b/apps/flipcash/app/src/main/kotlin/com/flipcash/app/internal/startup/MnemonicCacheInitializer.kt index d5aa7f237f..824fc6a836 100644 --- a/apps/flipcash/app/src/main/kotlin/com/flipcash/app/internal/startup/MnemonicCacheInitializer.kt +++ b/apps/flipcash/app/src/main/kotlin/com/flipcash/app/internal/startup/MnemonicCacheInitializer.kt @@ -6,7 +6,8 @@ import com.getcode.crypt.MnemonicCache class MnemonicCacheInitializer: Initializer { override fun create(context: Context) { - MnemonicCache.init(context) + // Touching the cache loads the BIP39 word list at startup rather than on first use. + MnemonicCache.cachedCode } override fun dependencies(): List?>?> { diff --git a/apps/flipcash/shared/authentication/src/main/kotlin/com/flipcash/app/auth/internal/accounts/AccountProfileFetcher.kt b/apps/flipcash/shared/authentication/src/main/kotlin/com/flipcash/app/auth/internal/accounts/AccountProfileFetcher.kt index cc2021b058..65d997bda1 100644 --- a/apps/flipcash/shared/authentication/src/main/kotlin/com/flipcash/app/auth/internal/accounts/AccountProfileFetcher.kt +++ b/apps/flipcash/shared/authentication/src/main/kotlin/com/flipcash/app/auth/internal/accounts/AccountProfileFetcher.kt @@ -4,7 +4,7 @@ import com.flipcash.services.models.GetUserProfileError import com.flipcash.services.models.ProfileIdentifier import com.flipcash.services.repository.AccountRepository import com.flipcash.services.repository.ProfileRepository -import com.getcode.ed25519.Ed25519.KeyPair +import com.getcode.ed25519kmp.Ed25519.KeyPair import com.getcode.opencode.model.core.ID import javax.inject.Inject diff --git a/apps/flipcash/shared/authentication/src/main/kotlin/com/flipcash/app/auth/internal/credentials/PassphraseCredentialManager.kt b/apps/flipcash/shared/authentication/src/main/kotlin/com/flipcash/app/auth/internal/credentials/PassphraseCredentialManager.kt index bfecc0d7cf..26c2f982d3 100644 --- a/apps/flipcash/shared/authentication/src/main/kotlin/com/flipcash/app/auth/internal/credentials/PassphraseCredentialManager.kt +++ b/apps/flipcash/shared/authentication/src/main/kotlin/com/flipcash/app/auth/internal/credentials/PassphraseCredentialManager.kt @@ -13,7 +13,7 @@ import com.flipcash.app.auth.internal.accounts.AccountStoreMigration import com.flipcash.services.controllers.AccountController import com.flipcash.services.user.AuthState import com.flipcash.services.user.UserManager -import com.getcode.ed25519.Ed25519 +import com.getcode.ed25519kmp.Ed25519 import com.getcode.opencode.model.core.ID import com.getcode.utils.base58 import com.getcode.utils.encodeBase64 diff --git a/apps/flipcash/shared/authentication/src/test/kotlin/com/flipcash/app/auth/internal/accounts/AccountProfileFetcherTest.kt b/apps/flipcash/shared/authentication/src/test/kotlin/com/flipcash/app/auth/internal/accounts/AccountProfileFetcherTest.kt index 8900f70124..7eb7c6d3bd 100644 --- a/apps/flipcash/shared/authentication/src/test/kotlin/com/flipcash/app/auth/internal/accounts/AccountProfileFetcherTest.kt +++ b/apps/flipcash/shared/authentication/src/test/kotlin/com/flipcash/app/auth/internal/accounts/AccountProfileFetcherTest.kt @@ -5,7 +5,7 @@ import com.flipcash.services.models.ProfileIdentifier import com.flipcash.services.models.UserProfile import com.flipcash.services.repository.AccountRepository import com.flipcash.services.repository.ProfileRepository -import com.getcode.ed25519.Ed25519.KeyPair +import com.getcode.ed25519kmp.Ed25519.KeyPair import io.mockk.coEvery import io.mockk.coVerify import io.mockk.mockk diff --git a/apps/flipcash/shared/shareable/src/main/kotlin/com/flipcash/app/shareable/ShareSheetController.kt b/apps/flipcash/shared/shareable/src/main/kotlin/com/flipcash/app/shareable/ShareSheetController.kt index 7827617c05..acb935aefc 100644 --- a/apps/flipcash/shared/shareable/src/main/kotlin/com/flipcash/app/shareable/ShareSheetController.kt +++ b/apps/flipcash/shared/shareable/src/main/kotlin/com/flipcash/app/shareable/ShareSheetController.kt @@ -4,7 +4,7 @@ import androidx.compose.runtime.ProvidableCompositionLocal import androidx.compose.runtime.staticCompositionLocalOf import com.flipcash.app.core.share.TipCodeExport import com.flipcash.app.core.share.TipCodePreview -import com.getcode.ed25519.Ed25519 +import com.getcode.ed25519kmp.Ed25519 import com.getcode.opencode.model.accounts.GiftCardAccount import com.getcode.opencode.model.core.ID import com.getcode.opencode.model.financial.LocalFiat diff --git a/build-logic/convention/src/main/kotlin/KmpAppLibraryConventionPlugin.kt b/build-logic/convention/src/main/kotlin/KmpAppLibraryConventionPlugin.kt index f73a5d2110..30e9766e70 100644 --- a/build-logic/convention/src/main/kotlin/KmpAppLibraryConventionPlugin.kt +++ b/build-logic/convention/src/main/kotlin/KmpAppLibraryConventionPlugin.kt @@ -75,6 +75,9 @@ class KmpAppLibraryConventionPlugin : Plugin { } } minSdk = minSdkVersion + // Hilt's KSP processors emit Java (factories, hilt_aggregated_deps), which the + // KMP Android target only compiles when Java compilation is enabled. + withJava() withHostTestBuilder {}.configure { isReturnDefaultValues = true isIncludeAndroidResources = true diff --git a/libs/datetime/src/androidMain/kotlin/com/getcode/util/DateUtils.kt b/libs/datetime/src/androidMain/kotlin/com/getcode/util/DateUtils.kt index fd9c3eaf55..0e0f863d71 100644 --- a/libs/datetime/src/androidMain/kotlin/com/getcode/util/DateUtils.kt +++ b/libs/datetime/src/androidMain/kotlin/com/getcode/util/DateUtils.kt @@ -50,8 +50,6 @@ object DateUtils { private fun isYesterday(millis: Long) = isToday(millis + DateUtils.DAY_IN_MILLIS) } -fun Long.toInstantFromMillis() = Instant.fromEpochMilliseconds(this) - fun Instant.formatDateRelatively(): String { return com.getcode.util.DateUtils.getDateRelatively(toEpochMilliseconds()) } diff --git a/libs/datetime/src/commonMain/kotlin/com/getcode/util/Instant.kt b/libs/datetime/src/commonMain/kotlin/com/getcode/util/Instant.kt index c966ff01bb..7d56a70cb9 100644 --- a/libs/datetime/src/commonMain/kotlin/com/getcode/util/Instant.kt +++ b/libs/datetime/src/commonMain/kotlin/com/getcode/util/Instant.kt @@ -42,4 +42,6 @@ fun Instant.formatLocalized( } else { format(if12Hour, Locale.US) } -} \ No newline at end of file +} + +fun Long.toInstantFromMillis() = kotlin.time.Instant.fromEpochMilliseconds(this) diff --git a/libs/encryption/ed25519/build.gradle.kts b/libs/encryption/ed25519/build.gradle.kts index 28dac3e0e8..7ec3b4596d 100644 --- a/libs/encryption/ed25519/build.gradle.kts +++ b/libs/encryption/ed25519/build.gradle.kts @@ -1,3 +1,4 @@ +import org.jetbrains.kotlin.gradle.plugin.KotlinPlatformType import org.jetbrains.kotlin.gradle.plugin.mpp.KotlinNativeTarget plugins { @@ -112,10 +113,26 @@ kotlin { } } + // jvmShared: the string-keyed Ed25519 API for both JVM targets (Android and desktop). + @OptIn(org.jetbrains.kotlin.gradle.ExperimentalKotlinGradlePluginApi::class) + applyDefaultHierarchyTemplate { + common { + group("jvmShared") { + withJvm() + withCompilations { it.platformType == KotlinPlatformType.androidJvm } + } + } + } + sourceSets { commonMain { // Ed25519Kmp expect object + KeyPair — no external deps. } + getByName("jvmSharedMain") { + dependencies { + api(project(":libs:parcelable")) + } + } androidMain { dependencies { // Delegate to the JNI module for NDK/CMake compilation. `api` (not diff --git a/libs/encryption/ed25519/src/androidMain/kotlin/com/getcode/ed25519kmp/RandomSeed.android.kt b/libs/encryption/ed25519/src/androidMain/kotlin/com/getcode/ed25519kmp/RandomSeed.android.kt new file mode 100644 index 0000000000..7db1155470 --- /dev/null +++ b/libs/encryption/ed25519/src/androidMain/kotlin/com/getcode/ed25519kmp/RandomSeed.android.kt @@ -0,0 +1,9 @@ +package com.getcode.ed25519kmp + +import com.getcode.ed25519.Ed25519 as JniEd25519 + +internal actual fun randomSeed(size: Int): ByteArray = when (size) { + 16 -> JniEd25519.createSeed16() + 32 -> JniEd25519.createSeed32() + else -> error("Unsupported seed size $size") +} diff --git a/libs/encryption/ed25519/src/jvmMain/kotlin/com/getcode/ed25519kmp/RandomSeed.jvm.kt b/libs/encryption/ed25519/src/jvmMain/kotlin/com/getcode/ed25519kmp/RandomSeed.jvm.kt new file mode 100644 index 0000000000..e763d9088a --- /dev/null +++ b/libs/encryption/ed25519/src/jvmMain/kotlin/com/getcode/ed25519kmp/RandomSeed.jvm.kt @@ -0,0 +1,7 @@ +package com.getcode.ed25519kmp + +import java.security.SecureRandom + +private val random = SecureRandom() + +internal actual fun randomSeed(size: Int): ByteArray = ByteArray(size).also(random::nextBytes) diff --git a/libs/encryption/ed25519/src/jvmSharedMain/kotlin/com/getcode/ed25519kmp/Ed25519.kt b/libs/encryption/ed25519/src/jvmSharedMain/kotlin/com/getcode/ed25519kmp/Ed25519.kt new file mode 100644 index 0000000000..e05c9c31ba --- /dev/null +++ b/libs/encryption/ed25519/src/jvmSharedMain/kotlin/com/getcode/ed25519kmp/Ed25519.kt @@ -0,0 +1,87 @@ +package com.getcode.ed25519kmp + +import com.getcode.libs.parcelable.ManualParcelable +import com.getcode.libs.parcelable.Parcel +import com.getcode.libs.parcelable.parcelableCreator +import java.util.Base64 + +/** + * The string-keyed Ed25519 API the app was written against, shared by Android and desktop. + * + * Mirrors the JNI class `com.getcode.ed25519.Ed25519` member for member, so callers only change + * the import. Key strings keep the JNI's format (unwrapped base64), and a seed made from bytes keeps + * the `Base64.DEFAULT` format the JNI class stored, so serialized seeds and parcels are unchanged. + */ +object Ed25519 { + + fun createKeyPair(): KeyPair = createKeyPair(createSeed32()) + + /** [seed] is base64, as produced by [KeyPair.seed]. */ + fun createKeyPair(seed: String): KeyPair { + val pair = Ed25519Kmp.createKeyPair(decode(seed)) + return KeyPair(encode(pair.publicKey), encode(pair.privateKey), seed) + } + + fun createKeyPair(seed: ByteArray): KeyPair { + val pair = Ed25519Kmp.createKeyPair(seed) + return KeyPair(encode(pair.publicKey), encode(pair.privateKey), encodeDefault(seed)) + } + + fun createSeed16(): ByteArray = randomSeed(16) + + fun createSeed32(): ByteArray = randomSeed(32) + + fun sign(message: ByteArray, keyPair: KeyPair): ByteArray = + Ed25519Kmp.sign(message, keyPair.publicKeyBytes, keyPair.privateKeyBytes) + + fun verify(signature: ByteArray, message: ByteArray, publicKey: ByteArray): Boolean = + Ed25519Kmp.verify(signature, message, publicKey) + + fun onCurve(publicKey: ByteArray): Boolean = Ed25519Kmp.onCurve(publicKey) + + class KeyPair( + val publicKey: String, + val privateKey: String, + val seed: String?, + ) : ManualParcelable { + + val publicKeyBytes: ByteArray get() = decode(publicKey) + + val privateKeyBytes: ByteArray get() = decode(privateKey) + + fun sign(message: ByteArray): ByteArray = Ed25519.sign(message, this) + + fun verify(signature: ByteArray, message: ByteArray): Boolean = + Ed25519.verify(signature, message, publicKeyBytes) + + override fun equals(other: Any?): Boolean = + other is KeyPair && publicKey == other.publicKey && privateKey == other.privateKey + + override fun hashCode(): Int = java.util.Objects.hash(publicKey, privateKey) + + override fun describeContents(): Int = 0 + + override fun writeToParcel(dest: Parcel, flags: Int) { + dest.writeString(publicKey) + dest.writeString(privateKey) + dest.writeString(seed) + } + + companion object { + @JvmField + val CREATOR: Any = parcelableCreator({ arrayOfNulls(it) }) { parcel -> + KeyPair(checkNotNull(parcel.readString()), checkNotNull(parcel.readString()), parcel.readString()) + } + } + } +} + +internal expect fun randomSeed(size: Int): ByteArray + +private fun encode(bytes: ByteArray): String = Base64.getEncoder().encodeToString(bytes) + +// android.util.Base64.DEFAULT: 76-character lines, each ending in "\n". +private fun encodeDefault(bytes: ByteArray): String = + Base64.getMimeEncoder(76, byteArrayOf('\n'.code.toByte())).encodeToString(bytes) + "\n" + +private fun decode(base64: String): ByteArray = Base64.getMimeDecoder().decode(base64) diff --git a/libs/encryption/mnemonic/build.gradle.kts b/libs/encryption/mnemonic/build.gradle.kts index 6752d8968c..812aba854b 100644 --- a/libs/encryption/mnemonic/build.gradle.kts +++ b/libs/encryption/mnemonic/build.gradle.kts @@ -1,3 +1,5 @@ +import org.jetbrains.kotlin.gradle.plugin.KotlinPlatformType + plugins { alias(libs.plugins.flipcash.kmp.library) alias(libs.plugins.flipcash.kmp.test.fixtures) @@ -9,7 +11,18 @@ testFixtures { packageName = "com.getcode.crypt" } +@OptIn(org.jetbrains.kotlin.gradle.ExperimentalKotlinGradlePluginApi::class) kotlin { + // jvmShared: key and phrase types for both JVM targets (Android and desktop). + applyDefaultHierarchyTemplate { + common { + group("jvmShared") { + withJvm() + withCompilations { it.platformType == KotlinPlatformType.androidJvm } + } + } + } + android { namespace = "com.getcode.encryption.mnemonic" withHostTest {} @@ -32,10 +45,14 @@ kotlin { implementation(libs.kotlinx.serialization.json) } } - androidMain { + getByName("jvmSharedMain") { dependencies { // Legacy vendored Base58 codec (fromEntropyB58/getBase58EncodedEntropy). implementation(project(":libs:encryption:base58")) + } + } + androidMain { + dependencies { // Domain.kt uses android.net.Uri. implementation(libs.androidx.core) } diff --git a/libs/encryption/mnemonic/src/androidMain/kotlin/com/getcode/crypt/MnemonicCache.kt b/libs/encryption/mnemonic/src/androidMain/kotlin/com/getcode/crypt/MnemonicCache.kt deleted file mode 100644 index 44b068ffd9..0000000000 --- a/libs/encryption/mnemonic/src/androidMain/kotlin/com/getcode/crypt/MnemonicCache.kt +++ /dev/null @@ -1,15 +0,0 @@ -package com.getcode.crypt - -import android.content.Context - -object MnemonicCache { - val cachedCode: MnemonicCode = MnemonicCode - - fun init(context: Context) { - // MnemonicCode no longer needs Android resources -- the wordlist is a compile-time - // constant (see Bip39EnglishWordList). Kept so MnemonicCacheInitializer's startup - // call still compiles. - } - - val cache = mutableMapOf, String>, ByteArray>() -} diff --git a/libs/encryption/mnemonic/src/androidMain/kotlin/com/getcode/crypt/DerivedKey.kt b/libs/encryption/mnemonic/src/jvmSharedMain/kotlin/com/getcode/crypt/DerivedKey.kt similarity index 95% rename from libs/encryption/mnemonic/src/androidMain/kotlin/com/getcode/crypt/DerivedKey.kt rename to libs/encryption/mnemonic/src/jvmSharedMain/kotlin/com/getcode/crypt/DerivedKey.kt index a4536b5429..fc534ecf42 100644 --- a/libs/encryption/mnemonic/src/androidMain/kotlin/com/getcode/crypt/DerivedKey.kt +++ b/libs/encryption/mnemonic/src/jvmSharedMain/kotlin/com/getcode/crypt/DerivedKey.kt @@ -1,6 +1,6 @@ package com.getcode.crypt -import com.getcode.ed25519.Ed25519 +import com.getcode.ed25519kmp.Ed25519 data class DerivedKey(val path: DerivePath, val keyPair: Ed25519.KeyPair) { diff --git a/libs/encryption/mnemonic/src/jvmSharedMain/kotlin/com/getcode/crypt/MnemonicCache.kt b/libs/encryption/mnemonic/src/jvmSharedMain/kotlin/com/getcode/crypt/MnemonicCache.kt new file mode 100644 index 0000000000..7b152e37f3 --- /dev/null +++ b/libs/encryption/mnemonic/src/jvmSharedMain/kotlin/com/getcode/crypt/MnemonicCache.kt @@ -0,0 +1,7 @@ +package com.getcode.crypt + +object MnemonicCache { + val cachedCode: MnemonicCode = MnemonicCode + + val cache = mutableMapOf, String>, ByteArray>() +} diff --git a/libs/encryption/mnemonic/src/androidMain/kotlin/com/getcode/crypt/MnemonicPhrase.kt b/libs/encryption/mnemonic/src/jvmSharedMain/kotlin/com/getcode/crypt/MnemonicPhrase.kt similarity index 98% rename from libs/encryption/mnemonic/src/androidMain/kotlin/com/getcode/crypt/MnemonicPhrase.kt rename to libs/encryption/mnemonic/src/jvmSharedMain/kotlin/com/getcode/crypt/MnemonicPhrase.kt index c8cd5bd23d..c99013c2a1 100644 --- a/libs/encryption/mnemonic/src/androidMain/kotlin/com/getcode/crypt/MnemonicPhrase.kt +++ b/libs/encryption/mnemonic/src/jvmSharedMain/kotlin/com/getcode/crypt/MnemonicPhrase.kt @@ -1,6 +1,6 @@ package com.getcode.crypt -import com.getcode.ed25519.Ed25519 +import com.getcode.ed25519kmp.Ed25519 import com.getcode.utils.decodeBase64 import com.getcode.utils.encodeBase64 import com.getcode.vendor.Base58 diff --git a/libs/encryption/utils/build.gradle.kts b/libs/encryption/utils/build.gradle.kts index 41a6ca18d0..e8e693884c 100644 --- a/libs/encryption/utils/build.gradle.kts +++ b/libs/encryption/utils/build.gradle.kts @@ -30,11 +30,11 @@ kotlin { getByName("jvmSharedMain") { dependencies { implementation(libs.protobuf.kotlin.lite) + implementation(project(":libs:encryption:ed25519")) } } androidMain { dependencies { - implementation(project(":libs:encryption:ed25519")) implementation(libs.bundles.kotlinx.serialization) implementation(libs.timber) } diff --git a/libs/encryption/utils/src/androidMain/kotlin/com/getcode/utils/Ed25519Extensions.android.kt b/libs/encryption/utils/src/jvmSharedMain/kotlin/com/getcode/utils/Ed25519Extensions.kt similarity index 78% rename from libs/encryption/utils/src/androidMain/kotlin/com/getcode/utils/Ed25519Extensions.android.kt rename to libs/encryption/utils/src/jvmSharedMain/kotlin/com/getcode/utils/Ed25519Extensions.kt index c5edb257bf..fc2be84b77 100644 --- a/libs/encryption/utils/src/androidMain/kotlin/com/getcode/utils/Ed25519Extensions.android.kt +++ b/libs/encryption/utils/src/jvmSharedMain/kotlin/com/getcode/utils/Ed25519Extensions.kt @@ -1,6 +1,6 @@ package com.getcode.utils -import com.getcode.ed25519.Ed25519 +import com.getcode.ed25519kmp.Ed25519 import com.getcode.vendor.Base58 fun Ed25519.KeyPair.getPublicKeyBase58(): String = Base58.encode(publicKeyBytes) diff --git a/libs/logging/src/androidMain/kotlin/com/getcode/utils/PlatformLog.android.kt b/libs/logging/src/androidMain/kotlin/com/getcode/utils/PlatformLog.android.kt index bb9eab709a..2e5b41e2a7 100644 --- a/libs/logging/src/androidMain/kotlin/com/getcode/utils/PlatformLog.android.kt +++ b/libs/logging/src/androidMain/kotlin/com/getcode/utils/PlatformLog.android.kt @@ -14,6 +14,10 @@ internal actual object PlatformLog { actual fun error(throwable: Throwable) { Timber.e(throwable) } + + actual fun error(throwable: Throwable, message: String?) { + Timber.e(throwable, message) + } } internal actual fun isPlatformSqlException(throwable: Throwable): Boolean = throwable is SQLException diff --git a/libs/logging/src/commonMain/kotlin/com/getcode/utils/PlatformLog.kt b/libs/logging/src/commonMain/kotlin/com/getcode/utils/PlatformLog.kt index aa2588a5bf..d92204d232 100644 --- a/libs/logging/src/commonMain/kotlin/com/getcode/utils/PlatformLog.kt +++ b/libs/logging/src/commonMain/kotlin/com/getcode/utils/PlatformLog.kt @@ -16,6 +16,7 @@ object LogPriority { internal expect object PlatformLog { fun log(priority: Int, tag: String?, message: String) fun error(throwable: Throwable) + fun error(throwable: Throwable, message: String?) } /** The platform's `SQLException`, which [ErrorUtils] treats as suppressible. */ @@ -32,3 +33,14 @@ interface LogFileStore { /** Stops writing to the log. Called when [TraceManager] is reset. */ fun close() } + +/** + * Writes straight to the platform log: Timber on Android, standard error on the desktop JVM. + * + * Unlike [trace], it is not gated on [TraceManager] and never reports errors. + */ +object Log { + fun d(message: String) = PlatformLog.log(LogPriority.DEBUG, null, message) + + fun e(throwable: Throwable, message: String?) = PlatformLog.error(throwable, message) +} diff --git a/libs/logging/src/jvmMain/kotlin/com/getcode/utils/PlatformLog.jvm.kt b/libs/logging/src/jvmMain/kotlin/com/getcode/utils/PlatformLog.jvm.kt index f91e3777b3..9ac65d65a6 100644 --- a/libs/logging/src/jvmMain/kotlin/com/getcode/utils/PlatformLog.jvm.kt +++ b/libs/logging/src/jvmMain/kotlin/com/getcode/utils/PlatformLog.jvm.kt @@ -17,6 +17,11 @@ internal actual object PlatformLog { actual fun error(throwable: Throwable) { throwable.printStackTrace() } + + actual fun error(throwable: Throwable, message: String?) { + message?.let { System.err.println("E $it") } + throwable.printStackTrace() + } } internal actual fun isPlatformSqlException(throwable: Throwable): Boolean = throwable is SQLException diff --git a/services/flipcash/src/main/kotlin/com/flipcash/services/controllers/BlobStorageController.kt b/services/flipcash/src/main/kotlin/com/flipcash/services/controllers/BlobStorageController.kt index 804a34410b..a4fdb8cffd 100644 --- a/services/flipcash/src/main/kotlin/com/flipcash/services/controllers/BlobStorageController.kt +++ b/services/flipcash/src/main/kotlin/com/flipcash/services/controllers/BlobStorageController.kt @@ -16,7 +16,7 @@ import com.flipcash.services.models.chat.ChatId import com.flipcash.services.models.blob.UploadReservation import com.flipcash.services.repository.BlobStorageRepository import com.flipcash.services.user.UserManager -import com.getcode.ed25519.Ed25519 +import com.getcode.ed25519kmp.Ed25519 import com.getcode.utils.base58 import kotlinx.coroutines.delay import javax.inject.Inject diff --git a/services/flipcash/src/main/kotlin/com/flipcash/services/extensions/KeyPair.kt b/services/flipcash/src/main/kotlin/com/flipcash/services/extensions/KeyPair.kt index 445a8833e3..446d1e9c70 100644 --- a/services/flipcash/src/main/kotlin/com/flipcash/services/extensions/KeyPair.kt +++ b/services/flipcash/src/main/kotlin/com/flipcash/services/extensions/KeyPair.kt @@ -3,8 +3,8 @@ package com.flipcash.services.extensions import android.util.Base64 import com.flipcash.services.internal.extensions.toPublicKey import com.getcode.crypt.Sha256Hash -import com.getcode.ed25519.Ed25519 -import com.getcode.ed25519.Ed25519.KeyPair +import com.getcode.ed25519kmp.Ed25519 +import com.getcode.ed25519kmp.Ed25519.KeyPair import com.getcode.opencode.model.core.ID import com.getcode.solana.keys.PublicKey import com.getcode.solana.keys.Seed32 diff --git a/services/flipcash/src/main/kotlin/com/flipcash/services/internal/extensions/KeyPair.kt b/services/flipcash/src/main/kotlin/com/flipcash/services/internal/extensions/KeyPair.kt index 727cb06c3f..c48ed2738b 100644 --- a/services/flipcash/src/main/kotlin/com/flipcash/services/internal/extensions/KeyPair.kt +++ b/services/flipcash/src/main/kotlin/com/flipcash/services/internal/extensions/KeyPair.kt @@ -1,6 +1,6 @@ package com.flipcash.services.internal.extensions -import com.getcode.ed25519.Ed25519.KeyPair +import com.getcode.ed25519kmp.Ed25519.KeyPair import com.getcode.solana.keys.PublicKey internal fun KeyPair.asPublicKey(): PublicKey { diff --git a/services/flipcash/src/main/kotlin/com/flipcash/services/internal/network/api/AccountApi.kt b/services/flipcash/src/main/kotlin/com/flipcash/services/internal/network/api/AccountApi.kt index fd6c0b52d6..987d1d8cab 100644 --- a/services/flipcash/src/main/kotlin/com/flipcash/services/internal/network/api/AccountApi.kt +++ b/services/flipcash/src/main/kotlin/com/flipcash/services/internal/network/api/AccountApi.kt @@ -9,7 +9,7 @@ import com.flipcash.services.internal.network.extensions.asPublicKey import com.flipcash.services.internal.network.extensions.asUserId import com.flipcash.services.internal.network.extensions.authenticate import com.flipcash.services.internal.network.extensions.sign -import com.getcode.ed25519.Ed25519.KeyPair +import com.getcode.ed25519kmp.Ed25519.KeyPair import com.getcode.opencode.internal.network.core.GrpcApi import com.getcode.opencode.model.core.ID import com.google.protobuf.Timestamp diff --git a/services/flipcash/src/main/kotlin/com/flipcash/services/internal/network/api/ActivityFeedApi.kt b/services/flipcash/src/main/kotlin/com/flipcash/services/internal/network/api/ActivityFeedApi.kt index 27c4815e4a..92c55c6150 100644 --- a/services/flipcash/src/main/kotlin/com/flipcash/services/internal/network/api/ActivityFeedApi.kt +++ b/services/flipcash/src/main/kotlin/com/flipcash/services/internal/network/api/ActivityFeedApi.kt @@ -10,7 +10,7 @@ import com.flipcash.services.internal.network.extensions.authenticate import com.flipcash.services.internal.network.extensions.toNotificationIds import com.flipcash.services.models.ActivityFeedType import com.flipcash.services.models.QueryOptions -import com.getcode.ed25519.Ed25519.KeyPair +import com.getcode.ed25519kmp.Ed25519.KeyPair import com.getcode.opencode.internal.network.core.GrpcApi import com.getcode.opencode.model.core.ID import dev.bmcreations.protovalidate.orThrow diff --git a/services/flipcash/src/main/kotlin/com/flipcash/services/internal/network/api/BlobStorageApi.kt b/services/flipcash/src/main/kotlin/com/flipcash/services/internal/network/api/BlobStorageApi.kt index 2f4a7f4654..66d4f657a7 100644 --- a/services/flipcash/src/main/kotlin/com/flipcash/services/internal/network/api/BlobStorageApi.kt +++ b/services/flipcash/src/main/kotlin/com/flipcash/services/internal/network/api/BlobStorageApi.kt @@ -12,7 +12,7 @@ import com.flipcash.services.internal.network.extensions.authenticate import com.flipcash.services.models.chat.BlobAccessContext import com.flipcash.services.models.chat.BlobId import com.flipcash.services.models.chat.ChatId -import com.getcode.ed25519.Ed25519 +import com.getcode.ed25519kmp.Ed25519 import com.getcode.opencode.internal.network.core.GrpcApi import com.getcode.utils.toByteString import dev.bmcreations.protovalidate.orThrow diff --git a/services/flipcash/src/main/kotlin/com/flipcash/services/internal/network/api/BlocklistApi.kt b/services/flipcash/src/main/kotlin/com/flipcash/services/internal/network/api/BlocklistApi.kt index 829de957a5..6f53872b87 100644 --- a/services/flipcash/src/main/kotlin/com/flipcash/services/internal/network/api/BlocklistApi.kt +++ b/services/flipcash/src/main/kotlin/com/flipcash/services/internal/network/api/BlocklistApi.kt @@ -8,7 +8,7 @@ import com.flipcash.services.internal.network.extensions.asQueryOptions import com.flipcash.services.internal.network.extensions.asUserId import com.flipcash.services.internal.network.extensions.authenticate import com.flipcash.services.models.QueryOptions -import com.getcode.ed25519.Ed25519.KeyPair +import com.getcode.ed25519kmp.Ed25519.KeyPair import com.getcode.opencode.internal.network.core.GrpcApi import com.getcode.opencode.model.core.ID import dev.bmcreations.protovalidate.orThrow diff --git a/services/flipcash/src/main/kotlin/com/flipcash/services/internal/network/api/ChatApi.kt b/services/flipcash/src/main/kotlin/com/flipcash/services/internal/network/api/ChatApi.kt index 1dbae26170..64c6ddd113 100644 --- a/services/flipcash/src/main/kotlin/com/flipcash/services/internal/network/api/ChatApi.kt +++ b/services/flipcash/src/main/kotlin/com/flipcash/services/internal/network/api/ChatApi.kt @@ -26,7 +26,7 @@ import com.flipcash.services.models.chat.MuteState import com.flipcash.services.models.chat.StartChatParameters import com.flipcash.services.models.chat.ViewMode import com.getcode.utils.toByteString -import com.getcode.ed25519.Ed25519.KeyPair +import com.getcode.ed25519kmp.Ed25519.KeyPair import com.getcode.opencode.model.core.ID import com.getcode.opencode.internal.network.core.GrpcApi import dev.bmcreations.protovalidate.orThrow diff --git a/services/flipcash/src/main/kotlin/com/flipcash/services/internal/network/api/ChatMessagingApi.kt b/services/flipcash/src/main/kotlin/com/flipcash/services/internal/network/api/ChatMessagingApi.kt index 3563dfd296..90837231bc 100644 --- a/services/flipcash/src/main/kotlin/com/flipcash/services/internal/network/api/ChatMessagingApi.kt +++ b/services/flipcash/src/main/kotlin/com/flipcash/services/internal/network/api/ChatMessagingApi.kt @@ -25,7 +25,7 @@ import com.flipcash.services.models.chat.TypingState import com.flipcash.services.models.chat.ViewMode import kotlinx.coroutines.flow.Flow import kotlinx.coroutines.flow.flowOn -import com.getcode.ed25519.Ed25519.KeyPair +import com.getcode.ed25519kmp.Ed25519.KeyPair import com.getcode.opencode.internal.network.core.GrpcApi import dev.bmcreations.protovalidate.orThrow import io.grpc.ManagedChannel diff --git a/services/flipcash/src/main/kotlin/com/flipcash/services/internal/network/api/CommunityApi.kt b/services/flipcash/src/main/kotlin/com/flipcash/services/internal/network/api/CommunityApi.kt index 837140bdce..3537dba74f 100644 --- a/services/flipcash/src/main/kotlin/com/flipcash/services/internal/network/api/CommunityApi.kt +++ b/services/flipcash/src/main/kotlin/com/flipcash/services/internal/network/api/CommunityApi.kt @@ -5,7 +5,7 @@ import com.codeinc.flipcash.gen.community.v1.CommunityGrpcKt import com.codeinc.flipcash.gen.community.v1.validate import com.flipcash.services.internal.annotations.FlipcashManagedChannel import com.flipcash.services.internal.network.extensions.authenticate -import com.getcode.ed25519.Ed25519.KeyPair +import com.getcode.ed25519kmp.Ed25519.KeyPair import com.getcode.opencode.internal.network.core.GrpcApi import com.getcode.solana.keys.Mint import com.getcode.utils.toByteString diff --git a/services/flipcash/src/main/kotlin/com/flipcash/services/internal/network/api/ContactListApi.kt b/services/flipcash/src/main/kotlin/com/flipcash/services/internal/network/api/ContactListApi.kt index 46dfb6272d..84a95cf134 100644 --- a/services/flipcash/src/main/kotlin/com/flipcash/services/internal/network/api/ContactListApi.kt +++ b/services/flipcash/src/main/kotlin/com/flipcash/services/internal/network/api/ContactListApi.kt @@ -7,7 +7,7 @@ import com.flipcash.services.models.ContactMethod import com.flipcash.services.internal.annotations.FlipcashManagedChannel import com.flipcash.services.internal.network.extensions.asHash import com.flipcash.services.internal.network.extensions.authenticate -import com.getcode.ed25519.Ed25519.KeyPair +import com.getcode.ed25519kmp.Ed25519.KeyPair import com.getcode.opencode.internal.network.core.GrpcApi import com.getcode.solana.keys.Checksum import dev.bmcreations.protovalidate.orThrow diff --git a/services/flipcash/src/main/kotlin/com/flipcash/services/internal/network/api/EmailVerificationApi.kt b/services/flipcash/src/main/kotlin/com/flipcash/services/internal/network/api/EmailVerificationApi.kt index e8ca56740d..dc9b764be6 100644 --- a/services/flipcash/src/main/kotlin/com/flipcash/services/internal/network/api/EmailVerificationApi.kt +++ b/services/flipcash/src/main/kotlin/com/flipcash/services/internal/network/api/EmailVerificationApi.kt @@ -7,7 +7,7 @@ import com.codeinc.flipcash.gen.common.v1.Common import com.flipcash.services.internal.annotations.FlipcashManagedChannel import com.flipcash.services.internal.network.extensions.authenticate import com.flipcash.services.models.ContactMethod -import com.getcode.ed25519.Ed25519 +import com.getcode.ed25519kmp.Ed25519 import com.getcode.opencode.internal.network.core.GrpcApi import com.codeinc.flipcash.gen.email.v1.validate import dev.bmcreations.protovalidate.orThrow diff --git a/services/flipcash/src/main/kotlin/com/flipcash/services/internal/network/api/ModerationApi.kt b/services/flipcash/src/main/kotlin/com/flipcash/services/internal/network/api/ModerationApi.kt index d5a28fb07b..9a75bace9a 100644 --- a/services/flipcash/src/main/kotlin/com/flipcash/services/internal/network/api/ModerationApi.kt +++ b/services/flipcash/src/main/kotlin/com/flipcash/services/internal/network/api/ModerationApi.kt @@ -5,7 +5,7 @@ import com.codeinc.flipcash.gen.moderation.v1.ModerationService import com.codeinc.flipcash.gen.moderation.v1.validate import com.flipcash.services.internal.annotations.FlipcashManagedChannel import com.flipcash.services.internal.network.extensions.authenticate -import com.getcode.ed25519.Ed25519 +import com.getcode.ed25519kmp.Ed25519 import com.getcode.opencode.internal.network.core.GrpcApi import com.getcode.utils.toByteString import dev.bmcreations.protovalidate.orThrow diff --git a/services/flipcash/src/main/kotlin/com/flipcash/services/internal/network/api/PhoneVerificationApi.kt b/services/flipcash/src/main/kotlin/com/flipcash/services/internal/network/api/PhoneVerificationApi.kt index 0cf8fc42a3..d97f5ed07a 100644 --- a/services/flipcash/src/main/kotlin/com/flipcash/services/internal/network/api/PhoneVerificationApi.kt +++ b/services/flipcash/src/main/kotlin/com/flipcash/services/internal/network/api/PhoneVerificationApi.kt @@ -7,7 +7,7 @@ import com.codeinc.flipcash.gen.phone.v1.PhoneVerificationService import com.flipcash.services.internal.annotations.FlipcashManagedChannel import com.flipcash.services.internal.network.extensions.authenticate import com.flipcash.services.models.ContactMethod -import com.getcode.ed25519.Ed25519 +import com.getcode.ed25519kmp.Ed25519 import com.getcode.opencode.internal.network.core.GrpcApi import com.codeinc.flipcash.gen.phone.v1.validate import dev.bmcreations.protovalidate.orThrow diff --git a/services/flipcash/src/main/kotlin/com/flipcash/services/internal/network/api/PollApi.kt b/services/flipcash/src/main/kotlin/com/flipcash/services/internal/network/api/PollApi.kt index fa14b13aa5..f75cbc2d87 100644 --- a/services/flipcash/src/main/kotlin/com/flipcash/services/internal/network/api/PollApi.kt +++ b/services/flipcash/src/main/kotlin/com/flipcash/services/internal/network/api/PollApi.kt @@ -8,7 +8,7 @@ import com.flipcash.services.internal.annotations.FlipcashManagedChannel import com.flipcash.services.internal.network.extensions.asChatId import com.flipcash.services.internal.network.extensions.authenticate import com.flipcash.services.models.chat.ChatId -import com.getcode.ed25519.Ed25519 +import com.getcode.ed25519kmp.Ed25519 import com.getcode.opencode.internal.network.core.GrpcApi import dev.bmcreations.protovalidate.orThrow import io.grpc.ManagedChannel diff --git a/services/flipcash/src/main/kotlin/com/flipcash/services/internal/network/api/ProfileApi.kt b/services/flipcash/src/main/kotlin/com/flipcash/services/internal/network/api/ProfileApi.kt index 0da8ac1a53..25be394dea 100644 --- a/services/flipcash/src/main/kotlin/com/flipcash/services/internal/network/api/ProfileApi.kt +++ b/services/flipcash/src/main/kotlin/com/flipcash/services/internal/network/api/ProfileApi.kt @@ -13,7 +13,7 @@ import com.flipcash.services.models.ProfileIdentifier import com.flipcash.services.models.SocialAccountLinkRequest import com.flipcash.services.models.SocialAccountUnlinkRequest import com.flipcash.services.models.chat.BlobId -import com.getcode.ed25519.Ed25519 +import com.getcode.ed25519kmp.Ed25519 import com.getcode.opencode.internal.network.core.GrpcApi import com.getcode.opencode.model.financial.Fiat import com.getcode.utils.toByteString diff --git a/services/flipcash/src/main/kotlin/com/flipcash/services/internal/network/api/PurchaseApi.kt b/services/flipcash/src/main/kotlin/com/flipcash/services/internal/network/api/PurchaseApi.kt index e357917859..a5285af4c8 100644 --- a/services/flipcash/src/main/kotlin/com/flipcash/services/internal/network/api/PurchaseApi.kt +++ b/services/flipcash/src/main/kotlin/com/flipcash/services/internal/network/api/PurchaseApi.kt @@ -8,7 +8,7 @@ import com.flipcash.services.internal.annotations.FlipcashManagedChannel import com.flipcash.services.internal.model.billing.IapMetadata import com.flipcash.services.internal.model.billing.Receipt import com.flipcash.services.internal.network.extensions.authenticate -import com.getcode.ed25519.Ed25519.KeyPair +import com.getcode.ed25519kmp.Ed25519.KeyPair import com.getcode.opencode.internal.network.core.GrpcApi import dev.bmcreations.protovalidate.orThrow import io.grpc.ManagedChannel diff --git a/services/flipcash/src/main/kotlin/com/flipcash/services/internal/network/api/PushApi.kt b/services/flipcash/src/main/kotlin/com/flipcash/services/internal/network/api/PushApi.kt index 3ee2494b5b..ea3dcaa825 100644 --- a/services/flipcash/src/main/kotlin/com/flipcash/services/internal/network/api/PushApi.kt +++ b/services/flipcash/src/main/kotlin/com/flipcash/services/internal/network/api/PushApi.kt @@ -7,7 +7,7 @@ import com.codeinc.flipcash.gen.push.v1.PushService import com.codeinc.flipcash.gen.push.v1.validate import com.flipcash.services.internal.annotations.FlipcashManagedChannel import com.flipcash.services.internal.network.extensions.authenticate -import com.getcode.ed25519.Ed25519.KeyPair +import com.getcode.ed25519kmp.Ed25519.KeyPair import com.getcode.opencode.internal.network.core.GrpcApi import dev.bmcreations.protovalidate.orThrow import io.grpc.Deadline diff --git a/services/flipcash/src/main/kotlin/com/flipcash/services/internal/network/api/ReportingApi.kt b/services/flipcash/src/main/kotlin/com/flipcash/services/internal/network/api/ReportingApi.kt index 1e000b00c2..7e840ce700 100644 --- a/services/flipcash/src/main/kotlin/com/flipcash/services/internal/network/api/ReportingApi.kt +++ b/services/flipcash/src/main/kotlin/com/flipcash/services/internal/network/api/ReportingApi.kt @@ -8,7 +8,7 @@ import com.flipcash.services.internal.network.extensions.asMessageId import com.flipcash.services.internal.network.extensions.asUserId import com.flipcash.services.internal.network.extensions.authenticate import com.flipcash.services.models.ReportTarget -import com.getcode.ed25519.Ed25519.KeyPair +import com.getcode.ed25519kmp.Ed25519.KeyPair import com.getcode.opencode.internal.network.core.GrpcApi import com.getcode.utils.toByteString import dev.bmcreations.protovalidate.orThrow diff --git a/services/flipcash/src/main/kotlin/com/flipcash/services/internal/network/api/ResolverApi.kt b/services/flipcash/src/main/kotlin/com/flipcash/services/internal/network/api/ResolverApi.kt index 36ee7fa64a..cb5a3a173b 100644 --- a/services/flipcash/src/main/kotlin/com/flipcash/services/internal/network/api/ResolverApi.kt +++ b/services/flipcash/src/main/kotlin/com/flipcash/services/internal/network/api/ResolverApi.kt @@ -8,7 +8,7 @@ import com.flipcash.services.internal.annotations.FlipcashManagedChannel import com.flipcash.services.internal.network.extensions.asUserId import com.flipcash.services.internal.network.extensions.authenticate import com.flipcash.services.internal.network.extensions.asUsername -import com.getcode.ed25519.Ed25519.KeyPair +import com.getcode.ed25519kmp.Ed25519.KeyPair import com.getcode.opencode.internal.network.core.GrpcApi import dev.bmcreations.protovalidate.orThrow import io.grpc.ManagedChannel diff --git a/services/flipcash/src/main/kotlin/com/flipcash/services/internal/network/api/SettingsApi.kt b/services/flipcash/src/main/kotlin/com/flipcash/services/internal/network/api/SettingsApi.kt index 13db7db1dc..df32d27e61 100644 --- a/services/flipcash/src/main/kotlin/com/flipcash/services/internal/network/api/SettingsApi.kt +++ b/services/flipcash/src/main/kotlin/com/flipcash/services/internal/network/api/SettingsApi.kt @@ -6,7 +6,7 @@ import com.codeinc.flipcash.gen.settings.v1.SettingsService import com.codeinc.flipcash.gen.settings.v1.validate import com.flipcash.services.internal.annotations.FlipcashManagedChannel import com.flipcash.services.internal.network.extensions.authenticate -import com.getcode.ed25519.Ed25519 +import com.getcode.ed25519kmp.Ed25519 import com.getcode.opencode.internal.network.core.GrpcApi import dev.bmcreations.protovalidate.orThrow import io.grpc.ManagedChannel diff --git a/services/flipcash/src/main/kotlin/com/flipcash/services/internal/network/api/ThirdPartyApi.kt b/services/flipcash/src/main/kotlin/com/flipcash/services/internal/network/api/ThirdPartyApi.kt index 157c7b8a8f..17218c4c4f 100644 --- a/services/flipcash/src/main/kotlin/com/flipcash/services/internal/network/api/ThirdPartyApi.kt +++ b/services/flipcash/src/main/kotlin/com/flipcash/services/internal/network/api/ThirdPartyApi.kt @@ -6,7 +6,7 @@ import com.codeinc.flipcash.gen.thirdparty.v1.validate import com.flipcash.services.internal.annotations.FlipcashManagedChannel import com.flipcash.services.internal.network.extensions.asApiKey import com.flipcash.services.internal.network.extensions.authenticate -import com.getcode.ed25519.Ed25519 +import com.getcode.ed25519kmp.Ed25519 import com.getcode.network.jwt.JwtSecuredEndpoint import com.getcode.opencode.internal.network.core.GrpcApi import dev.bmcreations.protovalidate.orThrow diff --git a/services/flipcash/src/main/kotlin/com/flipcash/services/internal/network/extensions/AuthenticateMessage.kt b/services/flipcash/src/main/kotlin/com/flipcash/services/internal/network/extensions/AuthenticateMessage.kt index 4ac8d6eece..4cb8ad9969 100644 --- a/services/flipcash/src/main/kotlin/com/flipcash/services/internal/network/extensions/AuthenticateMessage.kt +++ b/services/flipcash/src/main/kotlin/com/flipcash/services/internal/network/extensions/AuthenticateMessage.kt @@ -1,7 +1,7 @@ package com.flipcash.services.internal.network.extensions import com.codeinc.flipcash.gen.common.v1.Common -import com.getcode.ed25519.Ed25519 +import com.getcode.ed25519kmp.Ed25519 import com.google.protobuf.GeneratedMessageLite import java.io.ByteArrayOutputStream diff --git a/services/flipcash/src/main/kotlin/com/flipcash/services/internal/network/extensions/LocalToProtobuf.kt b/services/flipcash/src/main/kotlin/com/flipcash/services/internal/network/extensions/LocalToProtobuf.kt index f7a4fd6dc8..27991070c4 100644 --- a/services/flipcash/src/main/kotlin/com/flipcash/services/internal/network/extensions/LocalToProtobuf.kt +++ b/services/flipcash/src/main/kotlin/com/flipcash/services/internal/network/extensions/LocalToProtobuf.kt @@ -18,7 +18,7 @@ import com.flipcash.services.models.chat.MuteState import com.flipcash.services.models.chat.PointerType import com.flipcash.services.models.chat.TypingState import com.flipcash.services.models.chat.ViewMode -import com.getcode.ed25519.Ed25519.KeyPair +import com.getcode.ed25519kmp.Ed25519.KeyPair import com.getcode.network.jwt.ApiProvider import com.getcode.opencode.model.core.ID import com.getcode.opencode.model.financial.Fiat diff --git a/services/flipcash/src/main/kotlin/com/flipcash/services/internal/network/extensions/SignMessage.kt b/services/flipcash/src/main/kotlin/com/flipcash/services/internal/network/extensions/SignMessage.kt index 5a7771f207..ff5f1184e9 100644 --- a/services/flipcash/src/main/kotlin/com/flipcash/services/internal/network/extensions/SignMessage.kt +++ b/services/flipcash/src/main/kotlin/com/flipcash/services/internal/network/extensions/SignMessage.kt @@ -1,7 +1,7 @@ package com.flipcash.services.internal.network.extensions import com.codeinc.flipcash.gen.common.v1.Common -import com.getcode.ed25519.Ed25519 +import com.getcode.ed25519kmp.Ed25519 import com.getcode.solana.keys.PublicKey import com.google.protobuf.GeneratedMessageLite import java.io.ByteArrayOutputStream diff --git a/services/flipcash/src/main/kotlin/com/flipcash/services/internal/network/services/AccountService.kt b/services/flipcash/src/main/kotlin/com/flipcash/services/internal/network/services/AccountService.kt index 31ff0cd3b6..509bb4ac68 100644 --- a/services/flipcash/src/main/kotlin/com/flipcash/services/internal/network/services/AccountService.kt +++ b/services/flipcash/src/main/kotlin/com/flipcash/services/internal/network/services/AccountService.kt @@ -6,7 +6,7 @@ import com.getcode.opencode.internal.network.extensions.foldWithSuppression import com.flipcash.services.models.GetUserFlagsError import com.flipcash.services.models.LoginError import com.flipcash.services.models.RegisterError -import com.getcode.ed25519.Ed25519.KeyPair +import com.getcode.ed25519kmp.Ed25519.KeyPair import com.getcode.opencode.model.core.ID import javax.inject.Inject import com.codeinc.flipcash.gen.account.v1.FlipcashAccountService as RpcAccountService diff --git a/services/flipcash/src/main/kotlin/com/flipcash/services/internal/network/services/ActivityFeedService.kt b/services/flipcash/src/main/kotlin/com/flipcash/services/internal/network/services/ActivityFeedService.kt index 0760eae2be..dc22d083f7 100644 --- a/services/flipcash/src/main/kotlin/com/flipcash/services/internal/network/services/ActivityFeedService.kt +++ b/services/flipcash/src/main/kotlin/com/flipcash/services/internal/network/services/ActivityFeedService.kt @@ -8,7 +8,7 @@ import com.getcode.opencode.internal.network.extensions.foldWithSuppression import com.flipcash.services.models.ActivityFeedType import com.flipcash.services.models.GetActivityFeedMessagesError import com.flipcash.services.models.QueryOptions -import com.getcode.ed25519.Ed25519.KeyPair +import com.getcode.ed25519kmp.Ed25519.KeyPair import com.getcode.opencode.model.core.ID import javax.inject.Inject diff --git a/services/flipcash/src/main/kotlin/com/flipcash/services/internal/network/services/BlobStorageService.kt b/services/flipcash/src/main/kotlin/com/flipcash/services/internal/network/services/BlobStorageService.kt index cdb154b747..c5bbb738fb 100644 --- a/services/flipcash/src/main/kotlin/com/flipcash/services/internal/network/services/BlobStorageService.kt +++ b/services/flipcash/src/main/kotlin/com/flipcash/services/internal/network/services/BlobStorageService.kt @@ -17,7 +17,7 @@ import com.flipcash.services.models.chat.BlobId import com.flipcash.services.models.chat.BlobState import com.flipcash.services.models.chat.BlobStatus import com.flipcash.services.models.chat.ChatId -import com.getcode.ed25519.Ed25519 +import com.getcode.ed25519kmp.Ed25519 import com.getcode.opencode.internal.network.extensions.foldWithSuppression import com.getcode.opencode.utils.toValidationOrElse import javax.inject.Inject diff --git a/services/flipcash/src/main/kotlin/com/flipcash/services/internal/network/services/BlocklistService.kt b/services/flipcash/src/main/kotlin/com/flipcash/services/internal/network/services/BlocklistService.kt index 8ecf02657f..2ad5ab4ea7 100644 --- a/services/flipcash/src/main/kotlin/com/flipcash/services/internal/network/services/BlocklistService.kt +++ b/services/flipcash/src/main/kotlin/com/flipcash/services/internal/network/services/BlocklistService.kt @@ -7,7 +7,7 @@ import com.flipcash.services.models.GetBlocklistError import com.flipcash.services.models.IsBlockedError import com.flipcash.services.models.QueryOptions import com.flipcash.services.models.UnblockUserError -import com.getcode.ed25519.Ed25519.KeyPair +import com.getcode.ed25519kmp.Ed25519.KeyPair import com.getcode.opencode.internal.network.extensions.foldWithSuppression import com.getcode.opencode.model.core.ID import com.getcode.opencode.utils.toValidationOrElse diff --git a/services/flipcash/src/main/kotlin/com/flipcash/services/internal/network/services/ChatMessagingService.kt b/services/flipcash/src/main/kotlin/com/flipcash/services/internal/network/services/ChatMessagingService.kt index 4b331bd4f1..b275c397fc 100644 --- a/services/flipcash/src/main/kotlin/com/flipcash/services/internal/network/services/ChatMessagingService.kt +++ b/services/flipcash/src/main/kotlin/com/flipcash/services/internal/network/services/ChatMessagingService.kt @@ -32,7 +32,7 @@ import com.flipcash.services.models.chat.ReactionSummary import com.flipcash.services.models.chat.Reactor import com.flipcash.services.models.chat.TypingState import com.flipcash.services.models.chat.ViewMode -import com.getcode.ed25519.Ed25519.KeyPair +import com.getcode.ed25519kmp.Ed25519.KeyPair import com.getcode.opencode.internal.network.extensions.foldWithSuppression import com.getcode.opencode.utils.toValidationOrElse import kotlinx.coroutines.flow.Flow diff --git a/services/flipcash/src/main/kotlin/com/flipcash/services/internal/network/services/ChatService.kt b/services/flipcash/src/main/kotlin/com/flipcash/services/internal/network/services/ChatService.kt index 77b514b9e1..c018912006 100644 --- a/services/flipcash/src/main/kotlin/com/flipcash/services/internal/network/services/ChatService.kt +++ b/services/flipcash/src/main/kotlin/com/flipcash/services/internal/network/services/ChatService.kt @@ -34,7 +34,7 @@ import com.flipcash.services.models.chat.MuteState import com.flipcash.services.models.chat.StartChatParameters import com.flipcash.services.models.chat.ChatType import com.flipcash.services.models.chat.ViewMode -import com.getcode.ed25519.Ed25519.KeyPair +import com.getcode.ed25519kmp.Ed25519.KeyPair import com.getcode.opencode.internal.network.extensions.foldWithSuppression import com.getcode.opencode.model.core.ID import com.getcode.opencode.utils.toValidationOrElse diff --git a/services/flipcash/src/main/kotlin/com/flipcash/services/internal/network/services/CommunityService.kt b/services/flipcash/src/main/kotlin/com/flipcash/services/internal/network/services/CommunityService.kt index 734835b67b..e435bab7f0 100644 --- a/services/flipcash/src/main/kotlin/com/flipcash/services/internal/network/services/CommunityService.kt +++ b/services/flipcash/src/main/kotlin/com/flipcash/services/internal/network/services/CommunityService.kt @@ -2,7 +2,7 @@ package com.flipcash.services.internal.network.services import com.flipcash.services.internal.network.api.CommunityApi import com.flipcash.services.models.GetCommunityError -import com.getcode.ed25519.Ed25519.KeyPair +import com.getcode.ed25519kmp.Ed25519.KeyPair import com.getcode.opencode.internal.network.extensions.foldWithSuppression import com.getcode.opencode.utils.toValidationOrElse import com.getcode.solana.keys.Mint diff --git a/services/flipcash/src/main/kotlin/com/flipcash/services/internal/network/services/ContactListService.kt b/services/flipcash/src/main/kotlin/com/flipcash/services/internal/network/services/ContactListService.kt index eb531ef5cf..f557a79186 100644 --- a/services/flipcash/src/main/kotlin/com/flipcash/services/internal/network/services/ContactListService.kt +++ b/services/flipcash/src/main/kotlin/com/flipcash/services/internal/network/services/ContactListService.kt @@ -7,7 +7,7 @@ import com.flipcash.services.models.CheckSyncError import com.flipcash.services.models.DeltaUploadError import com.flipcash.services.models.FullUploadError import com.flipcash.services.models.GetContactsError -import com.getcode.ed25519.Ed25519.KeyPair +import com.getcode.ed25519kmp.Ed25519.KeyPair import com.getcode.opencode.internal.network.extensions.foldWithSuppression import com.getcode.opencode.utils.toValidationOrElse import com.getcode.solana.keys.Checksum diff --git a/services/flipcash/src/main/kotlin/com/flipcash/services/internal/network/services/EmailVerificationService.kt b/services/flipcash/src/main/kotlin/com/flipcash/services/internal/network/services/EmailVerificationService.kt index 662a69ee25..68612a47c8 100644 --- a/services/flipcash/src/main/kotlin/com/flipcash/services/internal/network/services/EmailVerificationService.kt +++ b/services/flipcash/src/main/kotlin/com/flipcash/services/internal/network/services/EmailVerificationService.kt @@ -4,7 +4,7 @@ import com.flipcash.services.internal.network.api.EmailVerificationApi import com.getcode.opencode.utils.toValidationOrElse import com.flipcash.services.models.ContactMethod import com.flipcash.services.models.EmailVerificationError -import com.getcode.ed25519.Ed25519 +import com.getcode.ed25519kmp.Ed25519 import com.getcode.opencode.internal.network.extensions.foldWithSuppression import javax.inject.Inject import com.codeinc.flipcash.gen.email.v1.EmailVerificationService as RpcEmailService diff --git a/services/flipcash/src/main/kotlin/com/flipcash/services/internal/network/services/EventStreamingService.kt b/services/flipcash/src/main/kotlin/com/flipcash/services/internal/network/services/EventStreamingService.kt index 6147f3a773..5c12725f8e 100644 --- a/services/flipcash/src/main/kotlin/com/flipcash/services/internal/network/services/EventStreamingService.kt +++ b/services/flipcash/src/main/kotlin/com/flipcash/services/internal/network/services/EventStreamingService.kt @@ -9,7 +9,7 @@ import com.flipcash.services.internal.network.extensions.toChatUpdate import com.flipcash.services.models.StreamEventsError import com.flipcash.services.models.chat.BlobUpdate import com.flipcash.services.models.chat.ChatUpdate -import com.getcode.ed25519.Ed25519.KeyPair +import com.getcode.ed25519kmp.Ed25519.KeyPair import com.getcode.opencode.internal.bidi.BidirectionalStreamReference import com.getcode.opencode.internal.bidi.openBidirectionalStream import com.getcode.utils.ClockSource diff --git a/services/flipcash/src/main/kotlin/com/flipcash/services/internal/network/services/ModerationService.kt b/services/flipcash/src/main/kotlin/com/flipcash/services/internal/network/services/ModerationService.kt index ad53cba74e..542e804718 100644 --- a/services/flipcash/src/main/kotlin/com/flipcash/services/internal/network/services/ModerationService.kt +++ b/services/flipcash/src/main/kotlin/com/flipcash/services/internal/network/services/ModerationService.kt @@ -5,7 +5,7 @@ import com.flipcash.services.internal.network.api.ModerationApi import com.getcode.opencode.utils.toValidationOrElse import com.flipcash.services.models.ImageModerationError import com.flipcash.services.models.TextModerationError -import com.getcode.ed25519.Ed25519 +import com.getcode.ed25519kmp.Ed25519 import com.getcode.opencode.internal.network.extensions.foldWithSuppression import javax.inject.Inject diff --git a/services/flipcash/src/main/kotlin/com/flipcash/services/internal/network/services/PhoneVerificationService.kt b/services/flipcash/src/main/kotlin/com/flipcash/services/internal/network/services/PhoneVerificationService.kt index 1f91754338..25126929bb 100644 --- a/services/flipcash/src/main/kotlin/com/flipcash/services/internal/network/services/PhoneVerificationService.kt +++ b/services/flipcash/src/main/kotlin/com/flipcash/services/internal/network/services/PhoneVerificationService.kt @@ -5,7 +5,7 @@ import com.getcode.opencode.utils.toValidationOrElse import com.flipcash.services.models.ContactMethod import com.flipcash.services.models.LinkForPaymentError import com.flipcash.services.models.PhoneVerificationError -import com.getcode.ed25519.Ed25519 +import com.getcode.ed25519kmp.Ed25519 import com.getcode.opencode.internal.network.extensions.foldWithSuppression import javax.inject.Inject import com.codeinc.flipcash.gen.phone.v1.PhoneVerificationService as RpcPhoneService diff --git a/services/flipcash/src/main/kotlin/com/flipcash/services/internal/network/services/PollService.kt b/services/flipcash/src/main/kotlin/com/flipcash/services/internal/network/services/PollService.kt index 153369ada4..dd6c93282e 100644 --- a/services/flipcash/src/main/kotlin/com/flipcash/services/internal/network/services/PollService.kt +++ b/services/flipcash/src/main/kotlin/com/flipcash/services/internal/network/services/PollService.kt @@ -9,7 +9,7 @@ import com.flipcash.services.models.GetPollError import com.flipcash.services.models.GetPollsError import com.flipcash.services.models.VoteError import com.flipcash.services.models.chat.ChatId -import com.getcode.ed25519.Ed25519 +import com.getcode.ed25519kmp.Ed25519 import com.getcode.opencode.internal.network.extensions.foldWithSuppression import com.getcode.opencode.utils.toValidationOrElse import javax.inject.Inject diff --git a/services/flipcash/src/main/kotlin/com/flipcash/services/internal/network/services/ProfileService.kt b/services/flipcash/src/main/kotlin/com/flipcash/services/internal/network/services/ProfileService.kt index 8c4ab55269..7c607e07dd 100644 --- a/services/flipcash/src/main/kotlin/com/flipcash/services/internal/network/services/ProfileService.kt +++ b/services/flipcash/src/main/kotlin/com/flipcash/services/internal/network/services/ProfileService.kt @@ -21,7 +21,7 @@ import com.flipcash.services.models.UpdateTipCardError import com.flipcash.services.models.chat.BlobId import com.flipcash.services.models.chat.MediaItem import com.flipcash.services.internal.network.extensions.toMediaItem -import com.getcode.ed25519.Ed25519 +import com.getcode.ed25519kmp.Ed25519 import com.getcode.opencode.internal.network.extensions.foldWithSuppression import com.getcode.opencode.model.financial.Fiat import javax.inject.Inject diff --git a/services/flipcash/src/main/kotlin/com/flipcash/services/internal/network/services/PurchaseService.kt b/services/flipcash/src/main/kotlin/com/flipcash/services/internal/network/services/PurchaseService.kt index 1cded8a70e..ff831d66e2 100644 --- a/services/flipcash/src/main/kotlin/com/flipcash/services/internal/network/services/PurchaseService.kt +++ b/services/flipcash/src/main/kotlin/com/flipcash/services/internal/network/services/PurchaseService.kt @@ -7,7 +7,7 @@ import com.flipcash.services.internal.network.api.PurchaseApi import com.getcode.opencode.utils.toValidationOrElse import com.getcode.opencode.internal.network.extensions.foldWithSuppression import com.flipcash.services.models.PurchaseAckError -import com.getcode.ed25519.Ed25519.KeyPair +import com.getcode.ed25519kmp.Ed25519.KeyPair import javax.inject.Inject internal class PurchaseService @Inject constructor( diff --git a/services/flipcash/src/main/kotlin/com/flipcash/services/internal/network/services/PushService.kt b/services/flipcash/src/main/kotlin/com/flipcash/services/internal/network/services/PushService.kt index acefecced7..df99f1137b 100644 --- a/services/flipcash/src/main/kotlin/com/flipcash/services/internal/network/services/PushService.kt +++ b/services/flipcash/src/main/kotlin/com/flipcash/services/internal/network/services/PushService.kt @@ -5,7 +5,7 @@ import com.getcode.opencode.utils.toValidationOrElse import com.getcode.opencode.internal.network.extensions.foldWithSuppression import com.flipcash.services.models.AddTokenError import com.flipcash.services.models.DeleteTokenError -import com.getcode.ed25519.Ed25519.KeyPair +import com.getcode.ed25519kmp.Ed25519.KeyPair import javax.inject.Inject import com.codeinc.flipcash.gen.push.v1.PushService as RpcPushService diff --git a/services/flipcash/src/main/kotlin/com/flipcash/services/internal/network/services/ReportingService.kt b/services/flipcash/src/main/kotlin/com/flipcash/services/internal/network/services/ReportingService.kt index 2c175aa065..e39c90c848 100644 --- a/services/flipcash/src/main/kotlin/com/flipcash/services/internal/network/services/ReportingService.kt +++ b/services/flipcash/src/main/kotlin/com/flipcash/services/internal/network/services/ReportingService.kt @@ -3,7 +3,7 @@ package com.flipcash.services.internal.network.services import com.flipcash.services.internal.network.api.ReportingApi import com.flipcash.services.models.ReportError import com.flipcash.services.models.ReportTarget -import com.getcode.ed25519.Ed25519.KeyPair +import com.getcode.ed25519kmp.Ed25519.KeyPair import com.getcode.opencode.internal.network.extensions.foldWithSuppression import com.getcode.opencode.utils.toValidationOrElse import javax.inject.Inject diff --git a/services/flipcash/src/main/kotlin/com/flipcash/services/internal/network/services/ResolverService.kt b/services/flipcash/src/main/kotlin/com/flipcash/services/internal/network/services/ResolverService.kt index 6b108116e8..25dec988be 100644 --- a/services/flipcash/src/main/kotlin/com/flipcash/services/internal/network/services/ResolverService.kt +++ b/services/flipcash/src/main/kotlin/com/flipcash/services/internal/network/services/ResolverService.kt @@ -4,7 +4,7 @@ import com.flipcash.services.internal.network.api.ResolverApi import com.flipcash.services.internal.network.extensions.toPublicKey import com.flipcash.services.models.ResolveContactError import com.flipcash.services.models.ResolveIdentifier -import com.getcode.ed25519.Ed25519.KeyPair +import com.getcode.ed25519kmp.Ed25519.KeyPair import com.getcode.opencode.internal.network.extensions.foldWithSuppression import com.getcode.opencode.utils.toValidationOrElse import com.getcode.solana.keys.PublicKey diff --git a/services/flipcash/src/main/kotlin/com/flipcash/services/internal/network/services/SettingsService.kt b/services/flipcash/src/main/kotlin/com/flipcash/services/internal/network/services/SettingsService.kt index bc1aef9cc0..d1a63aa1bc 100644 --- a/services/flipcash/src/main/kotlin/com/flipcash/services/internal/network/services/SettingsService.kt +++ b/services/flipcash/src/main/kotlin/com/flipcash/services/internal/network/services/SettingsService.kt @@ -4,7 +4,7 @@ import com.codeinc.flipcash.gen.settings.v1.SettingsService import com.flipcash.services.internal.network.api.SettingsApi import com.getcode.opencode.utils.toValidationOrElse import com.flipcash.services.models.UpdateSettingsError -import com.getcode.ed25519.Ed25519 +import com.getcode.ed25519kmp.Ed25519 import com.getcode.opencode.internal.network.extensions.foldWithSuppression import javax.inject.Inject diff --git a/services/flipcash/src/main/kotlin/com/flipcash/services/internal/network/services/ThirdPartyService.kt b/services/flipcash/src/main/kotlin/com/flipcash/services/internal/network/services/ThirdPartyService.kt index 949abe7613..58613e8594 100644 --- a/services/flipcash/src/main/kotlin/com/flipcash/services/internal/network/services/ThirdPartyService.kt +++ b/services/flipcash/src/main/kotlin/com/flipcash/services/internal/network/services/ThirdPartyService.kt @@ -5,7 +5,7 @@ import com.flipcash.services.internal.network.api.ThirdPartyApi import com.getcode.opencode.utils.toValidationOrElse import com.flipcash.services.models.GetJwtError import com.flipcash.services.models.Jwt -import com.getcode.ed25519.Ed25519 +import com.getcode.ed25519kmp.Ed25519 import com.getcode.network.jwt.JwtSecuredEndpoint import com.getcode.opencode.internal.network.extensions.foldWithSuppression import javax.inject.Inject diff --git a/services/flipcash/src/main/kotlin/com/flipcash/services/internal/repositories/InternalAccountRepository.kt b/services/flipcash/src/main/kotlin/com/flipcash/services/internal/repositories/InternalAccountRepository.kt index 1fc023cd1b..aa0cddf95f 100644 --- a/services/flipcash/src/main/kotlin/com/flipcash/services/internal/repositories/InternalAccountRepository.kt +++ b/services/flipcash/src/main/kotlin/com/flipcash/services/internal/repositories/InternalAccountRepository.kt @@ -4,7 +4,7 @@ import com.flipcash.services.internal.domain.UserFlagsMapper import com.flipcash.services.models.UserFlags import com.flipcash.services.internal.network.services.AccountService import com.flipcash.services.repository.AccountRepository -import com.getcode.ed25519.Ed25519 +import com.getcode.ed25519kmp.Ed25519 import com.getcode.opencode.model.core.ID import com.getcode.utils.ErrorUtils diff --git a/services/flipcash/src/main/kotlin/com/flipcash/services/internal/repositories/InternalActivityFeedRepository.kt b/services/flipcash/src/main/kotlin/com/flipcash/services/internal/repositories/InternalActivityFeedRepository.kt index 462960041b..01c7c2182c 100644 --- a/services/flipcash/src/main/kotlin/com/flipcash/services/internal/repositories/InternalActivityFeedRepository.kt +++ b/services/flipcash/src/main/kotlin/com/flipcash/services/internal/repositories/InternalActivityFeedRepository.kt @@ -6,7 +6,7 @@ import com.flipcash.services.models.ActivityFeedNotification import com.flipcash.services.models.ActivityFeedType import com.flipcash.services.models.QueryOptions import com.flipcash.services.repository.ActivityFeedRepository -import com.getcode.ed25519.Ed25519 +import com.getcode.ed25519kmp.Ed25519 import com.getcode.opencode.model.core.ID import com.getcode.utils.ErrorUtils diff --git a/services/flipcash/src/main/kotlin/com/flipcash/services/internal/repositories/InternalBlobStorageRepository.kt b/services/flipcash/src/main/kotlin/com/flipcash/services/internal/repositories/InternalBlobStorageRepository.kt index 12333c5b2c..e53231a493 100644 --- a/services/flipcash/src/main/kotlin/com/flipcash/services/internal/repositories/InternalBlobStorageRepository.kt +++ b/services/flipcash/src/main/kotlin/com/flipcash/services/internal/repositories/InternalBlobStorageRepository.kt @@ -9,7 +9,7 @@ import com.flipcash.services.models.chat.BlobState import com.flipcash.services.models.chat.BlobStatus import com.flipcash.services.models.chat.ChatId import com.flipcash.services.repository.BlobStorageRepository -import com.getcode.ed25519.Ed25519 +import com.getcode.ed25519kmp.Ed25519 import com.getcode.utils.ErrorUtils internal class InternalBlobStorageRepository( diff --git a/services/flipcash/src/main/kotlin/com/flipcash/services/internal/repositories/InternalBlocklistRepository.kt b/services/flipcash/src/main/kotlin/com/flipcash/services/internal/repositories/InternalBlocklistRepository.kt index ef4a5cac06..053d0c8aa1 100644 --- a/services/flipcash/src/main/kotlin/com/flipcash/services/internal/repositories/InternalBlocklistRepository.kt +++ b/services/flipcash/src/main/kotlin/com/flipcash/services/internal/repositories/InternalBlocklistRepository.kt @@ -6,7 +6,7 @@ import com.flipcash.services.internal.network.services.BlocklistService import com.flipcash.services.models.BlocklistPage import com.flipcash.services.models.QueryOptions import com.flipcash.services.repository.BlocklistRepository -import com.getcode.ed25519.Ed25519 +import com.getcode.ed25519kmp.Ed25519 import com.getcode.opencode.model.core.ID import com.getcode.utils.ErrorUtils diff --git a/services/flipcash/src/main/kotlin/com/flipcash/services/internal/repositories/InternalChatMessagingRepository.kt b/services/flipcash/src/main/kotlin/com/flipcash/services/internal/repositories/InternalChatMessagingRepository.kt index 1e8ae54c97..5d78af8f7f 100644 --- a/services/flipcash/src/main/kotlin/com/flipcash/services/internal/repositories/InternalChatMessagingRepository.kt +++ b/services/flipcash/src/main/kotlin/com/flipcash/services/internal/repositories/InternalChatMessagingRepository.kt @@ -16,7 +16,7 @@ import com.flipcash.services.models.chat.ViewMode import com.flipcash.services.repository.ChatMessagingRepository import com.flipcash.services.repository.DeltaUpdate import com.flipcash.services.repository.ReactorsPage -import com.getcode.ed25519.Ed25519.KeyPair +import com.getcode.ed25519kmp.Ed25519.KeyPair import com.getcode.utils.ErrorUtils import kotlinx.coroutines.flow.Flow import kotlinx.coroutines.flow.map diff --git a/services/flipcash/src/main/kotlin/com/flipcash/services/internal/repositories/InternalChatRepository.kt b/services/flipcash/src/main/kotlin/com/flipcash/services/internal/repositories/InternalChatRepository.kt index 4084edaec9..3637627e68 100644 --- a/services/flipcash/src/main/kotlin/com/flipcash/services/internal/repositories/InternalChatRepository.kt +++ b/services/flipcash/src/main/kotlin/com/flipcash/services/internal/repositories/InternalChatRepository.kt @@ -32,7 +32,7 @@ import com.flipcash.services.models.chat.StoredKeyEnvelope import com.flipcash.services.models.chat.ViewerState import com.flipcash.services.models.chat.ViewMode import com.flipcash.services.repository.ChatRepository -import com.getcode.ed25519.Ed25519.KeyPair +import com.getcode.ed25519kmp.Ed25519.KeyPair import com.getcode.opencode.model.core.ID import com.getcode.utils.ErrorUtils import kotlin.time.Instant diff --git a/services/flipcash/src/main/kotlin/com/flipcash/services/internal/repositories/InternalCommunityRepository.kt b/services/flipcash/src/main/kotlin/com/flipcash/services/internal/repositories/InternalCommunityRepository.kt index f036295c6f..76a5a055b2 100644 --- a/services/flipcash/src/main/kotlin/com/flipcash/services/internal/repositories/InternalCommunityRepository.kt +++ b/services/flipcash/src/main/kotlin/com/flipcash/services/internal/repositories/InternalCommunityRepository.kt @@ -7,7 +7,7 @@ import com.flipcash.services.internal.network.services.CommunityService import com.flipcash.services.models.Community import com.flipcash.services.models.CommunityLeader import com.flipcash.services.repository.CommunityRepository -import com.getcode.ed25519.Ed25519.KeyPair +import com.getcode.ed25519kmp.Ed25519.KeyPair import com.getcode.solana.keys.Mint import com.getcode.utils.ErrorUtils diff --git a/services/flipcash/src/main/kotlin/com/flipcash/services/internal/repositories/InternalContactListRepository.kt b/services/flipcash/src/main/kotlin/com/flipcash/services/internal/repositories/InternalContactListRepository.kt index 899f75f7ae..747eed4988 100644 --- a/services/flipcash/src/main/kotlin/com/flipcash/services/internal/repositories/InternalContactListRepository.kt +++ b/services/flipcash/src/main/kotlin/com/flipcash/services/internal/repositories/InternalContactListRepository.kt @@ -5,7 +5,7 @@ import com.flipcash.services.internal.network.services.ContactListService import com.flipcash.services.models.ContactMethod import com.flipcash.services.models.FlipcashContactEntry import com.flipcash.services.repository.ContactListRepository -import com.getcode.ed25519.Ed25519 +import com.getcode.ed25519kmp.Ed25519 import com.getcode.solana.keys.Checksum import com.getcode.utils.ErrorUtils import kotlinx.coroutines.flow.Flow diff --git a/services/flipcash/src/main/kotlin/com/flipcash/services/internal/repositories/InternalContactVerificationRepository.kt b/services/flipcash/src/main/kotlin/com/flipcash/services/internal/repositories/InternalContactVerificationRepository.kt index a39028866d..29abda4825 100644 --- a/services/flipcash/src/main/kotlin/com/flipcash/services/internal/repositories/InternalContactVerificationRepository.kt +++ b/services/flipcash/src/main/kotlin/com/flipcash/services/internal/repositories/InternalContactVerificationRepository.kt @@ -4,7 +4,7 @@ import com.flipcash.services.internal.network.services.EmailVerificationService import com.flipcash.services.internal.network.services.PhoneVerificationService import com.flipcash.services.models.ContactMethod import com.flipcash.services.repository.ContactVerificationRepository -import com.getcode.ed25519.Ed25519 +import com.getcode.ed25519kmp.Ed25519 import com.getcode.utils.ErrorUtils internal class InternalContactVerificationRepository( diff --git a/services/flipcash/src/main/kotlin/com/flipcash/services/internal/repositories/InternalEventStreamingRepository.kt b/services/flipcash/src/main/kotlin/com/flipcash/services/internal/repositories/InternalEventStreamingRepository.kt index 962cf1949a..35c0a84e83 100644 --- a/services/flipcash/src/main/kotlin/com/flipcash/services/internal/repositories/InternalEventStreamingRepository.kt +++ b/services/flipcash/src/main/kotlin/com/flipcash/services/internal/repositories/InternalEventStreamingRepository.kt @@ -5,7 +5,7 @@ import com.flipcash.services.internal.network.services.EventStreamingService import com.flipcash.services.models.chat.BlobUpdate import com.flipcash.services.models.chat.ChatUpdate import com.flipcash.services.repository.EventStreamingRepository -import com.getcode.ed25519.Ed25519.KeyPair +import com.getcode.ed25519kmp.Ed25519.KeyPair import kotlinx.coroutines.CoroutineScope internal class InternalEventStreamingRepository( diff --git a/services/flipcash/src/main/kotlin/com/flipcash/services/internal/repositories/InternalModerationRepository.kt b/services/flipcash/src/main/kotlin/com/flipcash/services/internal/repositories/InternalModerationRepository.kt index 6f57a1fa66..fed70d6845 100644 --- a/services/flipcash/src/main/kotlin/com/flipcash/services/internal/repositories/InternalModerationRepository.kt +++ b/services/flipcash/src/main/kotlin/com/flipcash/services/internal/repositories/InternalModerationRepository.kt @@ -6,7 +6,7 @@ import com.flipcash.services.internal.model.moderation.ModerationRequest import com.flipcash.services.internal.network.services.ModerationService import com.flipcash.services.models.ModerationResult import com.flipcash.services.repository.ModerationRepository -import com.getcode.ed25519.Ed25519 +import com.getcode.ed25519kmp.Ed25519 import com.getcode.utils.ErrorUtils internal class InternalModerationRepository( diff --git a/services/flipcash/src/main/kotlin/com/flipcash/services/internal/repositories/InternalPollRepository.kt b/services/flipcash/src/main/kotlin/com/flipcash/services/internal/repositories/InternalPollRepository.kt index ff3c08da78..64cc033afb 100644 --- a/services/flipcash/src/main/kotlin/com/flipcash/services/internal/repositories/InternalPollRepository.kt +++ b/services/flipcash/src/main/kotlin/com/flipcash/services/internal/repositories/InternalPollRepository.kt @@ -7,7 +7,7 @@ import com.flipcash.services.models.GetPollError import com.flipcash.services.models.VoteError import com.flipcash.services.models.chat.ChatId import com.flipcash.services.repository.PollRepository -import com.getcode.ed25519.Ed25519.KeyPair +import com.getcode.ed25519kmp.Ed25519.KeyPair import com.getcode.utils.ErrorUtils internal class InternalPollRepository( diff --git a/services/flipcash/src/main/kotlin/com/flipcash/services/internal/repositories/InternalProfileRepository.kt b/services/flipcash/src/main/kotlin/com/flipcash/services/internal/repositories/InternalProfileRepository.kt index 053fe18879..5e18d12b54 100644 --- a/services/flipcash/src/main/kotlin/com/flipcash/services/internal/repositories/InternalProfileRepository.kt +++ b/services/flipcash/src/main/kotlin/com/flipcash/services/internal/repositories/InternalProfileRepository.kt @@ -15,7 +15,7 @@ import com.flipcash.services.models.UserProfile import com.flipcash.services.models.chat.BlobId import com.flipcash.services.models.chat.MediaItem import com.flipcash.services.repository.ProfileRepository -import com.getcode.ed25519.Ed25519 +import com.getcode.ed25519kmp.Ed25519 import com.getcode.opencode.model.financial.Fiat import com.getcode.utils.ErrorUtils diff --git a/services/flipcash/src/main/kotlin/com/flipcash/services/internal/repositories/InternalPurchaseRepository.kt b/services/flipcash/src/main/kotlin/com/flipcash/services/internal/repositories/InternalPurchaseRepository.kt index 5ed5454830..afa33010c0 100644 --- a/services/flipcash/src/main/kotlin/com/flipcash/services/internal/repositories/InternalPurchaseRepository.kt +++ b/services/flipcash/src/main/kotlin/com/flipcash/services/internal/repositories/InternalPurchaseRepository.kt @@ -4,7 +4,7 @@ import com.flipcash.services.internal.model.billing.IapMetadata import com.flipcash.services.internal.model.billing.Receipt import com.flipcash.services.internal.network.services.PurchaseService import com.flipcash.services.repository.PurchaseRepository -import com.getcode.ed25519.Ed25519 +import com.getcode.ed25519kmp.Ed25519 import com.getcode.utils.ErrorUtils internal class InternalPurchaseRepository( diff --git a/services/flipcash/src/main/kotlin/com/flipcash/services/internal/repositories/InternalPushRepository.kt b/services/flipcash/src/main/kotlin/com/flipcash/services/internal/repositories/InternalPushRepository.kt index 8284b45dc0..22902e8510 100644 --- a/services/flipcash/src/main/kotlin/com/flipcash/services/internal/repositories/InternalPushRepository.kt +++ b/services/flipcash/src/main/kotlin/com/flipcash/services/internal/repositories/InternalPushRepository.kt @@ -2,7 +2,7 @@ package com.flipcash.services.internal.repositories import com.flipcash.services.internal.network.services.PushService import com.flipcash.services.repository.PushRepository -import com.getcode.ed25519.Ed25519 +import com.getcode.ed25519kmp.Ed25519 import com.getcode.utils.ErrorUtils internal class InternalPushRepository( diff --git a/services/flipcash/src/main/kotlin/com/flipcash/services/internal/repositories/InternalReportingRepository.kt b/services/flipcash/src/main/kotlin/com/flipcash/services/internal/repositories/InternalReportingRepository.kt index 8fa313459b..2814e6ca1b 100644 --- a/services/flipcash/src/main/kotlin/com/flipcash/services/internal/repositories/InternalReportingRepository.kt +++ b/services/flipcash/src/main/kotlin/com/flipcash/services/internal/repositories/InternalReportingRepository.kt @@ -3,7 +3,7 @@ package com.flipcash.services.internal.repositories import com.flipcash.services.internal.network.services.ReportingService import com.flipcash.services.models.ReportTarget import com.flipcash.services.repository.ReportingRepository -import com.getcode.ed25519.Ed25519 +import com.getcode.ed25519kmp.Ed25519 import com.getcode.utils.ErrorUtils internal class InternalReportingRepository( diff --git a/services/flipcash/src/main/kotlin/com/flipcash/services/internal/repositories/InternalResolverRepository.kt b/services/flipcash/src/main/kotlin/com/flipcash/services/internal/repositories/InternalResolverRepository.kt index a30a5e2889..2368a72356 100644 --- a/services/flipcash/src/main/kotlin/com/flipcash/services/internal/repositories/InternalResolverRepository.kt +++ b/services/flipcash/src/main/kotlin/com/flipcash/services/internal/repositories/InternalResolverRepository.kt @@ -3,7 +3,7 @@ package com.flipcash.services.internal.repositories import com.flipcash.services.internal.network.services.ResolverService import com.flipcash.services.models.ResolveIdentifier import com.flipcash.services.repository.ResolverRepository -import com.getcode.ed25519.Ed25519 +import com.getcode.ed25519kmp.Ed25519 import com.getcode.solana.keys.PublicKey import com.getcode.utils.ErrorUtils diff --git a/services/flipcash/src/main/kotlin/com/flipcash/services/internal/repositories/InternalSettingsRepository.kt b/services/flipcash/src/main/kotlin/com/flipcash/services/internal/repositories/InternalSettingsRepository.kt index e9a0982b6f..953326461e 100644 --- a/services/flipcash/src/main/kotlin/com/flipcash/services/internal/repositories/InternalSettingsRepository.kt +++ b/services/flipcash/src/main/kotlin/com/flipcash/services/internal/repositories/InternalSettingsRepository.kt @@ -2,7 +2,7 @@ package com.flipcash.services.internal.repositories import com.flipcash.services.internal.network.services.SettingsService import com.flipcash.services.repository.SettingsRepository -import com.getcode.ed25519.Ed25519 +import com.getcode.ed25519kmp.Ed25519 import com.getcode.utils.ErrorUtils internal class InternalSettingsRepository( diff --git a/services/flipcash/src/main/kotlin/com/flipcash/services/internal/repositories/InternalThirdPartyRepository.kt b/services/flipcash/src/main/kotlin/com/flipcash/services/internal/repositories/InternalThirdPartyRepository.kt index 27de642c1c..3053735059 100644 --- a/services/flipcash/src/main/kotlin/com/flipcash/services/internal/repositories/InternalThirdPartyRepository.kt +++ b/services/flipcash/src/main/kotlin/com/flipcash/services/internal/repositories/InternalThirdPartyRepository.kt @@ -3,7 +3,7 @@ package com.flipcash.services.internal.repositories import com.flipcash.services.internal.network.services.ThirdPartyService import com.flipcash.services.models.Jwt import com.flipcash.services.repository.ThirdPartyRepository -import com.getcode.ed25519.Ed25519 +import com.getcode.ed25519kmp.Ed25519 import com.getcode.network.jwt.JwtSecuredEndpoint import com.getcode.utils.ErrorUtils diff --git a/services/flipcash/src/main/kotlin/com/flipcash/services/repository/AccountRepository.kt b/services/flipcash/src/main/kotlin/com/flipcash/services/repository/AccountRepository.kt index b74ef73ec8..8cf4f97cbd 100644 --- a/services/flipcash/src/main/kotlin/com/flipcash/services/repository/AccountRepository.kt +++ b/services/flipcash/src/main/kotlin/com/flipcash/services/repository/AccountRepository.kt @@ -1,7 +1,7 @@ package com.flipcash.services.repository import com.flipcash.services.models.UserFlags -import com.getcode.ed25519.Ed25519.KeyPair +import com.getcode.ed25519kmp.Ed25519.KeyPair import com.getcode.opencode.model.core.ID interface AccountRepository { diff --git a/services/flipcash/src/main/kotlin/com/flipcash/services/repository/ActivityFeedRepository.kt b/services/flipcash/src/main/kotlin/com/flipcash/services/repository/ActivityFeedRepository.kt index df6b4a13ad..a6f3568e1c 100644 --- a/services/flipcash/src/main/kotlin/com/flipcash/services/repository/ActivityFeedRepository.kt +++ b/services/flipcash/src/main/kotlin/com/flipcash/services/repository/ActivityFeedRepository.kt @@ -3,7 +3,7 @@ package com.flipcash.services.repository import com.flipcash.services.models.ActivityFeedNotification import com.flipcash.services.models.ActivityFeedType import com.flipcash.services.models.QueryOptions -import com.getcode.ed25519.Ed25519.KeyPair +import com.getcode.ed25519kmp.Ed25519.KeyPair import com.getcode.opencode.model.core.ID interface ActivityFeedRepository { diff --git a/services/flipcash/src/main/kotlin/com/flipcash/services/repository/BlobStorageRepository.kt b/services/flipcash/src/main/kotlin/com/flipcash/services/repository/BlobStorageRepository.kt index 9b743e830d..91e7058c88 100644 --- a/services/flipcash/src/main/kotlin/com/flipcash/services/repository/BlobStorageRepository.kt +++ b/services/flipcash/src/main/kotlin/com/flipcash/services/repository/BlobStorageRepository.kt @@ -7,7 +7,7 @@ import com.flipcash.services.models.chat.BlobId import com.flipcash.services.models.chat.BlobState import com.flipcash.services.models.chat.BlobStatus import com.flipcash.services.models.chat.ChatId -import com.getcode.ed25519.Ed25519 +import com.getcode.ed25519kmp.Ed25519 interface BlobStorageRepository { suspend fun getUploadPolicy(owner: Ed25519.KeyPair): Result diff --git a/services/flipcash/src/main/kotlin/com/flipcash/services/repository/BlocklistRepository.kt b/services/flipcash/src/main/kotlin/com/flipcash/services/repository/BlocklistRepository.kt index 74d3cb391c..e356a47bbb 100644 --- a/services/flipcash/src/main/kotlin/com/flipcash/services/repository/BlocklistRepository.kt +++ b/services/flipcash/src/main/kotlin/com/flipcash/services/repository/BlocklistRepository.kt @@ -2,7 +2,7 @@ package com.flipcash.services.repository import com.flipcash.services.models.BlocklistPage import com.flipcash.services.models.QueryOptions -import com.getcode.ed25519.Ed25519.KeyPair +import com.getcode.ed25519kmp.Ed25519.KeyPair import com.getcode.opencode.model.core.ID interface BlocklistRepository { diff --git a/services/flipcash/src/main/kotlin/com/flipcash/services/repository/ChatMessagingRepository.kt b/services/flipcash/src/main/kotlin/com/flipcash/services/repository/ChatMessagingRepository.kt index 56a5086347..a2890da48a 100644 --- a/services/flipcash/src/main/kotlin/com/flipcash/services/repository/ChatMessagingRepository.kt +++ b/services/flipcash/src/main/kotlin/com/flipcash/services/repository/ChatMessagingRepository.kt @@ -12,7 +12,7 @@ import com.flipcash.services.models.chat.ReactionSummary import com.flipcash.services.models.chat.Reactor import com.flipcash.services.models.chat.TypingState import com.flipcash.services.models.chat.ViewMode -import com.getcode.ed25519.Ed25519.KeyPair +import com.getcode.ed25519kmp.Ed25519.KeyPair import kotlinx.coroutines.flow.Flow interface ChatMessagingRepository { diff --git a/services/flipcash/src/main/kotlin/com/flipcash/services/repository/ChatRepository.kt b/services/flipcash/src/main/kotlin/com/flipcash/services/repository/ChatRepository.kt index 7adaaa9b88..faa60b85b2 100644 --- a/services/flipcash/src/main/kotlin/com/flipcash/services/repository/ChatRepository.kt +++ b/services/flipcash/src/main/kotlin/com/flipcash/services/repository/ChatRepository.kt @@ -20,7 +20,7 @@ import com.flipcash.services.models.chat.StartChatParameters import com.flipcash.services.models.chat.StoredKeyEnvelope import com.flipcash.services.models.chat.ViewerState import com.flipcash.services.models.chat.ViewMode -import com.getcode.ed25519.Ed25519.KeyPair +import com.getcode.ed25519kmp.Ed25519.KeyPair import com.getcode.opencode.model.core.ID interface ChatRepository { diff --git a/services/flipcash/src/main/kotlin/com/flipcash/services/repository/CommunityRepository.kt b/services/flipcash/src/main/kotlin/com/flipcash/services/repository/CommunityRepository.kt index 1a542b9d01..5d89f1ccdd 100644 --- a/services/flipcash/src/main/kotlin/com/flipcash/services/repository/CommunityRepository.kt +++ b/services/flipcash/src/main/kotlin/com/flipcash/services/repository/CommunityRepository.kt @@ -1,7 +1,7 @@ package com.flipcash.services.repository import com.flipcash.services.models.Community -import com.getcode.ed25519.Ed25519.KeyPair +import com.getcode.ed25519kmp.Ed25519.KeyPair import com.getcode.solana.keys.Mint interface CommunityRepository { diff --git a/services/flipcash/src/main/kotlin/com/flipcash/services/repository/ContactListRepository.kt b/services/flipcash/src/main/kotlin/com/flipcash/services/repository/ContactListRepository.kt index d637bf49f1..3f0b4239e6 100644 --- a/services/flipcash/src/main/kotlin/com/flipcash/services/repository/ContactListRepository.kt +++ b/services/flipcash/src/main/kotlin/com/flipcash/services/repository/ContactListRepository.kt @@ -2,7 +2,7 @@ package com.flipcash.services.repository import com.flipcash.services.models.ContactMethod import com.flipcash.services.models.FlipcashContactEntry -import com.getcode.ed25519.Ed25519.KeyPair +import com.getcode.ed25519kmp.Ed25519.KeyPair import com.getcode.solana.keys.Checksum import kotlinx.coroutines.flow.Flow diff --git a/services/flipcash/src/main/kotlin/com/flipcash/services/repository/ContactVerificationRepository.kt b/services/flipcash/src/main/kotlin/com/flipcash/services/repository/ContactVerificationRepository.kt index 54dbf6c330..abc94a7556 100644 --- a/services/flipcash/src/main/kotlin/com/flipcash/services/repository/ContactVerificationRepository.kt +++ b/services/flipcash/src/main/kotlin/com/flipcash/services/repository/ContactVerificationRepository.kt @@ -1,7 +1,7 @@ package com.flipcash.services.repository import com.flipcash.services.models.ContactMethod -import com.getcode.ed25519.Ed25519 +import com.getcode.ed25519kmp.Ed25519 interface ContactVerificationRepository { suspend fun sendVerificationCode(method: ContactMethod, owner: Ed25519.KeyPair): Result diff --git a/services/flipcash/src/main/kotlin/com/flipcash/services/repository/EventStreamingRepository.kt b/services/flipcash/src/main/kotlin/com/flipcash/services/repository/EventStreamingRepository.kt index 3cb761ee6d..187805db92 100644 --- a/services/flipcash/src/main/kotlin/com/flipcash/services/repository/EventStreamingRepository.kt +++ b/services/flipcash/src/main/kotlin/com/flipcash/services/repository/EventStreamingRepository.kt @@ -3,7 +3,7 @@ package com.flipcash.services.repository import com.flipcash.services.internal.network.services.EventStreamReference import com.flipcash.services.models.chat.BlobUpdate import com.flipcash.services.models.chat.ChatUpdate -import com.getcode.ed25519.Ed25519.KeyPair +import com.getcode.ed25519kmp.Ed25519.KeyPair import kotlinx.coroutines.CoroutineScope interface EventStreamingRepository { diff --git a/services/flipcash/src/main/kotlin/com/flipcash/services/repository/ModerationRepository.kt b/services/flipcash/src/main/kotlin/com/flipcash/services/repository/ModerationRepository.kt index c58e152b63..181846f831 100644 --- a/services/flipcash/src/main/kotlin/com/flipcash/services/repository/ModerationRepository.kt +++ b/services/flipcash/src/main/kotlin/com/flipcash/services/repository/ModerationRepository.kt @@ -1,7 +1,7 @@ package com.flipcash.services.repository import com.flipcash.services.models.ModerationResult -import com.getcode.ed25519.Ed25519 +import com.getcode.ed25519kmp.Ed25519 interface ModerationRepository { suspend fun moderateText(text: String, owner: Ed25519.KeyPair): Result diff --git a/services/flipcash/src/main/kotlin/com/flipcash/services/repository/PollRepository.kt b/services/flipcash/src/main/kotlin/com/flipcash/services/repository/PollRepository.kt index 014d67b143..bd42a695e4 100644 --- a/services/flipcash/src/main/kotlin/com/flipcash/services/repository/PollRepository.kt +++ b/services/flipcash/src/main/kotlin/com/flipcash/services/repository/PollRepository.kt @@ -2,7 +2,7 @@ package com.flipcash.services.repository import com.codeinc.flipcash.gen.poll.v1.Model import com.flipcash.services.models.chat.ChatId -import com.getcode.ed25519.Ed25519.KeyPair +import com.getcode.ed25519kmp.Ed25519.KeyPair /** * Polls in group chats. Poll values are the generated `poll.v1` types for now; a domain model diff --git a/services/flipcash/src/main/kotlin/com/flipcash/services/repository/ProfileRepository.kt b/services/flipcash/src/main/kotlin/com/flipcash/services/repository/ProfileRepository.kt index 13a175663b..4e20508129 100644 --- a/services/flipcash/src/main/kotlin/com/flipcash/services/repository/ProfileRepository.kt +++ b/services/flipcash/src/main/kotlin/com/flipcash/services/repository/ProfileRepository.kt @@ -7,7 +7,7 @@ import com.flipcash.services.models.SocialAccountUnlinkRequest import com.flipcash.services.models.UserProfile import com.flipcash.services.models.chat.BlobId import com.flipcash.services.models.chat.MediaItem -import com.getcode.ed25519.Ed25519 +import com.getcode.ed25519kmp.Ed25519 import com.getcode.opencode.model.financial.Fiat interface ProfileRepository { diff --git a/services/flipcash/src/main/kotlin/com/flipcash/services/repository/PurchaseRepository.kt b/services/flipcash/src/main/kotlin/com/flipcash/services/repository/PurchaseRepository.kt index 7ee1032aae..7a764f8a14 100644 --- a/services/flipcash/src/main/kotlin/com/flipcash/services/repository/PurchaseRepository.kt +++ b/services/flipcash/src/main/kotlin/com/flipcash/services/repository/PurchaseRepository.kt @@ -2,7 +2,7 @@ package com.flipcash.services.repository import com.flipcash.services.internal.model.billing.IapMetadata import com.flipcash.services.internal.model.billing.Receipt -import com.getcode.ed25519.Ed25519.KeyPair +import com.getcode.ed25519kmp.Ed25519.KeyPair interface PurchaseRepository { suspend fun onPurchaseCompleted( diff --git a/services/flipcash/src/main/kotlin/com/flipcash/services/repository/PushRepository.kt b/services/flipcash/src/main/kotlin/com/flipcash/services/repository/PushRepository.kt index 229949d355..7333cf80a9 100644 --- a/services/flipcash/src/main/kotlin/com/flipcash/services/repository/PushRepository.kt +++ b/services/flipcash/src/main/kotlin/com/flipcash/services/repository/PushRepository.kt @@ -1,6 +1,6 @@ package com.flipcash.services.repository -import com.getcode.ed25519.Ed25519.KeyPair +import com.getcode.ed25519kmp.Ed25519.KeyPair interface PushRepository { suspend fun addToken( diff --git a/services/flipcash/src/main/kotlin/com/flipcash/services/repository/ReportingRepository.kt b/services/flipcash/src/main/kotlin/com/flipcash/services/repository/ReportingRepository.kt index 071ceb7093..a502b3ddfc 100644 --- a/services/flipcash/src/main/kotlin/com/flipcash/services/repository/ReportingRepository.kt +++ b/services/flipcash/src/main/kotlin/com/flipcash/services/repository/ReportingRepository.kt @@ -1,7 +1,7 @@ package com.flipcash.services.repository import com.flipcash.services.models.ReportTarget -import com.getcode.ed25519.Ed25519.KeyPair +import com.getcode.ed25519kmp.Ed25519.KeyPair interface ReportingRepository { /** Files a report against [target]. Reporting the same target more than once is a no-op. */ diff --git a/services/flipcash/src/main/kotlin/com/flipcash/services/repository/ResolverRepository.kt b/services/flipcash/src/main/kotlin/com/flipcash/services/repository/ResolverRepository.kt index 5e2b7ecf6a..fb06119465 100644 --- a/services/flipcash/src/main/kotlin/com/flipcash/services/repository/ResolverRepository.kt +++ b/services/flipcash/src/main/kotlin/com/flipcash/services/repository/ResolverRepository.kt @@ -1,7 +1,7 @@ package com.flipcash.services.repository import com.flipcash.services.models.ResolveIdentifier -import com.getcode.ed25519.Ed25519.KeyPair +import com.getcode.ed25519kmp.Ed25519.KeyPair import com.getcode.solana.keys.PublicKey interface ResolverRepository { diff --git a/services/flipcash/src/main/kotlin/com/flipcash/services/repository/SettingsRepository.kt b/services/flipcash/src/main/kotlin/com/flipcash/services/repository/SettingsRepository.kt index 3871d4aa20..dcc3e3c81b 100644 --- a/services/flipcash/src/main/kotlin/com/flipcash/services/repository/SettingsRepository.kt +++ b/services/flipcash/src/main/kotlin/com/flipcash/services/repository/SettingsRepository.kt @@ -1,6 +1,6 @@ package com.flipcash.services.repository -import com.getcode.ed25519.Ed25519 +import com.getcode.ed25519kmp.Ed25519 interface SettingsRepository { suspend fun update(locale: String?, region: String?, owner: Ed25519.KeyPair): Result diff --git a/services/flipcash/src/main/kotlin/com/flipcash/services/repository/ThirdPartyRepository.kt b/services/flipcash/src/main/kotlin/com/flipcash/services/repository/ThirdPartyRepository.kt index 861fb273c5..1a8a298d13 100644 --- a/services/flipcash/src/main/kotlin/com/flipcash/services/repository/ThirdPartyRepository.kt +++ b/services/flipcash/src/main/kotlin/com/flipcash/services/repository/ThirdPartyRepository.kt @@ -1,7 +1,7 @@ package com.flipcash.services.repository import com.flipcash.services.models.Jwt -import com.getcode.ed25519.Ed25519 +import com.getcode.ed25519kmp.Ed25519 import com.getcode.network.jwt.JwtSecuredEndpoint interface ThirdPartyRepository { diff --git a/services/flipcash/src/main/kotlin/com/flipcash/services/user/UserManager.kt b/services/flipcash/src/main/kotlin/com/flipcash/services/user/UserManager.kt index 2496834fb9..d733c0db35 100644 --- a/services/flipcash/src/main/kotlin/com/flipcash/services/user/UserManager.kt +++ b/services/flipcash/src/main/kotlin/com/flipcash/services/user/UserManager.kt @@ -1,5 +1,6 @@ package com.flipcash.services.user +import com.getcode.utils.BuildFlags import com.flipcash.services.models.UserFlags import com.flipcash.services.models.UserProfile import com.getcode.crypt.DerivePath @@ -14,7 +15,6 @@ import com.getcode.opencode.model.core.ID import com.getcode.opencode.model.core.NoId import com.getcode.opencode.model.financial.Token import com.getcode.opencode.model.financial.usdf -import com.getcode.services.opencode.BuildConfig import com.getcode.utils.TraceManager import com.getcode.utils.trace import com.hoc081098.channeleventbus.ChannelEventBus @@ -218,7 +218,7 @@ class UserManager @Inject constructor( } private fun associate() { - if (!BuildConfig.DEBUG) { + if (!BuildFlags.isDebug) { // Hex, not base58 — matches iOS so one user is one Mixpanel profile. // See AnalyticsIdentity.kt. val distinctId = accountId?.analyticsDistinctId() diff --git a/services/flipcash/src/test/kotlin/com/flipcash/services/controllers/BlobStorageControllerChatMediaTest.kt b/services/flipcash/src/test/kotlin/com/flipcash/services/controllers/BlobStorageControllerChatMediaTest.kt index f0c7fac5c0..fb61b682e1 100644 --- a/services/flipcash/src/test/kotlin/com/flipcash/services/controllers/BlobStorageControllerChatMediaTest.kt +++ b/services/flipcash/src/test/kotlin/com/flipcash/services/controllers/BlobStorageControllerChatMediaTest.kt @@ -18,7 +18,7 @@ import com.flipcash.services.models.chat.ChatId import com.flipcash.services.models.chat.RejectionReason import com.flipcash.services.repository.BlobStorageRepository import com.flipcash.services.user.UserManager -import com.getcode.ed25519.Ed25519 +import com.getcode.ed25519kmp.Ed25519 import com.getcode.opencode.model.accounts.AccountCluster import io.mockk.coEvery import io.mockk.coVerify diff --git a/services/flipcash/src/test/kotlin/com/flipcash/services/controllers/BlobStorageControllerTest.kt b/services/flipcash/src/test/kotlin/com/flipcash/services/controllers/BlobStorageControllerTest.kt index 6199bde5b0..9d3d17dcfc 100644 --- a/services/flipcash/src/test/kotlin/com/flipcash/services/controllers/BlobStorageControllerTest.kt +++ b/services/flipcash/src/test/kotlin/com/flipcash/services/controllers/BlobStorageControllerTest.kt @@ -15,7 +15,7 @@ import com.flipcash.services.models.chat.BlobStatus import com.flipcash.services.models.chat.RejectionReason import com.flipcash.services.repository.BlobStorageRepository import com.flipcash.services.user.UserManager -import com.getcode.ed25519.Ed25519 +import com.getcode.ed25519kmp.Ed25519 import com.getcode.opencode.model.accounts.AccountCluster import io.mockk.coEvery import io.mockk.coVerify diff --git a/services/flipcash/src/test/kotlin/com/flipcash/services/controllers/ChatControllerTest.kt b/services/flipcash/src/test/kotlin/com/flipcash/services/controllers/ChatControllerTest.kt index d4c2fa2f53..4326c47d0c 100644 --- a/services/flipcash/src/test/kotlin/com/flipcash/services/controllers/ChatControllerTest.kt +++ b/services/flipcash/src/test/kotlin/com/flipcash/services/controllers/ChatControllerTest.kt @@ -23,7 +23,7 @@ import com.flipcash.services.models.UserProfile import com.flipcash.services.models.chat.MentionSuggestion import com.flipcash.services.repository.ChatRepository import com.flipcash.services.user.UserManager -import com.getcode.ed25519.Ed25519 +import com.getcode.ed25519kmp.Ed25519 import com.getcode.opencode.model.accounts.AccountCluster import com.getcode.opencode.model.core.ID import io.mockk.every diff --git a/services/flipcash/src/test/kotlin/com/flipcash/services/controllers/ChatMessagingControllerTest.kt b/services/flipcash/src/test/kotlin/com/flipcash/services/controllers/ChatMessagingControllerTest.kt index 3ddd48f844..1da44fb5b1 100644 --- a/services/flipcash/src/test/kotlin/com/flipcash/services/controllers/ChatMessagingControllerTest.kt +++ b/services/flipcash/src/test/kotlin/com/flipcash/services/controllers/ChatMessagingControllerTest.kt @@ -18,7 +18,7 @@ import com.flipcash.services.repository.ReactorsPage import kotlinx.coroutines.flow.Flow import kotlinx.coroutines.flow.flowOf import com.flipcash.services.user.UserManager -import com.getcode.ed25519.Ed25519 +import com.getcode.ed25519kmp.Ed25519 import com.getcode.opencode.model.accounts.AccountCluster import io.mockk.every import io.mockk.mockk diff --git a/services/flipcash/src/test/kotlin/com/flipcash/services/controllers/EventStreamingControllerTest.kt b/services/flipcash/src/test/kotlin/com/flipcash/services/controllers/EventStreamingControllerTest.kt index 0cd2a4ad36..21db53db5a 100644 --- a/services/flipcash/src/test/kotlin/com/flipcash/services/controllers/EventStreamingControllerTest.kt +++ b/services/flipcash/src/test/kotlin/com/flipcash/services/controllers/EventStreamingControllerTest.kt @@ -6,7 +6,7 @@ import com.flipcash.services.models.chat.ChatId import com.flipcash.services.models.chat.ChatUpdate import com.flipcash.services.repository.EventStreamingRepository import com.flipcash.services.user.UserManager -import com.getcode.ed25519.Ed25519 +import com.getcode.ed25519kmp.Ed25519 import com.getcode.opencode.model.accounts.AccountCluster import io.mockk.every import io.mockk.mockk diff --git a/services/flipcash/src/test/kotlin/com/flipcash/services/controllers/ProfileControllerTest.kt b/services/flipcash/src/test/kotlin/com/flipcash/services/controllers/ProfileControllerTest.kt index 8118af6d55..f97941216a 100644 --- a/services/flipcash/src/test/kotlin/com/flipcash/services/controllers/ProfileControllerTest.kt +++ b/services/flipcash/src/test/kotlin/com/flipcash/services/controllers/ProfileControllerTest.kt @@ -12,7 +12,7 @@ import com.flipcash.services.models.chat.MediaItem import com.flipcash.services.models.ProfileIdentifier import com.flipcash.services.repository.ProfileRepository import com.flipcash.services.user.UserManager -import com.getcode.ed25519.Ed25519 +import com.getcode.ed25519kmp.Ed25519 import com.getcode.opencode.model.accounts.AccountCluster import com.getcode.opencode.model.core.ID import com.getcode.opencode.model.financial.Fiat diff --git a/services/flipcash/src/test/kotlin/com/flipcash/services/internal/network/api/BlobStorageApiDeadlineTest.kt b/services/flipcash/src/test/kotlin/com/flipcash/services/internal/network/api/BlobStorageApiDeadlineTest.kt index 34861e284a..eac29fe23d 100644 --- a/services/flipcash/src/test/kotlin/com/flipcash/services/internal/network/api/BlobStorageApiDeadlineTest.kt +++ b/services/flipcash/src/test/kotlin/com/flipcash/services/internal/network/api/BlobStorageApiDeadlineTest.kt @@ -2,7 +2,7 @@ package com.flipcash.services.internal.network.api import androidx.lifecycle.ProcessLifecycleOwner import com.codeinc.flipcash.gen.common.v1.Common -import com.getcode.ed25519.Ed25519 +import com.getcode.ed25519kmp.Ed25519 import io.grpc.ManagedChannel import io.grpc.Status import io.grpc.StatusException diff --git a/services/flipcash/src/test/kotlin/com/flipcash/services/internal/network/services/PhoneVerificationServiceTest.kt b/services/flipcash/src/test/kotlin/com/flipcash/services/internal/network/services/PhoneVerificationServiceTest.kt index 5fe017e87b..384b7cf66e 100644 --- a/services/flipcash/src/test/kotlin/com/flipcash/services/internal/network/services/PhoneVerificationServiceTest.kt +++ b/services/flipcash/src/test/kotlin/com/flipcash/services/internal/network/services/PhoneVerificationServiceTest.kt @@ -3,7 +3,7 @@ package com.flipcash.services.internal.network.services import com.flipcash.services.internal.network.api.PhoneVerificationApi import com.flipcash.services.models.ContactMethod import com.flipcash.services.models.PhoneVerificationError -import com.getcode.ed25519.Ed25519 +import com.getcode.ed25519kmp.Ed25519 import com.getcode.opencode.model.core.errors.ValidationException import dev.bmcreations.protovalidate.FieldViolation import dev.bmcreations.protovalidate.ProtoValidationException diff --git a/services/opencode/build.gradle.kts b/services/opencode/build.gradle.kts index 67b88e1945..bccc54869c 100644 --- a/services/opencode/build.gradle.kts +++ b/services/opencode/build.gradle.kts @@ -1,96 +1,90 @@ plugins { - alias(libs.plugins.flipcash.android.library) - alias(libs.plugins.flipcash.android.ed25519.shadow) - id("com.google.devtools.ksp") - id("dagger.hilt.android.plugin") + alias(libs.plugins.flipcash.kmp.app.library) + alias(libs.plugins.kotlin.ksp) id("org.jetbrains.kotlin.plugin.parcelize") } -android { - namespace = "${Gradle.codeNamespace}.services.opencode" - - defaultConfig { - consumerProguardFiles("consumer-rules.pro") - - buildConfigField("Boolean", "NOTIFY_ERRORS", "false") - buildConfigField( - "String", - "GOOGLE_CLOUD_PROJECT_NUMBER", - "\"${tryReadProperty(rootProject.rootDir, "GOOGLE_CLOUD_PROJECT_NUMBER", "-1L")}\"" - ) +kotlin { + android { + namespace = "${Gradle.codeNamespace}.services.opencode" + androidResources { enable = true } } - buildFeatures { - buildConfig = true + sourceSets { + commonMain.dependencies { + implementation(libs.ocp.client.protocol) + api(project(":libs:currency-math")) + api(project(":libs:datetime")) + api(project(":libs:encryption:base58")) + api(project(":libs:encryption:ed25519")) + api(project(":libs:encryption:hmac")) + api(project(":libs:encryption:keys")) + api(project(":libs:encryption:mnemonic")) + api(project(":libs:encryption:sha256")) + api(project(":libs:encryption:sha512")) + api(project(":libs:encryption:utils")) + api(project(":libs:logging")) + api(project(":libs:locale:public")) + api(project(":libs:network:connectivity:public")) + implementation(project(":ui:resources")) + + implementation(libs.protobuf.validate.runtime) + implementation(libs.bundles.hilt.common) + implementation(libs.kotlinx.serialization.json) + implementation(libs.kotlinx.datetime) + implementation(libs.kotlinx.coroutines.core) + implementation(libs.grpc.okhttp) + implementation(libs.grpc.kotlin) + implementation(libs.grpc.protobuf.lite) + implementation(libs.event.bus) + } + androidMain.dependencies { + api(project(":libs:locale:bindings")) + implementation(project(":libs:locale:impl")) + api(project(":libs:network:connectivity:bindings")) + api(project(":vendor:kik:scanner")) + + implementation(libs.grpc.android) + implementation(libs.androidx.lifecycle.runtime) + implementation(libs.androidx.lifecycle.process) + implementation(libs.hilt.android) + + // Not imported by this module; kept so the app's runtime classpath is unchanged. + implementation(libs.androidx.datastore) + implementation(libs.okhttp) + implementation(libs.mixpanel) + implementation(project.dependencies.platform(libs.firebase.bom)) + implementation(libs.firebase.installations) + implementation(libs.firebase.perf) + implementation(libs.firebase.messaging) + implementation(libs.play.integrity) + implementation(libs.androidx.paging.runtime) + implementation(libs.fingerprint.pro) + implementation(libs.retrofit) + implementation(libs.retrofit.converter.gson) + implementation(libs.okhttp.logging.interceptor) + } + getByName("androidHostTest").dependencies { + implementation(kotlin("test")) + implementation(libs.bundles.unit.testing) + implementation(project(":libs:currency-math:test-fixtures")) + implementation(project(":libs:test-utils")) + } + jvmTest.dependencies { + implementation(kotlin("test")) + implementation(libs.kotlinx.coroutines.test) + } } - } dependencies { - implementation(libs.ocp.client.protocol) - api(project(":libs:currency-math")) - api(project(":libs:datetime")) - api(project(":libs:encryption:base58")) - api(project(":libs:encryption:ed25519")) - api(project(":libs:encryption:hmac")) - api(project(":libs:encryption:keys")) - api(project(":libs:encryption:mnemonic")) - api(project(":libs:encryption:sha256")) - api(project(":libs:encryption:sha512")) - api(project(":libs:encryption:utils")) - api(project(":libs:logging")) - api(project(":libs:locale:bindings")) - implementation(project(":libs:locale:impl")) - api(project(":libs:network:connectivity:bindings")) - implementation(project(":ui:resources")) - - api(project(":vendor:kik:scanner")) - - implementation(libs.protobuf.validate.runtime) - - implementation(libs.javax.inject) - - implementation(libs.kotlinx.serialization.json) - implementation(libs.javax.inject) - - implementation(libs.grpc.android) - implementation(libs.grpc.okhttp) - implementation(libs.grpc.kotlin) - implementation(libs.grpc.protobuf.lite) - implementation(libs.androidx.lifecycle.runtime) - implementation(libs.androidx.lifecycle.process) - implementation(libs.androidx.datastore) - implementation(libs.okhttp) - implementation(libs.mixpanel) - - implementation(platform(libs.firebase.bom)) - implementation(libs.firebase.installations) - implementation(libs.firebase.perf) - implementation(libs.firebase.messaging) - - implementation(libs.play.integrity) - - implementation(libs.androidx.paging.runtime) - - ksp(libs.androidx.room.compiler) - - implementation(libs.fingerprint.pro) - - androidTestImplementation(libs.androidx.junit) - androidTestImplementation(libs.junit) - androidTestImplementation(libs.androidx.test.runner) - - implementation(libs.retrofit) - implementation(libs.retrofit.converter.gson) - implementation(libs.okhttp.logging.interceptor) - - implementation(libs.hilt.android) - ksp(libs.hilt.android.compiler) - ksp(libs.hilt.compiler) - - implementation(libs.event.bus) + add("kspAndroid", libs.hilt.android.compiler) + add("kspAndroid", libs.hilt.compiler) +} - testImplementation(kotlin("test")) - testImplementation(libs.bundles.unit.testing) - testImplementation(project(":libs:currency-math:test-fixtures")) +// The headless balance test reads its recovery phrase from local.properties (gitignored) or the +// FLIPCASH_TEST_MNEMONIC environment variable, and skips when neither is set. +tasks.named("jvmTest") { + val mnemonic = tryReadProperty(rootProject.rootDir, "flipcash.test.mnemonic", "") + if (mnemonic.isNotBlank()) systemProperty("flipcash.test.mnemonic", mnemonic) } diff --git a/services/opencode/consumer-rules.pro b/services/opencode/consumer-rules.pro deleted file mode 100644 index e69de29bb2..0000000000 diff --git a/services/opencode/src/androidTest/kotlin/com/getcode/opencode/model/core/OpenCodePayloadTests.kt b/services/opencode/src/androidDeviceTest/kotlin/com/getcode/opencode/model/core/OpenCodePayloadTests.kt similarity index 100% rename from services/opencode/src/androidTest/kotlin/com/getcode/opencode/model/core/OpenCodePayloadTests.kt rename to services/opencode/src/androidDeviceTest/kotlin/com/getcode/opencode/model/core/OpenCodePayloadTests.kt diff --git a/services/opencode/src/androidTest/kotlin/com/getcode/opencode/solana/swap/SwapTests.kt b/services/opencode/src/androidDeviceTest/kotlin/com/getcode/opencode/solana/swap/SwapTests.kt similarity index 100% rename from services/opencode/src/androidTest/kotlin/com/getcode/opencode/solana/swap/SwapTests.kt rename to services/opencode/src/androidDeviceTest/kotlin/com/getcode/opencode/solana/swap/SwapTests.kt diff --git a/services/opencode/src/androidTest/kotlin/com/getcode/opencode/tests/PublicKey.kt b/services/opencode/src/androidDeviceTest/kotlin/com/getcode/opencode/tests/PublicKey.kt similarity index 100% rename from services/opencode/src/androidTest/kotlin/com/getcode/opencode/tests/PublicKey.kt rename to services/opencode/src/androidDeviceTest/kotlin/com/getcode/opencode/tests/PublicKey.kt diff --git a/services/opencode/src/test/kotlin/com/getcode/opencode/controllers/AccountControllerTest.kt b/services/opencode/src/androidHostTest/kotlin/com/getcode/opencode/controllers/AccountControllerTest.kt similarity index 99% rename from services/opencode/src/test/kotlin/com/getcode/opencode/controllers/AccountControllerTest.kt rename to services/opencode/src/androidHostTest/kotlin/com/getcode/opencode/controllers/AccountControllerTest.kt index 4836c226f9..4a4d43843e 100644 --- a/services/opencode/src/test/kotlin/com/getcode/opencode/controllers/AccountControllerTest.kt +++ b/services/opencode/src/androidHostTest/kotlin/com/getcode/opencode/controllers/AccountControllerTest.kt @@ -1,6 +1,6 @@ package com.getcode.opencode.controllers -import com.getcode.ed25519.Ed25519.KeyPair +import com.getcode.ed25519kmp.Ed25519.KeyPair import com.getcode.opencode.model.accounts.AccountCluster import com.getcode.opencode.model.accounts.AccountFilter import com.getcode.opencode.model.accounts.AccountInfo diff --git a/services/opencode/src/test/kotlin/com/getcode/opencode/controllers/TokenControllerFetchTokenBalancesTest.kt b/services/opencode/src/androidHostTest/kotlin/com/getcode/opencode/controllers/TokenControllerFetchTokenBalancesTest.kt similarity index 100% rename from services/opencode/src/test/kotlin/com/getcode/opencode/controllers/TokenControllerFetchTokenBalancesTest.kt rename to services/opencode/src/androidHostTest/kotlin/com/getcode/opencode/controllers/TokenControllerFetchTokenBalancesTest.kt diff --git a/services/opencode/src/test/kotlin/com/getcode/opencode/controllers/TransactionControllerPollIntentMetadataTest.kt b/services/opencode/src/androidHostTest/kotlin/com/getcode/opencode/controllers/TransactionControllerPollIntentMetadataTest.kt similarity index 100% rename from services/opencode/src/test/kotlin/com/getcode/opencode/controllers/TransactionControllerPollIntentMetadataTest.kt rename to services/opencode/src/androidHostTest/kotlin/com/getcode/opencode/controllers/TransactionControllerPollIntentMetadataTest.kt diff --git a/services/opencode/src/test/kotlin/com/getcode/opencode/internal/bidi/OpenBidirectionalStreamTest.kt b/services/opencode/src/androidHostTest/kotlin/com/getcode/opencode/internal/bidi/OpenBidirectionalStreamTest.kt similarity index 100% rename from services/opencode/src/test/kotlin/com/getcode/opencode/internal/bidi/OpenBidirectionalStreamTest.kt rename to services/opencode/src/androidHostTest/kotlin/com/getcode/opencode/internal/bidi/OpenBidirectionalStreamTest.kt diff --git a/services/opencode/src/test/kotlin/com/getcode/opencode/internal/exchange/RealVerifiedFiatCalculatorTest.kt b/services/opencode/src/androidHostTest/kotlin/com/getcode/opencode/internal/exchange/RealVerifiedFiatCalculatorTest.kt similarity index 100% rename from services/opencode/src/test/kotlin/com/getcode/opencode/internal/exchange/RealVerifiedFiatCalculatorTest.kt rename to services/opencode/src/androidHostTest/kotlin/com/getcode/opencode/internal/exchange/RealVerifiedFiatCalculatorTest.kt diff --git a/services/opencode/src/test/kotlin/com/getcode/opencode/internal/extensions/ByteArrayExtensionsTest.kt b/services/opencode/src/androidHostTest/kotlin/com/getcode/opencode/internal/extensions/ByteArrayExtensionsTest.kt similarity index 100% rename from services/opencode/src/test/kotlin/com/getcode/opencode/internal/extensions/ByteArrayExtensionsTest.kt rename to services/opencode/src/androidHostTest/kotlin/com/getcode/opencode/internal/extensions/ByteArrayExtensionsTest.kt diff --git a/services/opencode/src/test/kotlin/com/getcode/opencode/internal/extensions/CurrencyCodeExtensionsTest.kt b/services/opencode/src/androidHostTest/kotlin/com/getcode/opencode/internal/extensions/CurrencyCodeExtensionsTest.kt similarity index 100% rename from services/opencode/src/test/kotlin/com/getcode/opencode/internal/extensions/CurrencyCodeExtensionsTest.kt rename to services/opencode/src/androidHostTest/kotlin/com/getcode/opencode/internal/extensions/CurrencyCodeExtensionsTest.kt diff --git a/services/opencode/src/test/kotlin/com/getcode/opencode/internal/extensions/ResultExtensionsTest.kt b/services/opencode/src/androidHostTest/kotlin/com/getcode/opencode/internal/extensions/ResultExtensionsTest.kt similarity index 100% rename from services/opencode/src/test/kotlin/com/getcode/opencode/internal/extensions/ResultExtensionsTest.kt rename to services/opencode/src/androidHostTest/kotlin/com/getcode/opencode/internal/extensions/ResultExtensionsTest.kt diff --git a/services/opencode/src/test/kotlin/com/getcode/opencode/internal/extensions/VerifiedStateExtTest.kt b/services/opencode/src/androidHostTest/kotlin/com/getcode/opencode/internal/extensions/VerifiedStateExtTest.kt similarity index 100% rename from services/opencode/src/test/kotlin/com/getcode/opencode/internal/extensions/VerifiedStateExtTest.kt rename to services/opencode/src/androidHostTest/kotlin/com/getcode/opencode/internal/extensions/VerifiedStateExtTest.kt diff --git a/services/opencode/src/test/kotlin/com/getcode/opencode/internal/manager/VerifiedProtoManagerTest.kt b/services/opencode/src/androidHostTest/kotlin/com/getcode/opencode/internal/manager/VerifiedProtoManagerTest.kt similarity index 100% rename from services/opencode/src/test/kotlin/com/getcode/opencode/internal/manager/VerifiedProtoManagerTest.kt rename to services/opencode/src/androidHostTest/kotlin/com/getcode/opencode/internal/manager/VerifiedProtoManagerTest.kt diff --git a/services/opencode/src/test/kotlin/com/getcode/opencode/internal/network/api/intents/IntentMultiTransferTest.kt b/services/opencode/src/androidHostTest/kotlin/com/getcode/opencode/internal/network/api/intents/IntentMultiTransferTest.kt similarity index 99% rename from services/opencode/src/test/kotlin/com/getcode/opencode/internal/network/api/intents/IntentMultiTransferTest.kt rename to services/opencode/src/androidHostTest/kotlin/com/getcode/opencode/internal/network/api/intents/IntentMultiTransferTest.kt index b29ea9ccc0..f8224f5e97 100644 --- a/services/opencode/src/test/kotlin/com/getcode/opencode/internal/network/api/intents/IntentMultiTransferTest.kt +++ b/services/opencode/src/androidHostTest/kotlin/com/getcode/opencode/internal/network/api/intents/IntentMultiTransferTest.kt @@ -3,7 +3,7 @@ package com.getcode.opencode.internal.network.api.intents import com.codeinc.opencode.gen.currency.v1.coreMintFiatExchangeRate import com.codeinc.opencode.gen.currency.v1.verifiedCoreMintFiatExchangeRate import com.getcode.crypt.DerivedKey -import com.getcode.ed25519.Ed25519 +import com.getcode.ed25519kmp.Ed25519 import com.getcode.opencode.internal.manager.VerifiedState import com.getcode.opencode.internal.network.api.intents.actions.ActionPublicTransfer import com.getcode.opencode.model.accounts.AccountCluster diff --git a/services/opencode/src/test/kotlin/com/getcode/opencode/internal/network/pollers/SwapPollerTest.kt b/services/opencode/src/androidHostTest/kotlin/com/getcode/opencode/internal/network/pollers/SwapPollerTest.kt similarity index 99% rename from services/opencode/src/test/kotlin/com/getcode/opencode/internal/network/pollers/SwapPollerTest.kt rename to services/opencode/src/androidHostTest/kotlin/com/getcode/opencode/internal/network/pollers/SwapPollerTest.kt index 3a37cb8f77..ade9d37dda 100644 --- a/services/opencode/src/test/kotlin/com/getcode/opencode/internal/network/pollers/SwapPollerTest.kt +++ b/services/opencode/src/androidHostTest/kotlin/com/getcode/opencode/internal/network/pollers/SwapPollerTest.kt @@ -1,6 +1,6 @@ package com.getcode.opencode.internal.network.pollers -import com.getcode.ed25519.Ed25519 +import com.getcode.ed25519kmp.Ed25519 import com.getcode.opencode.internal.network.services.SwapService import com.getcode.opencode.internal.solana.model.SwapId import com.getcode.opencode.model.core.errors.GetSwapError diff --git a/services/opencode/src/test/kotlin/com/getcode/opencode/internal/network/services/CurrencyServiceTest.kt b/services/opencode/src/androidHostTest/kotlin/com/getcode/opencode/internal/network/services/CurrencyServiceTest.kt similarity index 99% rename from services/opencode/src/test/kotlin/com/getcode/opencode/internal/network/services/CurrencyServiceTest.kt rename to services/opencode/src/androidHostTest/kotlin/com/getcode/opencode/internal/network/services/CurrencyServiceTest.kt index 471001af39..38e141b3c6 100644 --- a/services/opencode/src/test/kotlin/com/getcode/opencode/internal/network/services/CurrencyServiceTest.kt +++ b/services/opencode/src/androidHostTest/kotlin/com/getcode/opencode/internal/network/services/CurrencyServiceTest.kt @@ -2,7 +2,7 @@ package com.getcode.opencode.internal.network.services import com.codeinc.opencode.gen.common.v1.Model import com.codeinc.opencode.gen.currency.v1.OcpCurrencyService as CurrencyProto -import com.getcode.ed25519.Ed25519 +import com.getcode.ed25519kmp.Ed25519 import com.getcode.opencode.internal.domain.mapping.HistoricalMintDataMapper import com.getcode.opencode.internal.domain.mapping.LiveMintDataMapper import com.getcode.opencode.internal.domain.mapping.MintMapper diff --git a/services/opencode/src/test/kotlin/com/getcode/opencode/internal/proto/ProtoWireFormatTest.kt b/services/opencode/src/androidHostTest/kotlin/com/getcode/opencode/internal/proto/ProtoWireFormatTest.kt similarity index 100% rename from services/opencode/src/test/kotlin/com/getcode/opencode/internal/proto/ProtoWireFormatTest.kt rename to services/opencode/src/androidHostTest/kotlin/com/getcode/opencode/internal/proto/ProtoWireFormatTest.kt diff --git a/services/opencode/src/test/kotlin/com/getcode/opencode/internal/solana/ShortVecTest.kt b/services/opencode/src/androidHostTest/kotlin/com/getcode/opencode/internal/solana/ShortVecTest.kt similarity index 100% rename from services/opencode/src/test/kotlin/com/getcode/opencode/internal/solana/ShortVecTest.kt rename to services/opencode/src/androidHostTest/kotlin/com/getcode/opencode/internal/solana/ShortVecTest.kt diff --git a/services/opencode/src/test/kotlin/com/getcode/opencode/internal/solana/extensions/PdaDerivationTest.kt b/services/opencode/src/androidHostTest/kotlin/com/getcode/opencode/internal/solana/extensions/PdaDerivationTest.kt similarity index 99% rename from services/opencode/src/test/kotlin/com/getcode/opencode/internal/solana/extensions/PdaDerivationTest.kt rename to services/opencode/src/androidHostTest/kotlin/com/getcode/opencode/internal/solana/extensions/PdaDerivationTest.kt index c199c269c9..df17956491 100644 --- a/services/opencode/src/test/kotlin/com/getcode/opencode/internal/solana/extensions/PdaDerivationTest.kt +++ b/services/opencode/src/androidHostTest/kotlin/com/getcode/opencode/internal/solana/extensions/PdaDerivationTest.kt @@ -1,6 +1,6 @@ package com.getcode.opencode.internal.solana.extensions -import com.getcode.ed25519.Ed25519 +import com.getcode.ed25519kmp.Ed25519 import com.getcode.solana.keys.Mint import com.getcode.solana.keys.PublicKey import com.getcode.vendor.Base58 diff --git a/services/opencode/src/test/kotlin/com/getcode/opencode/internal/solana/extensions/UInt16Test.kt b/services/opencode/src/androidHostTest/kotlin/com/getcode/opencode/internal/solana/extensions/UInt16Test.kt similarity index 100% rename from services/opencode/src/test/kotlin/com/getcode/opencode/internal/solana/extensions/UInt16Test.kt rename to services/opencode/src/androidHostTest/kotlin/com/getcode/opencode/internal/solana/extensions/UInt16Test.kt diff --git a/services/opencode/src/test/kotlin/com/getcode/opencode/internal/solana/model/CoinbaseStablecoinPoolAccountTest.kt b/services/opencode/src/androidHostTest/kotlin/com/getcode/opencode/internal/solana/model/CoinbaseStablecoinPoolAccountTest.kt similarity index 100% rename from services/opencode/src/test/kotlin/com/getcode/opencode/internal/solana/model/CoinbaseStablecoinPoolAccountTest.kt rename to services/opencode/src/androidHostTest/kotlin/com/getcode/opencode/internal/solana/model/CoinbaseStablecoinPoolAccountTest.kt diff --git a/services/opencode/src/test/kotlin/com/getcode/opencode/internal/solana/programs/CoinbaseStableSwapperProgramTest.kt b/services/opencode/src/androidHostTest/kotlin/com/getcode/opencode/internal/solana/programs/CoinbaseStableSwapperProgramTest.kt similarity index 100% rename from services/opencode/src/test/kotlin/com/getcode/opencode/internal/solana/programs/CoinbaseStableSwapperProgramTest.kt rename to services/opencode/src/androidHostTest/kotlin/com/getcode/opencode/internal/solana/programs/CoinbaseStableSwapperProgramTest.kt diff --git a/services/opencode/src/test/kotlin/com/getcode/opencode/internal/solana/programs/CurrencyCreatorProgramTest.kt b/services/opencode/src/androidHostTest/kotlin/com/getcode/opencode/internal/solana/programs/CurrencyCreatorProgramTest.kt similarity index 100% rename from services/opencode/src/test/kotlin/com/getcode/opencode/internal/solana/programs/CurrencyCreatorProgramTest.kt rename to services/opencode/src/androidHostTest/kotlin/com/getcode/opencode/internal/solana/programs/CurrencyCreatorProgramTest.kt diff --git a/services/opencode/src/test/kotlin/com/getcode/opencode/internal/solana/programs/ProgramAddressesTest.kt b/services/opencode/src/androidHostTest/kotlin/com/getcode/opencode/internal/solana/programs/ProgramAddressesTest.kt similarity index 100% rename from services/opencode/src/test/kotlin/com/getcode/opencode/internal/solana/programs/ProgramAddressesTest.kt rename to services/opencode/src/androidHostTest/kotlin/com/getcode/opencode/internal/solana/programs/ProgramAddressesTest.kt diff --git a/services/opencode/src/test/kotlin/com/getcode/opencode/internal/solana/programs/SysVarTest.kt b/services/opencode/src/androidHostTest/kotlin/com/getcode/opencode/internal/solana/programs/SysVarTest.kt similarity index 100% rename from services/opencode/src/test/kotlin/com/getcode/opencode/internal/solana/programs/SysVarTest.kt rename to services/opencode/src/androidHostTest/kotlin/com/getcode/opencode/internal/solana/programs/SysVarTest.kt diff --git a/services/opencode/src/test/kotlin/com/getcode/opencode/internal/solana/programs/VirtualMachineProgramTest.kt b/services/opencode/src/androidHostTest/kotlin/com/getcode/opencode/internal/solana/programs/VirtualMachineProgramTest.kt similarity index 100% rename from services/opencode/src/test/kotlin/com/getcode/opencode/internal/solana/programs/VirtualMachineProgramTest.kt rename to services/opencode/src/androidHostTest/kotlin/com/getcode/opencode/internal/solana/programs/VirtualMachineProgramTest.kt diff --git a/services/opencode/src/test/kotlin/com/getcode/opencode/internal/transactors/ClaimValidationTest.kt b/services/opencode/src/androidHostTest/kotlin/com/getcode/opencode/internal/transactors/ClaimValidationTest.kt similarity index 100% rename from services/opencode/src/test/kotlin/com/getcode/opencode/internal/transactors/ClaimValidationTest.kt rename to services/opencode/src/androidHostTest/kotlin/com/getcode/opencode/internal/transactors/ClaimValidationTest.kt diff --git a/services/opencode/src/test/kotlin/com/getcode/opencode/internal/transactors/GiveBillTransactorTest.kt b/services/opencode/src/androidHostTest/kotlin/com/getcode/opencode/internal/transactors/GiveBillTransactorTest.kt similarity index 100% rename from services/opencode/src/test/kotlin/com/getcode/opencode/internal/transactors/GiveBillTransactorTest.kt rename to services/opencode/src/androidHostTest/kotlin/com/getcode/opencode/internal/transactors/GiveBillTransactorTest.kt diff --git a/services/opencode/src/test/kotlin/com/getcode/opencode/internal/transactors/GrabBillTransactorTest.kt b/services/opencode/src/androidHostTest/kotlin/com/getcode/opencode/internal/transactors/GrabBillTransactorTest.kt similarity index 100% rename from services/opencode/src/test/kotlin/com/getcode/opencode/internal/transactors/GrabBillTransactorTest.kt rename to services/opencode/src/androidHostTest/kotlin/com/getcode/opencode/internal/transactors/GrabBillTransactorTest.kt diff --git a/services/opencode/src/test/kotlin/com/getcode/opencode/internal/transactors/ReceiveGiftCardTransactorTest.kt b/services/opencode/src/androidHostTest/kotlin/com/getcode/opencode/internal/transactors/ReceiveGiftCardTransactorTest.kt similarity index 100% rename from services/opencode/src/test/kotlin/com/getcode/opencode/internal/transactors/ReceiveGiftCardTransactorTest.kt rename to services/opencode/src/androidHostTest/kotlin/com/getcode/opencode/internal/transactors/ReceiveGiftCardTransactorTest.kt diff --git a/services/opencode/src/test/kotlin/com/getcode/opencode/internal/transactors/SendGiftCardTransactorTest.kt b/services/opencode/src/androidHostTest/kotlin/com/getcode/opencode/internal/transactors/SendGiftCardTransactorTest.kt similarity index 100% rename from services/opencode/src/test/kotlin/com/getcode/opencode/internal/transactors/SendGiftCardTransactorTest.kt rename to services/opencode/src/androidHostTest/kotlin/com/getcode/opencode/internal/transactors/SendGiftCardTransactorTest.kt diff --git a/services/opencode/src/test/kotlin/com/getcode/opencode/model/core/OpenCodePayloadTest.kt b/services/opencode/src/androidHostTest/kotlin/com/getcode/opencode/model/core/OpenCodePayloadTest.kt similarity index 100% rename from services/opencode/src/test/kotlin/com/getcode/opencode/model/core/OpenCodePayloadTest.kt rename to services/opencode/src/androidHostTest/kotlin/com/getcode/opencode/model/core/OpenCodePayloadTest.kt diff --git a/services/opencode/src/test/kotlin/com/getcode/opencode/model/core/errors/SodiumErrorTest.kt b/services/opencode/src/androidHostTest/kotlin/com/getcode/opencode/model/core/errors/SodiumErrorTest.kt similarity index 100% rename from services/opencode/src/test/kotlin/com/getcode/opencode/model/core/errors/SodiumErrorTest.kt rename to services/opencode/src/androidHostTest/kotlin/com/getcode/opencode/model/core/errors/SodiumErrorTest.kt diff --git a/services/opencode/src/test/kotlin/com/getcode/opencode/model/core/errors/SubmitIntentErrorTest.kt b/services/opencode/src/androidHostTest/kotlin/com/getcode/opencode/model/core/errors/SubmitIntentErrorTest.kt similarity index 100% rename from services/opencode/src/test/kotlin/com/getcode/opencode/model/core/errors/SubmitIntentErrorTest.kt rename to services/opencode/src/androidHostTest/kotlin/com/getcode/opencode/model/core/errors/SubmitIntentErrorTest.kt diff --git a/services/opencode/src/test/kotlin/com/getcode/opencode/model/core/errors/SwapErrorTest.kt b/services/opencode/src/androidHostTest/kotlin/com/getcode/opencode/model/core/errors/SwapErrorTest.kt similarity index 100% rename from services/opencode/src/test/kotlin/com/getcode/opencode/model/core/errors/SwapErrorTest.kt rename to services/opencode/src/androidHostTest/kotlin/com/getcode/opencode/model/core/errors/SwapErrorTest.kt diff --git a/services/opencode/src/test/kotlin/com/getcode/opencode/model/financial/DistributionTest.kt b/services/opencode/src/androidHostTest/kotlin/com/getcode/opencode/model/financial/DistributionTest.kt similarity index 100% rename from services/opencode/src/test/kotlin/com/getcode/opencode/model/financial/DistributionTest.kt rename to services/opencode/src/androidHostTest/kotlin/com/getcode/opencode/model/financial/DistributionTest.kt diff --git a/services/opencode/src/test/kotlin/com/getcode/opencode/model/financial/FeeTest.kt b/services/opencode/src/androidHostTest/kotlin/com/getcode/opencode/model/financial/FeeTest.kt similarity index 100% rename from services/opencode/src/test/kotlin/com/getcode/opencode/model/financial/FeeTest.kt rename to services/opencode/src/androidHostTest/kotlin/com/getcode/opencode/model/financial/FeeTest.kt diff --git a/services/opencode/src/test/kotlin/com/getcode/opencode/model/financial/FiatTest.kt b/services/opencode/src/androidHostTest/kotlin/com/getcode/opencode/model/financial/FiatTest.kt similarity index 100% rename from services/opencode/src/test/kotlin/com/getcode/opencode/model/financial/FiatTest.kt rename to services/opencode/src/androidHostTest/kotlin/com/getcode/opencode/model/financial/FiatTest.kt diff --git a/services/opencode/src/test/kotlin/com/getcode/opencode/model/financial/FiatTests.kt b/services/opencode/src/androidHostTest/kotlin/com/getcode/opencode/model/financial/FiatTests.kt similarity index 100% rename from services/opencode/src/test/kotlin/com/getcode/opencode/model/financial/FiatTests.kt rename to services/opencode/src/androidHostTest/kotlin/com/getcode/opencode/model/financial/FiatTests.kt diff --git a/services/opencode/src/test/kotlin/com/getcode/opencode/model/financial/HistoricalMintDataTest.kt b/services/opencode/src/androidHostTest/kotlin/com/getcode/opencode/model/financial/HistoricalMintDataTest.kt similarity index 100% rename from services/opencode/src/test/kotlin/com/getcode/opencode/model/financial/HistoricalMintDataTest.kt rename to services/opencode/src/androidHostTest/kotlin/com/getcode/opencode/model/financial/HistoricalMintDataTest.kt diff --git a/services/opencode/src/test/kotlin/com/getcode/opencode/model/financial/LaunchpadSellFeeTest.kt b/services/opencode/src/androidHostTest/kotlin/com/getcode/opencode/model/financial/LaunchpadSellFeeTest.kt similarity index 100% rename from services/opencode/src/test/kotlin/com/getcode/opencode/model/financial/LaunchpadSellFeeTest.kt rename to services/opencode/src/androidHostTest/kotlin/com/getcode/opencode/model/financial/LaunchpadSellFeeTest.kt diff --git a/services/opencode/src/test/kotlin/com/getcode/opencode/model/financial/LimitsTest.kt b/services/opencode/src/androidHostTest/kotlin/com/getcode/opencode/model/financial/LimitsTest.kt similarity index 100% rename from services/opencode/src/test/kotlin/com/getcode/opencode/model/financial/LimitsTest.kt rename to services/opencode/src/androidHostTest/kotlin/com/getcode/opencode/model/financial/LimitsTest.kt diff --git a/services/opencode/src/test/kotlin/com/getcode/opencode/model/financial/LocalFiatTest.kt b/services/opencode/src/androidHostTest/kotlin/com/getcode/opencode/model/financial/LocalFiatTest.kt similarity index 100% rename from services/opencode/src/test/kotlin/com/getcode/opencode/model/financial/LocalFiatTest.kt rename to services/opencode/src/androidHostTest/kotlin/com/getcode/opencode/model/financial/LocalFiatTest.kt diff --git a/services/opencode/src/test/kotlin/com/getcode/opencode/model/financial/MintMetadataTest.kt b/services/opencode/src/androidHostTest/kotlin/com/getcode/opencode/model/financial/MintMetadataTest.kt similarity index 100% rename from services/opencode/src/test/kotlin/com/getcode/opencode/model/financial/MintMetadataTest.kt rename to services/opencode/src/androidHostTest/kotlin/com/getcode/opencode/model/financial/MintMetadataTest.kt diff --git a/services/opencode/src/test/kotlin/com/getcode/opencode/model/financial/RateTest.kt b/services/opencode/src/androidHostTest/kotlin/com/getcode/opencode/model/financial/RateTest.kt similarity index 100% rename from services/opencode/src/test/kotlin/com/getcode/opencode/model/financial/RateTest.kt rename to services/opencode/src/androidHostTest/kotlin/com/getcode/opencode/model/financial/RateTest.kt diff --git a/services/opencode/src/test/kotlin/com/getcode/opencode/model/transactions/SwapMetadataTest.kt b/services/opencode/src/androidHostTest/kotlin/com/getcode/opencode/model/transactions/SwapMetadataTest.kt similarity index 100% rename from services/opencode/src/test/kotlin/com/getcode/opencode/model/transactions/SwapMetadataTest.kt rename to services/opencode/src/androidHostTest/kotlin/com/getcode/opencode/model/transactions/SwapMetadataTest.kt diff --git a/services/opencode/src/test/kotlin/com/getcode/opencode/solana/CompactMessageVectorTest.kt b/services/opencode/src/androidHostTest/kotlin/com/getcode/opencode/solana/CompactMessageVectorTest.kt similarity index 100% rename from services/opencode/src/test/kotlin/com/getcode/opencode/solana/CompactMessageVectorTest.kt rename to services/opencode/src/androidHostTest/kotlin/com/getcode/opencode/solana/CompactMessageVectorTest.kt diff --git a/services/opencode/src/test/kotlin/com/getcode/opencode/solana/InstructionIntegrationTest.kt b/services/opencode/src/androidHostTest/kotlin/com/getcode/opencode/solana/InstructionIntegrationTest.kt similarity index 100% rename from services/opencode/src/test/kotlin/com/getcode/opencode/solana/InstructionIntegrationTest.kt rename to services/opencode/src/androidHostTest/kotlin/com/getcode/opencode/solana/InstructionIntegrationTest.kt diff --git a/services/opencode/src/test/kotlin/com/getcode/opencode/solana/MultiPaymentIntentVectorTest.kt b/services/opencode/src/androidHostTest/kotlin/com/getcode/opencode/solana/MultiPaymentIntentVectorTest.kt similarity index 99% rename from services/opencode/src/test/kotlin/com/getcode/opencode/solana/MultiPaymentIntentVectorTest.kt rename to services/opencode/src/androidHostTest/kotlin/com/getcode/opencode/solana/MultiPaymentIntentVectorTest.kt index 65d18b2fa0..9d043be112 100644 --- a/services/opencode/src/test/kotlin/com/getcode/opencode/solana/MultiPaymentIntentVectorTest.kt +++ b/services/opencode/src/androidHostTest/kotlin/com/getcode/opencode/solana/MultiPaymentIntentVectorTest.kt @@ -3,7 +3,7 @@ package com.getcode.opencode.solana import com.codeinc.opencode.gen.currency.v1.coreMintFiatExchangeRate import com.codeinc.opencode.gen.currency.v1.verifiedCoreMintFiatExchangeRate import com.getcode.crypt.DerivedKey -import com.getcode.ed25519.Ed25519 +import com.getcode.ed25519kmp.Ed25519 import com.getcode.opencode.internal.manager.VerifiedState import com.getcode.opencode.internal.network.api.intents.IntentMultiTransfer import com.getcode.opencode.model.accounts.AccountCluster diff --git a/services/opencode/src/test/kotlin/com/getcode/opencode/solana/SolanaMessageVectorTest.kt b/services/opencode/src/androidHostTest/kotlin/com/getcode/opencode/solana/SolanaMessageVectorTest.kt similarity index 100% rename from services/opencode/src/test/kotlin/com/getcode/opencode/solana/SolanaMessageVectorTest.kt rename to services/opencode/src/androidHostTest/kotlin/com/getcode/opencode/solana/SolanaMessageVectorTest.kt diff --git a/services/opencode/src/test/kotlin/com/getcode/opencode/solana/SolanaTransactionLookupTableTest.kt b/services/opencode/src/androidHostTest/kotlin/com/getcode/opencode/solana/SolanaTransactionLookupTableTest.kt similarity index 100% rename from services/opencode/src/test/kotlin/com/getcode/opencode/solana/SolanaTransactionLookupTableTest.kt rename to services/opencode/src/androidHostTest/kotlin/com/getcode/opencode/solana/SolanaTransactionLookupTableTest.kt diff --git a/services/opencode/src/test/kotlin/com/getcode/opencode/solana/VersionedMessageV0Test.kt b/services/opencode/src/androidHostTest/kotlin/com/getcode/opencode/solana/VersionedMessageV0Test.kt similarity index 100% rename from services/opencode/src/test/kotlin/com/getcode/opencode/solana/VersionedMessageV0Test.kt rename to services/opencode/src/androidHostTest/kotlin/com/getcode/opencode/solana/VersionedMessageV0Test.kt diff --git a/services/opencode/src/test/kotlin/com/getcode/opencode/solana/swap/ClientBuiltDepositSwapV2Test.kt b/services/opencode/src/androidHostTest/kotlin/com/getcode/opencode/solana/swap/ClientBuiltDepositSwapV2Test.kt similarity index 100% rename from services/opencode/src/test/kotlin/com/getcode/opencode/solana/swap/ClientBuiltDepositSwapV2Test.kt rename to services/opencode/src/androidHostTest/kotlin/com/getcode/opencode/solana/swap/ClientBuiltDepositSwapV2Test.kt diff --git a/services/opencode/src/test/kotlin/com/getcode/opencode/solana/swap/CoinbaseStablecoinDepositTransactionTest.kt b/services/opencode/src/androidHostTest/kotlin/com/getcode/opencode/solana/swap/CoinbaseStablecoinDepositTransactionTest.kt similarity index 100% rename from services/opencode/src/test/kotlin/com/getcode/opencode/solana/swap/CoinbaseStablecoinDepositTransactionTest.kt rename to services/opencode/src/androidHostTest/kotlin/com/getcode/opencode/solana/swap/CoinbaseStablecoinDepositTransactionTest.kt diff --git a/services/opencode/src/test/kotlin/com/getcode/opencode/solana/swap/CoinbaseStablecoinSwapperInstructionsTest.kt b/services/opencode/src/androidHostTest/kotlin/com/getcode/opencode/solana/swap/CoinbaseStablecoinSwapperInstructionsTest.kt similarity index 100% rename from services/opencode/src/test/kotlin/com/getcode/opencode/solana/swap/CoinbaseStablecoinSwapperInstructionsTest.kt rename to services/opencode/src/androidHostTest/kotlin/com/getcode/opencode/solana/swap/CoinbaseStablecoinSwapperInstructionsTest.kt diff --git a/services/opencode/src/test/kotlin/com/getcode/opencode/solana/swap/ExistingCurrencyBuyFeeTest.kt b/services/opencode/src/androidHostTest/kotlin/com/getcode/opencode/solana/swap/ExistingCurrencyBuyFeeTest.kt similarity index 99% rename from services/opencode/src/test/kotlin/com/getcode/opencode/solana/swap/ExistingCurrencyBuyFeeTest.kt rename to services/opencode/src/androidHostTest/kotlin/com/getcode/opencode/solana/swap/ExistingCurrencyBuyFeeTest.kt index 5f01ae02b9..c1ec51f146 100644 --- a/services/opencode/src/test/kotlin/com/getcode/opencode/solana/swap/ExistingCurrencyBuyFeeTest.kt +++ b/services/opencode/src/androidHostTest/kotlin/com/getcode/opencode/solana/swap/ExistingCurrencyBuyFeeTest.kt @@ -1,6 +1,6 @@ package com.getcode.opencode.solana.swap -import com.getcode.ed25519.Ed25519.KeyPair +import com.getcode.ed25519kmp.Ed25519.KeyPair import com.getcode.opencode.internal.manager.VerifiedState import com.getcode.opencode.internal.network.api.intents.IntentStatefulSwap import com.getcode.opencode.internal.solana.model.SwapId diff --git a/services/opencode/src/test/kotlin/com/getcode/opencode/solana/swap/StablecoinSwapVersionRequestTest.kt b/services/opencode/src/androidHostTest/kotlin/com/getcode/opencode/solana/swap/StablecoinSwapVersionRequestTest.kt similarity index 98% rename from services/opencode/src/test/kotlin/com/getcode/opencode/solana/swap/StablecoinSwapVersionRequestTest.kt rename to services/opencode/src/androidHostTest/kotlin/com/getcode/opencode/solana/swap/StablecoinSwapVersionRequestTest.kt index ad8168edc2..4928b382dd 100644 --- a/services/opencode/src/test/kotlin/com/getcode/opencode/solana/swap/StablecoinSwapVersionRequestTest.kt +++ b/services/opencode/src/androidHostTest/kotlin/com/getcode/opencode/solana/swap/StablecoinSwapVersionRequestTest.kt @@ -1,6 +1,6 @@ package com.getcode.opencode.solana.swap -import com.getcode.ed25519.Ed25519.KeyPair +import com.getcode.ed25519kmp.Ed25519.KeyPair import com.getcode.opencode.internal.network.api.intents.IntentStatelessSwap import com.getcode.opencode.internal.network.extensions.stablecoinParams import com.getcode.opencode.internal.solana.model.SwapId diff --git a/services/opencode/src/test/kotlin/com/getcode/opencode/solana/swap/StatelessSwapInstructionsTest.kt b/services/opencode/src/androidHostTest/kotlin/com/getcode/opencode/solana/swap/StatelessSwapInstructionsTest.kt similarity index 100% rename from services/opencode/src/test/kotlin/com/getcode/opencode/solana/swap/StatelessSwapInstructionsTest.kt rename to services/opencode/src/androidHostTest/kotlin/com/getcode/opencode/solana/swap/StatelessSwapInstructionsTest.kt diff --git a/services/opencode/src/test/kotlin/com/getcode/opencode/tests/PublicKey.kt b/services/opencode/src/androidHostTest/kotlin/com/getcode/opencode/tests/PublicKey.kt similarity index 100% rename from services/opencode/src/test/kotlin/com/getcode/opencode/tests/PublicKey.kt rename to services/opencode/src/androidHostTest/kotlin/com/getcode/opencode/tests/PublicKey.kt diff --git a/services/opencode/src/test/kotlin/com/getcode/opencode/utils/DoubleExtensionsTest.kt b/services/opencode/src/androidHostTest/kotlin/com/getcode/opencode/utils/DoubleExtensionsTest.kt similarity index 100% rename from services/opencode/src/test/kotlin/com/getcode/opencode/utils/DoubleExtensionsTest.kt rename to services/opencode/src/androidHostTest/kotlin/com/getcode/opencode/utils/DoubleExtensionsTest.kt diff --git a/services/opencode/src/test/kotlin/com/getcode/opencode/utils/LongTest.kt b/services/opencode/src/androidHostTest/kotlin/com/getcode/opencode/utils/LongTest.kt similarity index 100% rename from services/opencode/src/test/kotlin/com/getcode/opencode/utils/LongTest.kt rename to services/opencode/src/androidHostTest/kotlin/com/getcode/opencode/utils/LongTest.kt diff --git a/services/opencode/src/test/kotlin/com/getcode/opencode/utils/MapsTest.kt b/services/opencode/src/androidHostTest/kotlin/com/getcode/opencode/utils/MapsTest.kt similarity index 100% rename from services/opencode/src/test/kotlin/com/getcode/opencode/utils/MapsTest.kt rename to services/opencode/src/androidHostTest/kotlin/com/getcode/opencode/utils/MapsTest.kt diff --git a/services/opencode/src/test/kotlin/com/getcode/opencode/utils/StringExtensionsTest.kt b/services/opencode/src/androidHostTest/kotlin/com/getcode/opencode/utils/StringExtensionsTest.kt similarity index 100% rename from services/opencode/src/test/kotlin/com/getcode/opencode/utils/StringExtensionsTest.kt rename to services/opencode/src/androidHostTest/kotlin/com/getcode/opencode/utils/StringExtensionsTest.kt diff --git a/services/opencode/src/test/kotlin/com/getcode/opencode/utils/ThrowableExtensionsTest.kt b/services/opencode/src/androidHostTest/kotlin/com/getcode/opencode/utils/ThrowableExtensionsTest.kt similarity index 100% rename from services/opencode/src/test/kotlin/com/getcode/opencode/utils/ThrowableExtensionsTest.kt rename to services/opencode/src/androidHostTest/kotlin/com/getcode/opencode/utils/ThrowableExtensionsTest.kt diff --git a/services/opencode/src/test/resources/compact_message.json b/services/opencode/src/androidHostTest/resources/compact_message.json similarity index 100% rename from services/opencode/src/test/resources/compact_message.json rename to services/opencode/src/androidHostTest/resources/compact_message.json diff --git a/services/opencode/src/test/resources/multi_payment_intent.json b/services/opencode/src/androidHostTest/resources/multi_payment_intent.json similarity index 100% rename from services/opencode/src/test/resources/multi_payment_intent.json rename to services/opencode/src/androidHostTest/resources/multi_payment_intent.json diff --git a/services/opencode/src/test/resources/solana_message.json b/services/opencode/src/androidHostTest/resources/solana_message.json similarity index 100% rename from services/opencode/src/test/resources/solana_message.json rename to services/opencode/src/androidHostTest/resources/solana_message.json diff --git a/services/opencode/src/main/kotlin/com/getcode/opencode/ControllerFactory.kt b/services/opencode/src/androidMain/kotlin/com/getcode/opencode/ControllerFactory.kt similarity index 100% rename from services/opencode/src/main/kotlin/com/getcode/opencode/ControllerFactory.kt rename to services/opencode/src/androidMain/kotlin/com/getcode/opencode/ControllerFactory.kt diff --git a/services/opencode/src/main/kotlin/com/getcode/opencode/ExchangeFactory.kt b/services/opencode/src/androidMain/kotlin/com/getcode/opencode/ExchangeFactory.kt similarity index 100% rename from services/opencode/src/main/kotlin/com/getcode/opencode/ExchangeFactory.kt rename to services/opencode/src/androidMain/kotlin/com/getcode/opencode/ExchangeFactory.kt diff --git a/services/opencode/src/main/kotlin/com/getcode/opencode/NetworkFactory.kt b/services/opencode/src/androidMain/kotlin/com/getcode/opencode/NetworkFactory.kt similarity index 100% rename from services/opencode/src/main/kotlin/com/getcode/opencode/NetworkFactory.kt rename to services/opencode/src/androidMain/kotlin/com/getcode/opencode/NetworkFactory.kt diff --git a/services/opencode/src/main/kotlin/com/getcode/opencode/RepositoryFactory.kt b/services/opencode/src/androidMain/kotlin/com/getcode/opencode/RepositoryFactory.kt similarity index 100% rename from services/opencode/src/main/kotlin/com/getcode/opencode/RepositoryFactory.kt rename to services/opencode/src/androidMain/kotlin/com/getcode/opencode/RepositoryFactory.kt diff --git a/services/opencode/src/main/kotlin/com/getcode/opencode/inject/OpenCodeModule.kt b/services/opencode/src/androidMain/kotlin/com/getcode/opencode/inject/OpenCodeModule.kt similarity index 100% rename from services/opencode/src/main/kotlin/com/getcode/opencode/inject/OpenCodeModule.kt rename to services/opencode/src/androidMain/kotlin/com/getcode/opencode/inject/OpenCodeModule.kt diff --git a/services/opencode/src/main/kotlin/com/getcode/opencode/inject/SessionListenersModule.kt b/services/opencode/src/androidMain/kotlin/com/getcode/opencode/inject/SessionListenersModule.kt similarity index 100% rename from services/opencode/src/main/kotlin/com/getcode/opencode/inject/SessionListenersModule.kt rename to services/opencode/src/androidMain/kotlin/com/getcode/opencode/inject/SessionListenersModule.kt diff --git a/services/opencode/src/main/kotlin/com/getcode/opencode/inject/TransactorModule.kt b/services/opencode/src/androidMain/kotlin/com/getcode/opencode/inject/TransactorModule.kt similarity index 100% rename from services/opencode/src/main/kotlin/com/getcode/opencode/inject/TransactorModule.kt rename to services/opencode/src/androidMain/kotlin/com/getcode/opencode/inject/TransactorModule.kt diff --git a/services/opencode/src/androidMain/kotlin/com/getcode/opencode/internal/platform/ProcessLifecycle.android.kt b/services/opencode/src/androidMain/kotlin/com/getcode/opencode/internal/platform/ProcessLifecycle.android.kt new file mode 100644 index 0000000000..5b35bce979 --- /dev/null +++ b/services/opencode/src/androidMain/kotlin/com/getcode/opencode/internal/platform/ProcessLifecycle.android.kt @@ -0,0 +1,25 @@ +package com.getcode.opencode.internal.platform + +import android.os.Handler +import android.os.Looper +import androidx.lifecycle.DefaultLifecycleObserver +import androidx.lifecycle.LifecycleOwner +import androidx.lifecycle.ProcessLifecycleOwner + +internal actual fun observeProcessLifecycle( + immediateOnMain: Boolean, + onStart: () -> Unit, + onStop: () -> Unit, +) { + val observer = object : DefaultLifecycleObserver { + override fun onStart(owner: LifecycleOwner) = onStart() + override fun onStop(owner: LifecycleOwner) = onStop() + } + // LifecycleRegistry.addObserver rejects any thread but the main one. + val register = Runnable { ProcessLifecycleOwner.get().lifecycle.addObserver(observer) } + if (immediateOnMain && Looper.myLooper() == Looper.getMainLooper()) { + register.run() + } else { + Handler(Looper.getMainLooper()).post(register) + } +} diff --git a/services/opencode/src/androidMain/kotlin/com/getcode/opencode/model/core/ScanCodeEncoder.android.kt b/services/opencode/src/androidMain/kotlin/com/getcode/opencode/model/core/ScanCodeEncoder.android.kt new file mode 100644 index 0000000000..b788a36e57 --- /dev/null +++ b/services/opencode/src/androidMain/kotlin/com/getcode/opencode/model/core/ScanCodeEncoder.android.kt @@ -0,0 +1,5 @@ +package com.getcode.opencode.model.core + +import com.kik.scan.Scanner + +internal actual fun encodeScanCode(payload: ByteArray): ByteArray? = Scanner.encode(payload) diff --git a/services/opencode/src/main/res/drawable/ic_currency_dollar_active.xml b/services/opencode/src/androidMain/res/drawable/ic_currency_dollar_active.xml similarity index 100% rename from services/opencode/src/main/res/drawable/ic_currency_dollar_active.xml rename to services/opencode/src/androidMain/res/drawable/ic_currency_dollar_active.xml diff --git a/services/opencode/src/main/res/drawable/ic_currency_dollar_inactive.xml b/services/opencode/src/androidMain/res/drawable/ic_currency_dollar_inactive.xml similarity index 100% rename from services/opencode/src/main/res/drawable/ic_currency_dollar_inactive.xml rename to services/opencode/src/androidMain/res/drawable/ic_currency_dollar_inactive.xml diff --git a/services/opencode/src/main/res/drawable/ic_currency_xaf.xml b/services/opencode/src/androidMain/res/drawable/ic_currency_xaf.xml similarity index 100% rename from services/opencode/src/main/res/drawable/ic_currency_xaf.xml rename to services/opencode/src/androidMain/res/drawable/ic_currency_xaf.xml diff --git a/services/opencode/src/main/res/drawable/ic_currency_xof.xml b/services/opencode/src/androidMain/res/drawable/ic_currency_xof.xml similarity index 100% rename from services/opencode/src/main/res/drawable/ic_currency_xof.xml rename to services/opencode/src/androidMain/res/drawable/ic_currency_xof.xml diff --git a/services/opencode/src/main/kotlin/com/getcode/opencode/ManagerFactory.kt b/services/opencode/src/commonMain/kotlin/com/getcode/opencode/ManagerFactory.kt similarity index 100% rename from services/opencode/src/main/kotlin/com/getcode/opencode/ManagerFactory.kt rename to services/opencode/src/commonMain/kotlin/com/getcode/opencode/ManagerFactory.kt diff --git a/services/opencode/src/main/kotlin/com/getcode/opencode/ProtocolConfig.kt b/services/opencode/src/commonMain/kotlin/com/getcode/opencode/ProtocolConfig.kt similarity index 100% rename from services/opencode/src/main/kotlin/com/getcode/opencode/ProtocolConfig.kt rename to services/opencode/src/commonMain/kotlin/com/getcode/opencode/ProtocolConfig.kt diff --git a/services/opencode/src/main/kotlin/com/getcode/opencode/controllers/AccountController.kt b/services/opencode/src/commonMain/kotlin/com/getcode/opencode/controllers/AccountController.kt similarity index 100% rename from services/opencode/src/main/kotlin/com/getcode/opencode/controllers/AccountController.kt rename to services/opencode/src/commonMain/kotlin/com/getcode/opencode/controllers/AccountController.kt diff --git a/services/opencode/src/main/kotlin/com/getcode/opencode/controllers/BalanceController.kt b/services/opencode/src/commonMain/kotlin/com/getcode/opencode/controllers/BalanceController.kt similarity index 100% rename from services/opencode/src/main/kotlin/com/getcode/opencode/controllers/BalanceController.kt rename to services/opencode/src/commonMain/kotlin/com/getcode/opencode/controllers/BalanceController.kt diff --git a/services/opencode/src/main/kotlin/com/getcode/opencode/controllers/CurrencyController.kt b/services/opencode/src/commonMain/kotlin/com/getcode/opencode/controllers/CurrencyController.kt similarity index 100% rename from services/opencode/src/main/kotlin/com/getcode/opencode/controllers/CurrencyController.kt rename to services/opencode/src/commonMain/kotlin/com/getcode/opencode/controllers/CurrencyController.kt diff --git a/services/opencode/src/main/kotlin/com/getcode/opencode/controllers/MessagingController.kt b/services/opencode/src/commonMain/kotlin/com/getcode/opencode/controllers/MessagingController.kt similarity index 99% rename from services/opencode/src/main/kotlin/com/getcode/opencode/controllers/MessagingController.kt rename to services/opencode/src/commonMain/kotlin/com/getcode/opencode/controllers/MessagingController.kt index d543271c26..bf7eca2735 100644 --- a/services/opencode/src/main/kotlin/com/getcode/opencode/controllers/MessagingController.kt +++ b/services/opencode/src/commonMain/kotlin/com/getcode/opencode/controllers/MessagingController.kt @@ -1,7 +1,7 @@ package com.getcode.opencode.controllers import com.codeinc.opencode.gen.messaging.v1.OcpMessagingService -import com.getcode.ed25519.Ed25519.KeyPair +import com.getcode.ed25519kmp.Ed25519.KeyPair import com.getcode.opencode.internal.domain.mapping.BillCustomizationMapper import com.getcode.opencode.internal.domain.mapping.HolderMetricsMapper import com.getcode.opencode.internal.domain.mapping.MarketCapMetricsMapper diff --git a/services/opencode/src/main/kotlin/com/getcode/opencode/controllers/TokenController.kt b/services/opencode/src/commonMain/kotlin/com/getcode/opencode/controllers/TokenController.kt similarity index 100% rename from services/opencode/src/main/kotlin/com/getcode/opencode/controllers/TokenController.kt rename to services/opencode/src/commonMain/kotlin/com/getcode/opencode/controllers/TokenController.kt diff --git a/services/opencode/src/main/kotlin/com/getcode/opencode/controllers/TransactionController.kt b/services/opencode/src/commonMain/kotlin/com/getcode/opencode/controllers/TransactionController.kt similarity index 99% rename from services/opencode/src/main/kotlin/com/getcode/opencode/controllers/TransactionController.kt rename to services/opencode/src/commonMain/kotlin/com/getcode/opencode/controllers/TransactionController.kt index ce500e641e..092e741e4c 100644 --- a/services/opencode/src/main/kotlin/com/getcode/opencode/controllers/TransactionController.kt +++ b/services/opencode/src/commonMain/kotlin/com/getcode/opencode/controllers/TransactionController.kt @@ -1,6 +1,6 @@ package com.getcode.opencode.controllers -import com.getcode.ed25519.Ed25519.KeyPair +import com.getcode.ed25519kmp.Ed25519.KeyPair import com.getcode.opencode.exchange.VerifiedFiat import com.getcode.opencode.exchange.valuedAt import com.getcode.opencode.internal.manager.VerifiedState diff --git a/services/opencode/src/main/kotlin/com/getcode/opencode/controllers/TransactionOperations.kt b/services/opencode/src/commonMain/kotlin/com/getcode/opencode/controllers/TransactionOperations.kt similarity index 100% rename from services/opencode/src/main/kotlin/com/getcode/opencode/controllers/TransactionOperations.kt rename to services/opencode/src/commonMain/kotlin/com/getcode/opencode/controllers/TransactionOperations.kt diff --git a/services/opencode/src/main/kotlin/com/getcode/opencode/events/Events.kt b/services/opencode/src/commonMain/kotlin/com/getcode/opencode/events/Events.kt similarity index 100% rename from services/opencode/src/main/kotlin/com/getcode/opencode/events/Events.kt rename to services/opencode/src/commonMain/kotlin/com/getcode/opencode/events/Events.kt diff --git a/services/opencode/src/main/kotlin/com/getcode/opencode/exchange/Exchange.kt b/services/opencode/src/commonMain/kotlin/com/getcode/opencode/exchange/Exchange.kt similarity index 100% rename from services/opencode/src/main/kotlin/com/getcode/opencode/exchange/Exchange.kt rename to services/opencode/src/commonMain/kotlin/com/getcode/opencode/exchange/Exchange.kt diff --git a/services/opencode/src/main/kotlin/com/getcode/opencode/exchange/VerifiedFiatCalculator.kt b/services/opencode/src/commonMain/kotlin/com/getcode/opencode/exchange/VerifiedFiatCalculator.kt similarity index 91% rename from services/opencode/src/main/kotlin/com/getcode/opencode/exchange/VerifiedFiatCalculator.kt rename to services/opencode/src/commonMain/kotlin/com/getcode/opencode/exchange/VerifiedFiatCalculator.kt index 39d46804fc..3e9a656a4c 100644 --- a/services/opencode/src/main/kotlin/com/getcode/opencode/exchange/VerifiedFiatCalculator.kt +++ b/services/opencode/src/commonMain/kotlin/com/getcode/opencode/exchange/VerifiedFiatCalculator.kt @@ -1,6 +1,6 @@ package com.getcode.opencode.exchange -import android.os.Parcelable +import com.getcode.libs.parcelable.Parcelable import com.getcode.opencode.internal.manager.VerifiedState import com.getcode.opencode.model.financial.CurrencyCode import com.getcode.opencode.model.financial.Fiat @@ -8,8 +8,8 @@ import com.getcode.opencode.model.financial.LocalFiat import com.getcode.opencode.model.financial.Rate import com.getcode.opencode.model.financial.Token import com.getcode.solana.keys.Mint -import kotlinx.parcelize.IgnoredOnParcel -import kotlinx.parcelize.Parcelize +import com.getcode.libs.parcelable.IgnoredOnParcel +import com.getcode.libs.parcelable.Parcelize import kotlinx.serialization.Serializable import kotlinx.serialization.Transient diff --git a/services/opencode/src/main/kotlin/com/getcode/opencode/generators/GiftCardGenerator.kt b/services/opencode/src/commonMain/kotlin/com/getcode/opencode/generators/GiftCardGenerator.kt similarity index 100% rename from services/opencode/src/main/kotlin/com/getcode/opencode/generators/GiftCardGenerator.kt rename to services/opencode/src/commonMain/kotlin/com/getcode/opencode/generators/GiftCardGenerator.kt diff --git a/services/opencode/src/main/kotlin/com/getcode/opencode/generators/MnemonicGenerator.kt b/services/opencode/src/commonMain/kotlin/com/getcode/opencode/generators/MnemonicGenerator.kt similarity index 100% rename from services/opencode/src/main/kotlin/com/getcode/opencode/generators/MnemonicGenerator.kt rename to services/opencode/src/commonMain/kotlin/com/getcode/opencode/generators/MnemonicGenerator.kt diff --git a/services/opencode/src/main/kotlin/com/getcode/opencode/internal/annotations/OpenCodeManagedChannel.kt b/services/opencode/src/commonMain/kotlin/com/getcode/opencode/internal/annotations/OpenCodeManagedChannel.kt similarity index 100% rename from services/opencode/src/main/kotlin/com/getcode/opencode/internal/annotations/OpenCodeManagedChannel.kt rename to services/opencode/src/commonMain/kotlin/com/getcode/opencode/internal/annotations/OpenCodeManagedChannel.kt diff --git a/services/opencode/src/main/kotlin/com/getcode/opencode/internal/annotations/Protocol.kt b/services/opencode/src/commonMain/kotlin/com/getcode/opencode/internal/annotations/Protocol.kt similarity index 100% rename from services/opencode/src/main/kotlin/com/getcode/opencode/internal/annotations/Protocol.kt rename to services/opencode/src/commonMain/kotlin/com/getcode/opencode/internal/annotations/Protocol.kt diff --git a/services/opencode/src/main/kotlin/com/getcode/opencode/internal/bidi/BidirectionalStreamReference.kt b/services/opencode/src/commonMain/kotlin/com/getcode/opencode/internal/bidi/BidirectionalStreamReference.kt similarity index 100% rename from services/opencode/src/main/kotlin/com/getcode/opencode/internal/bidi/BidirectionalStreamReference.kt rename to services/opencode/src/commonMain/kotlin/com/getcode/opencode/internal/bidi/BidirectionalStreamReference.kt diff --git a/services/opencode/src/main/kotlin/com/getcode/opencode/internal/bidi/OpenStream.kt b/services/opencode/src/commonMain/kotlin/com/getcode/opencode/internal/bidi/OpenStream.kt similarity index 100% rename from services/opencode/src/main/kotlin/com/getcode/opencode/internal/bidi/OpenStream.kt rename to services/opencode/src/commonMain/kotlin/com/getcode/opencode/internal/bidi/OpenStream.kt diff --git a/services/opencode/src/main/kotlin/com/getcode/opencode/internal/bidi/OpenStreamForResult.kt b/services/opencode/src/commonMain/kotlin/com/getcode/opencode/internal/bidi/OpenStreamForResult.kt similarity index 100% rename from services/opencode/src/main/kotlin/com/getcode/opencode/internal/bidi/OpenStreamForResult.kt rename to services/opencode/src/commonMain/kotlin/com/getcode/opencode/internal/bidi/OpenStreamForResult.kt diff --git a/services/opencode/src/main/kotlin/com/getcode/opencode/internal/domain/mapping/BillCustomizationMapper.kt b/services/opencode/src/commonMain/kotlin/com/getcode/opencode/internal/domain/mapping/BillCustomizationMapper.kt similarity index 100% rename from services/opencode/src/main/kotlin/com/getcode/opencode/internal/domain/mapping/BillCustomizationMapper.kt rename to services/opencode/src/commonMain/kotlin/com/getcode/opencode/internal/domain/mapping/BillCustomizationMapper.kt diff --git a/services/opencode/src/main/kotlin/com/getcode/opencode/internal/domain/mapping/HistoricalMintDataMapper.kt b/services/opencode/src/commonMain/kotlin/com/getcode/opencode/internal/domain/mapping/HistoricalMintDataMapper.kt similarity index 100% rename from services/opencode/src/main/kotlin/com/getcode/opencode/internal/domain/mapping/HistoricalMintDataMapper.kt rename to services/opencode/src/commonMain/kotlin/com/getcode/opencode/internal/domain/mapping/HistoricalMintDataMapper.kt diff --git a/services/opencode/src/main/kotlin/com/getcode/opencode/internal/domain/mapping/HolderMetricsMapper.kt b/services/opencode/src/commonMain/kotlin/com/getcode/opencode/internal/domain/mapping/HolderMetricsMapper.kt similarity index 100% rename from services/opencode/src/main/kotlin/com/getcode/opencode/internal/domain/mapping/HolderMetricsMapper.kt rename to services/opencode/src/commonMain/kotlin/com/getcode/opencode/internal/domain/mapping/HolderMetricsMapper.kt diff --git a/services/opencode/src/main/kotlin/com/getcode/opencode/internal/domain/mapping/LaunchpadMetadataMapper.kt b/services/opencode/src/commonMain/kotlin/com/getcode/opencode/internal/domain/mapping/LaunchpadMetadataMapper.kt similarity index 100% rename from services/opencode/src/main/kotlin/com/getcode/opencode/internal/domain/mapping/LaunchpadMetadataMapper.kt rename to services/opencode/src/commonMain/kotlin/com/getcode/opencode/internal/domain/mapping/LaunchpadMetadataMapper.kt diff --git a/services/opencode/src/main/kotlin/com/getcode/opencode/internal/domain/mapping/LiveMintDataMapper.kt b/services/opencode/src/commonMain/kotlin/com/getcode/opencode/internal/domain/mapping/LiveMintDataMapper.kt similarity index 100% rename from services/opencode/src/main/kotlin/com/getcode/opencode/internal/domain/mapping/LiveMintDataMapper.kt rename to services/opencode/src/commonMain/kotlin/com/getcode/opencode/internal/domain/mapping/LiveMintDataMapper.kt diff --git a/services/opencode/src/main/kotlin/com/getcode/opencode/internal/domain/mapping/MarketCapMetricsMapper.kt b/services/opencode/src/commonMain/kotlin/com/getcode/opencode/internal/domain/mapping/MarketCapMetricsMapper.kt similarity index 100% rename from services/opencode/src/main/kotlin/com/getcode/opencode/internal/domain/mapping/MarketCapMetricsMapper.kt rename to services/opencode/src/commonMain/kotlin/com/getcode/opencode/internal/domain/mapping/MarketCapMetricsMapper.kt diff --git a/services/opencode/src/main/kotlin/com/getcode/opencode/internal/domain/mapping/MessageMapper.kt b/services/opencode/src/commonMain/kotlin/com/getcode/opencode/internal/domain/mapping/MessageMapper.kt similarity index 100% rename from services/opencode/src/main/kotlin/com/getcode/opencode/internal/domain/mapping/MessageMapper.kt rename to services/opencode/src/commonMain/kotlin/com/getcode/opencode/internal/domain/mapping/MessageMapper.kt diff --git a/services/opencode/src/main/kotlin/com/getcode/opencode/internal/domain/mapping/MintMapper.kt b/services/opencode/src/commonMain/kotlin/com/getcode/opencode/internal/domain/mapping/MintMapper.kt similarity index 100% rename from services/opencode/src/main/kotlin/com/getcode/opencode/internal/domain/mapping/MintMapper.kt rename to services/opencode/src/commonMain/kotlin/com/getcode/opencode/internal/domain/mapping/MintMapper.kt diff --git a/services/opencode/src/main/kotlin/com/getcode/opencode/internal/domain/mapping/OwnerBalanceMapper.kt b/services/opencode/src/commonMain/kotlin/com/getcode/opencode/internal/domain/mapping/OwnerBalanceMapper.kt similarity index 100% rename from services/opencode/src/main/kotlin/com/getcode/opencode/internal/domain/mapping/OwnerBalanceMapper.kt rename to services/opencode/src/commonMain/kotlin/com/getcode/opencode/internal/domain/mapping/OwnerBalanceMapper.kt diff --git a/services/opencode/src/main/kotlin/com/getcode/opencode/internal/domain/mapping/SocialLinkMapper.kt b/services/opencode/src/commonMain/kotlin/com/getcode/opencode/internal/domain/mapping/SocialLinkMapper.kt similarity index 100% rename from services/opencode/src/main/kotlin/com/getcode/opencode/internal/domain/mapping/SocialLinkMapper.kt rename to services/opencode/src/commonMain/kotlin/com/getcode/opencode/internal/domain/mapping/SocialLinkMapper.kt diff --git a/services/opencode/src/main/kotlin/com/getcode/opencode/internal/domain/mapping/SwapMetadataMapper.kt b/services/opencode/src/commonMain/kotlin/com/getcode/opencode/internal/domain/mapping/SwapMetadataMapper.kt similarity index 100% rename from services/opencode/src/main/kotlin/com/getcode/opencode/internal/domain/mapping/SwapMetadataMapper.kt rename to services/opencode/src/commonMain/kotlin/com/getcode/opencode/internal/domain/mapping/SwapMetadataMapper.kt diff --git a/services/opencode/src/main/kotlin/com/getcode/opencode/internal/domain/mapping/TransactionMetadataMapper.kt b/services/opencode/src/commonMain/kotlin/com/getcode/opencode/internal/domain/mapping/TransactionMetadataMapper.kt similarity index 100% rename from services/opencode/src/main/kotlin/com/getcode/opencode/internal/domain/mapping/TransactionMetadataMapper.kt rename to services/opencode/src/commonMain/kotlin/com/getcode/opencode/internal/domain/mapping/TransactionMetadataMapper.kt diff --git a/services/opencode/src/main/kotlin/com/getcode/opencode/internal/domain/mapping/VmMetadataMapper.kt b/services/opencode/src/commonMain/kotlin/com/getcode/opencode/internal/domain/mapping/VmMetadataMapper.kt similarity index 100% rename from services/opencode/src/main/kotlin/com/getcode/opencode/internal/domain/mapping/VmMetadataMapper.kt rename to services/opencode/src/commonMain/kotlin/com/getcode/opencode/internal/domain/mapping/VmMetadataMapper.kt diff --git a/services/opencode/src/main/kotlin/com/getcode/opencode/internal/domain/repositories/InternalAccountRepository.kt b/services/opencode/src/commonMain/kotlin/com/getcode/opencode/internal/domain/repositories/InternalAccountRepository.kt similarity index 98% rename from services/opencode/src/main/kotlin/com/getcode/opencode/internal/domain/repositories/InternalAccountRepository.kt rename to services/opencode/src/commonMain/kotlin/com/getcode/opencode/internal/domain/repositories/InternalAccountRepository.kt index 645fcdd99f..1a55e433f7 100644 --- a/services/opencode/src/main/kotlin/com/getcode/opencode/internal/domain/repositories/InternalAccountRepository.kt +++ b/services/opencode/src/commonMain/kotlin/com/getcode/opencode/internal/domain/repositories/InternalAccountRepository.kt @@ -1,6 +1,6 @@ package com.getcode.opencode.internal.domain.repositories -import com.getcode.ed25519.Ed25519 +import com.getcode.ed25519kmp.Ed25519 import com.getcode.opencode.internal.network.api.TransactionApi import com.getcode.opencode.internal.network.api.intents.IntentCreateAccount import com.getcode.opencode.internal.network.executors.IntentExecutor diff --git a/services/opencode/src/main/kotlin/com/getcode/opencode/internal/domain/repositories/InternalBalanceRepository.kt b/services/opencode/src/commonMain/kotlin/com/getcode/opencode/internal/domain/repositories/InternalBalanceRepository.kt similarity index 100% rename from services/opencode/src/main/kotlin/com/getcode/opencode/internal/domain/repositories/InternalBalanceRepository.kt rename to services/opencode/src/commonMain/kotlin/com/getcode/opencode/internal/domain/repositories/InternalBalanceRepository.kt diff --git a/services/opencode/src/main/kotlin/com/getcode/opencode/internal/domain/repositories/InternalCurrencyRepository.kt b/services/opencode/src/commonMain/kotlin/com/getcode/opencode/internal/domain/repositories/InternalCurrencyRepository.kt similarity index 98% rename from services/opencode/src/main/kotlin/com/getcode/opencode/internal/domain/repositories/InternalCurrencyRepository.kt rename to services/opencode/src/commonMain/kotlin/com/getcode/opencode/internal/domain/repositories/InternalCurrencyRepository.kt index e046c1679f..80e01bd3a1 100644 --- a/services/opencode/src/main/kotlin/com/getcode/opencode/internal/domain/repositories/InternalCurrencyRepository.kt +++ b/services/opencode/src/commonMain/kotlin/com/getcode/opencode/internal/domain/repositories/InternalCurrencyRepository.kt @@ -1,6 +1,6 @@ package com.getcode.opencode.internal.domain.repositories -import com.getcode.ed25519.Ed25519 +import com.getcode.ed25519kmp.Ed25519 import com.getcode.opencode.model.ui.DiscoverCategory import com.getcode.opencode.model.financial.LiveMintDataResponse import com.getcode.opencode.model.ui.WindowedRange diff --git a/services/opencode/src/main/kotlin/com/getcode/opencode/internal/domain/repositories/InternalEventRepository.kt b/services/opencode/src/commonMain/kotlin/com/getcode/opencode/internal/domain/repositories/InternalEventRepository.kt similarity index 100% rename from services/opencode/src/main/kotlin/com/getcode/opencode/internal/domain/repositories/InternalEventRepository.kt rename to services/opencode/src/commonMain/kotlin/com/getcode/opencode/internal/domain/repositories/InternalEventRepository.kt diff --git a/services/opencode/src/main/kotlin/com/getcode/opencode/internal/domain/repositories/InternalMessagingRepository.kt b/services/opencode/src/commonMain/kotlin/com/getcode/opencode/internal/domain/repositories/InternalMessagingRepository.kt similarity index 98% rename from services/opencode/src/main/kotlin/com/getcode/opencode/internal/domain/repositories/InternalMessagingRepository.kt rename to services/opencode/src/commonMain/kotlin/com/getcode/opencode/internal/domain/repositories/InternalMessagingRepository.kt index 040ff1f5e6..11d8e44244 100644 --- a/services/opencode/src/main/kotlin/com/getcode/opencode/internal/domain/repositories/InternalMessagingRepository.kt +++ b/services/opencode/src/commonMain/kotlin/com/getcode/opencode/internal/domain/repositories/InternalMessagingRepository.kt @@ -1,6 +1,6 @@ package com.getcode.opencode.internal.domain.repositories -import com.getcode.ed25519.Ed25519 +import com.getcode.ed25519kmp.Ed25519 import com.getcode.opencode.internal.network.extensions.asMessageId import com.getcode.opencode.internal.network.extensions.asSolanaAccountId import com.getcode.opencode.internal.network.services.MessagingService diff --git a/services/opencode/src/main/kotlin/com/getcode/opencode/internal/domain/repositories/InternalSwapRepository.kt b/services/opencode/src/commonMain/kotlin/com/getcode/opencode/internal/domain/repositories/InternalSwapRepository.kt similarity index 97% rename from services/opencode/src/main/kotlin/com/getcode/opencode/internal/domain/repositories/InternalSwapRepository.kt rename to services/opencode/src/commonMain/kotlin/com/getcode/opencode/internal/domain/repositories/InternalSwapRepository.kt index 900cce6fd6..54088e9f31 100644 --- a/services/opencode/src/main/kotlin/com/getcode/opencode/internal/domain/repositories/InternalSwapRepository.kt +++ b/services/opencode/src/commonMain/kotlin/com/getcode/opencode/internal/domain/repositories/InternalSwapRepository.kt @@ -1,6 +1,6 @@ package com.getcode.opencode.internal.domain.repositories -import com.getcode.ed25519.Ed25519 +import com.getcode.ed25519kmp.Ed25519 import com.getcode.opencode.internal.network.pollers.SwapPoller import com.getcode.opencode.internal.network.services.SwapService import com.getcode.opencode.internal.solana.model.SwapId diff --git a/services/opencode/src/main/kotlin/com/getcode/opencode/internal/domain/repositories/InternalTransactionRepository.kt b/services/opencode/src/commonMain/kotlin/com/getcode/opencode/internal/domain/repositories/InternalTransactionRepository.kt similarity index 99% rename from services/opencode/src/main/kotlin/com/getcode/opencode/internal/domain/repositories/InternalTransactionRepository.kt rename to services/opencode/src/commonMain/kotlin/com/getcode/opencode/internal/domain/repositories/InternalTransactionRepository.kt index 5a689cc613..fe67be6c6b 100644 --- a/services/opencode/src/main/kotlin/com/getcode/opencode/internal/domain/repositories/InternalTransactionRepository.kt +++ b/services/opencode/src/commonMain/kotlin/com/getcode/opencode/internal/domain/repositories/InternalTransactionRepository.kt @@ -1,6 +1,6 @@ package com.getcode.opencode.internal.domain.repositories -import com.getcode.ed25519.Ed25519 +import com.getcode.ed25519kmp.Ed25519 import com.getcode.opencode.internal.manager.VerifiedState import com.getcode.opencode.internal.network.services.TransactionService import com.getcode.opencode.internal.solana.model.SwapId diff --git a/services/opencode/src/main/kotlin/com/getcode/opencode/internal/exchange/OpenCodeExchange.kt b/services/opencode/src/commonMain/kotlin/com/getcode/opencode/internal/exchange/OpenCodeExchange.kt similarity index 89% rename from services/opencode/src/main/kotlin/com/getcode/opencode/internal/exchange/OpenCodeExchange.kt rename to services/opencode/src/commonMain/kotlin/com/getcode/opencode/internal/exchange/OpenCodeExchange.kt index a481d72cab..2a41088692 100644 --- a/services/opencode/src/main/kotlin/com/getcode/opencode/internal/exchange/OpenCodeExchange.kt +++ b/services/opencode/src/commonMain/kotlin/com/getcode/opencode/internal/exchange/OpenCodeExchange.kt @@ -1,14 +1,10 @@ package com.getcode.opencode.internal.exchange -import androidx.lifecycle.DefaultLifecycleObserver -import androidx.lifecycle.LifecycleOwner -import android.os.Handler -import android.os.Looper -import androidx.lifecycle.ProcessLifecycleOwner import com.getcode.opencode.controllers.CurrencyController import com.getcode.opencode.exchange.Exchange import com.getcode.opencode.internal.extensions.fromCode import com.getcode.opencode.internal.manager.VerifiedProtoManager +import com.getcode.opencode.internal.platform.observeProcessLifecycle import com.getcode.opencode.model.financial.Currency import com.getcode.opencode.model.financial.CurrencyCode import com.getcode.opencode.model.financial.Rate @@ -34,7 +30,7 @@ internal class OpenCodeExchange @Inject constructor( private val verifiedStateManager: VerifiedProtoManager, private val resources: ResourceHelper, private val locale: LocaleHelper, -) : Exchange, DefaultLifecycleObserver { +) : Exchange { private var ratesCollectionJob: Job? = null private var exchangeRatesStream: Job? = null @@ -42,26 +38,19 @@ internal class OpenCodeExchange @Inject constructor( private val scope = CoroutineScope(SupervisorJob() + Dispatchers.IO) init { - // Posted, not called directly: addObserver is main-thread-only, and this singleton is built - // off the main thread so its construction stays off the startup path. - Handler(Looper.getMainLooper()).post { - ProcessLifecycleOwner.get().lifecycle.addObserver(this) - } + // Deferred, not registered in place: this singleton is built off the main thread so its + // construction stays off the startup path, and its fields below are not yet initialized. + observeProcessLifecycle( + immediateOnMain = false, + onStart = ::streamRates, + onStop = ::stopStreamingRates, + ) scope.launch { val currencyCode = locale.getDefaultCurrencyName() preferredCurrency = CurrencyCode.tryValueOf(currencyCode) } } - override fun onStart(owner: LifecycleOwner) { - streamRates() - } - - override fun onStop(owner: LifecycleOwner) { - super.onStop(owner) - stopStreamingRates() - } - private val _preferredRate = MutableStateFlow(Rate.oneToOne) override val preferredRate: Rate diff --git a/services/opencode/src/main/kotlin/com/getcode/opencode/internal/exchange/RealVerifiedFiatCalculator.kt b/services/opencode/src/commonMain/kotlin/com/getcode/opencode/internal/exchange/RealVerifiedFiatCalculator.kt similarity index 99% rename from services/opencode/src/main/kotlin/com/getcode/opencode/internal/exchange/RealVerifiedFiatCalculator.kt rename to services/opencode/src/commonMain/kotlin/com/getcode/opencode/internal/exchange/RealVerifiedFiatCalculator.kt index 6767901e9b..61b0a98d0b 100644 --- a/services/opencode/src/main/kotlin/com/getcode/opencode/internal/exchange/RealVerifiedFiatCalculator.kt +++ b/services/opencode/src/commonMain/kotlin/com/getcode/opencode/internal/exchange/RealVerifiedFiatCalculator.kt @@ -16,7 +16,6 @@ import com.getcode.opencode.model.financial.Rate import com.getcode.opencode.model.core.errors.ComputeVerifiedFiatError import com.getcode.opencode.model.financial.Token import com.getcode.opencode.model.financial.min -import com.getcode.services.opencode.BuildConfig import com.getcode.solana.keys.Mint import com.getcode.utils.TraceType import com.getcode.utils.trace diff --git a/services/opencode/src/main/kotlin/com/getcode/opencode/internal/extensions/ByteArray.kt b/services/opencode/src/commonMain/kotlin/com/getcode/opencode/internal/extensions/ByteArray.kt similarity index 100% rename from services/opencode/src/main/kotlin/com/getcode/opencode/internal/extensions/ByteArray.kt rename to services/opencode/src/commonMain/kotlin/com/getcode/opencode/internal/extensions/ByteArray.kt diff --git a/services/opencode/src/main/kotlin/com/getcode/opencode/internal/extensions/Currency.kt b/services/opencode/src/commonMain/kotlin/com/getcode/opencode/internal/extensions/Currency.kt similarity index 100% rename from services/opencode/src/main/kotlin/com/getcode/opencode/internal/extensions/Currency.kt rename to services/opencode/src/commonMain/kotlin/com/getcode/opencode/internal/extensions/Currency.kt diff --git a/services/opencode/src/main/kotlin/com/getcode/opencode/internal/extensions/CurrencyCode.kt b/services/opencode/src/commonMain/kotlin/com/getcode/opencode/internal/extensions/CurrencyCode.kt similarity index 100% rename from services/opencode/src/main/kotlin/com/getcode/opencode/internal/extensions/CurrencyCode.kt rename to services/opencode/src/commonMain/kotlin/com/getcode/opencode/internal/extensions/CurrencyCode.kt diff --git a/services/opencode/src/main/kotlin/com/getcode/opencode/internal/extensions/Instant.kt b/services/opencode/src/commonMain/kotlin/com/getcode/opencode/internal/extensions/Instant.kt similarity index 100% rename from services/opencode/src/main/kotlin/com/getcode/opencode/internal/extensions/Instant.kt rename to services/opencode/src/commonMain/kotlin/com/getcode/opencode/internal/extensions/Instant.kt diff --git a/services/opencode/src/main/kotlin/com/getcode/opencode/internal/extensions/KeyPair.kt b/services/opencode/src/commonMain/kotlin/com/getcode/opencode/internal/extensions/KeyPair.kt similarity index 80% rename from services/opencode/src/main/kotlin/com/getcode/opencode/internal/extensions/KeyPair.kt rename to services/opencode/src/commonMain/kotlin/com/getcode/opencode/internal/extensions/KeyPair.kt index cd92a63dc7..70f54933b7 100644 --- a/services/opencode/src/main/kotlin/com/getcode/opencode/internal/extensions/KeyPair.kt +++ b/services/opencode/src/commonMain/kotlin/com/getcode/opencode/internal/extensions/KeyPair.kt @@ -1,6 +1,6 @@ package com.getcode.opencode.internal.extensions -import com.getcode.ed25519.Ed25519.KeyPair +import com.getcode.ed25519kmp.Ed25519.KeyPair import com.getcode.solana.keys.PublicKey internal fun KeyPair.toPublicKey(): PublicKey { diff --git a/services/opencode/src/main/kotlin/com/getcode/opencode/internal/extensions/PublicKey.kt b/services/opencode/src/commonMain/kotlin/com/getcode/opencode/internal/extensions/PublicKey.kt similarity index 100% rename from services/opencode/src/main/kotlin/com/getcode/opencode/internal/extensions/PublicKey.kt rename to services/opencode/src/commonMain/kotlin/com/getcode/opencode/internal/extensions/PublicKey.kt diff --git a/services/opencode/src/main/kotlin/com/getcode/opencode/internal/extensions/Result.kt b/services/opencode/src/commonMain/kotlin/com/getcode/opencode/internal/extensions/Result.kt similarity index 100% rename from services/opencode/src/main/kotlin/com/getcode/opencode/internal/extensions/Result.kt rename to services/opencode/src/commonMain/kotlin/com/getcode/opencode/internal/extensions/Result.kt diff --git a/services/opencode/src/main/kotlin/com/getcode/opencode/internal/extensions/VerifiedState.kt b/services/opencode/src/commonMain/kotlin/com/getcode/opencode/internal/extensions/VerifiedState.kt similarity index 100% rename from services/opencode/src/main/kotlin/com/getcode/opencode/internal/extensions/VerifiedState.kt rename to services/opencode/src/commonMain/kotlin/com/getcode/opencode/internal/extensions/VerifiedState.kt diff --git a/services/opencode/src/main/kotlin/com/getcode/opencode/internal/generator/Generator.kt b/services/opencode/src/commonMain/kotlin/com/getcode/opencode/internal/generator/Generator.kt similarity index 100% rename from services/opencode/src/main/kotlin/com/getcode/opencode/internal/generator/Generator.kt rename to services/opencode/src/commonMain/kotlin/com/getcode/opencode/internal/generator/Generator.kt diff --git a/services/opencode/src/main/kotlin/com/getcode/opencode/internal/manager/VerifiedProtoManager.kt b/services/opencode/src/commonMain/kotlin/com/getcode/opencode/internal/manager/VerifiedProtoManager.kt similarity index 100% rename from services/opencode/src/main/kotlin/com/getcode/opencode/internal/manager/VerifiedProtoManager.kt rename to services/opencode/src/commonMain/kotlin/com/getcode/opencode/internal/manager/VerifiedProtoManager.kt diff --git a/services/opencode/src/main/kotlin/com/getcode/opencode/internal/network/api/AccountApi.kt b/services/opencode/src/commonMain/kotlin/com/getcode/opencode/internal/network/api/AccountApi.kt similarity index 98% rename from services/opencode/src/main/kotlin/com/getcode/opencode/internal/network/api/AccountApi.kt rename to services/opencode/src/commonMain/kotlin/com/getcode/opencode/internal/network/api/AccountApi.kt index 39f245770a..c1534cb1d9 100644 --- a/services/opencode/src/main/kotlin/com/getcode/opencode/internal/network/api/AccountApi.kt +++ b/services/opencode/src/commonMain/kotlin/com/getcode/opencode/internal/network/api/AccountApi.kt @@ -3,7 +3,7 @@ package com.getcode.opencode.internal.network.api import com.codeinc.opencode.gen.account.v1.AccountGrpcKt import com.codeinc.opencode.gen.account.v1.OcpAccountService import com.codeinc.opencode.gen.account.v1.validate -import com.getcode.ed25519.Ed25519.KeyPair +import com.getcode.ed25519kmp.Ed25519.KeyPair import com.getcode.opencode.internal.annotations.OpenCodeManagedChannel import com.getcode.opencode.internal.network.core.GrpcApi import com.getcode.opencode.internal.network.extensions.asSolanaAccountId diff --git a/services/opencode/src/main/kotlin/com/getcode/opencode/internal/network/api/BalanceApi.kt b/services/opencode/src/commonMain/kotlin/com/getcode/opencode/internal/network/api/BalanceApi.kt similarity index 100% rename from services/opencode/src/main/kotlin/com/getcode/opencode/internal/network/api/BalanceApi.kt rename to services/opencode/src/commonMain/kotlin/com/getcode/opencode/internal/network/api/BalanceApi.kt diff --git a/services/opencode/src/main/kotlin/com/getcode/opencode/internal/network/api/CurrencyApi.kt b/services/opencode/src/commonMain/kotlin/com/getcode/opencode/internal/network/api/CurrencyApi.kt similarity index 99% rename from services/opencode/src/main/kotlin/com/getcode/opencode/internal/network/api/CurrencyApi.kt rename to services/opencode/src/commonMain/kotlin/com/getcode/opencode/internal/network/api/CurrencyApi.kt index 95453a5f0a..59391faf70 100644 --- a/services/opencode/src/main/kotlin/com/getcode/opencode/internal/network/api/CurrencyApi.kt +++ b/services/opencode/src/commonMain/kotlin/com/getcode/opencode/internal/network/api/CurrencyApi.kt @@ -3,7 +3,7 @@ package com.getcode.opencode.internal.network.api import com.codeinc.opencode.gen.currency.v1.CurrencyGrpcKt import com.codeinc.opencode.gen.currency.v1.OcpCurrencyService import com.codeinc.opencode.gen.currency.v1.validate -import com.getcode.ed25519.Ed25519 +import com.getcode.ed25519kmp.Ed25519 import com.getcode.opencode.internal.annotations.OpenCodeManagedChannel import com.getcode.opencode.internal.annotations.OpenCodeManagedStreamingChannel import com.getcode.opencode.model.ui.DiscoverCategory diff --git a/services/opencode/src/main/kotlin/com/getcode/opencode/internal/network/api/MessagingApi.kt b/services/opencode/src/commonMain/kotlin/com/getcode/opencode/internal/network/api/MessagingApi.kt similarity index 98% rename from services/opencode/src/main/kotlin/com/getcode/opencode/internal/network/api/MessagingApi.kt rename to services/opencode/src/commonMain/kotlin/com/getcode/opencode/internal/network/api/MessagingApi.kt index d925ca6ce9..bbed853fa3 100644 --- a/services/opencode/src/main/kotlin/com/getcode/opencode/internal/network/api/MessagingApi.kt +++ b/services/opencode/src/commonMain/kotlin/com/getcode/opencode/internal/network/api/MessagingApi.kt @@ -4,8 +4,8 @@ import com.codeinc.opencode.gen.common.v1.Model import com.codeinc.opencode.gen.messaging.v1.MessagingGrpcKt import com.codeinc.opencode.gen.messaging.v1.OcpMessagingService import com.codeinc.opencode.gen.messaging.v1.validate -import com.getcode.ed25519.Ed25519 -import com.getcode.ed25519.Ed25519.KeyPair +import com.getcode.ed25519kmp.Ed25519 +import com.getcode.ed25519kmp.Ed25519.KeyPair import com.getcode.opencode.internal.annotations.OpenCodeManagedChannel import com.getcode.opencode.internal.network.core.GrpcApi import com.getcode.opencode.internal.network.extensions.asRendezvousKey diff --git a/services/opencode/src/main/kotlin/com/getcode/opencode/internal/network/api/TransactionApi.kt b/services/opencode/src/commonMain/kotlin/com/getcode/opencode/internal/network/api/TransactionApi.kt similarity index 99% rename from services/opencode/src/main/kotlin/com/getcode/opencode/internal/network/api/TransactionApi.kt rename to services/opencode/src/commonMain/kotlin/com/getcode/opencode/internal/network/api/TransactionApi.kt index b277484aef..a0d520f467 100644 --- a/services/opencode/src/main/kotlin/com/getcode/opencode/internal/network/api/TransactionApi.kt +++ b/services/opencode/src/commonMain/kotlin/com/getcode/opencode/internal/network/api/TransactionApi.kt @@ -15,7 +15,7 @@ import com.codeinc.opencode.gen.transaction.v1.OcpTransactionService.VoidGiftCar import com.codeinc.opencode.gen.transaction.v1.OcpTransactionService.VoidGiftCardResponse import com.codeinc.opencode.gen.transaction.v1.TransactionGrpcKt import com.codeinc.opencode.gen.transaction.v1.validate -import com.getcode.ed25519.Ed25519.KeyPair +import com.getcode.ed25519kmp.Ed25519.KeyPair import com.getcode.opencode.internal.annotations.OpenCodeManagedChannel import com.getcode.opencode.internal.network.core.GrpcApi import com.getcode.opencode.internal.network.extensions.asIntentId diff --git a/services/opencode/src/main/kotlin/com/getcode/opencode/internal/network/api/intents/IntentCreateAccount.kt b/services/opencode/src/commonMain/kotlin/com/getcode/opencode/internal/network/api/intents/IntentCreateAccount.kt similarity index 100% rename from services/opencode/src/main/kotlin/com/getcode/opencode/internal/network/api/intents/IntentCreateAccount.kt rename to services/opencode/src/commonMain/kotlin/com/getcode/opencode/internal/network/api/intents/IntentCreateAccount.kt diff --git a/services/opencode/src/main/kotlin/com/getcode/opencode/internal/network/api/intents/IntentDistribution.kt b/services/opencode/src/commonMain/kotlin/com/getcode/opencode/internal/network/api/intents/IntentDistribution.kt similarity index 100% rename from services/opencode/src/main/kotlin/com/getcode/opencode/internal/network/api/intents/IntentDistribution.kt rename to services/opencode/src/commonMain/kotlin/com/getcode/opencode/internal/network/api/intents/IntentDistribution.kt diff --git a/services/opencode/src/main/kotlin/com/getcode/opencode/internal/network/api/intents/IntentFundSwap.kt b/services/opencode/src/commonMain/kotlin/com/getcode/opencode/internal/network/api/intents/IntentFundSwap.kt similarity index 100% rename from services/opencode/src/main/kotlin/com/getcode/opencode/internal/network/api/intents/IntentFundSwap.kt rename to services/opencode/src/commonMain/kotlin/com/getcode/opencode/internal/network/api/intents/IntentFundSwap.kt diff --git a/services/opencode/src/main/kotlin/com/getcode/opencode/internal/network/api/intents/IntentMultiTransfer.kt b/services/opencode/src/commonMain/kotlin/com/getcode/opencode/internal/network/api/intents/IntentMultiTransfer.kt similarity index 100% rename from services/opencode/src/main/kotlin/com/getcode/opencode/internal/network/api/intents/IntentMultiTransfer.kt rename to services/opencode/src/commonMain/kotlin/com/getcode/opencode/internal/network/api/intents/IntentMultiTransfer.kt diff --git a/services/opencode/src/main/kotlin/com/getcode/opencode/internal/network/api/intents/IntentRemoteReceive.kt b/services/opencode/src/commonMain/kotlin/com/getcode/opencode/internal/network/api/intents/IntentRemoteReceive.kt similarity index 100% rename from services/opencode/src/main/kotlin/com/getcode/opencode/internal/network/api/intents/IntentRemoteReceive.kt rename to services/opencode/src/commonMain/kotlin/com/getcode/opencode/internal/network/api/intents/IntentRemoteReceive.kt diff --git a/services/opencode/src/main/kotlin/com/getcode/opencode/internal/network/api/intents/IntentRemoteSend.kt b/services/opencode/src/commonMain/kotlin/com/getcode/opencode/internal/network/api/intents/IntentRemoteSend.kt similarity index 100% rename from services/opencode/src/main/kotlin/com/getcode/opencode/internal/network/api/intents/IntentRemoteSend.kt rename to services/opencode/src/commonMain/kotlin/com/getcode/opencode/internal/network/api/intents/IntentRemoteSend.kt diff --git a/services/opencode/src/main/kotlin/com/getcode/opencode/internal/network/api/intents/IntentStatefulSwap.kt b/services/opencode/src/commonMain/kotlin/com/getcode/opencode/internal/network/api/intents/IntentStatefulSwap.kt similarity index 100% rename from services/opencode/src/main/kotlin/com/getcode/opencode/internal/network/api/intents/IntentStatefulSwap.kt rename to services/opencode/src/commonMain/kotlin/com/getcode/opencode/internal/network/api/intents/IntentStatefulSwap.kt diff --git a/services/opencode/src/main/kotlin/com/getcode/opencode/internal/network/api/intents/IntentStatelessSwap.kt b/services/opencode/src/commonMain/kotlin/com/getcode/opencode/internal/network/api/intents/IntentStatelessSwap.kt similarity index 100% rename from services/opencode/src/main/kotlin/com/getcode/opencode/internal/network/api/intents/IntentStatelessSwap.kt rename to services/opencode/src/commonMain/kotlin/com/getcode/opencode/internal/network/api/intents/IntentStatelessSwap.kt diff --git a/services/opencode/src/main/kotlin/com/getcode/opencode/internal/network/api/intents/IntentTransfer.kt b/services/opencode/src/commonMain/kotlin/com/getcode/opencode/internal/network/api/intents/IntentTransfer.kt similarity index 100% rename from services/opencode/src/main/kotlin/com/getcode/opencode/internal/network/api/intents/IntentTransfer.kt rename to services/opencode/src/commonMain/kotlin/com/getcode/opencode/internal/network/api/intents/IntentTransfer.kt diff --git a/services/opencode/src/main/kotlin/com/getcode/opencode/internal/network/api/intents/IntentWithdraw.kt b/services/opencode/src/commonMain/kotlin/com/getcode/opencode/internal/network/api/intents/IntentWithdraw.kt similarity index 100% rename from services/opencode/src/main/kotlin/com/getcode/opencode/internal/network/api/intents/IntentWithdraw.kt rename to services/opencode/src/commonMain/kotlin/com/getcode/opencode/internal/network/api/intents/IntentWithdraw.kt diff --git a/services/opencode/src/main/kotlin/com/getcode/opencode/internal/network/api/intents/actions/ActionFeePayment.kt b/services/opencode/src/commonMain/kotlin/com/getcode/opencode/internal/network/api/intents/actions/ActionFeePayment.kt similarity index 98% rename from services/opencode/src/main/kotlin/com/getcode/opencode/internal/network/api/intents/actions/ActionFeePayment.kt rename to services/opencode/src/commonMain/kotlin/com/getcode/opencode/internal/network/api/intents/actions/ActionFeePayment.kt index 2e079ba676..aa2a3d7365 100644 --- a/services/opencode/src/main/kotlin/com/getcode/opencode/internal/network/api/intents/actions/ActionFeePayment.kt +++ b/services/opencode/src/commonMain/kotlin/com/getcode/opencode/internal/network/api/intents/actions/ActionFeePayment.kt @@ -1,7 +1,7 @@ package com.getcode.opencode.internal.network.api.intents.actions import com.codeinc.opencode.gen.transaction.v1.OcpTransactionService -import com.getcode.ed25519.Ed25519 +import com.getcode.ed25519kmp.Ed25519 import com.getcode.opencode.internal.network.extensions.asSolanaAccountId import com.getcode.opencode.model.accounts.AccountCluster import com.getcode.opencode.model.financial.Fee diff --git a/services/opencode/src/main/kotlin/com/getcode/opencode/internal/network/api/intents/actions/ActionOpenAccount.kt b/services/opencode/src/commonMain/kotlin/com/getcode/opencode/internal/network/api/intents/actions/ActionOpenAccount.kt similarity index 98% rename from services/opencode/src/main/kotlin/com/getcode/opencode/internal/network/api/intents/actions/ActionOpenAccount.kt rename to services/opencode/src/commonMain/kotlin/com/getcode/opencode/internal/network/api/intents/actions/ActionOpenAccount.kt index 780e364902..3c00018eea 100644 --- a/services/opencode/src/main/kotlin/com/getcode/opencode/internal/network/api/intents/actions/ActionOpenAccount.kt +++ b/services/opencode/src/commonMain/kotlin/com/getcode/opencode/internal/network/api/intents/actions/ActionOpenAccount.kt @@ -1,7 +1,7 @@ package com.getcode.opencode.internal.network.api.intents.actions import com.codeinc.opencode.gen.transaction.v1.OcpTransactionService -import com.getcode.ed25519.Ed25519 +import com.getcode.ed25519kmp.Ed25519 import com.getcode.opencode.solana.intents.ServerParameter import com.getcode.opencode.model.accounts.AccountCluster import com.getcode.opencode.internal.network.extensions.asSolanaAccountId diff --git a/services/opencode/src/main/kotlin/com/getcode/opencode/internal/network/api/intents/actions/ActionPublicTransfer.kt b/services/opencode/src/commonMain/kotlin/com/getcode/opencode/internal/network/api/intents/actions/ActionPublicTransfer.kt similarity index 98% rename from services/opencode/src/main/kotlin/com/getcode/opencode/internal/network/api/intents/actions/ActionPublicTransfer.kt rename to services/opencode/src/commonMain/kotlin/com/getcode/opencode/internal/network/api/intents/actions/ActionPublicTransfer.kt index 2cc1150ea6..dc92f00e77 100644 --- a/services/opencode/src/main/kotlin/com/getcode/opencode/internal/network/api/intents/actions/ActionPublicTransfer.kt +++ b/services/opencode/src/commonMain/kotlin/com/getcode/opencode/internal/network/api/intents/actions/ActionPublicTransfer.kt @@ -1,7 +1,7 @@ package com.getcode.opencode.internal.network.api.intents.actions import com.codeinc.opencode.gen.transaction.v1.OcpTransactionService -import com.getcode.ed25519.Ed25519.KeyPair +import com.getcode.ed25519kmp.Ed25519.KeyPair import com.getcode.opencode.internal.network.extensions.asSolanaAccountId import com.getcode.opencode.model.financial.Fiat import com.getcode.opencode.solana.SolanaTransaction diff --git a/services/opencode/src/main/kotlin/com/getcode/opencode/internal/network/api/intents/actions/ActionPublicWithdraw.kt b/services/opencode/src/commonMain/kotlin/com/getcode/opencode/internal/network/api/intents/actions/ActionPublicWithdraw.kt similarity index 98% rename from services/opencode/src/main/kotlin/com/getcode/opencode/internal/network/api/intents/actions/ActionPublicWithdraw.kt rename to services/opencode/src/commonMain/kotlin/com/getcode/opencode/internal/network/api/intents/actions/ActionPublicWithdraw.kt index 7ed8af366f..9416f027b8 100644 --- a/services/opencode/src/main/kotlin/com/getcode/opencode/internal/network/api/intents/actions/ActionPublicWithdraw.kt +++ b/services/opencode/src/commonMain/kotlin/com/getcode/opencode/internal/network/api/intents/actions/ActionPublicWithdraw.kt @@ -1,7 +1,7 @@ package com.getcode.opencode.internal.network.api.intents.actions import com.codeinc.opencode.gen.transaction.v1.OcpTransactionService -import com.getcode.ed25519.Ed25519 +import com.getcode.ed25519kmp.Ed25519 import com.getcode.opencode.internal.network.extensions.asSolanaAccountId import com.getcode.opencode.model.accounts.AccountCluster import com.getcode.opencode.model.financial.Fiat diff --git a/services/opencode/src/commonMain/kotlin/com/getcode/opencode/internal/network/core/GrpcApi.kt b/services/opencode/src/commonMain/kotlin/com/getcode/opencode/internal/network/core/GrpcApi.kt new file mode 100644 index 0000000000..88f65bded9 --- /dev/null +++ b/services/opencode/src/commonMain/kotlin/com/getcode/opencode/internal/network/core/GrpcApi.kt @@ -0,0 +1,24 @@ +package com.getcode.opencode.internal.network.core + +import com.getcode.opencode.internal.platform.observeProcessLifecycle +import io.grpc.ManagedChannel + +abstract class GrpcApi(protected val managedChannels: List) { + + constructor(managedChannel: ManagedChannel): this(listOf(managedChannel)) + constructor(vararg managedChannels: ManagedChannel): this(managedChannels.toList()) + + init { + // Registering on the constructing thread would pin construction of every api -- and so of the whole object graph hanging off + // them -- to the main thread. Posting keeps that off the startup path. addObserver replays the + // current state, so a registration that lands after the process is already started still warms + // the channel. + observeProcessLifecycle(immediateOnMain = true, onStart = ::warmUp) + } + + private fun warmUp() { + // getState(true) requests a connection attempt if idle, + // pre-connecting TCP + TLS + HTTP/2 in the background + managedChannels.onEach { it.getState(true) } + } +} diff --git a/services/opencode/src/main/kotlin/com/getcode/opencode/internal/network/executors/IntentExecutor.kt b/services/opencode/src/commonMain/kotlin/com/getcode/opencode/internal/network/executors/IntentExecutor.kt similarity index 98% rename from services/opencode/src/main/kotlin/com/getcode/opencode/internal/network/executors/IntentExecutor.kt rename to services/opencode/src/commonMain/kotlin/com/getcode/opencode/internal/network/executors/IntentExecutor.kt index 6d9f07fbb6..3ff1cd101e 100644 --- a/services/opencode/src/main/kotlin/com/getcode/opencode/internal/network/executors/IntentExecutor.kt +++ b/services/opencode/src/commonMain/kotlin/com/getcode/opencode/internal/network/executors/IntentExecutor.kt @@ -1,9 +1,10 @@ package com.getcode.opencode.internal.network.executors +import com.getcode.utils.BuildFlags import com.codeinc.opencode.gen.transaction.v1.OcpTransactionService import com.codeinc.opencode.gen.transaction.v1.OcpTransactionService.SubmitIntentRequest import com.codeinc.opencode.gen.transaction.v1.OcpTransactionService.SubmitIntentResponse -import com.getcode.ed25519.Ed25519.KeyPair +import com.getcode.ed25519kmp.Ed25519.KeyPair import com.getcode.opencode.internal.bidi.BidirectionalStreamReference import com.getcode.opencode.internal.bidi.openBidirectionalStreamForResult import com.getcode.opencode.internal.network.api.TransactionApi @@ -12,7 +13,6 @@ import com.getcode.opencode.solana.SolanaTransaction import com.getcode.opencode.solana.diff import com.getcode.opencode.solana.intents.IntentType import com.getcode.opencode.solana.intents.ServerParameter -import com.getcode.services.opencode.BuildConfig import com.getcode.solana.keys.base58 import com.getcode.solana.keys.redact import com.getcode.utils.TraceType @@ -161,7 +161,7 @@ class IntentExecutor( val submitSignatures = intent.requestToSubmitSignatures() requestChannel(submitSignatures) } catch (e: Exception) { - if (BuildConfig.DEBUG) { + if (BuildFlags.isDebug) { e.printStackTrace() } trace( diff --git a/services/opencode/src/main/kotlin/com/getcode/opencode/internal/network/executors/StatefulSwapExecutor.kt b/services/opencode/src/commonMain/kotlin/com/getcode/opencode/internal/network/executors/StatefulSwapExecutor.kt similarity index 99% rename from services/opencode/src/main/kotlin/com/getcode/opencode/internal/network/executors/StatefulSwapExecutor.kt rename to services/opencode/src/commonMain/kotlin/com/getcode/opencode/internal/network/executors/StatefulSwapExecutor.kt index 3781ce5302..794709daee 100644 --- a/services/opencode/src/main/kotlin/com/getcode/opencode/internal/network/executors/StatefulSwapExecutor.kt +++ b/services/opencode/src/commonMain/kotlin/com/getcode/opencode/internal/network/executors/StatefulSwapExecutor.kt @@ -1,5 +1,6 @@ package com.getcode.opencode.internal.network.executors +import com.getcode.utils.BuildFlags import com.codeinc.opencode.gen.transaction.v1.OcpTransactionService import com.getcode.opencode.internal.bidi.BidirectionalStreamReference import com.getcode.opencode.internal.bidi.openBidirectionalStreamForResult @@ -15,7 +16,6 @@ import com.getcode.opencode.model.transactions.SwapProgram import com.getcode.opencode.model.transactions.VerifiedSwapMetadata import com.getcode.opencode.solana.SolanaTransaction import com.getcode.opencode.solana.diff -import com.getcode.services.opencode.BuildConfig import com.getcode.solana.keys.Signature import com.getcode.solana.keys.base58 import com.getcode.utils.TraceType @@ -209,7 +209,7 @@ private fun handleServerParameters( onResult(Result.failure(SwapError.Other(cause = IllegalArgumentException("Invalid server parameters")))) } } catch (e: Exception) { - if (BuildConfig.DEBUG) { + if (BuildFlags.isDebug) { e.printStackTrace() } onResult(Result.failure(SwapError.Other(cause = e))) diff --git a/services/opencode/src/main/kotlin/com/getcode/opencode/internal/network/executors/StatelessSwapExecutor.kt b/services/opencode/src/commonMain/kotlin/com/getcode/opencode/internal/network/executors/StatelessSwapExecutor.kt similarity index 98% rename from services/opencode/src/main/kotlin/com/getcode/opencode/internal/network/executors/StatelessSwapExecutor.kt rename to services/opencode/src/commonMain/kotlin/com/getcode/opencode/internal/network/executors/StatelessSwapExecutor.kt index a05c274d10..71b9bae9b5 100644 --- a/services/opencode/src/main/kotlin/com/getcode/opencode/internal/network/executors/StatelessSwapExecutor.kt +++ b/services/opencode/src/commonMain/kotlin/com/getcode/opencode/internal/network/executors/StatelessSwapExecutor.kt @@ -1,5 +1,6 @@ package com.getcode.opencode.internal.network.executors +import com.getcode.utils.BuildFlags import com.codeinc.opencode.gen.transaction.v1.OcpTransactionService import com.getcode.opencode.internal.bidi.BidirectionalStreamReference import com.getcode.opencode.internal.bidi.openBidirectionalStreamForResult @@ -13,7 +14,6 @@ import com.getcode.opencode.model.core.errors.SwapError import com.getcode.opencode.model.transactions.StatelessSwapRequest import com.getcode.opencode.model.transactions.StatelessSwapResult import com.getcode.opencode.model.transactions.StatelessSwapSuccess -import com.getcode.services.opencode.BuildConfig import com.getcode.utils.TraceType import com.getcode.utils.trace import kotlinx.coroutines.CoroutineScope @@ -141,7 +141,7 @@ private fun handleServerParameters( intent.parameters = params requestChannel(intent.requestToSubmitSignatures()) } catch (e: Exception) { - if (BuildConfig.DEBUG) e.printStackTrace() + if (BuildFlags.isDebug) e.printStackTrace() onResult(Result.failure(SwapError.Other(cause = e))) } } diff --git a/services/opencode/src/main/kotlin/com/getcode/opencode/internal/network/extensions/FoldWithSuppression.kt b/services/opencode/src/commonMain/kotlin/com/getcode/opencode/internal/network/extensions/FoldWithSuppression.kt similarity index 100% rename from services/opencode/src/main/kotlin/com/getcode/opencode/internal/network/extensions/FoldWithSuppression.kt rename to services/opencode/src/commonMain/kotlin/com/getcode/opencode/internal/network/extensions/FoldWithSuppression.kt diff --git a/services/opencode/src/main/kotlin/com/getcode/opencode/internal/network/extensions/LocalToProtobuf.kt b/services/opencode/src/commonMain/kotlin/com/getcode/opencode/internal/network/extensions/LocalToProtobuf.kt similarity index 99% rename from services/opencode/src/main/kotlin/com/getcode/opencode/internal/network/extensions/LocalToProtobuf.kt rename to services/opencode/src/commonMain/kotlin/com/getcode/opencode/internal/network/extensions/LocalToProtobuf.kt index 377ea7a5ff..c8ef1d48d6 100644 --- a/services/opencode/src/main/kotlin/com/getcode/opencode/internal/network/extensions/LocalToProtobuf.kt +++ b/services/opencode/src/commonMain/kotlin/com/getcode/opencode/internal/network/extensions/LocalToProtobuf.kt @@ -7,7 +7,7 @@ import com.codeinc.opencode.gen.messaging.v1.requestToGiveBill import com.codeinc.opencode.gen.messaging.v1.requestToGrabBill import com.codeinc.opencode.gen.transaction.v1.OcpTransactionService import com.codeinc.opencode.gen.transaction.v1.OcpTransactionService.OpenAccountsMetadata.AccountSet -import com.getcode.ed25519.Ed25519.KeyPair +import com.getcode.ed25519kmp.Ed25519.KeyPair import com.getcode.opencode.internal.solana.model.SwapId import com.getcode.opencode.internal.solana.programs.CoinbaseStableSwapperProgram import com.getcode.opencode.model.accounts.AccountType diff --git a/services/opencode/src/main/kotlin/com/getcode/opencode/internal/network/extensions/ProtobufToLocal.kt b/services/opencode/src/commonMain/kotlin/com/getcode/opencode/internal/network/extensions/ProtobufToLocal.kt similarity index 100% rename from services/opencode/src/main/kotlin/com/getcode/opencode/internal/network/extensions/ProtobufToLocal.kt rename to services/opencode/src/commonMain/kotlin/com/getcode/opencode/internal/network/extensions/ProtobufToLocal.kt diff --git a/services/opencode/src/main/kotlin/com/getcode/opencode/internal/network/extensions/SignMessage.kt b/services/opencode/src/commonMain/kotlin/com/getcode/opencode/internal/network/extensions/SignMessage.kt similarity index 94% rename from services/opencode/src/main/kotlin/com/getcode/opencode/internal/network/extensions/SignMessage.kt rename to services/opencode/src/commonMain/kotlin/com/getcode/opencode/internal/network/extensions/SignMessage.kt index 07b782112b..68948875a4 100644 --- a/services/opencode/src/main/kotlin/com/getcode/opencode/internal/network/extensions/SignMessage.kt +++ b/services/opencode/src/commonMain/kotlin/com/getcode/opencode/internal/network/extensions/SignMessage.kt @@ -1,7 +1,7 @@ package com.getcode.opencode.internal.network.extensions import com.codeinc.opencode.gen.common.v1.Model -import com.getcode.ed25519.Ed25519 +import com.getcode.ed25519kmp.Ed25519 import com.google.protobuf.GeneratedMessageLite import java.io.ByteArrayOutputStream diff --git a/services/opencode/src/main/kotlin/com/getcode/opencode/internal/network/funding/SwapFunding.kt b/services/opencode/src/commonMain/kotlin/com/getcode/opencode/internal/network/funding/SwapFunding.kt similarity index 100% rename from services/opencode/src/main/kotlin/com/getcode/opencode/internal/network/funding/SwapFunding.kt rename to services/opencode/src/commonMain/kotlin/com/getcode/opencode/internal/network/funding/SwapFunding.kt diff --git a/services/opencode/src/main/kotlin/com/getcode/opencode/internal/network/pollers/SwapPoller.kt b/services/opencode/src/commonMain/kotlin/com/getcode/opencode/internal/network/pollers/SwapPoller.kt similarity index 99% rename from services/opencode/src/main/kotlin/com/getcode/opencode/internal/network/pollers/SwapPoller.kt rename to services/opencode/src/commonMain/kotlin/com/getcode/opencode/internal/network/pollers/SwapPoller.kt index 31e70afcd8..9d9eac6b7e 100644 --- a/services/opencode/src/main/kotlin/com/getcode/opencode/internal/network/pollers/SwapPoller.kt +++ b/services/opencode/src/commonMain/kotlin/com/getcode/opencode/internal/network/pollers/SwapPoller.kt @@ -1,6 +1,6 @@ package com.getcode.opencode.internal.network.pollers -import com.getcode.ed25519.Ed25519 +import com.getcode.ed25519kmp.Ed25519 import com.getcode.opencode.internal.network.services.SwapService import com.getcode.opencode.internal.solana.model.SwapId import com.getcode.opencode.model.core.errors.GetSwapError diff --git a/services/opencode/src/main/kotlin/com/getcode/opencode/internal/network/serializer/UUIDSerializer.kt b/services/opencode/src/commonMain/kotlin/com/getcode/opencode/internal/network/serializer/UUIDSerializer.kt similarity index 100% rename from services/opencode/src/main/kotlin/com/getcode/opencode/internal/network/serializer/UUIDSerializer.kt rename to services/opencode/src/commonMain/kotlin/com/getcode/opencode/internal/network/serializer/UUIDSerializer.kt diff --git a/services/opencode/src/main/kotlin/com/getcode/opencode/internal/network/services/AccountService.kt b/services/opencode/src/commonMain/kotlin/com/getcode/opencode/internal/network/services/AccountService.kt similarity index 98% rename from services/opencode/src/main/kotlin/com/getcode/opencode/internal/network/services/AccountService.kt rename to services/opencode/src/commonMain/kotlin/com/getcode/opencode/internal/network/services/AccountService.kt index 4e6348afbe..87eaf5412d 100644 --- a/services/opencode/src/main/kotlin/com/getcode/opencode/internal/network/services/AccountService.kt +++ b/services/opencode/src/commonMain/kotlin/com/getcode/opencode/internal/network/services/AccountService.kt @@ -1,7 +1,7 @@ package com.getcode.opencode.internal.network.services import com.codeinc.opencode.gen.account.v1.OcpAccountService -import com.getcode.ed25519.Ed25519.KeyPair +import com.getcode.ed25519kmp.Ed25519.KeyPair import com.getcode.opencode.internal.network.api.AccountApi import com.getcode.opencode.internal.network.extensions.foldWithSuppression import com.getcode.opencode.model.accounts.AccountFilter diff --git a/services/opencode/src/main/kotlin/com/getcode/opencode/internal/network/services/BalanceService.kt b/services/opencode/src/commonMain/kotlin/com/getcode/opencode/internal/network/services/BalanceService.kt similarity index 100% rename from services/opencode/src/main/kotlin/com/getcode/opencode/internal/network/services/BalanceService.kt rename to services/opencode/src/commonMain/kotlin/com/getcode/opencode/internal/network/services/BalanceService.kt diff --git a/services/opencode/src/main/kotlin/com/getcode/opencode/internal/network/services/CurrencyService.kt b/services/opencode/src/commonMain/kotlin/com/getcode/opencode/internal/network/services/CurrencyService.kt similarity index 99% rename from services/opencode/src/main/kotlin/com/getcode/opencode/internal/network/services/CurrencyService.kt rename to services/opencode/src/commonMain/kotlin/com/getcode/opencode/internal/network/services/CurrencyService.kt index 81287849ab..12e14c2b76 100644 --- a/services/opencode/src/main/kotlin/com/getcode/opencode/internal/network/services/CurrencyService.kt +++ b/services/opencode/src/commonMain/kotlin/com/getcode/opencode/internal/network/services/CurrencyService.kt @@ -1,6 +1,6 @@ package com.getcode.opencode.internal.network.services -import com.getcode.ed25519.Ed25519 +import com.getcode.ed25519kmp.Ed25519 import com.getcode.opencode.internal.domain.mapping.HistoricalMintDataMapper import com.getcode.opencode.internal.domain.mapping.LiveMintDataMapper import com.getcode.opencode.internal.domain.mapping.MintMapper diff --git a/services/opencode/src/main/kotlin/com/getcode/opencode/internal/network/services/MessagingService.kt b/services/opencode/src/commonMain/kotlin/com/getcode/opencode/internal/network/services/MessagingService.kt similarity index 99% rename from services/opencode/src/main/kotlin/com/getcode/opencode/internal/network/services/MessagingService.kt rename to services/opencode/src/commonMain/kotlin/com/getcode/opencode/internal/network/services/MessagingService.kt index 7234016308..7e1fd4828c 100644 --- a/services/opencode/src/main/kotlin/com/getcode/opencode/internal/network/services/MessagingService.kt +++ b/services/opencode/src/commonMain/kotlin/com/getcode/opencode/internal/network/services/MessagingService.kt @@ -1,6 +1,6 @@ package com.getcode.opencode.internal.network.services -import com.getcode.ed25519.Ed25519.KeyPair +import com.getcode.ed25519kmp.Ed25519.KeyPair import com.getcode.opencode.internal.bidi.BidirectionalStreamReference import com.getcode.opencode.internal.bidi.openBidirectionalStreamForResult import com.getcode.opencode.internal.network.api.MessagingApi diff --git a/services/opencode/src/main/kotlin/com/getcode/opencode/internal/network/services/SwapService.kt b/services/opencode/src/commonMain/kotlin/com/getcode/opencode/internal/network/services/SwapService.kt similarity index 98% rename from services/opencode/src/main/kotlin/com/getcode/opencode/internal/network/services/SwapService.kt rename to services/opencode/src/commonMain/kotlin/com/getcode/opencode/internal/network/services/SwapService.kt index da68c86837..3f0fa99e44 100644 --- a/services/opencode/src/main/kotlin/com/getcode/opencode/internal/network/services/SwapService.kt +++ b/services/opencode/src/commonMain/kotlin/com/getcode/opencode/internal/network/services/SwapService.kt @@ -1,6 +1,6 @@ package com.getcode.opencode.internal.network.services -import com.getcode.ed25519.Ed25519.KeyPair +import com.getcode.ed25519kmp.Ed25519.KeyPair import com.getcode.opencode.internal.domain.mapping.SwapMetadataMapper import com.codeinc.opencode.gen.transaction.v1.OcpTransactionService import com.getcode.opencode.internal.network.api.TransactionApi diff --git a/services/opencode/src/main/kotlin/com/getcode/opencode/internal/network/services/TransactionService.kt b/services/opencode/src/commonMain/kotlin/com/getcode/opencode/internal/network/services/TransactionService.kt similarity index 99% rename from services/opencode/src/main/kotlin/com/getcode/opencode/internal/network/services/TransactionService.kt rename to services/opencode/src/commonMain/kotlin/com/getcode/opencode/internal/network/services/TransactionService.kt index 332e90afc3..4804c6c971 100644 --- a/services/opencode/src/main/kotlin/com/getcode/opencode/internal/network/services/TransactionService.kt +++ b/services/opencode/src/commonMain/kotlin/com/getcode/opencode/internal/network/services/TransactionService.kt @@ -2,8 +2,8 @@ package com.getcode.opencode.internal.network.services import com.codeinc.opencode.gen.transaction.v1.OcpTransactionService import com.codeinc.opencode.gen.transaction.v1.feeAmountOrNull -import com.getcode.ed25519.Ed25519 -import com.getcode.ed25519.Ed25519.KeyPair +import com.getcode.ed25519kmp.Ed25519 +import com.getcode.ed25519kmp.Ed25519.KeyPair import com.getcode.opencode.internal.domain.mapping.TransactionMetadataMapper import com.getcode.opencode.internal.manager.VerifiedState import com.getcode.opencode.internal.network.api.TransactionApi diff --git a/services/opencode/src/main/kotlin/com/getcode/opencode/internal/network/streamers/LiveMintDataStreamer.kt b/services/opencode/src/commonMain/kotlin/com/getcode/opencode/internal/network/streamers/LiveMintDataStreamer.kt similarity index 100% rename from services/opencode/src/main/kotlin/com/getcode/opencode/internal/network/streamers/LiveMintDataStreamer.kt rename to services/opencode/src/commonMain/kotlin/com/getcode/opencode/internal/network/streamers/LiveMintDataStreamer.kt diff --git a/services/opencode/src/commonMain/kotlin/com/getcode/opencode/internal/platform/ProcessLifecycle.kt b/services/opencode/src/commonMain/kotlin/com/getcode/opencode/internal/platform/ProcessLifecycle.kt new file mode 100644 index 0000000000..43ba429751 --- /dev/null +++ b/services/opencode/src/commonMain/kotlin/com/getcode/opencode/internal/platform/ProcessLifecycle.kt @@ -0,0 +1,15 @@ +package com.getcode.opencode.internal.platform + +/** + * Calls [onStart] and [onStop] as the app process enters and leaves the foreground. + * + * Registration replays the current state, so a process that is already started calls [onStart] + * once registered. With [immediateOnMain], a caller already on the main thread registers in place; + * otherwise registration is always deferred, so neither callback runs during the caller's own + * construction. + */ +internal expect fun observeProcessLifecycle( + immediateOnMain: Boolean, + onStart: () -> Unit, + onStop: () -> Unit = {}, +) diff --git a/services/opencode/src/main/kotlin/com/getcode/opencode/internal/solana/Definitions.kt b/services/opencode/src/commonMain/kotlin/com/getcode/opencode/internal/solana/Definitions.kt similarity index 100% rename from services/opencode/src/main/kotlin/com/getcode/opencode/internal/solana/Definitions.kt rename to services/opencode/src/commonMain/kotlin/com/getcode/opencode/internal/solana/Definitions.kt diff --git a/services/opencode/src/main/kotlin/com/getcode/opencode/internal/solana/ShortVec.kt b/services/opencode/src/commonMain/kotlin/com/getcode/opencode/internal/solana/ShortVec.kt similarity index 100% rename from services/opencode/src/main/kotlin/com/getcode/opencode/internal/solana/ShortVec.kt rename to services/opencode/src/commonMain/kotlin/com/getcode/opencode/internal/solana/ShortVec.kt diff --git a/services/opencode/src/main/kotlin/com/getcode/opencode/internal/solana/extensions/AssociatedTokenAccount.kt b/services/opencode/src/commonMain/kotlin/com/getcode/opencode/internal/solana/extensions/AssociatedTokenAccount.kt similarity index 100% rename from services/opencode/src/main/kotlin/com/getcode/opencode/internal/solana/extensions/AssociatedTokenAccount.kt rename to services/opencode/src/commonMain/kotlin/com/getcode/opencode/internal/solana/extensions/AssociatedTokenAccount.kt diff --git a/services/opencode/src/main/kotlin/com/getcode/opencode/internal/solana/extensions/ExtractServerParameters.kt b/services/opencode/src/commonMain/kotlin/com/getcode/opencode/internal/solana/extensions/ExtractServerParameters.kt similarity index 100% rename from services/opencode/src/main/kotlin/com/getcode/opencode/internal/solana/extensions/ExtractServerParameters.kt rename to services/opencode/src/commonMain/kotlin/com/getcode/opencode/internal/solana/extensions/ExtractServerParameters.kt diff --git a/services/opencode/src/main/kotlin/com/getcode/opencode/internal/solana/extensions/PublicKey.kt b/services/opencode/src/commonMain/kotlin/com/getcode/opencode/internal/solana/extensions/PublicKey.kt similarity index 99% rename from services/opencode/src/main/kotlin/com/getcode/opencode/internal/solana/extensions/PublicKey.kt rename to services/opencode/src/commonMain/kotlin/com/getcode/opencode/internal/solana/extensions/PublicKey.kt index 766c543ae1..d0beab61a7 100644 --- a/services/opencode/src/main/kotlin/com/getcode/opencode/internal/solana/extensions/PublicKey.kt +++ b/services/opencode/src/commonMain/kotlin/com/getcode/opencode/internal/solana/extensions/PublicKey.kt @@ -1,7 +1,7 @@ package com.getcode.opencode.internal.solana.extensions import com.getcode.crypt.Sha256Hash -import com.getcode.ed25519.Ed25519 +import com.getcode.ed25519kmp.Ed25519 import com.getcode.opencode.internal.solana.vmAuthority import com.getcode.opencode.internal.solana.programs.AssociatedTokenProgram import com.getcode.opencode.internal.solana.programs.CoinbaseStableSwapperProgram diff --git a/services/opencode/src/main/kotlin/com/getcode/opencode/internal/solana/extensions/TimelockDerivedAccounts.kt b/services/opencode/src/commonMain/kotlin/com/getcode/opencode/internal/solana/extensions/TimelockDerivedAccounts.kt similarity index 100% rename from services/opencode/src/main/kotlin/com/getcode/opencode/internal/solana/extensions/TimelockDerivedAccounts.kt rename to services/opencode/src/commonMain/kotlin/com/getcode/opencode/internal/solana/extensions/TimelockDerivedAccounts.kt diff --git a/services/opencode/src/main/kotlin/com/getcode/opencode/internal/solana/extensions/Token.kt b/services/opencode/src/commonMain/kotlin/com/getcode/opencode/internal/solana/extensions/Token.kt similarity index 100% rename from services/opencode/src/main/kotlin/com/getcode/opencode/internal/solana/extensions/Token.kt rename to services/opencode/src/commonMain/kotlin/com/getcode/opencode/internal/solana/extensions/Token.kt diff --git a/services/opencode/src/main/kotlin/com/getcode/opencode/internal/solana/extensions/UInt16.kt b/services/opencode/src/commonMain/kotlin/com/getcode/opencode/internal/solana/extensions/UInt16.kt similarity index 100% rename from services/opencode/src/main/kotlin/com/getcode/opencode/internal/solana/extensions/UInt16.kt rename to services/opencode/src/commonMain/kotlin/com/getcode/opencode/internal/solana/extensions/UInt16.kt diff --git a/services/opencode/src/main/kotlin/com/getcode/opencode/internal/solana/model/CoinbaseStablecoinPoolAccount.kt b/services/opencode/src/commonMain/kotlin/com/getcode/opencode/internal/solana/model/CoinbaseStablecoinPoolAccount.kt similarity index 100% rename from services/opencode/src/main/kotlin/com/getcode/opencode/internal/solana/model/CoinbaseStablecoinPoolAccount.kt rename to services/opencode/src/commonMain/kotlin/com/getcode/opencode/internal/solana/model/CoinbaseStablecoinPoolAccount.kt diff --git a/services/opencode/src/main/kotlin/com/getcode/opencode/internal/solana/model/CoinbaseSwapAccounts.kt b/services/opencode/src/commonMain/kotlin/com/getcode/opencode/internal/solana/model/CoinbaseSwapAccounts.kt similarity index 100% rename from services/opencode/src/main/kotlin/com/getcode/opencode/internal/solana/model/CoinbaseSwapAccounts.kt rename to services/opencode/src/commonMain/kotlin/com/getcode/opencode/internal/solana/model/CoinbaseSwapAccounts.kt diff --git a/services/opencode/src/main/kotlin/com/getcode/opencode/internal/solana/model/MessageAddressLookupTable.kt b/services/opencode/src/commonMain/kotlin/com/getcode/opencode/internal/solana/model/MessageAddressLookupTable.kt similarity index 100% rename from services/opencode/src/main/kotlin/com/getcode/opencode/internal/solana/model/MessageAddressLookupTable.kt rename to services/opencode/src/commonMain/kotlin/com/getcode/opencode/internal/solana/model/MessageAddressLookupTable.kt diff --git a/services/opencode/src/main/kotlin/com/getcode/opencode/internal/solana/model/SwapId.kt b/services/opencode/src/commonMain/kotlin/com/getcode/opencode/internal/solana/model/SwapId.kt similarity index 90% rename from services/opencode/src/main/kotlin/com/getcode/opencode/internal/solana/model/SwapId.kt rename to services/opencode/src/commonMain/kotlin/com/getcode/opencode/internal/solana/model/SwapId.kt index 0177547be0..084b97a961 100644 --- a/services/opencode/src/main/kotlin/com/getcode/opencode/internal/solana/model/SwapId.kt +++ b/services/opencode/src/commonMain/kotlin/com/getcode/opencode/internal/solana/model/SwapId.kt @@ -1,10 +1,10 @@ package com.getcode.opencode.internal.solana.model -import android.os.Parcelable +import com.getcode.libs.parcelable.Parcelable import com.getcode.opencode.utils.generate import com.getcode.solana.keys.PublicKey import com.getcode.utils.serializer.ByteListAsBase64Serializer -import kotlinx.parcelize.Parcelize +import com.getcode.libs.parcelable.Parcelize import kotlinx.serialization.Serializable @Serializable diff --git a/services/opencode/src/main/kotlin/com/getcode/opencode/internal/solana/model/Vault.kt b/services/opencode/src/commonMain/kotlin/com/getcode/opencode/internal/solana/model/Vault.kt similarity index 100% rename from services/opencode/src/main/kotlin/com/getcode/opencode/internal/solana/model/Vault.kt rename to services/opencode/src/commonMain/kotlin/com/getcode/opencode/internal/solana/model/Vault.kt diff --git a/services/opencode/src/main/kotlin/com/getcode/opencode/internal/solana/programs/AssociatedTokenProgram.kt b/services/opencode/src/commonMain/kotlin/com/getcode/opencode/internal/solana/programs/AssociatedTokenProgram.kt similarity index 100% rename from services/opencode/src/main/kotlin/com/getcode/opencode/internal/solana/programs/AssociatedTokenProgram.kt rename to services/opencode/src/commonMain/kotlin/com/getcode/opencode/internal/solana/programs/AssociatedTokenProgram.kt diff --git a/services/opencode/src/main/kotlin/com/getcode/opencode/internal/solana/programs/AssociatedTokenProgram_CreateIdempotent.kt b/services/opencode/src/commonMain/kotlin/com/getcode/opencode/internal/solana/programs/AssociatedTokenProgram_CreateIdempotent.kt similarity index 100% rename from services/opencode/src/main/kotlin/com/getcode/opencode/internal/solana/programs/AssociatedTokenProgram_CreateIdempotent.kt rename to services/opencode/src/commonMain/kotlin/com/getcode/opencode/internal/solana/programs/AssociatedTokenProgram_CreateIdempotent.kt diff --git a/services/opencode/src/main/kotlin/com/getcode/opencode/internal/solana/programs/CoinbaseStableSwapperProgram.kt b/services/opencode/src/commonMain/kotlin/com/getcode/opencode/internal/solana/programs/CoinbaseStableSwapperProgram.kt similarity index 100% rename from services/opencode/src/main/kotlin/com/getcode/opencode/internal/solana/programs/CoinbaseStableSwapperProgram.kt rename to services/opencode/src/commonMain/kotlin/com/getcode/opencode/internal/solana/programs/CoinbaseStableSwapperProgram.kt diff --git a/services/opencode/src/main/kotlin/com/getcode/opencode/internal/solana/programs/CoinbaseStableSwapperProgram_SwapV2.kt b/services/opencode/src/commonMain/kotlin/com/getcode/opencode/internal/solana/programs/CoinbaseStableSwapperProgram_SwapV2.kt similarity index 100% rename from services/opencode/src/main/kotlin/com/getcode/opencode/internal/solana/programs/CoinbaseStableSwapperProgram_SwapV2.kt rename to services/opencode/src/commonMain/kotlin/com/getcode/opencode/internal/solana/programs/CoinbaseStableSwapperProgram_SwapV2.kt diff --git a/services/opencode/src/main/kotlin/com/getcode/opencode/internal/solana/programs/ComputeBudgetProgram.kt b/services/opencode/src/commonMain/kotlin/com/getcode/opencode/internal/solana/programs/ComputeBudgetProgram.kt similarity index 100% rename from services/opencode/src/main/kotlin/com/getcode/opencode/internal/solana/programs/ComputeBudgetProgram.kt rename to services/opencode/src/commonMain/kotlin/com/getcode/opencode/internal/solana/programs/ComputeBudgetProgram.kt diff --git a/services/opencode/src/main/kotlin/com/getcode/opencode/internal/solana/programs/ComputeBudgetProgram_SetComputeUnitLimit.kt b/services/opencode/src/commonMain/kotlin/com/getcode/opencode/internal/solana/programs/ComputeBudgetProgram_SetComputeUnitLimit.kt similarity index 100% rename from services/opencode/src/main/kotlin/com/getcode/opencode/internal/solana/programs/ComputeBudgetProgram_SetComputeUnitLimit.kt rename to services/opencode/src/commonMain/kotlin/com/getcode/opencode/internal/solana/programs/ComputeBudgetProgram_SetComputeUnitLimit.kt diff --git a/services/opencode/src/main/kotlin/com/getcode/opencode/internal/solana/programs/ComputeBudgetProgram_SetComputeUnitPrice.kt b/services/opencode/src/commonMain/kotlin/com/getcode/opencode/internal/solana/programs/ComputeBudgetProgram_SetComputeUnitPrice.kt similarity index 100% rename from services/opencode/src/main/kotlin/com/getcode/opencode/internal/solana/programs/ComputeBudgetProgram_SetComputeUnitPrice.kt rename to services/opencode/src/commonMain/kotlin/com/getcode/opencode/internal/solana/programs/ComputeBudgetProgram_SetComputeUnitPrice.kt diff --git a/services/opencode/src/main/kotlin/com/getcode/opencode/internal/solana/programs/CurrencyCreatorProgram.kt b/services/opencode/src/commonMain/kotlin/com/getcode/opencode/internal/solana/programs/CurrencyCreatorProgram.kt similarity index 100% rename from services/opencode/src/main/kotlin/com/getcode/opencode/internal/solana/programs/CurrencyCreatorProgram.kt rename to services/opencode/src/commonMain/kotlin/com/getcode/opencode/internal/solana/programs/CurrencyCreatorProgram.kt diff --git a/services/opencode/src/main/kotlin/com/getcode/opencode/internal/solana/programs/CurrencyCreatorProgram_BuyAndDepositIntoVm.kt b/services/opencode/src/commonMain/kotlin/com/getcode/opencode/internal/solana/programs/CurrencyCreatorProgram_BuyAndDepositIntoVm.kt similarity index 100% rename from services/opencode/src/main/kotlin/com/getcode/opencode/internal/solana/programs/CurrencyCreatorProgram_BuyAndDepositIntoVm.kt rename to services/opencode/src/commonMain/kotlin/com/getcode/opencode/internal/solana/programs/CurrencyCreatorProgram_BuyAndDepositIntoVm.kt diff --git a/services/opencode/src/main/kotlin/com/getcode/opencode/internal/solana/programs/CurrencyCreatorProgram_BuyTokens.kt b/services/opencode/src/commonMain/kotlin/com/getcode/opencode/internal/solana/programs/CurrencyCreatorProgram_BuyTokens.kt similarity index 100% rename from services/opencode/src/main/kotlin/com/getcode/opencode/internal/solana/programs/CurrencyCreatorProgram_BuyTokens.kt rename to services/opencode/src/commonMain/kotlin/com/getcode/opencode/internal/solana/programs/CurrencyCreatorProgram_BuyTokens.kt diff --git a/services/opencode/src/main/kotlin/com/getcode/opencode/internal/solana/programs/CurrencyCreatorProgram_InitializeCurrency.kt b/services/opencode/src/commonMain/kotlin/com/getcode/opencode/internal/solana/programs/CurrencyCreatorProgram_InitializeCurrency.kt similarity index 100% rename from services/opencode/src/main/kotlin/com/getcode/opencode/internal/solana/programs/CurrencyCreatorProgram_InitializeCurrency.kt rename to services/opencode/src/commonMain/kotlin/com/getcode/opencode/internal/solana/programs/CurrencyCreatorProgram_InitializeCurrency.kt diff --git a/services/opencode/src/main/kotlin/com/getcode/opencode/internal/solana/programs/CurrencyCreatorProgram_InitializePool.kt b/services/opencode/src/commonMain/kotlin/com/getcode/opencode/internal/solana/programs/CurrencyCreatorProgram_InitializePool.kt similarity index 100% rename from services/opencode/src/main/kotlin/com/getcode/opencode/internal/solana/programs/CurrencyCreatorProgram_InitializePool.kt rename to services/opencode/src/commonMain/kotlin/com/getcode/opencode/internal/solana/programs/CurrencyCreatorProgram_InitializePool.kt diff --git a/services/opencode/src/main/kotlin/com/getcode/opencode/internal/solana/programs/CurrencyCreatorProgram_SellAndDepositIntoVm.kt b/services/opencode/src/commonMain/kotlin/com/getcode/opencode/internal/solana/programs/CurrencyCreatorProgram_SellAndDepositIntoVm.kt similarity index 100% rename from services/opencode/src/main/kotlin/com/getcode/opencode/internal/solana/programs/CurrencyCreatorProgram_SellAndDepositIntoVm.kt rename to services/opencode/src/commonMain/kotlin/com/getcode/opencode/internal/solana/programs/CurrencyCreatorProgram_SellAndDepositIntoVm.kt diff --git a/services/opencode/src/main/kotlin/com/getcode/opencode/internal/solana/programs/CurrencyCreatorProgram_SellTokens.kt b/services/opencode/src/commonMain/kotlin/com/getcode/opencode/internal/solana/programs/CurrencyCreatorProgram_SellTokens.kt similarity index 100% rename from services/opencode/src/main/kotlin/com/getcode/opencode/internal/solana/programs/CurrencyCreatorProgram_SellTokens.kt rename to services/opencode/src/commonMain/kotlin/com/getcode/opencode/internal/solana/programs/CurrencyCreatorProgram_SellTokens.kt diff --git a/services/opencode/src/main/kotlin/com/getcode/opencode/internal/solana/programs/InstructionType.kt b/services/opencode/src/commonMain/kotlin/com/getcode/opencode/internal/solana/programs/InstructionType.kt similarity index 100% rename from services/opencode/src/main/kotlin/com/getcode/opencode/internal/solana/programs/InstructionType.kt rename to services/opencode/src/commonMain/kotlin/com/getcode/opencode/internal/solana/programs/InstructionType.kt diff --git a/services/opencode/src/main/kotlin/com/getcode/opencode/internal/solana/programs/MemoProgram.kt b/services/opencode/src/commonMain/kotlin/com/getcode/opencode/internal/solana/programs/MemoProgram.kt similarity index 100% rename from services/opencode/src/main/kotlin/com/getcode/opencode/internal/solana/programs/MemoProgram.kt rename to services/opencode/src/commonMain/kotlin/com/getcode/opencode/internal/solana/programs/MemoProgram.kt diff --git a/services/opencode/src/main/kotlin/com/getcode/opencode/internal/solana/programs/MemoProgram_Memo.kt b/services/opencode/src/commonMain/kotlin/com/getcode/opencode/internal/solana/programs/MemoProgram_Memo.kt similarity index 100% rename from services/opencode/src/main/kotlin/com/getcode/opencode/internal/solana/programs/MemoProgram_Memo.kt rename to services/opencode/src/commonMain/kotlin/com/getcode/opencode/internal/solana/programs/MemoProgram_Memo.kt diff --git a/services/opencode/src/main/kotlin/com/getcode/opencode/internal/solana/programs/SwapValidatorProgram.kt b/services/opencode/src/commonMain/kotlin/com/getcode/opencode/internal/solana/programs/SwapValidatorProgram.kt similarity index 100% rename from services/opencode/src/main/kotlin/com/getcode/opencode/internal/solana/programs/SwapValidatorProgram.kt rename to services/opencode/src/commonMain/kotlin/com/getcode/opencode/internal/solana/programs/SwapValidatorProgram.kt diff --git a/services/opencode/src/main/kotlin/com/getcode/opencode/internal/solana/programs/SysVar.kt b/services/opencode/src/commonMain/kotlin/com/getcode/opencode/internal/solana/programs/SysVar.kt similarity index 100% rename from services/opencode/src/main/kotlin/com/getcode/opencode/internal/solana/programs/SysVar.kt rename to services/opencode/src/commonMain/kotlin/com/getcode/opencode/internal/solana/programs/SysVar.kt diff --git a/services/opencode/src/main/kotlin/com/getcode/opencode/internal/solana/programs/SystemProgram.kt b/services/opencode/src/commonMain/kotlin/com/getcode/opencode/internal/solana/programs/SystemProgram.kt similarity index 100% rename from services/opencode/src/main/kotlin/com/getcode/opencode/internal/solana/programs/SystemProgram.kt rename to services/opencode/src/commonMain/kotlin/com/getcode/opencode/internal/solana/programs/SystemProgram.kt diff --git a/services/opencode/src/main/kotlin/com/getcode/opencode/internal/solana/programs/SystemProgram_AdvanceNonce.kt b/services/opencode/src/commonMain/kotlin/com/getcode/opencode/internal/solana/programs/SystemProgram_AdvanceNonce.kt similarity index 100% rename from services/opencode/src/main/kotlin/com/getcode/opencode/internal/solana/programs/SystemProgram_AdvanceNonce.kt rename to services/opencode/src/commonMain/kotlin/com/getcode/opencode/internal/solana/programs/SystemProgram_AdvanceNonce.kt diff --git a/services/opencode/src/main/kotlin/com/getcode/opencode/internal/solana/programs/TimelockProgram.kt b/services/opencode/src/commonMain/kotlin/com/getcode/opencode/internal/solana/programs/TimelockProgram.kt similarity index 100% rename from services/opencode/src/main/kotlin/com/getcode/opencode/internal/solana/programs/TimelockProgram.kt rename to services/opencode/src/commonMain/kotlin/com/getcode/opencode/internal/solana/programs/TimelockProgram.kt diff --git a/services/opencode/src/main/kotlin/com/getcode/opencode/internal/solana/programs/TokenProgram.kt b/services/opencode/src/commonMain/kotlin/com/getcode/opencode/internal/solana/programs/TokenProgram.kt similarity index 100% rename from services/opencode/src/main/kotlin/com/getcode/opencode/internal/solana/programs/TokenProgram.kt rename to services/opencode/src/commonMain/kotlin/com/getcode/opencode/internal/solana/programs/TokenProgram.kt diff --git a/services/opencode/src/main/kotlin/com/getcode/opencode/internal/solana/programs/TokenProgram_CloseAccount.kt b/services/opencode/src/commonMain/kotlin/com/getcode/opencode/internal/solana/programs/TokenProgram_CloseAccount.kt similarity index 100% rename from services/opencode/src/main/kotlin/com/getcode/opencode/internal/solana/programs/TokenProgram_CloseAccount.kt rename to services/opencode/src/commonMain/kotlin/com/getcode/opencode/internal/solana/programs/TokenProgram_CloseAccount.kt diff --git a/services/opencode/src/main/kotlin/com/getcode/opencode/internal/solana/programs/TokenProgram_Transfer.kt b/services/opencode/src/commonMain/kotlin/com/getcode/opencode/internal/solana/programs/TokenProgram_Transfer.kt similarity index 100% rename from services/opencode/src/main/kotlin/com/getcode/opencode/internal/solana/programs/TokenProgram_Transfer.kt rename to services/opencode/src/commonMain/kotlin/com/getcode/opencode/internal/solana/programs/TokenProgram_Transfer.kt diff --git a/services/opencode/src/main/kotlin/com/getcode/opencode/internal/solana/programs/UsdfProgram.kt b/services/opencode/src/commonMain/kotlin/com/getcode/opencode/internal/solana/programs/UsdfProgram.kt similarity index 100% rename from services/opencode/src/main/kotlin/com/getcode/opencode/internal/solana/programs/UsdfProgram.kt rename to services/opencode/src/commonMain/kotlin/com/getcode/opencode/internal/solana/programs/UsdfProgram.kt diff --git a/services/opencode/src/main/kotlin/com/getcode/opencode/internal/solana/programs/UsdfProgram_Swap.kt b/services/opencode/src/commonMain/kotlin/com/getcode/opencode/internal/solana/programs/UsdfProgram_Swap.kt similarity index 100% rename from services/opencode/src/main/kotlin/com/getcode/opencode/internal/solana/programs/UsdfProgram_Swap.kt rename to services/opencode/src/commonMain/kotlin/com/getcode/opencode/internal/solana/programs/UsdfProgram_Swap.kt diff --git a/services/opencode/src/main/kotlin/com/getcode/opencode/internal/solana/programs/UsdfProgram_Transfer.kt b/services/opencode/src/commonMain/kotlin/com/getcode/opencode/internal/solana/programs/UsdfProgram_Transfer.kt similarity index 100% rename from services/opencode/src/main/kotlin/com/getcode/opencode/internal/solana/programs/UsdfProgram_Transfer.kt rename to services/opencode/src/commonMain/kotlin/com/getcode/opencode/internal/solana/programs/UsdfProgram_Transfer.kt diff --git a/services/opencode/src/main/kotlin/com/getcode/opencode/internal/solana/programs/VirtualMachineProgram.kt b/services/opencode/src/commonMain/kotlin/com/getcode/opencode/internal/solana/programs/VirtualMachineProgram.kt similarity index 100% rename from services/opencode/src/main/kotlin/com/getcode/opencode/internal/solana/programs/VirtualMachineProgram.kt rename to services/opencode/src/commonMain/kotlin/com/getcode/opencode/internal/solana/programs/VirtualMachineProgram.kt diff --git a/services/opencode/src/main/kotlin/com/getcode/opencode/internal/solana/programs/VirtualMachineProgram_CloseSwapAccountIfEmpty.kt b/services/opencode/src/commonMain/kotlin/com/getcode/opencode/internal/solana/programs/VirtualMachineProgram_CloseSwapAccountIfEmpty.kt similarity index 100% rename from services/opencode/src/main/kotlin/com/getcode/opencode/internal/solana/programs/VirtualMachineProgram_CloseSwapAccountIfEmpty.kt rename to services/opencode/src/commonMain/kotlin/com/getcode/opencode/internal/solana/programs/VirtualMachineProgram_CloseSwapAccountIfEmpty.kt diff --git a/services/opencode/src/main/kotlin/com/getcode/opencode/internal/solana/programs/VirtualMachineProgram_InitVm.kt b/services/opencode/src/commonMain/kotlin/com/getcode/opencode/internal/solana/programs/VirtualMachineProgram_InitVm.kt similarity index 100% rename from services/opencode/src/main/kotlin/com/getcode/opencode/internal/solana/programs/VirtualMachineProgram_InitVm.kt rename to services/opencode/src/commonMain/kotlin/com/getcode/opencode/internal/solana/programs/VirtualMachineProgram_InitVm.kt diff --git a/services/opencode/src/main/kotlin/com/getcode/opencode/internal/solana/programs/VirtualMachineProgram_TransferForSwap.kt b/services/opencode/src/commonMain/kotlin/com/getcode/opencode/internal/solana/programs/VirtualMachineProgram_TransferForSwap.kt similarity index 100% rename from services/opencode/src/main/kotlin/com/getcode/opencode/internal/solana/programs/VirtualMachineProgram_TransferForSwap.kt rename to services/opencode/src/commonMain/kotlin/com/getcode/opencode/internal/solana/programs/VirtualMachineProgram_TransferForSwap.kt diff --git a/services/opencode/src/main/kotlin/com/getcode/opencode/internal/solana/programs/VirtualMachineProgram_TransferForSwapWithFee.kt b/services/opencode/src/commonMain/kotlin/com/getcode/opencode/internal/solana/programs/VirtualMachineProgram_TransferForSwapWithFee.kt similarity index 100% rename from services/opencode/src/main/kotlin/com/getcode/opencode/internal/solana/programs/VirtualMachineProgram_TransferForSwapWithFee.kt rename to services/opencode/src/commonMain/kotlin/com/getcode/opencode/internal/solana/programs/VirtualMachineProgram_TransferForSwapWithFee.kt diff --git a/services/opencode/src/main/kotlin/com/getcode/opencode/internal/solana/utils/DataSlice.kt b/services/opencode/src/commonMain/kotlin/com/getcode/opencode/internal/solana/utils/DataSlice.kt similarity index 100% rename from services/opencode/src/main/kotlin/com/getcode/opencode/internal/solana/utils/DataSlice.kt rename to services/opencode/src/commonMain/kotlin/com/getcode/opencode/internal/solana/utils/DataSlice.kt diff --git a/services/opencode/src/main/kotlin/com/getcode/opencode/internal/solana/utils/Differ.kt b/services/opencode/src/commonMain/kotlin/com/getcode/opencode/internal/solana/utils/Differ.kt similarity index 75% rename from services/opencode/src/main/kotlin/com/getcode/opencode/internal/solana/utils/Differ.kt rename to services/opencode/src/commonMain/kotlin/com/getcode/opencode/internal/solana/utils/Differ.kt index d0225bfeca..bee155f223 100644 --- a/services/opencode/src/main/kotlin/com/getcode/opencode/internal/solana/utils/Differ.kt +++ b/services/opencode/src/commonMain/kotlin/com/getcode/opencode/internal/solana/utils/Differ.kt @@ -1,6 +1,6 @@ package com.getcode.opencode.internal.solana.utils -import timber.log.Timber +import com.getcode.utils.Log import kotlin.math.max internal fun printDiff(title: String, one: String, two: String) { @@ -10,8 +10,8 @@ internal fun printDiff(title: String, one: String, two: String) { internal fun printDiff(title: String, one: List, two: List) { val lineSeparator = "\n -\n" - Timber.d("✗ $title") - Timber.d("|----------------------------------------------------------------------") + Log.d("✗ $title") + Log.d("|----------------------------------------------------------------------") val lines = (0 until max(one.count(), two.count())).joinToString(lineSeparator) { i -> var oneValue = "-" @@ -32,10 +32,10 @@ internal fun printDiff(title: String, one: List, two: List) { content } - Timber.d(lines) - Timber.d("|----------------------------------------------------------------------") + Log.d(lines) + Log.d("|----------------------------------------------------------------------") } internal fun printMatch(title: String) { - Timber.d("✓ $title") + Log.d("✓ $title") } \ No newline at end of file diff --git a/services/opencode/src/main/kotlin/com/getcode/opencode/internal/transactors/AccountClusterFactory.kt b/services/opencode/src/commonMain/kotlin/com/getcode/opencode/internal/transactors/AccountClusterFactory.kt similarity index 100% rename from services/opencode/src/main/kotlin/com/getcode/opencode/internal/transactors/AccountClusterFactory.kt rename to services/opencode/src/commonMain/kotlin/com/getcode/opencode/internal/transactors/AccountClusterFactory.kt diff --git a/services/opencode/src/main/kotlin/com/getcode/opencode/internal/transactors/BillPresentationData.kt b/services/opencode/src/commonMain/kotlin/com/getcode/opencode/internal/transactors/BillPresentationData.kt similarity index 100% rename from services/opencode/src/main/kotlin/com/getcode/opencode/internal/transactors/BillPresentationData.kt rename to services/opencode/src/commonMain/kotlin/com/getcode/opencode/internal/transactors/BillPresentationData.kt diff --git a/services/opencode/src/main/kotlin/com/getcode/opencode/internal/transactors/GiveBillTransactor.kt b/services/opencode/src/commonMain/kotlin/com/getcode/opencode/internal/transactors/GiveBillTransactor.kt similarity index 99% rename from services/opencode/src/main/kotlin/com/getcode/opencode/internal/transactors/GiveBillTransactor.kt rename to services/opencode/src/commonMain/kotlin/com/getcode/opencode/internal/transactors/GiveBillTransactor.kt index 2a0d282ab2..b2ee048f37 100644 --- a/services/opencode/src/main/kotlin/com/getcode/opencode/internal/transactors/GiveBillTransactor.kt +++ b/services/opencode/src/commonMain/kotlin/com/getcode/opencode/internal/transactors/GiveBillTransactor.kt @@ -1,6 +1,6 @@ package com.getcode.opencode.internal.transactors -import com.getcode.ed25519.Ed25519.KeyPair +import com.getcode.ed25519kmp.Ed25519.KeyPair import com.getcode.opencode.controllers.MessagingController import com.getcode.opencode.controllers.TransactionController import com.getcode.opencode.exchange.VerifiedFiatCalculator diff --git a/services/opencode/src/main/kotlin/com/getcode/opencode/internal/transactors/GrabBillTransactor.kt b/services/opencode/src/commonMain/kotlin/com/getcode/opencode/internal/transactors/GrabBillTransactor.kt similarity index 100% rename from services/opencode/src/main/kotlin/com/getcode/opencode/internal/transactors/GrabBillTransactor.kt rename to services/opencode/src/commonMain/kotlin/com/getcode/opencode/internal/transactors/GrabBillTransactor.kt diff --git a/services/opencode/src/main/kotlin/com/getcode/opencode/internal/transactors/PayloadFactory.kt b/services/opencode/src/commonMain/kotlin/com/getcode/opencode/internal/transactors/PayloadFactory.kt similarity index 96% rename from services/opencode/src/main/kotlin/com/getcode/opencode/internal/transactors/PayloadFactory.kt rename to services/opencode/src/commonMain/kotlin/com/getcode/opencode/internal/transactors/PayloadFactory.kt index 88461f9456..0a3d208db7 100644 --- a/services/opencode/src/main/kotlin/com/getcode/opencode/internal/transactors/PayloadFactory.kt +++ b/services/opencode/src/commonMain/kotlin/com/getcode/opencode/internal/transactors/PayloadFactory.kt @@ -1,6 +1,6 @@ package com.getcode.opencode.internal.transactors -import com.getcode.ed25519.Ed25519.KeyPair +import com.getcode.ed25519kmp.Ed25519.KeyPair import com.getcode.opencode.model.core.OpenCodePayload import com.getcode.opencode.model.core.PayloadKind import com.getcode.opencode.model.financial.Fiat diff --git a/services/opencode/src/main/kotlin/com/getcode/opencode/internal/transactors/ReceiveGiftCardTransactor.kt b/services/opencode/src/commonMain/kotlin/com/getcode/opencode/internal/transactors/ReceiveGiftCardTransactor.kt similarity index 100% rename from services/opencode/src/main/kotlin/com/getcode/opencode/internal/transactors/ReceiveGiftCardTransactor.kt rename to services/opencode/src/commonMain/kotlin/com/getcode/opencode/internal/transactors/ReceiveGiftCardTransactor.kt diff --git a/services/opencode/src/main/kotlin/com/getcode/opencode/internal/transactors/SendGiftCardTransactor.kt b/services/opencode/src/commonMain/kotlin/com/getcode/opencode/internal/transactors/SendGiftCardTransactor.kt similarity index 99% rename from services/opencode/src/main/kotlin/com/getcode/opencode/internal/transactors/SendGiftCardTransactor.kt rename to services/opencode/src/commonMain/kotlin/com/getcode/opencode/internal/transactors/SendGiftCardTransactor.kt index 4719a2c027..c309343607 100644 --- a/services/opencode/src/main/kotlin/com/getcode/opencode/internal/transactors/SendGiftCardTransactor.kt +++ b/services/opencode/src/commonMain/kotlin/com/getcode/opencode/internal/transactors/SendGiftCardTransactor.kt @@ -1,6 +1,6 @@ package com.getcode.opencode.internal.transactors -import com.getcode.ed25519.Ed25519.KeyPair +import com.getcode.ed25519kmp.Ed25519.KeyPair import com.getcode.opencode.controllers.TransactionController import com.getcode.opencode.internal.extensions.toPublicKey import com.getcode.opencode.internal.manager.VerifiedState diff --git a/services/opencode/src/main/kotlin/com/getcode/opencode/internal/transactors/Transactor.kt b/services/opencode/src/commonMain/kotlin/com/getcode/opencode/internal/transactors/Transactor.kt similarity index 100% rename from services/opencode/src/main/kotlin/com/getcode/opencode/internal/transactors/Transactor.kt rename to services/opencode/src/commonMain/kotlin/com/getcode/opencode/internal/transactors/Transactor.kt diff --git a/services/opencode/src/main/kotlin/com/getcode/opencode/managers/BillTransactionManager.kt b/services/opencode/src/commonMain/kotlin/com/getcode/opencode/managers/BillTransactionManager.kt similarity index 100% rename from services/opencode/src/main/kotlin/com/getcode/opencode/managers/BillTransactionManager.kt rename to services/opencode/src/commonMain/kotlin/com/getcode/opencode/managers/BillTransactionManager.kt diff --git a/services/opencode/src/main/kotlin/com/getcode/opencode/managers/GiftCardManager.kt b/services/opencode/src/commonMain/kotlin/com/getcode/opencode/managers/GiftCardManager.kt similarity index 100% rename from services/opencode/src/main/kotlin/com/getcode/opencode/managers/GiftCardManager.kt rename to services/opencode/src/commonMain/kotlin/com/getcode/opencode/managers/GiftCardManager.kt diff --git a/services/opencode/src/main/kotlin/com/getcode/opencode/managers/MnemonicManager.kt b/services/opencode/src/commonMain/kotlin/com/getcode/opencode/managers/MnemonicManager.kt similarity index 96% rename from services/opencode/src/main/kotlin/com/getcode/opencode/managers/MnemonicManager.kt rename to services/opencode/src/commonMain/kotlin/com/getcode/opencode/managers/MnemonicManager.kt index a89333f879..02ea7ff2f6 100644 --- a/services/opencode/src/main/kotlin/com/getcode/opencode/managers/MnemonicManager.kt +++ b/services/opencode/src/commonMain/kotlin/com/getcode/opencode/managers/MnemonicManager.kt @@ -3,7 +3,7 @@ package com.getcode.opencode.managers import com.getcode.crypt.MnemonicCache import com.getcode.crypt.MnemonicCode import com.getcode.crypt.MnemonicPhrase -import com.getcode.ed25519.Ed25519.KeyPair +import com.getcode.ed25519kmp.Ed25519.KeyPair import com.getcode.opencode.generators.MnemonicGenerator import com.getcode.opencode.utils.Base58String import com.getcode.opencode.utils.Base64String diff --git a/services/opencode/src/main/kotlin/com/getcode/opencode/mapper/Mapper.kt b/services/opencode/src/commonMain/kotlin/com/getcode/opencode/mapper/Mapper.kt similarity index 100% rename from services/opencode/src/main/kotlin/com/getcode/opencode/mapper/Mapper.kt rename to services/opencode/src/commonMain/kotlin/com/getcode/opencode/mapper/Mapper.kt diff --git a/services/opencode/src/main/kotlin/com/getcode/opencode/model/accounts/AccountCluster.kt b/services/opencode/src/commonMain/kotlin/com/getcode/opencode/model/accounts/AccountCluster.kt similarity index 98% rename from services/opencode/src/main/kotlin/com/getcode/opencode/model/accounts/AccountCluster.kt rename to services/opencode/src/commonMain/kotlin/com/getcode/opencode/model/accounts/AccountCluster.kt index 465d7799e0..7e872f5944 100644 --- a/services/opencode/src/main/kotlin/com/getcode/opencode/model/accounts/AccountCluster.kt +++ b/services/opencode/src/commonMain/kotlin/com/getcode/opencode/model/accounts/AccountCluster.kt @@ -1,7 +1,7 @@ package com.getcode.opencode.model.accounts import com.getcode.crypt.DerivedKey -import com.getcode.ed25519.Ed25519 +import com.getcode.ed25519kmp.Ed25519 import com.getcode.opencode.internal.solana.extensions.newInstance import com.getcode.opencode.internal.extensions.toPublicKey import com.getcode.opencode.internal.solana.extensions.deriveAssociatedAccount diff --git a/services/opencode/src/main/kotlin/com/getcode/opencode/model/accounts/AccountFilter.kt b/services/opencode/src/commonMain/kotlin/com/getcode/opencode/model/accounts/AccountFilter.kt similarity index 100% rename from services/opencode/src/main/kotlin/com/getcode/opencode/model/accounts/AccountFilter.kt rename to services/opencode/src/commonMain/kotlin/com/getcode/opencode/model/accounts/AccountFilter.kt diff --git a/services/opencode/src/main/kotlin/com/getcode/opencode/model/accounts/AccountInfo.kt b/services/opencode/src/commonMain/kotlin/com/getcode/opencode/model/accounts/AccountInfo.kt similarity index 100% rename from services/opencode/src/main/kotlin/com/getcode/opencode/model/accounts/AccountInfo.kt rename to services/opencode/src/commonMain/kotlin/com/getcode/opencode/model/accounts/AccountInfo.kt diff --git a/services/opencode/src/main/kotlin/com/getcode/opencode/model/accounts/AccountResponse.kt b/services/opencode/src/commonMain/kotlin/com/getcode/opencode/model/accounts/AccountResponse.kt similarity index 100% rename from services/opencode/src/main/kotlin/com/getcode/opencode/model/accounts/AccountResponse.kt rename to services/opencode/src/commonMain/kotlin/com/getcode/opencode/model/accounts/AccountResponse.kt diff --git a/services/opencode/src/main/kotlin/com/getcode/opencode/model/accounts/AccountType.kt b/services/opencode/src/commonMain/kotlin/com/getcode/opencode/model/accounts/AccountType.kt similarity index 100% rename from services/opencode/src/main/kotlin/com/getcode/opencode/model/accounts/AccountType.kt rename to services/opencode/src/commonMain/kotlin/com/getcode/opencode/model/accounts/AccountType.kt diff --git a/services/opencode/src/main/kotlin/com/getcode/opencode/model/accounts/GiftCardAccount.kt b/services/opencode/src/commonMain/kotlin/com/getcode/opencode/model/accounts/GiftCardAccount.kt similarity index 100% rename from services/opencode/src/main/kotlin/com/getcode/opencode/model/accounts/GiftCardAccount.kt rename to services/opencode/src/commonMain/kotlin/com/getcode/opencode/model/accounts/GiftCardAccount.kt diff --git a/services/opencode/src/main/kotlin/com/getcode/opencode/model/accounts/PoolAccount.kt b/services/opencode/src/commonMain/kotlin/com/getcode/opencode/model/accounts/PoolAccount.kt similarity index 95% rename from services/opencode/src/main/kotlin/com/getcode/opencode/model/accounts/PoolAccount.kt rename to services/opencode/src/commonMain/kotlin/com/getcode/opencode/model/accounts/PoolAccount.kt index 335e7d5eb5..792bb4bb82 100644 --- a/services/opencode/src/main/kotlin/com/getcode/opencode/model/accounts/PoolAccount.kt +++ b/services/opencode/src/commonMain/kotlin/com/getcode/opencode/model/accounts/PoolAccount.kt @@ -3,7 +3,7 @@ package com.getcode.opencode.model.accounts import com.getcode.crypt.DerivePath import com.getcode.crypt.DerivedKey import com.getcode.crypt.MnemonicPhrase -import com.getcode.ed25519.Ed25519 +import com.getcode.ed25519kmp.Ed25519 import com.getcode.solana.keys.Mint class PoolAccount( diff --git a/services/opencode/src/main/kotlin/com/getcode/opencode/model/core/EncryptedData.kt b/services/opencode/src/commonMain/kotlin/com/getcode/opencode/model/core/EncryptedData.kt similarity index 89% rename from services/opencode/src/main/kotlin/com/getcode/opencode/model/core/EncryptedData.kt rename to services/opencode/src/commonMain/kotlin/com/getcode/opencode/model/core/EncryptedData.kt index 4a3817244c..842de6dacd 100644 --- a/services/opencode/src/main/kotlin/com/getcode/opencode/model/core/EncryptedData.kt +++ b/services/opencode/src/commonMain/kotlin/com/getcode/opencode/model/core/EncryptedData.kt @@ -1,6 +1,6 @@ package com.getcode.opencode.model.core -import com.getcode.ed25519.Ed25519.KeyPair +import com.getcode.ed25519kmp.Ed25519.KeyPair import com.getcode.solana.keys.PublicKey import com.getcode.utils.serializer.PublicKeyAsStringSerializer import kotlinx.serialization.Serializable diff --git a/services/opencode/src/main/kotlin/com/getcode/opencode/model/core/ID.kt b/services/opencode/src/commonMain/kotlin/com/getcode/opencode/model/core/ID.kt similarity index 100% rename from services/opencode/src/main/kotlin/com/getcode/opencode/model/core/ID.kt rename to services/opencode/src/commonMain/kotlin/com/getcode/opencode/model/core/ID.kt diff --git a/services/opencode/src/main/kotlin/com/getcode/opencode/model/core/OpenCodePayload.kt b/services/opencode/src/commonMain/kotlin/com/getcode/opencode/model/core/OpenCodePayload.kt similarity index 96% rename from services/opencode/src/main/kotlin/com/getcode/opencode/model/core/OpenCodePayload.kt rename to services/opencode/src/commonMain/kotlin/com/getcode/opencode/model/core/OpenCodePayload.kt index cb4604f248..dc0b684f0c 100644 --- a/services/opencode/src/main/kotlin/com/getcode/opencode/model/core/OpenCodePayload.kt +++ b/services/opencode/src/commonMain/kotlin/com/getcode/opencode/model/core/OpenCodePayload.kt @@ -1,12 +1,11 @@ package com.getcode.opencode.model.core -import com.getcode.ed25519.Ed25519.KeyPair +import com.getcode.ed25519kmp.Ed25519.KeyPair import com.getcode.opencode.internal.solana.utils.DataSlice.byteToUnsignedInt import com.getcode.opencode.internal.solana.utils.DataSlice.suffix import com.getcode.opencode.model.financial.CurrencyCode import com.getcode.opencode.model.financial.Fiat import com.getcode.opencode.utils.deriveRendezvousKey -import com.kik.scan.Scanner import com.getcode.utils.byteArrayToLong import com.getcode.utils.longToByteArray @@ -28,7 +27,7 @@ data class OpenCodePayload( get() = (value as? UserId)?.value val codeData: ByteArray - get() = Scanner.encode(encode().toByteArray()) ?: ByteArray(LENGTH) + get() = encodeScanCode(encode().toByteArray()) ?: ByteArray(LENGTH) /** Serializes this payload into the fixed [LENGTH]-byte scan frame. */ fun encode(): List = kind.encode(value, nonce) diff --git a/services/opencode/src/main/kotlin/com/getcode/opencode/model/core/PayloadKind.kt b/services/opencode/src/commonMain/kotlin/com/getcode/opencode/model/core/PayloadKind.kt similarity index 100% rename from services/opencode/src/main/kotlin/com/getcode/opencode/model/core/PayloadKind.kt rename to services/opencode/src/commonMain/kotlin/com/getcode/opencode/model/core/PayloadKind.kt diff --git a/services/opencode/src/main/kotlin/com/getcode/opencode/model/core/PayloadValue.kt b/services/opencode/src/commonMain/kotlin/com/getcode/opencode/model/core/PayloadValue.kt similarity index 100% rename from services/opencode/src/main/kotlin/com/getcode/opencode/model/core/PayloadValue.kt rename to services/opencode/src/commonMain/kotlin/com/getcode/opencode/model/core/PayloadValue.kt diff --git a/services/opencode/src/commonMain/kotlin/com/getcode/opencode/model/core/ScanCodeEncoder.kt b/services/opencode/src/commonMain/kotlin/com/getcode/opencode/model/core/ScanCodeEncoder.kt new file mode 100644 index 0000000000..ebe437ac05 --- /dev/null +++ b/services/opencode/src/commonMain/kotlin/com/getcode/opencode/model/core/ScanCodeEncoder.kt @@ -0,0 +1,4 @@ +package com.getcode.opencode.model.core + +/** Reed-Solomon encodes a payload frame into the bytes a Kik code draws, or null if it can't. */ +internal expect fun encodeScanCode(payload: ByteArray): ByteArray? diff --git a/services/opencode/src/main/kotlin/com/getcode/opencode/model/core/UUID.kt b/services/opencode/src/commonMain/kotlin/com/getcode/opencode/model/core/UUID.kt similarity index 100% rename from services/opencode/src/main/kotlin/com/getcode/opencode/model/core/UUID.kt rename to services/opencode/src/commonMain/kotlin/com/getcode/opencode/model/core/UUID.kt diff --git a/services/opencode/src/main/kotlin/com/getcode/opencode/model/core/errors/Errors.kt b/services/opencode/src/commonMain/kotlin/com/getcode/opencode/model/core/errors/Errors.kt similarity index 100% rename from services/opencode/src/main/kotlin/com/getcode/opencode/model/core/errors/Errors.kt rename to services/opencode/src/commonMain/kotlin/com/getcode/opencode/model/core/errors/Errors.kt diff --git a/services/opencode/src/main/kotlin/com/getcode/opencode/model/core/errors/SodiumError.kt b/services/opencode/src/commonMain/kotlin/com/getcode/opencode/model/core/errors/SodiumError.kt similarity index 100% rename from services/opencode/src/main/kotlin/com/getcode/opencode/model/core/errors/SodiumError.kt rename to services/opencode/src/commonMain/kotlin/com/getcode/opencode/model/core/errors/SodiumError.kt diff --git a/services/opencode/src/main/kotlin/com/getcode/opencode/model/core/errors/ValidationException.kt b/services/opencode/src/commonMain/kotlin/com/getcode/opencode/model/core/errors/ValidationException.kt similarity index 100% rename from services/opencode/src/main/kotlin/com/getcode/opencode/model/core/errors/ValidationException.kt rename to services/opencode/src/commonMain/kotlin/com/getcode/opencode/model/core/errors/ValidationException.kt diff --git a/services/opencode/src/main/kotlin/com/getcode/opencode/model/financial/Currency.kt b/services/opencode/src/commonMain/kotlin/com/getcode/opencode/model/financial/Currency.kt similarity index 100% rename from services/opencode/src/main/kotlin/com/getcode/opencode/model/financial/Currency.kt rename to services/opencode/src/commonMain/kotlin/com/getcode/opencode/model/financial/Currency.kt diff --git a/services/opencode/src/main/kotlin/com/getcode/opencode/model/financial/CurrencyCode.kt b/services/opencode/src/commonMain/kotlin/com/getcode/opencode/model/financial/CurrencyCode.kt similarity index 100% rename from services/opencode/src/main/kotlin/com/getcode/opencode/model/financial/CurrencyCode.kt rename to services/opencode/src/commonMain/kotlin/com/getcode/opencode/model/financial/CurrencyCode.kt diff --git a/services/opencode/src/main/kotlin/com/getcode/opencode/model/financial/Distribution.kt b/services/opencode/src/commonMain/kotlin/com/getcode/opencode/model/financial/Distribution.kt similarity index 100% rename from services/opencode/src/main/kotlin/com/getcode/opencode/model/financial/Distribution.kt rename to services/opencode/src/commonMain/kotlin/com/getcode/opencode/model/financial/Distribution.kt diff --git a/services/opencode/src/main/kotlin/com/getcode/opencode/model/financial/Fee.kt b/services/opencode/src/commonMain/kotlin/com/getcode/opencode/model/financial/Fee.kt similarity index 100% rename from services/opencode/src/main/kotlin/com/getcode/opencode/model/financial/Fee.kt rename to services/opencode/src/commonMain/kotlin/com/getcode/opencode/model/financial/Fee.kt diff --git a/services/opencode/src/main/kotlin/com/getcode/opencode/model/financial/Fiat.kt b/services/opencode/src/commonMain/kotlin/com/getcode/opencode/model/financial/Fiat.kt similarity index 99% rename from services/opencode/src/main/kotlin/com/getcode/opencode/model/financial/Fiat.kt rename to services/opencode/src/commonMain/kotlin/com/getcode/opencode/model/financial/Fiat.kt index 1c5f917293..f4afe0d6e8 100644 --- a/services/opencode/src/main/kotlin/com/getcode/opencode/model/financial/Fiat.kt +++ b/services/opencode/src/commonMain/kotlin/com/getcode/opencode/model/financial/Fiat.kt @@ -1,6 +1,6 @@ package com.getcode.opencode.model.financial -import android.os.Parcelable +import com.getcode.libs.parcelable.Parcelable import com.flipcash.libs.currency.math.Estimator import com.flipcash.libs.currency.math.MarketState import com.flipcash.libs.currency.math.Valuation @@ -9,7 +9,7 @@ import com.getcode.opencode.model.core.PayloadValue import com.getcode.opencode.utils.roundTo import com.getcode.opencode.utils.toLocaleAwareDoubleOrNull import com.getcode.solana.keys.Mint -import kotlinx.parcelize.Parcelize +import com.getcode.libs.parcelable.Parcelize import kotlinx.serialization.Serializable import java.math.BigDecimal import java.math.RoundingMode diff --git a/services/opencode/src/main/kotlin/com/getcode/opencode/model/financial/HistoricalMintData.kt b/services/opencode/src/commonMain/kotlin/com/getcode/opencode/model/financial/HistoricalMintData.kt similarity index 100% rename from services/opencode/src/main/kotlin/com/getcode/opencode/model/financial/HistoricalMintData.kt rename to services/opencode/src/commonMain/kotlin/com/getcode/opencode/model/financial/HistoricalMintData.kt diff --git a/services/opencode/src/main/kotlin/com/getcode/opencode/model/financial/LaunchpadReserveStateSnapshot.kt b/services/opencode/src/commonMain/kotlin/com/getcode/opencode/model/financial/LaunchpadReserveStateSnapshot.kt similarity index 100% rename from services/opencode/src/main/kotlin/com/getcode/opencode/model/financial/LaunchpadReserveStateSnapshot.kt rename to services/opencode/src/commonMain/kotlin/com/getcode/opencode/model/financial/LaunchpadReserveStateSnapshot.kt diff --git a/services/opencode/src/main/kotlin/com/getcode/opencode/model/financial/LaunchpadSellFee.kt b/services/opencode/src/commonMain/kotlin/com/getcode/opencode/model/financial/LaunchpadSellFee.kt similarity index 100% rename from services/opencode/src/main/kotlin/com/getcode/opencode/model/financial/LaunchpadSellFee.kt rename to services/opencode/src/commonMain/kotlin/com/getcode/opencode/model/financial/LaunchpadSellFee.kt diff --git a/services/opencode/src/main/kotlin/com/getcode/opencode/model/financial/Limits.kt b/services/opencode/src/commonMain/kotlin/com/getcode/opencode/model/financial/Limits.kt similarity index 100% rename from services/opencode/src/main/kotlin/com/getcode/opencode/model/financial/Limits.kt rename to services/opencode/src/commonMain/kotlin/com/getcode/opencode/model/financial/Limits.kt diff --git a/services/opencode/src/main/kotlin/com/getcode/opencode/model/financial/LocalFiat.kt b/services/opencode/src/commonMain/kotlin/com/getcode/opencode/model/financial/LocalFiat.kt similarity index 98% rename from services/opencode/src/main/kotlin/com/getcode/opencode/model/financial/LocalFiat.kt rename to services/opencode/src/commonMain/kotlin/com/getcode/opencode/model/financial/LocalFiat.kt index abb86f2be4..f44d659897 100644 --- a/services/opencode/src/main/kotlin/com/getcode/opencode/model/financial/LocalFiat.kt +++ b/services/opencode/src/commonMain/kotlin/com/getcode/opencode/model/financial/LocalFiat.kt @@ -1,10 +1,10 @@ package com.getcode.opencode.model.financial -import android.os.Parcelable +import com.getcode.libs.parcelable.Parcelable import com.getcode.opencode.internal.extensions.fractionDigits import com.getcode.opencode.model.transactions.ExchangeData import com.getcode.solana.keys.Mint -import kotlinx.parcelize.Parcelize +import com.getcode.libs.parcelable.Parcelize import kotlinx.serialization.Serializable import javax.annotation.concurrent.Immutable diff --git a/services/opencode/src/main/kotlin/com/getcode/opencode/model/financial/MintMetadata.kt b/services/opencode/src/commonMain/kotlin/com/getcode/opencode/model/financial/MintMetadata.kt similarity index 98% rename from services/opencode/src/main/kotlin/com/getcode/opencode/model/financial/MintMetadata.kt rename to services/opencode/src/commonMain/kotlin/com/getcode/opencode/model/financial/MintMetadata.kt index f94f71caa0..2a5db22793 100644 --- a/services/opencode/src/main/kotlin/com/getcode/opencode/model/financial/MintMetadata.kt +++ b/services/opencode/src/commonMain/kotlin/com/getcode/opencode/model/financial/MintMetadata.kt @@ -1,6 +1,6 @@ package com.getcode.opencode.model.financial -import android.os.Parcelable +import com.getcode.libs.parcelable.Parcelable import com.flipcash.libs.currency.math.Estimator import com.getcode.opencode.model.ui.WindowedRange import com.getcode.opencode.internal.solana.extensions.deriveVirtualMachineAccount @@ -10,8 +10,8 @@ import com.getcode.opencode.model.ui.TokenBillCustomizations import com.getcode.opencode.solana.keys.TimelockDerivedAccounts import com.getcode.solana.keys.Mint import com.getcode.solana.keys.PublicKey -import kotlinx.parcelize.IgnoredOnParcel -import kotlinx.parcelize.Parcelize +import com.getcode.libs.parcelable.IgnoredOnParcel +import com.getcode.libs.parcelable.Parcelize import java.math.BigDecimal import java.math.RoundingMode import java.text.DecimalFormat diff --git a/services/opencode/src/main/kotlin/com/getcode/opencode/model/financial/MintStreamingData.kt b/services/opencode/src/commonMain/kotlin/com/getcode/opencode/model/financial/MintStreamingData.kt similarity index 100% rename from services/opencode/src/main/kotlin/com/getcode/opencode/model/financial/MintStreamingData.kt rename to services/opencode/src/commonMain/kotlin/com/getcode/opencode/model/financial/MintStreamingData.kt diff --git a/services/opencode/src/main/kotlin/com/getcode/opencode/model/financial/OwnerBalance.kt b/services/opencode/src/commonMain/kotlin/com/getcode/opencode/model/financial/OwnerBalance.kt similarity index 100% rename from services/opencode/src/main/kotlin/com/getcode/opencode/model/financial/OwnerBalance.kt rename to services/opencode/src/commonMain/kotlin/com/getcode/opencode/model/financial/OwnerBalance.kt diff --git a/services/opencode/src/main/kotlin/com/getcode/opencode/model/financial/Rate.kt b/services/opencode/src/commonMain/kotlin/com/getcode/opencode/model/financial/Rate.kt similarity index 83% rename from services/opencode/src/main/kotlin/com/getcode/opencode/model/financial/Rate.kt rename to services/opencode/src/commonMain/kotlin/com/getcode/opencode/model/financial/Rate.kt index 393eaa8ca1..18672bd7e6 100644 --- a/services/opencode/src/main/kotlin/com/getcode/opencode/model/financial/Rate.kt +++ b/services/opencode/src/commonMain/kotlin/com/getcode/opencode/model/financial/Rate.kt @@ -1,7 +1,7 @@ package com.getcode.opencode.model.financial -import android.os.Parcelable -import kotlinx.parcelize.Parcelize +import com.getcode.libs.parcelable.Parcelable +import com.getcode.libs.parcelable.Parcelize import kotlinx.serialization.Serializable @Parcelize diff --git a/services/opencode/src/main/kotlin/com/getcode/opencode/model/financial/RegionCode.kt b/services/opencode/src/commonMain/kotlin/com/getcode/opencode/model/financial/RegionCode.kt similarity index 100% rename from services/opencode/src/main/kotlin/com/getcode/opencode/model/financial/RegionCode.kt rename to services/opencode/src/commonMain/kotlin/com/getcode/opencode/model/financial/RegionCode.kt diff --git a/services/opencode/src/main/kotlin/com/getcode/opencode/model/financial/TokenCreateRequest.kt b/services/opencode/src/commonMain/kotlin/com/getcode/opencode/model/financial/TokenCreateRequest.kt similarity index 100% rename from services/opencode/src/main/kotlin/com/getcode/opencode/model/financial/TokenCreateRequest.kt rename to services/opencode/src/commonMain/kotlin/com/getcode/opencode/model/financial/TokenCreateRequest.kt diff --git a/services/opencode/src/main/kotlin/com/getcode/opencode/model/financial/TokenResult.kt b/services/opencode/src/commonMain/kotlin/com/getcode/opencode/model/financial/TokenResult.kt similarity index 100% rename from services/opencode/src/main/kotlin/com/getcode/opencode/model/financial/TokenResult.kt rename to services/opencode/src/commonMain/kotlin/com/getcode/opencode/model/financial/TokenResult.kt diff --git a/services/opencode/src/main/kotlin/com/getcode/opencode/model/financial/TokenUpdateRequest.kt b/services/opencode/src/commonMain/kotlin/com/getcode/opencode/model/financial/TokenUpdateRequest.kt similarity index 100% rename from services/opencode/src/main/kotlin/com/getcode/opencode/model/financial/TokenUpdateRequest.kt rename to services/opencode/src/commonMain/kotlin/com/getcode/opencode/model/financial/TokenUpdateRequest.kt diff --git a/services/opencode/src/main/kotlin/com/getcode/opencode/model/messaging/KeepAliveRequest.kt b/services/opencode/src/commonMain/kotlin/com/getcode/opencode/model/messaging/KeepAliveRequest.kt similarity index 83% rename from services/opencode/src/main/kotlin/com/getcode/opencode/model/messaging/KeepAliveRequest.kt rename to services/opencode/src/commonMain/kotlin/com/getcode/opencode/model/messaging/KeepAliveRequest.kt index b89658df92..ebb886d0ec 100644 --- a/services/opencode/src/main/kotlin/com/getcode/opencode/model/messaging/KeepAliveRequest.kt +++ b/services/opencode/src/commonMain/kotlin/com/getcode/opencode/model/messaging/KeepAliveRequest.kt @@ -1,6 +1,6 @@ package com.getcode.opencode.model.messaging -import com.getcode.ed25519.Ed25519.KeyPair +import com.getcode.ed25519kmp.Ed25519.KeyPair sealed interface KeepAliveRequest { data class OpenStreamRequest(val rendezvous: KeyPair): KeepAliveRequest diff --git a/services/opencode/src/main/kotlin/com/getcode/opencode/model/messaging/Message.kt b/services/opencode/src/commonMain/kotlin/com/getcode/opencode/model/messaging/Message.kt similarity index 100% rename from services/opencode/src/main/kotlin/com/getcode/opencode/model/messaging/Message.kt rename to services/opencode/src/commonMain/kotlin/com/getcode/opencode/model/messaging/Message.kt diff --git a/services/opencode/src/main/kotlin/com/getcode/opencode/model/moderation/ModerationAttestation.kt b/services/opencode/src/commonMain/kotlin/com/getcode/opencode/model/moderation/ModerationAttestation.kt similarity index 100% rename from services/opencode/src/main/kotlin/com/getcode/opencode/model/moderation/ModerationAttestation.kt rename to services/opencode/src/commonMain/kotlin/com/getcode/opencode/model/moderation/ModerationAttestation.kt diff --git a/services/opencode/src/main/kotlin/com/getcode/opencode/model/transactions/AddressLookupTable.kt b/services/opencode/src/commonMain/kotlin/com/getcode/opencode/model/transactions/AddressLookupTable.kt similarity index 100% rename from services/opencode/src/main/kotlin/com/getcode/opencode/model/transactions/AddressLookupTable.kt rename to services/opencode/src/commonMain/kotlin/com/getcode/opencode/model/transactions/AddressLookupTable.kt diff --git a/services/opencode/src/main/kotlin/com/getcode/opencode/model/transactions/ExchangeData.kt b/services/opencode/src/commonMain/kotlin/com/getcode/opencode/model/transactions/ExchangeData.kt similarity index 100% rename from services/opencode/src/main/kotlin/com/getcode/opencode/model/transactions/ExchangeData.kt rename to services/opencode/src/commonMain/kotlin/com/getcode/opencode/model/transactions/ExchangeData.kt diff --git a/services/opencode/src/main/kotlin/com/getcode/opencode/model/transactions/FundSwapPool.kt b/services/opencode/src/commonMain/kotlin/com/getcode/opencode/model/transactions/FundSwapPool.kt similarity index 100% rename from services/opencode/src/main/kotlin/com/getcode/opencode/model/transactions/FundSwapPool.kt rename to services/opencode/src/commonMain/kotlin/com/getcode/opencode/model/transactions/FundSwapPool.kt diff --git a/services/opencode/src/main/kotlin/com/getcode/opencode/model/transactions/LiquidityPool.kt b/services/opencode/src/commonMain/kotlin/com/getcode/opencode/model/transactions/LiquidityPool.kt similarity index 100% rename from services/opencode/src/main/kotlin/com/getcode/opencode/model/transactions/LiquidityPool.kt rename to services/opencode/src/commonMain/kotlin/com/getcode/opencode/model/transactions/LiquidityPool.kt diff --git a/services/opencode/src/main/kotlin/com/getcode/opencode/model/transactions/StartSwapServerParameters.kt b/services/opencode/src/commonMain/kotlin/com/getcode/opencode/model/transactions/StartSwapServerParameters.kt similarity index 100% rename from services/opencode/src/main/kotlin/com/getcode/opencode/model/transactions/StartSwapServerParameters.kt rename to services/opencode/src/commonMain/kotlin/com/getcode/opencode/model/transactions/StartSwapServerParameters.kt diff --git a/services/opencode/src/main/kotlin/com/getcode/opencode/model/transactions/StatefulSwapRequest.kt b/services/opencode/src/commonMain/kotlin/com/getcode/opencode/model/transactions/StatefulSwapRequest.kt similarity index 98% rename from services/opencode/src/main/kotlin/com/getcode/opencode/model/transactions/StatefulSwapRequest.kt rename to services/opencode/src/commonMain/kotlin/com/getcode/opencode/model/transactions/StatefulSwapRequest.kt index f959512ab8..8d41ba2ee6 100644 --- a/services/opencode/src/main/kotlin/com/getcode/opencode/model/transactions/StatefulSwapRequest.kt +++ b/services/opencode/src/commonMain/kotlin/com/getcode/opencode/model/transactions/StatefulSwapRequest.kt @@ -1,6 +1,6 @@ package com.getcode.opencode.model.transactions -import com.getcode.ed25519.Ed25519.KeyPair +import com.getcode.ed25519kmp.Ed25519.KeyPair import com.getcode.opencode.internal.manager.VerifiedState import com.getcode.opencode.internal.solana.model.SwapId import com.getcode.opencode.model.accounts.AccountCluster diff --git a/services/opencode/src/main/kotlin/com/getcode/opencode/model/transactions/StatefulSwapResponseServerParameters.kt b/services/opencode/src/commonMain/kotlin/com/getcode/opencode/model/transactions/StatefulSwapResponseServerParameters.kt similarity index 100% rename from services/opencode/src/main/kotlin/com/getcode/opencode/model/transactions/StatefulSwapResponseServerParameters.kt rename to services/opencode/src/commonMain/kotlin/com/getcode/opencode/model/transactions/StatefulSwapResponseServerParameters.kt diff --git a/services/opencode/src/main/kotlin/com/getcode/opencode/model/transactions/StatefulSwapResult.kt b/services/opencode/src/commonMain/kotlin/com/getcode/opencode/model/transactions/StatefulSwapResult.kt similarity index 100% rename from services/opencode/src/main/kotlin/com/getcode/opencode/model/transactions/StatefulSwapResult.kt rename to services/opencode/src/commonMain/kotlin/com/getcode/opencode/model/transactions/StatefulSwapResult.kt diff --git a/services/opencode/src/main/kotlin/com/getcode/opencode/model/transactions/StatelessSwapRequest.kt b/services/opencode/src/commonMain/kotlin/com/getcode/opencode/model/transactions/StatelessSwapRequest.kt similarity index 100% rename from services/opencode/src/main/kotlin/com/getcode/opencode/model/transactions/StatelessSwapRequest.kt rename to services/opencode/src/commonMain/kotlin/com/getcode/opencode/model/transactions/StatelessSwapRequest.kt diff --git a/services/opencode/src/main/kotlin/com/getcode/opencode/model/transactions/StatelessSwapResult.kt b/services/opencode/src/commonMain/kotlin/com/getcode/opencode/model/transactions/StatelessSwapResult.kt similarity index 100% rename from services/opencode/src/main/kotlin/com/getcode/opencode/model/transactions/StatelessSwapResult.kt rename to services/opencode/src/commonMain/kotlin/com/getcode/opencode/model/transactions/StatelessSwapResult.kt diff --git a/services/opencode/src/main/kotlin/com/getcode/opencode/model/transactions/StatelessSwapServerParameters.kt b/services/opencode/src/commonMain/kotlin/com/getcode/opencode/model/transactions/StatelessSwapServerParameters.kt similarity index 100% rename from services/opencode/src/main/kotlin/com/getcode/opencode/model/transactions/StatelessSwapServerParameters.kt rename to services/opencode/src/commonMain/kotlin/com/getcode/opencode/model/transactions/StatelessSwapServerParameters.kt diff --git a/services/opencode/src/main/kotlin/com/getcode/opencode/model/transactions/SwapFundingSource.kt b/services/opencode/src/commonMain/kotlin/com/getcode/opencode/model/transactions/SwapFundingSource.kt similarity index 100% rename from services/opencode/src/main/kotlin/com/getcode/opencode/model/transactions/SwapFundingSource.kt rename to services/opencode/src/commonMain/kotlin/com/getcode/opencode/model/transactions/SwapFundingSource.kt diff --git a/services/opencode/src/main/kotlin/com/getcode/opencode/model/transactions/SwapMetadata.kt b/services/opencode/src/commonMain/kotlin/com/getcode/opencode/model/transactions/SwapMetadata.kt similarity index 100% rename from services/opencode/src/main/kotlin/com/getcode/opencode/model/transactions/SwapMetadata.kt rename to services/opencode/src/commonMain/kotlin/com/getcode/opencode/model/transactions/SwapMetadata.kt diff --git a/services/opencode/src/main/kotlin/com/getcode/opencode/model/transactions/SwapRoute.kt b/services/opencode/src/commonMain/kotlin/com/getcode/opencode/model/transactions/SwapRoute.kt similarity index 100% rename from services/opencode/src/main/kotlin/com/getcode/opencode/model/transactions/SwapRoute.kt rename to services/opencode/src/commonMain/kotlin/com/getcode/opencode/model/transactions/SwapRoute.kt diff --git a/services/opencode/src/main/kotlin/com/getcode/opencode/model/transactions/TransactionMetadata.kt b/services/opencode/src/commonMain/kotlin/com/getcode/opencode/model/transactions/TransactionMetadata.kt similarity index 100% rename from services/opencode/src/main/kotlin/com/getcode/opencode/model/transactions/TransactionMetadata.kt rename to services/opencode/src/commonMain/kotlin/com/getcode/opencode/model/transactions/TransactionMetadata.kt diff --git a/services/opencode/src/main/kotlin/com/getcode/opencode/model/transactions/TransferRequest.kt b/services/opencode/src/commonMain/kotlin/com/getcode/opencode/model/transactions/TransferRequest.kt similarity index 100% rename from services/opencode/src/main/kotlin/com/getcode/opencode/model/transactions/TransferRequest.kt rename to services/opencode/src/commonMain/kotlin/com/getcode/opencode/model/transactions/TransferRequest.kt diff --git a/services/opencode/src/main/kotlin/com/getcode/opencode/model/transactions/WithdrawalAvailability.kt b/services/opencode/src/commonMain/kotlin/com/getcode/opencode/model/transactions/WithdrawalAvailability.kt similarity index 100% rename from services/opencode/src/main/kotlin/com/getcode/opencode/model/transactions/WithdrawalAvailability.kt rename to services/opencode/src/commonMain/kotlin/com/getcode/opencode/model/transactions/WithdrawalAvailability.kt diff --git a/services/opencode/src/main/kotlin/com/getcode/opencode/model/ui/BillCustomization.kt b/services/opencode/src/commonMain/kotlin/com/getcode/opencode/model/ui/BillCustomization.kt similarity index 95% rename from services/opencode/src/main/kotlin/com/getcode/opencode/model/ui/BillCustomization.kt rename to services/opencode/src/commonMain/kotlin/com/getcode/opencode/model/ui/BillCustomization.kt index 2c8f156724..1f9b2f14c8 100644 --- a/services/opencode/src/main/kotlin/com/getcode/opencode/model/ui/BillCustomization.kt +++ b/services/opencode/src/commonMain/kotlin/com/getcode/opencode/model/ui/BillCustomization.kt @@ -1,7 +1,7 @@ package com.getcode.opencode.model.ui -import android.os.Parcelable -import kotlinx.parcelize.Parcelize +import com.getcode.libs.parcelable.Parcelable +import com.getcode.libs.parcelable.Parcelize import kotlinx.serialization.Serializable @Parcelize diff --git a/services/opencode/src/main/kotlin/com/getcode/opencode/model/ui/DiscoverCategory.kt b/services/opencode/src/commonMain/kotlin/com/getcode/opencode/model/ui/DiscoverCategory.kt similarity index 100% rename from services/opencode/src/main/kotlin/com/getcode/opencode/model/ui/DiscoverCategory.kt rename to services/opencode/src/commonMain/kotlin/com/getcode/opencode/model/ui/DiscoverCategory.kt diff --git a/services/opencode/src/main/kotlin/com/getcode/opencode/model/ui/WindowedRange.kt b/services/opencode/src/commonMain/kotlin/com/getcode/opencode/model/ui/WindowedRange.kt similarity index 100% rename from services/opencode/src/main/kotlin/com/getcode/opencode/model/ui/WindowedRange.kt rename to services/opencode/src/commonMain/kotlin/com/getcode/opencode/model/ui/WindowedRange.kt diff --git a/services/opencode/src/main/kotlin/com/getcode/opencode/providers/SessionListener.kt b/services/opencode/src/commonMain/kotlin/com/getcode/opencode/providers/SessionListener.kt similarity index 100% rename from services/opencode/src/main/kotlin/com/getcode/opencode/providers/SessionListener.kt rename to services/opencode/src/commonMain/kotlin/com/getcode/opencode/providers/SessionListener.kt diff --git a/services/opencode/src/main/kotlin/com/getcode/opencode/providers/TokenMetadataProvider.kt b/services/opencode/src/commonMain/kotlin/com/getcode/opencode/providers/TokenMetadataProvider.kt similarity index 100% rename from services/opencode/src/main/kotlin/com/getcode/opencode/providers/TokenMetadataProvider.kt rename to services/opencode/src/commonMain/kotlin/com/getcode/opencode/providers/TokenMetadataProvider.kt diff --git a/services/opencode/src/main/kotlin/com/getcode/opencode/repositories/AccountRepository.kt b/services/opencode/src/commonMain/kotlin/com/getcode/opencode/repositories/AccountRepository.kt similarity index 95% rename from services/opencode/src/main/kotlin/com/getcode/opencode/repositories/AccountRepository.kt rename to services/opencode/src/commonMain/kotlin/com/getcode/opencode/repositories/AccountRepository.kt index 1be940dc76..ac8bced161 100644 --- a/services/opencode/src/main/kotlin/com/getcode/opencode/repositories/AccountRepository.kt +++ b/services/opencode/src/commonMain/kotlin/com/getcode/opencode/repositories/AccountRepository.kt @@ -1,6 +1,6 @@ package com.getcode.opencode.repositories -import com.getcode.ed25519.Ed25519.KeyPair +import com.getcode.ed25519kmp.Ed25519.KeyPair import com.getcode.opencode.model.accounts.AccountCluster import com.getcode.opencode.model.accounts.AccountFilter import com.getcode.opencode.model.accounts.AccountInfo diff --git a/services/opencode/src/main/kotlin/com/getcode/opencode/repositories/BalanceRepository.kt b/services/opencode/src/commonMain/kotlin/com/getcode/opencode/repositories/BalanceRepository.kt similarity index 100% rename from services/opencode/src/main/kotlin/com/getcode/opencode/repositories/BalanceRepository.kt rename to services/opencode/src/commonMain/kotlin/com/getcode/opencode/repositories/BalanceRepository.kt diff --git a/services/opencode/src/main/kotlin/com/getcode/opencode/repositories/CurrencyRepository.kt b/services/opencode/src/commonMain/kotlin/com/getcode/opencode/repositories/CurrencyRepository.kt similarity index 97% rename from services/opencode/src/main/kotlin/com/getcode/opencode/repositories/CurrencyRepository.kt rename to services/opencode/src/commonMain/kotlin/com/getcode/opencode/repositories/CurrencyRepository.kt index d3a90efe19..d4d9e1c367 100644 --- a/services/opencode/src/main/kotlin/com/getcode/opencode/repositories/CurrencyRepository.kt +++ b/services/opencode/src/commonMain/kotlin/com/getcode/opencode/repositories/CurrencyRepository.kt @@ -1,6 +1,6 @@ package com.getcode.opencode.repositories -import com.getcode.ed25519.Ed25519 +import com.getcode.ed25519kmp.Ed25519 import com.getcode.opencode.model.ui.DiscoverCategory import com.getcode.opencode.model.financial.LiveMintDataResponse import com.getcode.opencode.model.ui.WindowedRange diff --git a/services/opencode/src/main/kotlin/com/getcode/opencode/repositories/EventRepository.kt b/services/opencode/src/commonMain/kotlin/com/getcode/opencode/repositories/EventRepository.kt similarity index 100% rename from services/opencode/src/main/kotlin/com/getcode/opencode/repositories/EventRepository.kt rename to services/opencode/src/commonMain/kotlin/com/getcode/opencode/repositories/EventRepository.kt diff --git a/services/opencode/src/main/kotlin/com/getcode/opencode/repositories/MessagingRepository.kt b/services/opencode/src/commonMain/kotlin/com/getcode/opencode/repositories/MessagingRepository.kt similarity index 96% rename from services/opencode/src/main/kotlin/com/getcode/opencode/repositories/MessagingRepository.kt rename to services/opencode/src/commonMain/kotlin/com/getcode/opencode/repositories/MessagingRepository.kt index a625665baf..8ca430010e 100644 --- a/services/opencode/src/main/kotlin/com/getcode/opencode/repositories/MessagingRepository.kt +++ b/services/opencode/src/commonMain/kotlin/com/getcode/opencode/repositories/MessagingRepository.kt @@ -1,7 +1,7 @@ package com.getcode.opencode.repositories import com.codeinc.opencode.gen.messaging.v1.OcpMessagingService -import com.getcode.ed25519.Ed25519.KeyPair +import com.getcode.ed25519kmp.Ed25519.KeyPair import com.getcode.opencode.internal.network.services.OcpMessageStreamReference import com.getcode.opencode.model.transactions.GrabRequest import com.getcode.opencode.model.transactions.TransferRequest diff --git a/services/opencode/src/main/kotlin/com/getcode/opencode/repositories/SwapRepository.kt b/services/opencode/src/commonMain/kotlin/com/getcode/opencode/repositories/SwapRepository.kt similarity index 94% rename from services/opencode/src/main/kotlin/com/getcode/opencode/repositories/SwapRepository.kt rename to services/opencode/src/commonMain/kotlin/com/getcode/opencode/repositories/SwapRepository.kt index a65cd1811d..835ee90939 100644 --- a/services/opencode/src/main/kotlin/com/getcode/opencode/repositories/SwapRepository.kt +++ b/services/opencode/src/commonMain/kotlin/com/getcode/opencode/repositories/SwapRepository.kt @@ -1,6 +1,6 @@ package com.getcode.opencode.repositories -import com.getcode.ed25519.Ed25519.KeyPair +import com.getcode.ed25519kmp.Ed25519.KeyPair import com.getcode.opencode.internal.solana.model.SwapId import com.getcode.opencode.model.transactions.Swap import com.getcode.opencode.model.transactions.SwapMetadata diff --git a/services/opencode/src/main/kotlin/com/getcode/opencode/repositories/TransactionRepository.kt b/services/opencode/src/commonMain/kotlin/com/getcode/opencode/repositories/TransactionRepository.kt similarity index 98% rename from services/opencode/src/main/kotlin/com/getcode/opencode/repositories/TransactionRepository.kt rename to services/opencode/src/commonMain/kotlin/com/getcode/opencode/repositories/TransactionRepository.kt index 05f893705e..b0f05a15fb 100644 --- a/services/opencode/src/main/kotlin/com/getcode/opencode/repositories/TransactionRepository.kt +++ b/services/opencode/src/commonMain/kotlin/com/getcode/opencode/repositories/TransactionRepository.kt @@ -1,6 +1,6 @@ package com.getcode.opencode.repositories -import com.getcode.ed25519.Ed25519.KeyPair +import com.getcode.ed25519kmp.Ed25519.KeyPair import com.getcode.opencode.internal.manager.VerifiedState import com.getcode.opencode.internal.solana.model.SwapId import com.getcode.opencode.model.accounts.AccountCluster diff --git a/services/opencode/src/main/kotlin/com/getcode/opencode/solana/Instruction.kt b/services/opencode/src/commonMain/kotlin/com/getcode/opencode/solana/Instruction.kt similarity index 100% rename from services/opencode/src/main/kotlin/com/getcode/opencode/solana/Instruction.kt rename to services/opencode/src/commonMain/kotlin/com/getcode/opencode/solana/Instruction.kt diff --git a/services/opencode/src/main/kotlin/com/getcode/opencode/solana/LegacyMessage.kt b/services/opencode/src/commonMain/kotlin/com/getcode/opencode/solana/LegacyMessage.kt similarity index 100% rename from services/opencode/src/main/kotlin/com/getcode/opencode/solana/LegacyMessage.kt rename to services/opencode/src/commonMain/kotlin/com/getcode/opencode/solana/LegacyMessage.kt diff --git a/services/opencode/src/main/kotlin/com/getcode/opencode/solana/Message.kt b/services/opencode/src/commonMain/kotlin/com/getcode/opencode/solana/Message.kt similarity index 100% rename from services/opencode/src/main/kotlin/com/getcode/opencode/solana/Message.kt rename to services/opencode/src/commonMain/kotlin/com/getcode/opencode/solana/Message.kt diff --git a/services/opencode/src/main/kotlin/com/getcode/opencode/solana/MessageHeader.kt b/services/opencode/src/commonMain/kotlin/com/getcode/opencode/solana/MessageHeader.kt similarity index 100% rename from services/opencode/src/main/kotlin/com/getcode/opencode/solana/MessageHeader.kt rename to services/opencode/src/commonMain/kotlin/com/getcode/opencode/solana/MessageHeader.kt diff --git a/services/opencode/src/main/kotlin/com/getcode/opencode/solana/SolanaTransaction.kt b/services/opencode/src/commonMain/kotlin/com/getcode/opencode/solana/SolanaTransaction.kt similarity index 99% rename from services/opencode/src/main/kotlin/com/getcode/opencode/solana/SolanaTransaction.kt rename to services/opencode/src/commonMain/kotlin/com/getcode/opencode/solana/SolanaTransaction.kt index 299cd2fe8f..805d6fb3ab 100644 --- a/services/opencode/src/main/kotlin/com/getcode/opencode/solana/SolanaTransaction.kt +++ b/services/opencode/src/commonMain/kotlin/com/getcode/opencode/solana/SolanaTransaction.kt @@ -1,6 +1,6 @@ package com.getcode.opencode.solana -import com.getcode.ed25519.Ed25519 +import com.getcode.ed25519kmp.Ed25519 import com.getcode.opencode.internal.solana.ShortVec import com.getcode.opencode.internal.solana.model.MessageAddressLookupTable import com.getcode.opencode.internal.solana.utils.DataSlice.chunk diff --git a/services/opencode/src/main/kotlin/com/getcode/opencode/solana/TransactionBuilder.kt b/services/opencode/src/commonMain/kotlin/com/getcode/opencode/solana/TransactionBuilder.kt similarity index 100% rename from services/opencode/src/main/kotlin/com/getcode/opencode/solana/TransactionBuilder.kt rename to services/opencode/src/commonMain/kotlin/com/getcode/opencode/solana/TransactionBuilder.kt diff --git a/services/opencode/src/main/kotlin/com/getcode/opencode/solana/VersionedMessage.kt b/services/opencode/src/commonMain/kotlin/com/getcode/opencode/solana/VersionedMessage.kt similarity index 100% rename from services/opencode/src/main/kotlin/com/getcode/opencode/solana/VersionedMessage.kt rename to services/opencode/src/commonMain/kotlin/com/getcode/opencode/solana/VersionedMessage.kt diff --git a/services/opencode/src/main/kotlin/com/getcode/opencode/solana/intents/ActionGroup.kt b/services/opencode/src/commonMain/kotlin/com/getcode/opencode/solana/intents/ActionGroup.kt similarity index 100% rename from services/opencode/src/main/kotlin/com/getcode/opencode/solana/intents/ActionGroup.kt rename to services/opencode/src/commonMain/kotlin/com/getcode/opencode/solana/intents/ActionGroup.kt diff --git a/services/opencode/src/main/kotlin/com/getcode/opencode/solana/intents/IntentType.kt b/services/opencode/src/commonMain/kotlin/com/getcode/opencode/solana/intents/IntentType.kt similarity index 98% rename from services/opencode/src/main/kotlin/com/getcode/opencode/solana/intents/IntentType.kt rename to services/opencode/src/commonMain/kotlin/com/getcode/opencode/solana/intents/IntentType.kt index 71bd5857cc..b4db344cc2 100644 --- a/services/opencode/src/main/kotlin/com/getcode/opencode/solana/intents/IntentType.kt +++ b/services/opencode/src/commonMain/kotlin/com/getcode/opencode/solana/intents/IntentType.kt @@ -1,7 +1,7 @@ package com.getcode.opencode.solana.intents import com.codeinc.opencode.gen.transaction.v1.OcpTransactionService -import com.getcode.ed25519.Ed25519 +import com.getcode.ed25519kmp.Ed25519 import com.getcode.opencode.solana.intents.actions.ActionType import com.getcode.opencode.internal.network.extensions.asIntentId import com.getcode.opencode.internal.network.extensions.asSolanaAccountId diff --git a/services/opencode/src/main/kotlin/com/getcode/opencode/solana/intents/ServerParameter.kt b/services/opencode/src/commonMain/kotlin/com/getcode/opencode/solana/intents/ServerParameter.kt similarity index 100% rename from services/opencode/src/main/kotlin/com/getcode/opencode/solana/intents/ServerParameter.kt rename to services/opencode/src/commonMain/kotlin/com/getcode/opencode/solana/intents/ServerParameter.kt diff --git a/services/opencode/src/main/kotlin/com/getcode/opencode/solana/intents/actions/ActionType.kt b/services/opencode/src/commonMain/kotlin/com/getcode/opencode/solana/intents/actions/ActionType.kt similarity index 98% rename from services/opencode/src/main/kotlin/com/getcode/opencode/solana/intents/actions/ActionType.kt rename to services/opencode/src/commonMain/kotlin/com/getcode/opencode/solana/intents/actions/ActionType.kt index 4f6117522e..63278cddf9 100644 --- a/services/opencode/src/main/kotlin/com/getcode/opencode/solana/intents/actions/ActionType.kt +++ b/services/opencode/src/commonMain/kotlin/com/getcode/opencode/solana/intents/actions/ActionType.kt @@ -2,7 +2,7 @@ package com.getcode.opencode.solana.intents.actions import com.codeinc.opencode.gen.transaction.v1.OcpTransactionService import com.getcode.crypt.Sha256Hash -import com.getcode.ed25519.Ed25519 +import com.getcode.ed25519kmp.Ed25519 import com.getcode.opencode.solana.intents.CompactMessage import com.getcode.opencode.solana.intents.CompactMessageArgs import com.getcode.opencode.solana.intents.ServerParameter diff --git a/services/opencode/src/main/kotlin/com/getcode/opencode/solana/keys/ProgramDerivedAccount.kt b/services/opencode/src/commonMain/kotlin/com/getcode/opencode/solana/keys/ProgramDerivedAccount.kt similarity index 100% rename from services/opencode/src/main/kotlin/com/getcode/opencode/solana/keys/ProgramDerivedAccount.kt rename to services/opencode/src/commonMain/kotlin/com/getcode/opencode/solana/keys/ProgramDerivedAccount.kt diff --git a/services/opencode/src/main/kotlin/com/getcode/opencode/solana/keys/TimelockVmSwapAccounts.kt b/services/opencode/src/commonMain/kotlin/com/getcode/opencode/solana/keys/TimelockVmSwapAccounts.kt similarity index 100% rename from services/opencode/src/main/kotlin/com/getcode/opencode/solana/keys/TimelockVmSwapAccounts.kt rename to services/opencode/src/commonMain/kotlin/com/getcode/opencode/solana/keys/TimelockVmSwapAccounts.kt diff --git a/services/opencode/src/main/kotlin/com/getcode/opencode/solana/swap/CoinbaseStablecoinSwapperInstructions.kt b/services/opencode/src/commonMain/kotlin/com/getcode/opencode/solana/swap/CoinbaseStablecoinSwapperInstructions.kt similarity index 100% rename from services/opencode/src/main/kotlin/com/getcode/opencode/solana/swap/CoinbaseStablecoinSwapperInstructions.kt rename to services/opencode/src/commonMain/kotlin/com/getcode/opencode/solana/swap/CoinbaseStablecoinSwapperInstructions.kt diff --git a/services/opencode/src/main/kotlin/com/getcode/opencode/solana/swap/CrossCurrencyExistingSwapInstructions.kt b/services/opencode/src/commonMain/kotlin/com/getcode/opencode/solana/swap/CrossCurrencyExistingSwapInstructions.kt similarity index 100% rename from services/opencode/src/main/kotlin/com/getcode/opencode/solana/swap/CrossCurrencyExistingSwapInstructions.kt rename to services/opencode/src/commonMain/kotlin/com/getcode/opencode/solana/swap/CrossCurrencyExistingSwapInstructions.kt diff --git a/services/opencode/src/main/kotlin/com/getcode/opencode/solana/swap/ExistingCurrencyBuyInstructions.kt b/services/opencode/src/commonMain/kotlin/com/getcode/opencode/solana/swap/ExistingCurrencyBuyInstructions.kt similarity index 100% rename from services/opencode/src/main/kotlin/com/getcode/opencode/solana/swap/ExistingCurrencyBuyInstructions.kt rename to services/opencode/src/commonMain/kotlin/com/getcode/opencode/solana/swap/ExistingCurrencyBuyInstructions.kt diff --git a/services/opencode/src/main/kotlin/com/getcode/opencode/solana/swap/NewCurrencyBuyInstructions.kt b/services/opencode/src/commonMain/kotlin/com/getcode/opencode/solana/swap/NewCurrencyBuyInstructions.kt similarity index 100% rename from services/opencode/src/main/kotlin/com/getcode/opencode/solana/swap/NewCurrencyBuyInstructions.kt rename to services/opencode/src/commonMain/kotlin/com/getcode/opencode/solana/swap/NewCurrencyBuyInstructions.kt diff --git a/services/opencode/src/main/kotlin/com/getcode/opencode/solana/swap/SellInstructions.kt b/services/opencode/src/commonMain/kotlin/com/getcode/opencode/solana/swap/SellInstructions.kt similarity index 100% rename from services/opencode/src/main/kotlin/com/getcode/opencode/solana/swap/SellInstructions.kt rename to services/opencode/src/commonMain/kotlin/com/getcode/opencode/solana/swap/SellInstructions.kt diff --git a/services/opencode/src/main/kotlin/com/getcode/opencode/solana/swap/UsdcDepositInstructions.kt b/services/opencode/src/commonMain/kotlin/com/getcode/opencode/solana/swap/UsdcDepositInstructions.kt similarity index 100% rename from services/opencode/src/main/kotlin/com/getcode/opencode/solana/swap/UsdcDepositInstructions.kt rename to services/opencode/src/commonMain/kotlin/com/getcode/opencode/solana/swap/UsdcDepositInstructions.kt diff --git a/services/opencode/src/main/kotlin/com/getcode/opencode/solana/swap/UsdcDepositSweepInstructions.kt b/services/opencode/src/commonMain/kotlin/com/getcode/opencode/solana/swap/UsdcDepositSweepInstructions.kt similarity index 100% rename from services/opencode/src/main/kotlin/com/getcode/opencode/solana/swap/UsdcDepositSweepInstructions.kt rename to services/opencode/src/commonMain/kotlin/com/getcode/opencode/solana/swap/UsdcDepositSweepInstructions.kt diff --git a/services/opencode/src/main/kotlin/com/getcode/opencode/solana/swap/UsdcToUsdfSwapInstructions.kt b/services/opencode/src/commonMain/kotlin/com/getcode/opencode/solana/swap/UsdcToUsdfSwapInstructions.kt similarity index 100% rename from services/opencode/src/main/kotlin/com/getcode/opencode/solana/swap/UsdcToUsdfSwapInstructions.kt rename to services/opencode/src/commonMain/kotlin/com/getcode/opencode/solana/swap/UsdcToUsdfSwapInstructions.kt diff --git a/services/opencode/src/main/kotlin/com/getcode/opencode/solana/swap/UsdfDepositInstructions.kt b/services/opencode/src/commonMain/kotlin/com/getcode/opencode/solana/swap/UsdfDepositInstructions.kt similarity index 100% rename from services/opencode/src/main/kotlin/com/getcode/opencode/solana/swap/UsdfDepositInstructions.kt rename to services/opencode/src/commonMain/kotlin/com/getcode/opencode/solana/swap/UsdfDepositInstructions.kt diff --git a/services/opencode/src/main/kotlin/com/getcode/opencode/utils/Double.kt b/services/opencode/src/commonMain/kotlin/com/getcode/opencode/utils/Double.kt similarity index 100% rename from services/opencode/src/main/kotlin/com/getcode/opencode/utils/Double.kt rename to services/opencode/src/commonMain/kotlin/com/getcode/opencode/utils/Double.kt diff --git a/services/opencode/src/main/kotlin/com/getcode/opencode/utils/Flow.kt b/services/opencode/src/commonMain/kotlin/com/getcode/opencode/utils/Flow.kt similarity index 97% rename from services/opencode/src/main/kotlin/com/getcode/opencode/utils/Flow.kt rename to services/opencode/src/commonMain/kotlin/com/getcode/opencode/utils/Flow.kt index a13688dd90..71105d7e4e 100644 --- a/services/opencode/src/main/kotlin/com/getcode/opencode/utils/Flow.kt +++ b/services/opencode/src/commonMain/kotlin/com/getcode/opencode/utils/Flow.kt @@ -9,7 +9,7 @@ import kotlinx.coroutines.flow.cancellable import kotlinx.coroutines.flow.combine import kotlinx.coroutines.flow.flow import kotlinx.coroutines.flow.map -import timber.log.Timber +import com.getcode.utils.Log import kotlin.time.Duration fun tickerFlow(period: Duration): Flow = flow { @@ -37,11 +37,11 @@ fun flowInterval( fun Flow.catchSafely( action: suspend (T) -> Unit, -): Flow = catchSafely(action, onFailure = { Timber.e(it, it.message) }) +): Flow = catchSafely(action, onFailure = { Log.e(it, it.message) }) fun Flow.catchSafely( action: suspend (T) -> Unit, - onFailure: (Throwable) -> Unit = { Timber.e(it, it.message) }, + onFailure: (Throwable) -> Unit = { Log.e(it, it.message) }, ): Flow = map { try { action(it) diff --git a/services/opencode/src/commonMain/kotlin/com/getcode/opencode/utils/KeyPair.kt b/services/opencode/src/commonMain/kotlin/com/getcode/opencode/utils/KeyPair.kt new file mode 100644 index 0000000000..02ccfc96cb --- /dev/null +++ b/services/opencode/src/commonMain/kotlin/com/getcode/opencode/utils/KeyPair.kt @@ -0,0 +1,10 @@ +package com.getcode.opencode.utils + +import com.getcode.crypt.Sha256Hash +import com.getcode.ed25519kmp.Ed25519 +import com.getcode.ed25519kmp.Ed25519.KeyPair + +fun deriveRendezvousKey(from: ByteArray): KeyPair { + // Same key and seed string as the former Base64.DEFAULT-encoded seed. + return Ed25519.createKeyPair(Sha256Hash.hash(from)) +} diff --git a/services/opencode/src/main/kotlin/com/getcode/opencode/utils/Long.kt b/services/opencode/src/commonMain/kotlin/com/getcode/opencode/utils/Long.kt similarity index 100% rename from services/opencode/src/main/kotlin/com/getcode/opencode/utils/Long.kt rename to services/opencode/src/commonMain/kotlin/com/getcode/opencode/utils/Long.kt diff --git a/services/opencode/src/main/kotlin/com/getcode/opencode/utils/Maps.kt b/services/opencode/src/commonMain/kotlin/com/getcode/opencode/utils/Maps.kt similarity index 100% rename from services/opencode/src/main/kotlin/com/getcode/opencode/utils/Maps.kt rename to services/opencode/src/commonMain/kotlin/com/getcode/opencode/utils/Maps.kt diff --git a/services/opencode/src/main/kotlin/com/getcode/opencode/utils/Nonce.kt b/services/opencode/src/commonMain/kotlin/com/getcode/opencode/utils/Nonce.kt similarity index 100% rename from services/opencode/src/main/kotlin/com/getcode/opencode/utils/Nonce.kt rename to services/opencode/src/commonMain/kotlin/com/getcode/opencode/utils/Nonce.kt diff --git a/services/opencode/src/main/kotlin/com/getcode/opencode/utils/PublicKey.kt b/services/opencode/src/commonMain/kotlin/com/getcode/opencode/utils/PublicKey.kt similarity index 85% rename from services/opencode/src/main/kotlin/com/getcode/opencode/utils/PublicKey.kt rename to services/opencode/src/commonMain/kotlin/com/getcode/opencode/utils/PublicKey.kt index 66fa66dedb..163314eef3 100644 --- a/services/opencode/src/main/kotlin/com/getcode/opencode/utils/PublicKey.kt +++ b/services/opencode/src/commonMain/kotlin/com/getcode/opencode/utils/PublicKey.kt @@ -1,6 +1,6 @@ package com.getcode.opencode.utils -import com.getcode.ed25519.Ed25519 +import com.getcode.ed25519kmp.Ed25519 import com.getcode.opencode.internal.extensions.toPublicKey import com.getcode.solana.keys.PublicKey diff --git a/services/opencode/src/main/kotlin/com/getcode/opencode/utils/Result.kt b/services/opencode/src/commonMain/kotlin/com/getcode/opencode/utils/Result.kt similarity index 100% rename from services/opencode/src/main/kotlin/com/getcode/opencode/utils/Result.kt rename to services/opencode/src/commonMain/kotlin/com/getcode/opencode/utils/Result.kt diff --git a/services/opencode/src/main/kotlin/com/getcode/opencode/utils/String.kt b/services/opencode/src/commonMain/kotlin/com/getcode/opencode/utils/String.kt similarity index 100% rename from services/opencode/src/main/kotlin/com/getcode/opencode/utils/String.kt rename to services/opencode/src/commonMain/kotlin/com/getcode/opencode/utils/String.kt diff --git a/services/opencode/src/main/kotlin/com/getcode/opencode/utils/Throwable.kt b/services/opencode/src/commonMain/kotlin/com/getcode/opencode/utils/Throwable.kt similarity index 100% rename from services/opencode/src/main/kotlin/com/getcode/opencode/utils/Throwable.kt rename to services/opencode/src/commonMain/kotlin/com/getcode/opencode/utils/Throwable.kt diff --git a/services/opencode/src/main/kotlin/com/getcode/opencode/utils/logging/LoggingClientCall.kt b/services/opencode/src/commonMain/kotlin/com/getcode/opencode/utils/logging/LoggingClientCall.kt similarity index 100% rename from services/opencode/src/main/kotlin/com/getcode/opencode/utils/logging/LoggingClientCall.kt rename to services/opencode/src/commonMain/kotlin/com/getcode/opencode/utils/logging/LoggingClientCall.kt diff --git a/services/opencode/src/main/kotlin/com/getcode/opencode/utils/logging/LoggingClientCallListener.kt b/services/opencode/src/commonMain/kotlin/com/getcode/opencode/utils/logging/LoggingClientCallListener.kt similarity index 100% rename from services/opencode/src/main/kotlin/com/getcode/opencode/utils/logging/LoggingClientCallListener.kt rename to services/opencode/src/commonMain/kotlin/com/getcode/opencode/utils/logging/LoggingClientCallListener.kt diff --git a/services/opencode/src/main/kotlin/com/getcode/opencode/utils/logging/LoggingClientInterceptor.kt b/services/opencode/src/commonMain/kotlin/com/getcode/opencode/utils/logging/LoggingClientInterceptor.kt similarity index 100% rename from services/opencode/src/main/kotlin/com/getcode/opencode/utils/logging/LoggingClientInterceptor.kt rename to services/opencode/src/commonMain/kotlin/com/getcode/opencode/utils/logging/LoggingClientInterceptor.kt diff --git a/services/opencode/src/jvmMain/kotlin/com/getcode/opencode/internal/platform/ProcessLifecycle.jvm.kt b/services/opencode/src/jvmMain/kotlin/com/getcode/opencode/internal/platform/ProcessLifecycle.jvm.kt new file mode 100644 index 0000000000..d00eadf201 --- /dev/null +++ b/services/opencode/src/jvmMain/kotlin/com/getcode/opencode/internal/platform/ProcessLifecycle.jvm.kt @@ -0,0 +1,14 @@ +package com.getcode.opencode.internal.platform + +import java.util.concurrent.Executors + +private val dispatcher = Executors.newSingleThreadExecutor { Thread(it, "process-lifecycle").apply { isDaemon = true } } + +/** A desktop process is in the foreground for as long as it runs, so only [onStart] is ever called. */ +internal actual fun observeProcessLifecycle( + immediateOnMain: Boolean, + onStart: () -> Unit, + onStop: () -> Unit, +) { + dispatcher.execute(onStart) +} diff --git a/services/opencode/src/jvmMain/kotlin/com/getcode/opencode/model/core/ScanCodeEncoder.jvm.kt b/services/opencode/src/jvmMain/kotlin/com/getcode/opencode/model/core/ScanCodeEncoder.jvm.kt new file mode 100644 index 0000000000..a5dfcd0b6d --- /dev/null +++ b/services/opencode/src/jvmMain/kotlin/com/getcode/opencode/model/core/ScanCodeEncoder.jvm.kt @@ -0,0 +1,4 @@ +package com.getcode.opencode.model.core + +// The encoder is the JNI library in vendor/kik/scanner, which has no desktop build yet. +internal actual fun encodeScanCode(payload: ByteArray): ByteArray? = null diff --git a/services/opencode/src/jvmTest/kotlin/com/getcode/opencode/HeadlessBalanceTest.kt b/services/opencode/src/jvmTest/kotlin/com/getcode/opencode/HeadlessBalanceTest.kt new file mode 100644 index 0000000000..9b726529b7 --- /dev/null +++ b/services/opencode/src/jvmTest/kotlin/com/getcode/opencode/HeadlessBalanceTest.kt @@ -0,0 +1,51 @@ +package com.getcode.opencode + +import com.getcode.crypt.DerivePath +import com.getcode.crypt.DerivedKey +import com.getcode.crypt.MnemonicPhrase +import com.getcode.opencode.internal.network.api.AccountApi +import com.getcode.opencode.internal.network.services.AccountService +import io.grpc.okhttp.OkHttpChannelBuilder +import kotlinx.coroutines.runBlocking +import org.junit.Assume.assumeTrue +import java.util.concurrent.TimeUnit +import kotlin.test.Test +import kotlin.test.assertTrue + +/** + * Fetches an account's token balances from the live OCP backend on the JVM, with no UI and no DI. + * + * The account's recovery phrase comes from the `FLIPCASH_TEST_MNEMONIC` environment variable or the + * `flipcash.test.mnemonic` entry in `local.properties`. The test is skipped when neither is set, and + * never prints the phrase or any key. + */ +class HeadlessBalanceTest { + + @Test + fun fetchesBalancesFromBackend() = runBlocking { + val words = System.getenv("FLIPCASH_TEST_MNEMONIC") + ?: System.getProperty("flipcash.test.mnemonic") + assumeTrue("no test mnemonic configured", !words.isNullOrBlank()) + + val mnemonic = requireNotNull(MnemonicPhrase.newInstance(words!!.trim().split(Regex("\\s+")))) { + "test mnemonic is not a valid phrase" + } + val owner = DerivedKey.derive(DerivePath.primary, mnemonic).keyPair + + val channel = OkHttpChannelBuilder.forAddress("ocp-v2.api.flipcash-infra.net", 443) + .userAgent("OpenCodeProtocol/Desktop/spike") + .build() + try { + val service = AccountService(AccountApi(channel)) + val response = service.getAccounts(owner, owner).getOrThrow() + + assertTrue(response.accounts.isNotEmpty(), "backend returned no token accounts") + val balances = response.accounts.values + .groupBy { it.mint } + .mapValues { (_, infos) -> infos.sumOf { it.balance } } + println("token accounts: ${response.accounts.size}, balance by mint (quarks): $balances") + } finally { + channel.shutdownNow().awaitTermination(5, TimeUnit.SECONDS) + } + } +} diff --git a/services/opencode/src/main/kotlin/com/getcode/opencode/internal/network/core/GrpcApi.kt b/services/opencode/src/main/kotlin/com/getcode/opencode/internal/network/core/GrpcApi.kt deleted file mode 100644 index 22906ddb98..0000000000 --- a/services/opencode/src/main/kotlin/com/getcode/opencode/internal/network/core/GrpcApi.kt +++ /dev/null @@ -1,39 +0,0 @@ -package com.getcode.opencode.internal.network.core - -import android.os.Handler -import android.os.Looper -import androidx.lifecycle.DefaultLifecycleObserver -import androidx.lifecycle.LifecycleOwner -import androidx.lifecycle.ProcessLifecycleOwner -import io.grpc.ManagedChannel - -abstract class GrpcApi(protected val managedChannels: List): DefaultLifecycleObserver { - - constructor(managedChannel: ManagedChannel): this(listOf(managedChannel)) - constructor(vararg managedChannels: ManagedChannel): this(managedChannels.toList()) - - init { - // LifecycleRegistry.addObserver rejects any thread but the main one, so registering here - // directly would pin construction of every api -- and so of the whole object graph hanging off - // them -- to the main thread. Posting keeps that off the startup path. addObserver replays the - // current state, so a registration that lands after the process is already started still warms - // the channel. - val register = Runnable { ProcessLifecycleOwner.get().lifecycle.addObserver(this) } - if (Looper.myLooper() == Looper.getMainLooper()) { - register.run() - } else { - Handler(Looper.getMainLooper()).post(register) - } - } - - override fun onStart(owner: LifecycleOwner) { - super.onStart(owner) - warmUp() - } - - private fun warmUp() { - // getState(true) requests a connection attempt if idle, - // pre-connecting TCP + TLS + HTTP/2 in the background - managedChannels.onEach { it.getState(true) } - } -} diff --git a/services/opencode/src/main/kotlin/com/getcode/opencode/utils/KeyPair.kt b/services/opencode/src/main/kotlin/com/getcode/opencode/utils/KeyPair.kt deleted file mode 100644 index e8d987a1fb..0000000000 --- a/services/opencode/src/main/kotlin/com/getcode/opencode/utils/KeyPair.kt +++ /dev/null @@ -1,10 +0,0 @@ -package com.getcode.opencode.utils - -import android.util.Base64 -import com.getcode.crypt.Sha256Hash -import com.getcode.ed25519.Ed25519 -import com.getcode.ed25519.Ed25519.KeyPair - -fun deriveRendezvousKey(from: ByteArray): KeyPair { - return Ed25519.createKeyPair(Base64.encodeToString(Sha256Hash.hash(from), Base64.DEFAULT)) -} \ No newline at end of file From 451e56a1e23803696a15d33fea83ed64e8b0d656 Mon Sep 17 00:00:00 2001 From: Brandon McAnsh Date: Fri, 23 Oct 2026 16:52:11 -0400 Subject: [PATCH 07/11] refactor(services): move flipcash services to android+jvm KMP services:flipcash now applies flipcash.kmp.app.library with Hilt run through kspAndroid. Android-only pieces sit behind seams: - UserManager takes an AnalyticsIdentifier instead of MixpanelAPI; FlipcashModule binds it to Mixpanel.identify. - ForegroundGate is a common interface; the process-lifecycle implementation stays in androidMain. - ChatId's hand-written parcel code moves to ManualParcelable. - KeyPair derivation goes through the byte-seed path shared with services:opencode, so derived keys are unchanged. Test fakes move to :services:flipcash:test-fixtures. shared:analytics reads BuildFlags.isDebug instead of this module's BuildConfig. --- .../shared/analytics/build.gradle.kts | 1 + .../internal/MixpanelAnalyticsDelegate.kt | 6 +- apps/flipcash/shared/chat/build.gradle.kts | 2 +- .../persistence/sources/build.gradle.kts | 2 +- gradle/libs.versions.toml | 1 + services/flipcash/build.gradle.kts | 123 ++++++++---------- .../services/chat/ChatContentCryptoTest.kt | 0 .../flipcash/services/chat/E2eePolicyTest.kt | 0 .../services/chat/GroupContentCryptoTest.kt | 0 .../services/chat/GroupKeyEnvelopesTest.kt | 0 .../BlobStorageControllerChatMediaTest.kt | 0 .../controllers/BlobStorageControllerTest.kt | 0 .../controllers/ChatControllerTest.kt | 0 .../ChatMessagingControllerTest.kt | 0 .../ContactVerificationControllerTest.kt | 0 .../EventStreamingControllerTest.kt | 0 .../controllers/ProfileControllerTest.kt | 0 .../domain/ActivityFeedMessageMapperTest.kt | 0 .../internal/domain/ChatMetadataMapperTest.kt | 0 .../domain/SocialAccountMapperTest.kt | 0 .../internal/domain/UserFlagsMapperTest.kt | 0 .../internal/domain/UserProfileMapperTest.kt | 0 .../internal/extensions/JpegMetadataTest.kt | 0 .../api/BlobAccessContextValidationTest.kt | 0 .../network/api/BlobStorageApiDeadlineTest.kt | 0 .../network/api/GetBlobsRequestSigningTest.kt | 0 .../extensions/CashContentMappingTest.kt | 0 .../extensions/ChatMetadataExtensionTest.kt | 0 .../extensions/ChatRulesProtoMappingTest.kt | 0 .../extensions/MediaContentMappingTest.kt | 0 .../MessageContentEncryptedMappingTest.kt | 0 .../extensions/PushPayloadMuteMappingTest.kt | 0 .../extensions/RosterUpdateExtensionTest.kt | 0 .../extensions/SystemContentMappingTest.kt | 0 .../extensions/WidgetAndNeverMappingTest.kt | 0 .../services/PhoneVerificationServiceTest.kt | 0 .../internal/proto/ProtoWireFormatTest.kt | 0 .../services/models/DmPaymentMetadataTest.kt | 0 .../flipcash/services/models/ErrorsTest.kt | 0 .../flipcash/services/models/HandleTest.kt | 0 .../services/models/blob/UploadPolicyTest.kt | 0 .../services/models/chat/BlobExpiryTest.kt | 0 .../models/chat/BlobIdEqualityTest.kt | 0 .../models/chat/BlobIdSerializationTest.kt | 0 .../services/models/chat/ChatIdTest.kt | 0 .../models/chat/DmAddressabilityTest.kt | 0 .../services/models/chat/DomainModelsTest.kt | 0 .../services/models/chat/MediaItemTest.kt | 0 .../services/models/chat/MuteLapseTest.kt | 0 .../services/user/AnalyticsIdentityTest.kt | 0 .../flipcash/services/user/UserManagerTest.kt | 5 +- .../services/ProcessForegroundGate.kt} | 10 -- .../controllers/ModerationController.kt | 0 .../services/controllers/PushController.kt | 0 .../services/inject/FlipcashModule.kt | 6 + .../internal/extensions/Installations.kt | 0 .../com/flipcash/services/BlobUploader.kt | 0 .../com/flipcash/services/ForegroundGate.kt | 11 ++ .../services/chat/ChatContentCrypto.kt | 0 .../flipcash/services/chat/ChatKeySource.kt | 0 .../com/flipcash/services/chat/E2eePolicy.kt | 0 .../services/chat/GroupContentCrypto.kt | 0 .../services/chat/GroupKeyEnvelopes.kt | 0 .../services/chat/MessageEncryption.kt | 0 .../com/flipcash/services/chat/SealedMedia.kt | 0 .../services/controllers/AccountController.kt | 0 .../controllers/ActivityFeedController.kt | 0 .../controllers/BlobStorageController.kt | 0 .../controllers/BlocklistController.kt | 0 .../services/controllers/ChatController.kt | 0 .../controllers/ChatMessagingController.kt | 0 .../controllers/CommunityController.kt | 0 .../controllers/ContactListController.kt | 0 .../ContactVerificationController.kt | 0 .../controllers/EventStreamingController.kt | 0 .../services/controllers/PollController.kt | 0 .../services/controllers/ProfileController.kt | 0 .../controllers/PurchaseController.kt | 0 .../controllers/ReportingController.kt | 0 .../controllers/ResolverController.kt | 0 .../controllers/SettingsController.kt | 0 .../controllers/ThirdPartyController.kt | 0 .../flipcash/services/extensions/KeyPair.kt | 7 +- .../services/inject/ChatCryptoModule.kt | 0 .../annotations/FlipcashManagedChannel.kt | 0 .../internal/annotations/FlipcashProtocol.kt | 0 .../domain/ActivityFeedMessageMapper.kt | 0 .../internal/domain/BlockedUserMapper.kt | 0 .../internal/domain/ChatMetadataMapper.kt | 0 .../services/internal/domain/ContactMapper.kt | 0 .../domain/ImageModerationResponseMapper.kt | 0 .../domain/ModerationAttestationMapper.kt | 0 .../internal/domain/SocialAccountMapper.kt | 0 .../domain/TextModerationResponseMapper.kt | 0 .../internal/domain/UserFlagsMapper.kt | 0 .../internal/domain/UserProfileMapper.kt | 0 .../services/internal/domain/mapper/Mapper.kt | 0 .../services/internal/extensions/ByteArray.kt | 0 .../services/internal/extensions/Instant.kt | 0 .../internal/extensions/JpegMetadata.kt | 0 .../services/internal/extensions/KeyPair.kt | 0 .../services/internal/extensions/PublicKey.kt | 0 .../internal/model/billing/IapMetadata.kt | 0 .../internal/model/billing/Receipt.kt | 0 .../model/moderation/ModerationRequest.kt | 0 .../model/thirdparty/OnRampProvider.kt | 0 .../model/thirdparty/UsdcLiquidtyPool.kt | 0 .../internal/network/HttpBlobUploader.kt | 0 .../internal/network/api/AccountApi.kt | 0 .../internal/network/api/ActivityFeedApi.kt | 0 .../internal/network/api/BlobStorageApi.kt | 0 .../internal/network/api/BlocklistApi.kt | 0 .../services/internal/network/api/ChatApi.kt | 0 .../internal/network/api/ChatMessagingApi.kt | 0 .../internal/network/api/CommunityApi.kt | 0 .../internal/network/api/ContactListApi.kt | 0 .../network/api/EmailVerificationApi.kt | 0 .../internal/network/api/EventStreamingApi.kt | 0 .../internal/network/api/ModerationApi.kt | 0 .../network/api/PhoneVerificationApi.kt | 0 .../services/internal/network/api/PollApi.kt | 0 .../internal/network/api/ProfileApi.kt | 0 .../internal/network/api/PurchaseApi.kt | 0 .../services/internal/network/api/PushApi.kt | 0 .../internal/network/api/ReportingApi.kt | 0 .../internal/network/api/ResolverApi.kt | 0 .../internal/network/api/SettingsApi.kt | 0 .../internal/network/api/ThirdPartyApi.kt | 0 .../network/extensions/AuthenticateMessage.kt | 0 .../network/extensions/LocalToProtobuf.kt | 0 .../network/extensions/ProtobufToLocal.kt | 0 .../network/extensions/SignMessage.kt | 0 .../network/services/AccountService.kt | 0 .../network/services/ActivityFeedService.kt | 0 .../network/services/BlobStorageService.kt | 0 .../network/services/BlocklistService.kt | 0 .../network/services/ChatMessagingService.kt | 0 .../internal/network/services/ChatService.kt | 0 .../network/services/CommunityService.kt | 0 .../network/services/ContactListService.kt | 0 .../services/EmailVerificationService.kt | 0 .../network/services/EventStreamingService.kt | 0 .../network/services/ModerationService.kt | 0 .../services/PhoneVerificationService.kt | 0 .../internal/network/services/PollService.kt | 0 .../network/services/ProfileService.kt | 0 .../network/services/PurchaseService.kt | 0 .../internal/network/services/PushService.kt | 0 .../network/services/ReportingService.kt | 0 .../network/services/ResolverService.kt | 0 .../network/services/SettingsService.kt | 0 .../network/services/ThirdPartyService.kt | 0 .../repositories/InternalAccountRepository.kt | 0 .../InternalActivityFeedRepository.kt | 0 .../InternalBlobStorageRepository.kt | 0 .../InternalBlocklistRepository.kt | 0 .../InternalChatMessagingRepository.kt | 0 .../repositories/InternalChatRepository.kt | 0 .../InternalCommunityRepository.kt | 0 .../InternalContactListRepository.kt | 0 .../InternalContactVerificationRepository.kt | 0 .../InternalEventStreamingRepository.kt | 0 .../InternalModerationRepository.kt | 0 .../repositories/InternalPollRepository.kt | 0 .../repositories/InternalProfileRepository.kt | 0 .../InternalPurchaseRepository.kt | 0 .../repositories/InternalPushRepository.kt | 0 .../InternalReportingRepository.kt | 0 .../InternalResolverRepository.kt | 0 .../InternalSettingsRepository.kt | 0 .../InternalThirdPartyRepository.kt | 0 .../flipcash/services/modals/ModalManager.kt | 0 .../models/ActivityFeedNotification.kt | 0 .../services/models/ActivityFeedType.kt | 0 .../flipcash/services/models/BlockedUser.kt | 0 .../com/flipcash/services/models/Community.kt | 0 .../flipcash/services/models/ContactMethod.kt | 0 .../services/models/DmPaymentMetadata.kt | 0 .../com/flipcash/services/models/Errors.kt | 0 .../services/models/FlipcashContactEntry.kt | 0 .../com/flipcash/services/models/Handle.kt | 0 .../com/flipcash/services/models/Jwt.kt | 0 .../services/models/ModerationResult.kt | 0 .../services/models/NotificationPayload.kt | 0 .../services/models/ProfileIdentifier.kt | 0 .../flipcash/services/models/QueryOptions.kt | 0 .../services/models/ReactionBoostMetadata.kt | 0 .../flipcash/services/models/ReportTarget.kt | 0 .../services/models/ResolveIdentifier.kt | 0 .../services/models/SocialAccountLinking.kt | 0 .../flipcash/services/models/TipPresets.kt | 0 .../com/flipcash/services/models/UserFlags.kt | 0 .../flipcash/services/models/UserProfile.kt | 4 +- .../models/VerifiableContactMethod.kt | 4 +- .../services/models/blob/UploadPolicy.kt | 0 .../services/models/blob/UploadTarget.kt | 0 .../services/models/chat/BlobAccessContext.kt | 0 .../flipcash/services/models/chat/BlobId.kt | 4 +- .../services/models/chat/BlobMetadata.kt | 4 +- .../services/models/chat/BlobUpdate.kt | 0 .../services/models/chat/ChatEvent.kt | 0 .../services/models/chat/ChatFeedPage.kt | 0 .../flipcash/services/models/chat/ChatId.kt | 13 +- .../services/models/chat/ChatMember.kt | 0 .../services/models/chat/ChatMessage.kt | 0 .../services/models/chat/ChatMetadata.kt | 0 .../services/models/chat/ChatMutation.kt | 0 .../services/models/chat/ChatRules.kt | 0 .../flipcash/services/models/chat/ChatType.kt | 0 .../services/models/chat/ChatUpdate.kt | 0 .../services/models/chat/ClientMessageId.kt | 0 .../services/models/chat/DeliveryStatus.kt | 0 .../services/models/chat/DmAddressability.kt | 0 .../models/chat/EditChatParameters.kt | 0 .../flipcash/services/models/chat/Emoji.kt | 0 .../services/models/chat/EmojiReaction.kt | 0 .../services/models/chat/HoldingsSummary.kt | 0 .../services/models/chat/IdempotencyKey.kt | 0 .../services/models/chat/ImageMetadata.kt | 4 +- .../services/models/chat/KeyEnvelope.kt | 0 .../services/models/chat/LinkPreview.kt | 0 .../flipcash/services/models/chat/Lobby.kt | 0 .../services/models/chat/MediaItem.kt | 4 +- .../models/chat/MediaItemRendition.kt | 4 +- .../services/models/chat/MentionSuggestion.kt | 0 .../services/models/chat/MessageContent.kt | 0 .../services/models/chat/MessagePointer.kt | 0 .../services/models/chat/MetadataUpdate.kt | 0 .../services/models/chat/MuteExtensions.kt | 0 .../services/models/chat/MuteState.kt | 0 .../services/models/chat/ReactionSummary.kt | 0 .../services/models/chat/ReactionUpdate.kt | 0 .../flipcash/services/models/chat/Reactor.kt | 0 .../services/models/chat/RosterChange.kt | 0 .../services/models/chat/RosterPage.kt | 0 .../services/models/chat/RosterSummary.kt | 0 .../services/models/chat/SampledChatter.kt | 0 .../models/chat/StartChatParameters.kt | 0 .../models/chat/TypingNotification.kt | 0 .../flipcash/services/models/chat/ViewMode.kt | 0 .../services/models/chat/ViewerState.kt | 0 .../services/models/chat/WidgetContent.kt | 0 .../services/persistence/DataSource.kt | 0 .../services/repository/AccountRepository.kt | 0 .../repository/ActivityFeedRepository.kt | 0 .../repository/BlobStorageRepository.kt | 0 .../repository/BlocklistRepository.kt | 0 .../repository/ChatMessagingRepository.kt | 0 .../services/repository/ChatRepository.kt | 0 .../repository/CommunityRepository.kt | 0 .../repository/ContactListRepository.kt | 0 .../ContactVerificationRepository.kt | 0 .../repository/EventStreamingRepository.kt | 0 .../repository/ModerationRepository.kt | 0 .../services/repository/PollRepository.kt | 0 .../services/repository/ProfileRepository.kt | 0 .../services/repository/PurchaseRepository.kt | 0 .../services/repository/PushRepository.kt | 0 .../repository/ReportingRepository.kt | 0 .../services/repository/ResolverRepository.kt | 0 .../services/repository/SettingsRepository.kt | 0 .../repository/ThirdPartyRepository.kt | 0 .../services/user/AnalyticsIdentity.kt | 5 + .../com/flipcash/services/user/UserManager.kt | 5 +- .../flipcash/services/validators/Validator.kt | 0 .../flipcash/test-fixtures/build.gradle.kts | 16 +++ .../flipcash/services/chat/FakeChatCipher.kt | 0 settings.gradle.kts | 1 + 268 files changed, 125 insertions(+), 117 deletions(-) rename services/flipcash/src/{test => androidHostTest}/kotlin/com/flipcash/services/chat/ChatContentCryptoTest.kt (100%) rename services/flipcash/src/{test => androidHostTest}/kotlin/com/flipcash/services/chat/E2eePolicyTest.kt (100%) rename services/flipcash/src/{test => androidHostTest}/kotlin/com/flipcash/services/chat/GroupContentCryptoTest.kt (100%) rename services/flipcash/src/{test => androidHostTest}/kotlin/com/flipcash/services/chat/GroupKeyEnvelopesTest.kt (100%) rename services/flipcash/src/{test => androidHostTest}/kotlin/com/flipcash/services/controllers/BlobStorageControllerChatMediaTest.kt (100%) rename services/flipcash/src/{test => androidHostTest}/kotlin/com/flipcash/services/controllers/BlobStorageControllerTest.kt (100%) rename services/flipcash/src/{test => androidHostTest}/kotlin/com/flipcash/services/controllers/ChatControllerTest.kt (100%) rename services/flipcash/src/{test => androidHostTest}/kotlin/com/flipcash/services/controllers/ChatMessagingControllerTest.kt (100%) rename services/flipcash/src/{test => androidHostTest}/kotlin/com/flipcash/services/controllers/ContactVerificationControllerTest.kt (100%) rename services/flipcash/src/{test => androidHostTest}/kotlin/com/flipcash/services/controllers/EventStreamingControllerTest.kt (100%) rename services/flipcash/src/{test => androidHostTest}/kotlin/com/flipcash/services/controllers/ProfileControllerTest.kt (100%) rename services/flipcash/src/{test => androidHostTest}/kotlin/com/flipcash/services/internal/domain/ActivityFeedMessageMapperTest.kt (100%) rename services/flipcash/src/{test => androidHostTest}/kotlin/com/flipcash/services/internal/domain/ChatMetadataMapperTest.kt (100%) rename services/flipcash/src/{test => androidHostTest}/kotlin/com/flipcash/services/internal/domain/SocialAccountMapperTest.kt (100%) rename services/flipcash/src/{test => androidHostTest}/kotlin/com/flipcash/services/internal/domain/UserFlagsMapperTest.kt (100%) rename services/flipcash/src/{test => androidHostTest}/kotlin/com/flipcash/services/internal/domain/UserProfileMapperTest.kt (100%) rename services/flipcash/src/{test => androidHostTest}/kotlin/com/flipcash/services/internal/extensions/JpegMetadataTest.kt (100%) rename services/flipcash/src/{test => androidHostTest}/kotlin/com/flipcash/services/internal/network/api/BlobAccessContextValidationTest.kt (100%) rename services/flipcash/src/{test => androidHostTest}/kotlin/com/flipcash/services/internal/network/api/BlobStorageApiDeadlineTest.kt (100%) rename services/flipcash/src/{test => androidHostTest}/kotlin/com/flipcash/services/internal/network/api/GetBlobsRequestSigningTest.kt (100%) rename services/flipcash/src/{test => androidHostTest}/kotlin/com/flipcash/services/internal/network/extensions/CashContentMappingTest.kt (100%) rename services/flipcash/src/{test => androidHostTest}/kotlin/com/flipcash/services/internal/network/extensions/ChatMetadataExtensionTest.kt (100%) rename services/flipcash/src/{test => androidHostTest}/kotlin/com/flipcash/services/internal/network/extensions/ChatRulesProtoMappingTest.kt (100%) rename services/flipcash/src/{test => androidHostTest}/kotlin/com/flipcash/services/internal/network/extensions/MediaContentMappingTest.kt (100%) rename services/flipcash/src/{test => androidHostTest}/kotlin/com/flipcash/services/internal/network/extensions/MessageContentEncryptedMappingTest.kt (100%) rename services/flipcash/src/{test => androidHostTest}/kotlin/com/flipcash/services/internal/network/extensions/PushPayloadMuteMappingTest.kt (100%) rename services/flipcash/src/{test => androidHostTest}/kotlin/com/flipcash/services/internal/network/extensions/RosterUpdateExtensionTest.kt (100%) rename services/flipcash/src/{test => androidHostTest}/kotlin/com/flipcash/services/internal/network/extensions/SystemContentMappingTest.kt (100%) rename services/flipcash/src/{test => androidHostTest}/kotlin/com/flipcash/services/internal/network/extensions/WidgetAndNeverMappingTest.kt (100%) rename services/flipcash/src/{test => androidHostTest}/kotlin/com/flipcash/services/internal/network/services/PhoneVerificationServiceTest.kt (100%) rename services/flipcash/src/{test => androidHostTest}/kotlin/com/flipcash/services/internal/proto/ProtoWireFormatTest.kt (100%) rename services/flipcash/src/{test => androidHostTest}/kotlin/com/flipcash/services/models/DmPaymentMetadataTest.kt (100%) rename services/flipcash/src/{test => androidHostTest}/kotlin/com/flipcash/services/models/ErrorsTest.kt (100%) rename services/flipcash/src/{test => androidHostTest}/kotlin/com/flipcash/services/models/HandleTest.kt (100%) rename services/flipcash/src/{test => androidHostTest}/kotlin/com/flipcash/services/models/blob/UploadPolicyTest.kt (100%) rename services/flipcash/src/{test => androidHostTest}/kotlin/com/flipcash/services/models/chat/BlobExpiryTest.kt (100%) rename services/flipcash/src/{test => androidHostTest}/kotlin/com/flipcash/services/models/chat/BlobIdEqualityTest.kt (100%) rename services/flipcash/src/{test => androidHostTest}/kotlin/com/flipcash/services/models/chat/BlobIdSerializationTest.kt (100%) rename services/flipcash/src/{test => androidHostTest}/kotlin/com/flipcash/services/models/chat/ChatIdTest.kt (100%) rename services/flipcash/src/{test => androidHostTest}/kotlin/com/flipcash/services/models/chat/DmAddressabilityTest.kt (100%) rename services/flipcash/src/{test => androidHostTest}/kotlin/com/flipcash/services/models/chat/DomainModelsTest.kt (100%) rename services/flipcash/src/{test => androidHostTest}/kotlin/com/flipcash/services/models/chat/MediaItemTest.kt (100%) rename services/flipcash/src/{test => androidHostTest}/kotlin/com/flipcash/services/models/chat/MuteLapseTest.kt (100%) rename services/flipcash/src/{test => androidHostTest}/kotlin/com/flipcash/services/user/AnalyticsIdentityTest.kt (100%) rename services/flipcash/src/{test => androidHostTest}/kotlin/com/flipcash/services/user/UserManagerTest.kt (96%) rename services/flipcash/src/{main/kotlin/com/flipcash/services/ForegroundGate.kt => androidMain/kotlin/com/flipcash/services/ProcessForegroundGate.kt} (64%) rename services/flipcash/src/{main => androidMain}/kotlin/com/flipcash/services/controllers/ModerationController.kt (100%) rename services/flipcash/src/{main => androidMain}/kotlin/com/flipcash/services/controllers/PushController.kt (100%) rename services/flipcash/src/{main => androidMain}/kotlin/com/flipcash/services/inject/FlipcashModule.kt (97%) rename services/flipcash/src/{main => androidMain}/kotlin/com/flipcash/services/internal/extensions/Installations.kt (100%) rename services/flipcash/src/{main => commonMain}/kotlin/com/flipcash/services/BlobUploader.kt (100%) create mode 100644 services/flipcash/src/commonMain/kotlin/com/flipcash/services/ForegroundGate.kt rename services/flipcash/src/{main => commonMain}/kotlin/com/flipcash/services/chat/ChatContentCrypto.kt (100%) rename services/flipcash/src/{main => commonMain}/kotlin/com/flipcash/services/chat/ChatKeySource.kt (100%) rename services/flipcash/src/{main => commonMain}/kotlin/com/flipcash/services/chat/E2eePolicy.kt (100%) rename services/flipcash/src/{main => commonMain}/kotlin/com/flipcash/services/chat/GroupContentCrypto.kt (100%) rename services/flipcash/src/{main => commonMain}/kotlin/com/flipcash/services/chat/GroupKeyEnvelopes.kt (100%) rename services/flipcash/src/{main => commonMain}/kotlin/com/flipcash/services/chat/MessageEncryption.kt (100%) rename services/flipcash/src/{main => commonMain}/kotlin/com/flipcash/services/chat/SealedMedia.kt (100%) rename services/flipcash/src/{main => commonMain}/kotlin/com/flipcash/services/controllers/AccountController.kt (100%) rename services/flipcash/src/{main => commonMain}/kotlin/com/flipcash/services/controllers/ActivityFeedController.kt (100%) rename services/flipcash/src/{main => commonMain}/kotlin/com/flipcash/services/controllers/BlobStorageController.kt (100%) rename services/flipcash/src/{main => commonMain}/kotlin/com/flipcash/services/controllers/BlocklistController.kt (100%) rename services/flipcash/src/{main => commonMain}/kotlin/com/flipcash/services/controllers/ChatController.kt (100%) rename services/flipcash/src/{main => commonMain}/kotlin/com/flipcash/services/controllers/ChatMessagingController.kt (100%) rename services/flipcash/src/{main => commonMain}/kotlin/com/flipcash/services/controllers/CommunityController.kt (100%) rename services/flipcash/src/{main => commonMain}/kotlin/com/flipcash/services/controllers/ContactListController.kt (100%) rename services/flipcash/src/{main => commonMain}/kotlin/com/flipcash/services/controllers/ContactVerificationController.kt (100%) rename services/flipcash/src/{main => commonMain}/kotlin/com/flipcash/services/controllers/EventStreamingController.kt (100%) rename services/flipcash/src/{main => commonMain}/kotlin/com/flipcash/services/controllers/PollController.kt (100%) rename services/flipcash/src/{main => commonMain}/kotlin/com/flipcash/services/controllers/ProfileController.kt (100%) rename services/flipcash/src/{main => commonMain}/kotlin/com/flipcash/services/controllers/PurchaseController.kt (100%) rename services/flipcash/src/{main => commonMain}/kotlin/com/flipcash/services/controllers/ReportingController.kt (100%) rename services/flipcash/src/{main => commonMain}/kotlin/com/flipcash/services/controllers/ResolverController.kt (100%) rename services/flipcash/src/{main => commonMain}/kotlin/com/flipcash/services/controllers/SettingsController.kt (100%) rename services/flipcash/src/{main => commonMain}/kotlin/com/flipcash/services/controllers/ThirdPartyController.kt (100%) rename services/flipcash/src/{main => commonMain}/kotlin/com/flipcash/services/extensions/KeyPair.kt (69%) rename services/flipcash/src/{main => commonMain}/kotlin/com/flipcash/services/inject/ChatCryptoModule.kt (100%) rename services/flipcash/src/{main => commonMain}/kotlin/com/flipcash/services/internal/annotations/FlipcashManagedChannel.kt (100%) rename services/flipcash/src/{main => commonMain}/kotlin/com/flipcash/services/internal/annotations/FlipcashProtocol.kt (100%) rename services/flipcash/src/{main => commonMain}/kotlin/com/flipcash/services/internal/domain/ActivityFeedMessageMapper.kt (100%) rename services/flipcash/src/{main => commonMain}/kotlin/com/flipcash/services/internal/domain/BlockedUserMapper.kt (100%) rename services/flipcash/src/{main => commonMain}/kotlin/com/flipcash/services/internal/domain/ChatMetadataMapper.kt (100%) rename services/flipcash/src/{main => commonMain}/kotlin/com/flipcash/services/internal/domain/ContactMapper.kt (100%) rename services/flipcash/src/{main => commonMain}/kotlin/com/flipcash/services/internal/domain/ImageModerationResponseMapper.kt (100%) rename services/flipcash/src/{main => commonMain}/kotlin/com/flipcash/services/internal/domain/ModerationAttestationMapper.kt (100%) rename services/flipcash/src/{main => commonMain}/kotlin/com/flipcash/services/internal/domain/SocialAccountMapper.kt (100%) rename services/flipcash/src/{main => commonMain}/kotlin/com/flipcash/services/internal/domain/TextModerationResponseMapper.kt (100%) rename services/flipcash/src/{main => commonMain}/kotlin/com/flipcash/services/internal/domain/UserFlagsMapper.kt (100%) rename services/flipcash/src/{main => commonMain}/kotlin/com/flipcash/services/internal/domain/UserProfileMapper.kt (100%) rename services/flipcash/src/{main => commonMain}/kotlin/com/flipcash/services/internal/domain/mapper/Mapper.kt (100%) rename services/flipcash/src/{main => commonMain}/kotlin/com/flipcash/services/internal/extensions/ByteArray.kt (100%) rename services/flipcash/src/{main => commonMain}/kotlin/com/flipcash/services/internal/extensions/Instant.kt (100%) rename services/flipcash/src/{main => commonMain}/kotlin/com/flipcash/services/internal/extensions/JpegMetadata.kt (100%) rename services/flipcash/src/{main => commonMain}/kotlin/com/flipcash/services/internal/extensions/KeyPair.kt (100%) rename services/flipcash/src/{main => commonMain}/kotlin/com/flipcash/services/internal/extensions/PublicKey.kt (100%) rename services/flipcash/src/{main => commonMain}/kotlin/com/flipcash/services/internal/model/billing/IapMetadata.kt (100%) rename services/flipcash/src/{main => commonMain}/kotlin/com/flipcash/services/internal/model/billing/Receipt.kt (100%) rename services/flipcash/src/{main => commonMain}/kotlin/com/flipcash/services/internal/model/moderation/ModerationRequest.kt (100%) rename services/flipcash/src/{main => commonMain}/kotlin/com/flipcash/services/internal/model/thirdparty/OnRampProvider.kt (100%) rename services/flipcash/src/{main => commonMain}/kotlin/com/flipcash/services/internal/model/thirdparty/UsdcLiquidtyPool.kt (100%) rename services/flipcash/src/{main => commonMain}/kotlin/com/flipcash/services/internal/network/HttpBlobUploader.kt (100%) rename services/flipcash/src/{main => commonMain}/kotlin/com/flipcash/services/internal/network/api/AccountApi.kt (100%) rename services/flipcash/src/{main => commonMain}/kotlin/com/flipcash/services/internal/network/api/ActivityFeedApi.kt (100%) rename services/flipcash/src/{main => commonMain}/kotlin/com/flipcash/services/internal/network/api/BlobStorageApi.kt (100%) rename services/flipcash/src/{main => commonMain}/kotlin/com/flipcash/services/internal/network/api/BlocklistApi.kt (100%) rename services/flipcash/src/{main => commonMain}/kotlin/com/flipcash/services/internal/network/api/ChatApi.kt (100%) rename services/flipcash/src/{main => commonMain}/kotlin/com/flipcash/services/internal/network/api/ChatMessagingApi.kt (100%) rename services/flipcash/src/{main => commonMain}/kotlin/com/flipcash/services/internal/network/api/CommunityApi.kt (100%) rename services/flipcash/src/{main => commonMain}/kotlin/com/flipcash/services/internal/network/api/ContactListApi.kt (100%) rename services/flipcash/src/{main => commonMain}/kotlin/com/flipcash/services/internal/network/api/EmailVerificationApi.kt (100%) rename services/flipcash/src/{main => commonMain}/kotlin/com/flipcash/services/internal/network/api/EventStreamingApi.kt (100%) rename services/flipcash/src/{main => commonMain}/kotlin/com/flipcash/services/internal/network/api/ModerationApi.kt (100%) rename services/flipcash/src/{main => commonMain}/kotlin/com/flipcash/services/internal/network/api/PhoneVerificationApi.kt (100%) rename services/flipcash/src/{main => commonMain}/kotlin/com/flipcash/services/internal/network/api/PollApi.kt (100%) rename services/flipcash/src/{main => commonMain}/kotlin/com/flipcash/services/internal/network/api/ProfileApi.kt (100%) rename services/flipcash/src/{main => commonMain}/kotlin/com/flipcash/services/internal/network/api/PurchaseApi.kt (100%) rename services/flipcash/src/{main => commonMain}/kotlin/com/flipcash/services/internal/network/api/PushApi.kt (100%) rename services/flipcash/src/{main => commonMain}/kotlin/com/flipcash/services/internal/network/api/ReportingApi.kt (100%) rename services/flipcash/src/{main => commonMain}/kotlin/com/flipcash/services/internal/network/api/ResolverApi.kt (100%) rename services/flipcash/src/{main => commonMain}/kotlin/com/flipcash/services/internal/network/api/SettingsApi.kt (100%) rename services/flipcash/src/{main => commonMain}/kotlin/com/flipcash/services/internal/network/api/ThirdPartyApi.kt (100%) rename services/flipcash/src/{main => commonMain}/kotlin/com/flipcash/services/internal/network/extensions/AuthenticateMessage.kt (100%) rename services/flipcash/src/{main => commonMain}/kotlin/com/flipcash/services/internal/network/extensions/LocalToProtobuf.kt (100%) rename services/flipcash/src/{main => commonMain}/kotlin/com/flipcash/services/internal/network/extensions/ProtobufToLocal.kt (100%) rename services/flipcash/src/{main => commonMain}/kotlin/com/flipcash/services/internal/network/extensions/SignMessage.kt (100%) rename services/flipcash/src/{main => commonMain}/kotlin/com/flipcash/services/internal/network/services/AccountService.kt (100%) rename services/flipcash/src/{main => commonMain}/kotlin/com/flipcash/services/internal/network/services/ActivityFeedService.kt (100%) rename services/flipcash/src/{main => commonMain}/kotlin/com/flipcash/services/internal/network/services/BlobStorageService.kt (100%) rename services/flipcash/src/{main => commonMain}/kotlin/com/flipcash/services/internal/network/services/BlocklistService.kt (100%) rename services/flipcash/src/{main => commonMain}/kotlin/com/flipcash/services/internal/network/services/ChatMessagingService.kt (100%) rename services/flipcash/src/{main => commonMain}/kotlin/com/flipcash/services/internal/network/services/ChatService.kt (100%) rename services/flipcash/src/{main => commonMain}/kotlin/com/flipcash/services/internal/network/services/CommunityService.kt (100%) rename services/flipcash/src/{main => commonMain}/kotlin/com/flipcash/services/internal/network/services/ContactListService.kt (100%) rename services/flipcash/src/{main => commonMain}/kotlin/com/flipcash/services/internal/network/services/EmailVerificationService.kt (100%) rename services/flipcash/src/{main => commonMain}/kotlin/com/flipcash/services/internal/network/services/EventStreamingService.kt (100%) rename services/flipcash/src/{main => commonMain}/kotlin/com/flipcash/services/internal/network/services/ModerationService.kt (100%) rename services/flipcash/src/{main => commonMain}/kotlin/com/flipcash/services/internal/network/services/PhoneVerificationService.kt (100%) rename services/flipcash/src/{main => commonMain}/kotlin/com/flipcash/services/internal/network/services/PollService.kt (100%) rename services/flipcash/src/{main => commonMain}/kotlin/com/flipcash/services/internal/network/services/ProfileService.kt (100%) rename services/flipcash/src/{main => commonMain}/kotlin/com/flipcash/services/internal/network/services/PurchaseService.kt (100%) rename services/flipcash/src/{main => commonMain}/kotlin/com/flipcash/services/internal/network/services/PushService.kt (100%) rename services/flipcash/src/{main => commonMain}/kotlin/com/flipcash/services/internal/network/services/ReportingService.kt (100%) rename services/flipcash/src/{main => commonMain}/kotlin/com/flipcash/services/internal/network/services/ResolverService.kt (100%) rename services/flipcash/src/{main => commonMain}/kotlin/com/flipcash/services/internal/network/services/SettingsService.kt (100%) rename services/flipcash/src/{main => commonMain}/kotlin/com/flipcash/services/internal/network/services/ThirdPartyService.kt (100%) rename services/flipcash/src/{main => commonMain}/kotlin/com/flipcash/services/internal/repositories/InternalAccountRepository.kt (100%) rename services/flipcash/src/{main => commonMain}/kotlin/com/flipcash/services/internal/repositories/InternalActivityFeedRepository.kt (100%) rename services/flipcash/src/{main => commonMain}/kotlin/com/flipcash/services/internal/repositories/InternalBlobStorageRepository.kt (100%) rename services/flipcash/src/{main => commonMain}/kotlin/com/flipcash/services/internal/repositories/InternalBlocklistRepository.kt (100%) rename services/flipcash/src/{main => commonMain}/kotlin/com/flipcash/services/internal/repositories/InternalChatMessagingRepository.kt (100%) rename services/flipcash/src/{main => commonMain}/kotlin/com/flipcash/services/internal/repositories/InternalChatRepository.kt (100%) rename services/flipcash/src/{main => commonMain}/kotlin/com/flipcash/services/internal/repositories/InternalCommunityRepository.kt (100%) rename services/flipcash/src/{main => commonMain}/kotlin/com/flipcash/services/internal/repositories/InternalContactListRepository.kt (100%) rename services/flipcash/src/{main => commonMain}/kotlin/com/flipcash/services/internal/repositories/InternalContactVerificationRepository.kt (100%) rename services/flipcash/src/{main => commonMain}/kotlin/com/flipcash/services/internal/repositories/InternalEventStreamingRepository.kt (100%) rename services/flipcash/src/{main => commonMain}/kotlin/com/flipcash/services/internal/repositories/InternalModerationRepository.kt (100%) rename services/flipcash/src/{main => commonMain}/kotlin/com/flipcash/services/internal/repositories/InternalPollRepository.kt (100%) rename services/flipcash/src/{main => commonMain}/kotlin/com/flipcash/services/internal/repositories/InternalProfileRepository.kt (100%) rename services/flipcash/src/{main => commonMain}/kotlin/com/flipcash/services/internal/repositories/InternalPurchaseRepository.kt (100%) rename services/flipcash/src/{main => commonMain}/kotlin/com/flipcash/services/internal/repositories/InternalPushRepository.kt (100%) rename services/flipcash/src/{main => commonMain}/kotlin/com/flipcash/services/internal/repositories/InternalReportingRepository.kt (100%) rename services/flipcash/src/{main => commonMain}/kotlin/com/flipcash/services/internal/repositories/InternalResolverRepository.kt (100%) rename services/flipcash/src/{main => commonMain}/kotlin/com/flipcash/services/internal/repositories/InternalSettingsRepository.kt (100%) rename services/flipcash/src/{main => commonMain}/kotlin/com/flipcash/services/internal/repositories/InternalThirdPartyRepository.kt (100%) rename services/flipcash/src/{main => commonMain}/kotlin/com/flipcash/services/modals/ModalManager.kt (100%) rename services/flipcash/src/{main => commonMain}/kotlin/com/flipcash/services/models/ActivityFeedNotification.kt (100%) rename services/flipcash/src/{main => commonMain}/kotlin/com/flipcash/services/models/ActivityFeedType.kt (100%) rename services/flipcash/src/{main => commonMain}/kotlin/com/flipcash/services/models/BlockedUser.kt (100%) rename services/flipcash/src/{main => commonMain}/kotlin/com/flipcash/services/models/Community.kt (100%) rename services/flipcash/src/{main => commonMain}/kotlin/com/flipcash/services/models/ContactMethod.kt (100%) rename services/flipcash/src/{main => commonMain}/kotlin/com/flipcash/services/models/DmPaymentMetadata.kt (100%) rename services/flipcash/src/{main => commonMain}/kotlin/com/flipcash/services/models/Errors.kt (100%) rename services/flipcash/src/{main => commonMain}/kotlin/com/flipcash/services/models/FlipcashContactEntry.kt (100%) rename services/flipcash/src/{main => commonMain}/kotlin/com/flipcash/services/models/Handle.kt (100%) rename services/flipcash/src/{main => commonMain}/kotlin/com/flipcash/services/models/Jwt.kt (100%) rename services/flipcash/src/{main => commonMain}/kotlin/com/flipcash/services/models/ModerationResult.kt (100%) rename services/flipcash/src/{main => commonMain}/kotlin/com/flipcash/services/models/NotificationPayload.kt (100%) rename services/flipcash/src/{main => commonMain}/kotlin/com/flipcash/services/models/ProfileIdentifier.kt (100%) rename services/flipcash/src/{main => commonMain}/kotlin/com/flipcash/services/models/QueryOptions.kt (100%) rename services/flipcash/src/{main => commonMain}/kotlin/com/flipcash/services/models/ReactionBoostMetadata.kt (100%) rename services/flipcash/src/{main => commonMain}/kotlin/com/flipcash/services/models/ReportTarget.kt (100%) rename services/flipcash/src/{main => commonMain}/kotlin/com/flipcash/services/models/ResolveIdentifier.kt (100%) rename services/flipcash/src/{main => commonMain}/kotlin/com/flipcash/services/models/SocialAccountLinking.kt (100%) rename services/flipcash/src/{main => commonMain}/kotlin/com/flipcash/services/models/TipPresets.kt (100%) rename services/flipcash/src/{main => commonMain}/kotlin/com/flipcash/services/models/UserFlags.kt (100%) rename services/flipcash/src/{main => commonMain}/kotlin/com/flipcash/services/models/UserProfile.kt (97%) rename services/flipcash/src/{main => commonMain}/kotlin/com/flipcash/services/models/VerifiableContactMethod.kt (83%) rename services/flipcash/src/{main => commonMain}/kotlin/com/flipcash/services/models/blob/UploadPolicy.kt (100%) rename services/flipcash/src/{main => commonMain}/kotlin/com/flipcash/services/models/blob/UploadTarget.kt (100%) rename services/flipcash/src/{main => commonMain}/kotlin/com/flipcash/services/models/chat/BlobAccessContext.kt (100%) rename services/flipcash/src/{main => commonMain}/kotlin/com/flipcash/services/models/chat/BlobId.kt (96%) rename services/flipcash/src/{main => commonMain}/kotlin/com/flipcash/services/models/chat/BlobMetadata.kt (95%) rename services/flipcash/src/{main => commonMain}/kotlin/com/flipcash/services/models/chat/BlobUpdate.kt (100%) rename services/flipcash/src/{main => commonMain}/kotlin/com/flipcash/services/models/chat/ChatEvent.kt (100%) rename services/flipcash/src/{main => commonMain}/kotlin/com/flipcash/services/models/chat/ChatFeedPage.kt (100%) rename services/flipcash/src/{main => commonMain}/kotlin/com/flipcash/services/models/chat/ChatId.kt (82%) rename services/flipcash/src/{main => commonMain}/kotlin/com/flipcash/services/models/chat/ChatMember.kt (100%) rename services/flipcash/src/{main => commonMain}/kotlin/com/flipcash/services/models/chat/ChatMessage.kt (100%) rename services/flipcash/src/{main => commonMain}/kotlin/com/flipcash/services/models/chat/ChatMetadata.kt (100%) rename services/flipcash/src/{main => commonMain}/kotlin/com/flipcash/services/models/chat/ChatMutation.kt (100%) rename services/flipcash/src/{main => commonMain}/kotlin/com/flipcash/services/models/chat/ChatRules.kt (100%) rename services/flipcash/src/{main => commonMain}/kotlin/com/flipcash/services/models/chat/ChatType.kt (100%) rename services/flipcash/src/{main => commonMain}/kotlin/com/flipcash/services/models/chat/ChatUpdate.kt (100%) rename services/flipcash/src/{main => commonMain}/kotlin/com/flipcash/services/models/chat/ClientMessageId.kt (100%) rename services/flipcash/src/{main => commonMain}/kotlin/com/flipcash/services/models/chat/DeliveryStatus.kt (100%) rename services/flipcash/src/{main => commonMain}/kotlin/com/flipcash/services/models/chat/DmAddressability.kt (100%) rename services/flipcash/src/{main => commonMain}/kotlin/com/flipcash/services/models/chat/EditChatParameters.kt (100%) rename services/flipcash/src/{main => commonMain}/kotlin/com/flipcash/services/models/chat/Emoji.kt (100%) rename services/flipcash/src/{main => commonMain}/kotlin/com/flipcash/services/models/chat/EmojiReaction.kt (100%) rename services/flipcash/src/{main => commonMain}/kotlin/com/flipcash/services/models/chat/HoldingsSummary.kt (100%) rename services/flipcash/src/{main => commonMain}/kotlin/com/flipcash/services/models/chat/IdempotencyKey.kt (100%) rename services/flipcash/src/{main => commonMain}/kotlin/com/flipcash/services/models/chat/ImageMetadata.kt (70%) rename services/flipcash/src/{main => commonMain}/kotlin/com/flipcash/services/models/chat/KeyEnvelope.kt (100%) rename services/flipcash/src/{main => commonMain}/kotlin/com/flipcash/services/models/chat/LinkPreview.kt (100%) rename services/flipcash/src/{main => commonMain}/kotlin/com/flipcash/services/models/chat/Lobby.kt (100%) rename services/flipcash/src/{main => commonMain}/kotlin/com/flipcash/services/models/chat/MediaItem.kt (98%) rename services/flipcash/src/{main => commonMain}/kotlin/com/flipcash/services/models/chat/MediaItemRendition.kt (92%) rename services/flipcash/src/{main => commonMain}/kotlin/com/flipcash/services/models/chat/MentionSuggestion.kt (100%) rename services/flipcash/src/{main => commonMain}/kotlin/com/flipcash/services/models/chat/MessageContent.kt (100%) rename services/flipcash/src/{main => commonMain}/kotlin/com/flipcash/services/models/chat/MessagePointer.kt (100%) rename services/flipcash/src/{main => commonMain}/kotlin/com/flipcash/services/models/chat/MetadataUpdate.kt (100%) rename services/flipcash/src/{main => commonMain}/kotlin/com/flipcash/services/models/chat/MuteExtensions.kt (100%) rename services/flipcash/src/{main => commonMain}/kotlin/com/flipcash/services/models/chat/MuteState.kt (100%) rename services/flipcash/src/{main => commonMain}/kotlin/com/flipcash/services/models/chat/ReactionSummary.kt (100%) rename services/flipcash/src/{main => commonMain}/kotlin/com/flipcash/services/models/chat/ReactionUpdate.kt (100%) rename services/flipcash/src/{main => commonMain}/kotlin/com/flipcash/services/models/chat/Reactor.kt (100%) rename services/flipcash/src/{main => commonMain}/kotlin/com/flipcash/services/models/chat/RosterChange.kt (100%) rename services/flipcash/src/{main => commonMain}/kotlin/com/flipcash/services/models/chat/RosterPage.kt (100%) rename services/flipcash/src/{main => commonMain}/kotlin/com/flipcash/services/models/chat/RosterSummary.kt (100%) rename services/flipcash/src/{main => commonMain}/kotlin/com/flipcash/services/models/chat/SampledChatter.kt (100%) rename services/flipcash/src/{main => commonMain}/kotlin/com/flipcash/services/models/chat/StartChatParameters.kt (100%) rename services/flipcash/src/{main => commonMain}/kotlin/com/flipcash/services/models/chat/TypingNotification.kt (100%) rename services/flipcash/src/{main => commonMain}/kotlin/com/flipcash/services/models/chat/ViewMode.kt (100%) rename services/flipcash/src/{main => commonMain}/kotlin/com/flipcash/services/models/chat/ViewerState.kt (100%) rename services/flipcash/src/{main => commonMain}/kotlin/com/flipcash/services/models/chat/WidgetContent.kt (100%) rename services/flipcash/src/{main => commonMain}/kotlin/com/flipcash/services/persistence/DataSource.kt (100%) rename services/flipcash/src/{main => commonMain}/kotlin/com/flipcash/services/repository/AccountRepository.kt (100%) rename services/flipcash/src/{main => commonMain}/kotlin/com/flipcash/services/repository/ActivityFeedRepository.kt (100%) rename services/flipcash/src/{main => commonMain}/kotlin/com/flipcash/services/repository/BlobStorageRepository.kt (100%) rename services/flipcash/src/{main => commonMain}/kotlin/com/flipcash/services/repository/BlocklistRepository.kt (100%) rename services/flipcash/src/{main => commonMain}/kotlin/com/flipcash/services/repository/ChatMessagingRepository.kt (100%) rename services/flipcash/src/{main => commonMain}/kotlin/com/flipcash/services/repository/ChatRepository.kt (100%) rename services/flipcash/src/{main => commonMain}/kotlin/com/flipcash/services/repository/CommunityRepository.kt (100%) rename services/flipcash/src/{main => commonMain}/kotlin/com/flipcash/services/repository/ContactListRepository.kt (100%) rename services/flipcash/src/{main => commonMain}/kotlin/com/flipcash/services/repository/ContactVerificationRepository.kt (100%) rename services/flipcash/src/{main => commonMain}/kotlin/com/flipcash/services/repository/EventStreamingRepository.kt (100%) rename services/flipcash/src/{main => commonMain}/kotlin/com/flipcash/services/repository/ModerationRepository.kt (100%) rename services/flipcash/src/{main => commonMain}/kotlin/com/flipcash/services/repository/PollRepository.kt (100%) rename services/flipcash/src/{main => commonMain}/kotlin/com/flipcash/services/repository/ProfileRepository.kt (100%) rename services/flipcash/src/{main => commonMain}/kotlin/com/flipcash/services/repository/PurchaseRepository.kt (100%) rename services/flipcash/src/{main => commonMain}/kotlin/com/flipcash/services/repository/PushRepository.kt (100%) rename services/flipcash/src/{main => commonMain}/kotlin/com/flipcash/services/repository/ReportingRepository.kt (100%) rename services/flipcash/src/{main => commonMain}/kotlin/com/flipcash/services/repository/ResolverRepository.kt (100%) rename services/flipcash/src/{main => commonMain}/kotlin/com/flipcash/services/repository/SettingsRepository.kt (100%) rename services/flipcash/src/{main => commonMain}/kotlin/com/flipcash/services/repository/ThirdPartyRepository.kt (100%) rename services/flipcash/src/{main => commonMain}/kotlin/com/flipcash/services/user/AnalyticsIdentity.kt (74%) rename services/flipcash/src/{main => commonMain}/kotlin/com/flipcash/services/user/UserManager.kt (98%) rename services/flipcash/src/{main => commonMain}/kotlin/com/flipcash/services/validators/Validator.kt (100%) create mode 100644 services/flipcash/test-fixtures/build.gradle.kts rename services/flipcash/{src/testFixtures => test-fixtures/src/commonMain}/kotlin/com/flipcash/services/chat/FakeChatCipher.kt (100%) diff --git a/apps/flipcash/shared/analytics/build.gradle.kts b/apps/flipcash/shared/analytics/build.gradle.kts index 371f23ce36..c17b1a59e6 100644 --- a/apps/flipcash/shared/analytics/build.gradle.kts +++ b/apps/flipcash/shared/analytics/build.gradle.kts @@ -22,6 +22,7 @@ dependencies { implementation(libs.bugsnag) api(project(":libs:analytics-events")) + implementation(project(":libs:logging")) implementation(project(":services:flipcash")) implementation(project(":services:opencode")) diff --git a/apps/flipcash/shared/analytics/src/main/kotlin/com/flipcash/app/analytics/internal/MixpanelAnalyticsDelegate.kt b/apps/flipcash/shared/analytics/src/main/kotlin/com/flipcash/app/analytics/internal/MixpanelAnalyticsDelegate.kt index 39408e19a3..ecd4b149db 100644 --- a/apps/flipcash/shared/analytics/src/main/kotlin/com/flipcash/app/analytics/internal/MixpanelAnalyticsDelegate.kt +++ b/apps/flipcash/shared/analytics/src/main/kotlin/com/flipcash/app/analytics/internal/MixpanelAnalyticsDelegate.kt @@ -5,7 +5,7 @@ import com.flipcash.analytics.PeopleCounter import com.flipcash.app.analytics.FlipcashAnalytics import com.flipcash.analytics.PropertyValue import com.flipcash.app.analytics.TokenSymbolResolver -import com.getcode.services.flipcash.BuildConfig +import com.getcode.utils.BuildFlags import com.getcode.utils.TraceType import com.getcode.utils.trace import com.mixpanel.android.mpmetrics.MixpanelAPI @@ -20,7 +20,7 @@ internal class MixpanelAnalyticsDelegate @Inject constructor( override fun track(event: AnalyticsEvent) { val properties = event.toMixpanelProperties(tokenSymbolResolver) - if (BuildConfig.DEBUG) { + if (BuildFlags.isDebug) { val propsString = properties.entries.joinToString { "${it.key} => ${it.value}" } trace( buildString { @@ -42,7 +42,7 @@ internal class MixpanelAnalyticsDelegate @Inject constructor( // region Internal private fun increment(property: String, amount: Double) { - if (BuildConfig.DEBUG) { + if (BuildFlags.isDebug) { trace("debug increment $property by $amount", type = TraceType.Silent) return } diff --git a/apps/flipcash/shared/chat/build.gradle.kts b/apps/flipcash/shared/chat/build.gradle.kts index fd45bb87cc..a21772a251 100644 --- a/apps/flipcash/shared/chat/build.gradle.kts +++ b/apps/flipcash/shared/chat/build.gradle.kts @@ -35,7 +35,7 @@ dependencies { implementation(project(":apps:flipcash:shared:analytics")) testImplementation(testFixtures(project(":apps:flipcash:shared:analytics"))) implementation(project(":services:flipcash")) - testImplementation(testFixtures(project(":services:flipcash"))) + testImplementation(project(":services:flipcash:test-fixtures")) implementation(project(":libs:network:connectivity:public")) implementation(project(":libs:emojis")) implementation(libs.androidx.lifecycle.process) diff --git a/apps/flipcash/shared/persistence/sources/build.gradle.kts b/apps/flipcash/shared/persistence/sources/build.gradle.kts index 5fa1f607cf..ea4b055ca7 100644 --- a/apps/flipcash/shared/persistence/sources/build.gradle.kts +++ b/apps/flipcash/shared/persistence/sources/build.gradle.kts @@ -17,7 +17,7 @@ dependencies { testImplementation(kotlin("test")) testImplementation(libs.bundles.unit.testing) testImplementation(libs.robolectric) - testImplementation(testFixtures(project(":services:flipcash"))) + testImplementation(project(":services:flipcash:test-fixtures")) implementation(libs.bundles.kotlinx.serialization) diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 1b6dc7816c..54a4decc30 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -147,6 +147,7 @@ navigation3-runtime = { module = "androidx.navigation3:navigation3-runtime", ver navigation3-ui = { module = "androidx.navigation3:navigation3-ui", version.ref = "navigation3" } lifecycle-viewmodel-navigation3 = { module = "androidx.lifecycle:lifecycle-viewmodel-navigation3", version.ref = "navigation3-lifecycle" } androidx-browser = { module = "androidx.browser:browser", version.ref = "androidx-browser" } +androidx-paging-common = { module = "androidx.paging:paging-common", version.ref = "androidx-paging" } androidx-paging-runtime = { module = "androidx.paging:paging-runtime-ktx", version.ref = "androidx-paging" } androidx-paging-testing = { module = "androidx.paging:paging-testing", version.ref = "androidx-paging" } androidx-room-runtime = { module = "androidx.room:room-runtime", version.ref = "androidx-room" } diff --git a/services/flipcash/build.gradle.kts b/services/flipcash/build.gradle.kts index 6770471c04..97e107fbf0 100644 --- a/services/flipcash/build.gradle.kts +++ b/services/flipcash/build.gradle.kts @@ -1,80 +1,65 @@ plugins { - alias(libs.plugins.flipcash.android.library) - id("com.google.devtools.ksp") + alias(libs.plugins.flipcash.kmp.app.library) + alias(libs.plugins.kotlin.ksp) id("org.jetbrains.kotlin.plugin.parcelize") } -android { - namespace = "${Gradle.codeNamespace}.services.flipcash" - - defaultConfig { - consumerProguardFiles("consumer-rules.pro") - - buildConfigField("Boolean", "NOTIFY_ERRORS", "false") - buildConfigField( - "String", - "GOOGLE_CLOUD_PROJECT_NUMBER", - "\"${tryReadProperty(rootProject.rootDir, "GOOGLE_CLOUD_PROJECT_NUMBER", "-1L")}\"" - ) - } - - buildFeatures { - buildConfig = true +kotlin { + android { + namespace = "${Gradle.codeNamespace}.services.flipcash" + optimization { + consumerKeepRules.apply { + publish = true + file("consumer-rules.pro") + } + } } - testFixtures { - enable = true + sourceSets { + commonMain.dependencies { + implementation(libs.flipcash2.client.protocol) + api(project(":libs:network:jwt")) + api(project(":services:opencode")) + implementation(project(":ui:resources")) + // `api`: ChatContentCrypto and ChatKeySource name ChatCipher and its KeyPair. + api(project(":libs:encryption:chat-cipher")) + + implementation(libs.bundles.hilt.common) + implementation(libs.kotlinx.serialization.json) + implementation(libs.grpc.okhttp) + implementation(libs.grpc.kotlin) + implementation(libs.grpc.protobuf.lite) + implementation(libs.protobuf.validate.runtime) + implementation(libs.androidx.paging.common) + implementation(libs.okhttp) + implementation(libs.event.bus) + } + androidMain.dependencies { + implementation(libs.grpc.android) + implementation(libs.androidx.lifecycle.runtime) + implementation(libs.androidx.lifecycle.process) + implementation(libs.mixpanel) + implementation(project.dependencies.platform(libs.firebase.bom)) + implementation(libs.firebase.installations) + implementation(libs.play.integrity) + implementation(libs.fingerprint.pro) + implementation(libs.hilt.android) + + // Not imported by this module; kept so the app's runtime classpath is unchanged. + implementation(libs.androidx.room.runtime) + implementation(libs.androidx.room.ktx) + implementation(libs.androidx.room.paging) + implementation(libs.androidx.paging.runtime) + } + getByName("androidHostTest").dependencies { + implementation(kotlin("test")) + implementation(libs.bundles.unit.testing) + implementation(project(":services:flipcash:test-fixtures")) + } } } dependencies { - implementation(libs.flipcash2.client.protocol) - api(project(":libs:network:jwt")) - api(project(":services:opencode")) - implementation(project(":ui:resources")) - // `api`: ChatContentCrypto and ChatKeySource name ChatCipher and its KeyPair. - api(project(":libs:encryption:chat-cipher")) - testFixturesImplementation(project(":libs:encryption:chat-cipher")) - - implementation(libs.javax.inject) - - implementation(libs.kotlinx.serialization.json) - implementation(libs.javax.inject) - - implementation(libs.grpc.android) - implementation(libs.grpc.okhttp) - implementation(libs.grpc.kotlin) - implementation(libs.grpc.protobuf.lite) - implementation(libs.protobuf.validate.runtime) - implementation(libs.androidx.lifecycle.runtime) - implementation(libs.androidx.lifecycle.process) - implementation(libs.androidx.room.runtime) - implementation(libs.androidx.room.ktx) - implementation(libs.androidx.room.paging) - implementation(libs.okhttp) - implementation(libs.mixpanel) - - implementation(platform(libs.firebase.bom)) - implementation(libs.firebase.installations) - - implementation(libs.play.integrity) - - implementation(libs.androidx.paging.runtime) - - ksp(libs.androidx.room.compiler) - - implementation(libs.fingerprint.pro) - - androidTestImplementation(libs.androidx.junit) - androidTestImplementation(libs.junit) - androidTestImplementation(libs.androidx.test.runner) - - implementation(libs.hilt.android) - ksp(libs.hilt.android.compiler) - ksp(libs.hilt.compiler) - - implementation(libs.event.bus) - - testImplementation(kotlin("test")) - testImplementation(libs.bundles.unit.testing) + add("kspAndroid", libs.hilt.android.compiler) + add("kspAndroid", libs.hilt.compiler) } diff --git a/services/flipcash/src/test/kotlin/com/flipcash/services/chat/ChatContentCryptoTest.kt b/services/flipcash/src/androidHostTest/kotlin/com/flipcash/services/chat/ChatContentCryptoTest.kt similarity index 100% rename from services/flipcash/src/test/kotlin/com/flipcash/services/chat/ChatContentCryptoTest.kt rename to services/flipcash/src/androidHostTest/kotlin/com/flipcash/services/chat/ChatContentCryptoTest.kt diff --git a/services/flipcash/src/test/kotlin/com/flipcash/services/chat/E2eePolicyTest.kt b/services/flipcash/src/androidHostTest/kotlin/com/flipcash/services/chat/E2eePolicyTest.kt similarity index 100% rename from services/flipcash/src/test/kotlin/com/flipcash/services/chat/E2eePolicyTest.kt rename to services/flipcash/src/androidHostTest/kotlin/com/flipcash/services/chat/E2eePolicyTest.kt diff --git a/services/flipcash/src/test/kotlin/com/flipcash/services/chat/GroupContentCryptoTest.kt b/services/flipcash/src/androidHostTest/kotlin/com/flipcash/services/chat/GroupContentCryptoTest.kt similarity index 100% rename from services/flipcash/src/test/kotlin/com/flipcash/services/chat/GroupContentCryptoTest.kt rename to services/flipcash/src/androidHostTest/kotlin/com/flipcash/services/chat/GroupContentCryptoTest.kt diff --git a/services/flipcash/src/test/kotlin/com/flipcash/services/chat/GroupKeyEnvelopesTest.kt b/services/flipcash/src/androidHostTest/kotlin/com/flipcash/services/chat/GroupKeyEnvelopesTest.kt similarity index 100% rename from services/flipcash/src/test/kotlin/com/flipcash/services/chat/GroupKeyEnvelopesTest.kt rename to services/flipcash/src/androidHostTest/kotlin/com/flipcash/services/chat/GroupKeyEnvelopesTest.kt diff --git a/services/flipcash/src/test/kotlin/com/flipcash/services/controllers/BlobStorageControllerChatMediaTest.kt b/services/flipcash/src/androidHostTest/kotlin/com/flipcash/services/controllers/BlobStorageControllerChatMediaTest.kt similarity index 100% rename from services/flipcash/src/test/kotlin/com/flipcash/services/controllers/BlobStorageControllerChatMediaTest.kt rename to services/flipcash/src/androidHostTest/kotlin/com/flipcash/services/controllers/BlobStorageControllerChatMediaTest.kt diff --git a/services/flipcash/src/test/kotlin/com/flipcash/services/controllers/BlobStorageControllerTest.kt b/services/flipcash/src/androidHostTest/kotlin/com/flipcash/services/controllers/BlobStorageControllerTest.kt similarity index 100% rename from services/flipcash/src/test/kotlin/com/flipcash/services/controllers/BlobStorageControllerTest.kt rename to services/flipcash/src/androidHostTest/kotlin/com/flipcash/services/controllers/BlobStorageControllerTest.kt diff --git a/services/flipcash/src/test/kotlin/com/flipcash/services/controllers/ChatControllerTest.kt b/services/flipcash/src/androidHostTest/kotlin/com/flipcash/services/controllers/ChatControllerTest.kt similarity index 100% rename from services/flipcash/src/test/kotlin/com/flipcash/services/controllers/ChatControllerTest.kt rename to services/flipcash/src/androidHostTest/kotlin/com/flipcash/services/controllers/ChatControllerTest.kt diff --git a/services/flipcash/src/test/kotlin/com/flipcash/services/controllers/ChatMessagingControllerTest.kt b/services/flipcash/src/androidHostTest/kotlin/com/flipcash/services/controllers/ChatMessagingControllerTest.kt similarity index 100% rename from services/flipcash/src/test/kotlin/com/flipcash/services/controllers/ChatMessagingControllerTest.kt rename to services/flipcash/src/androidHostTest/kotlin/com/flipcash/services/controllers/ChatMessagingControllerTest.kt diff --git a/services/flipcash/src/test/kotlin/com/flipcash/services/controllers/ContactVerificationControllerTest.kt b/services/flipcash/src/androidHostTest/kotlin/com/flipcash/services/controllers/ContactVerificationControllerTest.kt similarity index 100% rename from services/flipcash/src/test/kotlin/com/flipcash/services/controllers/ContactVerificationControllerTest.kt rename to services/flipcash/src/androidHostTest/kotlin/com/flipcash/services/controllers/ContactVerificationControllerTest.kt diff --git a/services/flipcash/src/test/kotlin/com/flipcash/services/controllers/EventStreamingControllerTest.kt b/services/flipcash/src/androidHostTest/kotlin/com/flipcash/services/controllers/EventStreamingControllerTest.kt similarity index 100% rename from services/flipcash/src/test/kotlin/com/flipcash/services/controllers/EventStreamingControllerTest.kt rename to services/flipcash/src/androidHostTest/kotlin/com/flipcash/services/controllers/EventStreamingControllerTest.kt diff --git a/services/flipcash/src/test/kotlin/com/flipcash/services/controllers/ProfileControllerTest.kt b/services/flipcash/src/androidHostTest/kotlin/com/flipcash/services/controllers/ProfileControllerTest.kt similarity index 100% rename from services/flipcash/src/test/kotlin/com/flipcash/services/controllers/ProfileControllerTest.kt rename to services/flipcash/src/androidHostTest/kotlin/com/flipcash/services/controllers/ProfileControllerTest.kt diff --git a/services/flipcash/src/test/kotlin/com/flipcash/services/internal/domain/ActivityFeedMessageMapperTest.kt b/services/flipcash/src/androidHostTest/kotlin/com/flipcash/services/internal/domain/ActivityFeedMessageMapperTest.kt similarity index 100% rename from services/flipcash/src/test/kotlin/com/flipcash/services/internal/domain/ActivityFeedMessageMapperTest.kt rename to services/flipcash/src/androidHostTest/kotlin/com/flipcash/services/internal/domain/ActivityFeedMessageMapperTest.kt diff --git a/services/flipcash/src/test/kotlin/com/flipcash/services/internal/domain/ChatMetadataMapperTest.kt b/services/flipcash/src/androidHostTest/kotlin/com/flipcash/services/internal/domain/ChatMetadataMapperTest.kt similarity index 100% rename from services/flipcash/src/test/kotlin/com/flipcash/services/internal/domain/ChatMetadataMapperTest.kt rename to services/flipcash/src/androidHostTest/kotlin/com/flipcash/services/internal/domain/ChatMetadataMapperTest.kt diff --git a/services/flipcash/src/test/kotlin/com/flipcash/services/internal/domain/SocialAccountMapperTest.kt b/services/flipcash/src/androidHostTest/kotlin/com/flipcash/services/internal/domain/SocialAccountMapperTest.kt similarity index 100% rename from services/flipcash/src/test/kotlin/com/flipcash/services/internal/domain/SocialAccountMapperTest.kt rename to services/flipcash/src/androidHostTest/kotlin/com/flipcash/services/internal/domain/SocialAccountMapperTest.kt diff --git a/services/flipcash/src/test/kotlin/com/flipcash/services/internal/domain/UserFlagsMapperTest.kt b/services/flipcash/src/androidHostTest/kotlin/com/flipcash/services/internal/domain/UserFlagsMapperTest.kt similarity index 100% rename from services/flipcash/src/test/kotlin/com/flipcash/services/internal/domain/UserFlagsMapperTest.kt rename to services/flipcash/src/androidHostTest/kotlin/com/flipcash/services/internal/domain/UserFlagsMapperTest.kt diff --git a/services/flipcash/src/test/kotlin/com/flipcash/services/internal/domain/UserProfileMapperTest.kt b/services/flipcash/src/androidHostTest/kotlin/com/flipcash/services/internal/domain/UserProfileMapperTest.kt similarity index 100% rename from services/flipcash/src/test/kotlin/com/flipcash/services/internal/domain/UserProfileMapperTest.kt rename to services/flipcash/src/androidHostTest/kotlin/com/flipcash/services/internal/domain/UserProfileMapperTest.kt diff --git a/services/flipcash/src/test/kotlin/com/flipcash/services/internal/extensions/JpegMetadataTest.kt b/services/flipcash/src/androidHostTest/kotlin/com/flipcash/services/internal/extensions/JpegMetadataTest.kt similarity index 100% rename from services/flipcash/src/test/kotlin/com/flipcash/services/internal/extensions/JpegMetadataTest.kt rename to services/flipcash/src/androidHostTest/kotlin/com/flipcash/services/internal/extensions/JpegMetadataTest.kt diff --git a/services/flipcash/src/test/kotlin/com/flipcash/services/internal/network/api/BlobAccessContextValidationTest.kt b/services/flipcash/src/androidHostTest/kotlin/com/flipcash/services/internal/network/api/BlobAccessContextValidationTest.kt similarity index 100% rename from services/flipcash/src/test/kotlin/com/flipcash/services/internal/network/api/BlobAccessContextValidationTest.kt rename to services/flipcash/src/androidHostTest/kotlin/com/flipcash/services/internal/network/api/BlobAccessContextValidationTest.kt diff --git a/services/flipcash/src/test/kotlin/com/flipcash/services/internal/network/api/BlobStorageApiDeadlineTest.kt b/services/flipcash/src/androidHostTest/kotlin/com/flipcash/services/internal/network/api/BlobStorageApiDeadlineTest.kt similarity index 100% rename from services/flipcash/src/test/kotlin/com/flipcash/services/internal/network/api/BlobStorageApiDeadlineTest.kt rename to services/flipcash/src/androidHostTest/kotlin/com/flipcash/services/internal/network/api/BlobStorageApiDeadlineTest.kt diff --git a/services/flipcash/src/test/kotlin/com/flipcash/services/internal/network/api/GetBlobsRequestSigningTest.kt b/services/flipcash/src/androidHostTest/kotlin/com/flipcash/services/internal/network/api/GetBlobsRequestSigningTest.kt similarity index 100% rename from services/flipcash/src/test/kotlin/com/flipcash/services/internal/network/api/GetBlobsRequestSigningTest.kt rename to services/flipcash/src/androidHostTest/kotlin/com/flipcash/services/internal/network/api/GetBlobsRequestSigningTest.kt diff --git a/services/flipcash/src/test/kotlin/com/flipcash/services/internal/network/extensions/CashContentMappingTest.kt b/services/flipcash/src/androidHostTest/kotlin/com/flipcash/services/internal/network/extensions/CashContentMappingTest.kt similarity index 100% rename from services/flipcash/src/test/kotlin/com/flipcash/services/internal/network/extensions/CashContentMappingTest.kt rename to services/flipcash/src/androidHostTest/kotlin/com/flipcash/services/internal/network/extensions/CashContentMappingTest.kt diff --git a/services/flipcash/src/test/kotlin/com/flipcash/services/internal/network/extensions/ChatMetadataExtensionTest.kt b/services/flipcash/src/androidHostTest/kotlin/com/flipcash/services/internal/network/extensions/ChatMetadataExtensionTest.kt similarity index 100% rename from services/flipcash/src/test/kotlin/com/flipcash/services/internal/network/extensions/ChatMetadataExtensionTest.kt rename to services/flipcash/src/androidHostTest/kotlin/com/flipcash/services/internal/network/extensions/ChatMetadataExtensionTest.kt diff --git a/services/flipcash/src/test/kotlin/com/flipcash/services/internal/network/extensions/ChatRulesProtoMappingTest.kt b/services/flipcash/src/androidHostTest/kotlin/com/flipcash/services/internal/network/extensions/ChatRulesProtoMappingTest.kt similarity index 100% rename from services/flipcash/src/test/kotlin/com/flipcash/services/internal/network/extensions/ChatRulesProtoMappingTest.kt rename to services/flipcash/src/androidHostTest/kotlin/com/flipcash/services/internal/network/extensions/ChatRulesProtoMappingTest.kt diff --git a/services/flipcash/src/test/kotlin/com/flipcash/services/internal/network/extensions/MediaContentMappingTest.kt b/services/flipcash/src/androidHostTest/kotlin/com/flipcash/services/internal/network/extensions/MediaContentMappingTest.kt similarity index 100% rename from services/flipcash/src/test/kotlin/com/flipcash/services/internal/network/extensions/MediaContentMappingTest.kt rename to services/flipcash/src/androidHostTest/kotlin/com/flipcash/services/internal/network/extensions/MediaContentMappingTest.kt diff --git a/services/flipcash/src/test/kotlin/com/flipcash/services/internal/network/extensions/MessageContentEncryptedMappingTest.kt b/services/flipcash/src/androidHostTest/kotlin/com/flipcash/services/internal/network/extensions/MessageContentEncryptedMappingTest.kt similarity index 100% rename from services/flipcash/src/test/kotlin/com/flipcash/services/internal/network/extensions/MessageContentEncryptedMappingTest.kt rename to services/flipcash/src/androidHostTest/kotlin/com/flipcash/services/internal/network/extensions/MessageContentEncryptedMappingTest.kt diff --git a/services/flipcash/src/test/kotlin/com/flipcash/services/internal/network/extensions/PushPayloadMuteMappingTest.kt b/services/flipcash/src/androidHostTest/kotlin/com/flipcash/services/internal/network/extensions/PushPayloadMuteMappingTest.kt similarity index 100% rename from services/flipcash/src/test/kotlin/com/flipcash/services/internal/network/extensions/PushPayloadMuteMappingTest.kt rename to services/flipcash/src/androidHostTest/kotlin/com/flipcash/services/internal/network/extensions/PushPayloadMuteMappingTest.kt diff --git a/services/flipcash/src/test/kotlin/com/flipcash/services/internal/network/extensions/RosterUpdateExtensionTest.kt b/services/flipcash/src/androidHostTest/kotlin/com/flipcash/services/internal/network/extensions/RosterUpdateExtensionTest.kt similarity index 100% rename from services/flipcash/src/test/kotlin/com/flipcash/services/internal/network/extensions/RosterUpdateExtensionTest.kt rename to services/flipcash/src/androidHostTest/kotlin/com/flipcash/services/internal/network/extensions/RosterUpdateExtensionTest.kt diff --git a/services/flipcash/src/test/kotlin/com/flipcash/services/internal/network/extensions/SystemContentMappingTest.kt b/services/flipcash/src/androidHostTest/kotlin/com/flipcash/services/internal/network/extensions/SystemContentMappingTest.kt similarity index 100% rename from services/flipcash/src/test/kotlin/com/flipcash/services/internal/network/extensions/SystemContentMappingTest.kt rename to services/flipcash/src/androidHostTest/kotlin/com/flipcash/services/internal/network/extensions/SystemContentMappingTest.kt diff --git a/services/flipcash/src/test/kotlin/com/flipcash/services/internal/network/extensions/WidgetAndNeverMappingTest.kt b/services/flipcash/src/androidHostTest/kotlin/com/flipcash/services/internal/network/extensions/WidgetAndNeverMappingTest.kt similarity index 100% rename from services/flipcash/src/test/kotlin/com/flipcash/services/internal/network/extensions/WidgetAndNeverMappingTest.kt rename to services/flipcash/src/androidHostTest/kotlin/com/flipcash/services/internal/network/extensions/WidgetAndNeverMappingTest.kt diff --git a/services/flipcash/src/test/kotlin/com/flipcash/services/internal/network/services/PhoneVerificationServiceTest.kt b/services/flipcash/src/androidHostTest/kotlin/com/flipcash/services/internal/network/services/PhoneVerificationServiceTest.kt similarity index 100% rename from services/flipcash/src/test/kotlin/com/flipcash/services/internal/network/services/PhoneVerificationServiceTest.kt rename to services/flipcash/src/androidHostTest/kotlin/com/flipcash/services/internal/network/services/PhoneVerificationServiceTest.kt diff --git a/services/flipcash/src/test/kotlin/com/flipcash/services/internal/proto/ProtoWireFormatTest.kt b/services/flipcash/src/androidHostTest/kotlin/com/flipcash/services/internal/proto/ProtoWireFormatTest.kt similarity index 100% rename from services/flipcash/src/test/kotlin/com/flipcash/services/internal/proto/ProtoWireFormatTest.kt rename to services/flipcash/src/androidHostTest/kotlin/com/flipcash/services/internal/proto/ProtoWireFormatTest.kt diff --git a/services/flipcash/src/test/kotlin/com/flipcash/services/models/DmPaymentMetadataTest.kt b/services/flipcash/src/androidHostTest/kotlin/com/flipcash/services/models/DmPaymentMetadataTest.kt similarity index 100% rename from services/flipcash/src/test/kotlin/com/flipcash/services/models/DmPaymentMetadataTest.kt rename to services/flipcash/src/androidHostTest/kotlin/com/flipcash/services/models/DmPaymentMetadataTest.kt diff --git a/services/flipcash/src/test/kotlin/com/flipcash/services/models/ErrorsTest.kt b/services/flipcash/src/androidHostTest/kotlin/com/flipcash/services/models/ErrorsTest.kt similarity index 100% rename from services/flipcash/src/test/kotlin/com/flipcash/services/models/ErrorsTest.kt rename to services/flipcash/src/androidHostTest/kotlin/com/flipcash/services/models/ErrorsTest.kt diff --git a/services/flipcash/src/test/kotlin/com/flipcash/services/models/HandleTest.kt b/services/flipcash/src/androidHostTest/kotlin/com/flipcash/services/models/HandleTest.kt similarity index 100% rename from services/flipcash/src/test/kotlin/com/flipcash/services/models/HandleTest.kt rename to services/flipcash/src/androidHostTest/kotlin/com/flipcash/services/models/HandleTest.kt diff --git a/services/flipcash/src/test/kotlin/com/flipcash/services/models/blob/UploadPolicyTest.kt b/services/flipcash/src/androidHostTest/kotlin/com/flipcash/services/models/blob/UploadPolicyTest.kt similarity index 100% rename from services/flipcash/src/test/kotlin/com/flipcash/services/models/blob/UploadPolicyTest.kt rename to services/flipcash/src/androidHostTest/kotlin/com/flipcash/services/models/blob/UploadPolicyTest.kt diff --git a/services/flipcash/src/test/kotlin/com/flipcash/services/models/chat/BlobExpiryTest.kt b/services/flipcash/src/androidHostTest/kotlin/com/flipcash/services/models/chat/BlobExpiryTest.kt similarity index 100% rename from services/flipcash/src/test/kotlin/com/flipcash/services/models/chat/BlobExpiryTest.kt rename to services/flipcash/src/androidHostTest/kotlin/com/flipcash/services/models/chat/BlobExpiryTest.kt diff --git a/services/flipcash/src/test/kotlin/com/flipcash/services/models/chat/BlobIdEqualityTest.kt b/services/flipcash/src/androidHostTest/kotlin/com/flipcash/services/models/chat/BlobIdEqualityTest.kt similarity index 100% rename from services/flipcash/src/test/kotlin/com/flipcash/services/models/chat/BlobIdEqualityTest.kt rename to services/flipcash/src/androidHostTest/kotlin/com/flipcash/services/models/chat/BlobIdEqualityTest.kt diff --git a/services/flipcash/src/test/kotlin/com/flipcash/services/models/chat/BlobIdSerializationTest.kt b/services/flipcash/src/androidHostTest/kotlin/com/flipcash/services/models/chat/BlobIdSerializationTest.kt similarity index 100% rename from services/flipcash/src/test/kotlin/com/flipcash/services/models/chat/BlobIdSerializationTest.kt rename to services/flipcash/src/androidHostTest/kotlin/com/flipcash/services/models/chat/BlobIdSerializationTest.kt diff --git a/services/flipcash/src/test/kotlin/com/flipcash/services/models/chat/ChatIdTest.kt b/services/flipcash/src/androidHostTest/kotlin/com/flipcash/services/models/chat/ChatIdTest.kt similarity index 100% rename from services/flipcash/src/test/kotlin/com/flipcash/services/models/chat/ChatIdTest.kt rename to services/flipcash/src/androidHostTest/kotlin/com/flipcash/services/models/chat/ChatIdTest.kt diff --git a/services/flipcash/src/test/kotlin/com/flipcash/services/models/chat/DmAddressabilityTest.kt b/services/flipcash/src/androidHostTest/kotlin/com/flipcash/services/models/chat/DmAddressabilityTest.kt similarity index 100% rename from services/flipcash/src/test/kotlin/com/flipcash/services/models/chat/DmAddressabilityTest.kt rename to services/flipcash/src/androidHostTest/kotlin/com/flipcash/services/models/chat/DmAddressabilityTest.kt diff --git a/services/flipcash/src/test/kotlin/com/flipcash/services/models/chat/DomainModelsTest.kt b/services/flipcash/src/androidHostTest/kotlin/com/flipcash/services/models/chat/DomainModelsTest.kt similarity index 100% rename from services/flipcash/src/test/kotlin/com/flipcash/services/models/chat/DomainModelsTest.kt rename to services/flipcash/src/androidHostTest/kotlin/com/flipcash/services/models/chat/DomainModelsTest.kt diff --git a/services/flipcash/src/test/kotlin/com/flipcash/services/models/chat/MediaItemTest.kt b/services/flipcash/src/androidHostTest/kotlin/com/flipcash/services/models/chat/MediaItemTest.kt similarity index 100% rename from services/flipcash/src/test/kotlin/com/flipcash/services/models/chat/MediaItemTest.kt rename to services/flipcash/src/androidHostTest/kotlin/com/flipcash/services/models/chat/MediaItemTest.kt diff --git a/services/flipcash/src/test/kotlin/com/flipcash/services/models/chat/MuteLapseTest.kt b/services/flipcash/src/androidHostTest/kotlin/com/flipcash/services/models/chat/MuteLapseTest.kt similarity index 100% rename from services/flipcash/src/test/kotlin/com/flipcash/services/models/chat/MuteLapseTest.kt rename to services/flipcash/src/androidHostTest/kotlin/com/flipcash/services/models/chat/MuteLapseTest.kt diff --git a/services/flipcash/src/test/kotlin/com/flipcash/services/user/AnalyticsIdentityTest.kt b/services/flipcash/src/androidHostTest/kotlin/com/flipcash/services/user/AnalyticsIdentityTest.kt similarity index 100% rename from services/flipcash/src/test/kotlin/com/flipcash/services/user/AnalyticsIdentityTest.kt rename to services/flipcash/src/androidHostTest/kotlin/com/flipcash/services/user/AnalyticsIdentityTest.kt diff --git a/services/flipcash/src/test/kotlin/com/flipcash/services/user/UserManagerTest.kt b/services/flipcash/src/androidHostTest/kotlin/com/flipcash/services/user/UserManagerTest.kt similarity index 96% rename from services/flipcash/src/test/kotlin/com/flipcash/services/user/UserManagerTest.kt rename to services/flipcash/src/androidHostTest/kotlin/com/flipcash/services/user/UserManagerTest.kt index 8fa1dd64f5..fde805c379 100644 --- a/services/flipcash/src/test/kotlin/com/flipcash/services/user/UserManagerTest.kt +++ b/services/flipcash/src/androidHostTest/kotlin/com/flipcash/services/user/UserManagerTest.kt @@ -10,7 +10,6 @@ import com.getcode.opencode.model.financial.usdf import com.getcode.opencode.utils.generate import com.getcode.solana.keys.PublicKey import com.hoc081098.channeleventbus.ChannelEventBus -import com.mixpanel.android.mpmetrics.MixpanelAPI import io.mockk.clearMocks import io.mockk.every import io.mockk.mockk @@ -28,7 +27,7 @@ import kotlin.test.assertNull class UserManagerTest { private val mnemonicManager: MnemonicManager = mockk(relaxed = true) - private val mixpanelAPI: MixpanelAPI = mockk(relaxed = true) + private val analyticsIdentifier: AnalyticsIdentifier = mockk(relaxed = true) private val eventBus: ChannelEventBus = mockk(relaxed = true) private val accountController: AccountController = mockk(relaxed = true) @@ -58,7 +57,7 @@ class UserManagerTest { private fun createUserManager() = UserManager( mnemonicManager = mnemonicManager, - mixpanelAPI = mixpanelAPI, + analyticsIdentifier = analyticsIdentifier, eventBus = eventBus, accountController = accountController, ) diff --git a/services/flipcash/src/main/kotlin/com/flipcash/services/ForegroundGate.kt b/services/flipcash/src/androidMain/kotlin/com/flipcash/services/ProcessForegroundGate.kt similarity index 64% rename from services/flipcash/src/main/kotlin/com/flipcash/services/ForegroundGate.kt rename to services/flipcash/src/androidMain/kotlin/com/flipcash/services/ProcessForegroundGate.kt index c6256c461c..23afd99b8a 100644 --- a/services/flipcash/src/main/kotlin/com/flipcash/services/ForegroundGate.kt +++ b/services/flipcash/src/androidMain/kotlin/com/flipcash/services/ProcessForegroundGate.kt @@ -8,16 +8,6 @@ import kotlinx.coroutines.withContext import javax.inject.Inject import javax.inject.Singleton -/** - * Whether the app is in the foreground. Work whose deadline should count foreground time only - * (chat media finalization) waits on [awaitForeground] before each step, so a backgrounded app - * neither burns its budget nor polls from a process the OS may be about to freeze. - */ -fun interface ForegroundGate { - /** Returns immediately when the app is foregrounded, otherwise suspends until it is. */ - suspend fun awaitForeground() -} - /** [ForegroundGate] backed by [ProcessLifecycleOwner]: foreground means at least STARTED. */ @Singleton internal class ProcessForegroundGate @Inject constructor() : ForegroundGate { diff --git a/services/flipcash/src/main/kotlin/com/flipcash/services/controllers/ModerationController.kt b/services/flipcash/src/androidMain/kotlin/com/flipcash/services/controllers/ModerationController.kt similarity index 100% rename from services/flipcash/src/main/kotlin/com/flipcash/services/controllers/ModerationController.kt rename to services/flipcash/src/androidMain/kotlin/com/flipcash/services/controllers/ModerationController.kt diff --git a/services/flipcash/src/main/kotlin/com/flipcash/services/controllers/PushController.kt b/services/flipcash/src/androidMain/kotlin/com/flipcash/services/controllers/PushController.kt similarity index 100% rename from services/flipcash/src/main/kotlin/com/flipcash/services/controllers/PushController.kt rename to services/flipcash/src/androidMain/kotlin/com/flipcash/services/controllers/PushController.kt diff --git a/services/flipcash/src/main/kotlin/com/flipcash/services/inject/FlipcashModule.kt b/services/flipcash/src/androidMain/kotlin/com/flipcash/services/inject/FlipcashModule.kt similarity index 97% rename from services/flipcash/src/main/kotlin/com/flipcash/services/inject/FlipcashModule.kt rename to services/flipcash/src/androidMain/kotlin/com/flipcash/services/inject/FlipcashModule.kt index 1daeefddf9..e45cd2ff18 100644 --- a/services/flipcash/src/main/kotlin/com/flipcash/services/inject/FlipcashModule.kt +++ b/services/flipcash/src/androidMain/kotlin/com/flipcash/services/inject/FlipcashModule.kt @@ -1,6 +1,8 @@ package com.flipcash.services.inject import android.content.Context +import com.flipcash.services.user.AnalyticsIdentifier +import com.mixpanel.android.mpmetrics.MixpanelAPI import com.flipcash.services.internal.annotations.FlipcashManagedChannel import com.flipcash.services.internal.annotations.FlipcashManagedStreamingChannel import com.flipcash.services.internal.annotations.FlipcashProtocol @@ -94,6 +96,10 @@ import javax.inject.Singleton @Module @InstallIn(SingletonComponent::class) internal object FlipcashModule { + @Provides + fun provideAnalyticsIdentifier(mixpanelAPI: MixpanelAPI): AnalyticsIdentifier = + AnalyticsIdentifier { mixpanelAPI.identify(it) } + @Singleton @FlipcashProtocol @Provides diff --git a/services/flipcash/src/main/kotlin/com/flipcash/services/internal/extensions/Installations.kt b/services/flipcash/src/androidMain/kotlin/com/flipcash/services/internal/extensions/Installations.kt similarity index 100% rename from services/flipcash/src/main/kotlin/com/flipcash/services/internal/extensions/Installations.kt rename to services/flipcash/src/androidMain/kotlin/com/flipcash/services/internal/extensions/Installations.kt diff --git a/services/flipcash/src/main/kotlin/com/flipcash/services/BlobUploader.kt b/services/flipcash/src/commonMain/kotlin/com/flipcash/services/BlobUploader.kt similarity index 100% rename from services/flipcash/src/main/kotlin/com/flipcash/services/BlobUploader.kt rename to services/flipcash/src/commonMain/kotlin/com/flipcash/services/BlobUploader.kt diff --git a/services/flipcash/src/commonMain/kotlin/com/flipcash/services/ForegroundGate.kt b/services/flipcash/src/commonMain/kotlin/com/flipcash/services/ForegroundGate.kt new file mode 100644 index 0000000000..e0fb571324 --- /dev/null +++ b/services/flipcash/src/commonMain/kotlin/com/flipcash/services/ForegroundGate.kt @@ -0,0 +1,11 @@ +package com.flipcash.services + +/** + * Whether the app is in the foreground. Work whose deadline should count foreground time only + * (chat media finalization) waits on [awaitForeground] before each step, so a backgrounded app + * neither burns its budget nor polls from a process the OS may be about to freeze. + */ +fun interface ForegroundGate { + /** Returns immediately when the app is foregrounded, otherwise suspends until it is. */ + suspend fun awaitForeground() +} diff --git a/services/flipcash/src/main/kotlin/com/flipcash/services/chat/ChatContentCrypto.kt b/services/flipcash/src/commonMain/kotlin/com/flipcash/services/chat/ChatContentCrypto.kt similarity index 100% rename from services/flipcash/src/main/kotlin/com/flipcash/services/chat/ChatContentCrypto.kt rename to services/flipcash/src/commonMain/kotlin/com/flipcash/services/chat/ChatContentCrypto.kt diff --git a/services/flipcash/src/main/kotlin/com/flipcash/services/chat/ChatKeySource.kt b/services/flipcash/src/commonMain/kotlin/com/flipcash/services/chat/ChatKeySource.kt similarity index 100% rename from services/flipcash/src/main/kotlin/com/flipcash/services/chat/ChatKeySource.kt rename to services/flipcash/src/commonMain/kotlin/com/flipcash/services/chat/ChatKeySource.kt diff --git a/services/flipcash/src/main/kotlin/com/flipcash/services/chat/E2eePolicy.kt b/services/flipcash/src/commonMain/kotlin/com/flipcash/services/chat/E2eePolicy.kt similarity index 100% rename from services/flipcash/src/main/kotlin/com/flipcash/services/chat/E2eePolicy.kt rename to services/flipcash/src/commonMain/kotlin/com/flipcash/services/chat/E2eePolicy.kt diff --git a/services/flipcash/src/main/kotlin/com/flipcash/services/chat/GroupContentCrypto.kt b/services/flipcash/src/commonMain/kotlin/com/flipcash/services/chat/GroupContentCrypto.kt similarity index 100% rename from services/flipcash/src/main/kotlin/com/flipcash/services/chat/GroupContentCrypto.kt rename to services/flipcash/src/commonMain/kotlin/com/flipcash/services/chat/GroupContentCrypto.kt diff --git a/services/flipcash/src/main/kotlin/com/flipcash/services/chat/GroupKeyEnvelopes.kt b/services/flipcash/src/commonMain/kotlin/com/flipcash/services/chat/GroupKeyEnvelopes.kt similarity index 100% rename from services/flipcash/src/main/kotlin/com/flipcash/services/chat/GroupKeyEnvelopes.kt rename to services/flipcash/src/commonMain/kotlin/com/flipcash/services/chat/GroupKeyEnvelopes.kt diff --git a/services/flipcash/src/main/kotlin/com/flipcash/services/chat/MessageEncryption.kt b/services/flipcash/src/commonMain/kotlin/com/flipcash/services/chat/MessageEncryption.kt similarity index 100% rename from services/flipcash/src/main/kotlin/com/flipcash/services/chat/MessageEncryption.kt rename to services/flipcash/src/commonMain/kotlin/com/flipcash/services/chat/MessageEncryption.kt diff --git a/services/flipcash/src/main/kotlin/com/flipcash/services/chat/SealedMedia.kt b/services/flipcash/src/commonMain/kotlin/com/flipcash/services/chat/SealedMedia.kt similarity index 100% rename from services/flipcash/src/main/kotlin/com/flipcash/services/chat/SealedMedia.kt rename to services/flipcash/src/commonMain/kotlin/com/flipcash/services/chat/SealedMedia.kt diff --git a/services/flipcash/src/main/kotlin/com/flipcash/services/controllers/AccountController.kt b/services/flipcash/src/commonMain/kotlin/com/flipcash/services/controllers/AccountController.kt similarity index 100% rename from services/flipcash/src/main/kotlin/com/flipcash/services/controllers/AccountController.kt rename to services/flipcash/src/commonMain/kotlin/com/flipcash/services/controllers/AccountController.kt diff --git a/services/flipcash/src/main/kotlin/com/flipcash/services/controllers/ActivityFeedController.kt b/services/flipcash/src/commonMain/kotlin/com/flipcash/services/controllers/ActivityFeedController.kt similarity index 100% rename from services/flipcash/src/main/kotlin/com/flipcash/services/controllers/ActivityFeedController.kt rename to services/flipcash/src/commonMain/kotlin/com/flipcash/services/controllers/ActivityFeedController.kt diff --git a/services/flipcash/src/main/kotlin/com/flipcash/services/controllers/BlobStorageController.kt b/services/flipcash/src/commonMain/kotlin/com/flipcash/services/controllers/BlobStorageController.kt similarity index 100% rename from services/flipcash/src/main/kotlin/com/flipcash/services/controllers/BlobStorageController.kt rename to services/flipcash/src/commonMain/kotlin/com/flipcash/services/controllers/BlobStorageController.kt diff --git a/services/flipcash/src/main/kotlin/com/flipcash/services/controllers/BlocklistController.kt b/services/flipcash/src/commonMain/kotlin/com/flipcash/services/controllers/BlocklistController.kt similarity index 100% rename from services/flipcash/src/main/kotlin/com/flipcash/services/controllers/BlocklistController.kt rename to services/flipcash/src/commonMain/kotlin/com/flipcash/services/controllers/BlocklistController.kt diff --git a/services/flipcash/src/main/kotlin/com/flipcash/services/controllers/ChatController.kt b/services/flipcash/src/commonMain/kotlin/com/flipcash/services/controllers/ChatController.kt similarity index 100% rename from services/flipcash/src/main/kotlin/com/flipcash/services/controllers/ChatController.kt rename to services/flipcash/src/commonMain/kotlin/com/flipcash/services/controllers/ChatController.kt diff --git a/services/flipcash/src/main/kotlin/com/flipcash/services/controllers/ChatMessagingController.kt b/services/flipcash/src/commonMain/kotlin/com/flipcash/services/controllers/ChatMessagingController.kt similarity index 100% rename from services/flipcash/src/main/kotlin/com/flipcash/services/controllers/ChatMessagingController.kt rename to services/flipcash/src/commonMain/kotlin/com/flipcash/services/controllers/ChatMessagingController.kt diff --git a/services/flipcash/src/main/kotlin/com/flipcash/services/controllers/CommunityController.kt b/services/flipcash/src/commonMain/kotlin/com/flipcash/services/controllers/CommunityController.kt similarity index 100% rename from services/flipcash/src/main/kotlin/com/flipcash/services/controllers/CommunityController.kt rename to services/flipcash/src/commonMain/kotlin/com/flipcash/services/controllers/CommunityController.kt diff --git a/services/flipcash/src/main/kotlin/com/flipcash/services/controllers/ContactListController.kt b/services/flipcash/src/commonMain/kotlin/com/flipcash/services/controllers/ContactListController.kt similarity index 100% rename from services/flipcash/src/main/kotlin/com/flipcash/services/controllers/ContactListController.kt rename to services/flipcash/src/commonMain/kotlin/com/flipcash/services/controllers/ContactListController.kt diff --git a/services/flipcash/src/main/kotlin/com/flipcash/services/controllers/ContactVerificationController.kt b/services/flipcash/src/commonMain/kotlin/com/flipcash/services/controllers/ContactVerificationController.kt similarity index 100% rename from services/flipcash/src/main/kotlin/com/flipcash/services/controllers/ContactVerificationController.kt rename to services/flipcash/src/commonMain/kotlin/com/flipcash/services/controllers/ContactVerificationController.kt diff --git a/services/flipcash/src/main/kotlin/com/flipcash/services/controllers/EventStreamingController.kt b/services/flipcash/src/commonMain/kotlin/com/flipcash/services/controllers/EventStreamingController.kt similarity index 100% rename from services/flipcash/src/main/kotlin/com/flipcash/services/controllers/EventStreamingController.kt rename to services/flipcash/src/commonMain/kotlin/com/flipcash/services/controllers/EventStreamingController.kt diff --git a/services/flipcash/src/main/kotlin/com/flipcash/services/controllers/PollController.kt b/services/flipcash/src/commonMain/kotlin/com/flipcash/services/controllers/PollController.kt similarity index 100% rename from services/flipcash/src/main/kotlin/com/flipcash/services/controllers/PollController.kt rename to services/flipcash/src/commonMain/kotlin/com/flipcash/services/controllers/PollController.kt diff --git a/services/flipcash/src/main/kotlin/com/flipcash/services/controllers/ProfileController.kt b/services/flipcash/src/commonMain/kotlin/com/flipcash/services/controllers/ProfileController.kt similarity index 100% rename from services/flipcash/src/main/kotlin/com/flipcash/services/controllers/ProfileController.kt rename to services/flipcash/src/commonMain/kotlin/com/flipcash/services/controllers/ProfileController.kt diff --git a/services/flipcash/src/main/kotlin/com/flipcash/services/controllers/PurchaseController.kt b/services/flipcash/src/commonMain/kotlin/com/flipcash/services/controllers/PurchaseController.kt similarity index 100% rename from services/flipcash/src/main/kotlin/com/flipcash/services/controllers/PurchaseController.kt rename to services/flipcash/src/commonMain/kotlin/com/flipcash/services/controllers/PurchaseController.kt diff --git a/services/flipcash/src/main/kotlin/com/flipcash/services/controllers/ReportingController.kt b/services/flipcash/src/commonMain/kotlin/com/flipcash/services/controllers/ReportingController.kt similarity index 100% rename from services/flipcash/src/main/kotlin/com/flipcash/services/controllers/ReportingController.kt rename to services/flipcash/src/commonMain/kotlin/com/flipcash/services/controllers/ReportingController.kt diff --git a/services/flipcash/src/main/kotlin/com/flipcash/services/controllers/ResolverController.kt b/services/flipcash/src/commonMain/kotlin/com/flipcash/services/controllers/ResolverController.kt similarity index 100% rename from services/flipcash/src/main/kotlin/com/flipcash/services/controllers/ResolverController.kt rename to services/flipcash/src/commonMain/kotlin/com/flipcash/services/controllers/ResolverController.kt diff --git a/services/flipcash/src/main/kotlin/com/flipcash/services/controllers/SettingsController.kt b/services/flipcash/src/commonMain/kotlin/com/flipcash/services/controllers/SettingsController.kt similarity index 100% rename from services/flipcash/src/main/kotlin/com/flipcash/services/controllers/SettingsController.kt rename to services/flipcash/src/commonMain/kotlin/com/flipcash/services/controllers/SettingsController.kt diff --git a/services/flipcash/src/main/kotlin/com/flipcash/services/controllers/ThirdPartyController.kt b/services/flipcash/src/commonMain/kotlin/com/flipcash/services/controllers/ThirdPartyController.kt similarity index 100% rename from services/flipcash/src/main/kotlin/com/flipcash/services/controllers/ThirdPartyController.kt rename to services/flipcash/src/commonMain/kotlin/com/flipcash/services/controllers/ThirdPartyController.kt diff --git a/services/flipcash/src/main/kotlin/com/flipcash/services/extensions/KeyPair.kt b/services/flipcash/src/commonMain/kotlin/com/flipcash/services/extensions/KeyPair.kt similarity index 69% rename from services/flipcash/src/main/kotlin/com/flipcash/services/extensions/KeyPair.kt rename to services/flipcash/src/commonMain/kotlin/com/flipcash/services/extensions/KeyPair.kt index 446d1e9c70..8b139b66b8 100644 --- a/services/flipcash/src/main/kotlin/com/flipcash/services/extensions/KeyPair.kt +++ b/services/flipcash/src/commonMain/kotlin/com/flipcash/services/extensions/KeyPair.kt @@ -1,13 +1,10 @@ package com.flipcash.services.extensions -import android.util.Base64 import com.flipcash.services.internal.extensions.toPublicKey import com.getcode.crypt.Sha256Hash import com.getcode.ed25519kmp.Ed25519 -import com.getcode.ed25519kmp.Ed25519.KeyPair import com.getcode.opencode.model.core.ID import com.getcode.solana.keys.PublicKey -import com.getcode.solana.keys.Seed32 import java.io.ByteArrayOutputStream fun derivePoolBetId(poolId: ID, userId: ID): PublicKey { @@ -15,6 +12,6 @@ fun derivePoolBetId(poolId: ID, userId: ID): PublicKey { buffer.write(poolId.toByteArray()) buffer.write(userId.toByteArray()) val hash = Sha256Hash.hash(buffer.toByteArray()) - val seed = Base64.encodeToString(hash, Base64.DEFAULT) - return Ed25519.createKeyPair(seed).publicKeyBytes.toPublicKey() + // Same key as the former Base64.DEFAULT-encoded seed string. + return Ed25519.createKeyPair(hash).publicKeyBytes.toPublicKey() } \ No newline at end of file diff --git a/services/flipcash/src/main/kotlin/com/flipcash/services/inject/ChatCryptoModule.kt b/services/flipcash/src/commonMain/kotlin/com/flipcash/services/inject/ChatCryptoModule.kt similarity index 100% rename from services/flipcash/src/main/kotlin/com/flipcash/services/inject/ChatCryptoModule.kt rename to services/flipcash/src/commonMain/kotlin/com/flipcash/services/inject/ChatCryptoModule.kt diff --git a/services/flipcash/src/main/kotlin/com/flipcash/services/internal/annotations/FlipcashManagedChannel.kt b/services/flipcash/src/commonMain/kotlin/com/flipcash/services/internal/annotations/FlipcashManagedChannel.kt similarity index 100% rename from services/flipcash/src/main/kotlin/com/flipcash/services/internal/annotations/FlipcashManagedChannel.kt rename to services/flipcash/src/commonMain/kotlin/com/flipcash/services/internal/annotations/FlipcashManagedChannel.kt diff --git a/services/flipcash/src/main/kotlin/com/flipcash/services/internal/annotations/FlipcashProtocol.kt b/services/flipcash/src/commonMain/kotlin/com/flipcash/services/internal/annotations/FlipcashProtocol.kt similarity index 100% rename from services/flipcash/src/main/kotlin/com/flipcash/services/internal/annotations/FlipcashProtocol.kt rename to services/flipcash/src/commonMain/kotlin/com/flipcash/services/internal/annotations/FlipcashProtocol.kt diff --git a/services/flipcash/src/main/kotlin/com/flipcash/services/internal/domain/ActivityFeedMessageMapper.kt b/services/flipcash/src/commonMain/kotlin/com/flipcash/services/internal/domain/ActivityFeedMessageMapper.kt similarity index 100% rename from services/flipcash/src/main/kotlin/com/flipcash/services/internal/domain/ActivityFeedMessageMapper.kt rename to services/flipcash/src/commonMain/kotlin/com/flipcash/services/internal/domain/ActivityFeedMessageMapper.kt diff --git a/services/flipcash/src/main/kotlin/com/flipcash/services/internal/domain/BlockedUserMapper.kt b/services/flipcash/src/commonMain/kotlin/com/flipcash/services/internal/domain/BlockedUserMapper.kt similarity index 100% rename from services/flipcash/src/main/kotlin/com/flipcash/services/internal/domain/BlockedUserMapper.kt rename to services/flipcash/src/commonMain/kotlin/com/flipcash/services/internal/domain/BlockedUserMapper.kt diff --git a/services/flipcash/src/main/kotlin/com/flipcash/services/internal/domain/ChatMetadataMapper.kt b/services/flipcash/src/commonMain/kotlin/com/flipcash/services/internal/domain/ChatMetadataMapper.kt similarity index 100% rename from services/flipcash/src/main/kotlin/com/flipcash/services/internal/domain/ChatMetadataMapper.kt rename to services/flipcash/src/commonMain/kotlin/com/flipcash/services/internal/domain/ChatMetadataMapper.kt diff --git a/services/flipcash/src/main/kotlin/com/flipcash/services/internal/domain/ContactMapper.kt b/services/flipcash/src/commonMain/kotlin/com/flipcash/services/internal/domain/ContactMapper.kt similarity index 100% rename from services/flipcash/src/main/kotlin/com/flipcash/services/internal/domain/ContactMapper.kt rename to services/flipcash/src/commonMain/kotlin/com/flipcash/services/internal/domain/ContactMapper.kt diff --git a/services/flipcash/src/main/kotlin/com/flipcash/services/internal/domain/ImageModerationResponseMapper.kt b/services/flipcash/src/commonMain/kotlin/com/flipcash/services/internal/domain/ImageModerationResponseMapper.kt similarity index 100% rename from services/flipcash/src/main/kotlin/com/flipcash/services/internal/domain/ImageModerationResponseMapper.kt rename to services/flipcash/src/commonMain/kotlin/com/flipcash/services/internal/domain/ImageModerationResponseMapper.kt diff --git a/services/flipcash/src/main/kotlin/com/flipcash/services/internal/domain/ModerationAttestationMapper.kt b/services/flipcash/src/commonMain/kotlin/com/flipcash/services/internal/domain/ModerationAttestationMapper.kt similarity index 100% rename from services/flipcash/src/main/kotlin/com/flipcash/services/internal/domain/ModerationAttestationMapper.kt rename to services/flipcash/src/commonMain/kotlin/com/flipcash/services/internal/domain/ModerationAttestationMapper.kt diff --git a/services/flipcash/src/main/kotlin/com/flipcash/services/internal/domain/SocialAccountMapper.kt b/services/flipcash/src/commonMain/kotlin/com/flipcash/services/internal/domain/SocialAccountMapper.kt similarity index 100% rename from services/flipcash/src/main/kotlin/com/flipcash/services/internal/domain/SocialAccountMapper.kt rename to services/flipcash/src/commonMain/kotlin/com/flipcash/services/internal/domain/SocialAccountMapper.kt diff --git a/services/flipcash/src/main/kotlin/com/flipcash/services/internal/domain/TextModerationResponseMapper.kt b/services/flipcash/src/commonMain/kotlin/com/flipcash/services/internal/domain/TextModerationResponseMapper.kt similarity index 100% rename from services/flipcash/src/main/kotlin/com/flipcash/services/internal/domain/TextModerationResponseMapper.kt rename to services/flipcash/src/commonMain/kotlin/com/flipcash/services/internal/domain/TextModerationResponseMapper.kt diff --git a/services/flipcash/src/main/kotlin/com/flipcash/services/internal/domain/UserFlagsMapper.kt b/services/flipcash/src/commonMain/kotlin/com/flipcash/services/internal/domain/UserFlagsMapper.kt similarity index 100% rename from services/flipcash/src/main/kotlin/com/flipcash/services/internal/domain/UserFlagsMapper.kt rename to services/flipcash/src/commonMain/kotlin/com/flipcash/services/internal/domain/UserFlagsMapper.kt diff --git a/services/flipcash/src/main/kotlin/com/flipcash/services/internal/domain/UserProfileMapper.kt b/services/flipcash/src/commonMain/kotlin/com/flipcash/services/internal/domain/UserProfileMapper.kt similarity index 100% rename from services/flipcash/src/main/kotlin/com/flipcash/services/internal/domain/UserProfileMapper.kt rename to services/flipcash/src/commonMain/kotlin/com/flipcash/services/internal/domain/UserProfileMapper.kt diff --git a/services/flipcash/src/main/kotlin/com/flipcash/services/internal/domain/mapper/Mapper.kt b/services/flipcash/src/commonMain/kotlin/com/flipcash/services/internal/domain/mapper/Mapper.kt similarity index 100% rename from services/flipcash/src/main/kotlin/com/flipcash/services/internal/domain/mapper/Mapper.kt rename to services/flipcash/src/commonMain/kotlin/com/flipcash/services/internal/domain/mapper/Mapper.kt diff --git a/services/flipcash/src/main/kotlin/com/flipcash/services/internal/extensions/ByteArray.kt b/services/flipcash/src/commonMain/kotlin/com/flipcash/services/internal/extensions/ByteArray.kt similarity index 100% rename from services/flipcash/src/main/kotlin/com/flipcash/services/internal/extensions/ByteArray.kt rename to services/flipcash/src/commonMain/kotlin/com/flipcash/services/internal/extensions/ByteArray.kt diff --git a/services/flipcash/src/main/kotlin/com/flipcash/services/internal/extensions/Instant.kt b/services/flipcash/src/commonMain/kotlin/com/flipcash/services/internal/extensions/Instant.kt similarity index 100% rename from services/flipcash/src/main/kotlin/com/flipcash/services/internal/extensions/Instant.kt rename to services/flipcash/src/commonMain/kotlin/com/flipcash/services/internal/extensions/Instant.kt diff --git a/services/flipcash/src/main/kotlin/com/flipcash/services/internal/extensions/JpegMetadata.kt b/services/flipcash/src/commonMain/kotlin/com/flipcash/services/internal/extensions/JpegMetadata.kt similarity index 100% rename from services/flipcash/src/main/kotlin/com/flipcash/services/internal/extensions/JpegMetadata.kt rename to services/flipcash/src/commonMain/kotlin/com/flipcash/services/internal/extensions/JpegMetadata.kt diff --git a/services/flipcash/src/main/kotlin/com/flipcash/services/internal/extensions/KeyPair.kt b/services/flipcash/src/commonMain/kotlin/com/flipcash/services/internal/extensions/KeyPair.kt similarity index 100% rename from services/flipcash/src/main/kotlin/com/flipcash/services/internal/extensions/KeyPair.kt rename to services/flipcash/src/commonMain/kotlin/com/flipcash/services/internal/extensions/KeyPair.kt diff --git a/services/flipcash/src/main/kotlin/com/flipcash/services/internal/extensions/PublicKey.kt b/services/flipcash/src/commonMain/kotlin/com/flipcash/services/internal/extensions/PublicKey.kt similarity index 100% rename from services/flipcash/src/main/kotlin/com/flipcash/services/internal/extensions/PublicKey.kt rename to services/flipcash/src/commonMain/kotlin/com/flipcash/services/internal/extensions/PublicKey.kt diff --git a/services/flipcash/src/main/kotlin/com/flipcash/services/internal/model/billing/IapMetadata.kt b/services/flipcash/src/commonMain/kotlin/com/flipcash/services/internal/model/billing/IapMetadata.kt similarity index 100% rename from services/flipcash/src/main/kotlin/com/flipcash/services/internal/model/billing/IapMetadata.kt rename to services/flipcash/src/commonMain/kotlin/com/flipcash/services/internal/model/billing/IapMetadata.kt diff --git a/services/flipcash/src/main/kotlin/com/flipcash/services/internal/model/billing/Receipt.kt b/services/flipcash/src/commonMain/kotlin/com/flipcash/services/internal/model/billing/Receipt.kt similarity index 100% rename from services/flipcash/src/main/kotlin/com/flipcash/services/internal/model/billing/Receipt.kt rename to services/flipcash/src/commonMain/kotlin/com/flipcash/services/internal/model/billing/Receipt.kt diff --git a/services/flipcash/src/main/kotlin/com/flipcash/services/internal/model/moderation/ModerationRequest.kt b/services/flipcash/src/commonMain/kotlin/com/flipcash/services/internal/model/moderation/ModerationRequest.kt similarity index 100% rename from services/flipcash/src/main/kotlin/com/flipcash/services/internal/model/moderation/ModerationRequest.kt rename to services/flipcash/src/commonMain/kotlin/com/flipcash/services/internal/model/moderation/ModerationRequest.kt diff --git a/services/flipcash/src/main/kotlin/com/flipcash/services/internal/model/thirdparty/OnRampProvider.kt b/services/flipcash/src/commonMain/kotlin/com/flipcash/services/internal/model/thirdparty/OnRampProvider.kt similarity index 100% rename from services/flipcash/src/main/kotlin/com/flipcash/services/internal/model/thirdparty/OnRampProvider.kt rename to services/flipcash/src/commonMain/kotlin/com/flipcash/services/internal/model/thirdparty/OnRampProvider.kt diff --git a/services/flipcash/src/main/kotlin/com/flipcash/services/internal/model/thirdparty/UsdcLiquidtyPool.kt b/services/flipcash/src/commonMain/kotlin/com/flipcash/services/internal/model/thirdparty/UsdcLiquidtyPool.kt similarity index 100% rename from services/flipcash/src/main/kotlin/com/flipcash/services/internal/model/thirdparty/UsdcLiquidtyPool.kt rename to services/flipcash/src/commonMain/kotlin/com/flipcash/services/internal/model/thirdparty/UsdcLiquidtyPool.kt diff --git a/services/flipcash/src/main/kotlin/com/flipcash/services/internal/network/HttpBlobUploader.kt b/services/flipcash/src/commonMain/kotlin/com/flipcash/services/internal/network/HttpBlobUploader.kt similarity index 100% rename from services/flipcash/src/main/kotlin/com/flipcash/services/internal/network/HttpBlobUploader.kt rename to services/flipcash/src/commonMain/kotlin/com/flipcash/services/internal/network/HttpBlobUploader.kt diff --git a/services/flipcash/src/main/kotlin/com/flipcash/services/internal/network/api/AccountApi.kt b/services/flipcash/src/commonMain/kotlin/com/flipcash/services/internal/network/api/AccountApi.kt similarity index 100% rename from services/flipcash/src/main/kotlin/com/flipcash/services/internal/network/api/AccountApi.kt rename to services/flipcash/src/commonMain/kotlin/com/flipcash/services/internal/network/api/AccountApi.kt diff --git a/services/flipcash/src/main/kotlin/com/flipcash/services/internal/network/api/ActivityFeedApi.kt b/services/flipcash/src/commonMain/kotlin/com/flipcash/services/internal/network/api/ActivityFeedApi.kt similarity index 100% rename from services/flipcash/src/main/kotlin/com/flipcash/services/internal/network/api/ActivityFeedApi.kt rename to services/flipcash/src/commonMain/kotlin/com/flipcash/services/internal/network/api/ActivityFeedApi.kt diff --git a/services/flipcash/src/main/kotlin/com/flipcash/services/internal/network/api/BlobStorageApi.kt b/services/flipcash/src/commonMain/kotlin/com/flipcash/services/internal/network/api/BlobStorageApi.kt similarity index 100% rename from services/flipcash/src/main/kotlin/com/flipcash/services/internal/network/api/BlobStorageApi.kt rename to services/flipcash/src/commonMain/kotlin/com/flipcash/services/internal/network/api/BlobStorageApi.kt diff --git a/services/flipcash/src/main/kotlin/com/flipcash/services/internal/network/api/BlocklistApi.kt b/services/flipcash/src/commonMain/kotlin/com/flipcash/services/internal/network/api/BlocklistApi.kt similarity index 100% rename from services/flipcash/src/main/kotlin/com/flipcash/services/internal/network/api/BlocklistApi.kt rename to services/flipcash/src/commonMain/kotlin/com/flipcash/services/internal/network/api/BlocklistApi.kt diff --git a/services/flipcash/src/main/kotlin/com/flipcash/services/internal/network/api/ChatApi.kt b/services/flipcash/src/commonMain/kotlin/com/flipcash/services/internal/network/api/ChatApi.kt similarity index 100% rename from services/flipcash/src/main/kotlin/com/flipcash/services/internal/network/api/ChatApi.kt rename to services/flipcash/src/commonMain/kotlin/com/flipcash/services/internal/network/api/ChatApi.kt diff --git a/services/flipcash/src/main/kotlin/com/flipcash/services/internal/network/api/ChatMessagingApi.kt b/services/flipcash/src/commonMain/kotlin/com/flipcash/services/internal/network/api/ChatMessagingApi.kt similarity index 100% rename from services/flipcash/src/main/kotlin/com/flipcash/services/internal/network/api/ChatMessagingApi.kt rename to services/flipcash/src/commonMain/kotlin/com/flipcash/services/internal/network/api/ChatMessagingApi.kt diff --git a/services/flipcash/src/main/kotlin/com/flipcash/services/internal/network/api/CommunityApi.kt b/services/flipcash/src/commonMain/kotlin/com/flipcash/services/internal/network/api/CommunityApi.kt similarity index 100% rename from services/flipcash/src/main/kotlin/com/flipcash/services/internal/network/api/CommunityApi.kt rename to services/flipcash/src/commonMain/kotlin/com/flipcash/services/internal/network/api/CommunityApi.kt diff --git a/services/flipcash/src/main/kotlin/com/flipcash/services/internal/network/api/ContactListApi.kt b/services/flipcash/src/commonMain/kotlin/com/flipcash/services/internal/network/api/ContactListApi.kt similarity index 100% rename from services/flipcash/src/main/kotlin/com/flipcash/services/internal/network/api/ContactListApi.kt rename to services/flipcash/src/commonMain/kotlin/com/flipcash/services/internal/network/api/ContactListApi.kt diff --git a/services/flipcash/src/main/kotlin/com/flipcash/services/internal/network/api/EmailVerificationApi.kt b/services/flipcash/src/commonMain/kotlin/com/flipcash/services/internal/network/api/EmailVerificationApi.kt similarity index 100% rename from services/flipcash/src/main/kotlin/com/flipcash/services/internal/network/api/EmailVerificationApi.kt rename to services/flipcash/src/commonMain/kotlin/com/flipcash/services/internal/network/api/EmailVerificationApi.kt diff --git a/services/flipcash/src/main/kotlin/com/flipcash/services/internal/network/api/EventStreamingApi.kt b/services/flipcash/src/commonMain/kotlin/com/flipcash/services/internal/network/api/EventStreamingApi.kt similarity index 100% rename from services/flipcash/src/main/kotlin/com/flipcash/services/internal/network/api/EventStreamingApi.kt rename to services/flipcash/src/commonMain/kotlin/com/flipcash/services/internal/network/api/EventStreamingApi.kt diff --git a/services/flipcash/src/main/kotlin/com/flipcash/services/internal/network/api/ModerationApi.kt b/services/flipcash/src/commonMain/kotlin/com/flipcash/services/internal/network/api/ModerationApi.kt similarity index 100% rename from services/flipcash/src/main/kotlin/com/flipcash/services/internal/network/api/ModerationApi.kt rename to services/flipcash/src/commonMain/kotlin/com/flipcash/services/internal/network/api/ModerationApi.kt diff --git a/services/flipcash/src/main/kotlin/com/flipcash/services/internal/network/api/PhoneVerificationApi.kt b/services/flipcash/src/commonMain/kotlin/com/flipcash/services/internal/network/api/PhoneVerificationApi.kt similarity index 100% rename from services/flipcash/src/main/kotlin/com/flipcash/services/internal/network/api/PhoneVerificationApi.kt rename to services/flipcash/src/commonMain/kotlin/com/flipcash/services/internal/network/api/PhoneVerificationApi.kt diff --git a/services/flipcash/src/main/kotlin/com/flipcash/services/internal/network/api/PollApi.kt b/services/flipcash/src/commonMain/kotlin/com/flipcash/services/internal/network/api/PollApi.kt similarity index 100% rename from services/flipcash/src/main/kotlin/com/flipcash/services/internal/network/api/PollApi.kt rename to services/flipcash/src/commonMain/kotlin/com/flipcash/services/internal/network/api/PollApi.kt diff --git a/services/flipcash/src/main/kotlin/com/flipcash/services/internal/network/api/ProfileApi.kt b/services/flipcash/src/commonMain/kotlin/com/flipcash/services/internal/network/api/ProfileApi.kt similarity index 100% rename from services/flipcash/src/main/kotlin/com/flipcash/services/internal/network/api/ProfileApi.kt rename to services/flipcash/src/commonMain/kotlin/com/flipcash/services/internal/network/api/ProfileApi.kt diff --git a/services/flipcash/src/main/kotlin/com/flipcash/services/internal/network/api/PurchaseApi.kt b/services/flipcash/src/commonMain/kotlin/com/flipcash/services/internal/network/api/PurchaseApi.kt similarity index 100% rename from services/flipcash/src/main/kotlin/com/flipcash/services/internal/network/api/PurchaseApi.kt rename to services/flipcash/src/commonMain/kotlin/com/flipcash/services/internal/network/api/PurchaseApi.kt diff --git a/services/flipcash/src/main/kotlin/com/flipcash/services/internal/network/api/PushApi.kt b/services/flipcash/src/commonMain/kotlin/com/flipcash/services/internal/network/api/PushApi.kt similarity index 100% rename from services/flipcash/src/main/kotlin/com/flipcash/services/internal/network/api/PushApi.kt rename to services/flipcash/src/commonMain/kotlin/com/flipcash/services/internal/network/api/PushApi.kt diff --git a/services/flipcash/src/main/kotlin/com/flipcash/services/internal/network/api/ReportingApi.kt b/services/flipcash/src/commonMain/kotlin/com/flipcash/services/internal/network/api/ReportingApi.kt similarity index 100% rename from services/flipcash/src/main/kotlin/com/flipcash/services/internal/network/api/ReportingApi.kt rename to services/flipcash/src/commonMain/kotlin/com/flipcash/services/internal/network/api/ReportingApi.kt diff --git a/services/flipcash/src/main/kotlin/com/flipcash/services/internal/network/api/ResolverApi.kt b/services/flipcash/src/commonMain/kotlin/com/flipcash/services/internal/network/api/ResolverApi.kt similarity index 100% rename from services/flipcash/src/main/kotlin/com/flipcash/services/internal/network/api/ResolverApi.kt rename to services/flipcash/src/commonMain/kotlin/com/flipcash/services/internal/network/api/ResolverApi.kt diff --git a/services/flipcash/src/main/kotlin/com/flipcash/services/internal/network/api/SettingsApi.kt b/services/flipcash/src/commonMain/kotlin/com/flipcash/services/internal/network/api/SettingsApi.kt similarity index 100% rename from services/flipcash/src/main/kotlin/com/flipcash/services/internal/network/api/SettingsApi.kt rename to services/flipcash/src/commonMain/kotlin/com/flipcash/services/internal/network/api/SettingsApi.kt diff --git a/services/flipcash/src/main/kotlin/com/flipcash/services/internal/network/api/ThirdPartyApi.kt b/services/flipcash/src/commonMain/kotlin/com/flipcash/services/internal/network/api/ThirdPartyApi.kt similarity index 100% rename from services/flipcash/src/main/kotlin/com/flipcash/services/internal/network/api/ThirdPartyApi.kt rename to services/flipcash/src/commonMain/kotlin/com/flipcash/services/internal/network/api/ThirdPartyApi.kt diff --git a/services/flipcash/src/main/kotlin/com/flipcash/services/internal/network/extensions/AuthenticateMessage.kt b/services/flipcash/src/commonMain/kotlin/com/flipcash/services/internal/network/extensions/AuthenticateMessage.kt similarity index 100% rename from services/flipcash/src/main/kotlin/com/flipcash/services/internal/network/extensions/AuthenticateMessage.kt rename to services/flipcash/src/commonMain/kotlin/com/flipcash/services/internal/network/extensions/AuthenticateMessage.kt diff --git a/services/flipcash/src/main/kotlin/com/flipcash/services/internal/network/extensions/LocalToProtobuf.kt b/services/flipcash/src/commonMain/kotlin/com/flipcash/services/internal/network/extensions/LocalToProtobuf.kt similarity index 100% rename from services/flipcash/src/main/kotlin/com/flipcash/services/internal/network/extensions/LocalToProtobuf.kt rename to services/flipcash/src/commonMain/kotlin/com/flipcash/services/internal/network/extensions/LocalToProtobuf.kt diff --git a/services/flipcash/src/main/kotlin/com/flipcash/services/internal/network/extensions/ProtobufToLocal.kt b/services/flipcash/src/commonMain/kotlin/com/flipcash/services/internal/network/extensions/ProtobufToLocal.kt similarity index 100% rename from services/flipcash/src/main/kotlin/com/flipcash/services/internal/network/extensions/ProtobufToLocal.kt rename to services/flipcash/src/commonMain/kotlin/com/flipcash/services/internal/network/extensions/ProtobufToLocal.kt diff --git a/services/flipcash/src/main/kotlin/com/flipcash/services/internal/network/extensions/SignMessage.kt b/services/flipcash/src/commonMain/kotlin/com/flipcash/services/internal/network/extensions/SignMessage.kt similarity index 100% rename from services/flipcash/src/main/kotlin/com/flipcash/services/internal/network/extensions/SignMessage.kt rename to services/flipcash/src/commonMain/kotlin/com/flipcash/services/internal/network/extensions/SignMessage.kt diff --git a/services/flipcash/src/main/kotlin/com/flipcash/services/internal/network/services/AccountService.kt b/services/flipcash/src/commonMain/kotlin/com/flipcash/services/internal/network/services/AccountService.kt similarity index 100% rename from services/flipcash/src/main/kotlin/com/flipcash/services/internal/network/services/AccountService.kt rename to services/flipcash/src/commonMain/kotlin/com/flipcash/services/internal/network/services/AccountService.kt diff --git a/services/flipcash/src/main/kotlin/com/flipcash/services/internal/network/services/ActivityFeedService.kt b/services/flipcash/src/commonMain/kotlin/com/flipcash/services/internal/network/services/ActivityFeedService.kt similarity index 100% rename from services/flipcash/src/main/kotlin/com/flipcash/services/internal/network/services/ActivityFeedService.kt rename to services/flipcash/src/commonMain/kotlin/com/flipcash/services/internal/network/services/ActivityFeedService.kt diff --git a/services/flipcash/src/main/kotlin/com/flipcash/services/internal/network/services/BlobStorageService.kt b/services/flipcash/src/commonMain/kotlin/com/flipcash/services/internal/network/services/BlobStorageService.kt similarity index 100% rename from services/flipcash/src/main/kotlin/com/flipcash/services/internal/network/services/BlobStorageService.kt rename to services/flipcash/src/commonMain/kotlin/com/flipcash/services/internal/network/services/BlobStorageService.kt diff --git a/services/flipcash/src/main/kotlin/com/flipcash/services/internal/network/services/BlocklistService.kt b/services/flipcash/src/commonMain/kotlin/com/flipcash/services/internal/network/services/BlocklistService.kt similarity index 100% rename from services/flipcash/src/main/kotlin/com/flipcash/services/internal/network/services/BlocklistService.kt rename to services/flipcash/src/commonMain/kotlin/com/flipcash/services/internal/network/services/BlocklistService.kt diff --git a/services/flipcash/src/main/kotlin/com/flipcash/services/internal/network/services/ChatMessagingService.kt b/services/flipcash/src/commonMain/kotlin/com/flipcash/services/internal/network/services/ChatMessagingService.kt similarity index 100% rename from services/flipcash/src/main/kotlin/com/flipcash/services/internal/network/services/ChatMessagingService.kt rename to services/flipcash/src/commonMain/kotlin/com/flipcash/services/internal/network/services/ChatMessagingService.kt diff --git a/services/flipcash/src/main/kotlin/com/flipcash/services/internal/network/services/ChatService.kt b/services/flipcash/src/commonMain/kotlin/com/flipcash/services/internal/network/services/ChatService.kt similarity index 100% rename from services/flipcash/src/main/kotlin/com/flipcash/services/internal/network/services/ChatService.kt rename to services/flipcash/src/commonMain/kotlin/com/flipcash/services/internal/network/services/ChatService.kt diff --git a/services/flipcash/src/main/kotlin/com/flipcash/services/internal/network/services/CommunityService.kt b/services/flipcash/src/commonMain/kotlin/com/flipcash/services/internal/network/services/CommunityService.kt similarity index 100% rename from services/flipcash/src/main/kotlin/com/flipcash/services/internal/network/services/CommunityService.kt rename to services/flipcash/src/commonMain/kotlin/com/flipcash/services/internal/network/services/CommunityService.kt diff --git a/services/flipcash/src/main/kotlin/com/flipcash/services/internal/network/services/ContactListService.kt b/services/flipcash/src/commonMain/kotlin/com/flipcash/services/internal/network/services/ContactListService.kt similarity index 100% rename from services/flipcash/src/main/kotlin/com/flipcash/services/internal/network/services/ContactListService.kt rename to services/flipcash/src/commonMain/kotlin/com/flipcash/services/internal/network/services/ContactListService.kt diff --git a/services/flipcash/src/main/kotlin/com/flipcash/services/internal/network/services/EmailVerificationService.kt b/services/flipcash/src/commonMain/kotlin/com/flipcash/services/internal/network/services/EmailVerificationService.kt similarity index 100% rename from services/flipcash/src/main/kotlin/com/flipcash/services/internal/network/services/EmailVerificationService.kt rename to services/flipcash/src/commonMain/kotlin/com/flipcash/services/internal/network/services/EmailVerificationService.kt diff --git a/services/flipcash/src/main/kotlin/com/flipcash/services/internal/network/services/EventStreamingService.kt b/services/flipcash/src/commonMain/kotlin/com/flipcash/services/internal/network/services/EventStreamingService.kt similarity index 100% rename from services/flipcash/src/main/kotlin/com/flipcash/services/internal/network/services/EventStreamingService.kt rename to services/flipcash/src/commonMain/kotlin/com/flipcash/services/internal/network/services/EventStreamingService.kt diff --git a/services/flipcash/src/main/kotlin/com/flipcash/services/internal/network/services/ModerationService.kt b/services/flipcash/src/commonMain/kotlin/com/flipcash/services/internal/network/services/ModerationService.kt similarity index 100% rename from services/flipcash/src/main/kotlin/com/flipcash/services/internal/network/services/ModerationService.kt rename to services/flipcash/src/commonMain/kotlin/com/flipcash/services/internal/network/services/ModerationService.kt diff --git a/services/flipcash/src/main/kotlin/com/flipcash/services/internal/network/services/PhoneVerificationService.kt b/services/flipcash/src/commonMain/kotlin/com/flipcash/services/internal/network/services/PhoneVerificationService.kt similarity index 100% rename from services/flipcash/src/main/kotlin/com/flipcash/services/internal/network/services/PhoneVerificationService.kt rename to services/flipcash/src/commonMain/kotlin/com/flipcash/services/internal/network/services/PhoneVerificationService.kt diff --git a/services/flipcash/src/main/kotlin/com/flipcash/services/internal/network/services/PollService.kt b/services/flipcash/src/commonMain/kotlin/com/flipcash/services/internal/network/services/PollService.kt similarity index 100% rename from services/flipcash/src/main/kotlin/com/flipcash/services/internal/network/services/PollService.kt rename to services/flipcash/src/commonMain/kotlin/com/flipcash/services/internal/network/services/PollService.kt diff --git a/services/flipcash/src/main/kotlin/com/flipcash/services/internal/network/services/ProfileService.kt b/services/flipcash/src/commonMain/kotlin/com/flipcash/services/internal/network/services/ProfileService.kt similarity index 100% rename from services/flipcash/src/main/kotlin/com/flipcash/services/internal/network/services/ProfileService.kt rename to services/flipcash/src/commonMain/kotlin/com/flipcash/services/internal/network/services/ProfileService.kt diff --git a/services/flipcash/src/main/kotlin/com/flipcash/services/internal/network/services/PurchaseService.kt b/services/flipcash/src/commonMain/kotlin/com/flipcash/services/internal/network/services/PurchaseService.kt similarity index 100% rename from services/flipcash/src/main/kotlin/com/flipcash/services/internal/network/services/PurchaseService.kt rename to services/flipcash/src/commonMain/kotlin/com/flipcash/services/internal/network/services/PurchaseService.kt diff --git a/services/flipcash/src/main/kotlin/com/flipcash/services/internal/network/services/PushService.kt b/services/flipcash/src/commonMain/kotlin/com/flipcash/services/internal/network/services/PushService.kt similarity index 100% rename from services/flipcash/src/main/kotlin/com/flipcash/services/internal/network/services/PushService.kt rename to services/flipcash/src/commonMain/kotlin/com/flipcash/services/internal/network/services/PushService.kt diff --git a/services/flipcash/src/main/kotlin/com/flipcash/services/internal/network/services/ReportingService.kt b/services/flipcash/src/commonMain/kotlin/com/flipcash/services/internal/network/services/ReportingService.kt similarity index 100% rename from services/flipcash/src/main/kotlin/com/flipcash/services/internal/network/services/ReportingService.kt rename to services/flipcash/src/commonMain/kotlin/com/flipcash/services/internal/network/services/ReportingService.kt diff --git a/services/flipcash/src/main/kotlin/com/flipcash/services/internal/network/services/ResolverService.kt b/services/flipcash/src/commonMain/kotlin/com/flipcash/services/internal/network/services/ResolverService.kt similarity index 100% rename from services/flipcash/src/main/kotlin/com/flipcash/services/internal/network/services/ResolverService.kt rename to services/flipcash/src/commonMain/kotlin/com/flipcash/services/internal/network/services/ResolverService.kt diff --git a/services/flipcash/src/main/kotlin/com/flipcash/services/internal/network/services/SettingsService.kt b/services/flipcash/src/commonMain/kotlin/com/flipcash/services/internal/network/services/SettingsService.kt similarity index 100% rename from services/flipcash/src/main/kotlin/com/flipcash/services/internal/network/services/SettingsService.kt rename to services/flipcash/src/commonMain/kotlin/com/flipcash/services/internal/network/services/SettingsService.kt diff --git a/services/flipcash/src/main/kotlin/com/flipcash/services/internal/network/services/ThirdPartyService.kt b/services/flipcash/src/commonMain/kotlin/com/flipcash/services/internal/network/services/ThirdPartyService.kt similarity index 100% rename from services/flipcash/src/main/kotlin/com/flipcash/services/internal/network/services/ThirdPartyService.kt rename to services/flipcash/src/commonMain/kotlin/com/flipcash/services/internal/network/services/ThirdPartyService.kt diff --git a/services/flipcash/src/main/kotlin/com/flipcash/services/internal/repositories/InternalAccountRepository.kt b/services/flipcash/src/commonMain/kotlin/com/flipcash/services/internal/repositories/InternalAccountRepository.kt similarity index 100% rename from services/flipcash/src/main/kotlin/com/flipcash/services/internal/repositories/InternalAccountRepository.kt rename to services/flipcash/src/commonMain/kotlin/com/flipcash/services/internal/repositories/InternalAccountRepository.kt diff --git a/services/flipcash/src/main/kotlin/com/flipcash/services/internal/repositories/InternalActivityFeedRepository.kt b/services/flipcash/src/commonMain/kotlin/com/flipcash/services/internal/repositories/InternalActivityFeedRepository.kt similarity index 100% rename from services/flipcash/src/main/kotlin/com/flipcash/services/internal/repositories/InternalActivityFeedRepository.kt rename to services/flipcash/src/commonMain/kotlin/com/flipcash/services/internal/repositories/InternalActivityFeedRepository.kt diff --git a/services/flipcash/src/main/kotlin/com/flipcash/services/internal/repositories/InternalBlobStorageRepository.kt b/services/flipcash/src/commonMain/kotlin/com/flipcash/services/internal/repositories/InternalBlobStorageRepository.kt similarity index 100% rename from services/flipcash/src/main/kotlin/com/flipcash/services/internal/repositories/InternalBlobStorageRepository.kt rename to services/flipcash/src/commonMain/kotlin/com/flipcash/services/internal/repositories/InternalBlobStorageRepository.kt diff --git a/services/flipcash/src/main/kotlin/com/flipcash/services/internal/repositories/InternalBlocklistRepository.kt b/services/flipcash/src/commonMain/kotlin/com/flipcash/services/internal/repositories/InternalBlocklistRepository.kt similarity index 100% rename from services/flipcash/src/main/kotlin/com/flipcash/services/internal/repositories/InternalBlocklistRepository.kt rename to services/flipcash/src/commonMain/kotlin/com/flipcash/services/internal/repositories/InternalBlocklistRepository.kt diff --git a/services/flipcash/src/main/kotlin/com/flipcash/services/internal/repositories/InternalChatMessagingRepository.kt b/services/flipcash/src/commonMain/kotlin/com/flipcash/services/internal/repositories/InternalChatMessagingRepository.kt similarity index 100% rename from services/flipcash/src/main/kotlin/com/flipcash/services/internal/repositories/InternalChatMessagingRepository.kt rename to services/flipcash/src/commonMain/kotlin/com/flipcash/services/internal/repositories/InternalChatMessagingRepository.kt diff --git a/services/flipcash/src/main/kotlin/com/flipcash/services/internal/repositories/InternalChatRepository.kt b/services/flipcash/src/commonMain/kotlin/com/flipcash/services/internal/repositories/InternalChatRepository.kt similarity index 100% rename from services/flipcash/src/main/kotlin/com/flipcash/services/internal/repositories/InternalChatRepository.kt rename to services/flipcash/src/commonMain/kotlin/com/flipcash/services/internal/repositories/InternalChatRepository.kt diff --git a/services/flipcash/src/main/kotlin/com/flipcash/services/internal/repositories/InternalCommunityRepository.kt b/services/flipcash/src/commonMain/kotlin/com/flipcash/services/internal/repositories/InternalCommunityRepository.kt similarity index 100% rename from services/flipcash/src/main/kotlin/com/flipcash/services/internal/repositories/InternalCommunityRepository.kt rename to services/flipcash/src/commonMain/kotlin/com/flipcash/services/internal/repositories/InternalCommunityRepository.kt diff --git a/services/flipcash/src/main/kotlin/com/flipcash/services/internal/repositories/InternalContactListRepository.kt b/services/flipcash/src/commonMain/kotlin/com/flipcash/services/internal/repositories/InternalContactListRepository.kt similarity index 100% rename from services/flipcash/src/main/kotlin/com/flipcash/services/internal/repositories/InternalContactListRepository.kt rename to services/flipcash/src/commonMain/kotlin/com/flipcash/services/internal/repositories/InternalContactListRepository.kt diff --git a/services/flipcash/src/main/kotlin/com/flipcash/services/internal/repositories/InternalContactVerificationRepository.kt b/services/flipcash/src/commonMain/kotlin/com/flipcash/services/internal/repositories/InternalContactVerificationRepository.kt similarity index 100% rename from services/flipcash/src/main/kotlin/com/flipcash/services/internal/repositories/InternalContactVerificationRepository.kt rename to services/flipcash/src/commonMain/kotlin/com/flipcash/services/internal/repositories/InternalContactVerificationRepository.kt diff --git a/services/flipcash/src/main/kotlin/com/flipcash/services/internal/repositories/InternalEventStreamingRepository.kt b/services/flipcash/src/commonMain/kotlin/com/flipcash/services/internal/repositories/InternalEventStreamingRepository.kt similarity index 100% rename from services/flipcash/src/main/kotlin/com/flipcash/services/internal/repositories/InternalEventStreamingRepository.kt rename to services/flipcash/src/commonMain/kotlin/com/flipcash/services/internal/repositories/InternalEventStreamingRepository.kt diff --git a/services/flipcash/src/main/kotlin/com/flipcash/services/internal/repositories/InternalModerationRepository.kt b/services/flipcash/src/commonMain/kotlin/com/flipcash/services/internal/repositories/InternalModerationRepository.kt similarity index 100% rename from services/flipcash/src/main/kotlin/com/flipcash/services/internal/repositories/InternalModerationRepository.kt rename to services/flipcash/src/commonMain/kotlin/com/flipcash/services/internal/repositories/InternalModerationRepository.kt diff --git a/services/flipcash/src/main/kotlin/com/flipcash/services/internal/repositories/InternalPollRepository.kt b/services/flipcash/src/commonMain/kotlin/com/flipcash/services/internal/repositories/InternalPollRepository.kt similarity index 100% rename from services/flipcash/src/main/kotlin/com/flipcash/services/internal/repositories/InternalPollRepository.kt rename to services/flipcash/src/commonMain/kotlin/com/flipcash/services/internal/repositories/InternalPollRepository.kt diff --git a/services/flipcash/src/main/kotlin/com/flipcash/services/internal/repositories/InternalProfileRepository.kt b/services/flipcash/src/commonMain/kotlin/com/flipcash/services/internal/repositories/InternalProfileRepository.kt similarity index 100% rename from services/flipcash/src/main/kotlin/com/flipcash/services/internal/repositories/InternalProfileRepository.kt rename to services/flipcash/src/commonMain/kotlin/com/flipcash/services/internal/repositories/InternalProfileRepository.kt diff --git a/services/flipcash/src/main/kotlin/com/flipcash/services/internal/repositories/InternalPurchaseRepository.kt b/services/flipcash/src/commonMain/kotlin/com/flipcash/services/internal/repositories/InternalPurchaseRepository.kt similarity index 100% rename from services/flipcash/src/main/kotlin/com/flipcash/services/internal/repositories/InternalPurchaseRepository.kt rename to services/flipcash/src/commonMain/kotlin/com/flipcash/services/internal/repositories/InternalPurchaseRepository.kt diff --git a/services/flipcash/src/main/kotlin/com/flipcash/services/internal/repositories/InternalPushRepository.kt b/services/flipcash/src/commonMain/kotlin/com/flipcash/services/internal/repositories/InternalPushRepository.kt similarity index 100% rename from services/flipcash/src/main/kotlin/com/flipcash/services/internal/repositories/InternalPushRepository.kt rename to services/flipcash/src/commonMain/kotlin/com/flipcash/services/internal/repositories/InternalPushRepository.kt diff --git a/services/flipcash/src/main/kotlin/com/flipcash/services/internal/repositories/InternalReportingRepository.kt b/services/flipcash/src/commonMain/kotlin/com/flipcash/services/internal/repositories/InternalReportingRepository.kt similarity index 100% rename from services/flipcash/src/main/kotlin/com/flipcash/services/internal/repositories/InternalReportingRepository.kt rename to services/flipcash/src/commonMain/kotlin/com/flipcash/services/internal/repositories/InternalReportingRepository.kt diff --git a/services/flipcash/src/main/kotlin/com/flipcash/services/internal/repositories/InternalResolverRepository.kt b/services/flipcash/src/commonMain/kotlin/com/flipcash/services/internal/repositories/InternalResolverRepository.kt similarity index 100% rename from services/flipcash/src/main/kotlin/com/flipcash/services/internal/repositories/InternalResolverRepository.kt rename to services/flipcash/src/commonMain/kotlin/com/flipcash/services/internal/repositories/InternalResolverRepository.kt diff --git a/services/flipcash/src/main/kotlin/com/flipcash/services/internal/repositories/InternalSettingsRepository.kt b/services/flipcash/src/commonMain/kotlin/com/flipcash/services/internal/repositories/InternalSettingsRepository.kt similarity index 100% rename from services/flipcash/src/main/kotlin/com/flipcash/services/internal/repositories/InternalSettingsRepository.kt rename to services/flipcash/src/commonMain/kotlin/com/flipcash/services/internal/repositories/InternalSettingsRepository.kt diff --git a/services/flipcash/src/main/kotlin/com/flipcash/services/internal/repositories/InternalThirdPartyRepository.kt b/services/flipcash/src/commonMain/kotlin/com/flipcash/services/internal/repositories/InternalThirdPartyRepository.kt similarity index 100% rename from services/flipcash/src/main/kotlin/com/flipcash/services/internal/repositories/InternalThirdPartyRepository.kt rename to services/flipcash/src/commonMain/kotlin/com/flipcash/services/internal/repositories/InternalThirdPartyRepository.kt diff --git a/services/flipcash/src/main/kotlin/com/flipcash/services/modals/ModalManager.kt b/services/flipcash/src/commonMain/kotlin/com/flipcash/services/modals/ModalManager.kt similarity index 100% rename from services/flipcash/src/main/kotlin/com/flipcash/services/modals/ModalManager.kt rename to services/flipcash/src/commonMain/kotlin/com/flipcash/services/modals/ModalManager.kt diff --git a/services/flipcash/src/main/kotlin/com/flipcash/services/models/ActivityFeedNotification.kt b/services/flipcash/src/commonMain/kotlin/com/flipcash/services/models/ActivityFeedNotification.kt similarity index 100% rename from services/flipcash/src/main/kotlin/com/flipcash/services/models/ActivityFeedNotification.kt rename to services/flipcash/src/commonMain/kotlin/com/flipcash/services/models/ActivityFeedNotification.kt diff --git a/services/flipcash/src/main/kotlin/com/flipcash/services/models/ActivityFeedType.kt b/services/flipcash/src/commonMain/kotlin/com/flipcash/services/models/ActivityFeedType.kt similarity index 100% rename from services/flipcash/src/main/kotlin/com/flipcash/services/models/ActivityFeedType.kt rename to services/flipcash/src/commonMain/kotlin/com/flipcash/services/models/ActivityFeedType.kt diff --git a/services/flipcash/src/main/kotlin/com/flipcash/services/models/BlockedUser.kt b/services/flipcash/src/commonMain/kotlin/com/flipcash/services/models/BlockedUser.kt similarity index 100% rename from services/flipcash/src/main/kotlin/com/flipcash/services/models/BlockedUser.kt rename to services/flipcash/src/commonMain/kotlin/com/flipcash/services/models/BlockedUser.kt diff --git a/services/flipcash/src/main/kotlin/com/flipcash/services/models/Community.kt b/services/flipcash/src/commonMain/kotlin/com/flipcash/services/models/Community.kt similarity index 100% rename from services/flipcash/src/main/kotlin/com/flipcash/services/models/Community.kt rename to services/flipcash/src/commonMain/kotlin/com/flipcash/services/models/Community.kt diff --git a/services/flipcash/src/main/kotlin/com/flipcash/services/models/ContactMethod.kt b/services/flipcash/src/commonMain/kotlin/com/flipcash/services/models/ContactMethod.kt similarity index 100% rename from services/flipcash/src/main/kotlin/com/flipcash/services/models/ContactMethod.kt rename to services/flipcash/src/commonMain/kotlin/com/flipcash/services/models/ContactMethod.kt diff --git a/services/flipcash/src/main/kotlin/com/flipcash/services/models/DmPaymentMetadata.kt b/services/flipcash/src/commonMain/kotlin/com/flipcash/services/models/DmPaymentMetadata.kt similarity index 100% rename from services/flipcash/src/main/kotlin/com/flipcash/services/models/DmPaymentMetadata.kt rename to services/flipcash/src/commonMain/kotlin/com/flipcash/services/models/DmPaymentMetadata.kt diff --git a/services/flipcash/src/main/kotlin/com/flipcash/services/models/Errors.kt b/services/flipcash/src/commonMain/kotlin/com/flipcash/services/models/Errors.kt similarity index 100% rename from services/flipcash/src/main/kotlin/com/flipcash/services/models/Errors.kt rename to services/flipcash/src/commonMain/kotlin/com/flipcash/services/models/Errors.kt diff --git a/services/flipcash/src/main/kotlin/com/flipcash/services/models/FlipcashContactEntry.kt b/services/flipcash/src/commonMain/kotlin/com/flipcash/services/models/FlipcashContactEntry.kt similarity index 100% rename from services/flipcash/src/main/kotlin/com/flipcash/services/models/FlipcashContactEntry.kt rename to services/flipcash/src/commonMain/kotlin/com/flipcash/services/models/FlipcashContactEntry.kt diff --git a/services/flipcash/src/main/kotlin/com/flipcash/services/models/Handle.kt b/services/flipcash/src/commonMain/kotlin/com/flipcash/services/models/Handle.kt similarity index 100% rename from services/flipcash/src/main/kotlin/com/flipcash/services/models/Handle.kt rename to services/flipcash/src/commonMain/kotlin/com/flipcash/services/models/Handle.kt diff --git a/services/flipcash/src/main/kotlin/com/flipcash/services/models/Jwt.kt b/services/flipcash/src/commonMain/kotlin/com/flipcash/services/models/Jwt.kt similarity index 100% rename from services/flipcash/src/main/kotlin/com/flipcash/services/models/Jwt.kt rename to services/flipcash/src/commonMain/kotlin/com/flipcash/services/models/Jwt.kt diff --git a/services/flipcash/src/main/kotlin/com/flipcash/services/models/ModerationResult.kt b/services/flipcash/src/commonMain/kotlin/com/flipcash/services/models/ModerationResult.kt similarity index 100% rename from services/flipcash/src/main/kotlin/com/flipcash/services/models/ModerationResult.kt rename to services/flipcash/src/commonMain/kotlin/com/flipcash/services/models/ModerationResult.kt diff --git a/services/flipcash/src/main/kotlin/com/flipcash/services/models/NotificationPayload.kt b/services/flipcash/src/commonMain/kotlin/com/flipcash/services/models/NotificationPayload.kt similarity index 100% rename from services/flipcash/src/main/kotlin/com/flipcash/services/models/NotificationPayload.kt rename to services/flipcash/src/commonMain/kotlin/com/flipcash/services/models/NotificationPayload.kt diff --git a/services/flipcash/src/main/kotlin/com/flipcash/services/models/ProfileIdentifier.kt b/services/flipcash/src/commonMain/kotlin/com/flipcash/services/models/ProfileIdentifier.kt similarity index 100% rename from services/flipcash/src/main/kotlin/com/flipcash/services/models/ProfileIdentifier.kt rename to services/flipcash/src/commonMain/kotlin/com/flipcash/services/models/ProfileIdentifier.kt diff --git a/services/flipcash/src/main/kotlin/com/flipcash/services/models/QueryOptions.kt b/services/flipcash/src/commonMain/kotlin/com/flipcash/services/models/QueryOptions.kt similarity index 100% rename from services/flipcash/src/main/kotlin/com/flipcash/services/models/QueryOptions.kt rename to services/flipcash/src/commonMain/kotlin/com/flipcash/services/models/QueryOptions.kt diff --git a/services/flipcash/src/main/kotlin/com/flipcash/services/models/ReactionBoostMetadata.kt b/services/flipcash/src/commonMain/kotlin/com/flipcash/services/models/ReactionBoostMetadata.kt similarity index 100% rename from services/flipcash/src/main/kotlin/com/flipcash/services/models/ReactionBoostMetadata.kt rename to services/flipcash/src/commonMain/kotlin/com/flipcash/services/models/ReactionBoostMetadata.kt diff --git a/services/flipcash/src/main/kotlin/com/flipcash/services/models/ReportTarget.kt b/services/flipcash/src/commonMain/kotlin/com/flipcash/services/models/ReportTarget.kt similarity index 100% rename from services/flipcash/src/main/kotlin/com/flipcash/services/models/ReportTarget.kt rename to services/flipcash/src/commonMain/kotlin/com/flipcash/services/models/ReportTarget.kt diff --git a/services/flipcash/src/main/kotlin/com/flipcash/services/models/ResolveIdentifier.kt b/services/flipcash/src/commonMain/kotlin/com/flipcash/services/models/ResolveIdentifier.kt similarity index 100% rename from services/flipcash/src/main/kotlin/com/flipcash/services/models/ResolveIdentifier.kt rename to services/flipcash/src/commonMain/kotlin/com/flipcash/services/models/ResolveIdentifier.kt diff --git a/services/flipcash/src/main/kotlin/com/flipcash/services/models/SocialAccountLinking.kt b/services/flipcash/src/commonMain/kotlin/com/flipcash/services/models/SocialAccountLinking.kt similarity index 100% rename from services/flipcash/src/main/kotlin/com/flipcash/services/models/SocialAccountLinking.kt rename to services/flipcash/src/commonMain/kotlin/com/flipcash/services/models/SocialAccountLinking.kt diff --git a/services/flipcash/src/main/kotlin/com/flipcash/services/models/TipPresets.kt b/services/flipcash/src/commonMain/kotlin/com/flipcash/services/models/TipPresets.kt similarity index 100% rename from services/flipcash/src/main/kotlin/com/flipcash/services/models/TipPresets.kt rename to services/flipcash/src/commonMain/kotlin/com/flipcash/services/models/TipPresets.kt diff --git a/services/flipcash/src/main/kotlin/com/flipcash/services/models/UserFlags.kt b/services/flipcash/src/commonMain/kotlin/com/flipcash/services/models/UserFlags.kt similarity index 100% rename from services/flipcash/src/main/kotlin/com/flipcash/services/models/UserFlags.kt rename to services/flipcash/src/commonMain/kotlin/com/flipcash/services/models/UserFlags.kt diff --git a/services/flipcash/src/main/kotlin/com/flipcash/services/models/UserProfile.kt b/services/flipcash/src/commonMain/kotlin/com/flipcash/services/models/UserProfile.kt similarity index 97% rename from services/flipcash/src/main/kotlin/com/flipcash/services/models/UserProfile.kt rename to services/flipcash/src/commonMain/kotlin/com/flipcash/services/models/UserProfile.kt index a136ddb90e..055704e556 100644 --- a/services/flipcash/src/main/kotlin/com/flipcash/services/models/UserProfile.kt +++ b/services/flipcash/src/commonMain/kotlin/com/flipcash/services/models/UserProfile.kt @@ -1,10 +1,10 @@ package com.flipcash.services.models -import android.os.Parcelable +import com.getcode.libs.parcelable.Parcelable import com.flipcash.services.models.chat.MediaItem import com.getcode.opencode.model.core.ID import com.getcode.opencode.model.financial.Fiat -import kotlinx.parcelize.Parcelize +import com.getcode.libs.parcelable.Parcelize import kotlinx.serialization.Serializable import kotlin.time.Instant diff --git a/services/flipcash/src/main/kotlin/com/flipcash/services/models/VerifiableContactMethod.kt b/services/flipcash/src/commonMain/kotlin/com/flipcash/services/models/VerifiableContactMethod.kt similarity index 83% rename from services/flipcash/src/main/kotlin/com/flipcash/services/models/VerifiableContactMethod.kt rename to services/flipcash/src/commonMain/kotlin/com/flipcash/services/models/VerifiableContactMethod.kt index fcbf85dad4..4c481fa6d3 100644 --- a/services/flipcash/src/main/kotlin/com/flipcash/services/models/VerifiableContactMethod.kt +++ b/services/flipcash/src/commonMain/kotlin/com/flipcash/services/models/VerifiableContactMethod.kt @@ -1,7 +1,7 @@ package com.flipcash.services.models -import android.os.Parcelable -import kotlinx.parcelize.Parcelize +import com.getcode.libs.parcelable.Parcelable +import com.getcode.libs.parcelable.Parcelize import kotlinx.serialization.Serializable /** diff --git a/services/flipcash/src/main/kotlin/com/flipcash/services/models/blob/UploadPolicy.kt b/services/flipcash/src/commonMain/kotlin/com/flipcash/services/models/blob/UploadPolicy.kt similarity index 100% rename from services/flipcash/src/main/kotlin/com/flipcash/services/models/blob/UploadPolicy.kt rename to services/flipcash/src/commonMain/kotlin/com/flipcash/services/models/blob/UploadPolicy.kt diff --git a/services/flipcash/src/main/kotlin/com/flipcash/services/models/blob/UploadTarget.kt b/services/flipcash/src/commonMain/kotlin/com/flipcash/services/models/blob/UploadTarget.kt similarity index 100% rename from services/flipcash/src/main/kotlin/com/flipcash/services/models/blob/UploadTarget.kt rename to services/flipcash/src/commonMain/kotlin/com/flipcash/services/models/blob/UploadTarget.kt diff --git a/services/flipcash/src/main/kotlin/com/flipcash/services/models/chat/BlobAccessContext.kt b/services/flipcash/src/commonMain/kotlin/com/flipcash/services/models/chat/BlobAccessContext.kt similarity index 100% rename from services/flipcash/src/main/kotlin/com/flipcash/services/models/chat/BlobAccessContext.kt rename to services/flipcash/src/commonMain/kotlin/com/flipcash/services/models/chat/BlobAccessContext.kt diff --git a/services/flipcash/src/main/kotlin/com/flipcash/services/models/chat/BlobId.kt b/services/flipcash/src/commonMain/kotlin/com/flipcash/services/models/chat/BlobId.kt similarity index 96% rename from services/flipcash/src/main/kotlin/com/flipcash/services/models/chat/BlobId.kt rename to services/flipcash/src/commonMain/kotlin/com/flipcash/services/models/chat/BlobId.kt index 4e33312965..ff0ee4912c 100644 --- a/services/flipcash/src/main/kotlin/com/flipcash/services/models/chat/BlobId.kt +++ b/services/flipcash/src/commonMain/kotlin/com/flipcash/services/models/chat/BlobId.kt @@ -1,7 +1,7 @@ package com.flipcash.services.models.chat -import android.os.Parcelable -import kotlinx.parcelize.Parcelize +import com.getcode.libs.parcelable.Parcelable +import com.getcode.libs.parcelable.Parcelize import kotlinx.serialization.ExperimentalSerializationApi import kotlinx.serialization.KSerializer import kotlinx.serialization.Serializable diff --git a/services/flipcash/src/main/kotlin/com/flipcash/services/models/chat/BlobMetadata.kt b/services/flipcash/src/commonMain/kotlin/com/flipcash/services/models/chat/BlobMetadata.kt similarity index 95% rename from services/flipcash/src/main/kotlin/com/flipcash/services/models/chat/BlobMetadata.kt rename to services/flipcash/src/commonMain/kotlin/com/flipcash/services/models/chat/BlobMetadata.kt index e8c716ed51..bc78eea3a9 100644 --- a/services/flipcash/src/main/kotlin/com/flipcash/services/models/chat/BlobMetadata.kt +++ b/services/flipcash/src/commonMain/kotlin/com/flipcash/services/models/chat/BlobMetadata.kt @@ -1,10 +1,10 @@ package com.flipcash.services.models.chat -import android.os.Parcelable +import com.getcode.libs.parcelable.Parcelable import kotlin.time.Duration import kotlin.time.Duration.Companion.seconds import kotlin.time.Instant -import kotlinx.parcelize.Parcelize +import com.getcode.libs.parcelable.Parcelize import kotlinx.serialization.Serializable @Parcelize diff --git a/services/flipcash/src/main/kotlin/com/flipcash/services/models/chat/BlobUpdate.kt b/services/flipcash/src/commonMain/kotlin/com/flipcash/services/models/chat/BlobUpdate.kt similarity index 100% rename from services/flipcash/src/main/kotlin/com/flipcash/services/models/chat/BlobUpdate.kt rename to services/flipcash/src/commonMain/kotlin/com/flipcash/services/models/chat/BlobUpdate.kt diff --git a/services/flipcash/src/main/kotlin/com/flipcash/services/models/chat/ChatEvent.kt b/services/flipcash/src/commonMain/kotlin/com/flipcash/services/models/chat/ChatEvent.kt similarity index 100% rename from services/flipcash/src/main/kotlin/com/flipcash/services/models/chat/ChatEvent.kt rename to services/flipcash/src/commonMain/kotlin/com/flipcash/services/models/chat/ChatEvent.kt diff --git a/services/flipcash/src/main/kotlin/com/flipcash/services/models/chat/ChatFeedPage.kt b/services/flipcash/src/commonMain/kotlin/com/flipcash/services/models/chat/ChatFeedPage.kt similarity index 100% rename from services/flipcash/src/main/kotlin/com/flipcash/services/models/chat/ChatFeedPage.kt rename to services/flipcash/src/commonMain/kotlin/com/flipcash/services/models/chat/ChatFeedPage.kt diff --git a/services/flipcash/src/main/kotlin/com/flipcash/services/models/chat/ChatId.kt b/services/flipcash/src/commonMain/kotlin/com/flipcash/services/models/chat/ChatId.kt similarity index 82% rename from services/flipcash/src/main/kotlin/com/flipcash/services/models/chat/ChatId.kt rename to services/flipcash/src/commonMain/kotlin/com/flipcash/services/models/chat/ChatId.kt index c8e5fb00d8..6627b85909 100644 --- a/services/flipcash/src/main/kotlin/com/flipcash/services/models/chat/ChatId.kt +++ b/services/flipcash/src/commonMain/kotlin/com/flipcash/services/models/chat/ChatId.kt @@ -1,7 +1,8 @@ package com.flipcash.services.models.chat -import android.os.Parcel -import android.os.Parcelable +import com.getcode.libs.parcelable.ManualParcelable +import com.getcode.libs.parcelable.Parcel +import com.getcode.libs.parcelable.parcelableCreator import com.getcode.utils.base58 import kotlinx.serialization.KSerializer import kotlinx.serialization.Serializable @@ -26,7 +27,7 @@ object ChatIdAsHexSerializer : KSerializer { } @Serializable(with = ChatIdAsHexSerializer::class) -data class ChatId(val bytes: ByteArray) : Parcelable { +data class ChatId(val bytes: ByteArray) : ManualParcelable { constructor(bytes: List): this(bytes.toByteArray()) @OptIn(ExperimentalStdlibApi::class) @@ -53,10 +54,6 @@ data class ChatId(val bytes: ByteArray) : Parcelable { companion object { @JvmField - val CREATOR: Parcelable.Creator = - object : Parcelable.Creator { - override fun createFromParcel(parcel: Parcel) = ChatId(parcel) - override fun newArray(size: Int) = arrayOfNulls(size) - } + val CREATOR: Any = parcelableCreator({ arrayOfNulls(it) }) { parcel -> ChatId(parcel) } } } diff --git a/services/flipcash/src/main/kotlin/com/flipcash/services/models/chat/ChatMember.kt b/services/flipcash/src/commonMain/kotlin/com/flipcash/services/models/chat/ChatMember.kt similarity index 100% rename from services/flipcash/src/main/kotlin/com/flipcash/services/models/chat/ChatMember.kt rename to services/flipcash/src/commonMain/kotlin/com/flipcash/services/models/chat/ChatMember.kt diff --git a/services/flipcash/src/main/kotlin/com/flipcash/services/models/chat/ChatMessage.kt b/services/flipcash/src/commonMain/kotlin/com/flipcash/services/models/chat/ChatMessage.kt similarity index 100% rename from services/flipcash/src/main/kotlin/com/flipcash/services/models/chat/ChatMessage.kt rename to services/flipcash/src/commonMain/kotlin/com/flipcash/services/models/chat/ChatMessage.kt diff --git a/services/flipcash/src/main/kotlin/com/flipcash/services/models/chat/ChatMetadata.kt b/services/flipcash/src/commonMain/kotlin/com/flipcash/services/models/chat/ChatMetadata.kt similarity index 100% rename from services/flipcash/src/main/kotlin/com/flipcash/services/models/chat/ChatMetadata.kt rename to services/flipcash/src/commonMain/kotlin/com/flipcash/services/models/chat/ChatMetadata.kt diff --git a/services/flipcash/src/main/kotlin/com/flipcash/services/models/chat/ChatMutation.kt b/services/flipcash/src/commonMain/kotlin/com/flipcash/services/models/chat/ChatMutation.kt similarity index 100% rename from services/flipcash/src/main/kotlin/com/flipcash/services/models/chat/ChatMutation.kt rename to services/flipcash/src/commonMain/kotlin/com/flipcash/services/models/chat/ChatMutation.kt diff --git a/services/flipcash/src/main/kotlin/com/flipcash/services/models/chat/ChatRules.kt b/services/flipcash/src/commonMain/kotlin/com/flipcash/services/models/chat/ChatRules.kt similarity index 100% rename from services/flipcash/src/main/kotlin/com/flipcash/services/models/chat/ChatRules.kt rename to services/flipcash/src/commonMain/kotlin/com/flipcash/services/models/chat/ChatRules.kt diff --git a/services/flipcash/src/main/kotlin/com/flipcash/services/models/chat/ChatType.kt b/services/flipcash/src/commonMain/kotlin/com/flipcash/services/models/chat/ChatType.kt similarity index 100% rename from services/flipcash/src/main/kotlin/com/flipcash/services/models/chat/ChatType.kt rename to services/flipcash/src/commonMain/kotlin/com/flipcash/services/models/chat/ChatType.kt diff --git a/services/flipcash/src/main/kotlin/com/flipcash/services/models/chat/ChatUpdate.kt b/services/flipcash/src/commonMain/kotlin/com/flipcash/services/models/chat/ChatUpdate.kt similarity index 100% rename from services/flipcash/src/main/kotlin/com/flipcash/services/models/chat/ChatUpdate.kt rename to services/flipcash/src/commonMain/kotlin/com/flipcash/services/models/chat/ChatUpdate.kt diff --git a/services/flipcash/src/main/kotlin/com/flipcash/services/models/chat/ClientMessageId.kt b/services/flipcash/src/commonMain/kotlin/com/flipcash/services/models/chat/ClientMessageId.kt similarity index 100% rename from services/flipcash/src/main/kotlin/com/flipcash/services/models/chat/ClientMessageId.kt rename to services/flipcash/src/commonMain/kotlin/com/flipcash/services/models/chat/ClientMessageId.kt diff --git a/services/flipcash/src/main/kotlin/com/flipcash/services/models/chat/DeliveryStatus.kt b/services/flipcash/src/commonMain/kotlin/com/flipcash/services/models/chat/DeliveryStatus.kt similarity index 100% rename from services/flipcash/src/main/kotlin/com/flipcash/services/models/chat/DeliveryStatus.kt rename to services/flipcash/src/commonMain/kotlin/com/flipcash/services/models/chat/DeliveryStatus.kt diff --git a/services/flipcash/src/main/kotlin/com/flipcash/services/models/chat/DmAddressability.kt b/services/flipcash/src/commonMain/kotlin/com/flipcash/services/models/chat/DmAddressability.kt similarity index 100% rename from services/flipcash/src/main/kotlin/com/flipcash/services/models/chat/DmAddressability.kt rename to services/flipcash/src/commonMain/kotlin/com/flipcash/services/models/chat/DmAddressability.kt diff --git a/services/flipcash/src/main/kotlin/com/flipcash/services/models/chat/EditChatParameters.kt b/services/flipcash/src/commonMain/kotlin/com/flipcash/services/models/chat/EditChatParameters.kt similarity index 100% rename from services/flipcash/src/main/kotlin/com/flipcash/services/models/chat/EditChatParameters.kt rename to services/flipcash/src/commonMain/kotlin/com/flipcash/services/models/chat/EditChatParameters.kt diff --git a/services/flipcash/src/main/kotlin/com/flipcash/services/models/chat/Emoji.kt b/services/flipcash/src/commonMain/kotlin/com/flipcash/services/models/chat/Emoji.kt similarity index 100% rename from services/flipcash/src/main/kotlin/com/flipcash/services/models/chat/Emoji.kt rename to services/flipcash/src/commonMain/kotlin/com/flipcash/services/models/chat/Emoji.kt diff --git a/services/flipcash/src/main/kotlin/com/flipcash/services/models/chat/EmojiReaction.kt b/services/flipcash/src/commonMain/kotlin/com/flipcash/services/models/chat/EmojiReaction.kt similarity index 100% rename from services/flipcash/src/main/kotlin/com/flipcash/services/models/chat/EmojiReaction.kt rename to services/flipcash/src/commonMain/kotlin/com/flipcash/services/models/chat/EmojiReaction.kt diff --git a/services/flipcash/src/main/kotlin/com/flipcash/services/models/chat/HoldingsSummary.kt b/services/flipcash/src/commonMain/kotlin/com/flipcash/services/models/chat/HoldingsSummary.kt similarity index 100% rename from services/flipcash/src/main/kotlin/com/flipcash/services/models/chat/HoldingsSummary.kt rename to services/flipcash/src/commonMain/kotlin/com/flipcash/services/models/chat/HoldingsSummary.kt diff --git a/services/flipcash/src/main/kotlin/com/flipcash/services/models/chat/IdempotencyKey.kt b/services/flipcash/src/commonMain/kotlin/com/flipcash/services/models/chat/IdempotencyKey.kt similarity index 100% rename from services/flipcash/src/main/kotlin/com/flipcash/services/models/chat/IdempotencyKey.kt rename to services/flipcash/src/commonMain/kotlin/com/flipcash/services/models/chat/IdempotencyKey.kt diff --git a/services/flipcash/src/main/kotlin/com/flipcash/services/models/chat/ImageMetadata.kt b/services/flipcash/src/commonMain/kotlin/com/flipcash/services/models/chat/ImageMetadata.kt similarity index 70% rename from services/flipcash/src/main/kotlin/com/flipcash/services/models/chat/ImageMetadata.kt rename to services/flipcash/src/commonMain/kotlin/com/flipcash/services/models/chat/ImageMetadata.kt index 56b0ba1771..5b6a99e17a 100644 --- a/services/flipcash/src/main/kotlin/com/flipcash/services/models/chat/ImageMetadata.kt +++ b/services/flipcash/src/commonMain/kotlin/com/flipcash/services/models/chat/ImageMetadata.kt @@ -1,7 +1,7 @@ package com.flipcash.services.models.chat -import android.os.Parcelable -import kotlinx.parcelize.Parcelize +import com.getcode.libs.parcelable.Parcelable +import com.getcode.libs.parcelable.Parcelize import kotlinx.serialization.Serializable @Parcelize diff --git a/services/flipcash/src/main/kotlin/com/flipcash/services/models/chat/KeyEnvelope.kt b/services/flipcash/src/commonMain/kotlin/com/flipcash/services/models/chat/KeyEnvelope.kt similarity index 100% rename from services/flipcash/src/main/kotlin/com/flipcash/services/models/chat/KeyEnvelope.kt rename to services/flipcash/src/commonMain/kotlin/com/flipcash/services/models/chat/KeyEnvelope.kt diff --git a/services/flipcash/src/main/kotlin/com/flipcash/services/models/chat/LinkPreview.kt b/services/flipcash/src/commonMain/kotlin/com/flipcash/services/models/chat/LinkPreview.kt similarity index 100% rename from services/flipcash/src/main/kotlin/com/flipcash/services/models/chat/LinkPreview.kt rename to services/flipcash/src/commonMain/kotlin/com/flipcash/services/models/chat/LinkPreview.kt diff --git a/services/flipcash/src/main/kotlin/com/flipcash/services/models/chat/Lobby.kt b/services/flipcash/src/commonMain/kotlin/com/flipcash/services/models/chat/Lobby.kt similarity index 100% rename from services/flipcash/src/main/kotlin/com/flipcash/services/models/chat/Lobby.kt rename to services/flipcash/src/commonMain/kotlin/com/flipcash/services/models/chat/Lobby.kt diff --git a/services/flipcash/src/main/kotlin/com/flipcash/services/models/chat/MediaItem.kt b/services/flipcash/src/commonMain/kotlin/com/flipcash/services/models/chat/MediaItem.kt similarity index 98% rename from services/flipcash/src/main/kotlin/com/flipcash/services/models/chat/MediaItem.kt rename to services/flipcash/src/commonMain/kotlin/com/flipcash/services/models/chat/MediaItem.kt index 105ce557a3..83801dc5eb 100644 --- a/services/flipcash/src/main/kotlin/com/flipcash/services/models/chat/MediaItem.kt +++ b/services/flipcash/src/commonMain/kotlin/com/flipcash/services/models/chat/MediaItem.kt @@ -1,8 +1,8 @@ package com.flipcash.services.models.chat -import android.os.Parcelable +import com.getcode.libs.parcelable.Parcelable import kotlin.time.Instant -import kotlinx.parcelize.Parcelize +import com.getcode.libs.parcelable.Parcelize import kotlinx.serialization.Serializable @Parcelize diff --git a/services/flipcash/src/main/kotlin/com/flipcash/services/models/chat/MediaItemRendition.kt b/services/flipcash/src/commonMain/kotlin/com/flipcash/services/models/chat/MediaItemRendition.kt similarity index 92% rename from services/flipcash/src/main/kotlin/com/flipcash/services/models/chat/MediaItemRendition.kt rename to services/flipcash/src/commonMain/kotlin/com/flipcash/services/models/chat/MediaItemRendition.kt index 00ee018398..d9cedba26d 100644 --- a/services/flipcash/src/main/kotlin/com/flipcash/services/models/chat/MediaItemRendition.kt +++ b/services/flipcash/src/commonMain/kotlin/com/flipcash/services/models/chat/MediaItemRendition.kt @@ -1,9 +1,9 @@ package com.flipcash.services.models.chat -import android.os.Parcelable +import com.getcode.libs.parcelable.Parcelable import com.getcode.utils.base58 import kotlin.time.Instant -import kotlinx.parcelize.Parcelize +import com.getcode.libs.parcelable.Parcelize import kotlinx.serialization.Serializable @Parcelize diff --git a/services/flipcash/src/main/kotlin/com/flipcash/services/models/chat/MentionSuggestion.kt b/services/flipcash/src/commonMain/kotlin/com/flipcash/services/models/chat/MentionSuggestion.kt similarity index 100% rename from services/flipcash/src/main/kotlin/com/flipcash/services/models/chat/MentionSuggestion.kt rename to services/flipcash/src/commonMain/kotlin/com/flipcash/services/models/chat/MentionSuggestion.kt diff --git a/services/flipcash/src/main/kotlin/com/flipcash/services/models/chat/MessageContent.kt b/services/flipcash/src/commonMain/kotlin/com/flipcash/services/models/chat/MessageContent.kt similarity index 100% rename from services/flipcash/src/main/kotlin/com/flipcash/services/models/chat/MessageContent.kt rename to services/flipcash/src/commonMain/kotlin/com/flipcash/services/models/chat/MessageContent.kt diff --git a/services/flipcash/src/main/kotlin/com/flipcash/services/models/chat/MessagePointer.kt b/services/flipcash/src/commonMain/kotlin/com/flipcash/services/models/chat/MessagePointer.kt similarity index 100% rename from services/flipcash/src/main/kotlin/com/flipcash/services/models/chat/MessagePointer.kt rename to services/flipcash/src/commonMain/kotlin/com/flipcash/services/models/chat/MessagePointer.kt diff --git a/services/flipcash/src/main/kotlin/com/flipcash/services/models/chat/MetadataUpdate.kt b/services/flipcash/src/commonMain/kotlin/com/flipcash/services/models/chat/MetadataUpdate.kt similarity index 100% rename from services/flipcash/src/main/kotlin/com/flipcash/services/models/chat/MetadataUpdate.kt rename to services/flipcash/src/commonMain/kotlin/com/flipcash/services/models/chat/MetadataUpdate.kt diff --git a/services/flipcash/src/main/kotlin/com/flipcash/services/models/chat/MuteExtensions.kt b/services/flipcash/src/commonMain/kotlin/com/flipcash/services/models/chat/MuteExtensions.kt similarity index 100% rename from services/flipcash/src/main/kotlin/com/flipcash/services/models/chat/MuteExtensions.kt rename to services/flipcash/src/commonMain/kotlin/com/flipcash/services/models/chat/MuteExtensions.kt diff --git a/services/flipcash/src/main/kotlin/com/flipcash/services/models/chat/MuteState.kt b/services/flipcash/src/commonMain/kotlin/com/flipcash/services/models/chat/MuteState.kt similarity index 100% rename from services/flipcash/src/main/kotlin/com/flipcash/services/models/chat/MuteState.kt rename to services/flipcash/src/commonMain/kotlin/com/flipcash/services/models/chat/MuteState.kt diff --git a/services/flipcash/src/main/kotlin/com/flipcash/services/models/chat/ReactionSummary.kt b/services/flipcash/src/commonMain/kotlin/com/flipcash/services/models/chat/ReactionSummary.kt similarity index 100% rename from services/flipcash/src/main/kotlin/com/flipcash/services/models/chat/ReactionSummary.kt rename to services/flipcash/src/commonMain/kotlin/com/flipcash/services/models/chat/ReactionSummary.kt diff --git a/services/flipcash/src/main/kotlin/com/flipcash/services/models/chat/ReactionUpdate.kt b/services/flipcash/src/commonMain/kotlin/com/flipcash/services/models/chat/ReactionUpdate.kt similarity index 100% rename from services/flipcash/src/main/kotlin/com/flipcash/services/models/chat/ReactionUpdate.kt rename to services/flipcash/src/commonMain/kotlin/com/flipcash/services/models/chat/ReactionUpdate.kt diff --git a/services/flipcash/src/main/kotlin/com/flipcash/services/models/chat/Reactor.kt b/services/flipcash/src/commonMain/kotlin/com/flipcash/services/models/chat/Reactor.kt similarity index 100% rename from services/flipcash/src/main/kotlin/com/flipcash/services/models/chat/Reactor.kt rename to services/flipcash/src/commonMain/kotlin/com/flipcash/services/models/chat/Reactor.kt diff --git a/services/flipcash/src/main/kotlin/com/flipcash/services/models/chat/RosterChange.kt b/services/flipcash/src/commonMain/kotlin/com/flipcash/services/models/chat/RosterChange.kt similarity index 100% rename from services/flipcash/src/main/kotlin/com/flipcash/services/models/chat/RosterChange.kt rename to services/flipcash/src/commonMain/kotlin/com/flipcash/services/models/chat/RosterChange.kt diff --git a/services/flipcash/src/main/kotlin/com/flipcash/services/models/chat/RosterPage.kt b/services/flipcash/src/commonMain/kotlin/com/flipcash/services/models/chat/RosterPage.kt similarity index 100% rename from services/flipcash/src/main/kotlin/com/flipcash/services/models/chat/RosterPage.kt rename to services/flipcash/src/commonMain/kotlin/com/flipcash/services/models/chat/RosterPage.kt diff --git a/services/flipcash/src/main/kotlin/com/flipcash/services/models/chat/RosterSummary.kt b/services/flipcash/src/commonMain/kotlin/com/flipcash/services/models/chat/RosterSummary.kt similarity index 100% rename from services/flipcash/src/main/kotlin/com/flipcash/services/models/chat/RosterSummary.kt rename to services/flipcash/src/commonMain/kotlin/com/flipcash/services/models/chat/RosterSummary.kt diff --git a/services/flipcash/src/main/kotlin/com/flipcash/services/models/chat/SampledChatter.kt b/services/flipcash/src/commonMain/kotlin/com/flipcash/services/models/chat/SampledChatter.kt similarity index 100% rename from services/flipcash/src/main/kotlin/com/flipcash/services/models/chat/SampledChatter.kt rename to services/flipcash/src/commonMain/kotlin/com/flipcash/services/models/chat/SampledChatter.kt diff --git a/services/flipcash/src/main/kotlin/com/flipcash/services/models/chat/StartChatParameters.kt b/services/flipcash/src/commonMain/kotlin/com/flipcash/services/models/chat/StartChatParameters.kt similarity index 100% rename from services/flipcash/src/main/kotlin/com/flipcash/services/models/chat/StartChatParameters.kt rename to services/flipcash/src/commonMain/kotlin/com/flipcash/services/models/chat/StartChatParameters.kt diff --git a/services/flipcash/src/main/kotlin/com/flipcash/services/models/chat/TypingNotification.kt b/services/flipcash/src/commonMain/kotlin/com/flipcash/services/models/chat/TypingNotification.kt similarity index 100% rename from services/flipcash/src/main/kotlin/com/flipcash/services/models/chat/TypingNotification.kt rename to services/flipcash/src/commonMain/kotlin/com/flipcash/services/models/chat/TypingNotification.kt diff --git a/services/flipcash/src/main/kotlin/com/flipcash/services/models/chat/ViewMode.kt b/services/flipcash/src/commonMain/kotlin/com/flipcash/services/models/chat/ViewMode.kt similarity index 100% rename from services/flipcash/src/main/kotlin/com/flipcash/services/models/chat/ViewMode.kt rename to services/flipcash/src/commonMain/kotlin/com/flipcash/services/models/chat/ViewMode.kt diff --git a/services/flipcash/src/main/kotlin/com/flipcash/services/models/chat/ViewerState.kt b/services/flipcash/src/commonMain/kotlin/com/flipcash/services/models/chat/ViewerState.kt similarity index 100% rename from services/flipcash/src/main/kotlin/com/flipcash/services/models/chat/ViewerState.kt rename to services/flipcash/src/commonMain/kotlin/com/flipcash/services/models/chat/ViewerState.kt diff --git a/services/flipcash/src/main/kotlin/com/flipcash/services/models/chat/WidgetContent.kt b/services/flipcash/src/commonMain/kotlin/com/flipcash/services/models/chat/WidgetContent.kt similarity index 100% rename from services/flipcash/src/main/kotlin/com/flipcash/services/models/chat/WidgetContent.kt rename to services/flipcash/src/commonMain/kotlin/com/flipcash/services/models/chat/WidgetContent.kt diff --git a/services/flipcash/src/main/kotlin/com/flipcash/services/persistence/DataSource.kt b/services/flipcash/src/commonMain/kotlin/com/flipcash/services/persistence/DataSource.kt similarity index 100% rename from services/flipcash/src/main/kotlin/com/flipcash/services/persistence/DataSource.kt rename to services/flipcash/src/commonMain/kotlin/com/flipcash/services/persistence/DataSource.kt diff --git a/services/flipcash/src/main/kotlin/com/flipcash/services/repository/AccountRepository.kt b/services/flipcash/src/commonMain/kotlin/com/flipcash/services/repository/AccountRepository.kt similarity index 100% rename from services/flipcash/src/main/kotlin/com/flipcash/services/repository/AccountRepository.kt rename to services/flipcash/src/commonMain/kotlin/com/flipcash/services/repository/AccountRepository.kt diff --git a/services/flipcash/src/main/kotlin/com/flipcash/services/repository/ActivityFeedRepository.kt b/services/flipcash/src/commonMain/kotlin/com/flipcash/services/repository/ActivityFeedRepository.kt similarity index 100% rename from services/flipcash/src/main/kotlin/com/flipcash/services/repository/ActivityFeedRepository.kt rename to services/flipcash/src/commonMain/kotlin/com/flipcash/services/repository/ActivityFeedRepository.kt diff --git a/services/flipcash/src/main/kotlin/com/flipcash/services/repository/BlobStorageRepository.kt b/services/flipcash/src/commonMain/kotlin/com/flipcash/services/repository/BlobStorageRepository.kt similarity index 100% rename from services/flipcash/src/main/kotlin/com/flipcash/services/repository/BlobStorageRepository.kt rename to services/flipcash/src/commonMain/kotlin/com/flipcash/services/repository/BlobStorageRepository.kt diff --git a/services/flipcash/src/main/kotlin/com/flipcash/services/repository/BlocklistRepository.kt b/services/flipcash/src/commonMain/kotlin/com/flipcash/services/repository/BlocklistRepository.kt similarity index 100% rename from services/flipcash/src/main/kotlin/com/flipcash/services/repository/BlocklistRepository.kt rename to services/flipcash/src/commonMain/kotlin/com/flipcash/services/repository/BlocklistRepository.kt diff --git a/services/flipcash/src/main/kotlin/com/flipcash/services/repository/ChatMessagingRepository.kt b/services/flipcash/src/commonMain/kotlin/com/flipcash/services/repository/ChatMessagingRepository.kt similarity index 100% rename from services/flipcash/src/main/kotlin/com/flipcash/services/repository/ChatMessagingRepository.kt rename to services/flipcash/src/commonMain/kotlin/com/flipcash/services/repository/ChatMessagingRepository.kt diff --git a/services/flipcash/src/main/kotlin/com/flipcash/services/repository/ChatRepository.kt b/services/flipcash/src/commonMain/kotlin/com/flipcash/services/repository/ChatRepository.kt similarity index 100% rename from services/flipcash/src/main/kotlin/com/flipcash/services/repository/ChatRepository.kt rename to services/flipcash/src/commonMain/kotlin/com/flipcash/services/repository/ChatRepository.kt diff --git a/services/flipcash/src/main/kotlin/com/flipcash/services/repository/CommunityRepository.kt b/services/flipcash/src/commonMain/kotlin/com/flipcash/services/repository/CommunityRepository.kt similarity index 100% rename from services/flipcash/src/main/kotlin/com/flipcash/services/repository/CommunityRepository.kt rename to services/flipcash/src/commonMain/kotlin/com/flipcash/services/repository/CommunityRepository.kt diff --git a/services/flipcash/src/main/kotlin/com/flipcash/services/repository/ContactListRepository.kt b/services/flipcash/src/commonMain/kotlin/com/flipcash/services/repository/ContactListRepository.kt similarity index 100% rename from services/flipcash/src/main/kotlin/com/flipcash/services/repository/ContactListRepository.kt rename to services/flipcash/src/commonMain/kotlin/com/flipcash/services/repository/ContactListRepository.kt diff --git a/services/flipcash/src/main/kotlin/com/flipcash/services/repository/ContactVerificationRepository.kt b/services/flipcash/src/commonMain/kotlin/com/flipcash/services/repository/ContactVerificationRepository.kt similarity index 100% rename from services/flipcash/src/main/kotlin/com/flipcash/services/repository/ContactVerificationRepository.kt rename to services/flipcash/src/commonMain/kotlin/com/flipcash/services/repository/ContactVerificationRepository.kt diff --git a/services/flipcash/src/main/kotlin/com/flipcash/services/repository/EventStreamingRepository.kt b/services/flipcash/src/commonMain/kotlin/com/flipcash/services/repository/EventStreamingRepository.kt similarity index 100% rename from services/flipcash/src/main/kotlin/com/flipcash/services/repository/EventStreamingRepository.kt rename to services/flipcash/src/commonMain/kotlin/com/flipcash/services/repository/EventStreamingRepository.kt diff --git a/services/flipcash/src/main/kotlin/com/flipcash/services/repository/ModerationRepository.kt b/services/flipcash/src/commonMain/kotlin/com/flipcash/services/repository/ModerationRepository.kt similarity index 100% rename from services/flipcash/src/main/kotlin/com/flipcash/services/repository/ModerationRepository.kt rename to services/flipcash/src/commonMain/kotlin/com/flipcash/services/repository/ModerationRepository.kt diff --git a/services/flipcash/src/main/kotlin/com/flipcash/services/repository/PollRepository.kt b/services/flipcash/src/commonMain/kotlin/com/flipcash/services/repository/PollRepository.kt similarity index 100% rename from services/flipcash/src/main/kotlin/com/flipcash/services/repository/PollRepository.kt rename to services/flipcash/src/commonMain/kotlin/com/flipcash/services/repository/PollRepository.kt diff --git a/services/flipcash/src/main/kotlin/com/flipcash/services/repository/ProfileRepository.kt b/services/flipcash/src/commonMain/kotlin/com/flipcash/services/repository/ProfileRepository.kt similarity index 100% rename from services/flipcash/src/main/kotlin/com/flipcash/services/repository/ProfileRepository.kt rename to services/flipcash/src/commonMain/kotlin/com/flipcash/services/repository/ProfileRepository.kt diff --git a/services/flipcash/src/main/kotlin/com/flipcash/services/repository/PurchaseRepository.kt b/services/flipcash/src/commonMain/kotlin/com/flipcash/services/repository/PurchaseRepository.kt similarity index 100% rename from services/flipcash/src/main/kotlin/com/flipcash/services/repository/PurchaseRepository.kt rename to services/flipcash/src/commonMain/kotlin/com/flipcash/services/repository/PurchaseRepository.kt diff --git a/services/flipcash/src/main/kotlin/com/flipcash/services/repository/PushRepository.kt b/services/flipcash/src/commonMain/kotlin/com/flipcash/services/repository/PushRepository.kt similarity index 100% rename from services/flipcash/src/main/kotlin/com/flipcash/services/repository/PushRepository.kt rename to services/flipcash/src/commonMain/kotlin/com/flipcash/services/repository/PushRepository.kt diff --git a/services/flipcash/src/main/kotlin/com/flipcash/services/repository/ReportingRepository.kt b/services/flipcash/src/commonMain/kotlin/com/flipcash/services/repository/ReportingRepository.kt similarity index 100% rename from services/flipcash/src/main/kotlin/com/flipcash/services/repository/ReportingRepository.kt rename to services/flipcash/src/commonMain/kotlin/com/flipcash/services/repository/ReportingRepository.kt diff --git a/services/flipcash/src/main/kotlin/com/flipcash/services/repository/ResolverRepository.kt b/services/flipcash/src/commonMain/kotlin/com/flipcash/services/repository/ResolverRepository.kt similarity index 100% rename from services/flipcash/src/main/kotlin/com/flipcash/services/repository/ResolverRepository.kt rename to services/flipcash/src/commonMain/kotlin/com/flipcash/services/repository/ResolverRepository.kt diff --git a/services/flipcash/src/main/kotlin/com/flipcash/services/repository/SettingsRepository.kt b/services/flipcash/src/commonMain/kotlin/com/flipcash/services/repository/SettingsRepository.kt similarity index 100% rename from services/flipcash/src/main/kotlin/com/flipcash/services/repository/SettingsRepository.kt rename to services/flipcash/src/commonMain/kotlin/com/flipcash/services/repository/SettingsRepository.kt diff --git a/services/flipcash/src/main/kotlin/com/flipcash/services/repository/ThirdPartyRepository.kt b/services/flipcash/src/commonMain/kotlin/com/flipcash/services/repository/ThirdPartyRepository.kt similarity index 100% rename from services/flipcash/src/main/kotlin/com/flipcash/services/repository/ThirdPartyRepository.kt rename to services/flipcash/src/commonMain/kotlin/com/flipcash/services/repository/ThirdPartyRepository.kt diff --git a/services/flipcash/src/main/kotlin/com/flipcash/services/user/AnalyticsIdentity.kt b/services/flipcash/src/commonMain/kotlin/com/flipcash/services/user/AnalyticsIdentity.kt similarity index 74% rename from services/flipcash/src/main/kotlin/com/flipcash/services/user/AnalyticsIdentity.kt rename to services/flipcash/src/commonMain/kotlin/com/flipcash/services/user/AnalyticsIdentity.kt index 5c94772ab2..c9ad4f9b0d 100644 --- a/services/flipcash/src/main/kotlin/com/flipcash/services/user/AnalyticsIdentity.kt +++ b/services/flipcash/src/commonMain/kotlin/com/flipcash/services/user/AnalyticsIdentity.kt @@ -12,3 +12,8 @@ import com.getcode.opencode.model.core.ID */ @OptIn(ExperimentalStdlibApi::class) fun ID.analyticsDistinctId(): String = toByteArray().toHexString() + +/** Tells the analytics backend which account is signed in (Mixpanel's `identify` on Android). */ +fun interface AnalyticsIdentifier { + fun identify(distinctId: String?) +} diff --git a/services/flipcash/src/main/kotlin/com/flipcash/services/user/UserManager.kt b/services/flipcash/src/commonMain/kotlin/com/flipcash/services/user/UserManager.kt similarity index 98% rename from services/flipcash/src/main/kotlin/com/flipcash/services/user/UserManager.kt rename to services/flipcash/src/commonMain/kotlin/com/flipcash/services/user/UserManager.kt index d733c0db35..260abee535 100644 --- a/services/flipcash/src/main/kotlin/com/flipcash/services/user/UserManager.kt +++ b/services/flipcash/src/commonMain/kotlin/com/flipcash/services/user/UserManager.kt @@ -18,7 +18,6 @@ import com.getcode.opencode.model.financial.usdf import com.getcode.utils.TraceManager import com.getcode.utils.trace import com.hoc081098.channeleventbus.ChannelEventBus -import com.mixpanel.android.mpmetrics.MixpanelAPI import kotlinx.coroutines.flow.MutableStateFlow import kotlinx.coroutines.flow.StateFlow import kotlinx.coroutines.flow.asStateFlow @@ -82,7 +81,7 @@ sealed interface AuthState { @Singleton class UserManager @Inject constructor( private val mnemonicManager: MnemonicManager, - private val mixpanelAPI: MixpanelAPI, + private val analyticsIdentifier: AnalyticsIdentifier, private val eventBus: ChannelEventBus, accountController: AccountController, ) { @@ -223,7 +222,7 @@ class UserManager @Inject constructor( // See AnalyticsIdentity.kt. val distinctId = accountId?.analyticsDistinctId() TraceManager.userId = distinctId - mixpanelAPI.identify(distinctId) + analyticsIdentifier.identify(distinctId) } } diff --git a/services/flipcash/src/main/kotlin/com/flipcash/services/validators/Validator.kt b/services/flipcash/src/commonMain/kotlin/com/flipcash/services/validators/Validator.kt similarity index 100% rename from services/flipcash/src/main/kotlin/com/flipcash/services/validators/Validator.kt rename to services/flipcash/src/commonMain/kotlin/com/flipcash/services/validators/Validator.kt diff --git a/services/flipcash/test-fixtures/build.gradle.kts b/services/flipcash/test-fixtures/build.gradle.kts new file mode 100644 index 0000000000..4ff5c24cc8 --- /dev/null +++ b/services/flipcash/test-fixtures/build.gradle.kts @@ -0,0 +1,16 @@ +plugins { + alias(libs.plugins.flipcash.kmp.app.library) +} + +kotlin { + android { + namespace = "${Gradle.codeNamespace}.services.flipcash.testfixtures" + } + + sourceSets { + commonMain.dependencies { + api(project(":services:flipcash")) + implementation(project(":libs:encryption:chat-cipher")) + } + } +} diff --git a/services/flipcash/src/testFixtures/kotlin/com/flipcash/services/chat/FakeChatCipher.kt b/services/flipcash/test-fixtures/src/commonMain/kotlin/com/flipcash/services/chat/FakeChatCipher.kt similarity index 100% rename from services/flipcash/src/testFixtures/kotlin/com/flipcash/services/chat/FakeChatCipher.kt rename to services/flipcash/test-fixtures/src/commonMain/kotlin/com/flipcash/services/chat/FakeChatCipher.kt diff --git a/settings.gradle.kts b/settings.gradle.kts index 9db5357f60..99cf20e5ba 100644 --- a/settings.gradle.kts +++ b/settings.gradle.kts @@ -254,6 +254,7 @@ include( ":services:opencode", ":services:opencode-compose", ":services:flipcash", + ":services:flipcash:test-fixtures", ":services:flipcash-compose", // common UI From 36386fa1046acab3026b19c2fd6d37108cad45a7 Mon Sep 17 00:00:00 2001 From: Brandon McAnsh Date: Fri, 23 Oct 2026 17:08:48 -0400 Subject: [PATCH 08/11] build(persistence): move the Room database to android+jvm KMP FlipcashDatabase, its DAOs, entities and migrations now live in commonMain. Migrations run on SQLiteConnection, MessageDao's raw query takes a RoomRawQuery, and init() takes a builder factory: Android passes Room.databaseBuilder(context), desktop opens a file through BundledSQLiteDriver. isOpen() stays Android-only, since Room exposes RoomDatabase.isOpen there alone. --- .../shared/chat/FullRefreshMembersTest.kt | 1 + .../shared/chat/RealChatArchiveStoreTest.kt | 1 + .../shared/persistence/db/build.gradle.kts | 61 +++++++---- .../persistence/ChatFeedUpsertClampTest.kt | 0 .../persistence/ChatMetadataCatchUpTest.kt | 0 .../persistence/EncryptedRowMigrationTest.kt | 0 .../persistence/FlipcashDatabaseInitTest.kt | 0 .../TransactionHistoryMigrationTest.kt | 0 .../persistence/UserProfileMigrationTest.kt | 3 +- .../converters/ChatTypeConvertersTest.kt | 0 .../converters/TokenTypeConvertersTest.kt | 0 .../app/persistence/dao/BlockedUserDaoTest.kt | 0 .../app/persistence/dao/ChatArchiveDaoTest.kt | 0 .../app/persistence/dao/ChatDraftDaoTest.kt | 0 .../app/persistence/dao/ChatMemberDaoTest.kt | 0 .../app/persistence/dao/ChatMessageDaoTest.kt | 0 .../dao/ChatMessageUpsertGuardTest.kt | 0 .../persistence/dao/ChatMetadataDaoTest.kt | 0 .../app/persistence/dao/ContactDaoTest.kt | 0 .../app/persistence/dao/LinkPreviewDaoTest.kt | 0 .../app/persistence/dao/MessageDaoTest.kt | 0 .../persistence/dao/PendingMediaDaoTest.kt | 0 .../app/persistence/dao/TokenDaoTest.kt | 0 .../persistence/dao/UnreadBelowBadgeTest.kt | 0 .../app/persistence/FlipcashDatabaseInit.kt | 11 ++ .../app/persistence/FlipcashDatabase.kt | 100 ++++++++++-------- .../app/persistence/UserProfileBackfill.kt | 0 .../converters/ChatTypeConverters.kt | 0 .../converters/TokenTypeConverters.kt | 0 .../app/persistence/dao/BlockedUserDao.kt | 0 .../app/persistence/dao/ChatArchiveDao.kt | 0 .../app/persistence/dao/ChatDraftDao.kt | 0 .../app/persistence/dao/ChatMemberDao.kt | 0 .../app/persistence/dao/ChatMessageDao.kt | 0 .../app/persistence/dao/ChatMetadataDao.kt | 0 .../app/persistence/dao/ContactDao.kt | 0 .../dao/CurrencyCreatorDraftDao.kt | 0 .../app/persistence/dao/LinkPreviewDao.kt | 0 .../app/persistence/dao/MessageDao.kt | 4 +- .../app/persistence/dao/PendingMediaDao.kt | 0 .../flipcash/app/persistence/dao/TokenDao.kt | 0 .../app/persistence/dao/UserProfileDao.kt | 0 .../embedded/LaunchpadMetadataEmbedded.kt | 0 .../embedded/VmMetadataEmbedded.kt | 0 .../persistence/entities/BlockedUserEntity.kt | 0 .../persistence/entities/ChatArchiveEntity.kt | 0 .../persistence/entities/ChatDraftEntity.kt | 0 .../persistence/entities/ChatMemberEntity.kt | 0 .../persistence/entities/ChatMessageEntity.kt | 0 .../entities/ChatMetadataEntity.kt | 0 .../entities/ContactMappingEntity.kt | 0 .../entities/ContactSyncStateEntity.kt | 0 .../entities/CurrencyCreatorDraftEntity.kt | 0 .../persistence/entities/LinkPreviewEntity.kt | 0 .../app/persistence/entities/MessageEntity.kt | 0 .../entities/PendingMediaEntity.kt | 0 .../persistence/entities/SocialLinkEntity.kt | 0 .../app/persistence/entities/TokenEntity.kt | 0 .../entities/TokenValuationEntity.kt | 0 .../persistence/entities/UserProfileEntity.kt | 0 .../entities/UserProfileEntityMapping.kt | 0 .../app/persistence/FlipcashDatabaseInit.kt | 15 +++ .../persistence/sources/MessageDataSource.kt | 4 +- .../sources/UnreadStreamReadinessTest.kt | 1 + .../sources/UserProfileDataSourceTest.kt | 1 + gradle/libs.versions.toml | 2 + 66 files changed, 131 insertions(+), 73 deletions(-) rename apps/flipcash/shared/persistence/db/src/{test => androidHostTest}/kotlin/com/flipcash/app/persistence/ChatFeedUpsertClampTest.kt (100%) rename apps/flipcash/shared/persistence/db/src/{test => androidHostTest}/kotlin/com/flipcash/app/persistence/ChatMetadataCatchUpTest.kt (100%) rename apps/flipcash/shared/persistence/db/src/{test => androidHostTest}/kotlin/com/flipcash/app/persistence/EncryptedRowMigrationTest.kt (100%) rename apps/flipcash/shared/persistence/db/src/{test => androidHostTest}/kotlin/com/flipcash/app/persistence/FlipcashDatabaseInitTest.kt (100%) rename apps/flipcash/shared/persistence/db/src/{test => androidHostTest}/kotlin/com/flipcash/app/persistence/TransactionHistoryMigrationTest.kt (100%) rename apps/flipcash/shared/persistence/db/src/{test => androidHostTest}/kotlin/com/flipcash/app/persistence/UserProfileMigrationTest.kt (98%) rename apps/flipcash/shared/persistence/db/src/{test => androidHostTest}/kotlin/com/flipcash/app/persistence/converters/ChatTypeConvertersTest.kt (100%) rename apps/flipcash/shared/persistence/db/src/{test => androidHostTest}/kotlin/com/flipcash/app/persistence/converters/TokenTypeConvertersTest.kt (100%) rename apps/flipcash/shared/persistence/db/src/{test => androidHostTest}/kotlin/com/flipcash/app/persistence/dao/BlockedUserDaoTest.kt (100%) rename apps/flipcash/shared/persistence/db/src/{test => androidHostTest}/kotlin/com/flipcash/app/persistence/dao/ChatArchiveDaoTest.kt (100%) rename apps/flipcash/shared/persistence/db/src/{test => androidHostTest}/kotlin/com/flipcash/app/persistence/dao/ChatDraftDaoTest.kt (100%) rename apps/flipcash/shared/persistence/db/src/{test => androidHostTest}/kotlin/com/flipcash/app/persistence/dao/ChatMemberDaoTest.kt (100%) rename apps/flipcash/shared/persistence/db/src/{test => androidHostTest}/kotlin/com/flipcash/app/persistence/dao/ChatMessageDaoTest.kt (100%) rename apps/flipcash/shared/persistence/db/src/{test => androidHostTest}/kotlin/com/flipcash/app/persistence/dao/ChatMessageUpsertGuardTest.kt (100%) rename apps/flipcash/shared/persistence/db/src/{test => androidHostTest}/kotlin/com/flipcash/app/persistence/dao/ChatMetadataDaoTest.kt (100%) rename apps/flipcash/shared/persistence/db/src/{test => androidHostTest}/kotlin/com/flipcash/app/persistence/dao/ContactDaoTest.kt (100%) rename apps/flipcash/shared/persistence/db/src/{test => androidHostTest}/kotlin/com/flipcash/app/persistence/dao/LinkPreviewDaoTest.kt (100%) rename apps/flipcash/shared/persistence/db/src/{test => androidHostTest}/kotlin/com/flipcash/app/persistence/dao/MessageDaoTest.kt (100%) rename apps/flipcash/shared/persistence/db/src/{test => androidHostTest}/kotlin/com/flipcash/app/persistence/dao/PendingMediaDaoTest.kt (100%) rename apps/flipcash/shared/persistence/db/src/{test => androidHostTest}/kotlin/com/flipcash/app/persistence/dao/TokenDaoTest.kt (100%) rename apps/flipcash/shared/persistence/db/src/{test => androidHostTest}/kotlin/com/flipcash/app/persistence/dao/UnreadBelowBadgeTest.kt (100%) create mode 100644 apps/flipcash/shared/persistence/db/src/androidMain/kotlin/com/flipcash/app/persistence/FlipcashDatabaseInit.kt rename apps/flipcash/shared/persistence/db/src/{main => commonMain}/kotlin/com/flipcash/app/persistence/FlipcashDatabase.kt (86%) rename apps/flipcash/shared/persistence/db/src/{main => commonMain}/kotlin/com/flipcash/app/persistence/UserProfileBackfill.kt (100%) rename apps/flipcash/shared/persistence/db/src/{main => commonMain}/kotlin/com/flipcash/app/persistence/converters/ChatTypeConverters.kt (100%) rename apps/flipcash/shared/persistence/db/src/{main => commonMain}/kotlin/com/flipcash/app/persistence/converters/TokenTypeConverters.kt (100%) rename apps/flipcash/shared/persistence/db/src/{main => commonMain}/kotlin/com/flipcash/app/persistence/dao/BlockedUserDao.kt (100%) rename apps/flipcash/shared/persistence/db/src/{main => commonMain}/kotlin/com/flipcash/app/persistence/dao/ChatArchiveDao.kt (100%) rename apps/flipcash/shared/persistence/db/src/{main => commonMain}/kotlin/com/flipcash/app/persistence/dao/ChatDraftDao.kt (100%) rename apps/flipcash/shared/persistence/db/src/{main => commonMain}/kotlin/com/flipcash/app/persistence/dao/ChatMemberDao.kt (100%) rename apps/flipcash/shared/persistence/db/src/{main => commonMain}/kotlin/com/flipcash/app/persistence/dao/ChatMessageDao.kt (100%) rename apps/flipcash/shared/persistence/db/src/{main => commonMain}/kotlin/com/flipcash/app/persistence/dao/ChatMetadataDao.kt (100%) rename apps/flipcash/shared/persistence/db/src/{main => commonMain}/kotlin/com/flipcash/app/persistence/dao/ContactDao.kt (100%) rename apps/flipcash/shared/persistence/db/src/{main => commonMain}/kotlin/com/flipcash/app/persistence/dao/CurrencyCreatorDraftDao.kt (100%) rename apps/flipcash/shared/persistence/db/src/{main => commonMain}/kotlin/com/flipcash/app/persistence/dao/LinkPreviewDao.kt (100%) rename apps/flipcash/shared/persistence/db/src/{main => commonMain}/kotlin/com/flipcash/app/persistence/dao/MessageDao.kt (97%) rename apps/flipcash/shared/persistence/db/src/{main => commonMain}/kotlin/com/flipcash/app/persistence/dao/PendingMediaDao.kt (100%) rename apps/flipcash/shared/persistence/db/src/{main => commonMain}/kotlin/com/flipcash/app/persistence/dao/TokenDao.kt (100%) rename apps/flipcash/shared/persistence/db/src/{main => commonMain}/kotlin/com/flipcash/app/persistence/dao/UserProfileDao.kt (100%) rename apps/flipcash/shared/persistence/db/src/{main => commonMain}/kotlin/com/flipcash/app/persistence/embedded/LaunchpadMetadataEmbedded.kt (100%) rename apps/flipcash/shared/persistence/db/src/{main => commonMain}/kotlin/com/flipcash/app/persistence/embedded/VmMetadataEmbedded.kt (100%) rename apps/flipcash/shared/persistence/db/src/{main => commonMain}/kotlin/com/flipcash/app/persistence/entities/BlockedUserEntity.kt (100%) rename apps/flipcash/shared/persistence/db/src/{main => commonMain}/kotlin/com/flipcash/app/persistence/entities/ChatArchiveEntity.kt (100%) rename apps/flipcash/shared/persistence/db/src/{main => commonMain}/kotlin/com/flipcash/app/persistence/entities/ChatDraftEntity.kt (100%) rename apps/flipcash/shared/persistence/db/src/{main => commonMain}/kotlin/com/flipcash/app/persistence/entities/ChatMemberEntity.kt (100%) rename apps/flipcash/shared/persistence/db/src/{main => commonMain}/kotlin/com/flipcash/app/persistence/entities/ChatMessageEntity.kt (100%) rename apps/flipcash/shared/persistence/db/src/{main => commonMain}/kotlin/com/flipcash/app/persistence/entities/ChatMetadataEntity.kt (100%) rename apps/flipcash/shared/persistence/db/src/{main => commonMain}/kotlin/com/flipcash/app/persistence/entities/ContactMappingEntity.kt (100%) rename apps/flipcash/shared/persistence/db/src/{main => commonMain}/kotlin/com/flipcash/app/persistence/entities/ContactSyncStateEntity.kt (100%) rename apps/flipcash/shared/persistence/db/src/{main => commonMain}/kotlin/com/flipcash/app/persistence/entities/CurrencyCreatorDraftEntity.kt (100%) rename apps/flipcash/shared/persistence/db/src/{main => commonMain}/kotlin/com/flipcash/app/persistence/entities/LinkPreviewEntity.kt (100%) rename apps/flipcash/shared/persistence/db/src/{main => commonMain}/kotlin/com/flipcash/app/persistence/entities/MessageEntity.kt (100%) rename apps/flipcash/shared/persistence/db/src/{main => commonMain}/kotlin/com/flipcash/app/persistence/entities/PendingMediaEntity.kt (100%) rename apps/flipcash/shared/persistence/db/src/{main => commonMain}/kotlin/com/flipcash/app/persistence/entities/SocialLinkEntity.kt (100%) rename apps/flipcash/shared/persistence/db/src/{main => commonMain}/kotlin/com/flipcash/app/persistence/entities/TokenEntity.kt (100%) rename apps/flipcash/shared/persistence/db/src/{main => commonMain}/kotlin/com/flipcash/app/persistence/entities/TokenValuationEntity.kt (100%) rename apps/flipcash/shared/persistence/db/src/{main => commonMain}/kotlin/com/flipcash/app/persistence/entities/UserProfileEntity.kt (100%) rename apps/flipcash/shared/persistence/db/src/{main => commonMain}/kotlin/com/flipcash/app/persistence/entities/UserProfileEntityMapping.kt (100%) create mode 100644 apps/flipcash/shared/persistence/db/src/jvmMain/kotlin/com/flipcash/app/persistence/FlipcashDatabaseInit.kt diff --git a/apps/flipcash/shared/chat/src/test/kotlin/com/flipcash/shared/chat/FullRefreshMembersTest.kt b/apps/flipcash/shared/chat/src/test/kotlin/com/flipcash/shared/chat/FullRefreshMembersTest.kt index 44a674844b..9057715047 100644 --- a/apps/flipcash/shared/chat/src/test/kotlin/com/flipcash/shared/chat/FullRefreshMembersTest.kt +++ b/apps/flipcash/shared/chat/src/test/kotlin/com/flipcash/shared/chat/FullRefreshMembersTest.kt @@ -3,6 +3,7 @@ package com.flipcash.shared.chat import android.content.Context import androidx.test.core.app.ApplicationProvider import com.flipcash.app.persistence.FlipcashDatabase +import com.flipcash.app.persistence.init import com.flipcash.app.persistence.sources.ChatMemberDataSource import com.flipcash.app.persistence.sources.mapper.chat.ChatEntityMapper import com.flipcash.services.controllers.EventStreamingController diff --git a/apps/flipcash/shared/chat/src/test/kotlin/com/flipcash/shared/chat/RealChatArchiveStoreTest.kt b/apps/flipcash/shared/chat/src/test/kotlin/com/flipcash/shared/chat/RealChatArchiveStoreTest.kt index 819673697c..996c9270be 100644 --- a/apps/flipcash/shared/chat/src/test/kotlin/com/flipcash/shared/chat/RealChatArchiveStoreTest.kt +++ b/apps/flipcash/shared/chat/src/test/kotlin/com/flipcash/shared/chat/RealChatArchiveStoreTest.kt @@ -3,6 +3,7 @@ package com.flipcash.shared.chat import android.content.Context import androidx.test.core.app.ApplicationProvider import com.flipcash.app.persistence.FlipcashDatabase +import com.flipcash.app.persistence.init import com.flipcash.app.persistence.sources.ChatArchiveDataSource import com.flipcash.services.models.chat.ChatId import com.flipcash.shared.chat.internal.RealChatArchiveStore diff --git a/apps/flipcash/shared/persistence/db/build.gradle.kts b/apps/flipcash/shared/persistence/db/build.gradle.kts index 75f2a790f1..e3e0a706cf 100644 --- a/apps/flipcash/shared/persistence/db/build.gradle.kts +++ b/apps/flipcash/shared/persistence/db/build.gradle.kts @@ -1,32 +1,49 @@ plugins { - alias(libs.plugins.flipcash.android.feature) + alias(libs.plugins.flipcash.kmp.app.library) + alias(libs.plugins.kotlin.ksp) alias(libs.plugins.androidx.room) } -android { - namespace = "${Gradle.flipcashNamespace}.shared.persistence.db" +kotlin { + android { + namespace = "${Gradle.flipcashNamespace}.shared.persistence.db" + } - room { - schemaDirectory("$projectDir/schemas") + sourceSets { + commonMain.dependencies { + implementation(libs.bundles.kotlinx.serialization) + implementation(libs.androidx.room.runtime) + implementation(libs.androidx.room.paging) + implementation(libs.androidx.paging.common) + + implementation(project(":libs:models")) + implementation(project(":libs:encryption:base58")) + implementation(project(":libs:encryption:utils")) + implementation(project(":libs:logging")) + + implementation(project(":services:flipcash")) + } + androidMain.dependencies { + implementation(libs.androidx.room.ktx) + implementation(libs.androidx.paging.runtime) + } + jvmMain.dependencies { + implementation(libs.androidx.sqlite.bundled) + } + getByName("androidHostTest").dependencies { + implementation(kotlin("test")) + implementation(libs.bundles.unit.testing) + implementation(libs.robolectric) + implementation(libs.androidx.room.testing) + } } } -dependencies { - testImplementation(kotlin("test")) - testImplementation(libs.bundles.unit.testing) - testImplementation(libs.robolectric) - testImplementation(libs.androidx.room.testing) - - implementation(libs.bundles.kotlinx.serialization) - - implementation(libs.bundles.room) - implementation(libs.androidx.paging.runtime) - - ksp(libs.androidx.room.compiler) - - implementation(project(":libs:models")) - implementation(project(":libs:encryption:base58")) - implementation(project(":libs:encryption:utils")) +room { + schemaDirectory("$projectDir/schemas") +} - implementation(project(":services:flipcash")) +dependencies { + add("kspAndroid", libs.androidx.room.compiler) + add("kspJvm", libs.androidx.room.compiler) } diff --git a/apps/flipcash/shared/persistence/db/src/test/kotlin/com/flipcash/app/persistence/ChatFeedUpsertClampTest.kt b/apps/flipcash/shared/persistence/db/src/androidHostTest/kotlin/com/flipcash/app/persistence/ChatFeedUpsertClampTest.kt similarity index 100% rename from apps/flipcash/shared/persistence/db/src/test/kotlin/com/flipcash/app/persistence/ChatFeedUpsertClampTest.kt rename to apps/flipcash/shared/persistence/db/src/androidHostTest/kotlin/com/flipcash/app/persistence/ChatFeedUpsertClampTest.kt diff --git a/apps/flipcash/shared/persistence/db/src/test/kotlin/com/flipcash/app/persistence/ChatMetadataCatchUpTest.kt b/apps/flipcash/shared/persistence/db/src/androidHostTest/kotlin/com/flipcash/app/persistence/ChatMetadataCatchUpTest.kt similarity index 100% rename from apps/flipcash/shared/persistence/db/src/test/kotlin/com/flipcash/app/persistence/ChatMetadataCatchUpTest.kt rename to apps/flipcash/shared/persistence/db/src/androidHostTest/kotlin/com/flipcash/app/persistence/ChatMetadataCatchUpTest.kt diff --git a/apps/flipcash/shared/persistence/db/src/test/kotlin/com/flipcash/app/persistence/EncryptedRowMigrationTest.kt b/apps/flipcash/shared/persistence/db/src/androidHostTest/kotlin/com/flipcash/app/persistence/EncryptedRowMigrationTest.kt similarity index 100% rename from apps/flipcash/shared/persistence/db/src/test/kotlin/com/flipcash/app/persistence/EncryptedRowMigrationTest.kt rename to apps/flipcash/shared/persistence/db/src/androidHostTest/kotlin/com/flipcash/app/persistence/EncryptedRowMigrationTest.kt diff --git a/apps/flipcash/shared/persistence/db/src/test/kotlin/com/flipcash/app/persistence/FlipcashDatabaseInitTest.kt b/apps/flipcash/shared/persistence/db/src/androidHostTest/kotlin/com/flipcash/app/persistence/FlipcashDatabaseInitTest.kt similarity index 100% rename from apps/flipcash/shared/persistence/db/src/test/kotlin/com/flipcash/app/persistence/FlipcashDatabaseInitTest.kt rename to apps/flipcash/shared/persistence/db/src/androidHostTest/kotlin/com/flipcash/app/persistence/FlipcashDatabaseInitTest.kt diff --git a/apps/flipcash/shared/persistence/db/src/test/kotlin/com/flipcash/app/persistence/TransactionHistoryMigrationTest.kt b/apps/flipcash/shared/persistence/db/src/androidHostTest/kotlin/com/flipcash/app/persistence/TransactionHistoryMigrationTest.kt similarity index 100% rename from apps/flipcash/shared/persistence/db/src/test/kotlin/com/flipcash/app/persistence/TransactionHistoryMigrationTest.kt rename to apps/flipcash/shared/persistence/db/src/androidHostTest/kotlin/com/flipcash/app/persistence/TransactionHistoryMigrationTest.kt diff --git a/apps/flipcash/shared/persistence/db/src/test/kotlin/com/flipcash/app/persistence/UserProfileMigrationTest.kt b/apps/flipcash/shared/persistence/db/src/androidHostTest/kotlin/com/flipcash/app/persistence/UserProfileMigrationTest.kt similarity index 98% rename from apps/flipcash/shared/persistence/db/src/test/kotlin/com/flipcash/app/persistence/UserProfileMigrationTest.kt rename to apps/flipcash/shared/persistence/db/src/androidHostTest/kotlin/com/flipcash/app/persistence/UserProfileMigrationTest.kt index 60042d32c1..cca91c9547 100644 --- a/apps/flipcash/shared/persistence/db/src/test/kotlin/com/flipcash/app/persistence/UserProfileMigrationTest.kt +++ b/apps/flipcash/shared/persistence/db/src/androidHostTest/kotlin/com/flipcash/app/persistence/UserProfileMigrationTest.kt @@ -5,6 +5,7 @@ import androidx.room.Room import androidx.sqlite.db.SupportSQLiteDatabase import androidx.sqlite.db.SupportSQLiteOpenHelper import androidx.sqlite.db.framework.FrameworkSQLiteOpenHelperFactory +import androidx.sqlite.driver.SupportSQLiteConnection import androidx.test.core.app.ApplicationProvider import com.flipcash.app.persistence.converters.ChatTypeConverters import com.flipcash.app.persistence.converters.SocialAccountSerialized @@ -111,7 +112,7 @@ class UserProfileMigrationTest { arrayOf("u2", 111L, partialProfileJson), ) - FlipcashDatabase.MIGRATION_25_26.migrate(db) + FlipcashDatabase.MIGRATION_25_26.migrate(SupportSQLiteConnection(db)) // One profile row per user (u1 deduped across its two memberships). assertEquals(2, db.count("user_profiles")) diff --git a/apps/flipcash/shared/persistence/db/src/test/kotlin/com/flipcash/app/persistence/converters/ChatTypeConvertersTest.kt b/apps/flipcash/shared/persistence/db/src/androidHostTest/kotlin/com/flipcash/app/persistence/converters/ChatTypeConvertersTest.kt similarity index 100% rename from apps/flipcash/shared/persistence/db/src/test/kotlin/com/flipcash/app/persistence/converters/ChatTypeConvertersTest.kt rename to apps/flipcash/shared/persistence/db/src/androidHostTest/kotlin/com/flipcash/app/persistence/converters/ChatTypeConvertersTest.kt diff --git a/apps/flipcash/shared/persistence/db/src/test/kotlin/com/flipcash/app/persistence/converters/TokenTypeConvertersTest.kt b/apps/flipcash/shared/persistence/db/src/androidHostTest/kotlin/com/flipcash/app/persistence/converters/TokenTypeConvertersTest.kt similarity index 100% rename from apps/flipcash/shared/persistence/db/src/test/kotlin/com/flipcash/app/persistence/converters/TokenTypeConvertersTest.kt rename to apps/flipcash/shared/persistence/db/src/androidHostTest/kotlin/com/flipcash/app/persistence/converters/TokenTypeConvertersTest.kt diff --git a/apps/flipcash/shared/persistence/db/src/test/kotlin/com/flipcash/app/persistence/dao/BlockedUserDaoTest.kt b/apps/flipcash/shared/persistence/db/src/androidHostTest/kotlin/com/flipcash/app/persistence/dao/BlockedUserDaoTest.kt similarity index 100% rename from apps/flipcash/shared/persistence/db/src/test/kotlin/com/flipcash/app/persistence/dao/BlockedUserDaoTest.kt rename to apps/flipcash/shared/persistence/db/src/androidHostTest/kotlin/com/flipcash/app/persistence/dao/BlockedUserDaoTest.kt diff --git a/apps/flipcash/shared/persistence/db/src/test/kotlin/com/flipcash/app/persistence/dao/ChatArchiveDaoTest.kt b/apps/flipcash/shared/persistence/db/src/androidHostTest/kotlin/com/flipcash/app/persistence/dao/ChatArchiveDaoTest.kt similarity index 100% rename from apps/flipcash/shared/persistence/db/src/test/kotlin/com/flipcash/app/persistence/dao/ChatArchiveDaoTest.kt rename to apps/flipcash/shared/persistence/db/src/androidHostTest/kotlin/com/flipcash/app/persistence/dao/ChatArchiveDaoTest.kt diff --git a/apps/flipcash/shared/persistence/db/src/test/kotlin/com/flipcash/app/persistence/dao/ChatDraftDaoTest.kt b/apps/flipcash/shared/persistence/db/src/androidHostTest/kotlin/com/flipcash/app/persistence/dao/ChatDraftDaoTest.kt similarity index 100% rename from apps/flipcash/shared/persistence/db/src/test/kotlin/com/flipcash/app/persistence/dao/ChatDraftDaoTest.kt rename to apps/flipcash/shared/persistence/db/src/androidHostTest/kotlin/com/flipcash/app/persistence/dao/ChatDraftDaoTest.kt diff --git a/apps/flipcash/shared/persistence/db/src/test/kotlin/com/flipcash/app/persistence/dao/ChatMemberDaoTest.kt b/apps/flipcash/shared/persistence/db/src/androidHostTest/kotlin/com/flipcash/app/persistence/dao/ChatMemberDaoTest.kt similarity index 100% rename from apps/flipcash/shared/persistence/db/src/test/kotlin/com/flipcash/app/persistence/dao/ChatMemberDaoTest.kt rename to apps/flipcash/shared/persistence/db/src/androidHostTest/kotlin/com/flipcash/app/persistence/dao/ChatMemberDaoTest.kt diff --git a/apps/flipcash/shared/persistence/db/src/test/kotlin/com/flipcash/app/persistence/dao/ChatMessageDaoTest.kt b/apps/flipcash/shared/persistence/db/src/androidHostTest/kotlin/com/flipcash/app/persistence/dao/ChatMessageDaoTest.kt similarity index 100% rename from apps/flipcash/shared/persistence/db/src/test/kotlin/com/flipcash/app/persistence/dao/ChatMessageDaoTest.kt rename to apps/flipcash/shared/persistence/db/src/androidHostTest/kotlin/com/flipcash/app/persistence/dao/ChatMessageDaoTest.kt diff --git a/apps/flipcash/shared/persistence/db/src/test/kotlin/com/flipcash/app/persistence/dao/ChatMessageUpsertGuardTest.kt b/apps/flipcash/shared/persistence/db/src/androidHostTest/kotlin/com/flipcash/app/persistence/dao/ChatMessageUpsertGuardTest.kt similarity index 100% rename from apps/flipcash/shared/persistence/db/src/test/kotlin/com/flipcash/app/persistence/dao/ChatMessageUpsertGuardTest.kt rename to apps/flipcash/shared/persistence/db/src/androidHostTest/kotlin/com/flipcash/app/persistence/dao/ChatMessageUpsertGuardTest.kt diff --git a/apps/flipcash/shared/persistence/db/src/test/kotlin/com/flipcash/app/persistence/dao/ChatMetadataDaoTest.kt b/apps/flipcash/shared/persistence/db/src/androidHostTest/kotlin/com/flipcash/app/persistence/dao/ChatMetadataDaoTest.kt similarity index 100% rename from apps/flipcash/shared/persistence/db/src/test/kotlin/com/flipcash/app/persistence/dao/ChatMetadataDaoTest.kt rename to apps/flipcash/shared/persistence/db/src/androidHostTest/kotlin/com/flipcash/app/persistence/dao/ChatMetadataDaoTest.kt diff --git a/apps/flipcash/shared/persistence/db/src/test/kotlin/com/flipcash/app/persistence/dao/ContactDaoTest.kt b/apps/flipcash/shared/persistence/db/src/androidHostTest/kotlin/com/flipcash/app/persistence/dao/ContactDaoTest.kt similarity index 100% rename from apps/flipcash/shared/persistence/db/src/test/kotlin/com/flipcash/app/persistence/dao/ContactDaoTest.kt rename to apps/flipcash/shared/persistence/db/src/androidHostTest/kotlin/com/flipcash/app/persistence/dao/ContactDaoTest.kt diff --git a/apps/flipcash/shared/persistence/db/src/test/kotlin/com/flipcash/app/persistence/dao/LinkPreviewDaoTest.kt b/apps/flipcash/shared/persistence/db/src/androidHostTest/kotlin/com/flipcash/app/persistence/dao/LinkPreviewDaoTest.kt similarity index 100% rename from apps/flipcash/shared/persistence/db/src/test/kotlin/com/flipcash/app/persistence/dao/LinkPreviewDaoTest.kt rename to apps/flipcash/shared/persistence/db/src/androidHostTest/kotlin/com/flipcash/app/persistence/dao/LinkPreviewDaoTest.kt diff --git a/apps/flipcash/shared/persistence/db/src/test/kotlin/com/flipcash/app/persistence/dao/MessageDaoTest.kt b/apps/flipcash/shared/persistence/db/src/androidHostTest/kotlin/com/flipcash/app/persistence/dao/MessageDaoTest.kt similarity index 100% rename from apps/flipcash/shared/persistence/db/src/test/kotlin/com/flipcash/app/persistence/dao/MessageDaoTest.kt rename to apps/flipcash/shared/persistence/db/src/androidHostTest/kotlin/com/flipcash/app/persistence/dao/MessageDaoTest.kt diff --git a/apps/flipcash/shared/persistence/db/src/test/kotlin/com/flipcash/app/persistence/dao/PendingMediaDaoTest.kt b/apps/flipcash/shared/persistence/db/src/androidHostTest/kotlin/com/flipcash/app/persistence/dao/PendingMediaDaoTest.kt similarity index 100% rename from apps/flipcash/shared/persistence/db/src/test/kotlin/com/flipcash/app/persistence/dao/PendingMediaDaoTest.kt rename to apps/flipcash/shared/persistence/db/src/androidHostTest/kotlin/com/flipcash/app/persistence/dao/PendingMediaDaoTest.kt diff --git a/apps/flipcash/shared/persistence/db/src/test/kotlin/com/flipcash/app/persistence/dao/TokenDaoTest.kt b/apps/flipcash/shared/persistence/db/src/androidHostTest/kotlin/com/flipcash/app/persistence/dao/TokenDaoTest.kt similarity index 100% rename from apps/flipcash/shared/persistence/db/src/test/kotlin/com/flipcash/app/persistence/dao/TokenDaoTest.kt rename to apps/flipcash/shared/persistence/db/src/androidHostTest/kotlin/com/flipcash/app/persistence/dao/TokenDaoTest.kt diff --git a/apps/flipcash/shared/persistence/db/src/test/kotlin/com/flipcash/app/persistence/dao/UnreadBelowBadgeTest.kt b/apps/flipcash/shared/persistence/db/src/androidHostTest/kotlin/com/flipcash/app/persistence/dao/UnreadBelowBadgeTest.kt similarity index 100% rename from apps/flipcash/shared/persistence/db/src/test/kotlin/com/flipcash/app/persistence/dao/UnreadBelowBadgeTest.kt rename to apps/flipcash/shared/persistence/db/src/androidHostTest/kotlin/com/flipcash/app/persistence/dao/UnreadBelowBadgeTest.kt diff --git a/apps/flipcash/shared/persistence/db/src/androidMain/kotlin/com/flipcash/app/persistence/FlipcashDatabaseInit.kt b/apps/flipcash/shared/persistence/db/src/androidMain/kotlin/com/flipcash/app/persistence/FlipcashDatabaseInit.kt new file mode 100644 index 0000000000..339434e031 --- /dev/null +++ b/apps/flipcash/shared/persistence/db/src/androidMain/kotlin/com/flipcash/app/persistence/FlipcashDatabaseInit.kt @@ -0,0 +1,11 @@ +package com.flipcash.app.persistence + +import android.content.Context +import androidx.room.Room + +/** Opens the per-account database in the app's database directory. */ +fun FlipcashDatabase.Companion.init(context: Context, entropyB64: String) = + init(entropyB64) { name -> Room.databaseBuilder(context, FlipcashDatabase::class.java, name) } + +/** Whether the current database's connection is open. Room exposes this on Android only. */ +fun FlipcashDatabase.Companion.isOpen() = getInstance()?.isOpen == true diff --git a/apps/flipcash/shared/persistence/db/src/main/kotlin/com/flipcash/app/persistence/FlipcashDatabase.kt b/apps/flipcash/shared/persistence/db/src/commonMain/kotlin/com/flipcash/app/persistence/FlipcashDatabase.kt similarity index 86% rename from apps/flipcash/shared/persistence/db/src/main/kotlin/com/flipcash/app/persistence/FlipcashDatabase.kt rename to apps/flipcash/shared/persistence/db/src/commonMain/kotlin/com/flipcash/app/persistence/FlipcashDatabase.kt index 309f74ac3d..670f7326c1 100644 --- a/apps/flipcash/shared/persistence/db/src/main/kotlin/com/flipcash/app/persistence/FlipcashDatabase.kt +++ b/apps/flipcash/shared/persistence/db/src/commonMain/kotlin/com/flipcash/app/persistence/FlipcashDatabase.kt @@ -1,17 +1,16 @@ package com.flipcash.app.persistence -import android.content.Context import androidx.room.AutoMigration +import androidx.room.ConstructedBy import androidx.room.Database import androidx.room.DeleteColumn import androidx.room.DeleteTable -import androidx.room.Room import androidx.room.RoomDatabase +import androidx.room.RoomDatabaseConstructor import androidx.room.TypeConverters import androidx.room.migration.AutoMigrationSpec import androidx.room.migration.Migration import androidx.sqlite.SQLiteConnection -import androidx.sqlite.db.SupportSQLiteDatabase import androidx.sqlite.execSQL import kotlinx.coroutines.flow.MutableStateFlow import kotlinx.coroutines.flow.StateFlow @@ -51,6 +50,7 @@ import com.getcode.utils.TraceType import com.getcode.utils.trace import com.getcode.vendor.Base58 import com.getcode.utils.subByteArray +import kotlin.jvm.Synchronized @Database( entities = [ @@ -130,6 +130,7 @@ import com.getcode.utils.subByteArray version = 45, ) @TypeConverters(TokenTypeConverters::class, ChatTypeConverters::class) +@ConstructedBy(FlipcashDatabaseConstructor::class) abstract class FlipcashDatabase : RoomDatabase() { abstract fun messageDao(): MessageDao @@ -147,22 +148,22 @@ abstract class FlipcashDatabase : RoomDatabase() { abstract fun pendingMediaDao(): PendingMediaDao class Migration1To2 : Migration(1, 2), AutoMigrationSpec { - override fun migrate(db: SupportSQLiteDatabase) { - db.execSQL("DELETE FROM messages") + override fun migrate(connection: SQLiteConnection) { + connection.execSQL("DELETE FROM messages") } } class Migration3To4 : Migration(3, 4), AutoMigrationSpec { - override fun migrate(db: SupportSQLiteDatabase) { - db.execSQL("DELETE FROM pool_metadata") - db.execSQL("DELETE FROM pool_bet_metadata") + override fun migrate(connection: SQLiteConnection) { + connection.execSQL("DELETE FROM pool_metadata") + connection.execSQL("DELETE FROM pool_bet_metadata") } } class Migration4To5 : Migration(4, 5), AutoMigrationSpec { - override fun migrate(db: SupportSQLiteDatabase) { - db.execSQL("DELETE FROM pool_metadata") - db.execSQL("DELETE FROM pool_bet_metadata") + override fun migrate(connection: SQLiteConnection) { + connection.execSQL("DELETE FROM pool_metadata") + connection.execSQL("DELETE FROM pool_bet_metadata") } } @@ -181,27 +182,27 @@ abstract class FlipcashDatabase : RoomDatabase() { ), ) class Migration5To6 : Migration(5, 6), AutoMigrationSpec { - override fun migrate(db: SupportSQLiteDatabase) { - db.execSQL("DELETE FROM pool_metadata") - db.execSQL("DELETE FROM pool_bet_metadata") + override fun migrate(connection: SQLiteConnection) { + connection.execSQL("DELETE FROM pool_metadata") + connection.execSQL("DELETE FROM pool_bet_metadata") } } class Migration6To7 : Migration(6, 7), AutoMigrationSpec { - override fun migrate(db: SupportSQLiteDatabase) { - db.execSQL("DELETE FROM messages") + override fun migrate(connection: SQLiteConnection) { + connection.execSQL("DELETE FROM messages") } } class Migration7To8 : Migration(7, 8), AutoMigrationSpec { - override fun migrate(db: SupportSQLiteDatabase) { - db.execSQL("DELETE FROM messages") + override fun migrate(connection: SQLiteConnection) { + connection.execSQL("DELETE FROM messages") } } class Migration9To10 : Migration(9, 10), AutoMigrationSpec { - override fun migrate(db: SupportSQLiteDatabase) { - db.execSQL("DELETE FROM messages") + override fun migrate(connection: SQLiteConnection) { + connection.execSQL("DELETE FROM messages") } } @@ -213,9 +214,9 @@ abstract class FlipcashDatabase : RoomDatabase() { class Migration10To11 : Migration(10, 11), AutoMigrationSpec class Migration12To13 : Migration(12, 13), AutoMigrationSpec { - override fun migrate(db: SupportSQLiteDatabase) { - db.execSQL("DELETE FROM tokens") - db.execSQL("DELETE FROM token_valuation") + override fun migrate(connection: SQLiteConnection) { + connection.execSQL("DELETE FROM tokens") + connection.execSQL("DELETE FROM token_valuation") } } @@ -225,8 +226,8 @@ abstract class FlipcashDatabase : RoomDatabase() { // in onPostMigrate so they keep resolving after the rename instead of falling // through to UNKNOWN. class Migration22To23 : AutoMigrationSpec { - override fun onPostMigrate(db: SupportSQLiteDatabase) { - db.execSQL("UPDATE chat_metadata SET chat_type = 'CONTACT_DM' WHERE chat_type = 'DM'") + override fun onPostMigrate(connection: SQLiteConnection) { + connection.execSQL("UPDATE chat_metadata SET chat_type = 'CONTACT_DM' WHERE chat_type = 'DM'") } } @@ -242,9 +243,8 @@ abstract class FlipcashDatabase : RoomDatabase() { * descending re-seed, and re-fetches the recent feed from scratch; paging refills older * history on demand. * - * Takes the [SQLiteConnection] overload rather than the [SupportSQLiteDatabase] one used by - * [Migration22To23]: the latter only fires when Room is built without a driver, so a future - * `setDriver` would turn the delete into a silent no-op. + * Every migration here takes the [SQLiteConnection] overload: the `SupportSQLiteDatabase` one + * only fires when Room is built without a driver, and the desktop build sets one. */ class Migration28To29 : AutoMigrationSpec { override fun onPostMigrate(connection: SQLiteConnection) { @@ -331,10 +331,10 @@ abstract class FlipcashDatabase : RoomDatabase() { * compatibility with the minSdk-29 SQLite build. */ val MIGRATION_25_26 = object : Migration(25, 26) { - override fun migrate(db: SupportSQLiteDatabase) { + override fun migrate(connection: SQLiteConnection) { // 1. New normalized table. Column set must match UserProfileEntity so // Room's post-migration schema validation passes. - db.execSQL( + connection.execSQL( "CREATE TABLE IF NOT EXISTS `user_profiles` (" + "`user_id_hex` TEXT NOT NULL, " + "`display_name` TEXT NOT NULL, " + @@ -352,45 +352,45 @@ abstract class FlipcashDatabase : RoomDatabase() { // the full profile, so insert it first; blocked_users (name+avatar only) // fills in users not in any chat. display_name is a placeholder until // the backfill parses the blob. - db.execSQL( + connection.execSQL( "INSERT OR IGNORE INTO user_profiles (user_id_hex, display_name, pending_migration_json) " + "SELECT user_id_hex, '', user_profile_json FROM chat_members " + "WHERE user_profile_json IS NOT NULL" ) - db.execSQL( + connection.execSQL( "INSERT OR IGNORE INTO user_profiles (user_id_hex, display_name, pending_migration_json) " + "SELECT user_id_hex, '', user_profile_json FROM blocked_users " + "WHERE user_profile_json IS NOT NULL" ) // 3. Drop the duplicated blob column from chat_members via table-recreate. - db.execSQL( + connection.execSQL( "CREATE TABLE `chat_members_new` (" + "`chat_id_hex` TEXT NOT NULL, " + "`user_id_hex` TEXT NOT NULL, " + "`pointers_json` TEXT, " + "PRIMARY KEY(`chat_id_hex`, `user_id_hex`))" ) - db.execSQL( + connection.execSQL( "INSERT INTO `chat_members_new` (chat_id_hex, user_id_hex, pointers_json) " + "SELECT chat_id_hex, user_id_hex, pointers_json FROM chat_members" ) - db.execSQL("DROP TABLE chat_members") - db.execSQL("ALTER TABLE chat_members_new RENAME TO chat_members") + connection.execSQL("DROP TABLE chat_members") + connection.execSQL("ALTER TABLE chat_members_new RENAME TO chat_members") // 4. Same for blocked_users. - db.execSQL( + connection.execSQL( "CREATE TABLE `blocked_users_new` (" + "`user_id_hex` TEXT NOT NULL, " + "`blocked_at_epoch_ms` INTEGER NOT NULL, " + "PRIMARY KEY(`user_id_hex`))" ) - db.execSQL( + connection.execSQL( "INSERT INTO `blocked_users_new` (user_id_hex, blocked_at_epoch_ms) " + "SELECT user_id_hex, blocked_at_epoch_ms FROM blocked_users" ) - db.execSQL("DROP TABLE blocked_users") - db.execSQL("ALTER TABLE blocked_users_new RENAME TO blocked_users") + connection.execSQL("DROP TABLE blocked_users") + connection.execSQL("ALTER TABLE blocked_users_new RENAME TO blocked_users") } } @@ -411,10 +411,12 @@ abstract class FlipcashDatabase : RoomDatabase() { private const val dbNamePrefix = "fcash_database" - fun isOpen() = instance?.isOpen == true - + /** + * Opens the per-account database. [builder] creates the platform's Room builder for the file + * name; the Android and desktop `init` overloads supply it. + */ @Synchronized - fun init(context: Context, entropyB64: String) { + fun init(entropyB64: String, builder: (name: String) -> RoomDatabase.Builder) { val dbUniqueName = Base58.encode(entropyB64.toByteArray().subByteArray(0, 6)) val targetName = "$dbNamePrefix-$dbUniqueName.db" @@ -433,9 +435,9 @@ abstract class FlipcashDatabase : RoomDatabase() { dbName = targetName instance = - Room.databaseBuilder(context, FlipcashDatabase::class.java, dbName) + builder(dbName) .addMigrations(MIGRATION_25_26) - .fallbackToDestructiveMigration() + .fallbackToDestructiveMigration(dropAllTables = false) .build() trace("database init end", type = TraceType.Process) @@ -449,4 +451,10 @@ abstract class FlipcashDatabase : RoomDatabase() { } } } -} \ No newline at end of file +} + +// Room generates the actual for each target. +@Suppress("KotlinNoActualForExpect") +expect object FlipcashDatabaseConstructor : RoomDatabaseConstructor { + override fun initialize(): FlipcashDatabase +} diff --git a/apps/flipcash/shared/persistence/db/src/main/kotlin/com/flipcash/app/persistence/UserProfileBackfill.kt b/apps/flipcash/shared/persistence/db/src/commonMain/kotlin/com/flipcash/app/persistence/UserProfileBackfill.kt similarity index 100% rename from apps/flipcash/shared/persistence/db/src/main/kotlin/com/flipcash/app/persistence/UserProfileBackfill.kt rename to apps/flipcash/shared/persistence/db/src/commonMain/kotlin/com/flipcash/app/persistence/UserProfileBackfill.kt diff --git a/apps/flipcash/shared/persistence/db/src/main/kotlin/com/flipcash/app/persistence/converters/ChatTypeConverters.kt b/apps/flipcash/shared/persistence/db/src/commonMain/kotlin/com/flipcash/app/persistence/converters/ChatTypeConverters.kt similarity index 100% rename from apps/flipcash/shared/persistence/db/src/main/kotlin/com/flipcash/app/persistence/converters/ChatTypeConverters.kt rename to apps/flipcash/shared/persistence/db/src/commonMain/kotlin/com/flipcash/app/persistence/converters/ChatTypeConverters.kt diff --git a/apps/flipcash/shared/persistence/db/src/main/kotlin/com/flipcash/app/persistence/converters/TokenTypeConverters.kt b/apps/flipcash/shared/persistence/db/src/commonMain/kotlin/com/flipcash/app/persistence/converters/TokenTypeConverters.kt similarity index 100% rename from apps/flipcash/shared/persistence/db/src/main/kotlin/com/flipcash/app/persistence/converters/TokenTypeConverters.kt rename to apps/flipcash/shared/persistence/db/src/commonMain/kotlin/com/flipcash/app/persistence/converters/TokenTypeConverters.kt diff --git a/apps/flipcash/shared/persistence/db/src/main/kotlin/com/flipcash/app/persistence/dao/BlockedUserDao.kt b/apps/flipcash/shared/persistence/db/src/commonMain/kotlin/com/flipcash/app/persistence/dao/BlockedUserDao.kt similarity index 100% rename from apps/flipcash/shared/persistence/db/src/main/kotlin/com/flipcash/app/persistence/dao/BlockedUserDao.kt rename to apps/flipcash/shared/persistence/db/src/commonMain/kotlin/com/flipcash/app/persistence/dao/BlockedUserDao.kt diff --git a/apps/flipcash/shared/persistence/db/src/main/kotlin/com/flipcash/app/persistence/dao/ChatArchiveDao.kt b/apps/flipcash/shared/persistence/db/src/commonMain/kotlin/com/flipcash/app/persistence/dao/ChatArchiveDao.kt similarity index 100% rename from apps/flipcash/shared/persistence/db/src/main/kotlin/com/flipcash/app/persistence/dao/ChatArchiveDao.kt rename to apps/flipcash/shared/persistence/db/src/commonMain/kotlin/com/flipcash/app/persistence/dao/ChatArchiveDao.kt diff --git a/apps/flipcash/shared/persistence/db/src/main/kotlin/com/flipcash/app/persistence/dao/ChatDraftDao.kt b/apps/flipcash/shared/persistence/db/src/commonMain/kotlin/com/flipcash/app/persistence/dao/ChatDraftDao.kt similarity index 100% rename from apps/flipcash/shared/persistence/db/src/main/kotlin/com/flipcash/app/persistence/dao/ChatDraftDao.kt rename to apps/flipcash/shared/persistence/db/src/commonMain/kotlin/com/flipcash/app/persistence/dao/ChatDraftDao.kt diff --git a/apps/flipcash/shared/persistence/db/src/main/kotlin/com/flipcash/app/persistence/dao/ChatMemberDao.kt b/apps/flipcash/shared/persistence/db/src/commonMain/kotlin/com/flipcash/app/persistence/dao/ChatMemberDao.kt similarity index 100% rename from apps/flipcash/shared/persistence/db/src/main/kotlin/com/flipcash/app/persistence/dao/ChatMemberDao.kt rename to apps/flipcash/shared/persistence/db/src/commonMain/kotlin/com/flipcash/app/persistence/dao/ChatMemberDao.kt diff --git a/apps/flipcash/shared/persistence/db/src/main/kotlin/com/flipcash/app/persistence/dao/ChatMessageDao.kt b/apps/flipcash/shared/persistence/db/src/commonMain/kotlin/com/flipcash/app/persistence/dao/ChatMessageDao.kt similarity index 100% rename from apps/flipcash/shared/persistence/db/src/main/kotlin/com/flipcash/app/persistence/dao/ChatMessageDao.kt rename to apps/flipcash/shared/persistence/db/src/commonMain/kotlin/com/flipcash/app/persistence/dao/ChatMessageDao.kt diff --git a/apps/flipcash/shared/persistence/db/src/main/kotlin/com/flipcash/app/persistence/dao/ChatMetadataDao.kt b/apps/flipcash/shared/persistence/db/src/commonMain/kotlin/com/flipcash/app/persistence/dao/ChatMetadataDao.kt similarity index 100% rename from apps/flipcash/shared/persistence/db/src/main/kotlin/com/flipcash/app/persistence/dao/ChatMetadataDao.kt rename to apps/flipcash/shared/persistence/db/src/commonMain/kotlin/com/flipcash/app/persistence/dao/ChatMetadataDao.kt diff --git a/apps/flipcash/shared/persistence/db/src/main/kotlin/com/flipcash/app/persistence/dao/ContactDao.kt b/apps/flipcash/shared/persistence/db/src/commonMain/kotlin/com/flipcash/app/persistence/dao/ContactDao.kt similarity index 100% rename from apps/flipcash/shared/persistence/db/src/main/kotlin/com/flipcash/app/persistence/dao/ContactDao.kt rename to apps/flipcash/shared/persistence/db/src/commonMain/kotlin/com/flipcash/app/persistence/dao/ContactDao.kt diff --git a/apps/flipcash/shared/persistence/db/src/main/kotlin/com/flipcash/app/persistence/dao/CurrencyCreatorDraftDao.kt b/apps/flipcash/shared/persistence/db/src/commonMain/kotlin/com/flipcash/app/persistence/dao/CurrencyCreatorDraftDao.kt similarity index 100% rename from apps/flipcash/shared/persistence/db/src/main/kotlin/com/flipcash/app/persistence/dao/CurrencyCreatorDraftDao.kt rename to apps/flipcash/shared/persistence/db/src/commonMain/kotlin/com/flipcash/app/persistence/dao/CurrencyCreatorDraftDao.kt diff --git a/apps/flipcash/shared/persistence/db/src/main/kotlin/com/flipcash/app/persistence/dao/LinkPreviewDao.kt b/apps/flipcash/shared/persistence/db/src/commonMain/kotlin/com/flipcash/app/persistence/dao/LinkPreviewDao.kt similarity index 100% rename from apps/flipcash/shared/persistence/db/src/main/kotlin/com/flipcash/app/persistence/dao/LinkPreviewDao.kt rename to apps/flipcash/shared/persistence/db/src/commonMain/kotlin/com/flipcash/app/persistence/dao/LinkPreviewDao.kt diff --git a/apps/flipcash/shared/persistence/db/src/main/kotlin/com/flipcash/app/persistence/dao/MessageDao.kt b/apps/flipcash/shared/persistence/db/src/commonMain/kotlin/com/flipcash/app/persistence/dao/MessageDao.kt similarity index 97% rename from apps/flipcash/shared/persistence/db/src/main/kotlin/com/flipcash/app/persistence/dao/MessageDao.kt rename to apps/flipcash/shared/persistence/db/src/commonMain/kotlin/com/flipcash/app/persistence/dao/MessageDao.kt index 6b9bc75c02..77a4986179 100644 --- a/apps/flipcash/shared/persistence/db/src/main/kotlin/com/flipcash/app/persistence/dao/MessageDao.kt +++ b/apps/flipcash/shared/persistence/db/src/commonMain/kotlin/com/flipcash/app/persistence/dao/MessageDao.kt @@ -7,7 +7,7 @@ import androidx.room.OnConflictStrategy import androidx.room.Query import androidx.room.RawQuery import androidx.room.Transaction -import androidx.sqlite.db.SupportSQLiteQuery +import androidx.room.RoomRawQuery import com.flipcash.app.persistence.entities.MessageEntity import com.getcode.utils.base58 import kotlinx.coroutines.flow.Flow @@ -34,7 +34,7 @@ interface MessageDao { fun observeMessageById(id: List): Flow = observeMessageById(id.base58) @RawQuery - suspend fun queryDirectly(query: SupportSQLiteQuery): List + suspend fun queryDirectly(query: RoomRawQuery): List @Query("SELECT * FROM messages ORDER BY timestamp DESC LIMIT 1") suspend fun getNewestMessage(): MessageEntity? diff --git a/apps/flipcash/shared/persistence/db/src/main/kotlin/com/flipcash/app/persistence/dao/PendingMediaDao.kt b/apps/flipcash/shared/persistence/db/src/commonMain/kotlin/com/flipcash/app/persistence/dao/PendingMediaDao.kt similarity index 100% rename from apps/flipcash/shared/persistence/db/src/main/kotlin/com/flipcash/app/persistence/dao/PendingMediaDao.kt rename to apps/flipcash/shared/persistence/db/src/commonMain/kotlin/com/flipcash/app/persistence/dao/PendingMediaDao.kt diff --git a/apps/flipcash/shared/persistence/db/src/main/kotlin/com/flipcash/app/persistence/dao/TokenDao.kt b/apps/flipcash/shared/persistence/db/src/commonMain/kotlin/com/flipcash/app/persistence/dao/TokenDao.kt similarity index 100% rename from apps/flipcash/shared/persistence/db/src/main/kotlin/com/flipcash/app/persistence/dao/TokenDao.kt rename to apps/flipcash/shared/persistence/db/src/commonMain/kotlin/com/flipcash/app/persistence/dao/TokenDao.kt diff --git a/apps/flipcash/shared/persistence/db/src/main/kotlin/com/flipcash/app/persistence/dao/UserProfileDao.kt b/apps/flipcash/shared/persistence/db/src/commonMain/kotlin/com/flipcash/app/persistence/dao/UserProfileDao.kt similarity index 100% rename from apps/flipcash/shared/persistence/db/src/main/kotlin/com/flipcash/app/persistence/dao/UserProfileDao.kt rename to apps/flipcash/shared/persistence/db/src/commonMain/kotlin/com/flipcash/app/persistence/dao/UserProfileDao.kt diff --git a/apps/flipcash/shared/persistence/db/src/main/kotlin/com/flipcash/app/persistence/embedded/LaunchpadMetadataEmbedded.kt b/apps/flipcash/shared/persistence/db/src/commonMain/kotlin/com/flipcash/app/persistence/embedded/LaunchpadMetadataEmbedded.kt similarity index 100% rename from apps/flipcash/shared/persistence/db/src/main/kotlin/com/flipcash/app/persistence/embedded/LaunchpadMetadataEmbedded.kt rename to apps/flipcash/shared/persistence/db/src/commonMain/kotlin/com/flipcash/app/persistence/embedded/LaunchpadMetadataEmbedded.kt diff --git a/apps/flipcash/shared/persistence/db/src/main/kotlin/com/flipcash/app/persistence/embedded/VmMetadataEmbedded.kt b/apps/flipcash/shared/persistence/db/src/commonMain/kotlin/com/flipcash/app/persistence/embedded/VmMetadataEmbedded.kt similarity index 100% rename from apps/flipcash/shared/persistence/db/src/main/kotlin/com/flipcash/app/persistence/embedded/VmMetadataEmbedded.kt rename to apps/flipcash/shared/persistence/db/src/commonMain/kotlin/com/flipcash/app/persistence/embedded/VmMetadataEmbedded.kt diff --git a/apps/flipcash/shared/persistence/db/src/main/kotlin/com/flipcash/app/persistence/entities/BlockedUserEntity.kt b/apps/flipcash/shared/persistence/db/src/commonMain/kotlin/com/flipcash/app/persistence/entities/BlockedUserEntity.kt similarity index 100% rename from apps/flipcash/shared/persistence/db/src/main/kotlin/com/flipcash/app/persistence/entities/BlockedUserEntity.kt rename to apps/flipcash/shared/persistence/db/src/commonMain/kotlin/com/flipcash/app/persistence/entities/BlockedUserEntity.kt diff --git a/apps/flipcash/shared/persistence/db/src/main/kotlin/com/flipcash/app/persistence/entities/ChatArchiveEntity.kt b/apps/flipcash/shared/persistence/db/src/commonMain/kotlin/com/flipcash/app/persistence/entities/ChatArchiveEntity.kt similarity index 100% rename from apps/flipcash/shared/persistence/db/src/main/kotlin/com/flipcash/app/persistence/entities/ChatArchiveEntity.kt rename to apps/flipcash/shared/persistence/db/src/commonMain/kotlin/com/flipcash/app/persistence/entities/ChatArchiveEntity.kt diff --git a/apps/flipcash/shared/persistence/db/src/main/kotlin/com/flipcash/app/persistence/entities/ChatDraftEntity.kt b/apps/flipcash/shared/persistence/db/src/commonMain/kotlin/com/flipcash/app/persistence/entities/ChatDraftEntity.kt similarity index 100% rename from apps/flipcash/shared/persistence/db/src/main/kotlin/com/flipcash/app/persistence/entities/ChatDraftEntity.kt rename to apps/flipcash/shared/persistence/db/src/commonMain/kotlin/com/flipcash/app/persistence/entities/ChatDraftEntity.kt diff --git a/apps/flipcash/shared/persistence/db/src/main/kotlin/com/flipcash/app/persistence/entities/ChatMemberEntity.kt b/apps/flipcash/shared/persistence/db/src/commonMain/kotlin/com/flipcash/app/persistence/entities/ChatMemberEntity.kt similarity index 100% rename from apps/flipcash/shared/persistence/db/src/main/kotlin/com/flipcash/app/persistence/entities/ChatMemberEntity.kt rename to apps/flipcash/shared/persistence/db/src/commonMain/kotlin/com/flipcash/app/persistence/entities/ChatMemberEntity.kt diff --git a/apps/flipcash/shared/persistence/db/src/main/kotlin/com/flipcash/app/persistence/entities/ChatMessageEntity.kt b/apps/flipcash/shared/persistence/db/src/commonMain/kotlin/com/flipcash/app/persistence/entities/ChatMessageEntity.kt similarity index 100% rename from apps/flipcash/shared/persistence/db/src/main/kotlin/com/flipcash/app/persistence/entities/ChatMessageEntity.kt rename to apps/flipcash/shared/persistence/db/src/commonMain/kotlin/com/flipcash/app/persistence/entities/ChatMessageEntity.kt diff --git a/apps/flipcash/shared/persistence/db/src/main/kotlin/com/flipcash/app/persistence/entities/ChatMetadataEntity.kt b/apps/flipcash/shared/persistence/db/src/commonMain/kotlin/com/flipcash/app/persistence/entities/ChatMetadataEntity.kt similarity index 100% rename from apps/flipcash/shared/persistence/db/src/main/kotlin/com/flipcash/app/persistence/entities/ChatMetadataEntity.kt rename to apps/flipcash/shared/persistence/db/src/commonMain/kotlin/com/flipcash/app/persistence/entities/ChatMetadataEntity.kt diff --git a/apps/flipcash/shared/persistence/db/src/main/kotlin/com/flipcash/app/persistence/entities/ContactMappingEntity.kt b/apps/flipcash/shared/persistence/db/src/commonMain/kotlin/com/flipcash/app/persistence/entities/ContactMappingEntity.kt similarity index 100% rename from apps/flipcash/shared/persistence/db/src/main/kotlin/com/flipcash/app/persistence/entities/ContactMappingEntity.kt rename to apps/flipcash/shared/persistence/db/src/commonMain/kotlin/com/flipcash/app/persistence/entities/ContactMappingEntity.kt diff --git a/apps/flipcash/shared/persistence/db/src/main/kotlin/com/flipcash/app/persistence/entities/ContactSyncStateEntity.kt b/apps/flipcash/shared/persistence/db/src/commonMain/kotlin/com/flipcash/app/persistence/entities/ContactSyncStateEntity.kt similarity index 100% rename from apps/flipcash/shared/persistence/db/src/main/kotlin/com/flipcash/app/persistence/entities/ContactSyncStateEntity.kt rename to apps/flipcash/shared/persistence/db/src/commonMain/kotlin/com/flipcash/app/persistence/entities/ContactSyncStateEntity.kt diff --git a/apps/flipcash/shared/persistence/db/src/main/kotlin/com/flipcash/app/persistence/entities/CurrencyCreatorDraftEntity.kt b/apps/flipcash/shared/persistence/db/src/commonMain/kotlin/com/flipcash/app/persistence/entities/CurrencyCreatorDraftEntity.kt similarity index 100% rename from apps/flipcash/shared/persistence/db/src/main/kotlin/com/flipcash/app/persistence/entities/CurrencyCreatorDraftEntity.kt rename to apps/flipcash/shared/persistence/db/src/commonMain/kotlin/com/flipcash/app/persistence/entities/CurrencyCreatorDraftEntity.kt diff --git a/apps/flipcash/shared/persistence/db/src/main/kotlin/com/flipcash/app/persistence/entities/LinkPreviewEntity.kt b/apps/flipcash/shared/persistence/db/src/commonMain/kotlin/com/flipcash/app/persistence/entities/LinkPreviewEntity.kt similarity index 100% rename from apps/flipcash/shared/persistence/db/src/main/kotlin/com/flipcash/app/persistence/entities/LinkPreviewEntity.kt rename to apps/flipcash/shared/persistence/db/src/commonMain/kotlin/com/flipcash/app/persistence/entities/LinkPreviewEntity.kt diff --git a/apps/flipcash/shared/persistence/db/src/main/kotlin/com/flipcash/app/persistence/entities/MessageEntity.kt b/apps/flipcash/shared/persistence/db/src/commonMain/kotlin/com/flipcash/app/persistence/entities/MessageEntity.kt similarity index 100% rename from apps/flipcash/shared/persistence/db/src/main/kotlin/com/flipcash/app/persistence/entities/MessageEntity.kt rename to apps/flipcash/shared/persistence/db/src/commonMain/kotlin/com/flipcash/app/persistence/entities/MessageEntity.kt diff --git a/apps/flipcash/shared/persistence/db/src/main/kotlin/com/flipcash/app/persistence/entities/PendingMediaEntity.kt b/apps/flipcash/shared/persistence/db/src/commonMain/kotlin/com/flipcash/app/persistence/entities/PendingMediaEntity.kt similarity index 100% rename from apps/flipcash/shared/persistence/db/src/main/kotlin/com/flipcash/app/persistence/entities/PendingMediaEntity.kt rename to apps/flipcash/shared/persistence/db/src/commonMain/kotlin/com/flipcash/app/persistence/entities/PendingMediaEntity.kt diff --git a/apps/flipcash/shared/persistence/db/src/main/kotlin/com/flipcash/app/persistence/entities/SocialLinkEntity.kt b/apps/flipcash/shared/persistence/db/src/commonMain/kotlin/com/flipcash/app/persistence/entities/SocialLinkEntity.kt similarity index 100% rename from apps/flipcash/shared/persistence/db/src/main/kotlin/com/flipcash/app/persistence/entities/SocialLinkEntity.kt rename to apps/flipcash/shared/persistence/db/src/commonMain/kotlin/com/flipcash/app/persistence/entities/SocialLinkEntity.kt diff --git a/apps/flipcash/shared/persistence/db/src/main/kotlin/com/flipcash/app/persistence/entities/TokenEntity.kt b/apps/flipcash/shared/persistence/db/src/commonMain/kotlin/com/flipcash/app/persistence/entities/TokenEntity.kt similarity index 100% rename from apps/flipcash/shared/persistence/db/src/main/kotlin/com/flipcash/app/persistence/entities/TokenEntity.kt rename to apps/flipcash/shared/persistence/db/src/commonMain/kotlin/com/flipcash/app/persistence/entities/TokenEntity.kt diff --git a/apps/flipcash/shared/persistence/db/src/main/kotlin/com/flipcash/app/persistence/entities/TokenValuationEntity.kt b/apps/flipcash/shared/persistence/db/src/commonMain/kotlin/com/flipcash/app/persistence/entities/TokenValuationEntity.kt similarity index 100% rename from apps/flipcash/shared/persistence/db/src/main/kotlin/com/flipcash/app/persistence/entities/TokenValuationEntity.kt rename to apps/flipcash/shared/persistence/db/src/commonMain/kotlin/com/flipcash/app/persistence/entities/TokenValuationEntity.kt diff --git a/apps/flipcash/shared/persistence/db/src/main/kotlin/com/flipcash/app/persistence/entities/UserProfileEntity.kt b/apps/flipcash/shared/persistence/db/src/commonMain/kotlin/com/flipcash/app/persistence/entities/UserProfileEntity.kt similarity index 100% rename from apps/flipcash/shared/persistence/db/src/main/kotlin/com/flipcash/app/persistence/entities/UserProfileEntity.kt rename to apps/flipcash/shared/persistence/db/src/commonMain/kotlin/com/flipcash/app/persistence/entities/UserProfileEntity.kt diff --git a/apps/flipcash/shared/persistence/db/src/main/kotlin/com/flipcash/app/persistence/entities/UserProfileEntityMapping.kt b/apps/flipcash/shared/persistence/db/src/commonMain/kotlin/com/flipcash/app/persistence/entities/UserProfileEntityMapping.kt similarity index 100% rename from apps/flipcash/shared/persistence/db/src/main/kotlin/com/flipcash/app/persistence/entities/UserProfileEntityMapping.kt rename to apps/flipcash/shared/persistence/db/src/commonMain/kotlin/com/flipcash/app/persistence/entities/UserProfileEntityMapping.kt diff --git a/apps/flipcash/shared/persistence/db/src/jvmMain/kotlin/com/flipcash/app/persistence/FlipcashDatabaseInit.kt b/apps/flipcash/shared/persistence/db/src/jvmMain/kotlin/com/flipcash/app/persistence/FlipcashDatabaseInit.kt new file mode 100644 index 0000000000..bc1291b0ed --- /dev/null +++ b/apps/flipcash/shared/persistence/db/src/jvmMain/kotlin/com/flipcash/app/persistence/FlipcashDatabaseInit.kt @@ -0,0 +1,15 @@ +package com.flipcash.app.persistence + +import androidx.room.Room +import androidx.sqlite.driver.bundled.BundledSQLiteDriver +import java.io.File +import kotlinx.coroutines.Dispatchers +import kotlinx.coroutines.IO + +/** Opens the per-account database under [directory], using the bundled SQLite driver. */ +fun FlipcashDatabase.Companion.init(directory: File, entropyB64: String) = + init(entropyB64) { name -> + Room.databaseBuilder(name = File(directory, name).absolutePath) + .setDriver(BundledSQLiteDriver()) + .setQueryCoroutineContext(Dispatchers.IO) + } diff --git a/apps/flipcash/shared/persistence/sources/src/main/kotlin/com/flipcash/app/persistence/sources/MessageDataSource.kt b/apps/flipcash/shared/persistence/sources/src/main/kotlin/com/flipcash/app/persistence/sources/MessageDataSource.kt index ad35b8678f..9ec8e017cd 100644 --- a/apps/flipcash/shared/persistence/sources/src/main/kotlin/com/flipcash/app/persistence/sources/MessageDataSource.kt +++ b/apps/flipcash/shared/persistence/sources/src/main/kotlin/com/flipcash/app/persistence/sources/MessageDataSource.kt @@ -2,7 +2,7 @@ package com.flipcash.app.persistence.sources import androidx.paging.PagingSource import androidx.paging.PagingState -import androidx.sqlite.db.SimpleSQLiteQuery +import androidx.room.RoomRawQuery import com.flipcash.app.persistence.entities.MessageEntity import com.flipcash.app.core.feed.ActivityFeedMessage import com.flipcash.app.persistence.FlipcashDatabase @@ -54,7 +54,7 @@ class MessageDataSource @Inject constructor( } override suspend fun query(whereClause: String): List { - val query = SimpleSQLiteQuery("SELECT * FROM messages WHERE $whereClause") + val query = RoomRawQuery("SELECT * FROM messages WHERE $whereClause") val result = db?.messageDao()?.queryDirectly(query) ?: return emptyList() return result.map { messageEntityMapper.map(it) } } diff --git a/apps/flipcash/shared/persistence/sources/src/test/kotlin/com/flipcash/app/persistence/sources/UnreadStreamReadinessTest.kt b/apps/flipcash/shared/persistence/sources/src/test/kotlin/com/flipcash/app/persistence/sources/UnreadStreamReadinessTest.kt index 931396eff4..1af5af307b 100644 --- a/apps/flipcash/shared/persistence/sources/src/test/kotlin/com/flipcash/app/persistence/sources/UnreadStreamReadinessTest.kt +++ b/apps/flipcash/shared/persistence/sources/src/test/kotlin/com/flipcash/app/persistence/sources/UnreadStreamReadinessTest.kt @@ -4,6 +4,7 @@ import android.content.Context import androidx.test.core.app.ApplicationProvider import app.cash.turbine.test import com.flipcash.app.persistence.FlipcashDatabase +import com.flipcash.app.persistence.init import com.flipcash.app.persistence.converters.MessageContentSerialized import com.flipcash.app.persistence.converters.MessagePointerSerialized import com.flipcash.app.persistence.entities.ChatMemberEntity diff --git a/apps/flipcash/shared/persistence/sources/src/test/kotlin/com/flipcash/app/persistence/sources/UserProfileDataSourceTest.kt b/apps/flipcash/shared/persistence/sources/src/test/kotlin/com/flipcash/app/persistence/sources/UserProfileDataSourceTest.kt index ee494c58c0..5880636e2e 100644 --- a/apps/flipcash/shared/persistence/sources/src/test/kotlin/com/flipcash/app/persistence/sources/UserProfileDataSourceTest.kt +++ b/apps/flipcash/shared/persistence/sources/src/test/kotlin/com/flipcash/app/persistence/sources/UserProfileDataSourceTest.kt @@ -2,6 +2,7 @@ package com.flipcash.app.persistence.sources import app.cash.turbine.test import com.flipcash.app.persistence.FlipcashDatabase +import com.flipcash.app.persistence.init import com.flipcash.services.models.UserProfile import com.getcode.utils.hexEncodedString import kotlinx.coroutines.test.runTest diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 54a4decc30..b5f8ec6c08 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -30,6 +30,7 @@ navigation3-lifecycle = "2.11.0" androidx-browser = "1.10.0" androidx-paging = "3.5.3" androidx-room = "2.8.5" +androidx-sqlite = "2.6.2" androidx-work = "2.12.0" androidx-webkit = "1.17.0" @@ -155,6 +156,7 @@ androidx-room-compiler = { module = "androidx.room:room-compiler", version.ref = androidx-room-ktx = { module = "androidx.room:room-ktx", version.ref = "androidx-room" } androidx-room-paging = { module = "androidx.room:room-paging", version.ref = "androidx-room" } androidx-room-testing = { module = "androidx.room:room-testing", version.ref = "androidx-room" } +androidx-sqlite-bundled = { module = "androidx.sqlite:sqlite-bundled", version.ref = "androidx-sqlite" } androidx-work = { module = "androidx.work:work-runtime", version.ref = "androidx-work" } androidx-work-testing = { module = "androidx.work:work-testing", version.ref = "androidx-work" } androidx-datastore = { module = "androidx.datastore:datastore-preferences", version.ref = "androidx-datastore" } From 074c62ef84721cab3f66dfd37a50fab141af5697 Mon Sep 17 00:00:00 2001 From: Brandon McAnsh Date: Fri, 23 Oct 2026 17:16:54 -0400 Subject: [PATCH 09/11] build(core): move apps:flipcash:core to android+jvm KMP The module keeps everything it had in androidMain, with the dependencies flipcash.android.feature used to add. Only the blocklist and activity feed models, which persistence:sources maps to and from, move to commonMain. --- apps/flipcash/core/build.gradle.kts | 105 +++++++++++------- .../flipcash/app/core/MainCoroutineRule.kt | 0 .../flipcash/app/core/bill/BillStateTest.kt | 0 .../flipcash/app/core/bill/ScannableTest.kt | 0 .../app/core/cache/CachePolicyHandlerTest.kt | 0 .../app/core/chat/ProfileOriginTest.kt | 0 .../flipcash/app/core/data/LoadableTest.kt | 0 .../app/core/extensions/ListExtensionsTest.kt | 0 .../app/core/feed/ActivityFeedMessageTest.kt | 0 .../core/internal/bill/BillControllerTest.kt | 0 .../extensions/ResultExtensionsTest.kt | 0 .../app/core/links/ExternalLinksTest.kt | 0 .../app/core/links/TrustedLinksTest.kt | 0 .../app/core/media/MediaUrlResolverTest.kt | 0 .../app/core/money/FormatUtilsTest.kt | 0 .../core/navigation/DeeplinkFragmentsTest.kt | 0 .../core/navigation/DeeplinkScanPolicyTest.kt | 0 .../app/core/navigation/HomeRouteTest.kt | 0 .../app/core/navigation/NavBarRoutesTest.kt | 0 .../app/core/share/KikCodePainterTest.kt | 0 .../app/core/share/TipCodeExportNameTest.kt | 0 .../core/share/groupcard/GroupCardQrTest.kt | 0 .../app/core/time/FakeTimeProviderTest.kt | 0 .../app/core/tokens/CompletedInPlaceTest.kt | 0 .../app/core/tokens/TokenInfoEntryTest.kt | 0 .../app/core/updater/NetworkUpdaterTest.kt | 0 .../app/core/util/AbbreviatedLinkTest.kt | 0 .../com/flipcash/app/core/util/FiatTest.kt | 0 .../com/flipcash/app/core/util/NumberTest.kt | 0 .../kotlin/com/flipcash/app/core/AppRoute.kt | 0 .../kotlin/com/flipcash/app/core/Locals.kt | 0 .../app/core/android/ActivityProvider.kt | 0 .../app/core/android/IntentLauncher.kt | 0 .../flipcash/app/core/android/IntentUtils.kt | 0 .../flipcash/app/core/android/VersionInfo.kt | 0 .../app/core/android/extensions/Context.kt | 0 .../app/core/android/extensions/Uri.kt | 0 .../app/core/annotations/AccountType.kt | 0 .../com/flipcash/app/core/bill/BillState.kt | 0 .../flipcash/app/core/bill/PaymentRequest.kt | 0 .../com/flipcash/app/core/bill/Scannable.kt | 0 .../com/flipcash/app/core/cache/CacheEntry.kt | 0 .../flipcash/app/core/cache/CachePolicy.kt | 0 .../app/core/cache/CachePolicyHandler.kt | 0 .../flipcash/app/core/chat/ChatIdentifier.kt | 0 .../flipcash/app/core/chat/ChatParticipant.kt | 0 .../com/flipcash/app/core/chat/ChatStep.kt | 0 .../flipcash/app/core/chat/DmDestination.kt | 0 .../flipcash/app/core/chat/NewGroupStep.kt | 0 .../flipcash/app/core/chat/ProfileAddress.kt | 0 .../flipcash/app/core/chat/ReportSubject.kt | 0 .../app/core/chrome/ChromeTabsUtils.kt | 0 .../app/core/contacts/DeviceContact.kt | 0 .../com/flipcash/app/core/data/Loadable.kt | 0 .../app/core/deposit/DepositResult.kt | 0 .../flipcash/app/core/deposit/DepositStep.kt | 0 .../flipcash/app/core/encryption/Sodium.kt | 0 .../flipcash/app/core/extensions/Boolean.kt | 0 .../flipcash/app/core/extensions/Clipboard.kt | 0 .../app/core/extensions/CodeNavigator.kt | 0 .../com/flipcash/app/core/extensions/Flow.kt | 0 .../com/flipcash/app/core/extensions/List.kt | 0 .../com/flipcash/app/core/extensions/Pair.kt | 0 .../flipcash/app/core/extensions/Result.kt | 0 .../app/core/internal/bill/BillController.kt | 0 .../app/core/internal/errors/ErrorUtil.kt | 0 .../app/core/internal/extensions/Bitmap.kt | 0 .../app/core/internal/extensions/Result.kt | 0 .../core/internal/updater/ProfileUpdater.kt | 0 .../flipcash/app/core/links/ExternalLinks.kt | 0 .../app/core/links/TrustedWebsites.kt | 0 .../app/core/media/ImageCachePresence.kt | 0 .../app/core/media/MediaUrlResolver.kt | 0 .../app/core/media/RememberMediaUrl.kt | 0 .../app/core/moderation/ModerationMessages.kt | 0 .../flipcash/app/core/money/FormatUtils.kt | 0 .../app/core/navigation/DeeplinkAction.kt | 0 .../app/core/navigation/DeeplinkType.kt | 0 .../flipcash/app/core/navigation/HomeRoute.kt | 0 .../app/core/navigation/LocalTabBarPadding.kt | 0 .../app/core/navigation/NavBarButton.kt | 0 .../app/core/navigation/NavBarRoutes.kt | 0 .../app/core/navigation/SteppedFlowRoute.kt | 0 .../app/core/navigation/TabBarVisibility.kt | 0 .../app/core/onboarding/OnboardingStep.kt | 0 .../WalletDeeplinkConnectionResult.kt | 0 .../onramp/ui/ConfirmInWalletButtonLabel.kt | 0 .../app/core/onramp/ui/PhantomLabel.kt | 0 .../flipcash/app/core/reporting/ReportStep.kt | 0 .../app/core/share/SharePreviewImage.kt | 0 .../flipcash/app/core/share/TipCodeExport.kt | 0 .../app/core/share/TipCodeExporter.kt | 0 .../flipcash/app/core/share/TipCodePreview.kt | 0 .../app/core/share/TipCodePreviewRenderer.kt | 0 .../app/core/share/TipCodePreviewStorage.kt | 0 .../core/share/groupcard/GroupCardExporter.kt | 0 .../app/core/share/groupcard/QrMatrix.kt | 0 .../core/share/groupcard/StyledQrGeometry.kt | 0 .../core/share/groupcard/StyledQrRenderer.kt | 0 .../flipcash/app/core/storage/MediaSaver.kt | 0 .../app/core/time/FakeTimeProvider.kt | 0 .../flipcash/app/core/time/TimeProvider.kt | 0 .../flipcash/app/core/tipping/OwnTipCard.kt | 0 .../flipcash/app/core/tipping/TipCardOwner.kt | 0 .../flipcash/app/core/tipping/TipSelection.kt | 0 .../app/core/toast/SystemToastController.kt | 0 .../app/core/toast/ToastController.kt | 0 .../app/core/tokens/CurrencyCreatorDraft.kt | 0 .../app/core/tokens/CurrencyCreatorResult.kt | 0 .../app/core/tokens/CurrencyCreatorStep.kt | 0 .../flipcash/app/core/tokens/SwapResult.kt | 0 .../com/flipcash/app/core/tokens/SwapStep.kt | 0 .../app/core/tokens/TokenDisplayName.kt | 0 .../app/core/tokens/TokenInfoEntry.kt | 0 .../flipcash/app/core/tokens/TokenPurpose.kt | 0 .../app/core/tokens/TokenSwapPurpose.kt | 0 .../app/core/updater/NetworkUpdater.kt | 0 .../core/userprofile/UpdateProfileResult.kt | 0 .../app/core/userprofile/UpdateProfileStep.kt | 0 .../flipcash/app/core/util/AbbreviatedLink.kt | 0 .../kotlin/com/flipcash/app/core/util/Fiat.kt | 0 .../com/flipcash/app/core/util/Linkify.kt | 0 .../app/core/util/MessagingPackages.kt | 0 .../com/flipcash/app/core/util/Number.kt | 0 .../core/verification/VerificationResult.kt | 0 .../app/core/verification/VerificationStep.kt | 0 .../verification/email/EmailCodeChannel.kt | 0 .../verification/email/EmailDeeplinkOrigin.kt | 0 .../email/LocalEmailCodeChannel.kt | 0 .../app/core/withdrawal/WithdrawalResult.kt | 0 .../app/core/withdrawal/WithdrawalStep.kt | 0 .../res/drawable-xxhdpi/ic_coin_dollars.webp | Bin .../res/drawable/bill_texture_1.webp | Bin .../res/drawable/bill_texture_2.webp | Bin .../res/drawable/bill_texture_3.webp | Bin .../res/drawable/bill_texture_4.webp | Bin .../res/drawable/bill_texture_5.webp | Bin .../res/drawable/bill_texture_6.webp | Bin .../res/drawable/bill_texture_7.webp | Bin .../res/drawable/bill_texture_8.webp | Bin .../res/drawable/close_right_arrow.xml | 0 .../res/drawable/ic_access_key_in_photos.webp | Bin .../res/drawable/ic_advanced_features.xml | 0 .../res/drawable/ic_app_update_required.xml | 0 .../res/drawable/ic_arrow_down.xml | 0 .../res/drawable/ic_arrow_right.xml | 0 .../res/drawable/ic_arrow_up_large.xml | 0 .../res/drawable/ic_at.xml | 0 .../res/drawable/ic_backpack_wallet.webp | Bin .../res/drawable/ic_banknote.xml | 0 .../res/drawable/ic_bill_previews.webp | Bin .../res/drawable/ic_biometrics.xml | 0 .../res/drawable/ic_bottom_navigation.xml | 0 .../res/drawable/ic_bubble_outline.xml | 0 .../res/drawable/ic_buy_with_google_pay.xml | 0 .../res/drawable/ic_callout_warning.xml | 0 .../res/drawable/ic_camera.xml | 0 .../res/drawable/ic_camera_request.webp | Bin .../res/drawable/ic_cash_bill.webp | Bin .../res/drawable/ic_checked.xml | 0 .../res/drawable/ic_checked_green.xml | 0 .../res/drawable/ic_checklist.xml | 0 .../res/drawable/ic_chevron_down_small.xml | 0 .../res/drawable/ic_circle_check_large.xml | 0 .../drawable/ic_circle_exclamation_large.xml | 0 .../res/drawable/ic_coins.xml | 0 .../res/drawable/ic_coins_add.xml | 0 .../res/drawable/ic_color_tune_hsl.xml | 0 .../ic_contact_method_verification.xml | 0 .../res/drawable/ic_convert.xml | 0 .../res/drawable/ic_currency_coin.xml | 0 .../drawable/ic_currencycreator_cashbill.xml | 0 .../ic_currencycreator_description.xml | 0 .../res/drawable/ic_currencycreator_gift.xml | 0 .../res/drawable/ic_currencycreator_icon.xml | 0 .../res/drawable/ic_currencycreator_name.xml | 0 .../drawable/ic_currencycreator_purchase.xml | 0 .../res/drawable/ic_debit_card.xml | 0 .../res/drawable/ic_device_frame.xml | 0 .../res/drawable/ic_existing_contact.xml | 0 .../res/drawable/ic_flipcash_badge.xml | 0 .../res/drawable/ic_flipcash_balance.xml | 0 .../res/drawable/ic_flipcash_logo.xml | 0 .../ic_flipcash_logo_offwhite_small.xml | 0 .../res/drawable/ic_flipcash_logo_w_name.xml | 0 .../ic_flipcash_logo_w_name_large.xml | 0 .../res/drawable/ic_flipcash_pools.xml | 0 .../res/drawable/ic_globe.xml | 0 .../res/drawable/ic_google_pay.xml | 0 .../res/drawable/ic_google_pay_brand_mark.xml | 0 .../res/drawable/ic_group_3.xml | 0 .../res/drawable/ic_hardware_security_key.xml | 0 .../res/drawable/ic_home_options.xml | 0 .../res/drawable/ic_host.xml | 0 .../res/drawable/ic_info_bars.xml | 0 .../res/drawable/ic_linked_payment_method.xml | 0 .../res/drawable/ic_lock.xml | 0 .../res/drawable/ic_logo_round_white.xml | 0 .../res/drawable/ic_market_cap_curve.xml | 0 .../res/drawable/ic_menu_account.xml | 0 .../res/drawable/ic_menu_deposit.xml | 0 .../res/drawable/ic_menu_key.xml | 0 .../res/drawable/ic_menu_logout.xml | 0 .../res/drawable/ic_menu_switchaccounts.xml | 0 .../res/drawable/ic_menu_withdraw.xml | 0 .../res/drawable/ic_minus.xml | 0 .../res/drawable/ic_nav_chat.xml | 0 .../res/drawable/ic_nav_chat_selected.xml | 0 .../res/drawable/ic_nav_tipcard.xml | 0 .../res/drawable/ic_nav_tipcard_selected.xml | 0 .../res/drawable/ic_nav_wallet.xml | 0 .../res/drawable/ic_nav_wallet_selected.xml | 0 .../res/drawable/ic_new_email.xml | 0 .../drawable/ic_notification_preview_icon.png | Bin .../res/drawable/ic_notification_request.webp | Bin .../res/drawable/ic_pay_with_google_pay.xml | 0 .../res/drawable/ic_people_circle.xml | 0 .../res/drawable/ic_people_gear.xml | 0 .../res/drawable/ic_phantom_buy_connect.xml | 0 .../res/drawable/ic_phantom_connected.xml | 0 .../res/drawable/ic_phantom_wallet.xml | 0 .../res/drawable/ic_plus.xml | 0 .../res/drawable/ic_qr_code.xml | 0 .../res/drawable/ic_screen_frame.xml | 0 .../res/drawable/ic_send_large.xml | 0 .../res/drawable/ic_send_outlined.xml | 0 .../res/drawable/ic_social_discord.xml | 0 .../res/drawable/ic_social_tg.xml | 0 .../res/drawable/ic_social_web.xml | 0 .../res/drawable/ic_social_x.xml | 0 .../res/drawable/ic_solana_logo.xml | 0 .../res/drawable/ic_solflare_wallet.xml | 0 .../res/drawable/ic_tipcode.xml | 0 .../res/drawable/ic_tipping_hand.xml | 0 .../res/drawable/ic_transfer_deposit.xml | 0 .../res/drawable/ic_transfer_withdraw.xml | 0 .../res/drawable/ic_trophy.xml | 0 .../res/drawable/ic_unchecked.xml | 0 .../res/drawable/ic_undo.xml | 0 .../res/drawable/ic_unknown_contact.xml | 0 .../res/drawable/ic_usdc.xml | 0 .../res/drawable/ic_usdc_on_solana.xml | 0 .../res/drawable/ic_wallet.xml | 0 .../res/drawable/ic_warning_alert_large.xml | 0 .../res/drawable/ic_withdraw_usdf_as_usdc.xml | 0 .../res/values/strings-universal.xml | 0 .../res/values/strings.xml | 0 .../app/core/blocklist/BlockedUserProfile.kt | 0 .../app/core/feed/ActivityFeedMessage.kt | 0 249 files changed, 64 insertions(+), 41 deletions(-) rename apps/flipcash/core/src/{test => androidHostTest}/kotlin/com/flipcash/app/core/MainCoroutineRule.kt (100%) rename apps/flipcash/core/src/{test => androidHostTest}/kotlin/com/flipcash/app/core/bill/BillStateTest.kt (100%) rename apps/flipcash/core/src/{test => androidHostTest}/kotlin/com/flipcash/app/core/bill/ScannableTest.kt (100%) rename apps/flipcash/core/src/{test => androidHostTest}/kotlin/com/flipcash/app/core/cache/CachePolicyHandlerTest.kt (100%) rename apps/flipcash/core/src/{test => androidHostTest}/kotlin/com/flipcash/app/core/chat/ProfileOriginTest.kt (100%) rename apps/flipcash/core/src/{test => androidHostTest}/kotlin/com/flipcash/app/core/data/LoadableTest.kt (100%) rename apps/flipcash/core/src/{test => androidHostTest}/kotlin/com/flipcash/app/core/extensions/ListExtensionsTest.kt (100%) rename apps/flipcash/core/src/{test => androidHostTest}/kotlin/com/flipcash/app/core/feed/ActivityFeedMessageTest.kt (100%) rename apps/flipcash/core/src/{test => androidHostTest}/kotlin/com/flipcash/app/core/internal/bill/BillControllerTest.kt (100%) rename apps/flipcash/core/src/{test => androidHostTest}/kotlin/com/flipcash/app/core/internal/extensions/ResultExtensionsTest.kt (100%) rename apps/flipcash/core/src/{test => androidHostTest}/kotlin/com/flipcash/app/core/links/ExternalLinksTest.kt (100%) rename apps/flipcash/core/src/{test => androidHostTest}/kotlin/com/flipcash/app/core/links/TrustedLinksTest.kt (100%) rename apps/flipcash/core/src/{test => androidHostTest}/kotlin/com/flipcash/app/core/media/MediaUrlResolverTest.kt (100%) rename apps/flipcash/core/src/{test => androidHostTest}/kotlin/com/flipcash/app/core/money/FormatUtilsTest.kt (100%) rename apps/flipcash/core/src/{test => androidHostTest}/kotlin/com/flipcash/app/core/navigation/DeeplinkFragmentsTest.kt (100%) rename apps/flipcash/core/src/{test => androidHostTest}/kotlin/com/flipcash/app/core/navigation/DeeplinkScanPolicyTest.kt (100%) rename apps/flipcash/core/src/{test => androidHostTest}/kotlin/com/flipcash/app/core/navigation/HomeRouteTest.kt (100%) rename apps/flipcash/core/src/{test => androidHostTest}/kotlin/com/flipcash/app/core/navigation/NavBarRoutesTest.kt (100%) rename apps/flipcash/core/src/{test => androidHostTest}/kotlin/com/flipcash/app/core/share/KikCodePainterTest.kt (100%) rename apps/flipcash/core/src/{test => androidHostTest}/kotlin/com/flipcash/app/core/share/TipCodeExportNameTest.kt (100%) rename apps/flipcash/core/src/{test => androidHostTest}/kotlin/com/flipcash/app/core/share/groupcard/GroupCardQrTest.kt (100%) rename apps/flipcash/core/src/{test => androidHostTest}/kotlin/com/flipcash/app/core/time/FakeTimeProviderTest.kt (100%) rename apps/flipcash/core/src/{test => androidHostTest}/kotlin/com/flipcash/app/core/tokens/CompletedInPlaceTest.kt (100%) rename apps/flipcash/core/src/{test => androidHostTest}/kotlin/com/flipcash/app/core/tokens/TokenInfoEntryTest.kt (100%) rename apps/flipcash/core/src/{test => androidHostTest}/kotlin/com/flipcash/app/core/updater/NetworkUpdaterTest.kt (100%) rename apps/flipcash/core/src/{test => androidHostTest}/kotlin/com/flipcash/app/core/util/AbbreviatedLinkTest.kt (100%) rename apps/flipcash/core/src/{test => androidHostTest}/kotlin/com/flipcash/app/core/util/FiatTest.kt (100%) rename apps/flipcash/core/src/{test => androidHostTest}/kotlin/com/flipcash/app/core/util/NumberTest.kt (100%) rename apps/flipcash/core/src/{main => androidMain}/kotlin/com/flipcash/app/core/AppRoute.kt (100%) rename apps/flipcash/core/src/{main => androidMain}/kotlin/com/flipcash/app/core/Locals.kt (100%) rename apps/flipcash/core/src/{main => androidMain}/kotlin/com/flipcash/app/core/android/ActivityProvider.kt (100%) rename apps/flipcash/core/src/{main => androidMain}/kotlin/com/flipcash/app/core/android/IntentLauncher.kt (100%) rename apps/flipcash/core/src/{main => androidMain}/kotlin/com/flipcash/app/core/android/IntentUtils.kt (100%) rename apps/flipcash/core/src/{main => androidMain}/kotlin/com/flipcash/app/core/android/VersionInfo.kt (100%) rename apps/flipcash/core/src/{main => androidMain}/kotlin/com/flipcash/app/core/android/extensions/Context.kt (100%) rename apps/flipcash/core/src/{main => androidMain}/kotlin/com/flipcash/app/core/android/extensions/Uri.kt (100%) rename apps/flipcash/core/src/{main => androidMain}/kotlin/com/flipcash/app/core/annotations/AccountType.kt (100%) rename apps/flipcash/core/src/{main => androidMain}/kotlin/com/flipcash/app/core/bill/BillState.kt (100%) rename apps/flipcash/core/src/{main => androidMain}/kotlin/com/flipcash/app/core/bill/PaymentRequest.kt (100%) rename apps/flipcash/core/src/{main => androidMain}/kotlin/com/flipcash/app/core/bill/Scannable.kt (100%) rename apps/flipcash/core/src/{main => androidMain}/kotlin/com/flipcash/app/core/cache/CacheEntry.kt (100%) rename apps/flipcash/core/src/{main => androidMain}/kotlin/com/flipcash/app/core/cache/CachePolicy.kt (100%) rename apps/flipcash/core/src/{main => androidMain}/kotlin/com/flipcash/app/core/cache/CachePolicyHandler.kt (100%) rename apps/flipcash/core/src/{main => androidMain}/kotlin/com/flipcash/app/core/chat/ChatIdentifier.kt (100%) rename apps/flipcash/core/src/{main => androidMain}/kotlin/com/flipcash/app/core/chat/ChatParticipant.kt (100%) rename apps/flipcash/core/src/{main => androidMain}/kotlin/com/flipcash/app/core/chat/ChatStep.kt (100%) rename apps/flipcash/core/src/{main => androidMain}/kotlin/com/flipcash/app/core/chat/DmDestination.kt (100%) rename apps/flipcash/core/src/{main => androidMain}/kotlin/com/flipcash/app/core/chat/NewGroupStep.kt (100%) rename apps/flipcash/core/src/{main => androidMain}/kotlin/com/flipcash/app/core/chat/ProfileAddress.kt (100%) rename apps/flipcash/core/src/{main => androidMain}/kotlin/com/flipcash/app/core/chat/ReportSubject.kt (100%) rename apps/flipcash/core/src/{main => androidMain}/kotlin/com/flipcash/app/core/chrome/ChromeTabsUtils.kt (100%) rename apps/flipcash/core/src/{main => androidMain}/kotlin/com/flipcash/app/core/contacts/DeviceContact.kt (100%) rename apps/flipcash/core/src/{main => androidMain}/kotlin/com/flipcash/app/core/data/Loadable.kt (100%) rename apps/flipcash/core/src/{main => androidMain}/kotlin/com/flipcash/app/core/deposit/DepositResult.kt (100%) rename apps/flipcash/core/src/{main => androidMain}/kotlin/com/flipcash/app/core/deposit/DepositStep.kt (100%) rename apps/flipcash/core/src/{main => androidMain}/kotlin/com/flipcash/app/core/encryption/Sodium.kt (100%) rename apps/flipcash/core/src/{main => androidMain}/kotlin/com/flipcash/app/core/extensions/Boolean.kt (100%) rename apps/flipcash/core/src/{main => androidMain}/kotlin/com/flipcash/app/core/extensions/Clipboard.kt (100%) rename apps/flipcash/core/src/{main => androidMain}/kotlin/com/flipcash/app/core/extensions/CodeNavigator.kt (100%) rename apps/flipcash/core/src/{main => androidMain}/kotlin/com/flipcash/app/core/extensions/Flow.kt (100%) rename apps/flipcash/core/src/{main => androidMain}/kotlin/com/flipcash/app/core/extensions/List.kt (100%) rename apps/flipcash/core/src/{main => androidMain}/kotlin/com/flipcash/app/core/extensions/Pair.kt (100%) rename apps/flipcash/core/src/{main => androidMain}/kotlin/com/flipcash/app/core/extensions/Result.kt (100%) rename apps/flipcash/core/src/{main => androidMain}/kotlin/com/flipcash/app/core/internal/bill/BillController.kt (100%) rename apps/flipcash/core/src/{main => androidMain}/kotlin/com/flipcash/app/core/internal/errors/ErrorUtil.kt (100%) rename apps/flipcash/core/src/{main => androidMain}/kotlin/com/flipcash/app/core/internal/extensions/Bitmap.kt (100%) rename apps/flipcash/core/src/{main => androidMain}/kotlin/com/flipcash/app/core/internal/extensions/Result.kt (100%) rename apps/flipcash/core/src/{main => androidMain}/kotlin/com/flipcash/app/core/internal/updater/ProfileUpdater.kt (100%) rename apps/flipcash/core/src/{main => androidMain}/kotlin/com/flipcash/app/core/links/ExternalLinks.kt (100%) rename apps/flipcash/core/src/{main => androidMain}/kotlin/com/flipcash/app/core/links/TrustedWebsites.kt (100%) rename apps/flipcash/core/src/{main => androidMain}/kotlin/com/flipcash/app/core/media/ImageCachePresence.kt (100%) rename apps/flipcash/core/src/{main => androidMain}/kotlin/com/flipcash/app/core/media/MediaUrlResolver.kt (100%) rename apps/flipcash/core/src/{main => androidMain}/kotlin/com/flipcash/app/core/media/RememberMediaUrl.kt (100%) rename apps/flipcash/core/src/{main => androidMain}/kotlin/com/flipcash/app/core/moderation/ModerationMessages.kt (100%) rename apps/flipcash/core/src/{main => androidMain}/kotlin/com/flipcash/app/core/money/FormatUtils.kt (100%) rename apps/flipcash/core/src/{main => androidMain}/kotlin/com/flipcash/app/core/navigation/DeeplinkAction.kt (100%) rename apps/flipcash/core/src/{main => androidMain}/kotlin/com/flipcash/app/core/navigation/DeeplinkType.kt (100%) rename apps/flipcash/core/src/{main => androidMain}/kotlin/com/flipcash/app/core/navigation/HomeRoute.kt (100%) rename apps/flipcash/core/src/{main => androidMain}/kotlin/com/flipcash/app/core/navigation/LocalTabBarPadding.kt (100%) rename apps/flipcash/core/src/{main => androidMain}/kotlin/com/flipcash/app/core/navigation/NavBarButton.kt (100%) rename apps/flipcash/core/src/{main => androidMain}/kotlin/com/flipcash/app/core/navigation/NavBarRoutes.kt (100%) rename apps/flipcash/core/src/{main => androidMain}/kotlin/com/flipcash/app/core/navigation/SteppedFlowRoute.kt (100%) rename apps/flipcash/core/src/{main => androidMain}/kotlin/com/flipcash/app/core/navigation/TabBarVisibility.kt (100%) rename apps/flipcash/core/src/{main => androidMain}/kotlin/com/flipcash/app/core/onboarding/OnboardingStep.kt (100%) rename apps/flipcash/core/src/{main => androidMain}/kotlin/com/flipcash/app/core/onramp/deeplinks/WalletDeeplinkConnectionResult.kt (100%) rename apps/flipcash/core/src/{main => androidMain}/kotlin/com/flipcash/app/core/onramp/ui/ConfirmInWalletButtonLabel.kt (100%) rename apps/flipcash/core/src/{main => androidMain}/kotlin/com/flipcash/app/core/onramp/ui/PhantomLabel.kt (100%) rename apps/flipcash/core/src/{main => androidMain}/kotlin/com/flipcash/app/core/reporting/ReportStep.kt (100%) rename apps/flipcash/core/src/{main => androidMain}/kotlin/com/flipcash/app/core/share/SharePreviewImage.kt (100%) rename apps/flipcash/core/src/{main => androidMain}/kotlin/com/flipcash/app/core/share/TipCodeExport.kt (100%) rename apps/flipcash/core/src/{main => androidMain}/kotlin/com/flipcash/app/core/share/TipCodeExporter.kt (100%) rename apps/flipcash/core/src/{main => androidMain}/kotlin/com/flipcash/app/core/share/TipCodePreview.kt (100%) rename apps/flipcash/core/src/{main => androidMain}/kotlin/com/flipcash/app/core/share/TipCodePreviewRenderer.kt (100%) rename apps/flipcash/core/src/{main => androidMain}/kotlin/com/flipcash/app/core/share/TipCodePreviewStorage.kt (100%) rename apps/flipcash/core/src/{main => androidMain}/kotlin/com/flipcash/app/core/share/groupcard/GroupCardExporter.kt (100%) rename apps/flipcash/core/src/{main => androidMain}/kotlin/com/flipcash/app/core/share/groupcard/QrMatrix.kt (100%) rename apps/flipcash/core/src/{main => androidMain}/kotlin/com/flipcash/app/core/share/groupcard/StyledQrGeometry.kt (100%) rename apps/flipcash/core/src/{main => androidMain}/kotlin/com/flipcash/app/core/share/groupcard/StyledQrRenderer.kt (100%) rename apps/flipcash/core/src/{main => androidMain}/kotlin/com/flipcash/app/core/storage/MediaSaver.kt (100%) rename apps/flipcash/core/src/{main => androidMain}/kotlin/com/flipcash/app/core/time/FakeTimeProvider.kt (100%) rename apps/flipcash/core/src/{main => androidMain}/kotlin/com/flipcash/app/core/time/TimeProvider.kt (100%) rename apps/flipcash/core/src/{main => androidMain}/kotlin/com/flipcash/app/core/tipping/OwnTipCard.kt (100%) rename apps/flipcash/core/src/{main => androidMain}/kotlin/com/flipcash/app/core/tipping/TipCardOwner.kt (100%) rename apps/flipcash/core/src/{main => androidMain}/kotlin/com/flipcash/app/core/tipping/TipSelection.kt (100%) rename apps/flipcash/core/src/{main => androidMain}/kotlin/com/flipcash/app/core/toast/SystemToastController.kt (100%) rename apps/flipcash/core/src/{main => androidMain}/kotlin/com/flipcash/app/core/toast/ToastController.kt (100%) rename apps/flipcash/core/src/{main => androidMain}/kotlin/com/flipcash/app/core/tokens/CurrencyCreatorDraft.kt (100%) rename apps/flipcash/core/src/{main => androidMain}/kotlin/com/flipcash/app/core/tokens/CurrencyCreatorResult.kt (100%) rename apps/flipcash/core/src/{main => androidMain}/kotlin/com/flipcash/app/core/tokens/CurrencyCreatorStep.kt (100%) rename apps/flipcash/core/src/{main => androidMain}/kotlin/com/flipcash/app/core/tokens/SwapResult.kt (100%) rename apps/flipcash/core/src/{main => androidMain}/kotlin/com/flipcash/app/core/tokens/SwapStep.kt (100%) rename apps/flipcash/core/src/{main => androidMain}/kotlin/com/flipcash/app/core/tokens/TokenDisplayName.kt (100%) rename apps/flipcash/core/src/{main => androidMain}/kotlin/com/flipcash/app/core/tokens/TokenInfoEntry.kt (100%) rename apps/flipcash/core/src/{main => androidMain}/kotlin/com/flipcash/app/core/tokens/TokenPurpose.kt (100%) rename apps/flipcash/core/src/{main => androidMain}/kotlin/com/flipcash/app/core/tokens/TokenSwapPurpose.kt (100%) rename apps/flipcash/core/src/{main => androidMain}/kotlin/com/flipcash/app/core/updater/NetworkUpdater.kt (100%) rename apps/flipcash/core/src/{main => androidMain}/kotlin/com/flipcash/app/core/userprofile/UpdateProfileResult.kt (100%) rename apps/flipcash/core/src/{main => androidMain}/kotlin/com/flipcash/app/core/userprofile/UpdateProfileStep.kt (100%) rename apps/flipcash/core/src/{main => androidMain}/kotlin/com/flipcash/app/core/util/AbbreviatedLink.kt (100%) rename apps/flipcash/core/src/{main => androidMain}/kotlin/com/flipcash/app/core/util/Fiat.kt (100%) rename apps/flipcash/core/src/{main => androidMain}/kotlin/com/flipcash/app/core/util/Linkify.kt (100%) rename apps/flipcash/core/src/{main => androidMain}/kotlin/com/flipcash/app/core/util/MessagingPackages.kt (100%) rename apps/flipcash/core/src/{main => androidMain}/kotlin/com/flipcash/app/core/util/Number.kt (100%) rename apps/flipcash/core/src/{main => androidMain}/kotlin/com/flipcash/app/core/verification/VerificationResult.kt (100%) rename apps/flipcash/core/src/{main => androidMain}/kotlin/com/flipcash/app/core/verification/VerificationStep.kt (100%) rename apps/flipcash/core/src/{main => androidMain}/kotlin/com/flipcash/app/core/verification/email/EmailCodeChannel.kt (100%) rename apps/flipcash/core/src/{main => androidMain}/kotlin/com/flipcash/app/core/verification/email/EmailDeeplinkOrigin.kt (100%) rename apps/flipcash/core/src/{main => androidMain}/kotlin/com/flipcash/app/core/verification/email/LocalEmailCodeChannel.kt (100%) rename apps/flipcash/core/src/{main => androidMain}/kotlin/com/flipcash/app/core/withdrawal/WithdrawalResult.kt (100%) rename apps/flipcash/core/src/{main => androidMain}/kotlin/com/flipcash/app/core/withdrawal/WithdrawalStep.kt (100%) rename apps/flipcash/core/src/{main => androidMain}/res/drawable-xxhdpi/ic_coin_dollars.webp (100%) rename apps/flipcash/core/src/{main => androidMain}/res/drawable/bill_texture_1.webp (100%) rename apps/flipcash/core/src/{main => androidMain}/res/drawable/bill_texture_2.webp (100%) rename apps/flipcash/core/src/{main => androidMain}/res/drawable/bill_texture_3.webp (100%) rename apps/flipcash/core/src/{main => androidMain}/res/drawable/bill_texture_4.webp (100%) rename apps/flipcash/core/src/{main => androidMain}/res/drawable/bill_texture_5.webp (100%) rename apps/flipcash/core/src/{main => androidMain}/res/drawable/bill_texture_6.webp (100%) rename apps/flipcash/core/src/{main => androidMain}/res/drawable/bill_texture_7.webp (100%) rename apps/flipcash/core/src/{main => androidMain}/res/drawable/bill_texture_8.webp (100%) rename apps/flipcash/core/src/{main => androidMain}/res/drawable/close_right_arrow.xml (100%) rename apps/flipcash/core/src/{main => androidMain}/res/drawable/ic_access_key_in_photos.webp (100%) rename apps/flipcash/core/src/{main => androidMain}/res/drawable/ic_advanced_features.xml (100%) rename apps/flipcash/core/src/{main => androidMain}/res/drawable/ic_app_update_required.xml (100%) rename apps/flipcash/core/src/{main => androidMain}/res/drawable/ic_arrow_down.xml (100%) rename apps/flipcash/core/src/{main => androidMain}/res/drawable/ic_arrow_right.xml (100%) rename apps/flipcash/core/src/{main => androidMain}/res/drawable/ic_arrow_up_large.xml (100%) rename apps/flipcash/core/src/{main => androidMain}/res/drawable/ic_at.xml (100%) rename apps/flipcash/core/src/{main => androidMain}/res/drawable/ic_backpack_wallet.webp (100%) rename apps/flipcash/core/src/{main => androidMain}/res/drawable/ic_banknote.xml (100%) rename apps/flipcash/core/src/{main => androidMain}/res/drawable/ic_bill_previews.webp (100%) rename apps/flipcash/core/src/{main => androidMain}/res/drawable/ic_biometrics.xml (100%) rename apps/flipcash/core/src/{main => androidMain}/res/drawable/ic_bottom_navigation.xml (100%) rename apps/flipcash/core/src/{main => androidMain}/res/drawable/ic_bubble_outline.xml (100%) rename apps/flipcash/core/src/{main => androidMain}/res/drawable/ic_buy_with_google_pay.xml (100%) rename apps/flipcash/core/src/{main => androidMain}/res/drawable/ic_callout_warning.xml (100%) rename apps/flipcash/core/src/{main => androidMain}/res/drawable/ic_camera.xml (100%) rename apps/flipcash/core/src/{main => androidMain}/res/drawable/ic_camera_request.webp (100%) rename apps/flipcash/core/src/{main => androidMain}/res/drawable/ic_cash_bill.webp (100%) rename apps/flipcash/core/src/{main => androidMain}/res/drawable/ic_checked.xml (100%) rename apps/flipcash/core/src/{main => androidMain}/res/drawable/ic_checked_green.xml (100%) rename apps/flipcash/core/src/{main => androidMain}/res/drawable/ic_checklist.xml (100%) rename apps/flipcash/core/src/{main => androidMain}/res/drawable/ic_chevron_down_small.xml (100%) rename apps/flipcash/core/src/{main => androidMain}/res/drawable/ic_circle_check_large.xml (100%) rename apps/flipcash/core/src/{main => androidMain}/res/drawable/ic_circle_exclamation_large.xml (100%) rename apps/flipcash/core/src/{main => androidMain}/res/drawable/ic_coins.xml (100%) rename apps/flipcash/core/src/{main => androidMain}/res/drawable/ic_coins_add.xml (100%) rename apps/flipcash/core/src/{main => androidMain}/res/drawable/ic_color_tune_hsl.xml (100%) rename apps/flipcash/core/src/{main => androidMain}/res/drawable/ic_contact_method_verification.xml (100%) rename apps/flipcash/core/src/{main => androidMain}/res/drawable/ic_convert.xml (100%) rename apps/flipcash/core/src/{main => androidMain}/res/drawable/ic_currency_coin.xml (100%) rename apps/flipcash/core/src/{main => androidMain}/res/drawable/ic_currencycreator_cashbill.xml (100%) rename apps/flipcash/core/src/{main => androidMain}/res/drawable/ic_currencycreator_description.xml (100%) rename apps/flipcash/core/src/{main => androidMain}/res/drawable/ic_currencycreator_gift.xml (100%) rename apps/flipcash/core/src/{main => androidMain}/res/drawable/ic_currencycreator_icon.xml (100%) rename apps/flipcash/core/src/{main => androidMain}/res/drawable/ic_currencycreator_name.xml (100%) rename apps/flipcash/core/src/{main => androidMain}/res/drawable/ic_currencycreator_purchase.xml (100%) rename apps/flipcash/core/src/{main => androidMain}/res/drawable/ic_debit_card.xml (100%) rename apps/flipcash/core/src/{main => androidMain}/res/drawable/ic_device_frame.xml (100%) rename apps/flipcash/core/src/{main => androidMain}/res/drawable/ic_existing_contact.xml (100%) rename apps/flipcash/core/src/{main => androidMain}/res/drawable/ic_flipcash_badge.xml (100%) rename apps/flipcash/core/src/{main => androidMain}/res/drawable/ic_flipcash_balance.xml (100%) rename apps/flipcash/core/src/{main => androidMain}/res/drawable/ic_flipcash_logo.xml (100%) rename apps/flipcash/core/src/{main => androidMain}/res/drawable/ic_flipcash_logo_offwhite_small.xml (100%) rename apps/flipcash/core/src/{main => androidMain}/res/drawable/ic_flipcash_logo_w_name.xml (100%) rename apps/flipcash/core/src/{main => androidMain}/res/drawable/ic_flipcash_logo_w_name_large.xml (100%) rename apps/flipcash/core/src/{main => androidMain}/res/drawable/ic_flipcash_pools.xml (100%) rename apps/flipcash/core/src/{main => androidMain}/res/drawable/ic_globe.xml (100%) rename apps/flipcash/core/src/{main => androidMain}/res/drawable/ic_google_pay.xml (100%) rename apps/flipcash/core/src/{main => androidMain}/res/drawable/ic_google_pay_brand_mark.xml (100%) rename apps/flipcash/core/src/{main => androidMain}/res/drawable/ic_group_3.xml (100%) rename apps/flipcash/core/src/{main => androidMain}/res/drawable/ic_hardware_security_key.xml (100%) rename apps/flipcash/core/src/{main => androidMain}/res/drawable/ic_home_options.xml (100%) rename apps/flipcash/core/src/{main => androidMain}/res/drawable/ic_host.xml (100%) rename apps/flipcash/core/src/{main => androidMain}/res/drawable/ic_info_bars.xml (100%) rename apps/flipcash/core/src/{main => androidMain}/res/drawable/ic_linked_payment_method.xml (100%) rename apps/flipcash/core/src/{main => androidMain}/res/drawable/ic_lock.xml (100%) rename apps/flipcash/core/src/{main => androidMain}/res/drawable/ic_logo_round_white.xml (100%) rename apps/flipcash/core/src/{main => androidMain}/res/drawable/ic_market_cap_curve.xml (100%) rename apps/flipcash/core/src/{main => androidMain}/res/drawable/ic_menu_account.xml (100%) rename apps/flipcash/core/src/{main => androidMain}/res/drawable/ic_menu_deposit.xml (100%) rename apps/flipcash/core/src/{main => androidMain}/res/drawable/ic_menu_key.xml (100%) rename apps/flipcash/core/src/{main => androidMain}/res/drawable/ic_menu_logout.xml (100%) rename apps/flipcash/core/src/{main => androidMain}/res/drawable/ic_menu_switchaccounts.xml (100%) rename apps/flipcash/core/src/{main => androidMain}/res/drawable/ic_menu_withdraw.xml (100%) rename apps/flipcash/core/src/{main => androidMain}/res/drawable/ic_minus.xml (100%) rename apps/flipcash/core/src/{main => androidMain}/res/drawable/ic_nav_chat.xml (100%) rename apps/flipcash/core/src/{main => androidMain}/res/drawable/ic_nav_chat_selected.xml (100%) rename apps/flipcash/core/src/{main => androidMain}/res/drawable/ic_nav_tipcard.xml (100%) rename apps/flipcash/core/src/{main => androidMain}/res/drawable/ic_nav_tipcard_selected.xml (100%) rename apps/flipcash/core/src/{main => androidMain}/res/drawable/ic_nav_wallet.xml (100%) rename apps/flipcash/core/src/{main => androidMain}/res/drawable/ic_nav_wallet_selected.xml (100%) rename apps/flipcash/core/src/{main => androidMain}/res/drawable/ic_new_email.xml (100%) rename apps/flipcash/core/src/{main => androidMain}/res/drawable/ic_notification_preview_icon.png (100%) rename apps/flipcash/core/src/{main => androidMain}/res/drawable/ic_notification_request.webp (100%) rename apps/flipcash/core/src/{main => androidMain}/res/drawable/ic_pay_with_google_pay.xml (100%) rename apps/flipcash/core/src/{main => androidMain}/res/drawable/ic_people_circle.xml (100%) rename apps/flipcash/core/src/{main => androidMain}/res/drawable/ic_people_gear.xml (100%) rename apps/flipcash/core/src/{main => androidMain}/res/drawable/ic_phantom_buy_connect.xml (100%) rename apps/flipcash/core/src/{main => androidMain}/res/drawable/ic_phantom_connected.xml (100%) rename apps/flipcash/core/src/{main => androidMain}/res/drawable/ic_phantom_wallet.xml (100%) rename apps/flipcash/core/src/{main => androidMain}/res/drawable/ic_plus.xml (100%) rename apps/flipcash/core/src/{main => androidMain}/res/drawable/ic_qr_code.xml (100%) rename apps/flipcash/core/src/{main => androidMain}/res/drawable/ic_screen_frame.xml (100%) rename apps/flipcash/core/src/{main => androidMain}/res/drawable/ic_send_large.xml (100%) rename apps/flipcash/core/src/{main => androidMain}/res/drawable/ic_send_outlined.xml (100%) rename apps/flipcash/core/src/{main => androidMain}/res/drawable/ic_social_discord.xml (100%) rename apps/flipcash/core/src/{main => androidMain}/res/drawable/ic_social_tg.xml (100%) rename apps/flipcash/core/src/{main => androidMain}/res/drawable/ic_social_web.xml (100%) rename apps/flipcash/core/src/{main => androidMain}/res/drawable/ic_social_x.xml (100%) rename apps/flipcash/core/src/{main => androidMain}/res/drawable/ic_solana_logo.xml (100%) rename apps/flipcash/core/src/{main => androidMain}/res/drawable/ic_solflare_wallet.xml (100%) rename apps/flipcash/core/src/{main => androidMain}/res/drawable/ic_tipcode.xml (100%) rename apps/flipcash/core/src/{main => androidMain}/res/drawable/ic_tipping_hand.xml (100%) rename apps/flipcash/core/src/{main => androidMain}/res/drawable/ic_transfer_deposit.xml (100%) rename apps/flipcash/core/src/{main => androidMain}/res/drawable/ic_transfer_withdraw.xml (100%) rename apps/flipcash/core/src/{main => androidMain}/res/drawable/ic_trophy.xml (100%) rename apps/flipcash/core/src/{main => androidMain}/res/drawable/ic_unchecked.xml (100%) rename apps/flipcash/core/src/{main => androidMain}/res/drawable/ic_undo.xml (100%) rename apps/flipcash/core/src/{main => androidMain}/res/drawable/ic_unknown_contact.xml (100%) rename apps/flipcash/core/src/{main => androidMain}/res/drawable/ic_usdc.xml (100%) rename apps/flipcash/core/src/{main => androidMain}/res/drawable/ic_usdc_on_solana.xml (100%) rename apps/flipcash/core/src/{main => androidMain}/res/drawable/ic_wallet.xml (100%) rename apps/flipcash/core/src/{main => androidMain}/res/drawable/ic_warning_alert_large.xml (100%) rename apps/flipcash/core/src/{main => androidMain}/res/drawable/ic_withdraw_usdf_as_usdc.xml (100%) rename apps/flipcash/core/src/{main => androidMain}/res/values/strings-universal.xml (100%) rename apps/flipcash/core/src/{main => androidMain}/res/values/strings.xml (100%) rename apps/flipcash/core/src/{main => commonMain}/kotlin/com/flipcash/app/core/blocklist/BlockedUserProfile.kt (100%) rename apps/flipcash/core/src/{main => commonMain}/kotlin/com/flipcash/app/core/feed/ActivityFeedMessage.kt (100%) diff --git a/apps/flipcash/core/build.gradle.kts b/apps/flipcash/core/build.gradle.kts index f9e14795ad..0967c1843a 100644 --- a/apps/flipcash/core/build.gradle.kts +++ b/apps/flipcash/core/build.gradle.kts @@ -1,49 +1,72 @@ plugins { - alias(libs.plugins.flipcash.android.feature) + alias(libs.plugins.flipcash.kmp.app.library) + alias(libs.plugins.compose.compiler) + alias(libs.plugins.kotlin.ksp) } -android { - namespace = "${Gradle.flipcashNamespace}.core" -} - -dependencies { - implementation(libs.bundles.haze) - implementation(libs.zxing) - testImplementation(kotlin("test")) - testImplementation(libs.bundles.unit.testing) - testImplementation(libs.robolectric) - - implementation(libs.androidx.browser) - - implementation(libs.kotlinx.serialization.core) - implementation(libs.kotlinx.serialization.json) - - implementation(platform(libs.firebase.bom)) - implementation(libs.firebase.messaging) - - implementation(libs.androidx.localbroadcastmanager) - implementation(libs.androidx.datastore) - implementation(libs.compose.material3) +kotlin { + android { + namespace = "${Gradle.flipcashNamespace}.core" + androidResources { + enable = true + } + } - api(libs.coil3) - api(libs.coil3.network) + sourceSets { + commonMain.dependencies { + implementation(libs.kotlinx.serialization.core) + implementation(libs.kotlinx.serialization.json) + implementation(libs.jetbrains.compose.runtime) - api(project(":services:flipcash-compose")) + api(project(":services:flipcash")) + api(project(":services:opencode")) + implementation(project(":libs:encryption:keys")) + } + androidMain.dependencies { + // What flipcash.android.feature supplied before the move to KMP. + implementation(libs.bundles.hilt) + implementation(project.dependencies.platform(libs.compose.bom)) + implementation(libs.bundles.compose) + implementation(libs.rinku.compose) + implementation(project(":libs:coroutines")) + implementation(project(":libs:logging")) + implementation(project(":ui:components")) + implementation(project(":ui:navigation")) + implementation(project(":ui:resources")) + implementation(project(":ui:theme")) - api(project(":libs:reporting")) - implementation(project(":libs:messaging")) - api(project(":libs:permissions:public")) - implementation(project(":libs:vibrator:public")) - - implementation(project(":apps:flipcash:shared:userflags")) - api(project(":apps:flipcash:shared:theme")) - - api(libs.sodium.bindings) - - api(project(":vendor:kik:scanner")) - - api(project(":ui:core")) - api(libs.navigation3.runtime) + implementation(libs.bundles.haze) + implementation(libs.zxing) + implementation(libs.androidx.browser) + implementation(project.dependencies.platform(libs.firebase.bom)) + implementation(libs.firebase.messaging) + implementation(libs.androidx.localbroadcastmanager) + implementation(libs.androidx.datastore) + implementation(libs.compose.material3) + api(libs.coil3) + api(libs.coil3.network) + api(project(":services:flipcash-compose")) + api(project(":libs:reporting")) + implementation(project(":libs:messaging")) + api(project(":libs:permissions:public")) + implementation(project(":libs:vibrator:public")) + implementation(project(":apps:flipcash:shared:userflags")) + api(project(":apps:flipcash:shared:theme")) + api(libs.sodium.bindings) + api(project(":vendor:kik:scanner")) + api(project(":ui:core")) + api(libs.navigation3.runtime) + api(project(":vendor:tipkit:tipkit-m2")) + } + getByName("androidHostTest").dependencies { + implementation(kotlin("test")) + implementation(libs.bundles.unit.testing) + implementation(libs.robolectric) + } + } +} - api(project(":vendor:tipkit:tipkit-m2")) +dependencies { + add("kspAndroid", libs.hilt.android.compiler) + add("kspAndroid", libs.hilt.compiler) } diff --git a/apps/flipcash/core/src/test/kotlin/com/flipcash/app/core/MainCoroutineRule.kt b/apps/flipcash/core/src/androidHostTest/kotlin/com/flipcash/app/core/MainCoroutineRule.kt similarity index 100% rename from apps/flipcash/core/src/test/kotlin/com/flipcash/app/core/MainCoroutineRule.kt rename to apps/flipcash/core/src/androidHostTest/kotlin/com/flipcash/app/core/MainCoroutineRule.kt diff --git a/apps/flipcash/core/src/test/kotlin/com/flipcash/app/core/bill/BillStateTest.kt b/apps/flipcash/core/src/androidHostTest/kotlin/com/flipcash/app/core/bill/BillStateTest.kt similarity index 100% rename from apps/flipcash/core/src/test/kotlin/com/flipcash/app/core/bill/BillStateTest.kt rename to apps/flipcash/core/src/androidHostTest/kotlin/com/flipcash/app/core/bill/BillStateTest.kt diff --git a/apps/flipcash/core/src/test/kotlin/com/flipcash/app/core/bill/ScannableTest.kt b/apps/flipcash/core/src/androidHostTest/kotlin/com/flipcash/app/core/bill/ScannableTest.kt similarity index 100% rename from apps/flipcash/core/src/test/kotlin/com/flipcash/app/core/bill/ScannableTest.kt rename to apps/flipcash/core/src/androidHostTest/kotlin/com/flipcash/app/core/bill/ScannableTest.kt diff --git a/apps/flipcash/core/src/test/kotlin/com/flipcash/app/core/cache/CachePolicyHandlerTest.kt b/apps/flipcash/core/src/androidHostTest/kotlin/com/flipcash/app/core/cache/CachePolicyHandlerTest.kt similarity index 100% rename from apps/flipcash/core/src/test/kotlin/com/flipcash/app/core/cache/CachePolicyHandlerTest.kt rename to apps/flipcash/core/src/androidHostTest/kotlin/com/flipcash/app/core/cache/CachePolicyHandlerTest.kt diff --git a/apps/flipcash/core/src/test/kotlin/com/flipcash/app/core/chat/ProfileOriginTest.kt b/apps/flipcash/core/src/androidHostTest/kotlin/com/flipcash/app/core/chat/ProfileOriginTest.kt similarity index 100% rename from apps/flipcash/core/src/test/kotlin/com/flipcash/app/core/chat/ProfileOriginTest.kt rename to apps/flipcash/core/src/androidHostTest/kotlin/com/flipcash/app/core/chat/ProfileOriginTest.kt diff --git a/apps/flipcash/core/src/test/kotlin/com/flipcash/app/core/data/LoadableTest.kt b/apps/flipcash/core/src/androidHostTest/kotlin/com/flipcash/app/core/data/LoadableTest.kt similarity index 100% rename from apps/flipcash/core/src/test/kotlin/com/flipcash/app/core/data/LoadableTest.kt rename to apps/flipcash/core/src/androidHostTest/kotlin/com/flipcash/app/core/data/LoadableTest.kt diff --git a/apps/flipcash/core/src/test/kotlin/com/flipcash/app/core/extensions/ListExtensionsTest.kt b/apps/flipcash/core/src/androidHostTest/kotlin/com/flipcash/app/core/extensions/ListExtensionsTest.kt similarity index 100% rename from apps/flipcash/core/src/test/kotlin/com/flipcash/app/core/extensions/ListExtensionsTest.kt rename to apps/flipcash/core/src/androidHostTest/kotlin/com/flipcash/app/core/extensions/ListExtensionsTest.kt diff --git a/apps/flipcash/core/src/test/kotlin/com/flipcash/app/core/feed/ActivityFeedMessageTest.kt b/apps/flipcash/core/src/androidHostTest/kotlin/com/flipcash/app/core/feed/ActivityFeedMessageTest.kt similarity index 100% rename from apps/flipcash/core/src/test/kotlin/com/flipcash/app/core/feed/ActivityFeedMessageTest.kt rename to apps/flipcash/core/src/androidHostTest/kotlin/com/flipcash/app/core/feed/ActivityFeedMessageTest.kt diff --git a/apps/flipcash/core/src/test/kotlin/com/flipcash/app/core/internal/bill/BillControllerTest.kt b/apps/flipcash/core/src/androidHostTest/kotlin/com/flipcash/app/core/internal/bill/BillControllerTest.kt similarity index 100% rename from apps/flipcash/core/src/test/kotlin/com/flipcash/app/core/internal/bill/BillControllerTest.kt rename to apps/flipcash/core/src/androidHostTest/kotlin/com/flipcash/app/core/internal/bill/BillControllerTest.kt diff --git a/apps/flipcash/core/src/test/kotlin/com/flipcash/app/core/internal/extensions/ResultExtensionsTest.kt b/apps/flipcash/core/src/androidHostTest/kotlin/com/flipcash/app/core/internal/extensions/ResultExtensionsTest.kt similarity index 100% rename from apps/flipcash/core/src/test/kotlin/com/flipcash/app/core/internal/extensions/ResultExtensionsTest.kt rename to apps/flipcash/core/src/androidHostTest/kotlin/com/flipcash/app/core/internal/extensions/ResultExtensionsTest.kt diff --git a/apps/flipcash/core/src/test/kotlin/com/flipcash/app/core/links/ExternalLinksTest.kt b/apps/flipcash/core/src/androidHostTest/kotlin/com/flipcash/app/core/links/ExternalLinksTest.kt similarity index 100% rename from apps/flipcash/core/src/test/kotlin/com/flipcash/app/core/links/ExternalLinksTest.kt rename to apps/flipcash/core/src/androidHostTest/kotlin/com/flipcash/app/core/links/ExternalLinksTest.kt diff --git a/apps/flipcash/core/src/test/kotlin/com/flipcash/app/core/links/TrustedLinksTest.kt b/apps/flipcash/core/src/androidHostTest/kotlin/com/flipcash/app/core/links/TrustedLinksTest.kt similarity index 100% rename from apps/flipcash/core/src/test/kotlin/com/flipcash/app/core/links/TrustedLinksTest.kt rename to apps/flipcash/core/src/androidHostTest/kotlin/com/flipcash/app/core/links/TrustedLinksTest.kt diff --git a/apps/flipcash/core/src/test/kotlin/com/flipcash/app/core/media/MediaUrlResolverTest.kt b/apps/flipcash/core/src/androidHostTest/kotlin/com/flipcash/app/core/media/MediaUrlResolverTest.kt similarity index 100% rename from apps/flipcash/core/src/test/kotlin/com/flipcash/app/core/media/MediaUrlResolverTest.kt rename to apps/flipcash/core/src/androidHostTest/kotlin/com/flipcash/app/core/media/MediaUrlResolverTest.kt diff --git a/apps/flipcash/core/src/test/kotlin/com/flipcash/app/core/money/FormatUtilsTest.kt b/apps/flipcash/core/src/androidHostTest/kotlin/com/flipcash/app/core/money/FormatUtilsTest.kt similarity index 100% rename from apps/flipcash/core/src/test/kotlin/com/flipcash/app/core/money/FormatUtilsTest.kt rename to apps/flipcash/core/src/androidHostTest/kotlin/com/flipcash/app/core/money/FormatUtilsTest.kt diff --git a/apps/flipcash/core/src/test/kotlin/com/flipcash/app/core/navigation/DeeplinkFragmentsTest.kt b/apps/flipcash/core/src/androidHostTest/kotlin/com/flipcash/app/core/navigation/DeeplinkFragmentsTest.kt similarity index 100% rename from apps/flipcash/core/src/test/kotlin/com/flipcash/app/core/navigation/DeeplinkFragmentsTest.kt rename to apps/flipcash/core/src/androidHostTest/kotlin/com/flipcash/app/core/navigation/DeeplinkFragmentsTest.kt diff --git a/apps/flipcash/core/src/test/kotlin/com/flipcash/app/core/navigation/DeeplinkScanPolicyTest.kt b/apps/flipcash/core/src/androidHostTest/kotlin/com/flipcash/app/core/navigation/DeeplinkScanPolicyTest.kt similarity index 100% rename from apps/flipcash/core/src/test/kotlin/com/flipcash/app/core/navigation/DeeplinkScanPolicyTest.kt rename to apps/flipcash/core/src/androidHostTest/kotlin/com/flipcash/app/core/navigation/DeeplinkScanPolicyTest.kt diff --git a/apps/flipcash/core/src/test/kotlin/com/flipcash/app/core/navigation/HomeRouteTest.kt b/apps/flipcash/core/src/androidHostTest/kotlin/com/flipcash/app/core/navigation/HomeRouteTest.kt similarity index 100% rename from apps/flipcash/core/src/test/kotlin/com/flipcash/app/core/navigation/HomeRouteTest.kt rename to apps/flipcash/core/src/androidHostTest/kotlin/com/flipcash/app/core/navigation/HomeRouteTest.kt diff --git a/apps/flipcash/core/src/test/kotlin/com/flipcash/app/core/navigation/NavBarRoutesTest.kt b/apps/flipcash/core/src/androidHostTest/kotlin/com/flipcash/app/core/navigation/NavBarRoutesTest.kt similarity index 100% rename from apps/flipcash/core/src/test/kotlin/com/flipcash/app/core/navigation/NavBarRoutesTest.kt rename to apps/flipcash/core/src/androidHostTest/kotlin/com/flipcash/app/core/navigation/NavBarRoutesTest.kt diff --git a/apps/flipcash/core/src/test/kotlin/com/flipcash/app/core/share/KikCodePainterTest.kt b/apps/flipcash/core/src/androidHostTest/kotlin/com/flipcash/app/core/share/KikCodePainterTest.kt similarity index 100% rename from apps/flipcash/core/src/test/kotlin/com/flipcash/app/core/share/KikCodePainterTest.kt rename to apps/flipcash/core/src/androidHostTest/kotlin/com/flipcash/app/core/share/KikCodePainterTest.kt diff --git a/apps/flipcash/core/src/test/kotlin/com/flipcash/app/core/share/TipCodeExportNameTest.kt b/apps/flipcash/core/src/androidHostTest/kotlin/com/flipcash/app/core/share/TipCodeExportNameTest.kt similarity index 100% rename from apps/flipcash/core/src/test/kotlin/com/flipcash/app/core/share/TipCodeExportNameTest.kt rename to apps/flipcash/core/src/androidHostTest/kotlin/com/flipcash/app/core/share/TipCodeExportNameTest.kt diff --git a/apps/flipcash/core/src/test/kotlin/com/flipcash/app/core/share/groupcard/GroupCardQrTest.kt b/apps/flipcash/core/src/androidHostTest/kotlin/com/flipcash/app/core/share/groupcard/GroupCardQrTest.kt similarity index 100% rename from apps/flipcash/core/src/test/kotlin/com/flipcash/app/core/share/groupcard/GroupCardQrTest.kt rename to apps/flipcash/core/src/androidHostTest/kotlin/com/flipcash/app/core/share/groupcard/GroupCardQrTest.kt diff --git a/apps/flipcash/core/src/test/kotlin/com/flipcash/app/core/time/FakeTimeProviderTest.kt b/apps/flipcash/core/src/androidHostTest/kotlin/com/flipcash/app/core/time/FakeTimeProviderTest.kt similarity index 100% rename from apps/flipcash/core/src/test/kotlin/com/flipcash/app/core/time/FakeTimeProviderTest.kt rename to apps/flipcash/core/src/androidHostTest/kotlin/com/flipcash/app/core/time/FakeTimeProviderTest.kt diff --git a/apps/flipcash/core/src/test/kotlin/com/flipcash/app/core/tokens/CompletedInPlaceTest.kt b/apps/flipcash/core/src/androidHostTest/kotlin/com/flipcash/app/core/tokens/CompletedInPlaceTest.kt similarity index 100% rename from apps/flipcash/core/src/test/kotlin/com/flipcash/app/core/tokens/CompletedInPlaceTest.kt rename to apps/flipcash/core/src/androidHostTest/kotlin/com/flipcash/app/core/tokens/CompletedInPlaceTest.kt diff --git a/apps/flipcash/core/src/test/kotlin/com/flipcash/app/core/tokens/TokenInfoEntryTest.kt b/apps/flipcash/core/src/androidHostTest/kotlin/com/flipcash/app/core/tokens/TokenInfoEntryTest.kt similarity index 100% rename from apps/flipcash/core/src/test/kotlin/com/flipcash/app/core/tokens/TokenInfoEntryTest.kt rename to apps/flipcash/core/src/androidHostTest/kotlin/com/flipcash/app/core/tokens/TokenInfoEntryTest.kt diff --git a/apps/flipcash/core/src/test/kotlin/com/flipcash/app/core/updater/NetworkUpdaterTest.kt b/apps/flipcash/core/src/androidHostTest/kotlin/com/flipcash/app/core/updater/NetworkUpdaterTest.kt similarity index 100% rename from apps/flipcash/core/src/test/kotlin/com/flipcash/app/core/updater/NetworkUpdaterTest.kt rename to apps/flipcash/core/src/androidHostTest/kotlin/com/flipcash/app/core/updater/NetworkUpdaterTest.kt diff --git a/apps/flipcash/core/src/test/kotlin/com/flipcash/app/core/util/AbbreviatedLinkTest.kt b/apps/flipcash/core/src/androidHostTest/kotlin/com/flipcash/app/core/util/AbbreviatedLinkTest.kt similarity index 100% rename from apps/flipcash/core/src/test/kotlin/com/flipcash/app/core/util/AbbreviatedLinkTest.kt rename to apps/flipcash/core/src/androidHostTest/kotlin/com/flipcash/app/core/util/AbbreviatedLinkTest.kt diff --git a/apps/flipcash/core/src/test/kotlin/com/flipcash/app/core/util/FiatTest.kt b/apps/flipcash/core/src/androidHostTest/kotlin/com/flipcash/app/core/util/FiatTest.kt similarity index 100% rename from apps/flipcash/core/src/test/kotlin/com/flipcash/app/core/util/FiatTest.kt rename to apps/flipcash/core/src/androidHostTest/kotlin/com/flipcash/app/core/util/FiatTest.kt diff --git a/apps/flipcash/core/src/test/kotlin/com/flipcash/app/core/util/NumberTest.kt b/apps/flipcash/core/src/androidHostTest/kotlin/com/flipcash/app/core/util/NumberTest.kt similarity index 100% rename from apps/flipcash/core/src/test/kotlin/com/flipcash/app/core/util/NumberTest.kt rename to apps/flipcash/core/src/androidHostTest/kotlin/com/flipcash/app/core/util/NumberTest.kt diff --git a/apps/flipcash/core/src/main/kotlin/com/flipcash/app/core/AppRoute.kt b/apps/flipcash/core/src/androidMain/kotlin/com/flipcash/app/core/AppRoute.kt similarity index 100% rename from apps/flipcash/core/src/main/kotlin/com/flipcash/app/core/AppRoute.kt rename to apps/flipcash/core/src/androidMain/kotlin/com/flipcash/app/core/AppRoute.kt diff --git a/apps/flipcash/core/src/main/kotlin/com/flipcash/app/core/Locals.kt b/apps/flipcash/core/src/androidMain/kotlin/com/flipcash/app/core/Locals.kt similarity index 100% rename from apps/flipcash/core/src/main/kotlin/com/flipcash/app/core/Locals.kt rename to apps/flipcash/core/src/androidMain/kotlin/com/flipcash/app/core/Locals.kt diff --git a/apps/flipcash/core/src/main/kotlin/com/flipcash/app/core/android/ActivityProvider.kt b/apps/flipcash/core/src/androidMain/kotlin/com/flipcash/app/core/android/ActivityProvider.kt similarity index 100% rename from apps/flipcash/core/src/main/kotlin/com/flipcash/app/core/android/ActivityProvider.kt rename to apps/flipcash/core/src/androidMain/kotlin/com/flipcash/app/core/android/ActivityProvider.kt diff --git a/apps/flipcash/core/src/main/kotlin/com/flipcash/app/core/android/IntentLauncher.kt b/apps/flipcash/core/src/androidMain/kotlin/com/flipcash/app/core/android/IntentLauncher.kt similarity index 100% rename from apps/flipcash/core/src/main/kotlin/com/flipcash/app/core/android/IntentLauncher.kt rename to apps/flipcash/core/src/androidMain/kotlin/com/flipcash/app/core/android/IntentLauncher.kt diff --git a/apps/flipcash/core/src/main/kotlin/com/flipcash/app/core/android/IntentUtils.kt b/apps/flipcash/core/src/androidMain/kotlin/com/flipcash/app/core/android/IntentUtils.kt similarity index 100% rename from apps/flipcash/core/src/main/kotlin/com/flipcash/app/core/android/IntentUtils.kt rename to apps/flipcash/core/src/androidMain/kotlin/com/flipcash/app/core/android/IntentUtils.kt diff --git a/apps/flipcash/core/src/main/kotlin/com/flipcash/app/core/android/VersionInfo.kt b/apps/flipcash/core/src/androidMain/kotlin/com/flipcash/app/core/android/VersionInfo.kt similarity index 100% rename from apps/flipcash/core/src/main/kotlin/com/flipcash/app/core/android/VersionInfo.kt rename to apps/flipcash/core/src/androidMain/kotlin/com/flipcash/app/core/android/VersionInfo.kt diff --git a/apps/flipcash/core/src/main/kotlin/com/flipcash/app/core/android/extensions/Context.kt b/apps/flipcash/core/src/androidMain/kotlin/com/flipcash/app/core/android/extensions/Context.kt similarity index 100% rename from apps/flipcash/core/src/main/kotlin/com/flipcash/app/core/android/extensions/Context.kt rename to apps/flipcash/core/src/androidMain/kotlin/com/flipcash/app/core/android/extensions/Context.kt diff --git a/apps/flipcash/core/src/main/kotlin/com/flipcash/app/core/android/extensions/Uri.kt b/apps/flipcash/core/src/androidMain/kotlin/com/flipcash/app/core/android/extensions/Uri.kt similarity index 100% rename from apps/flipcash/core/src/main/kotlin/com/flipcash/app/core/android/extensions/Uri.kt rename to apps/flipcash/core/src/androidMain/kotlin/com/flipcash/app/core/android/extensions/Uri.kt diff --git a/apps/flipcash/core/src/main/kotlin/com/flipcash/app/core/annotations/AccountType.kt b/apps/flipcash/core/src/androidMain/kotlin/com/flipcash/app/core/annotations/AccountType.kt similarity index 100% rename from apps/flipcash/core/src/main/kotlin/com/flipcash/app/core/annotations/AccountType.kt rename to apps/flipcash/core/src/androidMain/kotlin/com/flipcash/app/core/annotations/AccountType.kt diff --git a/apps/flipcash/core/src/main/kotlin/com/flipcash/app/core/bill/BillState.kt b/apps/flipcash/core/src/androidMain/kotlin/com/flipcash/app/core/bill/BillState.kt similarity index 100% rename from apps/flipcash/core/src/main/kotlin/com/flipcash/app/core/bill/BillState.kt rename to apps/flipcash/core/src/androidMain/kotlin/com/flipcash/app/core/bill/BillState.kt diff --git a/apps/flipcash/core/src/main/kotlin/com/flipcash/app/core/bill/PaymentRequest.kt b/apps/flipcash/core/src/androidMain/kotlin/com/flipcash/app/core/bill/PaymentRequest.kt similarity index 100% rename from apps/flipcash/core/src/main/kotlin/com/flipcash/app/core/bill/PaymentRequest.kt rename to apps/flipcash/core/src/androidMain/kotlin/com/flipcash/app/core/bill/PaymentRequest.kt diff --git a/apps/flipcash/core/src/main/kotlin/com/flipcash/app/core/bill/Scannable.kt b/apps/flipcash/core/src/androidMain/kotlin/com/flipcash/app/core/bill/Scannable.kt similarity index 100% rename from apps/flipcash/core/src/main/kotlin/com/flipcash/app/core/bill/Scannable.kt rename to apps/flipcash/core/src/androidMain/kotlin/com/flipcash/app/core/bill/Scannable.kt diff --git a/apps/flipcash/core/src/main/kotlin/com/flipcash/app/core/cache/CacheEntry.kt b/apps/flipcash/core/src/androidMain/kotlin/com/flipcash/app/core/cache/CacheEntry.kt similarity index 100% rename from apps/flipcash/core/src/main/kotlin/com/flipcash/app/core/cache/CacheEntry.kt rename to apps/flipcash/core/src/androidMain/kotlin/com/flipcash/app/core/cache/CacheEntry.kt diff --git a/apps/flipcash/core/src/main/kotlin/com/flipcash/app/core/cache/CachePolicy.kt b/apps/flipcash/core/src/androidMain/kotlin/com/flipcash/app/core/cache/CachePolicy.kt similarity index 100% rename from apps/flipcash/core/src/main/kotlin/com/flipcash/app/core/cache/CachePolicy.kt rename to apps/flipcash/core/src/androidMain/kotlin/com/flipcash/app/core/cache/CachePolicy.kt diff --git a/apps/flipcash/core/src/main/kotlin/com/flipcash/app/core/cache/CachePolicyHandler.kt b/apps/flipcash/core/src/androidMain/kotlin/com/flipcash/app/core/cache/CachePolicyHandler.kt similarity index 100% rename from apps/flipcash/core/src/main/kotlin/com/flipcash/app/core/cache/CachePolicyHandler.kt rename to apps/flipcash/core/src/androidMain/kotlin/com/flipcash/app/core/cache/CachePolicyHandler.kt diff --git a/apps/flipcash/core/src/main/kotlin/com/flipcash/app/core/chat/ChatIdentifier.kt b/apps/flipcash/core/src/androidMain/kotlin/com/flipcash/app/core/chat/ChatIdentifier.kt similarity index 100% rename from apps/flipcash/core/src/main/kotlin/com/flipcash/app/core/chat/ChatIdentifier.kt rename to apps/flipcash/core/src/androidMain/kotlin/com/flipcash/app/core/chat/ChatIdentifier.kt diff --git a/apps/flipcash/core/src/main/kotlin/com/flipcash/app/core/chat/ChatParticipant.kt b/apps/flipcash/core/src/androidMain/kotlin/com/flipcash/app/core/chat/ChatParticipant.kt similarity index 100% rename from apps/flipcash/core/src/main/kotlin/com/flipcash/app/core/chat/ChatParticipant.kt rename to apps/flipcash/core/src/androidMain/kotlin/com/flipcash/app/core/chat/ChatParticipant.kt diff --git a/apps/flipcash/core/src/main/kotlin/com/flipcash/app/core/chat/ChatStep.kt b/apps/flipcash/core/src/androidMain/kotlin/com/flipcash/app/core/chat/ChatStep.kt similarity index 100% rename from apps/flipcash/core/src/main/kotlin/com/flipcash/app/core/chat/ChatStep.kt rename to apps/flipcash/core/src/androidMain/kotlin/com/flipcash/app/core/chat/ChatStep.kt diff --git a/apps/flipcash/core/src/main/kotlin/com/flipcash/app/core/chat/DmDestination.kt b/apps/flipcash/core/src/androidMain/kotlin/com/flipcash/app/core/chat/DmDestination.kt similarity index 100% rename from apps/flipcash/core/src/main/kotlin/com/flipcash/app/core/chat/DmDestination.kt rename to apps/flipcash/core/src/androidMain/kotlin/com/flipcash/app/core/chat/DmDestination.kt diff --git a/apps/flipcash/core/src/main/kotlin/com/flipcash/app/core/chat/NewGroupStep.kt b/apps/flipcash/core/src/androidMain/kotlin/com/flipcash/app/core/chat/NewGroupStep.kt similarity index 100% rename from apps/flipcash/core/src/main/kotlin/com/flipcash/app/core/chat/NewGroupStep.kt rename to apps/flipcash/core/src/androidMain/kotlin/com/flipcash/app/core/chat/NewGroupStep.kt diff --git a/apps/flipcash/core/src/main/kotlin/com/flipcash/app/core/chat/ProfileAddress.kt b/apps/flipcash/core/src/androidMain/kotlin/com/flipcash/app/core/chat/ProfileAddress.kt similarity index 100% rename from apps/flipcash/core/src/main/kotlin/com/flipcash/app/core/chat/ProfileAddress.kt rename to apps/flipcash/core/src/androidMain/kotlin/com/flipcash/app/core/chat/ProfileAddress.kt diff --git a/apps/flipcash/core/src/main/kotlin/com/flipcash/app/core/chat/ReportSubject.kt b/apps/flipcash/core/src/androidMain/kotlin/com/flipcash/app/core/chat/ReportSubject.kt similarity index 100% rename from apps/flipcash/core/src/main/kotlin/com/flipcash/app/core/chat/ReportSubject.kt rename to apps/flipcash/core/src/androidMain/kotlin/com/flipcash/app/core/chat/ReportSubject.kt diff --git a/apps/flipcash/core/src/main/kotlin/com/flipcash/app/core/chrome/ChromeTabsUtils.kt b/apps/flipcash/core/src/androidMain/kotlin/com/flipcash/app/core/chrome/ChromeTabsUtils.kt similarity index 100% rename from apps/flipcash/core/src/main/kotlin/com/flipcash/app/core/chrome/ChromeTabsUtils.kt rename to apps/flipcash/core/src/androidMain/kotlin/com/flipcash/app/core/chrome/ChromeTabsUtils.kt diff --git a/apps/flipcash/core/src/main/kotlin/com/flipcash/app/core/contacts/DeviceContact.kt b/apps/flipcash/core/src/androidMain/kotlin/com/flipcash/app/core/contacts/DeviceContact.kt similarity index 100% rename from apps/flipcash/core/src/main/kotlin/com/flipcash/app/core/contacts/DeviceContact.kt rename to apps/flipcash/core/src/androidMain/kotlin/com/flipcash/app/core/contacts/DeviceContact.kt diff --git a/apps/flipcash/core/src/main/kotlin/com/flipcash/app/core/data/Loadable.kt b/apps/flipcash/core/src/androidMain/kotlin/com/flipcash/app/core/data/Loadable.kt similarity index 100% rename from apps/flipcash/core/src/main/kotlin/com/flipcash/app/core/data/Loadable.kt rename to apps/flipcash/core/src/androidMain/kotlin/com/flipcash/app/core/data/Loadable.kt diff --git a/apps/flipcash/core/src/main/kotlin/com/flipcash/app/core/deposit/DepositResult.kt b/apps/flipcash/core/src/androidMain/kotlin/com/flipcash/app/core/deposit/DepositResult.kt similarity index 100% rename from apps/flipcash/core/src/main/kotlin/com/flipcash/app/core/deposit/DepositResult.kt rename to apps/flipcash/core/src/androidMain/kotlin/com/flipcash/app/core/deposit/DepositResult.kt diff --git a/apps/flipcash/core/src/main/kotlin/com/flipcash/app/core/deposit/DepositStep.kt b/apps/flipcash/core/src/androidMain/kotlin/com/flipcash/app/core/deposit/DepositStep.kt similarity index 100% rename from apps/flipcash/core/src/main/kotlin/com/flipcash/app/core/deposit/DepositStep.kt rename to apps/flipcash/core/src/androidMain/kotlin/com/flipcash/app/core/deposit/DepositStep.kt diff --git a/apps/flipcash/core/src/main/kotlin/com/flipcash/app/core/encryption/Sodium.kt b/apps/flipcash/core/src/androidMain/kotlin/com/flipcash/app/core/encryption/Sodium.kt similarity index 100% rename from apps/flipcash/core/src/main/kotlin/com/flipcash/app/core/encryption/Sodium.kt rename to apps/flipcash/core/src/androidMain/kotlin/com/flipcash/app/core/encryption/Sodium.kt diff --git a/apps/flipcash/core/src/main/kotlin/com/flipcash/app/core/extensions/Boolean.kt b/apps/flipcash/core/src/androidMain/kotlin/com/flipcash/app/core/extensions/Boolean.kt similarity index 100% rename from apps/flipcash/core/src/main/kotlin/com/flipcash/app/core/extensions/Boolean.kt rename to apps/flipcash/core/src/androidMain/kotlin/com/flipcash/app/core/extensions/Boolean.kt diff --git a/apps/flipcash/core/src/main/kotlin/com/flipcash/app/core/extensions/Clipboard.kt b/apps/flipcash/core/src/androidMain/kotlin/com/flipcash/app/core/extensions/Clipboard.kt similarity index 100% rename from apps/flipcash/core/src/main/kotlin/com/flipcash/app/core/extensions/Clipboard.kt rename to apps/flipcash/core/src/androidMain/kotlin/com/flipcash/app/core/extensions/Clipboard.kt diff --git a/apps/flipcash/core/src/main/kotlin/com/flipcash/app/core/extensions/CodeNavigator.kt b/apps/flipcash/core/src/androidMain/kotlin/com/flipcash/app/core/extensions/CodeNavigator.kt similarity index 100% rename from apps/flipcash/core/src/main/kotlin/com/flipcash/app/core/extensions/CodeNavigator.kt rename to apps/flipcash/core/src/androidMain/kotlin/com/flipcash/app/core/extensions/CodeNavigator.kt diff --git a/apps/flipcash/core/src/main/kotlin/com/flipcash/app/core/extensions/Flow.kt b/apps/flipcash/core/src/androidMain/kotlin/com/flipcash/app/core/extensions/Flow.kt similarity index 100% rename from apps/flipcash/core/src/main/kotlin/com/flipcash/app/core/extensions/Flow.kt rename to apps/flipcash/core/src/androidMain/kotlin/com/flipcash/app/core/extensions/Flow.kt diff --git a/apps/flipcash/core/src/main/kotlin/com/flipcash/app/core/extensions/List.kt b/apps/flipcash/core/src/androidMain/kotlin/com/flipcash/app/core/extensions/List.kt similarity index 100% rename from apps/flipcash/core/src/main/kotlin/com/flipcash/app/core/extensions/List.kt rename to apps/flipcash/core/src/androidMain/kotlin/com/flipcash/app/core/extensions/List.kt diff --git a/apps/flipcash/core/src/main/kotlin/com/flipcash/app/core/extensions/Pair.kt b/apps/flipcash/core/src/androidMain/kotlin/com/flipcash/app/core/extensions/Pair.kt similarity index 100% rename from apps/flipcash/core/src/main/kotlin/com/flipcash/app/core/extensions/Pair.kt rename to apps/flipcash/core/src/androidMain/kotlin/com/flipcash/app/core/extensions/Pair.kt diff --git a/apps/flipcash/core/src/main/kotlin/com/flipcash/app/core/extensions/Result.kt b/apps/flipcash/core/src/androidMain/kotlin/com/flipcash/app/core/extensions/Result.kt similarity index 100% rename from apps/flipcash/core/src/main/kotlin/com/flipcash/app/core/extensions/Result.kt rename to apps/flipcash/core/src/androidMain/kotlin/com/flipcash/app/core/extensions/Result.kt diff --git a/apps/flipcash/core/src/main/kotlin/com/flipcash/app/core/internal/bill/BillController.kt b/apps/flipcash/core/src/androidMain/kotlin/com/flipcash/app/core/internal/bill/BillController.kt similarity index 100% rename from apps/flipcash/core/src/main/kotlin/com/flipcash/app/core/internal/bill/BillController.kt rename to apps/flipcash/core/src/androidMain/kotlin/com/flipcash/app/core/internal/bill/BillController.kt diff --git a/apps/flipcash/core/src/main/kotlin/com/flipcash/app/core/internal/errors/ErrorUtil.kt b/apps/flipcash/core/src/androidMain/kotlin/com/flipcash/app/core/internal/errors/ErrorUtil.kt similarity index 100% rename from apps/flipcash/core/src/main/kotlin/com/flipcash/app/core/internal/errors/ErrorUtil.kt rename to apps/flipcash/core/src/androidMain/kotlin/com/flipcash/app/core/internal/errors/ErrorUtil.kt diff --git a/apps/flipcash/core/src/main/kotlin/com/flipcash/app/core/internal/extensions/Bitmap.kt b/apps/flipcash/core/src/androidMain/kotlin/com/flipcash/app/core/internal/extensions/Bitmap.kt similarity index 100% rename from apps/flipcash/core/src/main/kotlin/com/flipcash/app/core/internal/extensions/Bitmap.kt rename to apps/flipcash/core/src/androidMain/kotlin/com/flipcash/app/core/internal/extensions/Bitmap.kt diff --git a/apps/flipcash/core/src/main/kotlin/com/flipcash/app/core/internal/extensions/Result.kt b/apps/flipcash/core/src/androidMain/kotlin/com/flipcash/app/core/internal/extensions/Result.kt similarity index 100% rename from apps/flipcash/core/src/main/kotlin/com/flipcash/app/core/internal/extensions/Result.kt rename to apps/flipcash/core/src/androidMain/kotlin/com/flipcash/app/core/internal/extensions/Result.kt diff --git a/apps/flipcash/core/src/main/kotlin/com/flipcash/app/core/internal/updater/ProfileUpdater.kt b/apps/flipcash/core/src/androidMain/kotlin/com/flipcash/app/core/internal/updater/ProfileUpdater.kt similarity index 100% rename from apps/flipcash/core/src/main/kotlin/com/flipcash/app/core/internal/updater/ProfileUpdater.kt rename to apps/flipcash/core/src/androidMain/kotlin/com/flipcash/app/core/internal/updater/ProfileUpdater.kt diff --git a/apps/flipcash/core/src/main/kotlin/com/flipcash/app/core/links/ExternalLinks.kt b/apps/flipcash/core/src/androidMain/kotlin/com/flipcash/app/core/links/ExternalLinks.kt similarity index 100% rename from apps/flipcash/core/src/main/kotlin/com/flipcash/app/core/links/ExternalLinks.kt rename to apps/flipcash/core/src/androidMain/kotlin/com/flipcash/app/core/links/ExternalLinks.kt diff --git a/apps/flipcash/core/src/main/kotlin/com/flipcash/app/core/links/TrustedWebsites.kt b/apps/flipcash/core/src/androidMain/kotlin/com/flipcash/app/core/links/TrustedWebsites.kt similarity index 100% rename from apps/flipcash/core/src/main/kotlin/com/flipcash/app/core/links/TrustedWebsites.kt rename to apps/flipcash/core/src/androidMain/kotlin/com/flipcash/app/core/links/TrustedWebsites.kt diff --git a/apps/flipcash/core/src/main/kotlin/com/flipcash/app/core/media/ImageCachePresence.kt b/apps/flipcash/core/src/androidMain/kotlin/com/flipcash/app/core/media/ImageCachePresence.kt similarity index 100% rename from apps/flipcash/core/src/main/kotlin/com/flipcash/app/core/media/ImageCachePresence.kt rename to apps/flipcash/core/src/androidMain/kotlin/com/flipcash/app/core/media/ImageCachePresence.kt diff --git a/apps/flipcash/core/src/main/kotlin/com/flipcash/app/core/media/MediaUrlResolver.kt b/apps/flipcash/core/src/androidMain/kotlin/com/flipcash/app/core/media/MediaUrlResolver.kt similarity index 100% rename from apps/flipcash/core/src/main/kotlin/com/flipcash/app/core/media/MediaUrlResolver.kt rename to apps/flipcash/core/src/androidMain/kotlin/com/flipcash/app/core/media/MediaUrlResolver.kt diff --git a/apps/flipcash/core/src/main/kotlin/com/flipcash/app/core/media/RememberMediaUrl.kt b/apps/flipcash/core/src/androidMain/kotlin/com/flipcash/app/core/media/RememberMediaUrl.kt similarity index 100% rename from apps/flipcash/core/src/main/kotlin/com/flipcash/app/core/media/RememberMediaUrl.kt rename to apps/flipcash/core/src/androidMain/kotlin/com/flipcash/app/core/media/RememberMediaUrl.kt diff --git a/apps/flipcash/core/src/main/kotlin/com/flipcash/app/core/moderation/ModerationMessages.kt b/apps/flipcash/core/src/androidMain/kotlin/com/flipcash/app/core/moderation/ModerationMessages.kt similarity index 100% rename from apps/flipcash/core/src/main/kotlin/com/flipcash/app/core/moderation/ModerationMessages.kt rename to apps/flipcash/core/src/androidMain/kotlin/com/flipcash/app/core/moderation/ModerationMessages.kt diff --git a/apps/flipcash/core/src/main/kotlin/com/flipcash/app/core/money/FormatUtils.kt b/apps/flipcash/core/src/androidMain/kotlin/com/flipcash/app/core/money/FormatUtils.kt similarity index 100% rename from apps/flipcash/core/src/main/kotlin/com/flipcash/app/core/money/FormatUtils.kt rename to apps/flipcash/core/src/androidMain/kotlin/com/flipcash/app/core/money/FormatUtils.kt diff --git a/apps/flipcash/core/src/main/kotlin/com/flipcash/app/core/navigation/DeeplinkAction.kt b/apps/flipcash/core/src/androidMain/kotlin/com/flipcash/app/core/navigation/DeeplinkAction.kt similarity index 100% rename from apps/flipcash/core/src/main/kotlin/com/flipcash/app/core/navigation/DeeplinkAction.kt rename to apps/flipcash/core/src/androidMain/kotlin/com/flipcash/app/core/navigation/DeeplinkAction.kt diff --git a/apps/flipcash/core/src/main/kotlin/com/flipcash/app/core/navigation/DeeplinkType.kt b/apps/flipcash/core/src/androidMain/kotlin/com/flipcash/app/core/navigation/DeeplinkType.kt similarity index 100% rename from apps/flipcash/core/src/main/kotlin/com/flipcash/app/core/navigation/DeeplinkType.kt rename to apps/flipcash/core/src/androidMain/kotlin/com/flipcash/app/core/navigation/DeeplinkType.kt diff --git a/apps/flipcash/core/src/main/kotlin/com/flipcash/app/core/navigation/HomeRoute.kt b/apps/flipcash/core/src/androidMain/kotlin/com/flipcash/app/core/navigation/HomeRoute.kt similarity index 100% rename from apps/flipcash/core/src/main/kotlin/com/flipcash/app/core/navigation/HomeRoute.kt rename to apps/flipcash/core/src/androidMain/kotlin/com/flipcash/app/core/navigation/HomeRoute.kt diff --git a/apps/flipcash/core/src/main/kotlin/com/flipcash/app/core/navigation/LocalTabBarPadding.kt b/apps/flipcash/core/src/androidMain/kotlin/com/flipcash/app/core/navigation/LocalTabBarPadding.kt similarity index 100% rename from apps/flipcash/core/src/main/kotlin/com/flipcash/app/core/navigation/LocalTabBarPadding.kt rename to apps/flipcash/core/src/androidMain/kotlin/com/flipcash/app/core/navigation/LocalTabBarPadding.kt diff --git a/apps/flipcash/core/src/main/kotlin/com/flipcash/app/core/navigation/NavBarButton.kt b/apps/flipcash/core/src/androidMain/kotlin/com/flipcash/app/core/navigation/NavBarButton.kt similarity index 100% rename from apps/flipcash/core/src/main/kotlin/com/flipcash/app/core/navigation/NavBarButton.kt rename to apps/flipcash/core/src/androidMain/kotlin/com/flipcash/app/core/navigation/NavBarButton.kt diff --git a/apps/flipcash/core/src/main/kotlin/com/flipcash/app/core/navigation/NavBarRoutes.kt b/apps/flipcash/core/src/androidMain/kotlin/com/flipcash/app/core/navigation/NavBarRoutes.kt similarity index 100% rename from apps/flipcash/core/src/main/kotlin/com/flipcash/app/core/navigation/NavBarRoutes.kt rename to apps/flipcash/core/src/androidMain/kotlin/com/flipcash/app/core/navigation/NavBarRoutes.kt diff --git a/apps/flipcash/core/src/main/kotlin/com/flipcash/app/core/navigation/SteppedFlowRoute.kt b/apps/flipcash/core/src/androidMain/kotlin/com/flipcash/app/core/navigation/SteppedFlowRoute.kt similarity index 100% rename from apps/flipcash/core/src/main/kotlin/com/flipcash/app/core/navigation/SteppedFlowRoute.kt rename to apps/flipcash/core/src/androidMain/kotlin/com/flipcash/app/core/navigation/SteppedFlowRoute.kt diff --git a/apps/flipcash/core/src/main/kotlin/com/flipcash/app/core/navigation/TabBarVisibility.kt b/apps/flipcash/core/src/androidMain/kotlin/com/flipcash/app/core/navigation/TabBarVisibility.kt similarity index 100% rename from apps/flipcash/core/src/main/kotlin/com/flipcash/app/core/navigation/TabBarVisibility.kt rename to apps/flipcash/core/src/androidMain/kotlin/com/flipcash/app/core/navigation/TabBarVisibility.kt diff --git a/apps/flipcash/core/src/main/kotlin/com/flipcash/app/core/onboarding/OnboardingStep.kt b/apps/flipcash/core/src/androidMain/kotlin/com/flipcash/app/core/onboarding/OnboardingStep.kt similarity index 100% rename from apps/flipcash/core/src/main/kotlin/com/flipcash/app/core/onboarding/OnboardingStep.kt rename to apps/flipcash/core/src/androidMain/kotlin/com/flipcash/app/core/onboarding/OnboardingStep.kt diff --git a/apps/flipcash/core/src/main/kotlin/com/flipcash/app/core/onramp/deeplinks/WalletDeeplinkConnectionResult.kt b/apps/flipcash/core/src/androidMain/kotlin/com/flipcash/app/core/onramp/deeplinks/WalletDeeplinkConnectionResult.kt similarity index 100% rename from apps/flipcash/core/src/main/kotlin/com/flipcash/app/core/onramp/deeplinks/WalletDeeplinkConnectionResult.kt rename to apps/flipcash/core/src/androidMain/kotlin/com/flipcash/app/core/onramp/deeplinks/WalletDeeplinkConnectionResult.kt diff --git a/apps/flipcash/core/src/main/kotlin/com/flipcash/app/core/onramp/ui/ConfirmInWalletButtonLabel.kt b/apps/flipcash/core/src/androidMain/kotlin/com/flipcash/app/core/onramp/ui/ConfirmInWalletButtonLabel.kt similarity index 100% rename from apps/flipcash/core/src/main/kotlin/com/flipcash/app/core/onramp/ui/ConfirmInWalletButtonLabel.kt rename to apps/flipcash/core/src/androidMain/kotlin/com/flipcash/app/core/onramp/ui/ConfirmInWalletButtonLabel.kt diff --git a/apps/flipcash/core/src/main/kotlin/com/flipcash/app/core/onramp/ui/PhantomLabel.kt b/apps/flipcash/core/src/androidMain/kotlin/com/flipcash/app/core/onramp/ui/PhantomLabel.kt similarity index 100% rename from apps/flipcash/core/src/main/kotlin/com/flipcash/app/core/onramp/ui/PhantomLabel.kt rename to apps/flipcash/core/src/androidMain/kotlin/com/flipcash/app/core/onramp/ui/PhantomLabel.kt diff --git a/apps/flipcash/core/src/main/kotlin/com/flipcash/app/core/reporting/ReportStep.kt b/apps/flipcash/core/src/androidMain/kotlin/com/flipcash/app/core/reporting/ReportStep.kt similarity index 100% rename from apps/flipcash/core/src/main/kotlin/com/flipcash/app/core/reporting/ReportStep.kt rename to apps/flipcash/core/src/androidMain/kotlin/com/flipcash/app/core/reporting/ReportStep.kt diff --git a/apps/flipcash/core/src/main/kotlin/com/flipcash/app/core/share/SharePreviewImage.kt b/apps/flipcash/core/src/androidMain/kotlin/com/flipcash/app/core/share/SharePreviewImage.kt similarity index 100% rename from apps/flipcash/core/src/main/kotlin/com/flipcash/app/core/share/SharePreviewImage.kt rename to apps/flipcash/core/src/androidMain/kotlin/com/flipcash/app/core/share/SharePreviewImage.kt diff --git a/apps/flipcash/core/src/main/kotlin/com/flipcash/app/core/share/TipCodeExport.kt b/apps/flipcash/core/src/androidMain/kotlin/com/flipcash/app/core/share/TipCodeExport.kt similarity index 100% rename from apps/flipcash/core/src/main/kotlin/com/flipcash/app/core/share/TipCodeExport.kt rename to apps/flipcash/core/src/androidMain/kotlin/com/flipcash/app/core/share/TipCodeExport.kt diff --git a/apps/flipcash/core/src/main/kotlin/com/flipcash/app/core/share/TipCodeExporter.kt b/apps/flipcash/core/src/androidMain/kotlin/com/flipcash/app/core/share/TipCodeExporter.kt similarity index 100% rename from apps/flipcash/core/src/main/kotlin/com/flipcash/app/core/share/TipCodeExporter.kt rename to apps/flipcash/core/src/androidMain/kotlin/com/flipcash/app/core/share/TipCodeExporter.kt diff --git a/apps/flipcash/core/src/main/kotlin/com/flipcash/app/core/share/TipCodePreview.kt b/apps/flipcash/core/src/androidMain/kotlin/com/flipcash/app/core/share/TipCodePreview.kt similarity index 100% rename from apps/flipcash/core/src/main/kotlin/com/flipcash/app/core/share/TipCodePreview.kt rename to apps/flipcash/core/src/androidMain/kotlin/com/flipcash/app/core/share/TipCodePreview.kt diff --git a/apps/flipcash/core/src/main/kotlin/com/flipcash/app/core/share/TipCodePreviewRenderer.kt b/apps/flipcash/core/src/androidMain/kotlin/com/flipcash/app/core/share/TipCodePreviewRenderer.kt similarity index 100% rename from apps/flipcash/core/src/main/kotlin/com/flipcash/app/core/share/TipCodePreviewRenderer.kt rename to apps/flipcash/core/src/androidMain/kotlin/com/flipcash/app/core/share/TipCodePreviewRenderer.kt diff --git a/apps/flipcash/core/src/main/kotlin/com/flipcash/app/core/share/TipCodePreviewStorage.kt b/apps/flipcash/core/src/androidMain/kotlin/com/flipcash/app/core/share/TipCodePreviewStorage.kt similarity index 100% rename from apps/flipcash/core/src/main/kotlin/com/flipcash/app/core/share/TipCodePreviewStorage.kt rename to apps/flipcash/core/src/androidMain/kotlin/com/flipcash/app/core/share/TipCodePreviewStorage.kt diff --git a/apps/flipcash/core/src/main/kotlin/com/flipcash/app/core/share/groupcard/GroupCardExporter.kt b/apps/flipcash/core/src/androidMain/kotlin/com/flipcash/app/core/share/groupcard/GroupCardExporter.kt similarity index 100% rename from apps/flipcash/core/src/main/kotlin/com/flipcash/app/core/share/groupcard/GroupCardExporter.kt rename to apps/flipcash/core/src/androidMain/kotlin/com/flipcash/app/core/share/groupcard/GroupCardExporter.kt diff --git a/apps/flipcash/core/src/main/kotlin/com/flipcash/app/core/share/groupcard/QrMatrix.kt b/apps/flipcash/core/src/androidMain/kotlin/com/flipcash/app/core/share/groupcard/QrMatrix.kt similarity index 100% rename from apps/flipcash/core/src/main/kotlin/com/flipcash/app/core/share/groupcard/QrMatrix.kt rename to apps/flipcash/core/src/androidMain/kotlin/com/flipcash/app/core/share/groupcard/QrMatrix.kt diff --git a/apps/flipcash/core/src/main/kotlin/com/flipcash/app/core/share/groupcard/StyledQrGeometry.kt b/apps/flipcash/core/src/androidMain/kotlin/com/flipcash/app/core/share/groupcard/StyledQrGeometry.kt similarity index 100% rename from apps/flipcash/core/src/main/kotlin/com/flipcash/app/core/share/groupcard/StyledQrGeometry.kt rename to apps/flipcash/core/src/androidMain/kotlin/com/flipcash/app/core/share/groupcard/StyledQrGeometry.kt diff --git a/apps/flipcash/core/src/main/kotlin/com/flipcash/app/core/share/groupcard/StyledQrRenderer.kt b/apps/flipcash/core/src/androidMain/kotlin/com/flipcash/app/core/share/groupcard/StyledQrRenderer.kt similarity index 100% rename from apps/flipcash/core/src/main/kotlin/com/flipcash/app/core/share/groupcard/StyledQrRenderer.kt rename to apps/flipcash/core/src/androidMain/kotlin/com/flipcash/app/core/share/groupcard/StyledQrRenderer.kt diff --git a/apps/flipcash/core/src/main/kotlin/com/flipcash/app/core/storage/MediaSaver.kt b/apps/flipcash/core/src/androidMain/kotlin/com/flipcash/app/core/storage/MediaSaver.kt similarity index 100% rename from apps/flipcash/core/src/main/kotlin/com/flipcash/app/core/storage/MediaSaver.kt rename to apps/flipcash/core/src/androidMain/kotlin/com/flipcash/app/core/storage/MediaSaver.kt diff --git a/apps/flipcash/core/src/main/kotlin/com/flipcash/app/core/time/FakeTimeProvider.kt b/apps/flipcash/core/src/androidMain/kotlin/com/flipcash/app/core/time/FakeTimeProvider.kt similarity index 100% rename from apps/flipcash/core/src/main/kotlin/com/flipcash/app/core/time/FakeTimeProvider.kt rename to apps/flipcash/core/src/androidMain/kotlin/com/flipcash/app/core/time/FakeTimeProvider.kt diff --git a/apps/flipcash/core/src/main/kotlin/com/flipcash/app/core/time/TimeProvider.kt b/apps/flipcash/core/src/androidMain/kotlin/com/flipcash/app/core/time/TimeProvider.kt similarity index 100% rename from apps/flipcash/core/src/main/kotlin/com/flipcash/app/core/time/TimeProvider.kt rename to apps/flipcash/core/src/androidMain/kotlin/com/flipcash/app/core/time/TimeProvider.kt diff --git a/apps/flipcash/core/src/main/kotlin/com/flipcash/app/core/tipping/OwnTipCard.kt b/apps/flipcash/core/src/androidMain/kotlin/com/flipcash/app/core/tipping/OwnTipCard.kt similarity index 100% rename from apps/flipcash/core/src/main/kotlin/com/flipcash/app/core/tipping/OwnTipCard.kt rename to apps/flipcash/core/src/androidMain/kotlin/com/flipcash/app/core/tipping/OwnTipCard.kt diff --git a/apps/flipcash/core/src/main/kotlin/com/flipcash/app/core/tipping/TipCardOwner.kt b/apps/flipcash/core/src/androidMain/kotlin/com/flipcash/app/core/tipping/TipCardOwner.kt similarity index 100% rename from apps/flipcash/core/src/main/kotlin/com/flipcash/app/core/tipping/TipCardOwner.kt rename to apps/flipcash/core/src/androidMain/kotlin/com/flipcash/app/core/tipping/TipCardOwner.kt diff --git a/apps/flipcash/core/src/main/kotlin/com/flipcash/app/core/tipping/TipSelection.kt b/apps/flipcash/core/src/androidMain/kotlin/com/flipcash/app/core/tipping/TipSelection.kt similarity index 100% rename from apps/flipcash/core/src/main/kotlin/com/flipcash/app/core/tipping/TipSelection.kt rename to apps/flipcash/core/src/androidMain/kotlin/com/flipcash/app/core/tipping/TipSelection.kt diff --git a/apps/flipcash/core/src/main/kotlin/com/flipcash/app/core/toast/SystemToastController.kt b/apps/flipcash/core/src/androidMain/kotlin/com/flipcash/app/core/toast/SystemToastController.kt similarity index 100% rename from apps/flipcash/core/src/main/kotlin/com/flipcash/app/core/toast/SystemToastController.kt rename to apps/flipcash/core/src/androidMain/kotlin/com/flipcash/app/core/toast/SystemToastController.kt diff --git a/apps/flipcash/core/src/main/kotlin/com/flipcash/app/core/toast/ToastController.kt b/apps/flipcash/core/src/androidMain/kotlin/com/flipcash/app/core/toast/ToastController.kt similarity index 100% rename from apps/flipcash/core/src/main/kotlin/com/flipcash/app/core/toast/ToastController.kt rename to apps/flipcash/core/src/androidMain/kotlin/com/flipcash/app/core/toast/ToastController.kt diff --git a/apps/flipcash/core/src/main/kotlin/com/flipcash/app/core/tokens/CurrencyCreatorDraft.kt b/apps/flipcash/core/src/androidMain/kotlin/com/flipcash/app/core/tokens/CurrencyCreatorDraft.kt similarity index 100% rename from apps/flipcash/core/src/main/kotlin/com/flipcash/app/core/tokens/CurrencyCreatorDraft.kt rename to apps/flipcash/core/src/androidMain/kotlin/com/flipcash/app/core/tokens/CurrencyCreatorDraft.kt diff --git a/apps/flipcash/core/src/main/kotlin/com/flipcash/app/core/tokens/CurrencyCreatorResult.kt b/apps/flipcash/core/src/androidMain/kotlin/com/flipcash/app/core/tokens/CurrencyCreatorResult.kt similarity index 100% rename from apps/flipcash/core/src/main/kotlin/com/flipcash/app/core/tokens/CurrencyCreatorResult.kt rename to apps/flipcash/core/src/androidMain/kotlin/com/flipcash/app/core/tokens/CurrencyCreatorResult.kt diff --git a/apps/flipcash/core/src/main/kotlin/com/flipcash/app/core/tokens/CurrencyCreatorStep.kt b/apps/flipcash/core/src/androidMain/kotlin/com/flipcash/app/core/tokens/CurrencyCreatorStep.kt similarity index 100% rename from apps/flipcash/core/src/main/kotlin/com/flipcash/app/core/tokens/CurrencyCreatorStep.kt rename to apps/flipcash/core/src/androidMain/kotlin/com/flipcash/app/core/tokens/CurrencyCreatorStep.kt diff --git a/apps/flipcash/core/src/main/kotlin/com/flipcash/app/core/tokens/SwapResult.kt b/apps/flipcash/core/src/androidMain/kotlin/com/flipcash/app/core/tokens/SwapResult.kt similarity index 100% rename from apps/flipcash/core/src/main/kotlin/com/flipcash/app/core/tokens/SwapResult.kt rename to apps/flipcash/core/src/androidMain/kotlin/com/flipcash/app/core/tokens/SwapResult.kt diff --git a/apps/flipcash/core/src/main/kotlin/com/flipcash/app/core/tokens/SwapStep.kt b/apps/flipcash/core/src/androidMain/kotlin/com/flipcash/app/core/tokens/SwapStep.kt similarity index 100% rename from apps/flipcash/core/src/main/kotlin/com/flipcash/app/core/tokens/SwapStep.kt rename to apps/flipcash/core/src/androidMain/kotlin/com/flipcash/app/core/tokens/SwapStep.kt diff --git a/apps/flipcash/core/src/main/kotlin/com/flipcash/app/core/tokens/TokenDisplayName.kt b/apps/flipcash/core/src/androidMain/kotlin/com/flipcash/app/core/tokens/TokenDisplayName.kt similarity index 100% rename from apps/flipcash/core/src/main/kotlin/com/flipcash/app/core/tokens/TokenDisplayName.kt rename to apps/flipcash/core/src/androidMain/kotlin/com/flipcash/app/core/tokens/TokenDisplayName.kt diff --git a/apps/flipcash/core/src/main/kotlin/com/flipcash/app/core/tokens/TokenInfoEntry.kt b/apps/flipcash/core/src/androidMain/kotlin/com/flipcash/app/core/tokens/TokenInfoEntry.kt similarity index 100% rename from apps/flipcash/core/src/main/kotlin/com/flipcash/app/core/tokens/TokenInfoEntry.kt rename to apps/flipcash/core/src/androidMain/kotlin/com/flipcash/app/core/tokens/TokenInfoEntry.kt diff --git a/apps/flipcash/core/src/main/kotlin/com/flipcash/app/core/tokens/TokenPurpose.kt b/apps/flipcash/core/src/androidMain/kotlin/com/flipcash/app/core/tokens/TokenPurpose.kt similarity index 100% rename from apps/flipcash/core/src/main/kotlin/com/flipcash/app/core/tokens/TokenPurpose.kt rename to apps/flipcash/core/src/androidMain/kotlin/com/flipcash/app/core/tokens/TokenPurpose.kt diff --git a/apps/flipcash/core/src/main/kotlin/com/flipcash/app/core/tokens/TokenSwapPurpose.kt b/apps/flipcash/core/src/androidMain/kotlin/com/flipcash/app/core/tokens/TokenSwapPurpose.kt similarity index 100% rename from apps/flipcash/core/src/main/kotlin/com/flipcash/app/core/tokens/TokenSwapPurpose.kt rename to apps/flipcash/core/src/androidMain/kotlin/com/flipcash/app/core/tokens/TokenSwapPurpose.kt diff --git a/apps/flipcash/core/src/main/kotlin/com/flipcash/app/core/updater/NetworkUpdater.kt b/apps/flipcash/core/src/androidMain/kotlin/com/flipcash/app/core/updater/NetworkUpdater.kt similarity index 100% rename from apps/flipcash/core/src/main/kotlin/com/flipcash/app/core/updater/NetworkUpdater.kt rename to apps/flipcash/core/src/androidMain/kotlin/com/flipcash/app/core/updater/NetworkUpdater.kt diff --git a/apps/flipcash/core/src/main/kotlin/com/flipcash/app/core/userprofile/UpdateProfileResult.kt b/apps/flipcash/core/src/androidMain/kotlin/com/flipcash/app/core/userprofile/UpdateProfileResult.kt similarity index 100% rename from apps/flipcash/core/src/main/kotlin/com/flipcash/app/core/userprofile/UpdateProfileResult.kt rename to apps/flipcash/core/src/androidMain/kotlin/com/flipcash/app/core/userprofile/UpdateProfileResult.kt diff --git a/apps/flipcash/core/src/main/kotlin/com/flipcash/app/core/userprofile/UpdateProfileStep.kt b/apps/flipcash/core/src/androidMain/kotlin/com/flipcash/app/core/userprofile/UpdateProfileStep.kt similarity index 100% rename from apps/flipcash/core/src/main/kotlin/com/flipcash/app/core/userprofile/UpdateProfileStep.kt rename to apps/flipcash/core/src/androidMain/kotlin/com/flipcash/app/core/userprofile/UpdateProfileStep.kt diff --git a/apps/flipcash/core/src/main/kotlin/com/flipcash/app/core/util/AbbreviatedLink.kt b/apps/flipcash/core/src/androidMain/kotlin/com/flipcash/app/core/util/AbbreviatedLink.kt similarity index 100% rename from apps/flipcash/core/src/main/kotlin/com/flipcash/app/core/util/AbbreviatedLink.kt rename to apps/flipcash/core/src/androidMain/kotlin/com/flipcash/app/core/util/AbbreviatedLink.kt diff --git a/apps/flipcash/core/src/main/kotlin/com/flipcash/app/core/util/Fiat.kt b/apps/flipcash/core/src/androidMain/kotlin/com/flipcash/app/core/util/Fiat.kt similarity index 100% rename from apps/flipcash/core/src/main/kotlin/com/flipcash/app/core/util/Fiat.kt rename to apps/flipcash/core/src/androidMain/kotlin/com/flipcash/app/core/util/Fiat.kt diff --git a/apps/flipcash/core/src/main/kotlin/com/flipcash/app/core/util/Linkify.kt b/apps/flipcash/core/src/androidMain/kotlin/com/flipcash/app/core/util/Linkify.kt similarity index 100% rename from apps/flipcash/core/src/main/kotlin/com/flipcash/app/core/util/Linkify.kt rename to apps/flipcash/core/src/androidMain/kotlin/com/flipcash/app/core/util/Linkify.kt diff --git a/apps/flipcash/core/src/main/kotlin/com/flipcash/app/core/util/MessagingPackages.kt b/apps/flipcash/core/src/androidMain/kotlin/com/flipcash/app/core/util/MessagingPackages.kt similarity index 100% rename from apps/flipcash/core/src/main/kotlin/com/flipcash/app/core/util/MessagingPackages.kt rename to apps/flipcash/core/src/androidMain/kotlin/com/flipcash/app/core/util/MessagingPackages.kt diff --git a/apps/flipcash/core/src/main/kotlin/com/flipcash/app/core/util/Number.kt b/apps/flipcash/core/src/androidMain/kotlin/com/flipcash/app/core/util/Number.kt similarity index 100% rename from apps/flipcash/core/src/main/kotlin/com/flipcash/app/core/util/Number.kt rename to apps/flipcash/core/src/androidMain/kotlin/com/flipcash/app/core/util/Number.kt diff --git a/apps/flipcash/core/src/main/kotlin/com/flipcash/app/core/verification/VerificationResult.kt b/apps/flipcash/core/src/androidMain/kotlin/com/flipcash/app/core/verification/VerificationResult.kt similarity index 100% rename from apps/flipcash/core/src/main/kotlin/com/flipcash/app/core/verification/VerificationResult.kt rename to apps/flipcash/core/src/androidMain/kotlin/com/flipcash/app/core/verification/VerificationResult.kt diff --git a/apps/flipcash/core/src/main/kotlin/com/flipcash/app/core/verification/VerificationStep.kt b/apps/flipcash/core/src/androidMain/kotlin/com/flipcash/app/core/verification/VerificationStep.kt similarity index 100% rename from apps/flipcash/core/src/main/kotlin/com/flipcash/app/core/verification/VerificationStep.kt rename to apps/flipcash/core/src/androidMain/kotlin/com/flipcash/app/core/verification/VerificationStep.kt diff --git a/apps/flipcash/core/src/main/kotlin/com/flipcash/app/core/verification/email/EmailCodeChannel.kt b/apps/flipcash/core/src/androidMain/kotlin/com/flipcash/app/core/verification/email/EmailCodeChannel.kt similarity index 100% rename from apps/flipcash/core/src/main/kotlin/com/flipcash/app/core/verification/email/EmailCodeChannel.kt rename to apps/flipcash/core/src/androidMain/kotlin/com/flipcash/app/core/verification/email/EmailCodeChannel.kt diff --git a/apps/flipcash/core/src/main/kotlin/com/flipcash/app/core/verification/email/EmailDeeplinkOrigin.kt b/apps/flipcash/core/src/androidMain/kotlin/com/flipcash/app/core/verification/email/EmailDeeplinkOrigin.kt similarity index 100% rename from apps/flipcash/core/src/main/kotlin/com/flipcash/app/core/verification/email/EmailDeeplinkOrigin.kt rename to apps/flipcash/core/src/androidMain/kotlin/com/flipcash/app/core/verification/email/EmailDeeplinkOrigin.kt diff --git a/apps/flipcash/core/src/main/kotlin/com/flipcash/app/core/verification/email/LocalEmailCodeChannel.kt b/apps/flipcash/core/src/androidMain/kotlin/com/flipcash/app/core/verification/email/LocalEmailCodeChannel.kt similarity index 100% rename from apps/flipcash/core/src/main/kotlin/com/flipcash/app/core/verification/email/LocalEmailCodeChannel.kt rename to apps/flipcash/core/src/androidMain/kotlin/com/flipcash/app/core/verification/email/LocalEmailCodeChannel.kt diff --git a/apps/flipcash/core/src/main/kotlin/com/flipcash/app/core/withdrawal/WithdrawalResult.kt b/apps/flipcash/core/src/androidMain/kotlin/com/flipcash/app/core/withdrawal/WithdrawalResult.kt similarity index 100% rename from apps/flipcash/core/src/main/kotlin/com/flipcash/app/core/withdrawal/WithdrawalResult.kt rename to apps/flipcash/core/src/androidMain/kotlin/com/flipcash/app/core/withdrawal/WithdrawalResult.kt diff --git a/apps/flipcash/core/src/main/kotlin/com/flipcash/app/core/withdrawal/WithdrawalStep.kt b/apps/flipcash/core/src/androidMain/kotlin/com/flipcash/app/core/withdrawal/WithdrawalStep.kt similarity index 100% rename from apps/flipcash/core/src/main/kotlin/com/flipcash/app/core/withdrawal/WithdrawalStep.kt rename to apps/flipcash/core/src/androidMain/kotlin/com/flipcash/app/core/withdrawal/WithdrawalStep.kt diff --git a/apps/flipcash/core/src/main/res/drawable-xxhdpi/ic_coin_dollars.webp b/apps/flipcash/core/src/androidMain/res/drawable-xxhdpi/ic_coin_dollars.webp similarity index 100% rename from apps/flipcash/core/src/main/res/drawable-xxhdpi/ic_coin_dollars.webp rename to apps/flipcash/core/src/androidMain/res/drawable-xxhdpi/ic_coin_dollars.webp diff --git a/apps/flipcash/core/src/main/res/drawable/bill_texture_1.webp b/apps/flipcash/core/src/androidMain/res/drawable/bill_texture_1.webp similarity index 100% rename from apps/flipcash/core/src/main/res/drawable/bill_texture_1.webp rename to apps/flipcash/core/src/androidMain/res/drawable/bill_texture_1.webp diff --git a/apps/flipcash/core/src/main/res/drawable/bill_texture_2.webp b/apps/flipcash/core/src/androidMain/res/drawable/bill_texture_2.webp similarity index 100% rename from apps/flipcash/core/src/main/res/drawable/bill_texture_2.webp rename to apps/flipcash/core/src/androidMain/res/drawable/bill_texture_2.webp diff --git a/apps/flipcash/core/src/main/res/drawable/bill_texture_3.webp b/apps/flipcash/core/src/androidMain/res/drawable/bill_texture_3.webp similarity index 100% rename from apps/flipcash/core/src/main/res/drawable/bill_texture_3.webp rename to apps/flipcash/core/src/androidMain/res/drawable/bill_texture_3.webp diff --git a/apps/flipcash/core/src/main/res/drawable/bill_texture_4.webp b/apps/flipcash/core/src/androidMain/res/drawable/bill_texture_4.webp similarity index 100% rename from apps/flipcash/core/src/main/res/drawable/bill_texture_4.webp rename to apps/flipcash/core/src/androidMain/res/drawable/bill_texture_4.webp diff --git a/apps/flipcash/core/src/main/res/drawable/bill_texture_5.webp b/apps/flipcash/core/src/androidMain/res/drawable/bill_texture_5.webp similarity index 100% rename from apps/flipcash/core/src/main/res/drawable/bill_texture_5.webp rename to apps/flipcash/core/src/androidMain/res/drawable/bill_texture_5.webp diff --git a/apps/flipcash/core/src/main/res/drawable/bill_texture_6.webp b/apps/flipcash/core/src/androidMain/res/drawable/bill_texture_6.webp similarity index 100% rename from apps/flipcash/core/src/main/res/drawable/bill_texture_6.webp rename to apps/flipcash/core/src/androidMain/res/drawable/bill_texture_6.webp diff --git a/apps/flipcash/core/src/main/res/drawable/bill_texture_7.webp b/apps/flipcash/core/src/androidMain/res/drawable/bill_texture_7.webp similarity index 100% rename from apps/flipcash/core/src/main/res/drawable/bill_texture_7.webp rename to apps/flipcash/core/src/androidMain/res/drawable/bill_texture_7.webp diff --git a/apps/flipcash/core/src/main/res/drawable/bill_texture_8.webp b/apps/flipcash/core/src/androidMain/res/drawable/bill_texture_8.webp similarity index 100% rename from apps/flipcash/core/src/main/res/drawable/bill_texture_8.webp rename to apps/flipcash/core/src/androidMain/res/drawable/bill_texture_8.webp diff --git a/apps/flipcash/core/src/main/res/drawable/close_right_arrow.xml b/apps/flipcash/core/src/androidMain/res/drawable/close_right_arrow.xml similarity index 100% rename from apps/flipcash/core/src/main/res/drawable/close_right_arrow.xml rename to apps/flipcash/core/src/androidMain/res/drawable/close_right_arrow.xml diff --git a/apps/flipcash/core/src/main/res/drawable/ic_access_key_in_photos.webp b/apps/flipcash/core/src/androidMain/res/drawable/ic_access_key_in_photos.webp similarity index 100% rename from apps/flipcash/core/src/main/res/drawable/ic_access_key_in_photos.webp rename to apps/flipcash/core/src/androidMain/res/drawable/ic_access_key_in_photos.webp diff --git a/apps/flipcash/core/src/main/res/drawable/ic_advanced_features.xml b/apps/flipcash/core/src/androidMain/res/drawable/ic_advanced_features.xml similarity index 100% rename from apps/flipcash/core/src/main/res/drawable/ic_advanced_features.xml rename to apps/flipcash/core/src/androidMain/res/drawable/ic_advanced_features.xml diff --git a/apps/flipcash/core/src/main/res/drawable/ic_app_update_required.xml b/apps/flipcash/core/src/androidMain/res/drawable/ic_app_update_required.xml similarity index 100% rename from apps/flipcash/core/src/main/res/drawable/ic_app_update_required.xml rename to apps/flipcash/core/src/androidMain/res/drawable/ic_app_update_required.xml diff --git a/apps/flipcash/core/src/main/res/drawable/ic_arrow_down.xml b/apps/flipcash/core/src/androidMain/res/drawable/ic_arrow_down.xml similarity index 100% rename from apps/flipcash/core/src/main/res/drawable/ic_arrow_down.xml rename to apps/flipcash/core/src/androidMain/res/drawable/ic_arrow_down.xml diff --git a/apps/flipcash/core/src/main/res/drawable/ic_arrow_right.xml b/apps/flipcash/core/src/androidMain/res/drawable/ic_arrow_right.xml similarity index 100% rename from apps/flipcash/core/src/main/res/drawable/ic_arrow_right.xml rename to apps/flipcash/core/src/androidMain/res/drawable/ic_arrow_right.xml diff --git a/apps/flipcash/core/src/main/res/drawable/ic_arrow_up_large.xml b/apps/flipcash/core/src/androidMain/res/drawable/ic_arrow_up_large.xml similarity index 100% rename from apps/flipcash/core/src/main/res/drawable/ic_arrow_up_large.xml rename to apps/flipcash/core/src/androidMain/res/drawable/ic_arrow_up_large.xml diff --git a/apps/flipcash/core/src/main/res/drawable/ic_at.xml b/apps/flipcash/core/src/androidMain/res/drawable/ic_at.xml similarity index 100% rename from apps/flipcash/core/src/main/res/drawable/ic_at.xml rename to apps/flipcash/core/src/androidMain/res/drawable/ic_at.xml diff --git a/apps/flipcash/core/src/main/res/drawable/ic_backpack_wallet.webp b/apps/flipcash/core/src/androidMain/res/drawable/ic_backpack_wallet.webp similarity index 100% rename from apps/flipcash/core/src/main/res/drawable/ic_backpack_wallet.webp rename to apps/flipcash/core/src/androidMain/res/drawable/ic_backpack_wallet.webp diff --git a/apps/flipcash/core/src/main/res/drawable/ic_banknote.xml b/apps/flipcash/core/src/androidMain/res/drawable/ic_banknote.xml similarity index 100% rename from apps/flipcash/core/src/main/res/drawable/ic_banknote.xml rename to apps/flipcash/core/src/androidMain/res/drawable/ic_banknote.xml diff --git a/apps/flipcash/core/src/main/res/drawable/ic_bill_previews.webp b/apps/flipcash/core/src/androidMain/res/drawable/ic_bill_previews.webp similarity index 100% rename from apps/flipcash/core/src/main/res/drawable/ic_bill_previews.webp rename to apps/flipcash/core/src/androidMain/res/drawable/ic_bill_previews.webp diff --git a/apps/flipcash/core/src/main/res/drawable/ic_biometrics.xml b/apps/flipcash/core/src/androidMain/res/drawable/ic_biometrics.xml similarity index 100% rename from apps/flipcash/core/src/main/res/drawable/ic_biometrics.xml rename to apps/flipcash/core/src/androidMain/res/drawable/ic_biometrics.xml diff --git a/apps/flipcash/core/src/main/res/drawable/ic_bottom_navigation.xml b/apps/flipcash/core/src/androidMain/res/drawable/ic_bottom_navigation.xml similarity index 100% rename from apps/flipcash/core/src/main/res/drawable/ic_bottom_navigation.xml rename to apps/flipcash/core/src/androidMain/res/drawable/ic_bottom_navigation.xml diff --git a/apps/flipcash/core/src/main/res/drawable/ic_bubble_outline.xml b/apps/flipcash/core/src/androidMain/res/drawable/ic_bubble_outline.xml similarity index 100% rename from apps/flipcash/core/src/main/res/drawable/ic_bubble_outline.xml rename to apps/flipcash/core/src/androidMain/res/drawable/ic_bubble_outline.xml diff --git a/apps/flipcash/core/src/main/res/drawable/ic_buy_with_google_pay.xml b/apps/flipcash/core/src/androidMain/res/drawable/ic_buy_with_google_pay.xml similarity index 100% rename from apps/flipcash/core/src/main/res/drawable/ic_buy_with_google_pay.xml rename to apps/flipcash/core/src/androidMain/res/drawable/ic_buy_with_google_pay.xml diff --git a/apps/flipcash/core/src/main/res/drawable/ic_callout_warning.xml b/apps/flipcash/core/src/androidMain/res/drawable/ic_callout_warning.xml similarity index 100% rename from apps/flipcash/core/src/main/res/drawable/ic_callout_warning.xml rename to apps/flipcash/core/src/androidMain/res/drawable/ic_callout_warning.xml diff --git a/apps/flipcash/core/src/main/res/drawable/ic_camera.xml b/apps/flipcash/core/src/androidMain/res/drawable/ic_camera.xml similarity index 100% rename from apps/flipcash/core/src/main/res/drawable/ic_camera.xml rename to apps/flipcash/core/src/androidMain/res/drawable/ic_camera.xml diff --git a/apps/flipcash/core/src/main/res/drawable/ic_camera_request.webp b/apps/flipcash/core/src/androidMain/res/drawable/ic_camera_request.webp similarity index 100% rename from apps/flipcash/core/src/main/res/drawable/ic_camera_request.webp rename to apps/flipcash/core/src/androidMain/res/drawable/ic_camera_request.webp diff --git a/apps/flipcash/core/src/main/res/drawable/ic_cash_bill.webp b/apps/flipcash/core/src/androidMain/res/drawable/ic_cash_bill.webp similarity index 100% rename from apps/flipcash/core/src/main/res/drawable/ic_cash_bill.webp rename to apps/flipcash/core/src/androidMain/res/drawable/ic_cash_bill.webp diff --git a/apps/flipcash/core/src/main/res/drawable/ic_checked.xml b/apps/flipcash/core/src/androidMain/res/drawable/ic_checked.xml similarity index 100% rename from apps/flipcash/core/src/main/res/drawable/ic_checked.xml rename to apps/flipcash/core/src/androidMain/res/drawable/ic_checked.xml diff --git a/apps/flipcash/core/src/main/res/drawable/ic_checked_green.xml b/apps/flipcash/core/src/androidMain/res/drawable/ic_checked_green.xml similarity index 100% rename from apps/flipcash/core/src/main/res/drawable/ic_checked_green.xml rename to apps/flipcash/core/src/androidMain/res/drawable/ic_checked_green.xml diff --git a/apps/flipcash/core/src/main/res/drawable/ic_checklist.xml b/apps/flipcash/core/src/androidMain/res/drawable/ic_checklist.xml similarity index 100% rename from apps/flipcash/core/src/main/res/drawable/ic_checklist.xml rename to apps/flipcash/core/src/androidMain/res/drawable/ic_checklist.xml diff --git a/apps/flipcash/core/src/main/res/drawable/ic_chevron_down_small.xml b/apps/flipcash/core/src/androidMain/res/drawable/ic_chevron_down_small.xml similarity index 100% rename from apps/flipcash/core/src/main/res/drawable/ic_chevron_down_small.xml rename to apps/flipcash/core/src/androidMain/res/drawable/ic_chevron_down_small.xml diff --git a/apps/flipcash/core/src/main/res/drawable/ic_circle_check_large.xml b/apps/flipcash/core/src/androidMain/res/drawable/ic_circle_check_large.xml similarity index 100% rename from apps/flipcash/core/src/main/res/drawable/ic_circle_check_large.xml rename to apps/flipcash/core/src/androidMain/res/drawable/ic_circle_check_large.xml diff --git a/apps/flipcash/core/src/main/res/drawable/ic_circle_exclamation_large.xml b/apps/flipcash/core/src/androidMain/res/drawable/ic_circle_exclamation_large.xml similarity index 100% rename from apps/flipcash/core/src/main/res/drawable/ic_circle_exclamation_large.xml rename to apps/flipcash/core/src/androidMain/res/drawable/ic_circle_exclamation_large.xml diff --git a/apps/flipcash/core/src/main/res/drawable/ic_coins.xml b/apps/flipcash/core/src/androidMain/res/drawable/ic_coins.xml similarity index 100% rename from apps/flipcash/core/src/main/res/drawable/ic_coins.xml rename to apps/flipcash/core/src/androidMain/res/drawable/ic_coins.xml diff --git a/apps/flipcash/core/src/main/res/drawable/ic_coins_add.xml b/apps/flipcash/core/src/androidMain/res/drawable/ic_coins_add.xml similarity index 100% rename from apps/flipcash/core/src/main/res/drawable/ic_coins_add.xml rename to apps/flipcash/core/src/androidMain/res/drawable/ic_coins_add.xml diff --git a/apps/flipcash/core/src/main/res/drawable/ic_color_tune_hsl.xml b/apps/flipcash/core/src/androidMain/res/drawable/ic_color_tune_hsl.xml similarity index 100% rename from apps/flipcash/core/src/main/res/drawable/ic_color_tune_hsl.xml rename to apps/flipcash/core/src/androidMain/res/drawable/ic_color_tune_hsl.xml diff --git a/apps/flipcash/core/src/main/res/drawable/ic_contact_method_verification.xml b/apps/flipcash/core/src/androidMain/res/drawable/ic_contact_method_verification.xml similarity index 100% rename from apps/flipcash/core/src/main/res/drawable/ic_contact_method_verification.xml rename to apps/flipcash/core/src/androidMain/res/drawable/ic_contact_method_verification.xml diff --git a/apps/flipcash/core/src/main/res/drawable/ic_convert.xml b/apps/flipcash/core/src/androidMain/res/drawable/ic_convert.xml similarity index 100% rename from apps/flipcash/core/src/main/res/drawable/ic_convert.xml rename to apps/flipcash/core/src/androidMain/res/drawable/ic_convert.xml diff --git a/apps/flipcash/core/src/main/res/drawable/ic_currency_coin.xml b/apps/flipcash/core/src/androidMain/res/drawable/ic_currency_coin.xml similarity index 100% rename from apps/flipcash/core/src/main/res/drawable/ic_currency_coin.xml rename to apps/flipcash/core/src/androidMain/res/drawable/ic_currency_coin.xml diff --git a/apps/flipcash/core/src/main/res/drawable/ic_currencycreator_cashbill.xml b/apps/flipcash/core/src/androidMain/res/drawable/ic_currencycreator_cashbill.xml similarity index 100% rename from apps/flipcash/core/src/main/res/drawable/ic_currencycreator_cashbill.xml rename to apps/flipcash/core/src/androidMain/res/drawable/ic_currencycreator_cashbill.xml diff --git a/apps/flipcash/core/src/main/res/drawable/ic_currencycreator_description.xml b/apps/flipcash/core/src/androidMain/res/drawable/ic_currencycreator_description.xml similarity index 100% rename from apps/flipcash/core/src/main/res/drawable/ic_currencycreator_description.xml rename to apps/flipcash/core/src/androidMain/res/drawable/ic_currencycreator_description.xml diff --git a/apps/flipcash/core/src/main/res/drawable/ic_currencycreator_gift.xml b/apps/flipcash/core/src/androidMain/res/drawable/ic_currencycreator_gift.xml similarity index 100% rename from apps/flipcash/core/src/main/res/drawable/ic_currencycreator_gift.xml rename to apps/flipcash/core/src/androidMain/res/drawable/ic_currencycreator_gift.xml diff --git a/apps/flipcash/core/src/main/res/drawable/ic_currencycreator_icon.xml b/apps/flipcash/core/src/androidMain/res/drawable/ic_currencycreator_icon.xml similarity index 100% rename from apps/flipcash/core/src/main/res/drawable/ic_currencycreator_icon.xml rename to apps/flipcash/core/src/androidMain/res/drawable/ic_currencycreator_icon.xml diff --git a/apps/flipcash/core/src/main/res/drawable/ic_currencycreator_name.xml b/apps/flipcash/core/src/androidMain/res/drawable/ic_currencycreator_name.xml similarity index 100% rename from apps/flipcash/core/src/main/res/drawable/ic_currencycreator_name.xml rename to apps/flipcash/core/src/androidMain/res/drawable/ic_currencycreator_name.xml diff --git a/apps/flipcash/core/src/main/res/drawable/ic_currencycreator_purchase.xml b/apps/flipcash/core/src/androidMain/res/drawable/ic_currencycreator_purchase.xml similarity index 100% rename from apps/flipcash/core/src/main/res/drawable/ic_currencycreator_purchase.xml rename to apps/flipcash/core/src/androidMain/res/drawable/ic_currencycreator_purchase.xml diff --git a/apps/flipcash/core/src/main/res/drawable/ic_debit_card.xml b/apps/flipcash/core/src/androidMain/res/drawable/ic_debit_card.xml similarity index 100% rename from apps/flipcash/core/src/main/res/drawable/ic_debit_card.xml rename to apps/flipcash/core/src/androidMain/res/drawable/ic_debit_card.xml diff --git a/apps/flipcash/core/src/main/res/drawable/ic_device_frame.xml b/apps/flipcash/core/src/androidMain/res/drawable/ic_device_frame.xml similarity index 100% rename from apps/flipcash/core/src/main/res/drawable/ic_device_frame.xml rename to apps/flipcash/core/src/androidMain/res/drawable/ic_device_frame.xml diff --git a/apps/flipcash/core/src/main/res/drawable/ic_existing_contact.xml b/apps/flipcash/core/src/androidMain/res/drawable/ic_existing_contact.xml similarity index 100% rename from apps/flipcash/core/src/main/res/drawable/ic_existing_contact.xml rename to apps/flipcash/core/src/androidMain/res/drawable/ic_existing_contact.xml diff --git a/apps/flipcash/core/src/main/res/drawable/ic_flipcash_badge.xml b/apps/flipcash/core/src/androidMain/res/drawable/ic_flipcash_badge.xml similarity index 100% rename from apps/flipcash/core/src/main/res/drawable/ic_flipcash_badge.xml rename to apps/flipcash/core/src/androidMain/res/drawable/ic_flipcash_badge.xml diff --git a/apps/flipcash/core/src/main/res/drawable/ic_flipcash_balance.xml b/apps/flipcash/core/src/androidMain/res/drawable/ic_flipcash_balance.xml similarity index 100% rename from apps/flipcash/core/src/main/res/drawable/ic_flipcash_balance.xml rename to apps/flipcash/core/src/androidMain/res/drawable/ic_flipcash_balance.xml diff --git a/apps/flipcash/core/src/main/res/drawable/ic_flipcash_logo.xml b/apps/flipcash/core/src/androidMain/res/drawable/ic_flipcash_logo.xml similarity index 100% rename from apps/flipcash/core/src/main/res/drawable/ic_flipcash_logo.xml rename to apps/flipcash/core/src/androidMain/res/drawable/ic_flipcash_logo.xml diff --git a/apps/flipcash/core/src/main/res/drawable/ic_flipcash_logo_offwhite_small.xml b/apps/flipcash/core/src/androidMain/res/drawable/ic_flipcash_logo_offwhite_small.xml similarity index 100% rename from apps/flipcash/core/src/main/res/drawable/ic_flipcash_logo_offwhite_small.xml rename to apps/flipcash/core/src/androidMain/res/drawable/ic_flipcash_logo_offwhite_small.xml diff --git a/apps/flipcash/core/src/main/res/drawable/ic_flipcash_logo_w_name.xml b/apps/flipcash/core/src/androidMain/res/drawable/ic_flipcash_logo_w_name.xml similarity index 100% rename from apps/flipcash/core/src/main/res/drawable/ic_flipcash_logo_w_name.xml rename to apps/flipcash/core/src/androidMain/res/drawable/ic_flipcash_logo_w_name.xml diff --git a/apps/flipcash/core/src/main/res/drawable/ic_flipcash_logo_w_name_large.xml b/apps/flipcash/core/src/androidMain/res/drawable/ic_flipcash_logo_w_name_large.xml similarity index 100% rename from apps/flipcash/core/src/main/res/drawable/ic_flipcash_logo_w_name_large.xml rename to apps/flipcash/core/src/androidMain/res/drawable/ic_flipcash_logo_w_name_large.xml diff --git a/apps/flipcash/core/src/main/res/drawable/ic_flipcash_pools.xml b/apps/flipcash/core/src/androidMain/res/drawable/ic_flipcash_pools.xml similarity index 100% rename from apps/flipcash/core/src/main/res/drawable/ic_flipcash_pools.xml rename to apps/flipcash/core/src/androidMain/res/drawable/ic_flipcash_pools.xml diff --git a/apps/flipcash/core/src/main/res/drawable/ic_globe.xml b/apps/flipcash/core/src/androidMain/res/drawable/ic_globe.xml similarity index 100% rename from apps/flipcash/core/src/main/res/drawable/ic_globe.xml rename to apps/flipcash/core/src/androidMain/res/drawable/ic_globe.xml diff --git a/apps/flipcash/core/src/main/res/drawable/ic_google_pay.xml b/apps/flipcash/core/src/androidMain/res/drawable/ic_google_pay.xml similarity index 100% rename from apps/flipcash/core/src/main/res/drawable/ic_google_pay.xml rename to apps/flipcash/core/src/androidMain/res/drawable/ic_google_pay.xml diff --git a/apps/flipcash/core/src/main/res/drawable/ic_google_pay_brand_mark.xml b/apps/flipcash/core/src/androidMain/res/drawable/ic_google_pay_brand_mark.xml similarity index 100% rename from apps/flipcash/core/src/main/res/drawable/ic_google_pay_brand_mark.xml rename to apps/flipcash/core/src/androidMain/res/drawable/ic_google_pay_brand_mark.xml diff --git a/apps/flipcash/core/src/main/res/drawable/ic_group_3.xml b/apps/flipcash/core/src/androidMain/res/drawable/ic_group_3.xml similarity index 100% rename from apps/flipcash/core/src/main/res/drawable/ic_group_3.xml rename to apps/flipcash/core/src/androidMain/res/drawable/ic_group_3.xml diff --git a/apps/flipcash/core/src/main/res/drawable/ic_hardware_security_key.xml b/apps/flipcash/core/src/androidMain/res/drawable/ic_hardware_security_key.xml similarity index 100% rename from apps/flipcash/core/src/main/res/drawable/ic_hardware_security_key.xml rename to apps/flipcash/core/src/androidMain/res/drawable/ic_hardware_security_key.xml diff --git a/apps/flipcash/core/src/main/res/drawable/ic_home_options.xml b/apps/flipcash/core/src/androidMain/res/drawable/ic_home_options.xml similarity index 100% rename from apps/flipcash/core/src/main/res/drawable/ic_home_options.xml rename to apps/flipcash/core/src/androidMain/res/drawable/ic_home_options.xml diff --git a/apps/flipcash/core/src/main/res/drawable/ic_host.xml b/apps/flipcash/core/src/androidMain/res/drawable/ic_host.xml similarity index 100% rename from apps/flipcash/core/src/main/res/drawable/ic_host.xml rename to apps/flipcash/core/src/androidMain/res/drawable/ic_host.xml diff --git a/apps/flipcash/core/src/main/res/drawable/ic_info_bars.xml b/apps/flipcash/core/src/androidMain/res/drawable/ic_info_bars.xml similarity index 100% rename from apps/flipcash/core/src/main/res/drawable/ic_info_bars.xml rename to apps/flipcash/core/src/androidMain/res/drawable/ic_info_bars.xml diff --git a/apps/flipcash/core/src/main/res/drawable/ic_linked_payment_method.xml b/apps/flipcash/core/src/androidMain/res/drawable/ic_linked_payment_method.xml similarity index 100% rename from apps/flipcash/core/src/main/res/drawable/ic_linked_payment_method.xml rename to apps/flipcash/core/src/androidMain/res/drawable/ic_linked_payment_method.xml diff --git a/apps/flipcash/core/src/main/res/drawable/ic_lock.xml b/apps/flipcash/core/src/androidMain/res/drawable/ic_lock.xml similarity index 100% rename from apps/flipcash/core/src/main/res/drawable/ic_lock.xml rename to apps/flipcash/core/src/androidMain/res/drawable/ic_lock.xml diff --git a/apps/flipcash/core/src/main/res/drawable/ic_logo_round_white.xml b/apps/flipcash/core/src/androidMain/res/drawable/ic_logo_round_white.xml similarity index 100% rename from apps/flipcash/core/src/main/res/drawable/ic_logo_round_white.xml rename to apps/flipcash/core/src/androidMain/res/drawable/ic_logo_round_white.xml diff --git a/apps/flipcash/core/src/main/res/drawable/ic_market_cap_curve.xml b/apps/flipcash/core/src/androidMain/res/drawable/ic_market_cap_curve.xml similarity index 100% rename from apps/flipcash/core/src/main/res/drawable/ic_market_cap_curve.xml rename to apps/flipcash/core/src/androidMain/res/drawable/ic_market_cap_curve.xml diff --git a/apps/flipcash/core/src/main/res/drawable/ic_menu_account.xml b/apps/flipcash/core/src/androidMain/res/drawable/ic_menu_account.xml similarity index 100% rename from apps/flipcash/core/src/main/res/drawable/ic_menu_account.xml rename to apps/flipcash/core/src/androidMain/res/drawable/ic_menu_account.xml diff --git a/apps/flipcash/core/src/main/res/drawable/ic_menu_deposit.xml b/apps/flipcash/core/src/androidMain/res/drawable/ic_menu_deposit.xml similarity index 100% rename from apps/flipcash/core/src/main/res/drawable/ic_menu_deposit.xml rename to apps/flipcash/core/src/androidMain/res/drawable/ic_menu_deposit.xml diff --git a/apps/flipcash/core/src/main/res/drawable/ic_menu_key.xml b/apps/flipcash/core/src/androidMain/res/drawable/ic_menu_key.xml similarity index 100% rename from apps/flipcash/core/src/main/res/drawable/ic_menu_key.xml rename to apps/flipcash/core/src/androidMain/res/drawable/ic_menu_key.xml diff --git a/apps/flipcash/core/src/main/res/drawable/ic_menu_logout.xml b/apps/flipcash/core/src/androidMain/res/drawable/ic_menu_logout.xml similarity index 100% rename from apps/flipcash/core/src/main/res/drawable/ic_menu_logout.xml rename to apps/flipcash/core/src/androidMain/res/drawable/ic_menu_logout.xml diff --git a/apps/flipcash/core/src/main/res/drawable/ic_menu_switchaccounts.xml b/apps/flipcash/core/src/androidMain/res/drawable/ic_menu_switchaccounts.xml similarity index 100% rename from apps/flipcash/core/src/main/res/drawable/ic_menu_switchaccounts.xml rename to apps/flipcash/core/src/androidMain/res/drawable/ic_menu_switchaccounts.xml diff --git a/apps/flipcash/core/src/main/res/drawable/ic_menu_withdraw.xml b/apps/flipcash/core/src/androidMain/res/drawable/ic_menu_withdraw.xml similarity index 100% rename from apps/flipcash/core/src/main/res/drawable/ic_menu_withdraw.xml rename to apps/flipcash/core/src/androidMain/res/drawable/ic_menu_withdraw.xml diff --git a/apps/flipcash/core/src/main/res/drawable/ic_minus.xml b/apps/flipcash/core/src/androidMain/res/drawable/ic_minus.xml similarity index 100% rename from apps/flipcash/core/src/main/res/drawable/ic_minus.xml rename to apps/flipcash/core/src/androidMain/res/drawable/ic_minus.xml diff --git a/apps/flipcash/core/src/main/res/drawable/ic_nav_chat.xml b/apps/flipcash/core/src/androidMain/res/drawable/ic_nav_chat.xml similarity index 100% rename from apps/flipcash/core/src/main/res/drawable/ic_nav_chat.xml rename to apps/flipcash/core/src/androidMain/res/drawable/ic_nav_chat.xml diff --git a/apps/flipcash/core/src/main/res/drawable/ic_nav_chat_selected.xml b/apps/flipcash/core/src/androidMain/res/drawable/ic_nav_chat_selected.xml similarity index 100% rename from apps/flipcash/core/src/main/res/drawable/ic_nav_chat_selected.xml rename to apps/flipcash/core/src/androidMain/res/drawable/ic_nav_chat_selected.xml diff --git a/apps/flipcash/core/src/main/res/drawable/ic_nav_tipcard.xml b/apps/flipcash/core/src/androidMain/res/drawable/ic_nav_tipcard.xml similarity index 100% rename from apps/flipcash/core/src/main/res/drawable/ic_nav_tipcard.xml rename to apps/flipcash/core/src/androidMain/res/drawable/ic_nav_tipcard.xml diff --git a/apps/flipcash/core/src/main/res/drawable/ic_nav_tipcard_selected.xml b/apps/flipcash/core/src/androidMain/res/drawable/ic_nav_tipcard_selected.xml similarity index 100% rename from apps/flipcash/core/src/main/res/drawable/ic_nav_tipcard_selected.xml rename to apps/flipcash/core/src/androidMain/res/drawable/ic_nav_tipcard_selected.xml diff --git a/apps/flipcash/core/src/main/res/drawable/ic_nav_wallet.xml b/apps/flipcash/core/src/androidMain/res/drawable/ic_nav_wallet.xml similarity index 100% rename from apps/flipcash/core/src/main/res/drawable/ic_nav_wallet.xml rename to apps/flipcash/core/src/androidMain/res/drawable/ic_nav_wallet.xml diff --git a/apps/flipcash/core/src/main/res/drawable/ic_nav_wallet_selected.xml b/apps/flipcash/core/src/androidMain/res/drawable/ic_nav_wallet_selected.xml similarity index 100% rename from apps/flipcash/core/src/main/res/drawable/ic_nav_wallet_selected.xml rename to apps/flipcash/core/src/androidMain/res/drawable/ic_nav_wallet_selected.xml diff --git a/apps/flipcash/core/src/main/res/drawable/ic_new_email.xml b/apps/flipcash/core/src/androidMain/res/drawable/ic_new_email.xml similarity index 100% rename from apps/flipcash/core/src/main/res/drawable/ic_new_email.xml rename to apps/flipcash/core/src/androidMain/res/drawable/ic_new_email.xml diff --git a/apps/flipcash/core/src/main/res/drawable/ic_notification_preview_icon.png b/apps/flipcash/core/src/androidMain/res/drawable/ic_notification_preview_icon.png similarity index 100% rename from apps/flipcash/core/src/main/res/drawable/ic_notification_preview_icon.png rename to apps/flipcash/core/src/androidMain/res/drawable/ic_notification_preview_icon.png diff --git a/apps/flipcash/core/src/main/res/drawable/ic_notification_request.webp b/apps/flipcash/core/src/androidMain/res/drawable/ic_notification_request.webp similarity index 100% rename from apps/flipcash/core/src/main/res/drawable/ic_notification_request.webp rename to apps/flipcash/core/src/androidMain/res/drawable/ic_notification_request.webp diff --git a/apps/flipcash/core/src/main/res/drawable/ic_pay_with_google_pay.xml b/apps/flipcash/core/src/androidMain/res/drawable/ic_pay_with_google_pay.xml similarity index 100% rename from apps/flipcash/core/src/main/res/drawable/ic_pay_with_google_pay.xml rename to apps/flipcash/core/src/androidMain/res/drawable/ic_pay_with_google_pay.xml diff --git a/apps/flipcash/core/src/main/res/drawable/ic_people_circle.xml b/apps/flipcash/core/src/androidMain/res/drawable/ic_people_circle.xml similarity index 100% rename from apps/flipcash/core/src/main/res/drawable/ic_people_circle.xml rename to apps/flipcash/core/src/androidMain/res/drawable/ic_people_circle.xml diff --git a/apps/flipcash/core/src/main/res/drawable/ic_people_gear.xml b/apps/flipcash/core/src/androidMain/res/drawable/ic_people_gear.xml similarity index 100% rename from apps/flipcash/core/src/main/res/drawable/ic_people_gear.xml rename to apps/flipcash/core/src/androidMain/res/drawable/ic_people_gear.xml diff --git a/apps/flipcash/core/src/main/res/drawable/ic_phantom_buy_connect.xml b/apps/flipcash/core/src/androidMain/res/drawable/ic_phantom_buy_connect.xml similarity index 100% rename from apps/flipcash/core/src/main/res/drawable/ic_phantom_buy_connect.xml rename to apps/flipcash/core/src/androidMain/res/drawable/ic_phantom_buy_connect.xml diff --git a/apps/flipcash/core/src/main/res/drawable/ic_phantom_connected.xml b/apps/flipcash/core/src/androidMain/res/drawable/ic_phantom_connected.xml similarity index 100% rename from apps/flipcash/core/src/main/res/drawable/ic_phantom_connected.xml rename to apps/flipcash/core/src/androidMain/res/drawable/ic_phantom_connected.xml diff --git a/apps/flipcash/core/src/main/res/drawable/ic_phantom_wallet.xml b/apps/flipcash/core/src/androidMain/res/drawable/ic_phantom_wallet.xml similarity index 100% rename from apps/flipcash/core/src/main/res/drawable/ic_phantom_wallet.xml rename to apps/flipcash/core/src/androidMain/res/drawable/ic_phantom_wallet.xml diff --git a/apps/flipcash/core/src/main/res/drawable/ic_plus.xml b/apps/flipcash/core/src/androidMain/res/drawable/ic_plus.xml similarity index 100% rename from apps/flipcash/core/src/main/res/drawable/ic_plus.xml rename to apps/flipcash/core/src/androidMain/res/drawable/ic_plus.xml diff --git a/apps/flipcash/core/src/main/res/drawable/ic_qr_code.xml b/apps/flipcash/core/src/androidMain/res/drawable/ic_qr_code.xml similarity index 100% rename from apps/flipcash/core/src/main/res/drawable/ic_qr_code.xml rename to apps/flipcash/core/src/androidMain/res/drawable/ic_qr_code.xml diff --git a/apps/flipcash/core/src/main/res/drawable/ic_screen_frame.xml b/apps/flipcash/core/src/androidMain/res/drawable/ic_screen_frame.xml similarity index 100% rename from apps/flipcash/core/src/main/res/drawable/ic_screen_frame.xml rename to apps/flipcash/core/src/androidMain/res/drawable/ic_screen_frame.xml diff --git a/apps/flipcash/core/src/main/res/drawable/ic_send_large.xml b/apps/flipcash/core/src/androidMain/res/drawable/ic_send_large.xml similarity index 100% rename from apps/flipcash/core/src/main/res/drawable/ic_send_large.xml rename to apps/flipcash/core/src/androidMain/res/drawable/ic_send_large.xml diff --git a/apps/flipcash/core/src/main/res/drawable/ic_send_outlined.xml b/apps/flipcash/core/src/androidMain/res/drawable/ic_send_outlined.xml similarity index 100% rename from apps/flipcash/core/src/main/res/drawable/ic_send_outlined.xml rename to apps/flipcash/core/src/androidMain/res/drawable/ic_send_outlined.xml diff --git a/apps/flipcash/core/src/main/res/drawable/ic_social_discord.xml b/apps/flipcash/core/src/androidMain/res/drawable/ic_social_discord.xml similarity index 100% rename from apps/flipcash/core/src/main/res/drawable/ic_social_discord.xml rename to apps/flipcash/core/src/androidMain/res/drawable/ic_social_discord.xml diff --git a/apps/flipcash/core/src/main/res/drawable/ic_social_tg.xml b/apps/flipcash/core/src/androidMain/res/drawable/ic_social_tg.xml similarity index 100% rename from apps/flipcash/core/src/main/res/drawable/ic_social_tg.xml rename to apps/flipcash/core/src/androidMain/res/drawable/ic_social_tg.xml diff --git a/apps/flipcash/core/src/main/res/drawable/ic_social_web.xml b/apps/flipcash/core/src/androidMain/res/drawable/ic_social_web.xml similarity index 100% rename from apps/flipcash/core/src/main/res/drawable/ic_social_web.xml rename to apps/flipcash/core/src/androidMain/res/drawable/ic_social_web.xml diff --git a/apps/flipcash/core/src/main/res/drawable/ic_social_x.xml b/apps/flipcash/core/src/androidMain/res/drawable/ic_social_x.xml similarity index 100% rename from apps/flipcash/core/src/main/res/drawable/ic_social_x.xml rename to apps/flipcash/core/src/androidMain/res/drawable/ic_social_x.xml diff --git a/apps/flipcash/core/src/main/res/drawable/ic_solana_logo.xml b/apps/flipcash/core/src/androidMain/res/drawable/ic_solana_logo.xml similarity index 100% rename from apps/flipcash/core/src/main/res/drawable/ic_solana_logo.xml rename to apps/flipcash/core/src/androidMain/res/drawable/ic_solana_logo.xml diff --git a/apps/flipcash/core/src/main/res/drawable/ic_solflare_wallet.xml b/apps/flipcash/core/src/androidMain/res/drawable/ic_solflare_wallet.xml similarity index 100% rename from apps/flipcash/core/src/main/res/drawable/ic_solflare_wallet.xml rename to apps/flipcash/core/src/androidMain/res/drawable/ic_solflare_wallet.xml diff --git a/apps/flipcash/core/src/main/res/drawable/ic_tipcode.xml b/apps/flipcash/core/src/androidMain/res/drawable/ic_tipcode.xml similarity index 100% rename from apps/flipcash/core/src/main/res/drawable/ic_tipcode.xml rename to apps/flipcash/core/src/androidMain/res/drawable/ic_tipcode.xml diff --git a/apps/flipcash/core/src/main/res/drawable/ic_tipping_hand.xml b/apps/flipcash/core/src/androidMain/res/drawable/ic_tipping_hand.xml similarity index 100% rename from apps/flipcash/core/src/main/res/drawable/ic_tipping_hand.xml rename to apps/flipcash/core/src/androidMain/res/drawable/ic_tipping_hand.xml diff --git a/apps/flipcash/core/src/main/res/drawable/ic_transfer_deposit.xml b/apps/flipcash/core/src/androidMain/res/drawable/ic_transfer_deposit.xml similarity index 100% rename from apps/flipcash/core/src/main/res/drawable/ic_transfer_deposit.xml rename to apps/flipcash/core/src/androidMain/res/drawable/ic_transfer_deposit.xml diff --git a/apps/flipcash/core/src/main/res/drawable/ic_transfer_withdraw.xml b/apps/flipcash/core/src/androidMain/res/drawable/ic_transfer_withdraw.xml similarity index 100% rename from apps/flipcash/core/src/main/res/drawable/ic_transfer_withdraw.xml rename to apps/flipcash/core/src/androidMain/res/drawable/ic_transfer_withdraw.xml diff --git a/apps/flipcash/core/src/main/res/drawable/ic_trophy.xml b/apps/flipcash/core/src/androidMain/res/drawable/ic_trophy.xml similarity index 100% rename from apps/flipcash/core/src/main/res/drawable/ic_trophy.xml rename to apps/flipcash/core/src/androidMain/res/drawable/ic_trophy.xml diff --git a/apps/flipcash/core/src/main/res/drawable/ic_unchecked.xml b/apps/flipcash/core/src/androidMain/res/drawable/ic_unchecked.xml similarity index 100% rename from apps/flipcash/core/src/main/res/drawable/ic_unchecked.xml rename to apps/flipcash/core/src/androidMain/res/drawable/ic_unchecked.xml diff --git a/apps/flipcash/core/src/main/res/drawable/ic_undo.xml b/apps/flipcash/core/src/androidMain/res/drawable/ic_undo.xml similarity index 100% rename from apps/flipcash/core/src/main/res/drawable/ic_undo.xml rename to apps/flipcash/core/src/androidMain/res/drawable/ic_undo.xml diff --git a/apps/flipcash/core/src/main/res/drawable/ic_unknown_contact.xml b/apps/flipcash/core/src/androidMain/res/drawable/ic_unknown_contact.xml similarity index 100% rename from apps/flipcash/core/src/main/res/drawable/ic_unknown_contact.xml rename to apps/flipcash/core/src/androidMain/res/drawable/ic_unknown_contact.xml diff --git a/apps/flipcash/core/src/main/res/drawable/ic_usdc.xml b/apps/flipcash/core/src/androidMain/res/drawable/ic_usdc.xml similarity index 100% rename from apps/flipcash/core/src/main/res/drawable/ic_usdc.xml rename to apps/flipcash/core/src/androidMain/res/drawable/ic_usdc.xml diff --git a/apps/flipcash/core/src/main/res/drawable/ic_usdc_on_solana.xml b/apps/flipcash/core/src/androidMain/res/drawable/ic_usdc_on_solana.xml similarity index 100% rename from apps/flipcash/core/src/main/res/drawable/ic_usdc_on_solana.xml rename to apps/flipcash/core/src/androidMain/res/drawable/ic_usdc_on_solana.xml diff --git a/apps/flipcash/core/src/main/res/drawable/ic_wallet.xml b/apps/flipcash/core/src/androidMain/res/drawable/ic_wallet.xml similarity index 100% rename from apps/flipcash/core/src/main/res/drawable/ic_wallet.xml rename to apps/flipcash/core/src/androidMain/res/drawable/ic_wallet.xml diff --git a/apps/flipcash/core/src/main/res/drawable/ic_warning_alert_large.xml b/apps/flipcash/core/src/androidMain/res/drawable/ic_warning_alert_large.xml similarity index 100% rename from apps/flipcash/core/src/main/res/drawable/ic_warning_alert_large.xml rename to apps/flipcash/core/src/androidMain/res/drawable/ic_warning_alert_large.xml diff --git a/apps/flipcash/core/src/main/res/drawable/ic_withdraw_usdf_as_usdc.xml b/apps/flipcash/core/src/androidMain/res/drawable/ic_withdraw_usdf_as_usdc.xml similarity index 100% rename from apps/flipcash/core/src/main/res/drawable/ic_withdraw_usdf_as_usdc.xml rename to apps/flipcash/core/src/androidMain/res/drawable/ic_withdraw_usdf_as_usdc.xml diff --git a/apps/flipcash/core/src/main/res/values/strings-universal.xml b/apps/flipcash/core/src/androidMain/res/values/strings-universal.xml similarity index 100% rename from apps/flipcash/core/src/main/res/values/strings-universal.xml rename to apps/flipcash/core/src/androidMain/res/values/strings-universal.xml diff --git a/apps/flipcash/core/src/main/res/values/strings.xml b/apps/flipcash/core/src/androidMain/res/values/strings.xml similarity index 100% rename from apps/flipcash/core/src/main/res/values/strings.xml rename to apps/flipcash/core/src/androidMain/res/values/strings.xml diff --git a/apps/flipcash/core/src/main/kotlin/com/flipcash/app/core/blocklist/BlockedUserProfile.kt b/apps/flipcash/core/src/commonMain/kotlin/com/flipcash/app/core/blocklist/BlockedUserProfile.kt similarity index 100% rename from apps/flipcash/core/src/main/kotlin/com/flipcash/app/core/blocklist/BlockedUserProfile.kt rename to apps/flipcash/core/src/commonMain/kotlin/com/flipcash/app/core/blocklist/BlockedUserProfile.kt diff --git a/apps/flipcash/core/src/main/kotlin/com/flipcash/app/core/feed/ActivityFeedMessage.kt b/apps/flipcash/core/src/commonMain/kotlin/com/flipcash/app/core/feed/ActivityFeedMessage.kt similarity index 100% rename from apps/flipcash/core/src/main/kotlin/com/flipcash/app/core/feed/ActivityFeedMessage.kt rename to apps/flipcash/core/src/commonMain/kotlin/com/flipcash/app/core/feed/ActivityFeedMessage.kt From 3f90e29b00129c7cb882e8cad4fd0058f8df06ee Mon Sep 17 00:00:00 2001 From: Brandon McAnsh Date: Fri, 23 Oct 2026 17:20:11 -0400 Subject: [PATCH 10/11] build(persistence): move persistence:sources to android+jvm KMP Data sources call a common inTransaction instead of room-ktx's withTransaction, which Room KMP only offers on Android. Android keeps withTransaction; the JVM runs the block on Room's writer connection. Token icons encode with java.util.Base64, which matches Android's NO_WRAP output. The draft data source and its mappers use Uri, so they stay in androidMain. --- .../app/persistence/Transactions.android.kt | 6 ++ .../flipcash/app/persistence/Transactions.kt | 9 +++ .../app/persistence/Transactions.jvm.kt | 8 +++ .../persistence/sources/build.gradle.kts | 62 +++++++++++-------- .../sources/ChatArchiveDataSourceTest.kt | 0 .../sources/ChatMetadataDataSourceTest.kt | 0 .../sources/IncomingMessageOpenerTest.kt | 0 .../sources/MessageDataSourceTest.kt | 0 .../sources/UnreadStreamReadinessTest.kt | 0 .../sources/UserProfileDataSourceTest.kt | 0 .../mapper/chat/ChatEntityMapperTest.kt | 0 .../MessageEntityToFeedMessageMapperTest.kt | 0 .../NotificationToEntityMapperTest.kt | 0 .../mediator/ChatFeedRemoteMediatorTest.kt | 0 .../mediator/ChatMessageRemoteMediatorTest.kt | 0 .../sources/mediator/FeedWatermarkTest.kt | 0 .../sources/CurrencyCreatorDraftDataSource.kt | 0 .../mapper/draft/DraftToEntityMapper.kt | 0 .../mapper/draft/EntityToDraftMapper.kt | 0 .../sources/BlockedUserDataSource.kt | 6 +- .../sources/ChatArchiveDataSource.kt | 0 .../sources/ChatDraftDataSource.kt | 0 .../app/persistence/sources/ChatFeedWriter.kt | 4 +- .../sources/ChatMemberDataSource.kt | 6 +- .../sources/ChatMessageDataSource.kt | 4 +- .../sources/ChatMetadataDataSource.kt | 0 .../persistence/sources/ContactDataSource.kt | 0 .../sources/IncomingMessageOpener.kt | 0 .../sources/LinkPreviewDataSource.kt | 0 .../persistence/sources/MessageDataSource.kt | 0 .../sources/PendingMediaDataSource.kt | 0 .../persistence/sources/TokenDataSource.kt | 0 .../sources/UserProfileDataSource.kt | 0 .../mapper/UserProfileDomainMappers.kt | 0 .../BlockedUserEntityToProfileMapper.kt | 0 .../blocklist/BlockedUserToEntityMapper.kt | 0 .../sources/mapper/chat/ChatEntityMapper.kt | 0 .../MessageEntityToFeedMessageMapper.kt | 0 .../NotificationToEntityMapper.kt | 0 .../mapper/tokens/EntityToTokenMapper.kt | 4 +- .../RelationToTokenWithBalanceMapper.kt | 0 .../mapper/tokens/TokenToEntityMapper.kt | 4 +- .../mediator/BlocklistRemoteMediator.kt | 0 .../mediator/ChatFeedRemoteMediator.kt | 0 .../mediator/ChatMessageRemoteMediator.kt | 0 .../sources/mediator/FeedRemoteMediator.kt | 0 .../sources/mediator/FeedWatermark.kt | 0 .../tokens/core/ReservesBalanceProvider.kt | 0 .../app/tokens/core/TotalBalanceProvider.kt | 0 49 files changed, 72 insertions(+), 41 deletions(-) create mode 100644 apps/flipcash/shared/persistence/db/src/androidMain/kotlin/com/flipcash/app/persistence/Transactions.android.kt create mode 100644 apps/flipcash/shared/persistence/db/src/commonMain/kotlin/com/flipcash/app/persistence/Transactions.kt create mode 100644 apps/flipcash/shared/persistence/db/src/jvmMain/kotlin/com/flipcash/app/persistence/Transactions.jvm.kt rename apps/flipcash/shared/persistence/sources/src/{test => androidHostTest}/kotlin/com/flipcash/app/persistence/sources/ChatArchiveDataSourceTest.kt (100%) rename apps/flipcash/shared/persistence/sources/src/{test => androidHostTest}/kotlin/com/flipcash/app/persistence/sources/ChatMetadataDataSourceTest.kt (100%) rename apps/flipcash/shared/persistence/sources/src/{test => androidHostTest}/kotlin/com/flipcash/app/persistence/sources/IncomingMessageOpenerTest.kt (100%) rename apps/flipcash/shared/persistence/sources/src/{test => androidHostTest}/kotlin/com/flipcash/app/persistence/sources/MessageDataSourceTest.kt (100%) rename apps/flipcash/shared/persistence/sources/src/{test => androidHostTest}/kotlin/com/flipcash/app/persistence/sources/UnreadStreamReadinessTest.kt (100%) rename apps/flipcash/shared/persistence/sources/src/{test => androidHostTest}/kotlin/com/flipcash/app/persistence/sources/UserProfileDataSourceTest.kt (100%) rename apps/flipcash/shared/persistence/sources/src/{test => androidHostTest}/kotlin/com/flipcash/app/persistence/sources/mapper/chat/ChatEntityMapperTest.kt (100%) rename apps/flipcash/shared/persistence/sources/src/{test => androidHostTest}/kotlin/com/flipcash/app/persistence/sources/mapper/notifications/MessageEntityToFeedMessageMapperTest.kt (100%) rename apps/flipcash/shared/persistence/sources/src/{test => androidHostTest}/kotlin/com/flipcash/app/persistence/sources/mapper/notifications/NotificationToEntityMapperTest.kt (100%) rename apps/flipcash/shared/persistence/sources/src/{test => androidHostTest}/kotlin/com/flipcash/app/persistence/sources/mediator/ChatFeedRemoteMediatorTest.kt (100%) rename apps/flipcash/shared/persistence/sources/src/{test => androidHostTest}/kotlin/com/flipcash/app/persistence/sources/mediator/ChatMessageRemoteMediatorTest.kt (100%) rename apps/flipcash/shared/persistence/sources/src/{test => androidHostTest}/kotlin/com/flipcash/app/persistence/sources/mediator/FeedWatermarkTest.kt (100%) rename apps/flipcash/shared/persistence/sources/src/{main => androidMain}/kotlin/com/flipcash/app/persistence/sources/CurrencyCreatorDraftDataSource.kt (100%) rename apps/flipcash/shared/persistence/sources/src/{main => androidMain}/kotlin/com/flipcash/app/persistence/sources/mapper/draft/DraftToEntityMapper.kt (100%) rename apps/flipcash/shared/persistence/sources/src/{main => androidMain}/kotlin/com/flipcash/app/persistence/sources/mapper/draft/EntityToDraftMapper.kt (100%) rename apps/flipcash/shared/persistence/sources/src/{main => commonMain}/kotlin/com/flipcash/app/persistence/sources/BlockedUserDataSource.kt (97%) rename apps/flipcash/shared/persistence/sources/src/{main => commonMain}/kotlin/com/flipcash/app/persistence/sources/ChatArchiveDataSource.kt (100%) rename apps/flipcash/shared/persistence/sources/src/{main => commonMain}/kotlin/com/flipcash/app/persistence/sources/ChatDraftDataSource.kt (100%) rename apps/flipcash/shared/persistence/sources/src/{main => commonMain}/kotlin/com/flipcash/app/persistence/sources/ChatFeedWriter.kt (92%) rename apps/flipcash/shared/persistence/sources/src/{main => commonMain}/kotlin/com/flipcash/app/persistence/sources/ChatMemberDataSource.kt (98%) rename apps/flipcash/shared/persistence/sources/src/{main => commonMain}/kotlin/com/flipcash/app/persistence/sources/ChatMessageDataSource.kt (99%) rename apps/flipcash/shared/persistence/sources/src/{main => commonMain}/kotlin/com/flipcash/app/persistence/sources/ChatMetadataDataSource.kt (100%) rename apps/flipcash/shared/persistence/sources/src/{main => commonMain}/kotlin/com/flipcash/app/persistence/sources/ContactDataSource.kt (100%) rename apps/flipcash/shared/persistence/sources/src/{main => commonMain}/kotlin/com/flipcash/app/persistence/sources/IncomingMessageOpener.kt (100%) rename apps/flipcash/shared/persistence/sources/src/{main => commonMain}/kotlin/com/flipcash/app/persistence/sources/LinkPreviewDataSource.kt (100%) rename apps/flipcash/shared/persistence/sources/src/{main => commonMain}/kotlin/com/flipcash/app/persistence/sources/MessageDataSource.kt (100%) rename apps/flipcash/shared/persistence/sources/src/{main => commonMain}/kotlin/com/flipcash/app/persistence/sources/PendingMediaDataSource.kt (100%) rename apps/flipcash/shared/persistence/sources/src/{main => commonMain}/kotlin/com/flipcash/app/persistence/sources/TokenDataSource.kt (100%) rename apps/flipcash/shared/persistence/sources/src/{main => commonMain}/kotlin/com/flipcash/app/persistence/sources/UserProfileDataSource.kt (100%) rename apps/flipcash/shared/persistence/sources/src/{main => commonMain}/kotlin/com/flipcash/app/persistence/sources/mapper/UserProfileDomainMappers.kt (100%) rename apps/flipcash/shared/persistence/sources/src/{main => commonMain}/kotlin/com/flipcash/app/persistence/sources/mapper/blocklist/BlockedUserEntityToProfileMapper.kt (100%) rename apps/flipcash/shared/persistence/sources/src/{main => commonMain}/kotlin/com/flipcash/app/persistence/sources/mapper/blocklist/BlockedUserToEntityMapper.kt (100%) rename apps/flipcash/shared/persistence/sources/src/{main => commonMain}/kotlin/com/flipcash/app/persistence/sources/mapper/chat/ChatEntityMapper.kt (100%) rename apps/flipcash/shared/persistence/sources/src/{main => commonMain}/kotlin/com/flipcash/app/persistence/sources/mapper/notifications/MessageEntityToFeedMessageMapper.kt (100%) rename apps/flipcash/shared/persistence/sources/src/{main => commonMain}/kotlin/com/flipcash/app/persistence/sources/mapper/notifications/NotificationToEntityMapper.kt (100%) rename apps/flipcash/shared/persistence/sources/src/{main => commonMain}/kotlin/com/flipcash/app/persistence/sources/mapper/tokens/EntityToTokenMapper.kt (98%) rename apps/flipcash/shared/persistence/sources/src/{main => commonMain}/kotlin/com/flipcash/app/persistence/sources/mapper/tokens/RelationToTokenWithBalanceMapper.kt (100%) rename apps/flipcash/shared/persistence/sources/src/{main => commonMain}/kotlin/com/flipcash/app/persistence/sources/mapper/tokens/TokenToEntityMapper.kt (98%) rename apps/flipcash/shared/persistence/sources/src/{main => commonMain}/kotlin/com/flipcash/app/persistence/sources/mediator/BlocklistRemoteMediator.kt (100%) rename apps/flipcash/shared/persistence/sources/src/{main => commonMain}/kotlin/com/flipcash/app/persistence/sources/mediator/ChatFeedRemoteMediator.kt (100%) rename apps/flipcash/shared/persistence/sources/src/{main => commonMain}/kotlin/com/flipcash/app/persistence/sources/mediator/ChatMessageRemoteMediator.kt (100%) rename apps/flipcash/shared/persistence/sources/src/{main => commonMain}/kotlin/com/flipcash/app/persistence/sources/mediator/FeedRemoteMediator.kt (100%) rename apps/flipcash/shared/persistence/sources/src/{main => commonMain}/kotlin/com/flipcash/app/persistence/sources/mediator/FeedWatermark.kt (100%) rename apps/flipcash/shared/tokens/core/src/{main => commonMain}/kotlin/com/flipcash/app/tokens/core/ReservesBalanceProvider.kt (100%) rename apps/flipcash/shared/tokens/core/src/{main => commonMain}/kotlin/com/flipcash/app/tokens/core/TotalBalanceProvider.kt (100%) diff --git a/apps/flipcash/shared/persistence/db/src/androidMain/kotlin/com/flipcash/app/persistence/Transactions.android.kt b/apps/flipcash/shared/persistence/db/src/androidMain/kotlin/com/flipcash/app/persistence/Transactions.android.kt new file mode 100644 index 0000000000..0c24c16320 --- /dev/null +++ b/apps/flipcash/shared/persistence/db/src/androidMain/kotlin/com/flipcash/app/persistence/Transactions.android.kt @@ -0,0 +1,6 @@ +package com.flipcash.app.persistence + +import androidx.room.RoomDatabase +import androidx.room.withTransaction + +actual suspend fun RoomDatabase.inTransaction(block: suspend () -> R): R = withTransaction(block) diff --git a/apps/flipcash/shared/persistence/db/src/commonMain/kotlin/com/flipcash/app/persistence/Transactions.kt b/apps/flipcash/shared/persistence/db/src/commonMain/kotlin/com/flipcash/app/persistence/Transactions.kt new file mode 100644 index 0000000000..ee1763491c --- /dev/null +++ b/apps/flipcash/shared/persistence/db/src/commonMain/kotlin/com/flipcash/app/persistence/Transactions.kt @@ -0,0 +1,9 @@ +package com.flipcash.app.persistence + +import androidx.room.RoomDatabase + +/** + * Runs [block] in a write transaction. Android keeps room-ktx's `withTransaction`; the desktop target + * has no SupportSQLite, so it takes Room's writer connection instead. + */ +expect suspend fun RoomDatabase.inTransaction(block: suspend () -> R): R diff --git a/apps/flipcash/shared/persistence/db/src/jvmMain/kotlin/com/flipcash/app/persistence/Transactions.jvm.kt b/apps/flipcash/shared/persistence/db/src/jvmMain/kotlin/com/flipcash/app/persistence/Transactions.jvm.kt new file mode 100644 index 0000000000..3d2bf9c68e --- /dev/null +++ b/apps/flipcash/shared/persistence/db/src/jvmMain/kotlin/com/flipcash/app/persistence/Transactions.jvm.kt @@ -0,0 +1,8 @@ +package com.flipcash.app.persistence + +import androidx.room.RoomDatabase +import androidx.room.immediateTransaction +import androidx.room.useWriterConnection + +actual suspend fun RoomDatabase.inTransaction(block: suspend () -> R): R = + useWriterConnection { connection -> connection.immediateTransaction { block() } } diff --git a/apps/flipcash/shared/persistence/sources/build.gradle.kts b/apps/flipcash/shared/persistence/sources/build.gradle.kts index ea4b055ca7..ccb56905b3 100644 --- a/apps/flipcash/shared/persistence/sources/build.gradle.kts +++ b/apps/flipcash/shared/persistence/sources/build.gradle.kts @@ -1,36 +1,44 @@ plugins { - alias(libs.plugins.flipcash.android.feature) + alias(libs.plugins.flipcash.kmp.app.library) + alias(libs.plugins.kotlin.ksp) } -android { - namespace = "${Gradle.flipcashNamespace}.shared.persistence.sources" - defaultConfig { - javaCompileOptions { - annotationProcessorOptions { - arguments += mapOf("room.schemaLocation" to "$projectDir/schemas") - } +kotlin { + android { + namespace = "${Gradle.flipcashNamespace}.shared.persistence.sources" + } + + sourceSets { + commonMain.dependencies { + implementation(libs.bundles.kotlinx.serialization) + implementation(libs.androidx.room.runtime) + implementation(libs.androidx.paging.common) + implementation(libs.javax.inject) + + implementation(project(":apps:flipcash:core")) + implementation(project(":apps:flipcash:shared:persistence:db")) + implementation(project(":libs:coroutines")) + implementation(project(":libs:logging")) + implementation(project(":libs:encryption:base58")) + implementation(project(":libs:encryption:keys")) + implementation(project(":libs:encryption:utils")) + implementation(project(":services:flipcash")) + } + androidMain.dependencies { + implementation(libs.bundles.hilt) + implementation(libs.androidx.room.ktx) + implementation(libs.androidx.paging.runtime) + } + getByName("androidHostTest").dependencies { + implementation(kotlin("test")) + implementation(libs.bundles.unit.testing) + implementation(libs.robolectric) + implementation(project(":services:flipcash:test-fixtures")) } } } dependencies { - testImplementation(kotlin("test")) - testImplementation(libs.bundles.unit.testing) - testImplementation(libs.robolectric) - testImplementation(project(":services:flipcash:test-fixtures")) - - implementation(libs.bundles.kotlinx.serialization) - - implementation(libs.bundles.room) - implementation(libs.androidx.paging.runtime) - - ksp(libs.androidx.room.compiler) - - implementation(project(":apps:flipcash:shared:persistence:db")) - - implementation(project(":libs:encryption:base58")) - implementation(project(":libs:encryption:keys")) - implementation(project(":libs:encryption:utils")) - - implementation(project(":services:flipcash")) + add("kspAndroid", libs.hilt.android.compiler) + add("kspAndroid", libs.hilt.compiler) } diff --git a/apps/flipcash/shared/persistence/sources/src/test/kotlin/com/flipcash/app/persistence/sources/ChatArchiveDataSourceTest.kt b/apps/flipcash/shared/persistence/sources/src/androidHostTest/kotlin/com/flipcash/app/persistence/sources/ChatArchiveDataSourceTest.kt similarity index 100% rename from apps/flipcash/shared/persistence/sources/src/test/kotlin/com/flipcash/app/persistence/sources/ChatArchiveDataSourceTest.kt rename to apps/flipcash/shared/persistence/sources/src/androidHostTest/kotlin/com/flipcash/app/persistence/sources/ChatArchiveDataSourceTest.kt diff --git a/apps/flipcash/shared/persistence/sources/src/test/kotlin/com/flipcash/app/persistence/sources/ChatMetadataDataSourceTest.kt b/apps/flipcash/shared/persistence/sources/src/androidHostTest/kotlin/com/flipcash/app/persistence/sources/ChatMetadataDataSourceTest.kt similarity index 100% rename from apps/flipcash/shared/persistence/sources/src/test/kotlin/com/flipcash/app/persistence/sources/ChatMetadataDataSourceTest.kt rename to apps/flipcash/shared/persistence/sources/src/androidHostTest/kotlin/com/flipcash/app/persistence/sources/ChatMetadataDataSourceTest.kt diff --git a/apps/flipcash/shared/persistence/sources/src/test/kotlin/com/flipcash/app/persistence/sources/IncomingMessageOpenerTest.kt b/apps/flipcash/shared/persistence/sources/src/androidHostTest/kotlin/com/flipcash/app/persistence/sources/IncomingMessageOpenerTest.kt similarity index 100% rename from apps/flipcash/shared/persistence/sources/src/test/kotlin/com/flipcash/app/persistence/sources/IncomingMessageOpenerTest.kt rename to apps/flipcash/shared/persistence/sources/src/androidHostTest/kotlin/com/flipcash/app/persistence/sources/IncomingMessageOpenerTest.kt diff --git a/apps/flipcash/shared/persistence/sources/src/test/kotlin/com/flipcash/app/persistence/sources/MessageDataSourceTest.kt b/apps/flipcash/shared/persistence/sources/src/androidHostTest/kotlin/com/flipcash/app/persistence/sources/MessageDataSourceTest.kt similarity index 100% rename from apps/flipcash/shared/persistence/sources/src/test/kotlin/com/flipcash/app/persistence/sources/MessageDataSourceTest.kt rename to apps/flipcash/shared/persistence/sources/src/androidHostTest/kotlin/com/flipcash/app/persistence/sources/MessageDataSourceTest.kt diff --git a/apps/flipcash/shared/persistence/sources/src/test/kotlin/com/flipcash/app/persistence/sources/UnreadStreamReadinessTest.kt b/apps/flipcash/shared/persistence/sources/src/androidHostTest/kotlin/com/flipcash/app/persistence/sources/UnreadStreamReadinessTest.kt similarity index 100% rename from apps/flipcash/shared/persistence/sources/src/test/kotlin/com/flipcash/app/persistence/sources/UnreadStreamReadinessTest.kt rename to apps/flipcash/shared/persistence/sources/src/androidHostTest/kotlin/com/flipcash/app/persistence/sources/UnreadStreamReadinessTest.kt diff --git a/apps/flipcash/shared/persistence/sources/src/test/kotlin/com/flipcash/app/persistence/sources/UserProfileDataSourceTest.kt b/apps/flipcash/shared/persistence/sources/src/androidHostTest/kotlin/com/flipcash/app/persistence/sources/UserProfileDataSourceTest.kt similarity index 100% rename from apps/flipcash/shared/persistence/sources/src/test/kotlin/com/flipcash/app/persistence/sources/UserProfileDataSourceTest.kt rename to apps/flipcash/shared/persistence/sources/src/androidHostTest/kotlin/com/flipcash/app/persistence/sources/UserProfileDataSourceTest.kt diff --git a/apps/flipcash/shared/persistence/sources/src/test/kotlin/com/flipcash/app/persistence/sources/mapper/chat/ChatEntityMapperTest.kt b/apps/flipcash/shared/persistence/sources/src/androidHostTest/kotlin/com/flipcash/app/persistence/sources/mapper/chat/ChatEntityMapperTest.kt similarity index 100% rename from apps/flipcash/shared/persistence/sources/src/test/kotlin/com/flipcash/app/persistence/sources/mapper/chat/ChatEntityMapperTest.kt rename to apps/flipcash/shared/persistence/sources/src/androidHostTest/kotlin/com/flipcash/app/persistence/sources/mapper/chat/ChatEntityMapperTest.kt diff --git a/apps/flipcash/shared/persistence/sources/src/test/kotlin/com/flipcash/app/persistence/sources/mapper/notifications/MessageEntityToFeedMessageMapperTest.kt b/apps/flipcash/shared/persistence/sources/src/androidHostTest/kotlin/com/flipcash/app/persistence/sources/mapper/notifications/MessageEntityToFeedMessageMapperTest.kt similarity index 100% rename from apps/flipcash/shared/persistence/sources/src/test/kotlin/com/flipcash/app/persistence/sources/mapper/notifications/MessageEntityToFeedMessageMapperTest.kt rename to apps/flipcash/shared/persistence/sources/src/androidHostTest/kotlin/com/flipcash/app/persistence/sources/mapper/notifications/MessageEntityToFeedMessageMapperTest.kt diff --git a/apps/flipcash/shared/persistence/sources/src/test/kotlin/com/flipcash/app/persistence/sources/mapper/notifications/NotificationToEntityMapperTest.kt b/apps/flipcash/shared/persistence/sources/src/androidHostTest/kotlin/com/flipcash/app/persistence/sources/mapper/notifications/NotificationToEntityMapperTest.kt similarity index 100% rename from apps/flipcash/shared/persistence/sources/src/test/kotlin/com/flipcash/app/persistence/sources/mapper/notifications/NotificationToEntityMapperTest.kt rename to apps/flipcash/shared/persistence/sources/src/androidHostTest/kotlin/com/flipcash/app/persistence/sources/mapper/notifications/NotificationToEntityMapperTest.kt diff --git a/apps/flipcash/shared/persistence/sources/src/test/kotlin/com/flipcash/app/persistence/sources/mediator/ChatFeedRemoteMediatorTest.kt b/apps/flipcash/shared/persistence/sources/src/androidHostTest/kotlin/com/flipcash/app/persistence/sources/mediator/ChatFeedRemoteMediatorTest.kt similarity index 100% rename from apps/flipcash/shared/persistence/sources/src/test/kotlin/com/flipcash/app/persistence/sources/mediator/ChatFeedRemoteMediatorTest.kt rename to apps/flipcash/shared/persistence/sources/src/androidHostTest/kotlin/com/flipcash/app/persistence/sources/mediator/ChatFeedRemoteMediatorTest.kt diff --git a/apps/flipcash/shared/persistence/sources/src/test/kotlin/com/flipcash/app/persistence/sources/mediator/ChatMessageRemoteMediatorTest.kt b/apps/flipcash/shared/persistence/sources/src/androidHostTest/kotlin/com/flipcash/app/persistence/sources/mediator/ChatMessageRemoteMediatorTest.kt similarity index 100% rename from apps/flipcash/shared/persistence/sources/src/test/kotlin/com/flipcash/app/persistence/sources/mediator/ChatMessageRemoteMediatorTest.kt rename to apps/flipcash/shared/persistence/sources/src/androidHostTest/kotlin/com/flipcash/app/persistence/sources/mediator/ChatMessageRemoteMediatorTest.kt diff --git a/apps/flipcash/shared/persistence/sources/src/test/kotlin/com/flipcash/app/persistence/sources/mediator/FeedWatermarkTest.kt b/apps/flipcash/shared/persistence/sources/src/androidHostTest/kotlin/com/flipcash/app/persistence/sources/mediator/FeedWatermarkTest.kt similarity index 100% rename from apps/flipcash/shared/persistence/sources/src/test/kotlin/com/flipcash/app/persistence/sources/mediator/FeedWatermarkTest.kt rename to apps/flipcash/shared/persistence/sources/src/androidHostTest/kotlin/com/flipcash/app/persistence/sources/mediator/FeedWatermarkTest.kt diff --git a/apps/flipcash/shared/persistence/sources/src/main/kotlin/com/flipcash/app/persistence/sources/CurrencyCreatorDraftDataSource.kt b/apps/flipcash/shared/persistence/sources/src/androidMain/kotlin/com/flipcash/app/persistence/sources/CurrencyCreatorDraftDataSource.kt similarity index 100% rename from apps/flipcash/shared/persistence/sources/src/main/kotlin/com/flipcash/app/persistence/sources/CurrencyCreatorDraftDataSource.kt rename to apps/flipcash/shared/persistence/sources/src/androidMain/kotlin/com/flipcash/app/persistence/sources/CurrencyCreatorDraftDataSource.kt diff --git a/apps/flipcash/shared/persistence/sources/src/main/kotlin/com/flipcash/app/persistence/sources/mapper/draft/DraftToEntityMapper.kt b/apps/flipcash/shared/persistence/sources/src/androidMain/kotlin/com/flipcash/app/persistence/sources/mapper/draft/DraftToEntityMapper.kt similarity index 100% rename from apps/flipcash/shared/persistence/sources/src/main/kotlin/com/flipcash/app/persistence/sources/mapper/draft/DraftToEntityMapper.kt rename to apps/flipcash/shared/persistence/sources/src/androidMain/kotlin/com/flipcash/app/persistence/sources/mapper/draft/DraftToEntityMapper.kt diff --git a/apps/flipcash/shared/persistence/sources/src/main/kotlin/com/flipcash/app/persistence/sources/mapper/draft/EntityToDraftMapper.kt b/apps/flipcash/shared/persistence/sources/src/androidMain/kotlin/com/flipcash/app/persistence/sources/mapper/draft/EntityToDraftMapper.kt similarity index 100% rename from apps/flipcash/shared/persistence/sources/src/main/kotlin/com/flipcash/app/persistence/sources/mapper/draft/EntityToDraftMapper.kt rename to apps/flipcash/shared/persistence/sources/src/androidMain/kotlin/com/flipcash/app/persistence/sources/mapper/draft/EntityToDraftMapper.kt diff --git a/apps/flipcash/shared/persistence/sources/src/main/kotlin/com/flipcash/app/persistence/sources/BlockedUserDataSource.kt b/apps/flipcash/shared/persistence/sources/src/commonMain/kotlin/com/flipcash/app/persistence/sources/BlockedUserDataSource.kt similarity index 97% rename from apps/flipcash/shared/persistence/sources/src/main/kotlin/com/flipcash/app/persistence/sources/BlockedUserDataSource.kt rename to apps/flipcash/shared/persistence/sources/src/commonMain/kotlin/com/flipcash/app/persistence/sources/BlockedUserDataSource.kt index 02443246a8..676c41d187 100644 --- a/apps/flipcash/shared/persistence/sources/src/main/kotlin/com/flipcash/app/persistence/sources/BlockedUserDataSource.kt +++ b/apps/flipcash/shared/persistence/sources/src/commonMain/kotlin/com/flipcash/app/persistence/sources/BlockedUserDataSource.kt @@ -2,7 +2,7 @@ package com.flipcash.app.persistence.sources import androidx.paging.PagingSource import androidx.paging.PagingState -import androidx.room.withTransaction +import com.flipcash.app.persistence.inTransaction import com.flipcash.app.persistence.FlipcashDatabase import com.flipcash.app.persistence.entities.BlockedUserEntity import com.flipcash.app.persistence.entities.BlockedUserWithProfile @@ -43,7 +43,7 @@ class BlockedUserDataSource @Inject constructor( suspend fun upsert(resolved: List) { val database = db ?: return - database.withTransaction { + database.inTransaction { database.blockedUserDao().upsert(resolved.map { toEntityMapper.map(it) }) resolved.forEach { database.writeProfile(it) } } @@ -52,7 +52,7 @@ class BlockedUserDataSource @Inject constructor( /** Atomically replaces the cached blocklist — a single Room invalidation, no empty flicker. */ suspend fun replaceAll(resolved: List) { val database = db ?: return - database.withTransaction { + database.inTransaction { database.blockedUserDao().replaceAll(resolved.map { toEntityMapper.map(it) }) resolved.forEach { database.writeProfile(it) } } diff --git a/apps/flipcash/shared/persistence/sources/src/main/kotlin/com/flipcash/app/persistence/sources/ChatArchiveDataSource.kt b/apps/flipcash/shared/persistence/sources/src/commonMain/kotlin/com/flipcash/app/persistence/sources/ChatArchiveDataSource.kt similarity index 100% rename from apps/flipcash/shared/persistence/sources/src/main/kotlin/com/flipcash/app/persistence/sources/ChatArchiveDataSource.kt rename to apps/flipcash/shared/persistence/sources/src/commonMain/kotlin/com/flipcash/app/persistence/sources/ChatArchiveDataSource.kt diff --git a/apps/flipcash/shared/persistence/sources/src/main/kotlin/com/flipcash/app/persistence/sources/ChatDraftDataSource.kt b/apps/flipcash/shared/persistence/sources/src/commonMain/kotlin/com/flipcash/app/persistence/sources/ChatDraftDataSource.kt similarity index 100% rename from apps/flipcash/shared/persistence/sources/src/main/kotlin/com/flipcash/app/persistence/sources/ChatDraftDataSource.kt rename to apps/flipcash/shared/persistence/sources/src/commonMain/kotlin/com/flipcash/app/persistence/sources/ChatDraftDataSource.kt diff --git a/apps/flipcash/shared/persistence/sources/src/main/kotlin/com/flipcash/app/persistence/sources/ChatFeedWriter.kt b/apps/flipcash/shared/persistence/sources/src/commonMain/kotlin/com/flipcash/app/persistence/sources/ChatFeedWriter.kt similarity index 92% rename from apps/flipcash/shared/persistence/sources/src/main/kotlin/com/flipcash/app/persistence/sources/ChatFeedWriter.kt rename to apps/flipcash/shared/persistence/sources/src/commonMain/kotlin/com/flipcash/app/persistence/sources/ChatFeedWriter.kt index 1c6b907771..e5cbb7e986 100644 --- a/apps/flipcash/shared/persistence/sources/src/main/kotlin/com/flipcash/app/persistence/sources/ChatFeedWriter.kt +++ b/apps/flipcash/shared/persistence/sources/src/commonMain/kotlin/com/flipcash/app/persistence/sources/ChatFeedWriter.kt @@ -1,6 +1,6 @@ package com.flipcash.app.persistence.sources -import androidx.room.withTransaction +import com.flipcash.app.persistence.inTransaction import com.flipcash.app.persistence.FlipcashDatabase import com.flipcash.services.models.chat.ChatMetadata import javax.inject.Inject @@ -31,7 +31,7 @@ class ChatFeedWriter @Inject constructor( messageDataSource.writePrepared(prepared) } val database = FlipcashDatabase.getInstance() - if (database != null) database.withTransaction { body() } else body() + if (database != null) database.inTransaction { body() } else body() messageDataSource.afterWrite(prepared) } } diff --git a/apps/flipcash/shared/persistence/sources/src/main/kotlin/com/flipcash/app/persistence/sources/ChatMemberDataSource.kt b/apps/flipcash/shared/persistence/sources/src/commonMain/kotlin/com/flipcash/app/persistence/sources/ChatMemberDataSource.kt similarity index 98% rename from apps/flipcash/shared/persistence/sources/src/main/kotlin/com/flipcash/app/persistence/sources/ChatMemberDataSource.kt rename to apps/flipcash/shared/persistence/sources/src/commonMain/kotlin/com/flipcash/app/persistence/sources/ChatMemberDataSource.kt index e11f9c44c3..42c74b8efc 100644 --- a/apps/flipcash/shared/persistence/sources/src/main/kotlin/com/flipcash/app/persistence/sources/ChatMemberDataSource.kt +++ b/apps/flipcash/shared/persistence/sources/src/commonMain/kotlin/com/flipcash/app/persistence/sources/ChatMemberDataSource.kt @@ -1,6 +1,6 @@ package com.flipcash.app.persistence.sources -import androidx.room.withTransaction +import com.flipcash.app.persistence.inTransaction import com.flipcash.app.persistence.FlipcashDatabase import com.flipcash.app.persistence.sources.mapper.chat.ChatEntityMapper import com.flipcash.services.models.chat.ChatId @@ -92,7 +92,7 @@ class ChatMemberDataSource @Inject constructor( // Member rows and their normalized profiles are written in one transaction so a // member never observes a missing profile mid-write. Profiles go first (the // @Relation reads them). - database.withTransaction { + database.inTransaction { database.userProfileDao().upsertMembers(profileRows(members)) database.chatMemberDao().upsert(members.map { mapper.toEntity(hex, it) }) } @@ -128,7 +128,7 @@ class ChatMemberDataSource @Inject constructor( val database = db ?: return val hex = mapper.chatIdHex(chatId) - database.withTransaction { + database.inTransaction { database.userProfileDao().upsertMembers(profileRows(members)) database.chatMemberDao().upsert(members.map { mapper.toEntity(hex, it) }) database.chatMemberDao().deleteMembersNotIn( diff --git a/apps/flipcash/shared/persistence/sources/src/main/kotlin/com/flipcash/app/persistence/sources/ChatMessageDataSource.kt b/apps/flipcash/shared/persistence/sources/src/commonMain/kotlin/com/flipcash/app/persistence/sources/ChatMessageDataSource.kt similarity index 99% rename from apps/flipcash/shared/persistence/sources/src/main/kotlin/com/flipcash/app/persistence/sources/ChatMessageDataSource.kt rename to apps/flipcash/shared/persistence/sources/src/commonMain/kotlin/com/flipcash/app/persistence/sources/ChatMessageDataSource.kt index 688e5339fc..9513162504 100644 --- a/apps/flipcash/shared/persistence/sources/src/main/kotlin/com/flipcash/app/persistence/sources/ChatMessageDataSource.kt +++ b/apps/flipcash/shared/persistence/sources/src/commonMain/kotlin/com/flipcash/app/persistence/sources/ChatMessageDataSource.kt @@ -1,7 +1,7 @@ package com.flipcash.app.persistence.sources import androidx.paging.PagingSource -import androidx.room.withTransaction +import com.flipcash.app.persistence.inTransaction import com.flipcash.app.persistence.FlipcashDatabase import com.flipcash.app.persistence.dao.ChatMessageDao import com.flipcash.app.persistence.entities.ChatMessageEntity @@ -366,7 +366,7 @@ class ChatMessageDataSource @Inject constructor( suspend fun writePrepared(prepared: PreparedMessages) { val database = db ?: return if (prepared.byChat.isEmpty()) return - database.withTransaction { + database.inTransaction { for ((chatId, messages) in prepared.byChat) write(mapper.chatIdHex(chatId), messages) } } diff --git a/apps/flipcash/shared/persistence/sources/src/main/kotlin/com/flipcash/app/persistence/sources/ChatMetadataDataSource.kt b/apps/flipcash/shared/persistence/sources/src/commonMain/kotlin/com/flipcash/app/persistence/sources/ChatMetadataDataSource.kt similarity index 100% rename from apps/flipcash/shared/persistence/sources/src/main/kotlin/com/flipcash/app/persistence/sources/ChatMetadataDataSource.kt rename to apps/flipcash/shared/persistence/sources/src/commonMain/kotlin/com/flipcash/app/persistence/sources/ChatMetadataDataSource.kt diff --git a/apps/flipcash/shared/persistence/sources/src/main/kotlin/com/flipcash/app/persistence/sources/ContactDataSource.kt b/apps/flipcash/shared/persistence/sources/src/commonMain/kotlin/com/flipcash/app/persistence/sources/ContactDataSource.kt similarity index 100% rename from apps/flipcash/shared/persistence/sources/src/main/kotlin/com/flipcash/app/persistence/sources/ContactDataSource.kt rename to apps/flipcash/shared/persistence/sources/src/commonMain/kotlin/com/flipcash/app/persistence/sources/ContactDataSource.kt diff --git a/apps/flipcash/shared/persistence/sources/src/main/kotlin/com/flipcash/app/persistence/sources/IncomingMessageOpener.kt b/apps/flipcash/shared/persistence/sources/src/commonMain/kotlin/com/flipcash/app/persistence/sources/IncomingMessageOpener.kt similarity index 100% rename from apps/flipcash/shared/persistence/sources/src/main/kotlin/com/flipcash/app/persistence/sources/IncomingMessageOpener.kt rename to apps/flipcash/shared/persistence/sources/src/commonMain/kotlin/com/flipcash/app/persistence/sources/IncomingMessageOpener.kt diff --git a/apps/flipcash/shared/persistence/sources/src/main/kotlin/com/flipcash/app/persistence/sources/LinkPreviewDataSource.kt b/apps/flipcash/shared/persistence/sources/src/commonMain/kotlin/com/flipcash/app/persistence/sources/LinkPreviewDataSource.kt similarity index 100% rename from apps/flipcash/shared/persistence/sources/src/main/kotlin/com/flipcash/app/persistence/sources/LinkPreviewDataSource.kt rename to apps/flipcash/shared/persistence/sources/src/commonMain/kotlin/com/flipcash/app/persistence/sources/LinkPreviewDataSource.kt diff --git a/apps/flipcash/shared/persistence/sources/src/main/kotlin/com/flipcash/app/persistence/sources/MessageDataSource.kt b/apps/flipcash/shared/persistence/sources/src/commonMain/kotlin/com/flipcash/app/persistence/sources/MessageDataSource.kt similarity index 100% rename from apps/flipcash/shared/persistence/sources/src/main/kotlin/com/flipcash/app/persistence/sources/MessageDataSource.kt rename to apps/flipcash/shared/persistence/sources/src/commonMain/kotlin/com/flipcash/app/persistence/sources/MessageDataSource.kt diff --git a/apps/flipcash/shared/persistence/sources/src/main/kotlin/com/flipcash/app/persistence/sources/PendingMediaDataSource.kt b/apps/flipcash/shared/persistence/sources/src/commonMain/kotlin/com/flipcash/app/persistence/sources/PendingMediaDataSource.kt similarity index 100% rename from apps/flipcash/shared/persistence/sources/src/main/kotlin/com/flipcash/app/persistence/sources/PendingMediaDataSource.kt rename to apps/flipcash/shared/persistence/sources/src/commonMain/kotlin/com/flipcash/app/persistence/sources/PendingMediaDataSource.kt diff --git a/apps/flipcash/shared/persistence/sources/src/main/kotlin/com/flipcash/app/persistence/sources/TokenDataSource.kt b/apps/flipcash/shared/persistence/sources/src/commonMain/kotlin/com/flipcash/app/persistence/sources/TokenDataSource.kt similarity index 100% rename from apps/flipcash/shared/persistence/sources/src/main/kotlin/com/flipcash/app/persistence/sources/TokenDataSource.kt rename to apps/flipcash/shared/persistence/sources/src/commonMain/kotlin/com/flipcash/app/persistence/sources/TokenDataSource.kt diff --git a/apps/flipcash/shared/persistence/sources/src/main/kotlin/com/flipcash/app/persistence/sources/UserProfileDataSource.kt b/apps/flipcash/shared/persistence/sources/src/commonMain/kotlin/com/flipcash/app/persistence/sources/UserProfileDataSource.kt similarity index 100% rename from apps/flipcash/shared/persistence/sources/src/main/kotlin/com/flipcash/app/persistence/sources/UserProfileDataSource.kt rename to apps/flipcash/shared/persistence/sources/src/commonMain/kotlin/com/flipcash/app/persistence/sources/UserProfileDataSource.kt diff --git a/apps/flipcash/shared/persistence/sources/src/main/kotlin/com/flipcash/app/persistence/sources/mapper/UserProfileDomainMappers.kt b/apps/flipcash/shared/persistence/sources/src/commonMain/kotlin/com/flipcash/app/persistence/sources/mapper/UserProfileDomainMappers.kt similarity index 100% rename from apps/flipcash/shared/persistence/sources/src/main/kotlin/com/flipcash/app/persistence/sources/mapper/UserProfileDomainMappers.kt rename to apps/flipcash/shared/persistence/sources/src/commonMain/kotlin/com/flipcash/app/persistence/sources/mapper/UserProfileDomainMappers.kt diff --git a/apps/flipcash/shared/persistence/sources/src/main/kotlin/com/flipcash/app/persistence/sources/mapper/blocklist/BlockedUserEntityToProfileMapper.kt b/apps/flipcash/shared/persistence/sources/src/commonMain/kotlin/com/flipcash/app/persistence/sources/mapper/blocklist/BlockedUserEntityToProfileMapper.kt similarity index 100% rename from apps/flipcash/shared/persistence/sources/src/main/kotlin/com/flipcash/app/persistence/sources/mapper/blocklist/BlockedUserEntityToProfileMapper.kt rename to apps/flipcash/shared/persistence/sources/src/commonMain/kotlin/com/flipcash/app/persistence/sources/mapper/blocklist/BlockedUserEntityToProfileMapper.kt diff --git a/apps/flipcash/shared/persistence/sources/src/main/kotlin/com/flipcash/app/persistence/sources/mapper/blocklist/BlockedUserToEntityMapper.kt b/apps/flipcash/shared/persistence/sources/src/commonMain/kotlin/com/flipcash/app/persistence/sources/mapper/blocklist/BlockedUserToEntityMapper.kt similarity index 100% rename from apps/flipcash/shared/persistence/sources/src/main/kotlin/com/flipcash/app/persistence/sources/mapper/blocklist/BlockedUserToEntityMapper.kt rename to apps/flipcash/shared/persistence/sources/src/commonMain/kotlin/com/flipcash/app/persistence/sources/mapper/blocklist/BlockedUserToEntityMapper.kt diff --git a/apps/flipcash/shared/persistence/sources/src/main/kotlin/com/flipcash/app/persistence/sources/mapper/chat/ChatEntityMapper.kt b/apps/flipcash/shared/persistence/sources/src/commonMain/kotlin/com/flipcash/app/persistence/sources/mapper/chat/ChatEntityMapper.kt similarity index 100% rename from apps/flipcash/shared/persistence/sources/src/main/kotlin/com/flipcash/app/persistence/sources/mapper/chat/ChatEntityMapper.kt rename to apps/flipcash/shared/persistence/sources/src/commonMain/kotlin/com/flipcash/app/persistence/sources/mapper/chat/ChatEntityMapper.kt diff --git a/apps/flipcash/shared/persistence/sources/src/main/kotlin/com/flipcash/app/persistence/sources/mapper/notifications/MessageEntityToFeedMessageMapper.kt b/apps/flipcash/shared/persistence/sources/src/commonMain/kotlin/com/flipcash/app/persistence/sources/mapper/notifications/MessageEntityToFeedMessageMapper.kt similarity index 100% rename from apps/flipcash/shared/persistence/sources/src/main/kotlin/com/flipcash/app/persistence/sources/mapper/notifications/MessageEntityToFeedMessageMapper.kt rename to apps/flipcash/shared/persistence/sources/src/commonMain/kotlin/com/flipcash/app/persistence/sources/mapper/notifications/MessageEntityToFeedMessageMapper.kt diff --git a/apps/flipcash/shared/persistence/sources/src/main/kotlin/com/flipcash/app/persistence/sources/mapper/notifications/NotificationToEntityMapper.kt b/apps/flipcash/shared/persistence/sources/src/commonMain/kotlin/com/flipcash/app/persistence/sources/mapper/notifications/NotificationToEntityMapper.kt similarity index 100% rename from apps/flipcash/shared/persistence/sources/src/main/kotlin/com/flipcash/app/persistence/sources/mapper/notifications/NotificationToEntityMapper.kt rename to apps/flipcash/shared/persistence/sources/src/commonMain/kotlin/com/flipcash/app/persistence/sources/mapper/notifications/NotificationToEntityMapper.kt diff --git a/apps/flipcash/shared/persistence/sources/src/main/kotlin/com/flipcash/app/persistence/sources/mapper/tokens/EntityToTokenMapper.kt b/apps/flipcash/shared/persistence/sources/src/commonMain/kotlin/com/flipcash/app/persistence/sources/mapper/tokens/EntityToTokenMapper.kt similarity index 98% rename from apps/flipcash/shared/persistence/sources/src/main/kotlin/com/flipcash/app/persistence/sources/mapper/tokens/EntityToTokenMapper.kt rename to apps/flipcash/shared/persistence/sources/src/commonMain/kotlin/com/flipcash/app/persistence/sources/mapper/tokens/EntityToTokenMapper.kt index 92b4ccfe96..69c6228baf 100644 --- a/apps/flipcash/shared/persistence/sources/src/main/kotlin/com/flipcash/app/persistence/sources/mapper/tokens/EntityToTokenMapper.kt +++ b/apps/flipcash/shared/persistence/sources/src/commonMain/kotlin/com/flipcash/app/persistence/sources/mapper/tokens/EntityToTokenMapper.kt @@ -1,6 +1,6 @@ package com.flipcash.app.persistence.sources.mapper.tokens -import android.util.Base64 +import java.util.Base64 import com.flipcash.app.persistence.converters.BillBackgroundSerialized import com.flipcash.app.persistence.converters.BillCustomizationsSerialized import com.flipcash.app.persistence.converters.HolderMetricsSerialized @@ -99,7 +99,7 @@ private fun BillCustomizationsSerialized.toDomain() = TokenBillCustomizations( strength = it.strength, ) }, - icon = icon?.let { Base64.decode(it, Base64.NO_WRAP) }, + icon = icon?.let { Base64.getDecoder().decode(it) }, ) private fun HolderMetricsSerialized.toDomain() = HolderMetrics( diff --git a/apps/flipcash/shared/persistence/sources/src/main/kotlin/com/flipcash/app/persistence/sources/mapper/tokens/RelationToTokenWithBalanceMapper.kt b/apps/flipcash/shared/persistence/sources/src/commonMain/kotlin/com/flipcash/app/persistence/sources/mapper/tokens/RelationToTokenWithBalanceMapper.kt similarity index 100% rename from apps/flipcash/shared/persistence/sources/src/main/kotlin/com/flipcash/app/persistence/sources/mapper/tokens/RelationToTokenWithBalanceMapper.kt rename to apps/flipcash/shared/persistence/sources/src/commonMain/kotlin/com/flipcash/app/persistence/sources/mapper/tokens/RelationToTokenWithBalanceMapper.kt diff --git a/apps/flipcash/shared/persistence/sources/src/main/kotlin/com/flipcash/app/persistence/sources/mapper/tokens/TokenToEntityMapper.kt b/apps/flipcash/shared/persistence/sources/src/commonMain/kotlin/com/flipcash/app/persistence/sources/mapper/tokens/TokenToEntityMapper.kt similarity index 98% rename from apps/flipcash/shared/persistence/sources/src/main/kotlin/com/flipcash/app/persistence/sources/mapper/tokens/TokenToEntityMapper.kt rename to apps/flipcash/shared/persistence/sources/src/commonMain/kotlin/com/flipcash/app/persistence/sources/mapper/tokens/TokenToEntityMapper.kt index eee1953820..54710f5007 100644 --- a/apps/flipcash/shared/persistence/sources/src/main/kotlin/com/flipcash/app/persistence/sources/mapper/tokens/TokenToEntityMapper.kt +++ b/apps/flipcash/shared/persistence/sources/src/commonMain/kotlin/com/flipcash/app/persistence/sources/mapper/tokens/TokenToEntityMapper.kt @@ -1,6 +1,6 @@ package com.flipcash.app.persistence.sources.mapper.tokens -import android.util.Base64 +import java.util.Base64 import com.flipcash.app.persistence.converters.BillBackgroundSerialized import com.flipcash.app.persistence.converters.BillCustomizationsSerialized import com.flipcash.app.persistence.converters.BillTextureSerialized @@ -95,7 +95,7 @@ private fun TokenBillCustomizations.toSerialized() = BillCustomizationsSerialize strength = it.strength, ) }, - icon = icon?.let { Base64.encodeToString(it, Base64.NO_WRAP) }, + icon = icon?.let { Base64.getEncoder().encodeToString(it) }, ) private fun HolderMetrics.toSerialized() = HolderMetricsSerialized( diff --git a/apps/flipcash/shared/persistence/sources/src/main/kotlin/com/flipcash/app/persistence/sources/mediator/BlocklistRemoteMediator.kt b/apps/flipcash/shared/persistence/sources/src/commonMain/kotlin/com/flipcash/app/persistence/sources/mediator/BlocklistRemoteMediator.kt similarity index 100% rename from apps/flipcash/shared/persistence/sources/src/main/kotlin/com/flipcash/app/persistence/sources/mediator/BlocklistRemoteMediator.kt rename to apps/flipcash/shared/persistence/sources/src/commonMain/kotlin/com/flipcash/app/persistence/sources/mediator/BlocklistRemoteMediator.kt diff --git a/apps/flipcash/shared/persistence/sources/src/main/kotlin/com/flipcash/app/persistence/sources/mediator/ChatFeedRemoteMediator.kt b/apps/flipcash/shared/persistence/sources/src/commonMain/kotlin/com/flipcash/app/persistence/sources/mediator/ChatFeedRemoteMediator.kt similarity index 100% rename from apps/flipcash/shared/persistence/sources/src/main/kotlin/com/flipcash/app/persistence/sources/mediator/ChatFeedRemoteMediator.kt rename to apps/flipcash/shared/persistence/sources/src/commonMain/kotlin/com/flipcash/app/persistence/sources/mediator/ChatFeedRemoteMediator.kt diff --git a/apps/flipcash/shared/persistence/sources/src/main/kotlin/com/flipcash/app/persistence/sources/mediator/ChatMessageRemoteMediator.kt b/apps/flipcash/shared/persistence/sources/src/commonMain/kotlin/com/flipcash/app/persistence/sources/mediator/ChatMessageRemoteMediator.kt similarity index 100% rename from apps/flipcash/shared/persistence/sources/src/main/kotlin/com/flipcash/app/persistence/sources/mediator/ChatMessageRemoteMediator.kt rename to apps/flipcash/shared/persistence/sources/src/commonMain/kotlin/com/flipcash/app/persistence/sources/mediator/ChatMessageRemoteMediator.kt diff --git a/apps/flipcash/shared/persistence/sources/src/main/kotlin/com/flipcash/app/persistence/sources/mediator/FeedRemoteMediator.kt b/apps/flipcash/shared/persistence/sources/src/commonMain/kotlin/com/flipcash/app/persistence/sources/mediator/FeedRemoteMediator.kt similarity index 100% rename from apps/flipcash/shared/persistence/sources/src/main/kotlin/com/flipcash/app/persistence/sources/mediator/FeedRemoteMediator.kt rename to apps/flipcash/shared/persistence/sources/src/commonMain/kotlin/com/flipcash/app/persistence/sources/mediator/FeedRemoteMediator.kt diff --git a/apps/flipcash/shared/persistence/sources/src/main/kotlin/com/flipcash/app/persistence/sources/mediator/FeedWatermark.kt b/apps/flipcash/shared/persistence/sources/src/commonMain/kotlin/com/flipcash/app/persistence/sources/mediator/FeedWatermark.kt similarity index 100% rename from apps/flipcash/shared/persistence/sources/src/main/kotlin/com/flipcash/app/persistence/sources/mediator/FeedWatermark.kt rename to apps/flipcash/shared/persistence/sources/src/commonMain/kotlin/com/flipcash/app/persistence/sources/mediator/FeedWatermark.kt diff --git a/apps/flipcash/shared/tokens/core/src/main/kotlin/com/flipcash/app/tokens/core/ReservesBalanceProvider.kt b/apps/flipcash/shared/tokens/core/src/commonMain/kotlin/com/flipcash/app/tokens/core/ReservesBalanceProvider.kt similarity index 100% rename from apps/flipcash/shared/tokens/core/src/main/kotlin/com/flipcash/app/tokens/core/ReservesBalanceProvider.kt rename to apps/flipcash/shared/tokens/core/src/commonMain/kotlin/com/flipcash/app/tokens/core/ReservesBalanceProvider.kt diff --git a/apps/flipcash/shared/tokens/core/src/main/kotlin/com/flipcash/app/tokens/core/TotalBalanceProvider.kt b/apps/flipcash/shared/tokens/core/src/commonMain/kotlin/com/flipcash/app/tokens/core/TotalBalanceProvider.kt similarity index 100% rename from apps/flipcash/shared/tokens/core/src/main/kotlin/com/flipcash/app/tokens/core/TotalBalanceProvider.kt rename to apps/flipcash/shared/tokens/core/src/commonMain/kotlin/com/flipcash/app/tokens/core/TotalBalanceProvider.kt From d24505921b66c3ea78031546b606f4cd522c39af Mon Sep 17 00:00:00 2001 From: Brandon McAnsh Date: Fri, 23 Oct 2026 17:20:11 -0400 Subject: [PATCH 11/11] build(tokens): move tokens:core to android+jvm KMP --- .../flipcash/shared/tokens/core/build.gradle.kts | 16 ++++++++++------ 1 file changed, 10 insertions(+), 6 deletions(-) diff --git a/apps/flipcash/shared/tokens/core/build.gradle.kts b/apps/flipcash/shared/tokens/core/build.gradle.kts index 7ab06290d4..1021b7e231 100644 --- a/apps/flipcash/shared/tokens/core/build.gradle.kts +++ b/apps/flipcash/shared/tokens/core/build.gradle.kts @@ -1,11 +1,15 @@ plugins { - alias(libs.plugins.flipcash.android.library) + alias(libs.plugins.flipcash.kmp.app.library) } -android { - namespace = "${Gradle.flipcashNamespace}.shared.tokens.core" -} +kotlin { + android { + namespace = "${Gradle.flipcashNamespace}.shared.tokens.core" + } -dependencies { - api(project(":services:opencode")) + sourceSets { + commonMain.dependencies { + api(project(":services:opencode")) + } + } }