Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions composeApp/build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -60,6 +60,7 @@ kotlin {
implementation(project(":shared:core:config"))
implementation(project(":shared:core:logging"))
implementation(project(":shared:core:serialization"))
implementation(project(":shared:core:startup"))

implementation(project(":shared:data:network"))
implementation(project(":shared:data:firstLaunch"))
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@ package com.kus.kustaurant

import android.app.Application
import com.kus.core.config.BuildKonfig
import com.kus.core.startup.AppInitializer
import com.kus.data.auth.di.androidDataAuthModule
import com.kus.data.community.di.androidDataCommunityModule
import com.kus.data.firstLaunch.di.androidFirstLaunchModule
Expand All @@ -13,21 +14,23 @@ import com.navercorp.nid.NidOAuth
import com.navercorp.nid.core.data.datastore.NidOAuthInitializingCallback
import di.androidTierMapPlatformModule
import org.koin.android.ext.koin.androidContext
import org.koin.mp.KoinPlatform

class KusApplication : Application() {

override fun onCreate() {
super.onCreate()
initLogger()
NaverMapSdk.getInstance(this).client =
NaverMapSdk.NaverCloudPlatformClient(BuildKonfig.NAVER_MAP_CLIENT_ID)

NidOAuth.initialize(
context = this,
clientId = BuildKonfig.NAVER_CLIENT_ID,
clientSecret = BuildKonfig.NAVER_CLIENT_SECRET,
clientName = getString(R.string.app_name),
callback = object : NidOAuthInitializingCallback {
override fun onSuccess() { }
override fun onSuccess() {}
override fun onFailure(e: Exception) {}
}
)
Expand All @@ -39,7 +42,10 @@ class KusApplication : Application() {
androidDataAuthModule,
androidTierMapPlatformModule,
androidFeatureCommunityModule,
androidDataCommunityModule)
androidDataCommunityModule
)
)

KoinPlatform.getKoin().get<AppInitializer>().initialize()
}
}
2 changes: 2 additions & 0 deletions composeApp/src/commonMain/kotlin/com/kus/kustaurant/App.kt
Original file line number Diff line number Diff line change
Expand Up @@ -102,6 +102,8 @@ fun SetNavigation(
SessionEvent.LoginRequired -> {
showRequireLoginPopup = true
}

else -> {}
}
}
}
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,7 @@
package com.kus.kustaurant.di

import com.kus.core.config.di.configModule
import com.kus.core.di.startupModule
import com.kus.data.auth.di.authDataModule
import com.kus.data.community.di.communityDataModule
import com.kus.data.draw.di.drawDataModule
Expand Down Expand Up @@ -41,13 +42,14 @@ import org.koin.dsl.KoinAppDeclaration
fun initKoin(
config: KoinAppDeclaration? = null,
additionalModules: List<Module> = emptyList(),
) : KoinApplication {
): KoinApplication {
return startKoin {
config?.invoke(this)

modules(
//core
configModule,
startupModule,

// domain
firstLaunchDomainModule,
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -32,7 +32,7 @@ import com.kus.feature.community.navigation.Community
import com.kus.feature.community.navigation.CommunityDetail
import com.kus.feature.community.navigation.CommunityWrite
import com.kus.feature.community.navigation.communityMainNavGraph
import com.kus.feature.detail.navigation.Detail
import com.kus.feature.detail.navigation.navigateToDetail
import com.kus.feature.draw.navigation.Draw
import com.kus.feature.draw.navigation.drawNavGraph
import com.kus.feature.home.navigation.Home
Expand All @@ -55,7 +55,6 @@ import com.kus.feature.tier.navigation.Tier
import com.kus.feature.tier.navigation.TierCategorySelect
import com.kus.feature.tier.navigation.tierMainNavGraph
import com.kus.feature.tier.ui.TierFilterState
import com.kus.feature.detail.navigation.navigateToDetail
import com.kus.shared.domain.model.tier.filter.Cuisine
import com.kus.feature.tier.TierKeys as TierResultKeys

Expand Down Expand Up @@ -151,43 +150,43 @@ fun MainScreen(
contentWindowInsets = WindowInsets.statusBars,
containerColor = KusTheme.colors.c_FFFFFF,
bottomBar = {
KusBottomBar(
modifier = Modifier.zIndex(2f),
selectedKey = selectedKey,
onNavigateToTab = { key -> mainNavController.navigateToTab(key) },
)
KusBottomBar(
modifier = Modifier.zIndex(2f),
selectedKey = selectedKey,
onNavigateToTab = { key -> mainNavController.navigateToTab(key) },
)
},
) { padding ->
NavHost(
navController = mainNavController,
startDestination = Home,
enterTransition = {
fadeIn(animationSpec = tween(durationMillis)) +
scaleIn(
initialScale = 0.98f,
animationSpec = tween(durationMillis)
)
scaleIn(
initialScale = 0.98f,
animationSpec = tween(durationMillis)
)
},
exitTransition = {
fadeOut(animationSpec = tween(durationMillis)) +
scaleOut(
targetScale = 0.98f,
animationSpec = tween(durationMillis)
)
scaleOut(
targetScale = 0.98f,
animationSpec = tween(durationMillis)
)
},
popEnterTransition = {
fadeIn(animationSpec = tween(durationMillis)) +
scaleIn(
initialScale = 0.98f,
animationSpec = tween(durationMillis)
)
scaleIn(
initialScale = 0.98f,
animationSpec = tween(durationMillis)
)
},
popExitTransition = {
fadeOut(animationSpec = tween(durationMillis)) +
scaleOut(
targetScale = 0.98f,
animationSpec = tween(durationMillis)
)
scaleOut(
targetScale = 0.98f,
animationSpec = tween(durationMillis)
)
},
modifier = Modifier
.fillMaxSize()
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -9,11 +9,13 @@ import androidx.compose.ui.window.ComposeUIViewController
import com.kus.appkit.di.iosAuthModule
import com.kus.appkit.di.iosCommunityModule
import com.kus.appkit.di.iosTierMapPlatformModule
import com.kus.core.startup.AppInitializer
import com.kus.data.auth.di.iosAuthLocalModule
import com.kus.data.firstLaunch.di.iosFirstLaunchModule
import com.kus.kustaurant.di.initKoin
import com.kus.logging.initLogger
import org.koin.core.KoinApplication
import org.koin.mp.KoinPlatform

private var koinStarted = false
private var koinApp: KoinApplication? = null
Expand All @@ -34,6 +36,8 @@ fun MainViewController() = ComposeUIViewController {
koinStarted = true
}

KoinPlatform.getKoin().get<AppInitializer>().initialize()

val koin = koinApp!!.koin
//resolveOrLog(koin, PostNaverLoginUseCase::class)

Expand Down
1 change: 1 addition & 0 deletions settings.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -46,6 +46,7 @@ include(
":shared:core:config",
":shared:core:serialization",
":shared:core:presentation",
":shared:core:startup",
)

include(
Expand Down
2 changes: 1 addition & 1 deletion shared/core/config/build.gradle.kts
Original file line number Diff line number Diff line change
Expand Up @@ -48,7 +48,7 @@ extensions.configure<BuildKonfigExtension>("buildkonfig") {
buildConfigField(
Type.STRING,
"NAVER_CLIENT_SECRET",
resolveKey("NAVER_CLIENT_SECRET", required = true) // 가능하면 서버로 빼는 게 원칙
resolveKey("NAVER_CLIENT_SECRET", required = true)
)

buildConfigField(
Expand Down
1 change: 1 addition & 0 deletions shared/core/startup/.gitignore
Original file line number Diff line number Diff line change
@@ -0,0 +1 @@
/build
70 changes: 70 additions & 0 deletions shared/core/startup/build.gradle.kts
Original file line number Diff line number Diff line change
@@ -0,0 +1,70 @@
plugins {
alias(libs.plugins.kotlinMultiplatform)
alias(libs.plugins.androidLibrary)
alias(libs.plugins.composeMultiplatform)
alias(libs.plugins.composeCompiler)
}

kotlin {
androidTarget()

val xcfName = "shared:core:startupKit"

iosX64 {
binaries.framework {
baseName = xcfName
}
}

iosArm64 {
binaries.framework {
baseName = xcfName
}
}

iosSimulatorArm64 {
binaries.framework {
baseName = xcfName
}
}


jvm("desktop")

sourceSets {
commonMain {
dependencies {
implementation(libs.kotlinx.coroutines.core)
implementation(libs.koin.compose)
implementation(project(":shared:domain:auth"))
implementation(project(":shared:data:network"))
}
}

commonTest {
dependencies {
implementation(libs.kotlin.test)
}
}

androidMain {
dependencies {
}
}

iosMain {
dependencies {
}
}
}
}

android {
namespace = "com.kus.core.startup"

compileSdk = libs.versions.android.compileSdk.get().toInt()

defaultConfig {
minSdk = libs.versions.android.minSdk.get().toInt()
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
package com.kus.core.startup

import androidx.test.platform.app.InstrumentationRegistry
import androidx.test.ext.junit.runners.AndroidJUnit4

import org.junit.Test
import org.junit.runner.RunWith

import org.junit.Assert.*

/**
* Instrumented test, which will execute on an Android device.
*
* See [testing documentation](http://d.android.com/tools/testing).
*/
@RunWith(AndroidJUnit4::class)
class ExampleInstrumentedTest {
@Test
fun useAppContext() {
// Context of the app under test.
val appContext = InstrumentationRegistry.getInstrumentation().targetContext
assertEquals("com.kus.core.startup.test", appContext.packageName)
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
package com.kus.core.startup

import kotlin.test.Test
import kotlin.test.assertEquals

/**
* Example local unit test, which will execute on the development machine (host).
*
* See [testing documentation](http://d.android.com/tools/testing).
*/
class ExampleUnitTest {
@Test
fun addition_isCorrect() {
assertEquals(4, 2 + 2)
}
}
4 changes: 4 additions & 0 deletions shared/core/startup/src/androidMain/AndroidManifest.xml
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android">

</manifest>
Original file line number Diff line number Diff line change
@@ -0,0 +1,13 @@
package com.kus.core.di

import com.kus.core.startup.AppInitializer
import org.koin.dsl.module

val startupModule = module {
single {
AppInitializer(
sessionBus = get(),
apiClientProvider = get(),
)
}
}
Original file line number Diff line number Diff line change
@@ -0,0 +1,29 @@
package com.kus.core.startup

import com.kus.data.network.ApiClientProvider
import com.kus.domain.auth.session.SessionEvent
import com.kus.domain.auth.session.SessionEventBus
import kotlinx.coroutines.CoroutineScope
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.SupervisorJob
import kotlinx.coroutines.launch

class AppInitializer(
private val sessionBus: SessionEventBus,
private val apiClientProvider: ApiClientProvider,
) {
private val scope = CoroutineScope(SupervisorJob() + Dispatchers.Main)

fun initialize() {
scope.launch {
sessionBus.events.collect { event ->
when (event) {
SessionEvent.LoggedOut -> {
apiClientProvider.reset()
}
else -> {}
}
}
}
}
}
Loading