diff --git a/.idea/artifacts/common_jvm.xml b/.idea/artifacts/common_jvm.xml
new file mode 100644
index 00000000..256528c5
--- /dev/null
+++ b/.idea/artifacts/common_jvm.xml
@@ -0,0 +1,8 @@
+
+
+ $PROJECT_DIR$/common/build/libs
+
+
+
+
+
\ No newline at end of file
diff --git a/.idea/gradle.xml b/.idea/gradle.xml
index ff2dbb07..1e428de2 100644
--- a/.idea/gradle.xml
+++ b/.idea/gradle.xml
@@ -14,6 +14,7 @@
+
diff --git a/app/build.gradle.kts b/app/build.gradle.kts
index 4f7b3df0..7bbc99bf 100644
--- a/app/build.gradle.kts
+++ b/app/build.gradle.kts
@@ -3,29 +3,29 @@ plugins {
kotlin("android")
kotlin("kapt")
id("dagger.hilt.android.plugin")
+ id("org.jetbrains.compose") version "0.4.0-build173"
id("shot")
`versioning-plugin`
`lobsters-plugin`
`core-library-desugaring`
}
+repositories {
+ maven("https://maven.pkg.jetbrains.space/public/p/compose/dev")
+}
+
android {
defaultConfig {
applicationId = "dev.msfjarvis.lobsters"
testInstrumentationRunner = "com.karumi.shot.ShotTestRunner"
}
-
- buildFeatures.compose = true
-
- composeOptions {
- kotlinCompilerExtensionVersion = Dependencies.COMPOSE_VERSION
- }
}
dependencies {
kapt(Dependencies.AndroidX.Hilt.daggerCompiler)
implementation(project(":api"))
+ implementation(project(":common"))
implementation(project(":database"))
implementation(Dependencies.AndroidX.appCompat)
implementation(Dependencies.AndroidX.browser)
diff --git a/app/src/main/java/dev/msfjarvis/lobsters/injection/UrlLauncherModule.kt b/app/src/main/java/dev/msfjarvis/lobsters/injection/UrlLauncherModule.kt
index 21cc10eb..117e1a27 100644
--- a/app/src/main/java/dev/msfjarvis/lobsters/injection/UrlLauncherModule.kt
+++ b/app/src/main/java/dev/msfjarvis/lobsters/injection/UrlLauncherModule.kt
@@ -7,13 +7,13 @@ import dagger.hilt.InstallIn
import dagger.hilt.android.components.ActivityComponent
import dagger.hilt.android.qualifiers.ActivityContext
import dev.msfjarvis.lobsters.ui.urllauncher.UrlLauncher
-import dev.msfjarvis.lobsters.ui.urllauncher.UrlLauncherImpl
+import dev.msfjarvis.lobsters.ui.urllauncher.AndroidUrlLauncherImpl
@Module
@InstallIn(ActivityComponent::class)
object UrlLauncherModule {
@Provides
fun provideUrlLauncher(@ActivityContext context: Context): UrlLauncher {
- return UrlLauncherImpl(context)
+ return AndroidUrlLauncherImpl(context)
}
}
diff --git a/common/build.gradle.kts b/common/build.gradle.kts
new file mode 100644
index 00000000..39b86f1e
--- /dev/null
+++ b/common/build.gradle.kts
@@ -0,0 +1,58 @@
+plugins {
+ kotlin("multiplatform")
+ id("com.android.library")
+ id("org.jetbrains.compose") version "0.4.0-build173"
+ `lobsters-plugin`
+}
+
+repositories {
+ mavenCentral()
+ maven("https://maven.pkg.jetbrains.space/public/p/compose/dev")
+ google()
+}
+
+
+tasks.withType {
+ kotlinOptions {
+ jvmTarget = JavaVersion.VERSION_1_8.toString()
+ useIR = true
+ }
+}
+
+// workaround for https://youtrack.jetbrains.com/issue/KT-43944
+android {
+ configurations {
+ create("androidTestApi")
+ create("androidTestDebugApi")
+ create("androidTestReleaseApi")
+ create("testApi")
+ create("testDebugApi")
+ create("testReleaseApi")
+ }
+}
+
+kotlin {
+ jvm()
+ android()
+
+ sourceSets {
+ val androidMain by getting {
+ dependencies {
+ implementation(Dependencies.AndroidX.Compose.runtime)
+ implementation(Dependencies.AndroidX.browser)
+ }
+ }
+
+ val commonMain by getting {
+ dependencies {
+ implementation(Dependencies.AndroidX.Compose.runtime)
+ }
+ }
+
+ val jvmMain by getting {
+ dependencies {
+ implementation(Dependencies.AndroidX.Compose.runtime)
+ }
+ }
+ }
+}
diff --git a/app/src/main/java/dev/msfjarvis/lobsters/ui/urllauncher/UrlLauncherImpl.kt b/common/src/androidMain/kotlin/dev/msfjarvis/lobsters/ui/urllauncher/AndroidUrlLauncherImpl.kt
similarity index 77%
rename from app/src/main/java/dev/msfjarvis/lobsters/ui/urllauncher/UrlLauncherImpl.kt
rename to common/src/androidMain/kotlin/dev/msfjarvis/lobsters/ui/urllauncher/AndroidUrlLauncherImpl.kt
index 9eb167aa..696d4198 100644
--- a/app/src/main/java/dev/msfjarvis/lobsters/ui/urllauncher/UrlLauncherImpl.kt
+++ b/common/src/androidMain/kotlin/dev/msfjarvis/lobsters/ui/urllauncher/AndroidUrlLauncherImpl.kt
@@ -3,8 +3,9 @@ package dev.msfjarvis.lobsters.ui.urllauncher
import android.content.Context
import android.net.Uri
import androidx.browser.customtabs.CustomTabsIntent
+import dev.msfjarvis.lobsters.ui.urllauncher.UrlLauncher
-class UrlLauncherImpl(private val context: Context) : UrlLauncher {
+class AndroidUrlLauncherImpl(private val context: Context) : UrlLauncher {
override fun launch(url: String) {
val customTabsIntent = CustomTabsIntent.Builder()
.setShareState(CustomTabsIntent.SHARE_STATE_ON)
diff --git a/app/src/main/java/dev/msfjarvis/lobsters/ui/urllauncher/AmbientUrlLauncher.kt b/common/src/commonMain/kotlin/dev/msfjarvis/lobsters/ui/urllauncher/LocalUrlLauncher.kt
similarity index 52%
rename from app/src/main/java/dev/msfjarvis/lobsters/ui/urllauncher/AmbientUrlLauncher.kt
rename to common/src/commonMain/kotlin/dev/msfjarvis/lobsters/ui/urllauncher/LocalUrlLauncher.kt
index 41a9a1e1..4cc144c5 100644
--- a/app/src/main/java/dev/msfjarvis/lobsters/ui/urllauncher/AmbientUrlLauncher.kt
+++ b/common/src/commonMain/kotlin/dev/msfjarvis/lobsters/ui/urllauncher/LocalUrlLauncher.kt
@@ -2,4 +2,4 @@ package dev.msfjarvis.lobsters.ui.urllauncher
import androidx.compose.runtime.staticCompositionLocalOf
-val LocalUrlLauncher = staticCompositionLocalOf { error("Needs to be provided") }
+val LocalUrlLauncher = staticCompositionLocalOf { error("Needs to be provided") }
\ No newline at end of file
diff --git a/app/src/main/java/dev/msfjarvis/lobsters/ui/urllauncher/UrlLauncher.kt b/common/src/commonMain/kotlin/dev/msfjarvis/lobsters/ui/urllauncher/UrlLauncher.kt
similarity index 100%
rename from app/src/main/java/dev/msfjarvis/lobsters/ui/urllauncher/UrlLauncher.kt
rename to common/src/commonMain/kotlin/dev/msfjarvis/lobsters/ui/urllauncher/UrlLauncher.kt
diff --git a/common/src/jvmMain/kotlin/dev/msfjarvis/lobsters/ui/urllauncher/JVMLocalLauncherImpl.kt b/common/src/jvmMain/kotlin/dev/msfjarvis/lobsters/ui/urllauncher/JVMLocalLauncherImpl.kt
new file mode 100644
index 00000000..ffc66343
--- /dev/null
+++ b/common/src/jvmMain/kotlin/dev/msfjarvis/lobsters/ui/urllauncher/JVMLocalLauncherImpl.kt
@@ -0,0 +1,14 @@
+package dev.msfjarvis.lobsters.ui.urllauncher
+
+import java.awt.Desktop
+import java.net.URI
+
+class JVMLocalLauncherImpl() : UrlLauncher {
+ override fun launch(url: String) {
+ val desktop = Desktop.getDesktop()
+
+ if (Desktop.isDesktopSupported() && desktop.isSupported(Desktop.Action.BROWSE)) {
+ desktop.browse(URI(url))
+ }
+ }
+}
diff --git a/common/src/main/AndroidManifest.xml b/common/src/main/AndroidManifest.xml
new file mode 100644
index 00000000..361d1ca3
--- /dev/null
+++ b/common/src/main/AndroidManifest.xml
@@ -0,0 +1,2 @@
+
diff --git a/desktop/build.gradle.kts b/desktop/build.gradle.kts
index ef313b38..a63ea850 100644
--- a/desktop/build.gradle.kts
+++ b/desktop/build.gradle.kts
@@ -12,6 +12,7 @@ repositories {
dependencies {
implementation(project(":api"))
+ implementation(project(":common"))
implementation(project(":database"))
implementation(compose.desktop.currentOs)
implementation(compose.runtime)
diff --git a/settings.gradle.kts b/settings.gradle.kts
index c47242d3..1c8c8040 100644
--- a/settings.gradle.kts
+++ b/settings.gradle.kts
@@ -1,5 +1,5 @@
rootProject.name = "Claw"
-include(":app", ":api", ":database", ":desktop")
+include(":app", ":api", ":common", ":database", ":desktop")
enableFeaturePreview("GRADLE_METADATA")
pluginManagement {
repositories {