From f5c3a950bf52d4c6294bfd98fda683a23aec39e9 Mon Sep 17 00:00:00 2001 From: Harsh Shandilya Date: Mon, 15 Mar 2021 00:00:37 +0530 Subject: [PATCH] common: make UrlLauncher use expect/actual Signed-off-by: Harsh Shandilya --- .../lobsters/injection/UrlLauncherModule.kt | 3 +-- .../{AndroidUrlLauncherImpl.kt => UrlLauncher.kt} | 5 ++--- .../msfjarvis/lobsters/ui/urllauncher/UrlLauncher.kt | 2 +- .../{JVMUrlLauncherImpl.kt => UrlLauncher.kt} | 4 ++-- .../main/kotlin/dev/msfjarvis/lobsters/ui/Main.kt | 12 +++++++++--- 5 files changed, 15 insertions(+), 11 deletions(-) rename common/src/androidMain/kotlin/dev/msfjarvis/lobsters/ui/urllauncher/{AndroidUrlLauncherImpl.kt => UrlLauncher.kt} (71%) rename common/src/jvmMain/kotlin/dev/msfjarvis/lobsters/ui/urllauncher/{JVMUrlLauncherImpl.kt => UrlLauncher.kt} (76%) 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 117e1a27..73568493 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,12 @@ 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.AndroidUrlLauncherImpl @Module @InstallIn(ActivityComponent::class) object UrlLauncherModule { @Provides fun provideUrlLauncher(@ActivityContext context: Context): UrlLauncher { - return AndroidUrlLauncherImpl(context) + return UrlLauncher(context) } } diff --git a/common/src/androidMain/kotlin/dev/msfjarvis/lobsters/ui/urllauncher/AndroidUrlLauncherImpl.kt b/common/src/androidMain/kotlin/dev/msfjarvis/lobsters/ui/urllauncher/UrlLauncher.kt similarity index 71% rename from common/src/androidMain/kotlin/dev/msfjarvis/lobsters/ui/urllauncher/AndroidUrlLauncherImpl.kt rename to common/src/androidMain/kotlin/dev/msfjarvis/lobsters/ui/urllauncher/UrlLauncher.kt index 696d4198..5fdca34d 100644 --- a/common/src/androidMain/kotlin/dev/msfjarvis/lobsters/ui/urllauncher/AndroidUrlLauncherImpl.kt +++ b/common/src/androidMain/kotlin/dev/msfjarvis/lobsters/ui/urllauncher/UrlLauncher.kt @@ -3,10 +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 AndroidUrlLauncherImpl(private val context: Context) : UrlLauncher { - override fun launch(url: String) { +actual class UrlLauncher(private val context: Context) { + actual fun launch(url: String) { val customTabsIntent = CustomTabsIntent.Builder() .setShareState(CustomTabsIntent.SHARE_STATE_ON) .setShowTitle(true) diff --git a/common/src/commonMain/kotlin/dev/msfjarvis/lobsters/ui/urllauncher/UrlLauncher.kt b/common/src/commonMain/kotlin/dev/msfjarvis/lobsters/ui/urllauncher/UrlLauncher.kt index f4ec0bc8..5259e9f5 100644 --- a/common/src/commonMain/kotlin/dev/msfjarvis/lobsters/ui/urllauncher/UrlLauncher.kt +++ b/common/src/commonMain/kotlin/dev/msfjarvis/lobsters/ui/urllauncher/UrlLauncher.kt @@ -1,5 +1,5 @@ package dev.msfjarvis.lobsters.ui.urllauncher -fun interface UrlLauncher { +expect class UrlLauncher { fun launch(url: String) } diff --git a/common/src/jvmMain/kotlin/dev/msfjarvis/lobsters/ui/urllauncher/JVMUrlLauncherImpl.kt b/common/src/jvmMain/kotlin/dev/msfjarvis/lobsters/ui/urllauncher/UrlLauncher.kt similarity index 76% rename from common/src/jvmMain/kotlin/dev/msfjarvis/lobsters/ui/urllauncher/JVMUrlLauncherImpl.kt rename to common/src/jvmMain/kotlin/dev/msfjarvis/lobsters/ui/urllauncher/UrlLauncher.kt index 2a3081e4..2460decc 100644 --- a/common/src/jvmMain/kotlin/dev/msfjarvis/lobsters/ui/urllauncher/JVMUrlLauncherImpl.kt +++ b/common/src/jvmMain/kotlin/dev/msfjarvis/lobsters/ui/urllauncher/UrlLauncher.kt @@ -3,8 +3,8 @@ package dev.msfjarvis.lobsters.ui.urllauncher import java.awt.Desktop import java.net.URI -class JVMUrlLauncherImpl() : UrlLauncher { - override fun launch(url: String) { +actual class UrlLauncher { + actual fun launch(url: String) { val desktop = Desktop.getDesktop() if (Desktop.isDesktopSupported() && desktop.isSupported(Desktop.Action.BROWSE)) { diff --git a/desktop/src/main/kotlin/dev/msfjarvis/lobsters/ui/Main.kt b/desktop/src/main/kotlin/dev/msfjarvis/lobsters/ui/Main.kt index 420a691b..c53c3302 100644 --- a/desktop/src/main/kotlin/dev/msfjarvis/lobsters/ui/Main.kt +++ b/desktop/src/main/kotlin/dev/msfjarvis/lobsters/ui/Main.kt @@ -11,6 +11,7 @@ import androidx.compose.foundation.rememberScrollState import androidx.compose.foundation.rememberScrollbarAdapter import androidx.compose.foundation.verticalScroll import androidx.compose.material.Text +import androidx.compose.runtime.CompositionLocalProvider import androidx.compose.runtime.remember import androidx.compose.runtime.rememberCoroutineScope import androidx.compose.ui.Alignment @@ -21,6 +22,8 @@ import androidx.compose.runtime.mutableStateOf import androidx.compose.runtime.setValue import dev.msfjarvis.lobsters.data.ApiRepository import dev.msfjarvis.lobsters.model.LobstersPost +import dev.msfjarvis.lobsters.ui.urllauncher.LocalUrlLauncher +import dev.msfjarvis.lobsters.ui.urllauncher.UrlLauncher import kotlinx.coroutines.Dispatchers import kotlinx.coroutines.launch import kotlinx.coroutines.withContext @@ -29,6 +32,7 @@ val repository = ApiRepository() @OptIn(ExperimentalStdlibApi::class) fun main() = Window(title = "Claw for lobste.rs") { + val urlLauncher = UrlLauncher() val coroutineScope = rememberCoroutineScope() var items by remember { mutableStateOf(emptyList()) } coroutineScope.launch { @@ -49,9 +53,11 @@ fun main() = Window(title = "Claw for lobste.rs") { if (items.isEmpty()) { Text("Loading...") } else { - Column { - items.forEach { - LobstersItem(it) + CompositionLocalProvider(LocalUrlLauncher provides urlLauncher) { + Column { + items.forEach { + LobstersItem(it) + } } } }