Skip to content

Commit c49e79c

Browse files
[refactor] commonMain 내 LocalContext.current 사용 코드 대체 및 컴파일 타임 빌드 문제 해결
1 parent 79f658c commit c49e79c

File tree

4 files changed

+38
-22
lines changed

4 files changed

+38
-22
lines changed

composeApp/build.gradle.kts

+11-2
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@ kotlin {
1717
androidTarget {
1818
compilerOptions {
1919
jvmTarget.set(JvmTarget.JVM_17)
20+
freeCompilerArgs.add("-Xexpect-actual-classes")
2021
}
2122
}
2223

@@ -25,7 +26,7 @@ kotlin {
2526
listOf(
2627
iosX64(),
2728
iosArm64(),
28-
iosSimulatorArm64()
29+
iosSimulatorArm64(),
2930
).forEach {
3031
it.binaries.framework {
3132
export(libs.androidx.lifecycle.viewmodel)
@@ -139,13 +140,21 @@ android {
139140
}
140141
}
141142

143+
compileOptions {
144+
sourceCompatibility = JavaVersion.VERSION_17
145+
targetCompatibility = JavaVersion.VERSION_17
146+
}
147+
142148
buildFeatures {
143149
buildConfig = true
144150
}
145151
}
146152

147153
dependencies {
148-
ksp(libs.androidx.room.compiler)
154+
add("kspAndroid", libs.androidx.room.compiler)
155+
add("kspIosX64", libs.androidx.room.compiler)
156+
add("kspIosArm64", libs.androidx.room.compiler)
157+
add("kspIosSimulatorArm64", libs.androidx.room.compiler)
149158
}
150159

151160
room {
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,23 @@
11
package com.nexters.bandalart
22

33
import android.app.Application
4-
import com.nexters.bandalart.di.initKoin
4+
import io.github.aakira.napier.DebugAntilog
5+
import io.github.aakira.napier.Napier
56
import org.koin.android.ext.koin.androidContext
7+
import org.koin.androix.startup.KoinStartup
8+
import org.koin.core.annotation.KoinExperimentalAPI
9+
import org.koin.dsl.koinConfiguration
610

7-
class BandalartApplication : Application() {
11+
@OptIn(KoinExperimentalAPI::class)
12+
class BandalartApplication : Application(), KoinStartup {
813
override fun onCreate() {
914
super.onCreate()
10-
initKoin {
11-
androidContext(this@BandalartApplication)
15+
if (BuildConfig.DEBUG) {
16+
Napier.base(DebugAntilog())
1217
}
1318
}
19+
20+
override fun onKoinStartup() = koinConfiguration {
21+
androidContext(this@BandalartApplication)
22+
}
1423
}

composeApp/src/commonMain/kotlin/com/nexters/bandalart/feature/complete/CompleteScreen.kt

+7-6
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,6 @@ import androidx.compose.runtime.rememberCoroutineScope
1717
import androidx.compose.ui.Alignment
1818
import androidx.compose.ui.Modifier
1919
import androidx.compose.ui.draw.clip
20-
import androidx.compose.ui.platform.LocalContext
2120
import androidx.compose.ui.text.font.FontWeight
2221
import androidx.compose.ui.text.style.TextAlign
2322
import androidx.compose.ui.unit.dp
@@ -28,8 +27,7 @@ import bandalart.composeapp.generated.resources.complete_save
2827
import bandalart.composeapp.generated.resources.complete_share
2928
import bandalart.composeapp.generated.resources.complete_title
3029
import bandalart.composeapp.generated.resources.save_bandalart_image
31-
import com.nexters.bandalart.core.common.extension.saveUriToGallery
32-
import com.nexters.bandalart.core.common.extension.shareImage
30+
import com.nexters.bandalart.core.common.ImageHandlerProvider
3331
import com.nexters.bandalart.core.common.utils.ObserveAsEvents
3432
import com.nexters.bandalart.core.designsystem.theme.Gray50
3533
import com.nexters.bandalart.core.designsystem.theme.Gray900
@@ -46,6 +44,7 @@ import kotlinx.coroutines.launch
4644
import multiplatform.network.cmptoast.showToast
4745
import org.jetbrains.compose.resources.getString
4846
import org.jetbrains.compose.resources.stringResource
47+
import org.koin.compose.koinInject
4948
import org.koin.compose.viewmodel.koinViewModel
5049

5150
private const val FINISH_LOTTIE_FILE = "files/finish.json"
@@ -57,8 +56,8 @@ internal fun CompleteRoute(
5756
viewModel: CompleteViewModel = koinViewModel(),
5857
) {
5958
val uiState by viewModel.uiState.collectAsStateWithLifecycle()
60-
val context = LocalContext.current
6159
val scope = rememberCoroutineScope()
60+
val imageHandlerProvider = koinInject<ImageHandlerProvider>()
6261

6362
ObserveAsEvents(flow = viewModel.uiEvent) { event ->
6463
when (event) {
@@ -67,14 +66,16 @@ internal fun CompleteRoute(
6766
}
6867

6968
is CompleteUiEvent.SaveBandalart -> {
70-
context.saveUriToGallery(event.imageUri)
69+
//TODO expect actual
70+
imageHandlerProvider.saveUriToGallery(event.imageUri)
7171
scope.launch {
7272
showToast(getString(Res.string.save_bandalart_image))
7373
}
7474
}
7575

7676
is CompleteUiEvent.ShareBandalart -> {
77-
context.shareImage(event.imageUri)
77+
// TODO expect actual
78+
imageHandlerProvider.shareImage(event.imageUri)
7879
}
7980
}
8081
}

composeApp/src/commonMain/kotlin/com/nexters/bandalart/feature/home/HomeScreen.kt

+7-10
Original file line numberDiff line numberDiff line change
@@ -22,18 +22,14 @@ import androidx.compose.ui.Alignment
2222
import androidx.compose.ui.Modifier
2323
import androidx.compose.ui.graphics.ImageBitmap
2424
import androidx.compose.ui.graphics.rememberGraphicsLayer
25-
import androidx.compose.ui.platform.LocalContext
2625
import androidx.compose.ui.unit.dp
2726
import androidx.lifecycle.compose.collectAsStateWithLifecycle
2827
import bandalart.composeapp.generated.resources.Res
2928
import bandalart.composeapp.generated.resources.app_version_info
30-
import bandalart.composeapp.generated.resources.home_default_emoji
3129
import bandalart.composeapp.generated.resources.save_bandalart_image
3230
import com.nexters.bandalart.core.common.AppVersionProvider
33-
import com.nexters.bandalart.core.common.extension.bitmapToFileUri
31+
import com.nexters.bandalart.core.common.ImageHandlerProvider
3432
import com.nexters.bandalart.core.common.extension.captureToGraphicsLayer
35-
import com.nexters.bandalart.core.common.extension.externalShareForBitmap
36-
import com.nexters.bandalart.core.common.extension.saveImageToGallery
3733
import com.nexters.bandalart.core.common.utils.ObserveAsEvents
3834
import com.nexters.bandalart.core.designsystem.theme.Gray100
3935
import com.nexters.bandalart.core.designsystem.theme.Gray50
@@ -66,10 +62,10 @@ internal fun HomeRoute(
6662
viewModel: HomeViewModel = koinViewModel(),
6763
) {
6864
val uiState by viewModel.uiState.collectAsStateWithLifecycle()
69-
val context = LocalContext.current
7065
val scope = rememberCoroutineScope()
7166
val snackbarHostState = remember { SnackbarHostState() }
7267
val appVersionProvider = koinInject<AppVersionProvider>()
68+
val imageHandlerProvider = koinInject<ImageHandlerProvider>()
7369
val appVersion = remember {
7470
appVersionProvider.getAppVersion()
7571
}
@@ -142,7 +138,7 @@ internal fun HomeRoute(
142138
navigateToComplete(
143139
event.id,
144140
event.title,
145-
event.profileEmoji.ifEmpty { context.getString(Res.string.home_default_emoji) },
141+
event.profileEmoji.ifEmpty { "default emoji" },
146142
event.bandalartChart,
147143
)
148144
}
@@ -164,18 +160,19 @@ internal fun HomeRoute(
164160
}
165161

166162
is HomeUiEvent.SaveBandalart -> {
167-
context.saveImageToGallery(event.bitmap)
163+
imageHandlerProvider.saveImageToGallery(event.bitmap)
168164
scope.launch {
169165
showToast(getString(Res.string.save_bandalart_image))
170166
}
171167
}
172168

173169
is HomeUiEvent.ShareBandalart -> {
174-
context.externalShareForBitmap(event.bitmap)
170+
// TODO expect actual
171+
imageHandlerProvider.externalShareForBitmap(event.bitmap)
175172
}
176173

177174
is HomeUiEvent.CaptureBandalart -> {
178-
viewModel.updateBandalartChartUrl(context.bitmapToFileUri(event.bitmap).toString())
175+
viewModel.updateBandalartChartUrl(imageHandlerProvider.bitmapToFileUri(event.bitmap).toString())
179176
}
180177

181178
is HomeUiEvent.ShowAppVersion -> {

0 commit comments

Comments
 (0)