From 8735210d23e1eb9f517c4d1ee4f5cccb8f63f7ec Mon Sep 17 00:00:00 2001 From: kimhyemin Date: Tue, 8 Oct 2024 14:09:33 +0900 Subject: [PATCH 01/13] =?UTF-8?q?docs:=201=EB=8B=A8=EA=B3=84=20=EA=B8=B0?= =?UTF-8?q?=EB=8A=A5=20=EB=AA=A9=EB=A1=9D=20=EC=9E=91=EC=84=B1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/README.md b/README.md index a6a2b9c..a44ae15 100644 --- a/README.md +++ b/README.md @@ -1 +1,5 @@ -# android-signup# android-signup +# android-signup +## 1단계 - 컴포즈 기초 +- [ ] text() 테스트를 성공하도록 수정한다. +- [ ] column() 테스트를 성공하도록 수정한다. +- [ ] button() 테스트를 성공하도록 수정한다. From 466ead51336d34d67aa0570182b52e290e02a807 Mon Sep 17 00:00:00 2001 From: kimhyemin Date: Tue, 8 Oct 2024 14:15:01 +0900 Subject: [PATCH 02/13] =?UTF-8?q?chore:=20nextstep=20->=20woowacourse=20?= =?UTF-8?q?=ED=8C=A8=ED=82=A4=EC=A7=80=EB=AA=85=20=EB=B3=80=EA=B2=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/build.gradle.kts | 4 ++-- .../java/{nextstep => woowacourse}/signup/.gitkeep | 0 .../java/{nextstep => woowacourse}/signup/MainActivity.kt | 4 ++-- .../{nextstep => woowacourse}/signup/ui/theme/Color.kt | 4 ++-- .../{nextstep => woowacourse}/signup/ui/theme/Theme.kt | 7 +------ .../java/{nextstep => woowacourse}/signup/ui/theme/Type.kt | 4 ++-- .../test/java/{nextstep => woowacourse}/signup/.gitkeep | 0 7 files changed, 9 insertions(+), 14 deletions(-) rename app/src/androidTest/java/{nextstep => woowacourse}/signup/.gitkeep (100%) rename app/src/main/java/{nextstep => woowacourse}/signup/MainActivity.kt (94%) rename app/src/main/java/{nextstep => woowacourse}/signup/ui/theme/Color.kt (76%) rename app/src/main/java/{nextstep => woowacourse}/signup/ui/theme/Theme.kt (87%) rename app/src/main/java/{nextstep => woowacourse}/signup/ui/theme/Type.kt (96%) rename app/src/test/java/{nextstep => woowacourse}/signup/.gitkeep (100%) diff --git a/app/build.gradle.kts b/app/build.gradle.kts index 1e47716..60b66a6 100644 --- a/app/build.gradle.kts +++ b/app/build.gradle.kts @@ -4,11 +4,11 @@ plugins { } android { - namespace = "nextstep.signup" + namespace = "woowacourse.signup" compileSdk = 34 defaultConfig { - applicationId = "nextstep.signup" + applicationId = "woowacourse.signup" minSdk = 26 targetSdk = 34 versionCode = 1 diff --git a/app/src/androidTest/java/nextstep/signup/.gitkeep b/app/src/androidTest/java/woowacourse/signup/.gitkeep similarity index 100% rename from app/src/androidTest/java/nextstep/signup/.gitkeep rename to app/src/androidTest/java/woowacourse/signup/.gitkeep diff --git a/app/src/main/java/nextstep/signup/MainActivity.kt b/app/src/main/java/woowacourse/signup/MainActivity.kt similarity index 94% rename from app/src/main/java/nextstep/signup/MainActivity.kt rename to app/src/main/java/woowacourse/signup/MainActivity.kt index a74bc99..419687b 100644 --- a/app/src/main/java/nextstep/signup/MainActivity.kt +++ b/app/src/main/java/woowacourse/signup/MainActivity.kt @@ -1,4 +1,4 @@ -package nextstep.signup +package woowacourse.signup import android.os.Bundle import androidx.activity.ComponentActivity @@ -10,7 +10,7 @@ import androidx.compose.material3.Text import androidx.compose.runtime.Composable import androidx.compose.ui.Modifier import androidx.compose.ui.tooling.preview.Preview -import nextstep.signup.ui.theme.SignupTheme +import woowacourse.signup.ui.theme.SignupTheme class MainActivity : ComponentActivity() { override fun onCreate(savedInstanceState: Bundle?) { diff --git a/app/src/main/java/nextstep/signup/ui/theme/Color.kt b/app/src/main/java/woowacourse/signup/ui/theme/Color.kt similarity index 76% rename from app/src/main/java/nextstep/signup/ui/theme/Color.kt rename to app/src/main/java/woowacourse/signup/ui/theme/Color.kt index 09dbbec..4d6af4e 100644 --- a/app/src/main/java/nextstep/signup/ui/theme/Color.kt +++ b/app/src/main/java/woowacourse/signup/ui/theme/Color.kt @@ -1,4 +1,4 @@ -package nextstep.signup.ui.theme +package woowacourse.signup.ui.theme import androidx.compose.ui.graphics.Color @@ -8,4 +8,4 @@ val Pink80 = Color(0xFFEFB8C8) val Purple40 = Color(0xFF6650a4) val PurpleGrey40 = Color(0xFF625b71) -val Pink40 = Color(0xFF7D5260) \ No newline at end of file +val Pink40 = Color(0xFF7D5260) diff --git a/app/src/main/java/nextstep/signup/ui/theme/Theme.kt b/app/src/main/java/woowacourse/signup/ui/theme/Theme.kt similarity index 87% rename from app/src/main/java/nextstep/signup/ui/theme/Theme.kt rename to app/src/main/java/woowacourse/signup/ui/theme/Theme.kt index 5e311bd..0709259 100644 --- a/app/src/main/java/nextstep/signup/ui/theme/Theme.kt +++ b/app/src/main/java/woowacourse/signup/ui/theme/Theme.kt @@ -1,6 +1,5 @@ -package nextstep.signup.ui.theme +package woowacourse.signup.ui.theme -import android.app.Activity import android.os.Build import androidx.compose.foundation.isSystemInDarkTheme import androidx.compose.material3.MaterialTheme @@ -9,11 +8,7 @@ import androidx.compose.material3.dynamicDarkColorScheme import androidx.compose.material3.dynamicLightColorScheme import androidx.compose.material3.lightColorScheme import androidx.compose.runtime.Composable -import androidx.compose.runtime.SideEffect -import androidx.compose.ui.graphics.toArgb import androidx.compose.ui.platform.LocalContext -import androidx.compose.ui.platform.LocalView -import androidx.core.view.WindowCompat private val DarkColorScheme = darkColorScheme( primary = Purple80, diff --git a/app/src/main/java/nextstep/signup/ui/theme/Type.kt b/app/src/main/java/woowacourse/signup/ui/theme/Type.kt similarity index 96% rename from app/src/main/java/nextstep/signup/ui/theme/Type.kt rename to app/src/main/java/woowacourse/signup/ui/theme/Type.kt index bbd4c54..9376b96 100644 --- a/app/src/main/java/nextstep/signup/ui/theme/Type.kt +++ b/app/src/main/java/woowacourse/signup/ui/theme/Type.kt @@ -1,4 +1,4 @@ -package nextstep.signup.ui.theme +package woowacourse.signup.ui.theme import androidx.compose.material3.Typography import androidx.compose.ui.text.TextStyle @@ -31,4 +31,4 @@ val Typography = Typography( letterSpacing = 0.5.sp ) */ -) \ No newline at end of file +) diff --git a/app/src/test/java/nextstep/signup/.gitkeep b/app/src/test/java/woowacourse/signup/.gitkeep similarity index 100% rename from app/src/test/java/nextstep/signup/.gitkeep rename to app/src/test/java/woowacourse/signup/.gitkeep From 69d1270a9b31ba21c7bfd57b28e15f013cfa7731 Mon Sep 17 00:00:00 2001 From: kimhyemin Date: Tue, 8 Oct 2024 14:17:24 +0900 Subject: [PATCH 03/13] =?UTF-8?q?test:=20=EA=B8=B0=EB=B3=B8=20=ED=85=8C?= =?UTF-8?q?=EC=8A=A4=ED=8A=B8=20=EC=B6=94=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../woowacourse/signup/LayoutBasicsTest.kt | 103 ++++++++++++++++++ 1 file changed, 103 insertions(+) create mode 100644 app/src/androidTest/java/woowacourse/signup/LayoutBasicsTest.kt diff --git a/app/src/androidTest/java/woowacourse/signup/LayoutBasicsTest.kt b/app/src/androidTest/java/woowacourse/signup/LayoutBasicsTest.kt new file mode 100644 index 0000000..f0cd696 --- /dev/null +++ b/app/src/androidTest/java/woowacourse/signup/LayoutBasicsTest.kt @@ -0,0 +1,103 @@ +package woowacourse.signup + +import androidx.compose.foundation.layout.Column +import androidx.compose.material3.Button +import androidx.compose.material3.Text +import androidx.compose.runtime.mutableStateOf +import androidx.compose.runtime.remember +import androidx.compose.ui.Modifier +import androidx.compose.ui.graphics.Color +import androidx.compose.ui.platform.testTag +import androidx.compose.ui.test.assert +import androidx.compose.ui.test.assertCountEquals +import androidx.compose.ui.test.assertIsNotEnabled +import androidx.compose.ui.test.hasText +import androidx.compose.ui.test.junit4.createComposeRule +import androidx.compose.ui.test.onChildren +import androidx.compose.ui.test.onFirst +import androidx.compose.ui.test.onNodeWithTag +import androidx.compose.ui.test.onNodeWithText +import androidx.compose.ui.test.performClick +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 +import org.junit.Rule +import org.junit.Test + +// 1. 모든 테스트가 성공하도록 만들어보자 +// 2. 힌트를 참고하여 Preview를 노출시킨다. +// 3. Preview의 interactive 모드를 활용하여 버튼을 클릭해본다. +class LayoutBasicsTest { + @get:Rule + val composeTestRule = createComposeRule() + + @Test + fun text() { + // given + val text = "안녕 난 컴포즈야~" + composeTestRule.setContent { + Text( + // 바꿔 보세요! + text = "텍스트", + color = Color.Blue, + style = TextStyle( + fontSize = 26.sp, + fontWeight = FontWeight.Bold, + fontFamily = FontFamily.SansSerif + ), + ) + } + + // then + composeTestRule + .onNodeWithText(text) + .assertExists() + } + + @Test + fun column() { + // given + composeTestRule.setContent { + Column( + modifier = Modifier.testTag("이름") + ) { + // 바꿔 보세요! + Text(text = "킴포즈", color = Color.Cyan) + Text(text = "끔포즈", color = Color.Yellow) + } + } + + // then + composeTestRule.onNodeWithTag("이름") + .onChildren() + .assertCountEquals(3) + .onFirst() + .assert(hasText("깜포즈")) + } + + @Test + fun button() { + // given + composeTestRule.setContent { + val enabled = remember { mutableStateOf(true) } + Button( + onClick = { + // 바꿔 보세요! + }, + enabled = enabled.value, + modifier = Modifier.testTag("버튼") + ) { + Text(text = "클릭해주세요") + } + } + + // when + val button = composeTestRule + .onNodeWithTag("버튼") + .performClick() + + // then + button.assertIsNotEnabled() + } +} From 83f8a295aa6a9d86e6b5f025f957417d70fa8b5e Mon Sep 17 00:00:00 2001 From: kimhyemin Date: Tue, 8 Oct 2024 14:27:13 +0900 Subject: [PATCH 04/13] =?UTF-8?q?test:=20text()=20=ED=85=8C=EC=8A=A4?= =?UTF-8?q?=ED=8A=B8=20=EC=84=B1=EA=B3=B5=ED=95=98=EB=8F=84=EB=A1=9D=20?= =?UTF-8?q?=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 2 +- .../androidTest/java/woowacourse/signup/LayoutBasicsTest.kt | 3 +-- 2 files changed, 2 insertions(+), 3 deletions(-) diff --git a/README.md b/README.md index a44ae15..8c16a77 100644 --- a/README.md +++ b/README.md @@ -1,5 +1,5 @@ # android-signup ## 1단계 - 컴포즈 기초 -- [ ] text() 테스트를 성공하도록 수정한다. +- [x] text() 테스트를 성공하도록 수정한다. - [ ] column() 테스트를 성공하도록 수정한다. - [ ] button() 테스트를 성공하도록 수정한다. diff --git a/app/src/androidTest/java/woowacourse/signup/LayoutBasicsTest.kt b/app/src/androidTest/java/woowacourse/signup/LayoutBasicsTest.kt index f0cd696..beb30ba 100644 --- a/app/src/androidTest/java/woowacourse/signup/LayoutBasicsTest.kt +++ b/app/src/androidTest/java/woowacourse/signup/LayoutBasicsTest.kt @@ -38,8 +38,7 @@ class LayoutBasicsTest { val text = "안녕 난 컴포즈야~" composeTestRule.setContent { Text( - // 바꿔 보세요! - text = "텍스트", + text = text, color = Color.Blue, style = TextStyle( fontSize = 26.sp, From a53bf72b74eb6731ff11eced825b8f4747a8b395 Mon Sep 17 00:00:00 2001 From: kimhyemin Date: Tue, 8 Oct 2024 14:27:41 +0900 Subject: [PATCH 05/13] =?UTF-8?q?test:=20column()=20=ED=85=8C=EC=8A=A4?= =?UTF-8?q?=ED=8A=B8=20=EC=84=B1=EA=B3=B5=ED=95=98=EB=8F=84=EB=A1=9D=20?= =?UTF-8?q?=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 2 +- app/src/androidTest/java/woowacourse/signup/LayoutBasicsTest.kt | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 8c16a77..1685c1d 100644 --- a/README.md +++ b/README.md @@ -1,5 +1,5 @@ # android-signup ## 1단계 - 컴포즈 기초 - [x] text() 테스트를 성공하도록 수정한다. -- [ ] column() 테스트를 성공하도록 수정한다. +- [x] column() 테스트를 성공하도록 수정한다. - [ ] button() 테스트를 성공하도록 수정한다. diff --git a/app/src/androidTest/java/woowacourse/signup/LayoutBasicsTest.kt b/app/src/androidTest/java/woowacourse/signup/LayoutBasicsTest.kt index beb30ba..b33c3aa 100644 --- a/app/src/androidTest/java/woowacourse/signup/LayoutBasicsTest.kt +++ b/app/src/androidTest/java/woowacourse/signup/LayoutBasicsTest.kt @@ -61,7 +61,7 @@ class LayoutBasicsTest { Column( modifier = Modifier.testTag("이름") ) { - // 바꿔 보세요! + Text(text = "깜포즈", color = Color.Red) Text(text = "킴포즈", color = Color.Cyan) Text(text = "끔포즈", color = Color.Yellow) } From 405eac77ffdad91b242d8bd072014af57e71df4e Mon Sep 17 00:00:00 2001 From: kimhyemin Date: Tue, 8 Oct 2024 14:28:47 +0900 Subject: [PATCH 06/13] =?UTF-8?q?test:=20button()=20=ED=85=8C=EC=8A=A4?= =?UTF-8?q?=ED=8A=B8=20=EC=84=B1=EA=B3=B5=ED=95=98=EB=8F=84=EB=A1=9D=20?= =?UTF-8?q?=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 2 +- .../java/woowacourse/signup/LayoutBasicsTest.kt | 7 +------ 2 files changed, 2 insertions(+), 7 deletions(-) diff --git a/README.md b/README.md index 1685c1d..411f18e 100644 --- a/README.md +++ b/README.md @@ -2,4 +2,4 @@ ## 1단계 - 컴포즈 기초 - [x] text() 테스트를 성공하도록 수정한다. - [x] column() 테스트를 성공하도록 수정한다. -- [ ] button() 테스트를 성공하도록 수정한다. +- [x] button() 테스트를 성공하도록 수정한다. diff --git a/app/src/androidTest/java/woowacourse/signup/LayoutBasicsTest.kt b/app/src/androidTest/java/woowacourse/signup/LayoutBasicsTest.kt index b33c3aa..3413483 100644 --- a/app/src/androidTest/java/woowacourse/signup/LayoutBasicsTest.kt +++ b/app/src/androidTest/java/woowacourse/signup/LayoutBasicsTest.kt @@ -25,9 +25,6 @@ import androidx.compose.ui.unit.sp import org.junit.Rule import org.junit.Test -// 1. 모든 테스트가 성공하도록 만들어보자 -// 2. 힌트를 참고하여 Preview를 노출시킨다. -// 3. Preview의 interactive 모드를 활용하여 버튼을 클릭해본다. class LayoutBasicsTest { @get:Rule val composeTestRule = createComposeRule() @@ -81,9 +78,7 @@ class LayoutBasicsTest { composeTestRule.setContent { val enabled = remember { mutableStateOf(true) } Button( - onClick = { - // 바꿔 보세요! - }, + onClick = { enabled.value = !enabled.value }, enabled = enabled.value, modifier = Modifier.testTag("버튼") ) { From 1884f7c9a3fef15130f669f633456155c1ae9ce5 Mon Sep 17 00:00:00 2001 From: kimhyemin Date: Tue, 8 Oct 2024 14:34:41 +0900 Subject: [PATCH 07/13] =?UTF-8?q?docs:=202=EB=8B=A8=EA=B3=84=20=EA=B8=B0?= =?UTF-8?q?=EB=8A=A5=20=EB=AA=A9=EB=A1=9D=20=EC=9E=91=EC=84=B1?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/README.md b/README.md index 411f18e..3e9a1ce 100644 --- a/README.md +++ b/README.md @@ -1,5 +1,15 @@ # android-signup ## 1단계 - 컴포즈 기초 +### 기능 요구사항 - [x] text() 테스트를 성공하도록 수정한다. - [x] column() 테스트를 성공하도록 수정한다. - [x] button() 테스트를 성공하도록 수정한다. + +## 2단계 - 회원가입(뷰) +### 기능 요구사항 +- [ ] 디자인 시안을 참고하여 회원가입 뷰를 구현한다. + +### 프로그래밍 요구사항 +- [ ] ViewModel, Hilt 등은 활용하지 않는다. +- [ ] 컴포저블 함수가 너무 많은 일을 하지 않도록 분리한다. +- [ ] Material3 Button, TextField를 활용한다. From a18c357cc3706f69a1f0d61605c45d2aa3df926c Mon Sep 17 00:00:00 2001 From: kimhyemin Date: Tue, 8 Oct 2024 16:22:20 +0900 Subject: [PATCH 08/13] =?UTF-8?q?design:=20=ED=9A=8C=EC=9B=90=EA=B0=80?= =?UTF-8?q?=EC=9E=85=20=EB=B7=B0=20=EA=B5=AC=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- README.md | 8 +- app/build.gradle.kts | 1 - .../java/woowacourse/signup/MainActivity.kt | 121 ++++++++++++++++-- .../java/woowacourse/signup/ui/theme/Color.kt | 2 + .../signup/ui/util/ComposeUtils.kt | 12 ++ 5 files changed, 130 insertions(+), 14 deletions(-) create mode 100644 app/src/main/java/woowacourse/signup/ui/util/ComposeUtils.kt diff --git a/README.md b/README.md index 3e9a1ce..476f30c 100644 --- a/README.md +++ b/README.md @@ -7,9 +7,9 @@ ## 2단계 - 회원가입(뷰) ### 기능 요구사항 -- [ ] 디자인 시안을 참고하여 회원가입 뷰를 구현한다. +- [x] 디자인 시안을 참고하여 회원가입 뷰를 구현한다. ### 프로그래밍 요구사항 -- [ ] ViewModel, Hilt 등은 활용하지 않는다. -- [ ] 컴포저블 함수가 너무 많은 일을 하지 않도록 분리한다. -- [ ] Material3 Button, TextField를 활용한다. +- [x] ViewModel, Hilt 등은 활용하지 않는다. +- [x] 컴포저블 함수가 너무 많은 일을 하지 않도록 분리한다. +- [x] Material3 Button, TextField를 활용한다. diff --git a/app/build.gradle.kts b/app/build.gradle.kts index 60b66a6..0d80fcd 100644 --- a/app/build.gradle.kts +++ b/app/build.gradle.kts @@ -50,7 +50,6 @@ android { } dependencies { - implementation(libs.androidx.core.ktx) implementation(libs.androidx.lifecycle.runtime.ktx) implementation(libs.androidx.activity.compose) diff --git a/app/src/main/java/woowacourse/signup/MainActivity.kt b/app/src/main/java/woowacourse/signup/MainActivity.kt index 419687b..79b0385 100644 --- a/app/src/main/java/woowacourse/signup/MainActivity.kt +++ b/app/src/main/java/woowacourse/signup/MainActivity.kt @@ -3,26 +3,46 @@ package woowacourse.signup import android.os.Bundle import androidx.activity.ComponentActivity import androidx.activity.compose.setContent +import androidx.compose.foundation.layout.Column +import androidx.compose.foundation.layout.PaddingValues import androidx.compose.foundation.layout.fillMaxSize -import androidx.compose.material3.MaterialTheme +import androidx.compose.foundation.layout.fillMaxWidth +import androidx.compose.foundation.layout.padding +import androidx.compose.material3.Button +import androidx.compose.material3.ButtonDefaults import androidx.compose.material3.Surface import androidx.compose.material3.Text +import androidx.compose.material3.TextField +import androidx.compose.material3.TextFieldDefaults import androidx.compose.runtime.Composable +import androidx.compose.runtime.getValue +import androidx.compose.runtime.mutableStateOf +import androidx.compose.runtime.remember +import androidx.compose.runtime.setValue import androidx.compose.ui.Modifier +import androidx.compose.ui.graphics.Color +import androidx.compose.ui.text.TextStyle +import androidx.compose.ui.text.font.FontWeight +import androidx.compose.ui.text.input.PasswordVisualTransformation +import androidx.compose.ui.text.input.VisualTransformation +import androidx.compose.ui.text.style.TextAlign import androidx.compose.ui.tooling.preview.Preview +import androidx.compose.ui.unit.dp +import androidx.compose.ui.unit.sp +import woowacourse.signup.ui.theme.Blue50 import woowacourse.signup.ui.theme.SignupTheme +import woowacourse.signup.ui.util.Space class MainActivity : ComponentActivity() { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContent { SignupTheme { - // A surface container using the 'background' color from the theme Surface( modifier = Modifier.fillMaxSize(), - color = MaterialTheme.colorScheme.background + color = Color.White ) { - Greeting("Android") + SignUpLayout() } } } @@ -30,17 +50,100 @@ class MainActivity : ComponentActivity() { } @Composable -fun Greeting(name: String, modifier: Modifier = Modifier) { +private fun SignUpLayout() { + Column { + SignUpTitle(text = "Welcome to Compose \uD83D\uDE80") + Space(dp = 18) + SignUpInput(title = "Username") + SignUpInput(title = "Email") + SignUpInput(title = "Password", isPassword = true) + SignUpInput(title = "Password Confirm", isPassword = true) + Space(dp = 24) + SignUpButton() + } +} + +@Composable +private fun SignUpTitle(text: String) { + Text( + text = text, + fontSize = 26.sp, + color = Color.Black, + fontWeight = FontWeight.W700, + textAlign = TextAlign.Center, + modifier = Modifier + .fillMaxWidth() + .padding(top = 60.dp) + ) +} + +@Composable +private fun SignUpInput(title: String, isPassword: Boolean = false) { + var input by remember { mutableStateOf("") } + + TextField( + label = { SignUpInputLabel(title) }, + value = input, + onValueChange = { input = it }, + textStyle = TextStyle( + fontSize = 16.sp, + fontWeight = FontWeight.W400, + ), + singleLine = true, + colors = TextFieldDefaults.colors( + focusedIndicatorColor = Blue50, + focusedLabelColor = Blue50, + cursorColor = Blue50, + ), + visualTransformation = if (isPassword) PasswordVisualTransformation() else VisualTransformation.None, + modifier = Modifier + .fillMaxWidth() + .padding(horizontal = 32.dp, vertical = 18.dp), + ) +} + +@Composable +private fun SignUpInputLabel(label: String) { Text( - text = "Hello $name!", - modifier = modifier + text = label, + fontWeight = FontWeight.W400, ) } +@Composable +fun SignUpButton() { + Button( + onClick = { + // TODO + }, + contentPadding = PaddingValues(0.dp), + colors = ButtonDefaults.buttonColors( + containerColor = Blue50, + ), + modifier = + Modifier + .fillMaxWidth() + .padding(horizontal = 32.dp), + ) { + Text( + text = "Sign Up", + fontSize = 14.sp, + fontWeight = FontWeight.W500, + modifier = Modifier.padding(vertical = 15.dp) + ) + } +} + @Preview(showBackground = true) @Composable -fun GreetingPreview() { +fun MainPreview() { SignupTheme { - Greeting("Android") + Surface( + modifier = Modifier.fillMaxSize(), + color = Color.White + ) { + SignUpLayout() + } } } + diff --git a/app/src/main/java/woowacourse/signup/ui/theme/Color.kt b/app/src/main/java/woowacourse/signup/ui/theme/Color.kt index 4d6af4e..460825c 100644 --- a/app/src/main/java/woowacourse/signup/ui/theme/Color.kt +++ b/app/src/main/java/woowacourse/signup/ui/theme/Color.kt @@ -9,3 +9,5 @@ val Pink80 = Color(0xFFEFB8C8) val Purple40 = Color(0xFF6650a4) val PurpleGrey40 = Color(0xFF625b71) val Pink40 = Color(0xFF7D5260) + +val Blue50 = Color(0xFF2196F3) diff --git a/app/src/main/java/woowacourse/signup/ui/util/ComposeUtils.kt b/app/src/main/java/woowacourse/signup/ui/util/ComposeUtils.kt new file mode 100644 index 0000000..d76493e --- /dev/null +++ b/app/src/main/java/woowacourse/signup/ui/util/ComposeUtils.kt @@ -0,0 +1,12 @@ +package woowacourse.signup.ui.util + +import androidx.compose.foundation.layout.Spacer +import androidx.compose.foundation.layout.height +import androidx.compose.runtime.Composable +import androidx.compose.ui.Modifier +import androidx.compose.ui.unit.dp + +@Composable +fun Space(dp: Int) { + Spacer(modifier = Modifier.height(dp.dp)) +} From 6b78e760b284149174c958f994d8b394d4940d55 Mon Sep 17 00:00:00 2001 From: kimhyemin Date: Tue, 8 Oct 2024 16:32:22 +0900 Subject: [PATCH 09/13] =?UTF-8?q?refactor:=20=EB=AC=B8=EC=9E=90=EC=97=B4?= =?UTF-8?q?=EC=9D=84=20string=20resources=EB=A1=9C=20=EB=B6=84=EB=A6=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/woowacourse/signup/MainActivity.kt | 30 +++++++++++-------- app/src/main/res/values/strings.xml | 8 ++++- 2 files changed, 24 insertions(+), 14 deletions(-) diff --git a/app/src/main/java/woowacourse/signup/MainActivity.kt b/app/src/main/java/woowacourse/signup/MainActivity.kt index 79b0385..63684c4 100644 --- a/app/src/main/java/woowacourse/signup/MainActivity.kt +++ b/app/src/main/java/woowacourse/signup/MainActivity.kt @@ -3,6 +3,7 @@ package woowacourse.signup import android.os.Bundle import androidx.activity.ComponentActivity import androidx.activity.compose.setContent +import androidx.annotation.StringRes import androidx.compose.foundation.layout.Column import androidx.compose.foundation.layout.PaddingValues import androidx.compose.foundation.layout.fillMaxSize @@ -21,6 +22,7 @@ import androidx.compose.runtime.remember import androidx.compose.runtime.setValue import androidx.compose.ui.Modifier import androidx.compose.ui.graphics.Color +import androidx.compose.ui.res.stringResource import androidx.compose.ui.text.TextStyle import androidx.compose.ui.text.font.FontWeight import androidx.compose.ui.text.input.PasswordVisualTransformation @@ -52,21 +54,21 @@ class MainActivity : ComponentActivity() { @Composable private fun SignUpLayout() { Column { - SignUpTitle(text = "Welcome to Compose \uD83D\uDE80") + SignUpTitle() Space(dp = 18) - SignUpInput(title = "Username") - SignUpInput(title = "Email") - SignUpInput(title = "Password", isPassword = true) - SignUpInput(title = "Password Confirm", isPassword = true) + SignUpInput(titleId = R.string.username_input) + SignUpInput(titleId = R.string.email_input) + SignUpInput(titleId = R.string.password_input, isPassword = true) + SignUpInput(titleId = R.string.password_confirm_input, isPassword = true) Space(dp = 24) SignUpButton() } } @Composable -private fun SignUpTitle(text: String) { +private fun SignUpTitle() { Text( - text = text, + text = stringResource(id = R.string.sign_up_title), fontSize = 26.sp, color = Color.Black, fontWeight = FontWeight.W700, @@ -78,11 +80,14 @@ private fun SignUpTitle(text: String) { } @Composable -private fun SignUpInput(title: String, isPassword: Boolean = false) { +private fun SignUpInput( + @StringRes titleId: Int, + isPassword: Boolean = false, +) { var input by remember { mutableStateOf("") } TextField( - label = { SignUpInputLabel(title) }, + label = { SignUpInputLabel(titleId) }, value = input, onValueChange = { input = it }, textStyle = TextStyle( @@ -103,9 +108,9 @@ private fun SignUpInput(title: String, isPassword: Boolean = false) { } @Composable -private fun SignUpInputLabel(label: String) { +private fun SignUpInputLabel(@StringRes labelId: Int) { Text( - text = label, + text = stringResource(id = labelId), fontWeight = FontWeight.W400, ) } @@ -136,7 +141,7 @@ fun SignUpButton() { @Preview(showBackground = true) @Composable -fun MainPreview() { +fun MainActivityPreview() { SignupTheme { Surface( modifier = Modifier.fillMaxSize(), @@ -146,4 +151,3 @@ fun MainPreview() { } } } - diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index ea1ed34..5953bd7 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -1,3 +1,9 @@ Signup - \ No newline at end of file + Welcome to Compose \uD83D\uDE80 + Username + Email + Password + Password Confirm + Sign Up + From f55c3ae587a7d907b00e082da5ac07adf5621cfe Mon Sep 17 00:00:00 2001 From: kimhyemin Date: Tue, 8 Oct 2024 16:40:57 +0900 Subject: [PATCH 10/13] =?UTF-8?q?refactor:=20=ED=85=8C=EB=A7=88=EC=97=90?= =?UTF-8?q?=20=EB=B0=B1=EA=B7=B8=EB=9D=BC=EC=9A=B4=EB=93=9C=20=EC=BB=AC?= =?UTF-8?q?=EB=9F=AC=EB=A5=BC=20=EC=A7=80=EC=A0=95=ED=95=98=EB=8F=84?= =?UTF-8?q?=EB=A1=9D=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/src/main/java/woowacourse/signup/ui/theme/Theme.kt | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/app/src/main/java/woowacourse/signup/ui/theme/Theme.kt b/app/src/main/java/woowacourse/signup/ui/theme/Theme.kt index 0709259..dbf22b7 100644 --- a/app/src/main/java/woowacourse/signup/ui/theme/Theme.kt +++ b/app/src/main/java/woowacourse/signup/ui/theme/Theme.kt @@ -8,6 +8,7 @@ import androidx.compose.material3.dynamicDarkColorScheme import androidx.compose.material3.dynamicLightColorScheme import androidx.compose.material3.lightColorScheme import androidx.compose.runtime.Composable +import androidx.compose.ui.graphics.Color import androidx.compose.ui.platform.LocalContext private val DarkColorScheme = darkColorScheme( @@ -19,10 +20,10 @@ private val DarkColorScheme = darkColorScheme( private val LightColorScheme = lightColorScheme( primary = Purple40, secondary = PurpleGrey40, - tertiary = Pink40 + tertiary = Pink40, + background = Color.White /* Other default colors to override - background = Color(0xFFFFFBFE), surface = Color(0xFFFFFBFE), onPrimary = Color.White, onSecondary = Color.White, From 031ae71a942b44c7e33cc1ad7386ca4787aff6a6 Mon Sep 17 00:00:00 2001 From: kimhyemin Date: Tue, 8 Oct 2024 16:41:19 +0900 Subject: [PATCH 11/13] =?UTF-8?q?refactor:=20fillMaxSize=20theme=EB=A5=BC?= =?UTF-8?q?=20util=EB=A1=9C=20=EB=B6=84=EB=A6=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../java/woowacourse/signup/MainActivity.kt | 22 +++++-------------- .../signup/ui/util/ComposeUtils.kt | 14 ++++++++++++ 2 files changed, 19 insertions(+), 17 deletions(-) diff --git a/app/src/main/java/woowacourse/signup/MainActivity.kt b/app/src/main/java/woowacourse/signup/MainActivity.kt index 63684c4..b2d2f70 100644 --- a/app/src/main/java/woowacourse/signup/MainActivity.kt +++ b/app/src/main/java/woowacourse/signup/MainActivity.kt @@ -6,12 +6,10 @@ import androidx.activity.compose.setContent import androidx.annotation.StringRes import androidx.compose.foundation.layout.Column import androidx.compose.foundation.layout.PaddingValues -import androidx.compose.foundation.layout.fillMaxSize import androidx.compose.foundation.layout.fillMaxWidth import androidx.compose.foundation.layout.padding import androidx.compose.material3.Button import androidx.compose.material3.ButtonDefaults -import androidx.compose.material3.Surface import androidx.compose.material3.Text import androidx.compose.material3.TextField import androidx.compose.material3.TextFieldDefaults @@ -32,20 +30,15 @@ import androidx.compose.ui.tooling.preview.Preview import androidx.compose.ui.unit.dp import androidx.compose.ui.unit.sp import woowacourse.signup.ui.theme.Blue50 -import woowacourse.signup.ui.theme.SignupTheme +import woowacourse.signup.ui.util.FillMaxTheme import woowacourse.signup.ui.util.Space class MainActivity : ComponentActivity() { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContent { - SignupTheme { - Surface( - modifier = Modifier.fillMaxSize(), - color = Color.White - ) { - SignUpLayout() - } + FillMaxTheme { + SignUpLayout() } } } @@ -142,12 +135,7 @@ fun SignUpButton() { @Preview(showBackground = true) @Composable fun MainActivityPreview() { - SignupTheme { - Surface( - modifier = Modifier.fillMaxSize(), - color = Color.White - ) { - SignUpLayout() - } + FillMaxTheme { + SignUpLayout() } } diff --git a/app/src/main/java/woowacourse/signup/ui/util/ComposeUtils.kt b/app/src/main/java/woowacourse/signup/ui/util/ComposeUtils.kt index d76493e..caec6a6 100644 --- a/app/src/main/java/woowacourse/signup/ui/util/ComposeUtils.kt +++ b/app/src/main/java/woowacourse/signup/ui/util/ComposeUtils.kt @@ -1,10 +1,24 @@ package woowacourse.signup.ui.util import androidx.compose.foundation.layout.Spacer +import androidx.compose.foundation.layout.fillMaxSize import androidx.compose.foundation.layout.height +import androidx.compose.material3.Surface import androidx.compose.runtime.Composable import androidx.compose.ui.Modifier import androidx.compose.ui.unit.dp +import woowacourse.signup.ui.theme.SignupTheme + +@Composable +fun FillMaxTheme(content: @Composable () -> Unit) { + SignupTheme { + Surface( + modifier = Modifier.fillMaxSize(), + ) { + content() + } + } +} @Composable fun Space(dp: Int) { From 917ce0eefd42348c555124e4bd0f8b6aff2739e8 Mon Sep 17 00:00:00 2001 From: kimhyemin Date: Tue, 8 Oct 2024 16:43:55 +0900 Subject: [PATCH 12/13] =?UTF-8?q?refactor:=20=EB=AC=B8=EC=9E=90=EC=97=B4?= =?UTF-8?q?=EC=9D=84=20string=20resources=EB=A1=9C=20=EB=B6=84=EB=A6=AC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/src/main/java/woowacourse/signup/MainActivity.kt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/src/main/java/woowacourse/signup/MainActivity.kt b/app/src/main/java/woowacourse/signup/MainActivity.kt index b2d2f70..14dacf4 100644 --- a/app/src/main/java/woowacourse/signup/MainActivity.kt +++ b/app/src/main/java/woowacourse/signup/MainActivity.kt @@ -124,7 +124,7 @@ fun SignUpButton() { .padding(horizontal = 32.dp), ) { Text( - text = "Sign Up", + text = stringResource(id = R.string.sign_up_button), fontSize = 14.sp, fontWeight = FontWeight.W500, modifier = Modifier.padding(vertical = 15.dp) From 135f6022e509e44da4bd1a962a68eedf83c556c4 Mon Sep 17 00:00:00 2001 From: kimhyemin Date: Tue, 8 Oct 2024 16:49:34 +0900 Subject: [PATCH 13/13] =?UTF-8?q?chore:=20MainActivity=EC=97=90=EC=84=9C?= =?UTF-8?q?=EB=A7=8C=20=EC=82=AC=EC=9A=A9=EB=90=98=EB=8A=94=20=ED=95=A8?= =?UTF-8?q?=EC=88=98=EB=A5=BC=20private=EC=9C=BC=EB=A1=9C=20=EB=B3=80?= =?UTF-8?q?=EA=B2=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/src/main/java/woowacourse/signup/MainActivity.kt | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/app/src/main/java/woowacourse/signup/MainActivity.kt b/app/src/main/java/woowacourse/signup/MainActivity.kt index 14dacf4..6405a5c 100644 --- a/app/src/main/java/woowacourse/signup/MainActivity.kt +++ b/app/src/main/java/woowacourse/signup/MainActivity.kt @@ -109,7 +109,7 @@ private fun SignUpInputLabel(@StringRes labelId: Int) { } @Composable -fun SignUpButton() { +private fun SignUpButton() { Button( onClick = { // TODO @@ -134,7 +134,7 @@ fun SignUpButton() { @Preview(showBackground = true) @Composable -fun MainActivityPreview() { +private fun MainActivityPreview() { FillMaxTheme { SignUpLayout() }