diff --git a/androidApp/src/main/java/fr/paug/androidmakers/AndroidMakersApplication.kt b/androidApp/src/main/java/fr/paug/androidmakers/AndroidMakersApplication.kt index da16e8fb..09d3cc2a 100644 --- a/androidApp/src/main/java/fr/paug/androidmakers/AndroidMakersApplication.kt +++ b/androidApp/src/main/java/fr/paug/androidmakers/AndroidMakersApplication.kt @@ -2,7 +2,6 @@ package fr.paug.androidmakers import android.app.Application import com.androidmakers.di.viewModelModule -import com.androidmakers.ui.LocalPlatformContext import fr.androidmakers.di.DependenciesBuilder import io.openfeedback.m3.initializeOpenFeedback import io.openfeedback.viewmodels.OpenFeedbackFirebaseConfig @@ -20,4 +19,3 @@ class AndroidMakersApplication : Application() { ) } } - diff --git a/androidApp/src/main/java/fr/paug/androidmakers/MainActivity.kt b/androidApp/src/main/java/fr/paug/androidmakers/MainActivity.kt index e914a488..7e70a7e3 100644 --- a/androidApp/src/main/java/fr/paug/androidmakers/MainActivity.kt +++ b/androidApp/src/main/java/fr/paug/androidmakers/MainActivity.kt @@ -9,7 +9,6 @@ import androidx.activity.SystemBarStyle import androidx.activity.compose.setContent import androidx.activity.enableEdgeToEdge import androidx.compose.foundation.isSystemInDarkTheme -import androidx.compose.runtime.CompositionLocalProvider import androidx.compose.runtime.DisposableEffect import androidx.compose.runtime.getValue import androidx.compose.runtime.mutableStateOf @@ -17,7 +16,6 @@ import androidx.compose.runtime.remember import androidx.compose.runtime.setValue import androidx.core.view.WindowCompat import androidx.lifecycle.lifecycleScope -import com.androidmakers.ui.LocalPlatformContext import com.androidmakers.ui.MainLayout import com.androidmakers.ui.common.SigninCallbacks import com.androidmakers.ui.common.navigation.UserData @@ -47,50 +45,44 @@ class MainActivity : ComponentActivity() { logFCMToken() setContent { - val rememberedActivity = remember { this } - - CompositionLocalProvider( - LocalPlatformContext provides rememberedActivity, - ) { - KoinContext { - AndroidMakersTheme { - val darkTheme = isSystemInDarkTheme() - DisposableEffect(darkTheme) { - enableEdgeToEdge( - statusBarStyle = SystemBarStyle.auto( - Color.TRANSPARENT, - Color.TRANSPARENT, - ) { darkTheme }, - navigationBarStyle = SystemBarStyle.auto( - Color.TRANSPARENT, - Color.TRANSPARENT, - ) { darkTheme }, - ) - onDispose { } - } + KoinContext { + AndroidMakersTheme { + val darkTheme = isSystemInDarkTheme() + DisposableEffect(darkTheme) { + enableEdgeToEdge( + statusBarStyle = SystemBarStyle.auto( + Color.TRANSPARENT, + Color.TRANSPARENT, + ) { darkTheme }, + navigationBarStyle = SystemBarStyle.auto( + Color.TRANSPARENT, + Color.TRANSPARENT, + ) { darkTheme }, + ) + onDispose { } + } - var deeplink: String? by remember { mutableStateOf(null) } + var deeplink: String? by remember { mutableStateOf(null) } - intent.data?.let { - deeplink = it.toString() - } + intent.data?.let { + deeplink = it.toString() + } - addOnNewIntentListener { - it.data?.let { - deeplink = it.toString() - } + addOnNewIntentListener { + it.data?.let { + deeplink = it.toString() } + } - MainLayout( - versionName = BuildConfig.VERSION_NAME, - versionCode = BuildConfig.VERSION_CODE.toString(), - deeplink = deeplink, - signinCallbacks = SigninCallbacks( - signin = { signin() }, - signout = { signout() }, - ) + MainLayout( + versionName = BuildConfig.VERSION_NAME, + versionCode = BuildConfig.VERSION_CODE.toString(), + deeplink = deeplink, + signinCallbacks = SigninCallbacks( + signin = { signin() }, + signout = { signout() }, ) - } + ) } } } diff --git a/gradle/libs.versions.toml b/gradle/libs.versions.toml index 20188c0e..615ac134 100644 --- a/gradle/libs.versions.toml +++ b/gradle/libs.versions.toml @@ -3,6 +3,7 @@ version-code = "1467" sdk-compile = "34" sdk-min = "24" androidxActivity = "1.9.0" +androidxCore = "1.13.0" androidxLifecycle = "2.7.0" apollo = "4.0.0-beta.6" compose = "1.6.4" @@ -30,6 +31,7 @@ okio = "3.9.0" [libraries] androidx-activity-compose = { group = "androidx.activity", name = "activity-compose", version.ref = "androidxActivity" } +androidx-core = { group = "androidx.core", name = "core-ktx", version.ref = "androidxCore" } androidx-lifecycle-runtime = { module = "androidx.lifecycle:lifecycle-runtime-ktx", version.ref = "androidxLifecycle" } androidx-lifecycle-viewmodel-compose = { module = "androidx.lifecycle:lifecycle-viewmodel-compose", version.ref = "androidxLifecycle" } apollo-adapters = { module = "com.apollographql.apollo3:apollo-adapters", version.ref = "apollo" } diff --git a/shared/di/src/androidMain/kotlin/fr/androidmakers/di/DomainModule.android.kt b/shared/di/src/androidMain/kotlin/fr/androidmakers/di/DomainModule.android.kt index 93c0e612..481b05e6 100644 --- a/shared/di/src/androidMain/kotlin/fr/androidmakers/di/DomainModule.android.kt +++ b/shared/di/src/androidMain/kotlin/fr/androidmakers/di/DomainModule.android.kt @@ -3,15 +3,14 @@ package fr.androidmakers.di import fr.androidmakers.domain.interactor.OpenMapUseCase import fr.androidmakers.domain.interactor.ShareSessionUseCase import fr.androidmakers.domain.utils.UrlOpener -import org.koin.android.ext.koin.androidContext import org.koin.dsl.module actual val domainPlatformModule = module { single { - UrlOpener(androidContext()) + UrlOpener() } - factory { OpenMapUseCase(get(), get()) } + factory { OpenMapUseCase(get()) } - factory { ShareSessionUseCase(androidContext()) } + factory { ShareSessionUseCase() } } diff --git a/shared/domain/build.gradle.kts b/shared/domain/build.gradle.kts index f7eb592b..73f9b074 100644 --- a/shared/domain/build.gradle.kts +++ b/shared/domain/build.gradle.kts @@ -22,6 +22,9 @@ kotlin { api(libs.kotlinx.datetime) implementation(libs.okio) } + androidMain.dependencies { + implementation(libs.androidx.core) + } } } diff --git a/shared/domain/src/androidMain/kotlin/fr/androidmakers/domain/PlatformContext.android.kt b/shared/domain/src/androidMain/kotlin/fr/androidmakers/domain/PlatformContext.android.kt new file mode 100644 index 00000000..0a54876c --- /dev/null +++ b/shared/domain/src/androidMain/kotlin/fr/androidmakers/domain/PlatformContext.android.kt @@ -0,0 +1,5 @@ +package fr.androidmakers.domain + +import android.content.Context + +actual class PlatformContext(val context: Context) diff --git a/shared/domain/src/androidMain/kotlin/fr/androidmakers/domain/interactor/OpenMapUseCase.android.kt b/shared/domain/src/androidMain/kotlin/fr/androidmakers/domain/interactor/OpenMapUseCase.android.kt index 33466713..f57df72a 100644 --- a/shared/domain/src/androidMain/kotlin/fr/androidmakers/domain/interactor/OpenMapUseCase.android.kt +++ b/shared/domain/src/androidMain/kotlin/fr/androidmakers/domain/interactor/OpenMapUseCase.android.kt @@ -1,26 +1,27 @@ package fr.androidmakers.domain.interactor -import android.content.Context import android.content.Intent import android.net.Uri +import fr.androidmakers.domain.PlatformContext import fr.androidmakers.domain.utils.UrlOpener actual class OpenMapUseCase( - private val context: Context, private val urlOpener: UrlOpener ) { - actual operator fun invoke(coordinates: String, name: String) { - val venueCoordinatesUri = Uri.parse( - "geo:" + coordinates + - "?q=" + Uri.encode(name) - ) + actual operator fun invoke(platformContext: PlatformContext, coordinates: String, name: String) { + val venueCoordinatesUri = Uri.Builder() + .scheme("geo") + .encodedAuthority(coordinates) + .appendQueryParameter("q", name) + .build() try { val intent = Intent(Intent.ACTION_VIEW, venueCoordinatesUri) - context.startActivity(intent) + platformContext.context.startActivity(intent) } catch (e: Exception) { // Open in Webview urlOpener.openUrl( - url = "https://www.google.com/maps/?q=" + coordinates.replace(" ", "") + platformContext = platformContext, + url = "https://www.google.com/maps/?q=" + coordinates.filter { it != ' ' } ) } } diff --git a/shared/domain/src/androidMain/kotlin/fr/androidmakers/domain/interactor/ShareSessionUseCase.android.kt b/shared/domain/src/androidMain/kotlin/fr/androidmakers/domain/interactor/ShareSessionUseCase.android.kt index b61fee2b..afdac9a2 100644 --- a/shared/domain/src/androidMain/kotlin/fr/androidmakers/domain/interactor/ShareSessionUseCase.android.kt +++ b/shared/domain/src/androidMain/kotlin/fr/androidmakers/domain/interactor/ShareSessionUseCase.android.kt @@ -1,46 +1,42 @@ package fr.androidmakers.domain.interactor -import android.content.Context -import android.content.Intent -import android.content.Intent.FLAG_ACTIVITY_NEW_TASK +import androidx.core.app.ShareCompat +import fr.androidmakers.domain.PlatformContext import fr.androidmakers.domain.model.Session import fr.androidmakers.domain.model.Speaker -actual class ShareSessionUseCase(private val context: Context) { - actual operator fun invoke(session: Session, speakers: List, formattedDateAndRoom: String) { - val speakersString = speakers.joinToString(", ") { it.name ?: "" } - - val shareSessionIntent = Intent(Intent.ACTION_SEND) - shareSessionIntent.putExtra(Intent.EXTRA_SUBJECT, session.title) - if (speakers.isEmpty()) { - shareSessionIntent.putExtra( - Intent.EXTRA_TEXT, - String.format( - "%s: %s (%s)", - // TODO put this in resources - "Android Makers", - session.title, - formattedDateAndRoom - ) +actual class ShareSessionUseCase { + actual operator fun invoke( + platformContext: PlatformContext, + session: Session, + speakers: List, + formattedDateAndRoom: String + ) { + val context = platformContext.context + val shareText = if (speakers.isEmpty()) { + "%s: %s (%s)".format( + // TODO put this in resources + "Android Makers", + session.title, + formattedDateAndRoom ) } else { - shareSessionIntent.putExtra( - Intent.EXTRA_TEXT, - String.format( - "%s: %s (%s, %s, %s)", - "Android Makers", - session.title, - speakersString, - formattedDateAndRoom, - session.language - ) + val speakersString = speakers.joinToString(", ") { it.name.orEmpty() } + "%s: %s (%s, %s, %s)".format( + "Android Makers", + session.title, + speakersString, + formattedDateAndRoom, + session.language ) } - shareSessionIntent.type = "text/plain" - val shareSheetIntent = Intent.createChooser(shareSessionIntent, null) - // TODO find a solution to use the activity for starting the intent to remove this flag - shareSheetIntent.addFlags(FLAG_ACTIVITY_NEW_TASK) + val shareSheetIntent = ShareCompat.IntentBuilder(context) + .setSubject(session.title) + .setType("text/plain") + .setText(shareText) + .createChooserIntent() + context.startActivity(shareSheetIntent) } } diff --git a/shared/domain/src/androidMain/kotlin/fr/androidmakers/domain/utils/UrlOpener.android.kt b/shared/domain/src/androidMain/kotlin/fr/androidmakers/domain/utils/UrlOpener.android.kt index 099c4019..12a29489 100644 --- a/shared/domain/src/androidMain/kotlin/fr/androidmakers/domain/utils/UrlOpener.android.kt +++ b/shared/domain/src/androidMain/kotlin/fr/androidmakers/domain/utils/UrlOpener.android.kt @@ -1,17 +1,15 @@ package fr.androidmakers.domain.utils import android.content.ActivityNotFoundException -import android.content.Context import android.content.Intent import android.net.Uri +import fr.androidmakers.domain.PlatformContext -actual class UrlOpener(private val context: Context) { - actual fun openUrl(url: String): Boolean { +actual class UrlOpener { + actual fun openUrl(platformContext: PlatformContext, url: String): Boolean { return try { - val intent = Intent(Intent.ACTION_VIEW, Uri.parse(url)).apply { - addFlags(Intent.FLAG_ACTIVITY_NEW_TASK) - } - context.startActivity(intent) + val intent = Intent(Intent.ACTION_VIEW, Uri.parse(url)) + platformContext.context.startActivity(intent) true } catch (anfe: ActivityNotFoundException) { anfe.printStackTrace() diff --git a/shared/domain/src/commonMain/kotlin/fr/androidmakers/domain/PlatformContext.kt b/shared/domain/src/commonMain/kotlin/fr/androidmakers/domain/PlatformContext.kt new file mode 100644 index 00000000..e61ba053 --- /dev/null +++ b/shared/domain/src/commonMain/kotlin/fr/androidmakers/domain/PlatformContext.kt @@ -0,0 +1,3 @@ +package fr.androidmakers.domain + +expect class PlatformContext diff --git a/shared/domain/src/commonMain/kotlin/fr/androidmakers/domain/interactor/ApplyForAppClinicUseCase.kt b/shared/domain/src/commonMain/kotlin/fr/androidmakers/domain/interactor/ApplyForAppClinicUseCase.kt index 31b5cdc6..914854ba 100644 --- a/shared/domain/src/commonMain/kotlin/fr/androidmakers/domain/interactor/ApplyForAppClinicUseCase.kt +++ b/shared/domain/src/commonMain/kotlin/fr/androidmakers/domain/interactor/ApplyForAppClinicUseCase.kt @@ -1,12 +1,13 @@ package fr.androidmakers.domain.interactor +import fr.androidmakers.domain.PlatformContext import fr.androidmakers.domain.model.APPLY_FOR_APP_CLINIC_MAILTO_URL import fr.androidmakers.domain.utils.UrlOpener class ApplyForAppClinicUseCase( private val urlOpener: UrlOpener ) { - operator fun invoke() { - urlOpener.openUrl(APPLY_FOR_APP_CLINIC_MAILTO_URL) + operator fun invoke(platformContext: PlatformContext) { + urlOpener.openUrl(platformContext, APPLY_FOR_APP_CLINIC_MAILTO_URL) } } diff --git a/shared/domain/src/commonMain/kotlin/fr/androidmakers/domain/interactor/OpenCocUseCase.kt b/shared/domain/src/commonMain/kotlin/fr/androidmakers/domain/interactor/OpenCocUseCase.kt index cfed1adf..1a7d8806 100644 --- a/shared/domain/src/commonMain/kotlin/fr/androidmakers/domain/interactor/OpenCocUseCase.kt +++ b/shared/domain/src/commonMain/kotlin/fr/androidmakers/domain/interactor/OpenCocUseCase.kt @@ -1,10 +1,12 @@ package fr.androidmakers.domain.interactor +import fr.androidmakers.domain.PlatformContext import fr.androidmakers.domain.utils.Constants import fr.androidmakers.domain.utils.UrlOpener class OpenCocUseCase( private val urlOpener: UrlOpener ) { - operator fun invoke() = urlOpener.openUrl(Constants.Urls.coc) + operator fun invoke(platformContext: PlatformContext) = + urlOpener.openUrl(platformContext, Constants.Urls.coc) } diff --git a/shared/domain/src/commonMain/kotlin/fr/androidmakers/domain/interactor/OpenFaqUseCase.kt b/shared/domain/src/commonMain/kotlin/fr/androidmakers/domain/interactor/OpenFaqUseCase.kt index 3a952b34..f5423a6b 100644 --- a/shared/domain/src/commonMain/kotlin/fr/androidmakers/domain/interactor/OpenFaqUseCase.kt +++ b/shared/domain/src/commonMain/kotlin/fr/androidmakers/domain/interactor/OpenFaqUseCase.kt @@ -1,10 +1,12 @@ package fr.androidmakers.domain.interactor +import fr.androidmakers.domain.PlatformContext import fr.androidmakers.domain.utils.Constants import fr.androidmakers.domain.utils.UrlOpener class OpenFaqUseCase( - private val urlOpener: UrlOpener + private val urlOpener: UrlOpener ) { - operator fun invoke() = urlOpener.openUrl(Constants.Urls.faq) + operator fun invoke(platformContext: PlatformContext) = + urlOpener.openUrl(platformContext, Constants.Urls.faq) } diff --git a/shared/domain/src/commonMain/kotlin/fr/androidmakers/domain/interactor/OpenLinkUseCase.kt b/shared/domain/src/commonMain/kotlin/fr/androidmakers/domain/interactor/OpenLinkUseCase.kt index b766cd95..097653ff 100644 --- a/shared/domain/src/commonMain/kotlin/fr/androidmakers/domain/interactor/OpenLinkUseCase.kt +++ b/shared/domain/src/commonMain/kotlin/fr/androidmakers/domain/interactor/OpenLinkUseCase.kt @@ -1,11 +1,12 @@ package fr.androidmakers.domain.interactor +import fr.androidmakers.domain.PlatformContext import fr.androidmakers.domain.utils.UrlOpener class OpenLinkUseCase( private val urlOpener: UrlOpener ) { - operator fun invoke(url: String) { - urlOpener.openUrl(url) + operator fun invoke(platformContext: PlatformContext, url: String) { + urlOpener.openUrl(platformContext, url) } } diff --git a/shared/domain/src/commonMain/kotlin/fr/androidmakers/domain/interactor/OpenMapUseCase.kt b/shared/domain/src/commonMain/kotlin/fr/androidmakers/domain/interactor/OpenMapUseCase.kt index 0d2ed572..2112e9a8 100644 --- a/shared/domain/src/commonMain/kotlin/fr/androidmakers/domain/interactor/OpenMapUseCase.kt +++ b/shared/domain/src/commonMain/kotlin/fr/androidmakers/domain/interactor/OpenMapUseCase.kt @@ -1,5 +1,7 @@ package fr.androidmakers.domain.interactor +import fr.androidmakers.domain.PlatformContext + expect class OpenMapUseCase { - operator fun invoke(coordinates: String, name: String) + operator fun invoke(platformContext: PlatformContext, coordinates: String, name: String) } diff --git a/shared/domain/src/commonMain/kotlin/fr/androidmakers/domain/interactor/OpenPartnerLinkUseCase.kt b/shared/domain/src/commonMain/kotlin/fr/androidmakers/domain/interactor/OpenPartnerLinkUseCase.kt index bfab03ee..bfa3eb67 100644 --- a/shared/domain/src/commonMain/kotlin/fr/androidmakers/domain/interactor/OpenPartnerLinkUseCase.kt +++ b/shared/domain/src/commonMain/kotlin/fr/androidmakers/domain/interactor/OpenPartnerLinkUseCase.kt @@ -1,12 +1,13 @@ package fr.androidmakers.domain.interactor +import fr.androidmakers.domain.PlatformContext import fr.androidmakers.domain.model.Partner import fr.androidmakers.domain.utils.UrlOpener class OpenPartnerLinkUseCase( - private val urlOpener: UrlOpener + private val urlOpener: UrlOpener ) { - operator fun invoke(partner: Partner) { - urlOpener.openUrl(partner.url) + operator fun invoke(platformContext: PlatformContext, partner: Partner) { + urlOpener.openUrl(platformContext, partner.url) } } diff --git a/shared/domain/src/commonMain/kotlin/fr/androidmakers/domain/interactor/OpenXAccountUseCase.kt b/shared/domain/src/commonMain/kotlin/fr/androidmakers/domain/interactor/OpenXAccountUseCase.kt index 74294c48..1443a93f 100644 --- a/shared/domain/src/commonMain/kotlin/fr/androidmakers/domain/interactor/OpenXAccountUseCase.kt +++ b/shared/domain/src/commonMain/kotlin/fr/androidmakers/domain/interactor/OpenXAccountUseCase.kt @@ -1,14 +1,15 @@ package fr.androidmakers.domain.interactor +import fr.androidmakers.domain.PlatformContext import fr.androidmakers.domain.utils.Constants import fr.androidmakers.domain.utils.UrlOpener class OpenXAccountUseCase( - private val urlOpener: UrlOpener + private val urlOpener: UrlOpener ) { - operator fun invoke() { - if (!urlOpener.openUrl(Constants.Urls.xAccountApp)) { - urlOpener.openUrl(Constants.Urls.xAccountWeb) + operator fun invoke(platformContext: PlatformContext) { + if (!urlOpener.openUrl(platformContext, Constants.Urls.xAccountApp)) { + urlOpener.openUrl(platformContext, Constants.Urls.xAccountWeb) } } } diff --git a/shared/domain/src/commonMain/kotlin/fr/androidmakers/domain/interactor/OpenXHashtagUseCase.kt b/shared/domain/src/commonMain/kotlin/fr/androidmakers/domain/interactor/OpenXHashtagUseCase.kt index cbc6baee..27e47efb 100644 --- a/shared/domain/src/commonMain/kotlin/fr/androidmakers/domain/interactor/OpenXHashtagUseCase.kt +++ b/shared/domain/src/commonMain/kotlin/fr/androidmakers/domain/interactor/OpenXHashtagUseCase.kt @@ -1,14 +1,15 @@ package fr.androidmakers.domain.interactor +import fr.androidmakers.domain.PlatformContext import fr.androidmakers.domain.utils.Constants import fr.androidmakers.domain.utils.UrlOpener class OpenXHashtagUseCase( - private val urlOpener: UrlOpener + private val urlOpener: UrlOpener ) { - operator fun invoke() { - if (!urlOpener.openUrl(Constants.Urls.xHashtagApp)) { - urlOpener.openUrl(Constants.Urls.xHashtagWeb) + operator fun invoke(platformContext: PlatformContext) { + if (!urlOpener.openUrl(platformContext, Constants.Urls.xHashtagApp)) { + urlOpener.openUrl(platformContext, Constants.Urls.xHashtagWeb) } } } diff --git a/shared/domain/src/commonMain/kotlin/fr/androidmakers/domain/interactor/OpenYoutubeUseCase.kt b/shared/domain/src/commonMain/kotlin/fr/androidmakers/domain/interactor/OpenYoutubeUseCase.kt index 0f55d22c..ac6ff5c1 100644 --- a/shared/domain/src/commonMain/kotlin/fr/androidmakers/domain/interactor/OpenYoutubeUseCase.kt +++ b/shared/domain/src/commonMain/kotlin/fr/androidmakers/domain/interactor/OpenYoutubeUseCase.kt @@ -1,15 +1,16 @@ package fr.androidmakers.domain.interactor +import fr.androidmakers.domain.PlatformContext import fr.androidmakers.domain.utils.Constants import fr.androidmakers.domain.utils.UrlOpener class OpenYoutubeUseCase( - private val urlOpener: UrlOpener + private val urlOpener: UrlOpener ) { - operator fun invoke() { + operator fun invoke(platformContext: PlatformContext) { // Try to open the application first - if (!urlOpener.openUrl(Constants.Urls.youtubeApp)) { - urlOpener.openUrl(Constants.Urls.youtubeWeb) + if (!urlOpener.openUrl(platformContext, Constants.Urls.youtubeApp)) { + urlOpener.openUrl(platformContext, Constants.Urls.youtubeWeb) } } } diff --git a/shared/domain/src/commonMain/kotlin/fr/androidmakers/domain/interactor/ShareSessionUseCase.kt b/shared/domain/src/commonMain/kotlin/fr/androidmakers/domain/interactor/ShareSessionUseCase.kt index 6b4ad086..54a2becd 100644 --- a/shared/domain/src/commonMain/kotlin/fr/androidmakers/domain/interactor/ShareSessionUseCase.kt +++ b/shared/domain/src/commonMain/kotlin/fr/androidmakers/domain/interactor/ShareSessionUseCase.kt @@ -1,9 +1,15 @@ package fr.androidmakers.domain.interactor +import fr.androidmakers.domain.PlatformContext import fr.androidmakers.domain.model.Session import fr.androidmakers.domain.model.Speaker // TODO to be improved expect class ShareSessionUseCase { - operator fun invoke(session: Session, speakers: List, formattedDateAndRoom: String) + operator fun invoke( + platformContext: PlatformContext, + session: Session, + speakers: List, + formattedDateAndRoom: String + ) } diff --git a/shared/domain/src/commonMain/kotlin/fr/androidmakers/domain/utils/UrlOpener.kt b/shared/domain/src/commonMain/kotlin/fr/androidmakers/domain/utils/UrlOpener.kt index 0cb60d61..c294822b 100644 --- a/shared/domain/src/commonMain/kotlin/fr/androidmakers/domain/utils/UrlOpener.kt +++ b/shared/domain/src/commonMain/kotlin/fr/androidmakers/domain/utils/UrlOpener.kt @@ -1,5 +1,7 @@ package fr.androidmakers.domain.utils +import fr.androidmakers.domain.PlatformContext + expect class UrlOpener { - fun openUrl(url: String): Boolean + fun openUrl(platformContext: PlatformContext, url: String): Boolean } diff --git a/shared/domain/src/iosMain/kotlin/fr/androidmakers/domain/PlatformContext.ios.kt b/shared/domain/src/iosMain/kotlin/fr/androidmakers/domain/PlatformContext.ios.kt new file mode 100644 index 00000000..f379e3f9 --- /dev/null +++ b/shared/domain/src/iosMain/kotlin/fr/androidmakers/domain/PlatformContext.ios.kt @@ -0,0 +1,3 @@ +package fr.androidmakers.domain + +actual object PlatformContext diff --git a/shared/domain/src/iosMain/kotlin/fr/androidmakers/domain/interactor/OpenMapUseCase.ios.kt b/shared/domain/src/iosMain/kotlin/fr/androidmakers/domain/interactor/OpenMapUseCase.ios.kt index 2b43f90b..145e339c 100644 --- a/shared/domain/src/iosMain/kotlin/fr/androidmakers/domain/interactor/OpenMapUseCase.ios.kt +++ b/shared/domain/src/iosMain/kotlin/fr/androidmakers/domain/interactor/OpenMapUseCase.ios.kt @@ -1,5 +1,6 @@ package fr.androidmakers.domain.interactor +import fr.androidmakers.domain.PlatformContext import kotlinx.cinterop.ExperimentalForeignApi import kotlinx.cinterop.NativePtr import kotlinx.cinterop.cValuesOf @@ -17,7 +18,7 @@ import platform.MapKit.MKPlacemark actual class OpenMapUseCase { @OptIn(ExperimentalForeignApi::class) - actual operator fun invoke(coordinates: String, name: String) { + actual operator fun invoke(platformContext: PlatformContext, coordinates: String, name: String) { val coordinateArray = coordinates.split(",") if (coordinateArray.size == 2) { val latitude = coordinateArray[0].toDoubleOrNull() diff --git a/shared/domain/src/iosMain/kotlin/fr/androidmakers/domain/interactor/ShareSessionUseCase.ios.kt b/shared/domain/src/iosMain/kotlin/fr/androidmakers/domain/interactor/ShareSessionUseCase.ios.kt index 84f57c5e..f01b4efb 100644 --- a/shared/domain/src/iosMain/kotlin/fr/androidmakers/domain/interactor/ShareSessionUseCase.ios.kt +++ b/shared/domain/src/iosMain/kotlin/fr/androidmakers/domain/interactor/ShareSessionUseCase.ios.kt @@ -1,5 +1,6 @@ package fr.androidmakers.domain.interactor +import fr.androidmakers.domain.PlatformContext import fr.androidmakers.domain.model.Session import fr.androidmakers.domain.model.Speaker import platform.Foundation.NSString @@ -8,7 +9,12 @@ import platform.UIKit.UIActivityViewController import platform.UIKit.UIApplication actual class ShareSessionUseCase { - actual operator fun invoke(session: Session, speakers: List, formattedDateAndRoom: String) { + actual operator fun invoke( + platformContext: PlatformContext, + session: Session, + speakers: List, + formattedDateAndRoom: String + ) { val speakersString = speakers.joinToString(", ") { it.name ?: "" } val sessionInfos = if (speakers.isEmpty()) { diff --git a/shared/domain/src/iosMain/kotlin/fr/androidmakers/domain/utils/UrlOpener.ios.kt b/shared/domain/src/iosMain/kotlin/fr/androidmakers/domain/utils/UrlOpener.ios.kt index 97bcc1ab..289dd176 100644 --- a/shared/domain/src/iosMain/kotlin/fr/androidmakers/domain/utils/UrlOpener.ios.kt +++ b/shared/domain/src/iosMain/kotlin/fr/androidmakers/domain/utils/UrlOpener.ios.kt @@ -1,12 +1,13 @@ package fr.androidmakers.domain.utils +import fr.androidmakers.domain.PlatformContext import platform.Foundation.NSURL import platform.UIKit.UIApplication import platform.darwin.dispatch_async import platform.darwin.dispatch_get_main_queue actual class UrlOpener { - actual fun openUrl(url: String): Boolean { + actual fun openUrl(platformContext: PlatformContext, url: String): Boolean { val urlObj = NSURL(string = url) return if (UIApplication.sharedApplication.canOpenURL(urlObj)) { val application = UIApplication.sharedApplication @@ -22,4 +23,3 @@ actual class UrlOpener { } } } - diff --git a/shared/ui/src/androidMain/kotlin/com/androidmakers/ui/Context.android.kt b/shared/ui/src/androidMain/kotlin/com/androidmakers/ui/Context.android.kt deleted file mode 100644 index 203868a7..00000000 --- a/shared/ui/src/androidMain/kotlin/com/androidmakers/ui/Context.android.kt +++ /dev/null @@ -1,5 +0,0 @@ -package com.androidmakers.ui - -import android.content.Context - -actual typealias PlatformContext = Unit diff --git a/shared/ui/src/androidMain/kotlin/com/androidmakers/ui/MainLayout.android.kt b/shared/ui/src/androidMain/kotlin/com/androidmakers/ui/MainLayout.android.kt index 17939d74..2dda98d7 100644 --- a/shared/ui/src/androidMain/kotlin/com/androidmakers/ui/MainLayout.android.kt +++ b/shared/ui/src/androidMain/kotlin/com/androidmakers/ui/MainLayout.android.kt @@ -1,5 +1,11 @@ package com.androidmakers.ui +import androidx.compose.runtime.Composable +import androidx.compose.ui.platform.LocalContext +import fr.androidmakers.domain.PlatformContext import moe.tlaster.precompose.navigation.transition.NavTransition actual val defaultTransition: NavTransition = NavTransition() + +@Composable +actual fun getPlatformContext(): PlatformContext = PlatformContext(LocalContext.current) diff --git a/shared/ui/src/commonMain/kotlin/com/androidmakers/ui/MainLayout.kt b/shared/ui/src/commonMain/kotlin/com/androidmakers/ui/MainLayout.kt index e78b8aa4..2405e0e1 100644 --- a/shared/ui/src/commonMain/kotlin/com/androidmakers/ui/MainLayout.kt +++ b/shared/ui/src/commonMain/kotlin/com/androidmakers/ui/MainLayout.kt @@ -2,7 +2,6 @@ package com.androidmakers.ui import androidx.compose.runtime.Composable import androidx.compose.runtime.LaunchedEffect -import androidx.compose.runtime.staticCompositionLocalOf import com.androidmakers.ui.agenda.SessionDetailScreen import com.androidmakers.ui.agenda.SessionDetailViewModel import com.androidmakers.ui.common.SigninCallbacks @@ -10,6 +9,7 @@ import com.androidmakers.ui.common.navigation.AVALayout import com.androidmakers.ui.common.navigation.MainNavigationRoute import com.androidmakers.ui.speakers.SpeakerDetailsRoute import com.androidmakers.ui.speakers.SpeakerDetailsViewModel +import fr.androidmakers.domain.PlatformContext import fr.androidmakers.domain.model.SpeakerId import moe.tlaster.precompose.koin.koinViewModel import moe.tlaster.precompose.navigation.NavHost @@ -114,6 +114,5 @@ private fun MainNavHost( expect val defaultTransition: NavTransition -expect class PlatformContext - -val LocalPlatformContext = staticCompositionLocalOf { null } +@Composable +expect fun getPlatformContext(): PlatformContext diff --git a/shared/ui/src/commonMain/kotlin/com/androidmakers/ui/about/AboutScreen.kt b/shared/ui/src/commonMain/kotlin/com/androidmakers/ui/about/AboutScreen.kt index dc5ab1e8..6517607d 100644 --- a/shared/ui/src/commonMain/kotlin/com/androidmakers/ui/about/AboutScreen.kt +++ b/shared/ui/src/commonMain/kotlin/com/androidmakers/ui/about/AboutScreen.kt @@ -27,6 +27,7 @@ import androidx.compose.ui.Modifier import androidx.compose.ui.graphics.Color import androidx.compose.ui.text.style.TextAlign import androidx.compose.ui.unit.dp +import com.androidmakers.ui.getPlatformContext import dev.icerock.moko.resources.compose.painterResource import dev.icerock.moko.resources.compose.stringResource import fr.paug.androidmakers.ui.MR @@ -45,15 +46,17 @@ fun AboutScreen( .padding(16.dp), verticalArrangement = Arrangement.spacedBy(16.dp, Alignment.CenterVertically) ) { + val platformContext = getPlatformContext() + IntroCard( - onFaqClick = { viewModel.openFaq() }, - onCocClick = { viewModel.openCoc() } + onFaqClick = { viewModel.openFaq(platformContext) }, + onCocClick = { viewModel.openCoc(platformContext) } ) SocialCard( - { viewModel.openXHashtag() }, - { viewModel.openXAccount() }, - { viewModel.openYoutube() } + { viewModel.openXHashtag(platformContext) }, + { viewModel.openXAccount(platformContext) }, + { viewModel.openYoutube(platformContext) } ) Text( diff --git a/shared/ui/src/commonMain/kotlin/com/androidmakers/ui/agenda/AgendaPager.kt b/shared/ui/src/commonMain/kotlin/com/androidmakers/ui/agenda/AgendaPager.kt index b3f89d6c..06cc392d 100644 --- a/shared/ui/src/commonMain/kotlin/com/androidmakers/ui/agenda/AgendaPager.kt +++ b/shared/ui/src/commonMain/kotlin/com/androidmakers/ui/agenda/AgendaPager.kt @@ -14,12 +14,11 @@ import androidx.compose.runtime.collectAsState import androidx.compose.runtime.getValue import androidx.compose.runtime.rememberCoroutineScope import androidx.compose.ui.Modifier -import androidx.compose.ui.unit.sp import com.androidmakers.ui.common.EmptyLayout import com.androidmakers.ui.common.SessionFilter import com.androidmakers.ui.common.SwipeRefreshableLceLayout +import com.androidmakers.ui.getPlatformContext import com.androidmakers.ui.model.UISession -import fr.androidmakers.domain.interactor.ApplyForAppClinicUseCase import fr.androidmakers.domain.utils.formatShortTime import kotlinx.coroutines.launch import moe.tlaster.precompose.koin.koinViewModel @@ -79,10 +78,11 @@ fun AgendaPager( items.filter { favoriteSessions.contains(it.id) }.forEach { it.isFavorite = true } + val platformContext = getPlatformContext() AgendaColumn( sessionsPerStartTime = addSeparators(items), onSessionClicked = onSessionClicked, - onApplyForAppClinicClicked = viewModel::applyForAppClinic, + onApplyForAppClinicClicked = { viewModel.applyForAppClinic(platformContext) }, onSessionBookmarked = { uiSession, bookmarked -> viewModel.setSessionBookmark(uiSession, bookmarked) } diff --git a/shared/ui/src/commonMain/kotlin/com/androidmakers/ui/agenda/AgendaPagerViewModel.kt b/shared/ui/src/commonMain/kotlin/com/androidmakers/ui/agenda/AgendaPagerViewModel.kt index 3458a467..e0f1c83e 100644 --- a/shared/ui/src/commonMain/kotlin/com/androidmakers/ui/agenda/AgendaPagerViewModel.kt +++ b/shared/ui/src/commonMain/kotlin/com/androidmakers/ui/agenda/AgendaPagerViewModel.kt @@ -1,12 +1,13 @@ package com.androidmakers.ui.agenda import com.androidmakers.ui.common.LceViewModel +import com.androidmakers.ui.model.UISession +import fr.androidmakers.domain.PlatformContext +import fr.androidmakers.domain.interactor.ApplyForAppClinicUseCase import fr.androidmakers.domain.interactor.GetAgendaUseCase import fr.androidmakers.domain.interactor.GetFavoriteSessionsUseCase import fr.androidmakers.domain.interactor.SetSessionBookmarkUseCase import fr.androidmakers.domain.model.Agenda -import com.androidmakers.ui.model.UISession -import fr.androidmakers.domain.interactor.ApplyForAppClinicUseCase import kotlinx.coroutines.flow.Flow import kotlinx.coroutines.launch import moe.tlaster.precompose.viewmodel.viewModelScope @@ -31,7 +32,7 @@ class AgendaPagerViewModel( setSessionBookmarkUseCase(uiSession.id, bookmark) } - fun applyForAppClinic() { - applyForAppClinicUseCase() + fun applyForAppClinic(platformContext: PlatformContext) { + applyForAppClinicUseCase(platformContext) } } diff --git a/shared/ui/src/commonMain/kotlin/com/androidmakers/ui/agenda/SessionDetailLayout.kt b/shared/ui/src/commonMain/kotlin/com/androidmakers/ui/agenda/SessionDetailLayout.kt index 9143e477..8f1bc74d 100644 --- a/shared/ui/src/commonMain/kotlin/com/androidmakers/ui/agenda/SessionDetailLayout.kt +++ b/shared/ui/src/commonMain/kotlin/com/androidmakers/ui/agenda/SessionDetailLayout.kt @@ -50,10 +50,10 @@ import androidx.compose.ui.text.font.FontWeight import androidx.compose.ui.text.style.TextAlign import androidx.compose.ui.unit.dp import androidx.compose.ui.unit.sp -import com.androidmakers.ui.LocalPlatformContext import com.androidmakers.ui.common.EmojiUtils import com.androidmakers.ui.common.LoadingLayout import com.androidmakers.ui.common.separatorColor +import com.androidmakers.ui.getPlatformContext import com.androidmakers.ui.model.Lce import com.androidmakers.ui.model.SessionDetailState import com.androidmakers.ui.theme.AMColor @@ -65,7 +65,6 @@ import fr.androidmakers.domain.model.Speaker import fr.androidmakers.domain.model.isAppClinic import fr.paug.androidmakers.ui.MR import io.openfeedback.m3.OpenFeedback -import io.openfeedback.viewmodels.OpenFeedbackFirebaseConfig import kotlinx.datetime.Clock import org.jetbrains.compose.ui.tooling.preview.Preview @@ -78,6 +77,8 @@ fun SessionDetailScreen( val sessionDetailState by viewModel.sessionDetailState.collectAsState( initial = Lce.Loading ) + val platformContext = getPlatformContext() + SessionDetailLayout( sessionDetailState = sessionDetailState, onBackClick = onBackClick, @@ -85,13 +86,13 @@ fun SessionDetailScreen( viewModel.bookmark(it) }, onShareSession = { - viewModel.shareSession() + viewModel.shareSession(platformContext) }, onOpenLink = { - viewModel.openLink(it) + viewModel.openLink(platformContext, it) }, onApplyForAppClinic = { - viewModel.applyForAppClinic() + viewModel.applyForAppClinic(platformContext) } ) } diff --git a/shared/ui/src/commonMain/kotlin/com/androidmakers/ui/agenda/SessionDetailViewModel.kt b/shared/ui/src/commonMain/kotlin/com/androidmakers/ui/agenda/SessionDetailViewModel.kt index 73835ce8..e6dcb315 100644 --- a/shared/ui/src/commonMain/kotlin/com/androidmakers/ui/agenda/SessionDetailViewModel.kt +++ b/shared/ui/src/commonMain/kotlin/com/androidmakers/ui/agenda/SessionDetailViewModel.kt @@ -2,6 +2,7 @@ package com.androidmakers.ui.agenda import com.androidmakers.ui.model.Lce import com.androidmakers.ui.model.SessionDetailState +import fr.androidmakers.domain.PlatformContext import fr.androidmakers.domain.interactor.ApplyForAppClinicUseCase import fr.androidmakers.domain.interactor.OpenLinkUseCase import fr.androidmakers.domain.interactor.SetSessionBookmarkUseCase @@ -92,18 +93,17 @@ class SessionDetailViewModel( setSessionBookmarkUseCase(session.first().getOrThrow().id, bookmarked) } - fun shareSession() = viewModelScope.launch { + fun shareSession(platformContext: PlatformContext) = viewModelScope.launch { session.first().getOrNull()?.let { - shareSessionUseCase( - it, speakers.first(), formattedDateAndRoom.first()) + shareSessionUseCase(platformContext, it, speakers.first(), formattedDateAndRoom.first()) } } - fun openLink(socialsItem: SocialsItem) { - socialsItem.url?.let { openLinkUseCase(it) } + fun openLink(platformContext: PlatformContext, socialsItem: SocialsItem) { + socialsItem.url?.let { openLinkUseCase(platformContext, it) } } - fun applyForAppClinic() { - applyForAppClinicUseCase() + fun applyForAppClinic(platformContext: PlatformContext) { + applyForAppClinicUseCase(platformContext) } } diff --git a/shared/ui/src/commonMain/kotlin/com/androidmakers/ui/speakers/SpeakerDetailViewModel.kt b/shared/ui/src/commonMain/kotlin/com/androidmakers/ui/speakers/SpeakerDetailViewModel.kt index b8d60386..08790b66 100644 --- a/shared/ui/src/commonMain/kotlin/com/androidmakers/ui/speakers/SpeakerDetailViewModel.kt +++ b/shared/ui/src/commonMain/kotlin/com/androidmakers/ui/speakers/SpeakerDetailViewModel.kt @@ -1,6 +1,7 @@ package com.androidmakers.ui.speakers import com.androidmakers.ui.model.Lce +import fr.androidmakers.domain.PlatformContext import fr.androidmakers.domain.interactor.OpenLinkUseCase import fr.androidmakers.domain.model.SocialsItem import fr.androidmakers.domain.model.Speaker @@ -35,8 +36,8 @@ class SpeakerDetailsViewModel( initialValue = Lce.Loading ) - fun openSpeakerLink(socialsItem: SocialsItem) { - socialsItem.url?.let { openLinkUseCase(it) } + fun openSpeakerLink(platformContext: PlatformContext, socialsItem: SocialsItem) { + socialsItem.url?.let { openLinkUseCase(platformContext, it) } } } diff --git a/shared/ui/src/commonMain/kotlin/com/androidmakers/ui/speakers/SpeakerDetailsScreen.kt b/shared/ui/src/commonMain/kotlin/com/androidmakers/ui/speakers/SpeakerDetailsScreen.kt index 404e79e9..fab0b10c 100644 --- a/shared/ui/src/commonMain/kotlin/com/androidmakers/ui/speakers/SpeakerDetailsScreen.kt +++ b/shared/ui/src/commonMain/kotlin/com/androidmakers/ui/speakers/SpeakerDetailsScreen.kt @@ -27,6 +27,7 @@ import androidx.compose.ui.text.style.TextAlign import androidx.compose.ui.unit.dp import com.androidmakers.ui.common.LoadingLayout import com.androidmakers.ui.common.SocialButtons +import com.androidmakers.ui.getPlatformContext import com.androidmakers.ui.model.Lce import com.seiko.imageloader.rememberImagePainter import dev.icerock.moko.resources.compose.stringResource @@ -48,10 +49,11 @@ fun SpeakerDetailsRoute( } is Lce.Content -> { + val platformContext = getPlatformContext() SpeakerDetailsScreen( - uiState = state.content, - onSocialItemClick = { speakerDetailsViewModel.openSpeakerLink(it) }, - onBackClick = onBackClick + uiState = state.content, + onSocialItemClick = { speakerDetailsViewModel.openSpeakerLink(platformContext, it) }, + onBackClick = onBackClick ) } } diff --git a/shared/ui/src/commonMain/kotlin/com/androidmakers/ui/sponsors/SponsorScreen.kt b/shared/ui/src/commonMain/kotlin/com/androidmakers/ui/sponsors/SponsorScreen.kt index 6f8a0f7b..48830245 100644 --- a/shared/ui/src/commonMain/kotlin/com/androidmakers/ui/sponsors/SponsorScreen.kt +++ b/shared/ui/src/commonMain/kotlin/com/androidmakers/ui/sponsors/SponsorScreen.kt @@ -21,6 +21,7 @@ import androidx.compose.ui.Alignment import androidx.compose.ui.Modifier import androidx.compose.ui.text.style.TextAlign import androidx.compose.ui.unit.dp +import com.androidmakers.ui.getPlatformContext import com.androidmakers.ui.model.Lce import com.seiko.imageloader.rememberImagePainter import fr.androidmakers.domain.model.Partner @@ -31,10 +32,11 @@ import moe.tlaster.precompose.koin.koinViewModel fun SponsorsScreen() { val viewModel = koinViewModel(SponsorsViewModel::class) val sponsors by viewModel.values.collectAsState() + val platformContext = getPlatformContext() SponsorsView( partnerList = sponsors, - onSponsorClick = { viewModel.openPartnerLink(it) } + onSponsorClick = { viewModel.openPartnerLink(platformContext, it) } ) } diff --git a/shared/ui/src/commonMain/kotlin/com/androidmakers/ui/venue/VenuePager.kt b/shared/ui/src/commonMain/kotlin/com/androidmakers/ui/venue/VenuePager.kt index e33e6d8c..d8087eed 100644 --- a/shared/ui/src/commonMain/kotlin/com/androidmakers/ui/venue/VenuePager.kt +++ b/shared/ui/src/commonMain/kotlin/com/androidmakers/ui/venue/VenuePager.kt @@ -15,8 +15,8 @@ import androidx.compose.runtime.remember import androidx.compose.runtime.rememberCoroutineScope import androidx.compose.ui.Modifier import androidx.compose.ui.text.style.TextOverflow -import androidx.compose.ui.unit.sp import com.androidmakers.ui.common.LceLayout +import com.androidmakers.ui.getPlatformContext import com.androidmakers.ui.model.Lce import com.androidmakers.ui.model.UIVenue import com.androidmakers.ui.model.toLce @@ -94,10 +94,11 @@ fun VenuePager() { name = venue.name, coordinates = venue.coordinates, ) + val platformContext = getPlatformContext() VenueLayout( uiVenue = uiVenue, onClickOnMap = { - viewModel.openMapUseCase(uiVenue.coordinates ?: "", uiVenue.name) + viewModel.openMapUseCase(platformContext, uiVenue.coordinates.orEmpty(), uiVenue.name) } ) } diff --git a/shared/ui/src/iosMain/kotlin/com/androidmakers/ui/MainLayout.ios.kt b/shared/ui/src/iosMain/kotlin/com/androidmakers/ui/MainLayout.ios.kt index e2aea4b1..87b0570c 100644 --- a/shared/ui/src/iosMain/kotlin/com/androidmakers/ui/MainLayout.ios.kt +++ b/shared/ui/src/iosMain/kotlin/com/androidmakers/ui/MainLayout.ios.kt @@ -2,6 +2,8 @@ package com.androidmakers.ui import androidx.compose.animation.slideInHorizontally import androidx.compose.animation.slideOutHorizontally +import androidx.compose.runtime.Composable +import fr.androidmakers.domain.PlatformContext import moe.tlaster.precompose.navigation.transition.NavTransition actual val defaultTransition: NavTransition = NavTransition( @@ -11,3 +13,6 @@ actual val defaultTransition: NavTransition = NavTransition( resumeTransition = slideInHorizontally { -it / 4 }, exitTargetContentZIndex = 1f ) + +@Composable +actual fun getPlatformContext(): PlatformContext = PlatformContext diff --git a/shared/ui/src/iosMain/kotlin/com/androidmakers/ui/MainLayoutViewController.kt b/shared/ui/src/iosMain/kotlin/com/androidmakers/ui/MainLayoutViewController.kt index 32fc5dc6..aff2cba4 100644 --- a/shared/ui/src/iosMain/kotlin/com/androidmakers/ui/MainLayoutViewController.kt +++ b/shared/ui/src/iosMain/kotlin/com/androidmakers/ui/MainLayoutViewController.kt @@ -3,7 +3,6 @@ package com.androidmakers.ui import androidx.compose.ui.window.ComposeUIViewController import com.androidmakers.ui.common.SigninCallbacks import com.androidmakers.ui.theme.AndroidMakersTheme -import kotlinx.cinterop.ExperimentalForeignApi import platform.Foundation.NSBundle import platform.UIKit.UIViewController @@ -15,8 +14,8 @@ fun MainLayoutViewController(): UIViewController = AndroidMakersTheme { MainLayout( - versionName = versionName.toString(), - versionCode = versionCode.toString(), + versionName = versionName.toString(), + versionCode = versionCode.toString(), signinCallbacks = SigninCallbacks( signin = {}, signout = {} diff --git a/shared/ui/src/nativeMain/kotlin/com/androidmakers/ui/Context.native.kt b/shared/ui/src/nativeMain/kotlin/com/androidmakers/ui/Context.native.kt deleted file mode 100644 index 37079c5c..00000000 --- a/shared/ui/src/nativeMain/kotlin/com/androidmakers/ui/Context.native.kt +++ /dev/null @@ -1,3 +0,0 @@ -package com.androidmakers.ui - -actual class PlatformContext \ No newline at end of file