diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 45be68e..df20406 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -7,6 +7,17 @@ android:icon="@mipmap/ic_launcher" android:label="@string/app_name" android:roundIcon="@mipmap/ic_launcher_round" - android:supportsRtl="true"> + android:supportsRtl="true" + android:theme="@style/Theme.Twix"> + + + + + + + + diff --git a/app/src/main/java/com/yapp/twix/TwixApplication.kt b/app/src/main/java/com/yapp/twix/TwixApplication.kt index 97c3dc8..2941b86 100644 --- a/app/src/main/java/com/yapp/twix/TwixApplication.kt +++ b/app/src/main/java/com/yapp/twix/TwixApplication.kt @@ -1,16 +1,14 @@ package com.yapp.twix import android.app.Application -import org.koin.android.ext.koin.androidContext -import org.koin.core.context.startKoin +import com.yapp.twix.di.initKoin class TwixApplication : Application() { override fun onCreate() { super.onCreate() - startKoin { - androidContext(this@TwixApplication) - modules() - } + initKoin( + context = this + ) } } diff --git a/app/src/main/java/com/yapp/twix/di/FeatureModules.kt b/app/src/main/java/com/yapp/twix/di/FeatureModules.kt new file mode 100644 index 0000000..2e00192 --- /dev/null +++ b/app/src/main/java/com/yapp/twix/di/FeatureModules.kt @@ -0,0 +1,8 @@ +package com.yapp.twix.di + +import com.twix.login.di.loginModule +import org.koin.core.module.Module + +val featureModules: List = listOf( + loginModule +) \ No newline at end of file diff --git a/app/src/main/java/com/yapp/twix/di/InitKoin.kt b/app/src/main/java/com/yapp/twix/di/InitKoin.kt new file mode 100644 index 0000000..b5b60a1 --- /dev/null +++ b/app/src/main/java/com/yapp/twix/di/InitKoin.kt @@ -0,0 +1,22 @@ +package com.yapp.twix.di + +import android.content.Context +import org.koin.android.ext.koin.androidContext +import org.koin.core.context.startKoin +import org.koin.core.module.Module + +fun initKoin( + context: Context? = null, + extraModules: List = emptyList() +) { + startKoin { + context?.let { androidContext(it) } + + modules( + buildList { + addAll(extraModules) + addAll(featureModules) + } + ) + } +} \ No newline at end of file diff --git a/app/src/main/java/com/yapp/twix/main/MainActivity.kt b/app/src/main/java/com/yapp/twix/main/MainActivity.kt new file mode 100644 index 0000000..5a809ad --- /dev/null +++ b/app/src/main/java/com/yapp/twix/main/MainActivity.kt @@ -0,0 +1,27 @@ +package com.yapp.twix.main + +import android.os.Bundle +import androidx.activity.ComponentActivity +import androidx.activity.compose.setContent +import androidx.compose.foundation.layout.Box +import androidx.compose.foundation.layout.fillMaxSize +import androidx.compose.foundation.layout.safeContentPadding +import androidx.compose.ui.Modifier +import com.twix.navigation.AppNavHost + +class MainActivity: ComponentActivity() { + override fun onCreate(savedInstanceState: Bundle?) { + super.onCreate(savedInstanceState) + + setContent { + // TODO: 디자인 시스템이 결정되면 테마 구현 및 적용 + Box( + modifier = Modifier + .safeContentPadding() + .fillMaxSize() + ) { + AppNavHost() + } + } + } +} \ No newline at end of file diff --git a/build-logic/convention/src/main/kotlin/com/twix/convention/AndroidApplicationConventionPlugin.kt b/build-logic/convention/src/main/kotlin/com/twix/convention/AndroidApplicationConventionPlugin.kt index b130889..11f61cb 100644 --- a/build-logic/convention/src/main/kotlin/com/twix/convention/AndroidApplicationConventionPlugin.kt +++ b/build-logic/convention/src/main/kotlin/com/twix/convention/AndroidApplicationConventionPlugin.kt @@ -6,14 +6,21 @@ import com.twix.convention.extension.configureAndroid import com.twix.convention.extension.implementation import com.twix.convention.extension.library import com.twix.convention.extension.libs +import com.twix.convention.extension.version +import org.gradle.kotlin.dsl.apply import org.gradle.kotlin.dsl.configure import org.gradle.kotlin.dsl.dependencies class AndroidApplicationConventionPlugin : BuildLogicConventionPlugin({ applyPlugins("com.android.application", "org.jetbrains.kotlin.android") + apply() extensions.configure { configureAndroid(this) + + defaultConfig { + targetSdk = libs.version("targetSdk").requiredVersion.toInt() + } } dependencies { diff --git a/feature/login/src/main/AndroidManifest.xml b/feature/login/src/main/AndroidManifest.xml deleted file mode 100644 index 9d89216..0000000 --- a/feature/login/src/main/AndroidManifest.xml +++ /dev/null @@ -1,12 +0,0 @@ - - - - - - - - - - - diff --git a/feature/login/src/main/java/com/twix/login/LoginActivity.kt b/feature/login/src/main/java/com/twix/login/LoginActivity.kt deleted file mode 100644 index 18a386f..0000000 --- a/feature/login/src/main/java/com/twix/login/LoginActivity.kt +++ /dev/null @@ -1,10 +0,0 @@ -package com.twix.login - -import android.os.Bundle -import androidx.activity.ComponentActivity - -class LoginActivity : ComponentActivity() { - override fun onCreate(savedInstanceState: Bundle?) { - super.onCreate(savedInstanceState) - } -} diff --git a/feature/login/src/main/java/com/twix/login/LoginScreen.kt b/feature/login/src/main/java/com/twix/login/LoginScreen.kt new file mode 100644 index 0000000..17c1341 --- /dev/null +++ b/feature/login/src/main/java/com/twix/login/LoginScreen.kt @@ -0,0 +1,23 @@ +package com.twix.login + +import androidx.compose.foundation.layout.Box +import androidx.compose.foundation.layout.fillMaxSize +import androidx.compose.material3.Text +import androidx.compose.runtime.Composable +import androidx.compose.ui.Alignment +import androidx.compose.ui.Modifier + +@Composable +fun LoginScreen() { + LoginContent() +} + +@Composable +private fun LoginContent() { + Box( + modifier = Modifier.fillMaxSize(), + contentAlignment = Alignment.Center + ) { + Text("임시 화면입니다.") + } +} \ No newline at end of file diff --git a/feature/login/src/main/java/com/twix/login/di/LoginModule.kt b/feature/login/src/main/java/com/twix/login/di/LoginModule.kt new file mode 100644 index 0000000..dd48cf0 --- /dev/null +++ b/feature/login/src/main/java/com/twix/login/di/LoginModule.kt @@ -0,0 +1,11 @@ +package com.twix.login.di + +import com.twix.login.navigation.LoginNavGraph +import com.twix.navigation.NavRoutes +import com.twix.navigation.base.NavGraphContributor +import org.koin.core.qualifier.named +import org.koin.dsl.module + +val loginModule = module { + single(named(NavRoutes.LoginGraph.route)) { LoginNavGraph } +} \ No newline at end of file diff --git a/feature/login/src/main/java/com/twix/login/navigation/LoginNavGraph.kt b/feature/login/src/main/java/com/twix/login/navigation/LoginNavGraph.kt new file mode 100644 index 0000000..70f363e --- /dev/null +++ b/feature/login/src/main/java/com/twix/login/navigation/LoginNavGraph.kt @@ -0,0 +1,27 @@ +package com.twix.login.navigation + +import androidx.navigation.NavGraphBuilder +import androidx.navigation.NavHostController +import androidx.navigation.compose.composable +import androidx.navigation.navigation +import com.twix.login.LoginScreen +import com.twix.navigation.NavRoutes +import com.twix.navigation.base.NavGraphContributor + +object LoginNavGraph: NavGraphContributor { + override val graphRoute: NavRoutes + get() = NavRoutes.LoginGraph + override val startDestination: String + get() = NavRoutes.Login.route + + override fun NavGraphBuilder.registerGraph(navController: NavHostController) { + navigation( + route = graphRoute.route, + startDestination = startDestination + ) { + composable(NavRoutes.Login.route) { + LoginScreen() + } + } + } +} \ No newline at end of file