diff --git a/.github/pull_request_template.md b/.github/pull_request_template.md index fee3dd7..d2eade8 100644 --- a/.github/pull_request_template.md +++ b/.github/pull_request_template.md @@ -2,6 +2,12 @@ > 해당 pr에 대한 내용을 요약해주세요 +### #️⃣ 연관된 이슈 + +closes #(issue_num) + +
+ ## ✅ 변경 사항 > 이번 PR에서 변경된 내용을 간략히 정리해주세요. diff --git a/.gitignore b/.gitignore index e5cbb64..aa724b7 100644 --- a/.gitignore +++ b/.gitignore @@ -1,34 +1,15 @@ -# Gradle files -.gradle/ -build/ - -# Local configuration file (sdk path, etc) -local.properties - -# Log/OS Files -*.log - -# Android Studio generated files and folders -captures/ -.externalNativeBuild/ -.cxx/ -*.aab -*.apk -output-metadata.json - -# IntelliJ *.iml -.idea/ -misc.xml -deploymentTargetDropDown.xml -render.experimental.xml - -# Keystore files -*.jks -*.keystore - -# Google Services (e.g. APIs or Firebase) -google-services.json - -# Android Profiling -*.hprof +.gradle +/local.properties +/.idea/caches +/.idea/libraries +/.idea/modules.xml +/.idea/workspace.xml +/.idea/navEditor.xml +/.idea/assetWizardSettings.xml +.DS_Store +/build +/captures +.externalNativeBuild +.cxx +local.properties diff --git a/.idea/.gitignore b/.idea/.gitignore new file mode 100644 index 0000000..26d3352 --- /dev/null +++ b/.idea/.gitignore @@ -0,0 +1,3 @@ +# Default ignored files +/shelf/ +/workspace.xml diff --git a/.idea/AndroidProjectSystem.xml b/.idea/AndroidProjectSystem.xml new file mode 100644 index 0000000..4a53bee --- /dev/null +++ b/.idea/AndroidProjectSystem.xml @@ -0,0 +1,6 @@ + + + + + \ No newline at end of file diff --git a/.idea/compiler.xml b/.idea/compiler.xml new file mode 100644 index 0000000..b86273d --- /dev/null +++ b/.idea/compiler.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/.idea/deploymentTargetSelector.xml b/.idea/deploymentTargetSelector.xml new file mode 100644 index 0000000..b268ef3 --- /dev/null +++ b/.idea/deploymentTargetSelector.xml @@ -0,0 +1,10 @@ + + + + + + + + + \ No newline at end of file diff --git a/.idea/deviceManager.xml b/.idea/deviceManager.xml new file mode 100644 index 0000000..91f9558 --- /dev/null +++ b/.idea/deviceManager.xml @@ -0,0 +1,13 @@ + + + + + + \ No newline at end of file diff --git a/.idea/gradle.xml b/.idea/gradle.xml new file mode 100644 index 0000000..02c4aa5 --- /dev/null +++ b/.idea/gradle.xml @@ -0,0 +1,18 @@ + + + + + + + \ No newline at end of file diff --git a/.idea/misc.xml b/.idea/misc.xml new file mode 100644 index 0000000..b2c751a --- /dev/null +++ b/.idea/misc.xml @@ -0,0 +1,9 @@ + + + + + + + + \ No newline at end of file diff --git a/.idea/runConfigurations.xml b/.idea/runConfigurations.xml new file mode 100644 index 0000000..16660f1 --- /dev/null +++ b/.idea/runConfigurations.xml @@ -0,0 +1,17 @@ + + + + + + \ No newline at end of file diff --git a/.idea/vcs.xml b/.idea/vcs.xml new file mode 100644 index 0000000..52260b5 --- /dev/null +++ b/.idea/vcs.xml @@ -0,0 +1,7 @@ + + + + + + + \ No newline at end of file diff --git a/app/.gitignore b/app/.gitignore new file mode 100644 index 0000000..42afabf --- /dev/null +++ b/app/.gitignore @@ -0,0 +1 @@ +/build \ No newline at end of file diff --git a/app/build.gradle.kts b/app/build.gradle.kts new file mode 100644 index 0000000..e3f74d0 --- /dev/null +++ b/app/build.gradle.kts @@ -0,0 +1,65 @@ +plugins { + alias(libs.plugins.android.application) + alias(libs.plugins.kotlin.compose) + id("org.jetbrains.kotlin.plugin.serialization") +} + +android { + namespace = "com.example.composeapplication" + compileSdk { + version = release(36) { + minorApiLevel = 1 + } + } + + defaultConfig { + applicationId = "com.example.composeapplication" + minSdk = 24 + targetSdk = 36 + versionCode = 1 + versionName = "1.0" + + testInstrumentationRunner = "androidx.test.runner.AndroidJUnitRunner" + } + + buildTypes { + release { + isMinifyEnabled = false + proguardFiles( + getDefaultProguardFile("proguard-android-optimize.txt"), + "proguard-rules.pro" + ) + } + } + compileOptions { + sourceCompatibility = JavaVersion.VERSION_11 + targetCompatibility = JavaVersion.VERSION_11 + } + buildFeatures { + compose = true + } +} + +dependencies { + implementation(libs.androidx.core.ktx) + implementation(libs.androidx.lifecycle.runtime.ktx) + implementation(libs.androidx.activity.compose) + implementation(platform(libs.androidx.compose.bom)) + implementation(libs.androidx.compose.ui) + implementation(libs.androidx.compose.ui.graphics) + implementation(libs.androidx.compose.ui.tooling.preview) + implementation(libs.androidx.compose.material3) + testImplementation(libs.junit) + androidTestImplementation(libs.androidx.junit) + androidTestImplementation(libs.androidx.espresso.core) + androidTestImplementation(platform(libs.androidx.compose.bom)) + androidTestImplementation(libs.androidx.compose.ui.test.junit4) + debugImplementation(libs.androidx.compose.ui.tooling) + debugImplementation(libs.androidx.compose.ui.test.manifest) + + // ⭐️ Jetpack Compose Navigation (최신 2.8.0+ 버전 권장) + implementation("androidx.navigation:navigation-compose:2.8.0") + + // ⭐️ Kotlinx Serialization Json (데이터 직렬화용) + implementation("org.jetbrains.kotlinx:kotlinx-serialization-json:1.7.0") +} \ No newline at end of file diff --git a/app/proguard-rules.pro b/app/proguard-rules.pro new file mode 100644 index 0000000..481bb43 --- /dev/null +++ b/app/proguard-rules.pro @@ -0,0 +1,21 @@ +# Add project specific ProGuard rules here. +# You can control the set of applied configuration files using the +# proguardFiles setting in build.gradle. +# +# For more details, see +# http://developer.android.com/guide/developing/tools/proguard.html + +# If your project uses WebView with JS, uncomment the following +# and specify the fully qualified class name to the JavaScript interface +# class: +#-keepclassmembers class fqcn.of.javascript.interface.for.webview { +# public *; +#} + +# Uncomment this to preserve the line number information for +# debugging stack traces. +#-keepattributes SourceFile,LineNumberTable + +# If you keep the line number information, uncomment this to +# hide the original source file name. +#-renamesourcefileattribute SourceFile \ No newline at end of file diff --git a/app/src/androidTest/java/com/example/composeapplication/ExampleInstrumentedTest.kt b/app/src/androidTest/java/com/example/composeapplication/ExampleInstrumentedTest.kt new file mode 100644 index 0000000..cec08f3 --- /dev/null +++ b/app/src/androidTest/java/com/example/composeapplication/ExampleInstrumentedTest.kt @@ -0,0 +1,24 @@ +package com.example.composeapplication + +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.example.composeapplication", appContext.packageName) + } +} \ No newline at end of file diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml new file mode 100644 index 0000000..947eeda --- /dev/null +++ b/app/src/main/AndroidManifest.xml @@ -0,0 +1,27 @@ + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/java/com/example/composeapplication/MainActivity.kt b/app/src/main/java/com/example/composeapplication/MainActivity.kt new file mode 100644 index 0000000..80d5a91 --- /dev/null +++ b/app/src/main/java/com/example/composeapplication/MainActivity.kt @@ -0,0 +1,16 @@ +package com.example.composeapplication + +import android.os.Bundle +import androidx.activity.ComponentActivity +import androidx.activity.compose.setContent +import com.example.composeapplication.ui.screens.MainScreen + +class MainActivity : ComponentActivity() { + override fun onCreate(savedInstanceState: Bundle?) { + super.onCreate(savedInstanceState) + setContent { + // 프로젝트 테마가 있다면 감싸주셔도 좋습니다. (예: ComposeApplicationTheme) + MainScreen() + } + } +} \ No newline at end of file diff --git a/app/src/main/java/com/example/composeapplication/data/AppDestination.kt b/app/src/main/java/com/example/composeapplication/data/AppDestination.kt new file mode 100644 index 0000000..a5fe9c7 --- /dev/null +++ b/app/src/main/java/com/example/composeapplication/data/AppDestination.kt @@ -0,0 +1,42 @@ +package com.example.composeapplication.data + +import androidx.annotation.DrawableRes +import com.example.composeapplication.R +import kotlinx.serialization.Serializable + +@Serializable +sealed interface AppDestination { + val title: String + // TODO: 프로젝트에 맞는 아이콘 R.drawable ID를 넣으세요! + val iconId: Int + + @Serializable + data object Home : AppDestination { + override val title = "홈" + override val iconId = R.drawable.ic_home + } + + @Serializable + data object Shop : AppDestination { + override val title = "구매하기" + override val iconId = R.drawable.ic_shop + } + + @Serializable + data object Wishlist : AppDestination { + override val title = "위시리스트" + override val iconId = R.drawable.ic_wishlist + } + + @Serializable + data object Cart : AppDestination { + override val title = "장바구니" + override val iconId = R.drawable.ic_cart + } + + @Serializable + data object Profile : AppDestination { + override val title = "프로필" + override val iconId = R.drawable.ic_profile + } +} \ No newline at end of file diff --git a/app/src/main/java/com/example/composeapplication/ui/screens/CartScreen.kt b/app/src/main/java/com/example/composeapplication/ui/screens/CartScreen.kt new file mode 100644 index 0000000..f8fd432 --- /dev/null +++ b/app/src/main/java/com/example/composeapplication/ui/screens/CartScreen.kt @@ -0,0 +1,75 @@ +package com.example.composeapplication.ui.screens + +import androidx.compose.foundation.Image +import androidx.compose.foundation.layout.* +import androidx.compose.material3.Button +import androidx.compose.material3.ButtonDefaults +import androidx.compose.material3.MaterialTheme +import androidx.compose.material3.Text +import androidx.compose.runtime.Composable +import androidx.compose.ui.Alignment +import androidx.compose.ui.Modifier +import androidx.compose.ui.graphics.Color +import androidx.compose.ui.res.painterResource +import androidx.compose.ui.text.font.FontWeight +import androidx.compose.ui.unit.dp +import androidx.compose.ui.unit.sp +import com.example.composeapplication.R + +@Composable +fun CartScreen( + // ⭐️ 장바구니에서 '주문하기'를 눌렀을 때 실행할 행동을 부모에게 위임합니다. + onNavigateToShop: () -> Unit +) { + Box( + modifier = Modifier + .fillMaxSize() + .padding(20.dp) + ) { + // 화면 중앙: 장바구니가 비어 있다는 안내 문구 + Column( + modifier = Modifier.align(Alignment.Center), + horizontalAlignment = Alignment.CenterHorizontally + ) { + Image( + painter = painterResource(id = R.drawable.bagcircle), + contentDescription = "Empty Cart", + modifier = Modifier + .size(100.dp) // 너비와 높이를 모두 100dp로 고정 + ) + + Spacer(modifier = Modifier.height(20.dp)) + + Text( + text = "장바구니가 비어 있습니다", + fontSize = 20.sp, + fontWeight = FontWeight.Bold + ) + Spacer(modifier = Modifier.height(8.dp)) + Text( + text = "제품을 추가하면 여기에 표시됩니다.", + fontSize = 14.sp, + color = MaterialTheme.colorScheme.onSurfaceVariant + ) + } + + // 화면 최하단: 주문하기 버튼 (나이키 스타일로 검은색 배치) + Button( + onClick = { onNavigateToShop() }, // ⭐️ 클릭 시 부모에게 인터폰을 울림! + modifier = Modifier + .fillMaxWidth() + .height(54.dp) + .align(Alignment.BottomCenter), + colors = ButtonDefaults.buttonColors( + containerColor = Color.Black, // 나이키 시그니처 블랙 + contentColor = Color.White + ) + ) { + Text( + text = "주문하기", + fontSize = 16.sp, + fontWeight = FontWeight.Bold + ) + } + } +} \ No newline at end of file diff --git a/app/src/main/java/com/example/composeapplication/ui/screens/HomeScreen.kt b/app/src/main/java/com/example/composeapplication/ui/screens/HomeScreen.kt new file mode 100644 index 0000000..00bd00a --- /dev/null +++ b/app/src/main/java/com/example/composeapplication/ui/screens/HomeScreen.kt @@ -0,0 +1,46 @@ +package com.example.composeapplication.ui.screens + +import androidx.compose.foundation.Image +import androidx.compose.foundation.layout.* +import androidx.compose.foundation.shape.RoundedCornerShape +import androidx.compose.material3.Text +import androidx.compose.runtime.Composable +import androidx.compose.ui.Modifier +import androidx.compose.ui.draw.clip +import androidx.compose.ui.layout.ContentScale +import androidx.compose.ui.res.painterResource +import androidx.compose.ui.text.font.FontWeight +import androidx.compose.ui.unit.dp +import androidx.compose.ui.unit.sp +import com.example.composeapplication.R + +@Composable +fun HomeScreen() { + Column( + modifier = Modifier + .fillMaxSize() + .padding(20.dp) + ) { + Text( + text = "Discover", + fontSize = 30.sp, + fontWeight = FontWeight.Bold + ) + Text( + text = "9월 4일 목요일", + fontSize = 14.sp, + modifier = Modifier.padding(top = 4.dp) + ) + + Spacer(modifier = Modifier.height(24.dp)) + + // 피그마의 나이키 메인 이미지 + Image( + painter = painterResource(id = R.drawable.nike_discover_img), // 본인의 이미지 파일명 + contentDescription = "Main Image", + modifier = Modifier + .fillMaxWidth() + .height(450.dp) + ) + } +} \ No newline at end of file diff --git a/app/src/main/java/com/example/composeapplication/ui/screens/MainScreen.kt b/app/src/main/java/com/example/composeapplication/ui/screens/MainScreen.kt new file mode 100644 index 0000000..ddb45a5 --- /dev/null +++ b/app/src/main/java/com/example/composeapplication/ui/screens/MainScreen.kt @@ -0,0 +1,93 @@ +package com.example.composeapplication.ui.screens + +import androidx.compose.foundation.layout.padding +import androidx.compose.material3.* +import androidx.compose.runtime.Composable +import androidx.compose.runtime.getValue +import androidx.compose.ui.Modifier +import androidx.compose.ui.res.painterResource +import androidx.navigation.NavDestination.Companion.hasRoute +import androidx.navigation.compose.NavHost +import androidx.navigation.compose.composable +import androidx.navigation.compose.currentBackStackEntryAsState +import androidx.navigation.compose.rememberNavController +import com.example.composeapplication.data.AppDestination + +@Composable +fun MainScreen() { + // 1. 내비게이션 조종사(navController) 임명 + val navController = rememberNavController() + + // 2. 현재 백스택 상태를 실시간으로 관찰하여 어떤 탭이 활성화되었는지 파악 + val navBackStackEntry by navController.currentBackStackEntryAsState() + val currentDestination = navBackStackEntry?.destination + + // 하단 탭 바에 나열할 5개 화면 리스트 + val items = listOf( + AppDestination.Home, + AppDestination.Shop, + AppDestination.Wishlist, + AppDestination.Cart, + AppDestination.Profile + ) + + Scaffold( + bottomBar = { + // [ ] 메인 Activity에 BottomBar를 추가하여 하단 탭 내비게이션 구현하기 완료 + NavigationBar { + items.forEach { screen -> + // 현재 띄워진 화면의 클래스 타입이 이 버튼의 클래스 타입과 일치하는지 체크 (Type-Safe) + val isSelected = currentDestination?.hasRoute(screen::class) == true + + NavigationBarItem( + selected = isSelected, + onClick = { + // 탭 클릭 시 해당 화면으로 이동 + navController.navigate(screen) { + // 뒤로가기를 누르면 무조건 startDestination(홈)으로 오도록 스택 정리 + popUpTo(navController.graph.startDestinationId) { saveState = true } + launchSingleTop = true // 같은 화면 연속 중복 생성 방지 + restoreState = true // 이전 탭 상태 복구 + } + }, + icon = { + Icon( + painter = painterResource(id = screen.iconId), + contentDescription = screen.title + ) + }, + label = { Text(screen.title) } + ) + } + } + } + ) { innerPadding -> + // innerPadding을 NavHost에 반드시 꽂아야 하단바가 화면 레이아웃을 가리지 않습니다. + NavHost( + navController = navController, + startDestination = AppDestination.Home, + modifier = Modifier.padding(innerPadding) + ) { + // [ ] 각 탭에 해당하는 Screen을 BottomBar와 연결하기 완료 + composable { HomeScreen() } + composable { ShopScreen() } + composable { WishlistScreen() } + + // 장바구니 -> 구매하기 미션 연동 부분 + composable { + CartScreen( + onNavigateToShop = { + // [ ] '장바구니' 화면의 '주문하기' 버튼을 클릭하면, '구매하기' 탭으로 전환되도록 구현하기 완료 + navController.navigate(AppDestination.Shop) { + popUpTo(navController.graph.startDestinationId) { saveState = true } + launchSingleTop = true + restoreState = true + } + } + ) + } + + composable { ProfileScreen() } + } + } +} \ No newline at end of file diff --git a/app/src/main/java/com/example/composeapplication/ui/screens/ProfileScreen.kt b/app/src/main/java/com/example/composeapplication/ui/screens/ProfileScreen.kt new file mode 100644 index 0000000..2936c79 --- /dev/null +++ b/app/src/main/java/com/example/composeapplication/ui/screens/ProfileScreen.kt @@ -0,0 +1,8 @@ +package com.example.composeapplication.ui.screens + +import androidx.compose.runtime.Composable + +@Composable +fun ProfileScreen() { + +} \ No newline at end of file diff --git a/app/src/main/java/com/example/composeapplication/ui/screens/ShopScreen.kt b/app/src/main/java/com/example/composeapplication/ui/screens/ShopScreen.kt new file mode 100644 index 0000000..678fe11 --- /dev/null +++ b/app/src/main/java/com/example/composeapplication/ui/screens/ShopScreen.kt @@ -0,0 +1,50 @@ +package com.example.composeapplication.ui.screens + +import androidx.compose.foundation.layout.* +import androidx.compose.material3.Text +import androidx.compose.runtime.Composable +import androidx.compose.ui.Alignment +import androidx.compose.ui.Modifier +import androidx.compose.ui.text.font.FontWeight +import androidx.compose.ui.unit.dp +import androidx.compose.ui.unit.sp + +@Composable +fun ShopScreen() { + Column( + modifier = Modifier + .fillMaxSize() + .padding(20.dp) + ) { + Text( + text = "구매하기", + fontSize = 30.sp, + fontWeight = FontWeight.Bold + ) + + Spacer(modifier = Modifier.height(24.dp)) + + // ⭐️ 핵심 수정 부분: 간격 규칙과 너비 가이드를 명확히 지정합니다. + Row( + modifier = Modifier.fillMaxWidth(), + horizontalArrangement = Arrangement.spacedBy(16.dp), // 글자 사이 여백 16dp + verticalAlignment = Alignment.CenterVertically + ) { + Text( + text = "전체", + fontSize = 16.sp, + fontWeight = FontWeight.Bold + ) + Text( + text = "Tops & T-Shirts", + fontSize = 16.sp, + color = androidx.compose.ui.graphics.Color.Gray + ) + Text( + text = "Shoes", + fontSize = 16.sp, + color = androidx.compose.ui.graphics.Color.Gray + ) + } + } +} \ No newline at end of file diff --git a/app/src/main/java/com/example/composeapplication/ui/screens/WishlistScreen.kt b/app/src/main/java/com/example/composeapplication/ui/screens/WishlistScreen.kt new file mode 100644 index 0000000..48ea920 --- /dev/null +++ b/app/src/main/java/com/example/composeapplication/ui/screens/WishlistScreen.kt @@ -0,0 +1,29 @@ +package com.example.composeapplication.ui.screens + +import androidx.compose.foundation.layout.Column +import androidx.compose.foundation.layout.fillMaxSize +import androidx.compose.foundation.layout.padding +import androidx.compose.material3.Text +import androidx.compose.runtime.Composable +import androidx.compose.ui.Modifier +import androidx.compose.ui.text.font.FontWeight +import androidx.compose.ui.unit.dp +import androidx.compose.ui.unit.sp + +@Composable +fun WishlistScreen() { + Column( + modifier = Modifier + .fillMaxSize() + .padding(20.dp) + ) { + Text( + text = "위시리스트", + fontSize = 30.sp, + fontWeight = FontWeight.Bold + ) + + + + } +} \ No newline at end of file diff --git a/app/src/main/java/com/example/composeapplication/ui/theme/Color.kt b/app/src/main/java/com/example/composeapplication/ui/theme/Color.kt new file mode 100644 index 0000000..f1f70a8 --- /dev/null +++ b/app/src/main/java/com/example/composeapplication/ui/theme/Color.kt @@ -0,0 +1,11 @@ +package com.example.composeapplication.ui.theme + +import androidx.compose.ui.graphics.Color + +val Purple80 = Color(0xFFD0BCFF) +val PurpleGrey80 = Color(0xFFCCC2DC) +val Pink80 = Color(0xFFEFB8C8) + +val Purple40 = Color(0xFF6650a4) +val PurpleGrey40 = Color(0xFF625b71) +val Pink40 = Color(0xFF7D5260) \ No newline at end of file diff --git a/app/src/main/java/com/example/composeapplication/ui/theme/Theme.kt b/app/src/main/java/com/example/composeapplication/ui/theme/Theme.kt new file mode 100644 index 0000000..e3b21df --- /dev/null +++ b/app/src/main/java/com/example/composeapplication/ui/theme/Theme.kt @@ -0,0 +1,58 @@ +package com.example.composeapplication.ui.theme + +import android.app.Activity +import android.os.Build +import androidx.compose.foundation.isSystemInDarkTheme +import androidx.compose.material3.MaterialTheme +import androidx.compose.material3.darkColorScheme +import androidx.compose.material3.dynamicDarkColorScheme +import androidx.compose.material3.dynamicLightColorScheme +import androidx.compose.material3.lightColorScheme +import androidx.compose.runtime.Composable +import androidx.compose.ui.platform.LocalContext + +private val DarkColorScheme = darkColorScheme( + primary = Purple80, + secondary = PurpleGrey80, + tertiary = Pink80 +) + +private val LightColorScheme = lightColorScheme( + primary = Purple40, + secondary = PurpleGrey40, + tertiary = Pink40 + + /* Other default colors to override + background = Color(0xFFFFFBFE), + surface = Color(0xFFFFFBFE), + onPrimary = Color.White, + onSecondary = Color.White, + onTertiary = Color.White, + onBackground = Color(0xFF1C1B1F), + onSurface = Color(0xFF1C1B1F), + */ +) + +@Composable +fun ComposeApplicationTheme( + darkTheme: Boolean = isSystemInDarkTheme(), + // Dynamic color is available on Android 12+ + dynamicColor: Boolean = true, + content: @Composable () -> Unit +) { + val colorScheme = when { + dynamicColor && Build.VERSION.SDK_INT >= Build.VERSION_CODES.S -> { + val context = LocalContext.current + if (darkTheme) dynamicDarkColorScheme(context) else dynamicLightColorScheme(context) + } + + darkTheme -> DarkColorScheme + else -> LightColorScheme + } + + MaterialTheme( + colorScheme = colorScheme, + typography = Typography, + content = content + ) +} \ No newline at end of file diff --git a/app/src/main/java/com/example/composeapplication/ui/theme/Type.kt b/app/src/main/java/com/example/composeapplication/ui/theme/Type.kt new file mode 100644 index 0000000..18e5f5c --- /dev/null +++ b/app/src/main/java/com/example/composeapplication/ui/theme/Type.kt @@ -0,0 +1,34 @@ +package com.example.composeapplication.ui.theme + +import androidx.compose.material3.Typography +import androidx.compose.ui.text.TextStyle +import androidx.compose.ui.text.font.FontFamily +import androidx.compose.ui.text.font.FontWeight +import androidx.compose.ui.unit.sp + +// Set of Material typography styles to start with +val Typography = Typography( + bodyLarge = TextStyle( + fontFamily = FontFamily.Default, + fontWeight = FontWeight.Normal, + fontSize = 16.sp, + lineHeight = 24.sp, + letterSpacing = 0.5.sp + ) + /* Other default text styles to override + titleLarge = TextStyle( + fontFamily = FontFamily.Default, + fontWeight = FontWeight.Normal, + fontSize = 22.sp, + lineHeight = 28.sp, + letterSpacing = 0.sp + ), + labelSmall = TextStyle( + fontFamily = FontFamily.Default, + fontWeight = FontWeight.Medium, + fontSize = 11.sp, + lineHeight = 16.sp, + letterSpacing = 0.5.sp + ) + */ +) \ No newline at end of file diff --git a/app/src/main/res/drawable/bagcircle.xml b/app/src/main/res/drawable/bagcircle.xml new file mode 100644 index 0000000..1af2ce6 --- /dev/null +++ b/app/src/main/res/drawable/bagcircle.xml @@ -0,0 +1,26 @@ + + + + + + + + diff --git a/app/src/main/res/drawable/ic_cart.xml b/app/src/main/res/drawable/ic_cart.xml new file mode 100644 index 0000000..3b6e816 --- /dev/null +++ b/app/src/main/res/drawable/ic_cart.xml @@ -0,0 +1,21 @@ + + + + + + + diff --git a/app/src/main/res/drawable/ic_home.xml b/app/src/main/res/drawable/ic_home.xml new file mode 100644 index 0000000..a0d86b9 --- /dev/null +++ b/app/src/main/res/drawable/ic_home.xml @@ -0,0 +1,17 @@ + + + + + + diff --git a/app/src/main/res/drawable/ic_launcher_background.xml b/app/src/main/res/drawable/ic_launcher_background.xml new file mode 100644 index 0000000..07d5da9 --- /dev/null +++ b/app/src/main/res/drawable/ic_launcher_background.xml @@ -0,0 +1,170 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/app/src/main/res/drawable/ic_launcher_foreground.xml b/app/src/main/res/drawable/ic_launcher_foreground.xml new file mode 100644 index 0000000..2b068d1 --- /dev/null +++ b/app/src/main/res/drawable/ic_launcher_foreground.xml @@ -0,0 +1,30 @@ + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/ic_profile.xml b/app/src/main/res/drawable/ic_profile.xml new file mode 100644 index 0000000..1fc97b8 --- /dev/null +++ b/app/src/main/res/drawable/ic_profile.xml @@ -0,0 +1,23 @@ + + + + + + + diff --git a/app/src/main/res/drawable/ic_shop.xml b/app/src/main/res/drawable/ic_shop.xml new file mode 100644 index 0000000..483d117 --- /dev/null +++ b/app/src/main/res/drawable/ic_shop.xml @@ -0,0 +1,38 @@ + + + + + + + + + diff --git a/app/src/main/res/drawable/ic_wishlist.xml b/app/src/main/res/drawable/ic_wishlist.xml new file mode 100644 index 0000000..6597a4a --- /dev/null +++ b/app/src/main/res/drawable/ic_wishlist.xml @@ -0,0 +1,17 @@ + + + + + + diff --git a/app/src/main/res/drawable/nike_discover_img.png b/app/src/main/res/drawable/nike_discover_img.png new file mode 100644 index 0000000..f42aa9d Binary files /dev/null and b/app/src/main/res/drawable/nike_discover_img.png differ diff --git a/app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml b/app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml new file mode 100644 index 0000000..6f3b755 --- /dev/null +++ b/app/src/main/res/mipmap-anydpi-v26/ic_launcher.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/app/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml b/app/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml new file mode 100644 index 0000000..6f3b755 --- /dev/null +++ b/app/src/main/res/mipmap-anydpi-v26/ic_launcher_round.xml @@ -0,0 +1,6 @@ + + + + + + \ No newline at end of file diff --git a/app/src/main/res/mipmap-hdpi/ic_launcher.webp b/app/src/main/res/mipmap-hdpi/ic_launcher.webp new file mode 100644 index 0000000..c209e78 Binary files /dev/null and b/app/src/main/res/mipmap-hdpi/ic_launcher.webp differ diff --git a/app/src/main/res/mipmap-hdpi/ic_launcher_round.webp b/app/src/main/res/mipmap-hdpi/ic_launcher_round.webp new file mode 100644 index 0000000..b2dfe3d Binary files /dev/null and b/app/src/main/res/mipmap-hdpi/ic_launcher_round.webp differ diff --git a/app/src/main/res/mipmap-mdpi/ic_launcher.webp b/app/src/main/res/mipmap-mdpi/ic_launcher.webp new file mode 100644 index 0000000..4f0f1d6 Binary files /dev/null and b/app/src/main/res/mipmap-mdpi/ic_launcher.webp differ diff --git a/app/src/main/res/mipmap-mdpi/ic_launcher_round.webp b/app/src/main/res/mipmap-mdpi/ic_launcher_round.webp new file mode 100644 index 0000000..62b611d Binary files /dev/null and b/app/src/main/res/mipmap-mdpi/ic_launcher_round.webp differ diff --git a/app/src/main/res/mipmap-xhdpi/ic_launcher.webp b/app/src/main/res/mipmap-xhdpi/ic_launcher.webp new file mode 100644 index 0000000..948a307 Binary files /dev/null and b/app/src/main/res/mipmap-xhdpi/ic_launcher.webp differ diff --git a/app/src/main/res/mipmap-xhdpi/ic_launcher_round.webp b/app/src/main/res/mipmap-xhdpi/ic_launcher_round.webp new file mode 100644 index 0000000..1b9a695 Binary files /dev/null and b/app/src/main/res/mipmap-xhdpi/ic_launcher_round.webp differ diff --git a/app/src/main/res/mipmap-xxhdpi/ic_launcher.webp b/app/src/main/res/mipmap-xxhdpi/ic_launcher.webp new file mode 100644 index 0000000..28d4b77 Binary files /dev/null and b/app/src/main/res/mipmap-xxhdpi/ic_launcher.webp differ diff --git a/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.webp b/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.webp new file mode 100644 index 0000000..9287f50 Binary files /dev/null and b/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.webp differ diff --git a/app/src/main/res/mipmap-xxxhdpi/ic_launcher.webp b/app/src/main/res/mipmap-xxxhdpi/ic_launcher.webp new file mode 100644 index 0000000..aa7d642 Binary files /dev/null and b/app/src/main/res/mipmap-xxxhdpi/ic_launcher.webp differ diff --git a/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.webp b/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.webp new file mode 100644 index 0000000..9126ae3 Binary files /dev/null and b/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.webp differ diff --git a/app/src/main/res/values/colors.xml b/app/src/main/res/values/colors.xml new file mode 100644 index 0000000..f8c6127 --- /dev/null +++ b/app/src/main/res/values/colors.xml @@ -0,0 +1,10 @@ + + + #FFBB86FC + #FF6200EE + #FF3700B3 + #FF03DAC5 + #FF018786 + #FF000000 + #FFFFFFFF + \ No newline at end of file diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml new file mode 100644 index 0000000..7465c6c --- /dev/null +++ b/app/src/main/res/values/strings.xml @@ -0,0 +1,3 @@ + + ComposeApplication + \ No newline at end of file diff --git a/app/src/main/res/values/themes.xml b/app/src/main/res/values/themes.xml new file mode 100644 index 0000000..e06dc99 --- /dev/null +++ b/app/src/main/res/values/themes.xml @@ -0,0 +1,5 @@ + + + +