From 820c25c754a9221dfb5516ffd335225be7009284 Mon Sep 17 00:00:00 2001 From: leeeha Date: Thu, 24 Aug 2023 21:26:05 +0900 Subject: [PATCH 01/12] =?UTF-8?q?[mod]=20#150=20=EC=82=AC=EC=9A=A9=20?= =?UTF-8?q?=EA=B0=80=EC=9D=B4=EB=93=9C=20=ED=99=94=EB=A9=B4=EC=97=90?= =?UTF-8?q?=EC=84=9C=20=EC=86=90=EA=B0=80=EB=9D=BD=EC=9C=BC=EB=A1=9C?= =?UTF-8?q?=EB=8F=84=20=EC=8A=A4=EC=99=80=EC=9D=B4=ED=94=84=20=EA=B0=80?= =?UTF-8?q?=EB=8A=A5=ED=95=98=EB=8F=84=EB=A1=9D=20=EB=B3=80=EA=B2=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../winey/presentation/onboarding/guide/GuideActivity.kt | 5 ----- 1 file changed, 5 deletions(-) diff --git a/app/src/main/java/com/android/go/sopt/winey/presentation/onboarding/guide/GuideActivity.kt b/app/src/main/java/com/android/go/sopt/winey/presentation/onboarding/guide/GuideActivity.kt index c0c5efbd..f99b1e69 100644 --- a/app/src/main/java/com/android/go/sopt/winey/presentation/onboarding/guide/GuideActivity.kt +++ b/app/src/main/java/com/android/go/sopt/winey/presentation/onboarding/guide/GuideActivity.kt @@ -16,7 +16,6 @@ class GuideActivity : BindingActivity(R.layout.activity_gu super.onCreate(savedInstanceState) initViewPagerAdapter() - preventDefaultSwipe() observePageChange() initNextButtonClickListener() } @@ -25,10 +24,6 @@ class GuideActivity : BindingActivity(R.layout.activity_gu binding.vpGuide.adapter = GuideFragmentStateAdapter(this) } - private fun preventDefaultSwipe() { - binding.vpGuide.isUserInputEnabled = false - } - private fun observePageChange() { binding.vpGuide.registerOnPageChangeCallback(object : ViewPager2.OnPageChangeCallback() { override fun onPageSelected(position: Int) { From e0d7ee69d55f1960e86f569174f25ad09011d64c Mon Sep 17 00:00:00 2001 From: leeeha Date: Fri, 25 Aug 2023 00:07:24 +0900 Subject: [PATCH 02/12] =?UTF-8?q?[mod]=20#150=20=EB=A1=9C=ED=8B=B0=20?= =?UTF-8?q?=EC=95=A0=EB=8B=88=EB=A9=94=EC=9D=B4=EC=85=98=20=EB=86=92?= =?UTF-8?q?=EC=9D=B4=2030dp=20=EC=B6=95=EC=86=8C?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/src/main/res/layout/fragment_first_story.xml | 9 ++++----- app/src/main/res/layout/fragment_second_story.xml | 9 ++++----- app/src/main/res/layout/fragment_third_story.xml | 9 ++++----- 3 files changed, 12 insertions(+), 15 deletions(-) diff --git a/app/src/main/res/layout/fragment_first_story.xml b/app/src/main/res/layout/fragment_first_story.xml index b49c7722..20af2faf 100644 --- a/app/src/main/res/layout/fragment_first_story.xml +++ b/app/src/main/res/layout/fragment_first_story.xml @@ -74,21 +74,20 @@ - diff --git a/app/src/main/res/layout/fragment_second_story.xml b/app/src/main/res/layout/fragment_second_story.xml index 1ef094f5..896c2827 100644 --- a/app/src/main/res/layout/fragment_second_story.xml +++ b/app/src/main/res/layout/fragment_second_story.xml @@ -74,21 +74,20 @@ - diff --git a/app/src/main/res/layout/fragment_third_story.xml b/app/src/main/res/layout/fragment_third_story.xml index 8fba7042..9f36fee9 100644 --- a/app/src/main/res/layout/fragment_third_story.xml +++ b/app/src/main/res/layout/fragment_third_story.xml @@ -74,21 +74,20 @@ - From 14a68255e9664eea95c6b2206b16fe85e55053ae Mon Sep 17 00:00:00 2001 From: leeeha Date: Fri, 25 Aug 2023 11:56:42 +0900 Subject: [PATCH 03/12] =?UTF-8?q?[fix]=20#150=20=EC=B2=AB=EB=B2=88?= =?UTF-8?q?=EC=A7=B8=20=EC=8A=A4=ED=86=A0=EB=A6=AC=20=ED=99=94=EB=A9=B4?= =?UTF-8?q?=EC=97=90=EC=84=9C=20=EC=9C=84=EB=8B=88=EA=B5=AD=20=EB=A7=90?= =?UTF-8?q?=ED=92=8D=EC=84=A0=20=ED=85=8D=EC=8A=A4=ED=8A=B8=20=EA=B0=9C?= =?UTF-8?q?=ED=96=89=EB=90=98=EB=8A=94=20=EC=9D=B4=EC=8A=88=20=ED=95=B4?= =?UTF-8?q?=EA=B2=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/src/main/res/values/strings.xml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 0c469098..096189ce 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -170,7 +170,7 @@ 아니, 어제까지 위니 제국의\n황제였던 내가 갑자기 평민이라고? 그래서 지금 날 쫓아내는거야? 어떻게 해야 다시 돌아갈 수 있어? - 황제님 죄송합니다. 마지막까지 왕가를\n설득 시키려고 하였으나… + 황제님 죄송합니다. 마지막까지 왕가를 \n설득 시키려고 하였으나… 흥청망청 돈을 쓰셔 위니제국의\n황제 자격을 박탈당하셨습니다. 절약 목표 금액을 채우시면, 다시 황제로\n돌아오실 수 있습니다. 다시 뵙기를 바라며… 1/3 From 6637c9249838d9f72f00cc5d4d68609678d11735 Mon Sep 17 00:00:00 2001 From: leeeha Date: Fri, 25 Aug 2023 12:12:01 +0900 Subject: [PATCH 04/12] =?UTF-8?q?[fix]=20#150=20=EB=A7=90=ED=92=8D?= =?UTF-8?q?=EC=84=A0=EA=B3=BC=20=ED=85=8D=EC=8A=A4=ED=8A=B8=EA=B0=80=20?= =?UTF-8?q?=EB=A1=9C=ED=8B=B0=20=EC=95=A0=EB=8B=88=EB=A9=94=EC=9D=B4?= =?UTF-8?q?=EC=85=98=20=EB=B0=B0=EA=B2=BD=EC=97=90=20=EA=B0=80=EB=A0=A4?= =?UTF-8?q?=EC=A7=80=EB=8A=94=20=EC=9D=B4=EC=8A=88=20=ED=95=B4=EA=B2=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../onboarding/story/FirstStoryFragment.kt | 10 +++++++--- .../onboarding/story/SecondStoryFragment.kt | 10 +++++++--- .../onboarding/story/ThirdStoryFragment.kt | 10 +++++++--- app/src/main/res/layout/fragment_first_story.xml | 2 ++ 4 files changed, 23 insertions(+), 9 deletions(-) diff --git a/app/src/main/java/com/android/go/sopt/winey/presentation/onboarding/story/FirstStoryFragment.kt b/app/src/main/java/com/android/go/sopt/winey/presentation/onboarding/story/FirstStoryFragment.kt index 4b22088a..b6738c24 100644 --- a/app/src/main/java/com/android/go/sopt/winey/presentation/onboarding/story/FirstStoryFragment.kt +++ b/app/src/main/java/com/android/go/sopt/winey/presentation/onboarding/story/FirstStoryFragment.kt @@ -11,10 +11,14 @@ class FirstStoryFragment : override fun onViewCreated(view: View, savedInstanceState: Bundle?) { super.onViewCreated(view, savedInstanceState) - bringSpeechBubbleToFront() + bringTextToFront() } - private fun bringSpeechBubbleToFront() { - binding.tvStoryWineyCountrySpeechBubble.bringToFront() + private fun bringTextToFront() { + with(binding) { + tvStorySaverSpeechBubble.bringToFront() + tvStoryWineyCountryName.bringToFront() + tvStoryWineyCountrySpeechBubble.bringToFront() + } } } diff --git a/app/src/main/java/com/android/go/sopt/winey/presentation/onboarding/story/SecondStoryFragment.kt b/app/src/main/java/com/android/go/sopt/winey/presentation/onboarding/story/SecondStoryFragment.kt index 8f8a4962..c7b191dc 100644 --- a/app/src/main/java/com/android/go/sopt/winey/presentation/onboarding/story/SecondStoryFragment.kt +++ b/app/src/main/java/com/android/go/sopt/winey/presentation/onboarding/story/SecondStoryFragment.kt @@ -11,10 +11,14 @@ class SecondStoryFragment : override fun onViewCreated(view: View, savedInstanceState: Bundle?) { super.onViewCreated(view, savedInstanceState) - bringSpeechBubbleToFront() + bringTextToFront() } - private fun bringSpeechBubbleToFront() { - binding.tvStoryWineyCountrySpeechBubble.bringToFront() + private fun bringTextToFront() { + with(binding) { + tvStorySaverSpeechBubble.bringToFront() + tvStoryWineyCountryName.bringToFront() + tvStoryWineyCountrySpeechBubble.bringToFront() + } } } diff --git a/app/src/main/java/com/android/go/sopt/winey/presentation/onboarding/story/ThirdStoryFragment.kt b/app/src/main/java/com/android/go/sopt/winey/presentation/onboarding/story/ThirdStoryFragment.kt index 40492a90..5b7a11f9 100644 --- a/app/src/main/java/com/android/go/sopt/winey/presentation/onboarding/story/ThirdStoryFragment.kt +++ b/app/src/main/java/com/android/go/sopt/winey/presentation/onboarding/story/ThirdStoryFragment.kt @@ -11,10 +11,14 @@ class ThirdStoryFragment : override fun onViewCreated(view: View, savedInstanceState: Bundle?) { super.onViewCreated(view, savedInstanceState) - bringSpeechBubbleToFront() + bringTextToFront() } - private fun bringSpeechBubbleToFront() { - binding.tvStoryWineyCountrySpeechBubble.bringToFront() + private fun bringTextToFront() { + with(binding) { + tvStorySaverSpeechBubble.bringToFront() + tvStoryWineyCountryName.bringToFront() + tvStoryWineyCountrySpeechBubble.bringToFront() + } } } diff --git a/app/src/main/res/layout/fragment_first_story.xml b/app/src/main/res/layout/fragment_first_story.xml index 20af2faf..286dc017 100644 --- a/app/src/main/res/layout/fragment_first_story.xml +++ b/app/src/main/res/layout/fragment_first_story.xml @@ -45,6 +45,7 @@ android:text="@string/story_saver_first_speech_bubble" android:textAppearance="@style/TextAppearance.WINEY.body_b_16" app:layout_constraintEnd_toEndOf="@id/tv_story_saver_name" + app:layout_constraintStart_toTopOf="@id/tv_story_saver_name" app:layout_constraintTop_toBottomOf="@id/tv_story_saver_name" /> Date: Fri, 25 Aug 2023 12:17:56 +0900 Subject: [PATCH 05/12] =?UTF-8?q?[ui]=20#150=20=EC=8A=A4=ED=86=A0=EB=A6=AC?= =?UTF-8?q?=20=ED=99=94=EB=A9=B4=20=ED=85=8D=EC=8A=A4=ED=8A=B8=20=EC=BB=AC?= =?UTF-8?q?=EB=9F=AC=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/res/layout/activity_story.xml | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/app/src/main/res/layout/activity_story.xml b/app/src/main/res/layout/activity_story.xml index 2be76aec..1cac32f6 100644 --- a/app/src/main/res/layout/activity_story.xml +++ b/app/src/main/res/layout/activity_story.xml @@ -49,7 +49,7 @@ android:layout_height="wrap_content" android:text="@{@string/story_nav_number(vm.pageNumber)}" android:textAppearance="@style/TextAppearance.WINEY.body_m_14" - android:textColor="@color/gray_400" + android:textColor="@color/gray_900" app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toTopOf="parent" tools:text="@string/story_nav_num_preview" /> @@ -71,9 +71,10 @@ android:layout_marginTop="10dp" android:text="@{vm.detailText}" android:textAppearance="@style/TextAppearance.WINEY.body_m_16" - android:textColor="@color/gray_600" + android:textColor="@color/gray_500" app:layout_constraintStart_toStartOf="@id/tv_story_nav_title" - app:layout_constraintTop_toBottomOf="@id/tv_story_nav_title" /> + app:layout_constraintTop_toBottomOf="@id/tv_story_nav_title" + tools:text="@string/story_first_detail_text" /> Date: Fri, 25 Aug 2023 12:28:16 +0900 Subject: [PATCH 06/12] =?UTF-8?q?[feat]=20#150=20=EC=84=B8=EA=B3=84?= =?UTF-8?q?=EA=B4=80=20=EC=8A=A4=ED=86=A0=EB=A6=AC=ED=85=94=EB=A7=81=20?= =?UTF-8?q?=ED=99=94=EB=A9=B4=EC=97=90=EC=84=9C=20=EB=A9=94=EC=9D=B8=20?= =?UTF-8?q?=ED=94=BC=EB=93=9C=EB=A1=9C=20=EA=B1=B4=EB=84=88=EB=9B=B0?= =?UTF-8?q?=EB=8A=94=20=EA=B8=B0=EB=8A=A5=20=EA=B5=AC=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../onboarding/story/StoryActivity.kt | 15 +++++++++++++++ app/src/main/res/layout/activity_story.xml | 12 ++++++++++++ app/src/main/res/layout/fragment_first_story.xml | 1 - app/src/main/res/values/strings.xml | 1 + 4 files changed, 28 insertions(+), 1 deletion(-) diff --git a/app/src/main/java/com/android/go/sopt/winey/presentation/onboarding/story/StoryActivity.kt b/app/src/main/java/com/android/go/sopt/winey/presentation/onboarding/story/StoryActivity.kt index 7176be4a..f41b3fa8 100644 --- a/app/src/main/java/com/android/go/sopt/winey/presentation/onboarding/story/StoryActivity.kt +++ b/app/src/main/java/com/android/go/sopt/winey/presentation/onboarding/story/StoryActivity.kt @@ -10,6 +10,7 @@ import androidx.fragment.app.commit import androidx.fragment.app.replace import com.android.go.sopt.winey.R import com.android.go.sopt.winey.databinding.ActivityStoryBinding +import com.android.go.sopt.winey.presentation.main.MainActivity import com.android.go.sopt.winey.presentation.nickname.NicknameActivity import com.android.go.sopt.winey.util.binding.BindingActivity import com.android.go.sopt.winey.util.context.colorOf @@ -27,6 +28,13 @@ class StoryActivity : BindingActivity(R.layout.activity_st setUpDefaultNavigationText() setUpDefaultFragment(savedInstanceState) initNextButtonClickListener() + initSkipButtonClickListener() + } + + private fun initSkipButtonClickListener() { + binding.tvStorySkip.setOnClickListener { + navigateToMainScreen() + } } private fun initNextButtonClickListener() { @@ -84,6 +92,13 @@ class StoryActivity : BindingActivity(R.layout.activity_st } } + private fun navigateToMainScreen() { + Intent(this, MainActivity::class.java).apply { + addFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK or Intent.FLAG_ACTIVITY_NEW_TASK) + startActivity(this) + } + } + companion object { private const val FIRST_PAGE_NUM = 1 private const val EXTRA_KEY = "PREV_SCREEN_NAME" diff --git a/app/src/main/res/layout/activity_story.xml b/app/src/main/res/layout/activity_story.xml index 1cac32f6..513be57d 100644 --- a/app/src/main/res/layout/activity_story.xml +++ b/app/src/main/res/layout/activity_story.xml @@ -54,6 +54,18 @@ app:layout_constraintTop_toTopOf="parent" tools:text="@string/story_nav_num_preview" /> + + 삭제하기 신고하기 + 건너뛰기 From 41b9991719abca5e2f3de5add74fe874ec96d101 Mon Sep 17 00:00:00 2001 From: leeeha Date: Fri, 25 Aug 2023 13:29:45 +0900 Subject: [PATCH 07/12] =?UTF-8?q?[fix]=20#150=20=EB=8B=89=EB=84=A4?= =?UTF-8?q?=EC=9E=84=20=EC=A4=91=EB=B3=B5=ED=99=95=EC=9D=B8=20=EB=B2=84?= =?UTF-8?q?=ED=8A=BC=20=EA=B0=9C=ED=96=89=EB=90=98=EB=8A=94=20=EC=9D=B4?= =?UTF-8?q?=EC=8A=88=20=ED=95=B4=EA=B2=B0=20(Linear=20=EB=8C=80=EC=8B=A0?= =?UTF-8?q?=20Constraint=20=EB=A0=88=EC=9D=B4=EC=95=84=EC=9B=83=20?= =?UTF-8?q?=EC=82=AC=EC=9A=A9)?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- app/src/main/res/layout/activity_nickname.xml | 29 +++++++++++-------- 1 file changed, 17 insertions(+), 12 deletions(-) diff --git a/app/src/main/res/layout/activity_nickname.xml b/app/src/main/res/layout/activity_nickname.xml index bdc6d2e9..5d1eb0bd 100644 --- a/app/src/main/res/layout/activity_nickname.xml +++ b/app/src/main/res/layout/activity_nickname.xml @@ -50,21 +50,25 @@ app:layout_constraintStart_toStartOf="@id/tv_nickname_title" app:layout_constraintTop_toBottomOf="@id/tv_nickname_title" /> - + android:layout_height="0dp" + android:layout_marginEnd="10dp" + app:layout_constraintBottom_toBottomOf="parent" + app:layout_constraintEnd_toStartOf="@id/btn_nickname_duplicate_check" + app:layout_constraintStart_toStartOf="parent" + app:layout_constraintTop_toTopOf="parent"> - + + app:layout_constraintStart_toStartOf="@id/cl_nickname_container" + app:layout_constraintTop_toBottomOf="@id/cl_nickname_container" /> Date: Fri, 25 Aug 2023 14:21:26 +0900 Subject: [PATCH 08/12] =?UTF-8?q?[mod]=20#150=20=EB=B0=94=EC=9D=B8?= =?UTF-8?q?=EB=94=A9=20=EC=96=B4=EB=8C=91=ED=84=B0=20=EC=82=AC=EC=9A=A9?= =?UTF-8?q?=ED=95=B4=EC=84=9C=20=EB=8B=89=EB=84=A4=EC=9E=84=20close=20?= =?UTF-8?q?=EB=B2=84=ED=8A=BC,=20=ED=83=80=EC=9D=B4=ED=8B=80=20=ED=85=8D?= =?UTF-8?q?=EC=8A=A4=ED=8A=B8,=20=EB=B2=84=ED=8A=BC=20=ED=85=8D=EC=8A=A4?= =?UTF-8?q?=ED=8A=B8=20=EC=A1=B0=EC=A0=95=ED=95=98=EB=8F=84=EB=A1=9D=20?= =?UTF-8?q?=EB=B3=80=EA=B2=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../presentation/nickname/NicknameActivity.kt | 29 ++------------- .../nickname/NicknameViewModel.kt | 6 ++++ .../sopt/winey/util/binding/BindingAdapter.kt | 36 +++++++++++++++++++ app/src/main/res/layout/activity_nickname.xml | 9 +++-- app/src/main/res/values/strings.xml | 3 +- 5 files changed, 54 insertions(+), 29 deletions(-) diff --git a/app/src/main/java/com/android/go/sopt/winey/presentation/nickname/NicknameActivity.kt b/app/src/main/java/com/android/go/sopt/winey/presentation/nickname/NicknameActivity.kt index fddd7f93..acfb8f11 100644 --- a/app/src/main/java/com/android/go/sopt/winey/presentation/nickname/NicknameActivity.kt +++ b/app/src/main/java/com/android/go/sopt/winey/presentation/nickname/NicknameActivity.kt @@ -5,7 +5,6 @@ import android.content.Intent import android.os.Bundle import android.text.Editable import android.text.TextWatcher -import android.view.View import androidx.activity.viewModels import androidx.lifecycle.flowWithLifecycle import androidx.lifecycle.lifecycleScope @@ -15,7 +14,6 @@ import com.android.go.sopt.winey.presentation.main.MainActivity import com.android.go.sopt.winey.util.binding.BindingActivity import com.android.go.sopt.winey.util.context.hideKeyboard import com.android.go.sopt.winey.util.context.snackBar -import com.android.go.sopt.winey.util.context.stringOf import com.android.go.sopt.winey.util.view.UiState import dagger.hilt.android.AndroidEntryPoint import kotlinx.coroutines.flow.launchIn @@ -29,42 +27,21 @@ class NicknameActivity : BindingActivity(R.layout.activ override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) binding.vm = viewModel + viewModel.updatePrevScreenName(prevScreenName) - switchCloseButtonVisibility() initCloseButtonClickListener() - switchTitleText() - initRootLayoutClickListener() initEditTextWatcher() initDuplicateCheckButtonClickListener() initPatchNicknameStateObserver() } - private fun switchCloseButtonVisibility() { - when (prevScreenName) { - STORY_SCREEN -> binding.ivNicknameClose.visibility = View.GONE - MY_PAGE_SCREEN -> binding.ivNicknameClose.visibility = View.VISIBLE - } - } - private fun initCloseButtonClickListener() { binding.ivNicknameClose.setOnClickListener { finish() } } - private fun switchTitleText() { - when (prevScreenName) { - STORY_SCREEN -> - binding.tvNicknameTitle.text = - stringOf(R.string.nickname_default_title) - - MY_PAGE_SCREEN -> - binding.tvNicknameTitle.text = - stringOf(R.string.nickname_mypage_title) - } - } - private fun initEditTextWatcher() { var prevText = "" binding.etNickname.addTextChangedListener(object : TextWatcher { @@ -127,7 +104,7 @@ class NicknameActivity : BindingActivity(R.layout.activ companion object { private const val EXTRA_KEY = "PREV_SCREEN_NAME" - private const val MY_PAGE_SCREEN = "MyPageFragment" - private const val STORY_SCREEN = "StoryActivity" + const val MY_PAGE_SCREEN = "MyPageFragment" + const val STORY_SCREEN = "StoryActivity" } } diff --git a/app/src/main/java/com/android/go/sopt/winey/presentation/nickname/NicknameViewModel.kt b/app/src/main/java/com/android/go/sopt/winey/presentation/nickname/NicknameViewModel.kt index 61cc0ac6..e60f2f45 100644 --- a/app/src/main/java/com/android/go/sopt/winey/presentation/nickname/NicknameViewModel.kt +++ b/app/src/main/java/com/android/go/sopt/winey/presentation/nickname/NicknameViewModel.kt @@ -58,6 +58,12 @@ class NicknameViewModel @Inject constructor( private val _patchNicknameState = MutableStateFlow>(UiState.Empty) val patchNicknameState: StateFlow> = _patchNicknameState.asStateFlow() + var prevScreenName: String? = null + + fun updatePrevScreenName(name: String?) { + prevScreenName = name + } + private fun validateNickname(state: InputUiState) = state == InputUiState.Success fun patchNickname() { diff --git a/app/src/main/java/com/android/go/sopt/winey/util/binding/BindingAdapter.kt b/app/src/main/java/com/android/go/sopt/winey/util/binding/BindingAdapter.kt index 42388e1f..397cffa3 100644 --- a/app/src/main/java/com/android/go/sopt/winey/util/binding/BindingAdapter.kt +++ b/app/src/main/java/com/android/go/sopt/winey/util/binding/BindingAdapter.kt @@ -11,6 +11,8 @@ import androidx.databinding.BindingAdapter import coil.load import coil.transform.RoundedCornersTransformation import com.android.go.sopt.winey.R +import com.android.go.sopt.winey.presentation.nickname.NicknameActivity.Companion.MY_PAGE_SCREEN +import com.android.go.sopt.winey.presentation.nickname.NicknameActivity.Companion.STORY_SCREEN import com.android.go.sopt.winey.util.code.ErrorCode.* import com.android.go.sopt.winey.util.context.colorOf import com.android.go.sopt.winey.util.context.drawableOf @@ -132,6 +134,40 @@ fun TextView.setNicknameHelperTextColor(inputUiState: InputUiState) { } } +@BindingAdapter("switchCloseButtonVisibility") +fun ImageView.switchCloseButtonVisibility(prevScreenName: String) { + when (prevScreenName) { + STORY_SCREEN -> visibility = View.GONE + MY_PAGE_SCREEN -> visibility = View.VISIBLE + } +} + +@BindingAdapter("switchTitleText") +fun TextView.switchTitleText(prevScreenName: String) { + when (prevScreenName) { + STORY_SCREEN -> + text = + context.stringOf(R.string.nickname_default_title) + + MY_PAGE_SCREEN -> + text = + context.stringOf(R.string.nickname_mypage_title) + } +} + +@BindingAdapter("switchCompleteButtonText") +fun TextView.switchCompleteButtonText(prevScreenName: String) { + when (prevScreenName) { + STORY_SCREEN -> + text = + context.stringOf(R.string.nickname_start_btn_text) + + MY_PAGE_SCREEN -> + text = + context.stringOf(R.string.nickname_update_complete_btn_text) + } +} + @BindingAdapter("setFeedLikeImage") fun setLikeImage(view: ImageView, isLiked: Boolean) { val imageRes = if (isLiked) { diff --git a/app/src/main/res/layout/activity_nickname.xml b/app/src/main/res/layout/activity_nickname.xml index 5d1eb0bd..65a3615c 100644 --- a/app/src/main/res/layout/activity_nickname.xml +++ b/app/src/main/res/layout/activity_nickname.xml @@ -9,6 +9,8 @@ name="vm" type="com.android.go.sopt.winey.presentation.nickname.NicknameViewModel" /> + + @@ -23,6 +25,7 @@ android:layout_height="wrap_content" android:paddingHorizontal="12dp" android:paddingVertical="16dp" + switchCloseButtonVisibility="@{vm.prevScreenName}" android:src="@drawable/ic_upload_nickname_close" app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toTopOf="parent" /> @@ -33,7 +36,8 @@ android:layout_height="wrap_content" android:layout_marginHorizontal="20dp" android:layout_marginTop="82dp" - android:text="@string/nickname_default_title" + switchTitleText="@{vm.prevScreenName}" + tools:text="@string/nickname_default_title" android:textAppearance="@style/TextAppearance.WINEY.Headline_b_20_xl" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintStart_toStartOf="parent" @@ -142,7 +146,8 @@ android:insetBottom="0dp" android:onClick="@{()->vm.patchNickname()}" android:stateListAnimator="@null" - android:text="@string/nickname_complete_btn_text" + switchCompleteButtonText="@{vm.prevScreenName}" + tools:text="@string/nickname_update_complete_btn_text" android:textColor="@drawable/sel_upload_nickname_btn_text_color" app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintEnd_toEndOf="parent" diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 5c1fd3c4..44d24310 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -137,7 +137,8 @@ 닉네임 입력 (%d/8) 중복확인 - 확인 + 확인 + 시작하기 1~8자로 입력해주세요 :( 공백과 특수문자는 사용할 수 없습니다 :( 닉네임 중복확인을 해주세요 :( From 9d8f3fe6ccd1d66567b32f9bc678292327a2b3f8 Mon Sep 17 00:00:00 2001 From: leeeha Date: Fri, 25 Aug 2023 14:41:58 +0900 Subject: [PATCH 09/12] =?UTF-8?q?[ui]=20#150=20=EB=8B=89=EB=84=A4=EC=9E=84?= =?UTF-8?q?=20=ED=85=8D=EC=8A=A4=ED=8A=B8=20=ED=95=84=EB=93=9C=20=ED=85=8C?= =?UTF-8?q?=EB=91=90=EB=A6=AC=20=EC=83=89=EC=83=81,=20=EB=8B=89=EB=84=A4?= =?UTF-8?q?=EC=9E=84=20=EC=A4=91=EB=B3=B5=ED=99=95=EC=9D=B8=20=EB=B2=84?= =?UTF-8?q?=ED=8A=BC=20=EC=83=89=EC=83=81=20=EB=B3=80=EA=B2=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../sel_nickname_edittext_focus_color.xml | 4 ++-- ...rect.xml => shape_gray200_line_5_rect.xml} | 3 --- .../drawable/shape_gray900_line_5_rect.xml | 7 ++++++ .../drawable/shape_gray900_line_cursor.xml | 5 ++++ app/src/main/res/layout/activity_nickname.xml | 23 ++++++++++--------- 5 files changed, 26 insertions(+), 16 deletions(-) rename app/src/main/res/drawable/{shape_gray_line_5_rect.xml => shape_gray200_line_5_rect.xml} (98%) create mode 100644 app/src/main/res/drawable/shape_gray900_line_5_rect.xml create mode 100644 app/src/main/res/drawable/shape_gray900_line_cursor.xml diff --git a/app/src/main/res/drawable/sel_nickname_edittext_focus_color.xml b/app/src/main/res/drawable/sel_nickname_edittext_focus_color.xml index 3828bbf9..1cba5ce9 100644 --- a/app/src/main/res/drawable/sel_nickname_edittext_focus_color.xml +++ b/app/src/main/res/drawable/sel_nickname_edittext_focus_color.xml @@ -1,5 +1,5 @@ - - + + diff --git a/app/src/main/res/drawable/shape_gray_line_5_rect.xml b/app/src/main/res/drawable/shape_gray200_line_5_rect.xml similarity index 98% rename from app/src/main/res/drawable/shape_gray_line_5_rect.xml rename to app/src/main/res/drawable/shape_gray200_line_5_rect.xml index fd9d6378..f2cc0e4a 100644 --- a/app/src/main/res/drawable/shape_gray_line_5_rect.xml +++ b/app/src/main/res/drawable/shape_gray200_line_5_rect.xml @@ -1,11 +1,8 @@ - - - diff --git a/app/src/main/res/drawable/shape_gray900_line_5_rect.xml b/app/src/main/res/drawable/shape_gray900_line_5_rect.xml new file mode 100644 index 00000000..33abda86 --- /dev/null +++ b/app/src/main/res/drawable/shape_gray900_line_5_rect.xml @@ -0,0 +1,7 @@ + + + + + diff --git a/app/src/main/res/drawable/shape_gray900_line_cursor.xml b/app/src/main/res/drawable/shape_gray900_line_cursor.xml new file mode 100644 index 00000000..be7893c2 --- /dev/null +++ b/app/src/main/res/drawable/shape_gray900_line_cursor.xml @@ -0,0 +1,5 @@ + + + + + diff --git a/app/src/main/res/layout/activity_nickname.xml b/app/src/main/res/layout/activity_nickname.xml index 65a3615c..60493e01 100644 --- a/app/src/main/res/layout/activity_nickname.xml +++ b/app/src/main/res/layout/activity_nickname.xml @@ -21,27 +21,27 @@ + app:layout_constraintTop_toTopOf="parent" + tools:text="@string/nickname_default_title" /> @@ -114,12 +114,13 @@ android:text="@string/nickname_duplicate_check" android:textAppearance="@style/TextAppearance.WINEY.body_m_14" android:textColor="@color/gray_700" - app:backgroundTint="@color/gray_50" + app:backgroundTint="@color/winey_yellow" app:cornerRadius="5dp" + app:rippleColor="@android:color/transparent" app:layout_constraintBottom_toBottomOf="parent" app:layout_constraintEnd_toEndOf="parent" - app:layout_constraintTop_toTopOf="parent" - app:rippleColor="@color/purple_200" /> + app:layout_constraintTop_toTopOf="parent" /> + + app:layout_constraintStart_toStartOf="parent" + tools:text="@string/nickname_update_complete_btn_text" /> From 55a50154798a21fd45118cd368cf8edaaa313190 Mon Sep 17 00:00:00 2001 From: leeeha Date: Fri, 25 Aug 2023 15:23:41 +0900 Subject: [PATCH 10/12] =?UTF-8?q?[mod]=20#150=20=EB=A7=88=EC=9D=B4?= =?UTF-8?q?=ED=8E=98=EC=9D=B4=EC=A7=80=EC=97=90=EC=84=9C=20=EB=8B=89?= =?UTF-8?q?=EB=84=A4=EC=9E=84=20=EC=88=98=EC=A0=95=ED=95=A0=20=EB=95=8C?= =?UTF-8?q?=EB=8A=94=20=ED=9E=8C=ED=8A=B8=EB=A1=9C=20=EA=B8=B0=EC=A1=B4=20?= =?UTF-8?q?=EB=8B=89=EB=84=A4=EC=9E=84=EC=9D=B4=20=EB=B3=B4=EC=9D=B4?= =?UTF-8?q?=EB=8F=84=EB=A1=9D=20=EA=B5=AC=ED=98=84?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../presentation/nickname/NicknameActivity.kt | 21 +++++++++++++++++++ app/src/main/res/layout/activity_nickname.xml | 2 +- app/src/main/res/values/strings.xml | 2 +- 3 files changed, 23 insertions(+), 2 deletions(-) diff --git a/app/src/main/java/com/android/go/sopt/winey/presentation/nickname/NicknameActivity.kt b/app/src/main/java/com/android/go/sopt/winey/presentation/nickname/NicknameActivity.kt index acfb8f11..92dea8c5 100644 --- a/app/src/main/java/com/android/go/sopt/winey/presentation/nickname/NicknameActivity.kt +++ b/app/src/main/java/com/android/go/sopt/winey/presentation/nickname/NicknameActivity.kt @@ -10,32 +10,53 @@ import androidx.lifecycle.flowWithLifecycle import androidx.lifecycle.lifecycleScope import com.android.go.sopt.winey.R import com.android.go.sopt.winey.databinding.ActivityNicknameBinding +import com.android.go.sopt.winey.domain.repository.DataStoreRepository import com.android.go.sopt.winey.presentation.main.MainActivity import com.android.go.sopt.winey.util.binding.BindingActivity import com.android.go.sopt.winey.util.context.hideKeyboard import com.android.go.sopt.winey.util.context.snackBar +import com.android.go.sopt.winey.util.context.stringOf import com.android.go.sopt.winey.util.view.UiState import dagger.hilt.android.AndroidEntryPoint +import kotlinx.coroutines.flow.first import kotlinx.coroutines.flow.launchIn import kotlinx.coroutines.flow.onEach +import kotlinx.coroutines.launch +import javax.inject.Inject @AndroidEntryPoint class NicknameActivity : BindingActivity(R.layout.activity_nickname) { private val viewModel by viewModels() private val prevScreenName by lazy { intent.extras?.getString(EXTRA_KEY, "") } + @Inject + lateinit var dataStoreRepository: DataStoreRepository + override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) binding.vm = viewModel viewModel.updatePrevScreenName(prevScreenName) initCloseButtonClickListener() + switchEditTextHint() initRootLayoutClickListener() initEditTextWatcher() initDuplicateCheckButtonClickListener() initPatchNicknameStateObserver() } + private fun switchEditTextHint() { + lifecycleScope.launch { + when (prevScreenName) { + STORY_SCREEN -> binding.etNickname.hint = stringOf(R.string.nickname_default_hint) + MY_PAGE_SCREEN -> { + val user = dataStoreRepository.getUserInfo().first() ?: return@launch + binding.etNickname.hint = user.nickname + } + } + } + } + private fun initCloseButtonClickListener() { binding.ivNicknameClose.setOnClickListener { finish() diff --git a/app/src/main/res/layout/activity_nickname.xml b/app/src/main/res/layout/activity_nickname.xml index 60493e01..29fa48bb 100644 --- a/app/src/main/res/layout/activity_nickname.xml +++ b/app/src/main/res/layout/activity_nickname.xml @@ -79,7 +79,7 @@ setNicknameBackground="@{vm.inputUiState}" android:layout_width="match_parent" android:layout_height="match_parent" - android:hint="@string/nickname_hint" + android:hint="@string/nickname_default_hint" android:importantForAutofill="no" android:inputType="text" android:maxLength="@{vm.MAX_LENGTH}" diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 44d24310..94fd2b99 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -134,7 +134,7 @@ 위니제국에 들어온 당신,\n어떤 닉네임으로 불리고 싶나요? 위니제국의 국민인 당신,\n어떤 닉네임으로 바꾸고 싶나요? 공백 또는 특수문자는 사용할 수 없습니다 - 닉네임 입력 + 닉네임 입력 (%d/8) 중복확인 확인 From 096095270a2f50f9b659969006ee198aace42214 Mon Sep 17 00:00:00 2001 From: leeeha Date: Fri, 25 Aug 2023 17:33:36 +0900 Subject: [PATCH 11/12] =?UTF-8?q?[mod]=20#150=20=EB=8B=89=EB=84=A4?= =?UTF-8?q?=EC=9E=84=20=EC=A4=91=EB=B3=B5=EC=B2=B4=ED=81=AC=EB=A5=BC=20?= =?UTF-8?q?=ED=95=98=EC=A7=80=20=EC=95=8A=EC=9D=80=20=EC=83=81=ED=83=9C?= =?UTF-8?q?=EC=97=90=EC=84=9C=20=ED=99=95=EC=9D=B8=20=EB=B2=84=ED=8A=BC?= =?UTF-8?q?=EC=9D=84=20=EB=88=84=EB=A5=B4=EB=A9=B4=20=EC=97=90=EB=9F=AC=20?= =?UTF-8?q?=ED=91=9C=EC=8B=9C=ED=95=98=EB=8F=84=EB=A1=9D=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 --- .../presentation/nickname/NicknameActivity.kt | 70 ++++++++++------ .../nickname/NicknameViewModel.kt | 84 +++++-------------- .../sopt/winey/util/binding/BindingAdapter.kt | 12 +++ .../sel_upload_nickname_btn_color.xml | 4 +- ...ect.xml => shape_gray200_fill_10_rect.xml} | 0 app/src/main/res/layout/activity_nickname.xml | 17 ++-- 6 files changed, 87 insertions(+), 100 deletions(-) rename app/src/main/res/drawable/{shape_gray_fill_10_rect.xml => shape_gray200_fill_10_rect.xml} (100%) diff --git a/app/src/main/java/com/android/go/sopt/winey/presentation/nickname/NicknameActivity.kt b/app/src/main/java/com/android/go/sopt/winey/presentation/nickname/NicknameActivity.kt index 92dea8c5..6ee1348c 100644 --- a/app/src/main/java/com/android/go/sopt/winey/presentation/nickname/NicknameActivity.kt +++ b/app/src/main/java/com/android/go/sopt/winey/presentation/nickname/NicknameActivity.kt @@ -13,9 +13,11 @@ import com.android.go.sopt.winey.databinding.ActivityNicknameBinding import com.android.go.sopt.winey.domain.repository.DataStoreRepository import com.android.go.sopt.winey.presentation.main.MainActivity import com.android.go.sopt.winey.util.binding.BindingActivity +import com.android.go.sopt.winey.util.code.ErrorCode import com.android.go.sopt.winey.util.context.hideKeyboard import com.android.go.sopt.winey.util.context.snackBar import com.android.go.sopt.winey.util.context.stringOf +import com.android.go.sopt.winey.util.view.InputUiState import com.android.go.sopt.winey.util.view.UiState import dagger.hilt.android.AndroidEntryPoint import kotlinx.coroutines.flow.first @@ -37,40 +39,28 @@ class NicknameActivity : BindingActivity(R.layout.activ binding.vm = viewModel viewModel.updatePrevScreenName(prevScreenName) + initRootLayoutClickListener() initCloseButtonClickListener() switchEditTextHint() - initRootLayoutClickListener() + initEditTextWatcher() initDuplicateCheckButtonClickListener() + initCompleteButtonClickListener() initPatchNicknameStateObserver() } - private fun switchEditTextHint() { - lifecycleScope.launch { - when (prevScreenName) { - STORY_SCREEN -> binding.etNickname.hint = stringOf(R.string.nickname_default_hint) - MY_PAGE_SCREEN -> { - val user = dataStoreRepository.getUserInfo().first() ?: return@launch - binding.etNickname.hint = user.nickname - } - } - } - } - - private fun initCloseButtonClickListener() { - binding.ivNicknameClose.setOnClickListener { - finish() - } - } - private fun initEditTextWatcher() { var prevText = "" binding.etNickname.addTextChangedListener(object : TextWatcher { override fun beforeTextChanged(s: CharSequence?, start: Int, count: Int, after: Int) {} override fun afterTextChanged(s: Editable?) {} + + // 텍스트가 바뀌면 중복체크 상태 false로 초기화 override fun onTextChanged(s: CharSequence?, start: Int, before: Int, count: Int) { val inputText = s.toString() - viewModel.updateTextChangedState(inputText.isNotBlank() && inputText != prevText) + if (inputText.isNotBlank() && inputText != prevText) { + viewModel.updateDuplicateCheckState(false) + } prevText = inputText } }) @@ -78,11 +68,23 @@ class NicknameActivity : BindingActivity(R.layout.activ private fun initDuplicateCheckButtonClickListener() { binding.btnNicknameDuplicateCheck.setOnClickListener { - if (viewModel.isTextChanged.value) { - viewModel.apply { - updateDuplicateCheckButtonState(true) - getNicknameDuplicateCheck() - } + viewModel.getNicknameDuplicateCheck() + } + } + + private fun initCompleteButtonClickListener() { + binding.btnNicknameComplete.setOnClickListener { + // 중복체크를 하지 않은 상태에서 완료 버튼을 클릭하면 에러 표시 + if (!viewModel.isDuplicateChecked.value) { + viewModel.updateInputUiState( + InputUiState.Failure(ErrorCode.CODE_UNCHECKED_DUPLICATION) + ) + return@setOnClickListener + } + + // 서버통신 결과 중복되지 않은 닉네임인 경우에만 PATCH 서버통신 진행 + if (viewModel.isValidNickname.value) { + viewModel.patchNickname() } } } @@ -109,6 +111,24 @@ class NicknameActivity : BindingActivity(R.layout.activ binding.btnNicknameComplete.isClickable = false } + private fun switchEditTextHint() { + lifecycleScope.launch { + when (prevScreenName) { + STORY_SCREEN -> binding.etNickname.hint = stringOf(R.string.nickname_default_hint) + MY_PAGE_SCREEN -> { + val user = dataStoreRepository.getUserInfo().first() ?: return@launch + binding.etNickname.hint = user.nickname + } + } + } + } + + private fun initCloseButtonClickListener() { + binding.ivNicknameClose.setOnClickListener { + finish() + } + } + private fun initRootLayoutClickListener() { binding.root.setOnClickListener { hideKeyboard(binding.root) diff --git a/app/src/main/java/com/android/go/sopt/winey/presentation/nickname/NicknameViewModel.kt b/app/src/main/java/com/android/go/sopt/winey/presentation/nickname/NicknameViewModel.kt index e60f2f45..feb2fa0f 100644 --- a/app/src/main/java/com/android/go/sopt/winey/presentation/nickname/NicknameViewModel.kt +++ b/app/src/main/java/com/android/go/sopt/winey/presentation/nickname/NicknameViewModel.kt @@ -7,7 +7,6 @@ import com.android.go.sopt.winey.domain.repository.AuthRepository import com.android.go.sopt.winey.util.code.ErrorCode.CODE_DUPLICATE import com.android.go.sopt.winey.util.code.ErrorCode.CODE_INVALID_LENGTH import com.android.go.sopt.winey.util.code.ErrorCode.CODE_SPACE_SPECIAL_CHAR -import com.android.go.sopt.winey.util.code.ErrorCode.CODE_UNCHECKED_DUPLICATION import com.android.go.sopt.winey.util.view.InputUiState import com.android.go.sopt.winey.util.view.UiState import dagger.hilt.android.lifecycle.HiltViewModel @@ -32,12 +31,11 @@ class NicknameViewModel @Inject constructor( val nickname: String get() = _nickname.value private val _inputUiState: MutableStateFlow = - _nickname.map { updateInputUiState(it) } + _nickname.map { checkInputUiState(it) } .mutableStateIn( initialValue = InputUiState.Empty, scope = viewModelScope ) - val inputUiState: StateFlow = _inputUiState.asStateFlow() val isValidNickname: StateFlow = _inputUiState.map { validateNickname(it) } @@ -46,25 +44,29 @@ class NicknameViewModel @Inject constructor( scope = viewModelScope, started = SharingStarted.WhileSubscribed(PRODUCE_STOP_TIMEOUT) ) + private fun validateNickname(state: InputUiState) = state == InputUiState.Success - private val _isTextChanged = MutableStateFlow(false) - val isTextChanged: StateFlow = _isTextChanged.asStateFlow() - - private val _isCheckBtnClicked = MutableStateFlow(false) - val isCheckBtnClicked: StateFlow = _isCheckBtnClicked.asStateFlow() - - private var prevCheckResult: Pair? = null + private val _isDuplicateChecked = MutableStateFlow(false) + val isDuplicateChecked: StateFlow = _isDuplicateChecked.asStateFlow() private val _patchNicknameState = MutableStateFlow>(UiState.Empty) val patchNicknameState: StateFlow> = _patchNicknameState.asStateFlow() + private var prevCheckResult: Pair? = null + var prevScreenName: String? = null fun updatePrevScreenName(name: String?) { prevScreenName = name } - private fun validateNickname(state: InputUiState) = state == InputUiState.Success + fun updateInputUiState(inputUiState: InputUiState) { + _inputUiState.value = inputUiState + } + + fun updateDuplicateCheckState(checked: Boolean) { + _isDuplicateChecked.value = checked + } fun patchNickname() { viewModelScope.launch { @@ -93,10 +95,10 @@ class NicknameViewModel @Inject constructor( if (response == null) return@onSuccess response.isDuplicated.let { - Timber.d("SUCCESS GET DUPLICATION CHECK: $it") - updateDuplicateCheckState(it) - saveDuplicateCheckState(it) + showDuplicateCheckResult(it) + saveDuplicateCheckResult(it) } + updateDuplicateCheckState(true) } .onFailure { t -> Timber.e("${t.message}") @@ -104,7 +106,7 @@ class NicknameViewModel @Inject constructor( } } - private fun updateDuplicateCheckState(isDuplicated: Boolean) { + private fun showDuplicateCheckResult(isDuplicated: Boolean) { _inputUiState.value = if (isDuplicated) { InputUiState.Failure(CODE_DUPLICATE) } else { @@ -112,70 +114,24 @@ class NicknameViewModel @Inject constructor( } } - // 서버통신 할 때마다 현재 닉네임과 중복여부를 저장한다. - private fun saveDuplicateCheckState(isDuplicated: Boolean) { + private fun saveDuplicateCheckResult(isDuplicated: Boolean) { prevCheckResult = Pair(nickname, isDuplicated) } - private fun updateInputUiState(nickname: String): InputUiState { + private fun checkInputUiState(nickname: String): InputUiState { if (nickname.isEmpty()) return InputUiState.Empty if (!checkLength(nickname)) return InputUiState.Failure(CODE_INVALID_LENGTH) if (containsSpaceOrSpecialChar(nickname)) { - return InputUiState.Failure( - CODE_SPACE_SPECIAL_CHAR - ) - } - - // 텍스트가 바뀌었는데 중복체크 버튼을 누르지 않은 경우 - if (isTextChanged.value && !isCheckBtnClicked.value) { - return comparePrevCheckResult() + return InputUiState.Failure(CODE_SPACE_SPECIAL_CHAR) } - return InputUiState.Empty } - private fun comparePrevCheckResult(): InputUiState { - // 이전에 서버통신 한 결과가 없는 경우 - if (prevCheckResult == null) { - Timber.d("CASE 1") - return InputUiState.Failure(CODE_UNCHECKED_DUPLICATION) - } - - // 현재 입력값이 이전에 서버통신 했던 닉네임과 일치하는 경우 - if (nickname == prevCheckResult?.first) { - // 그때 당시의 서버통신 결과 그대로 반환 - if (prevCheckResult?.second == true) { - Timber.d("CASE 2") - return InputUiState.Failure(CODE_DUPLICATE) - } - - Timber.d("CASE 3") - return InputUiState.Success - } - - // 이전에 서버통신한 결과가 있지만, 입력값이 다른 경우 - Timber.d("CASE 4") - return InputUiState.Failure(CODE_UNCHECKED_DUPLICATION) - } - private fun checkLength(nickname: String) = nickname.length in MIN_LENGTH..MAX_LENGTH private fun containsSpaceOrSpecialChar(nickname: String) = !Regex(REGEX_PATTERN).matches(nickname) - fun updateTextChangedState(state: Boolean) { // updated in Activity - _isTextChanged.value = state - } - - fun updateDuplicateCheckButtonState(state: Boolean) { // updated in Activity - _isCheckBtnClicked.value = state - initDuplicateCheckButtonState() - } - - private fun initDuplicateCheckButtonState() { - _isCheckBtnClicked.value = false - } - // _nickname.map{} Flow -> MutableStateFlow 변환을 위한 확장 함수 private fun Flow.mutableStateIn( initialValue: T, diff --git a/app/src/main/java/com/android/go/sopt/winey/util/binding/BindingAdapter.kt b/app/src/main/java/com/android/go/sopt/winey/util/binding/BindingAdapter.kt index 397cffa3..5906cae0 100644 --- a/app/src/main/java/com/android/go/sopt/winey/util/binding/BindingAdapter.kt +++ b/app/src/main/java/com/android/go/sopt/winey/util/binding/BindingAdapter.kt @@ -7,6 +7,7 @@ import android.widget.EditText import android.widget.ImageView import android.widget.ImageView.ScaleType import android.widget.TextView +import androidx.appcompat.widget.AppCompatButton import androidx.databinding.BindingAdapter import coil.load import coil.transform.RoundedCornersTransformation @@ -168,6 +169,17 @@ fun TextView.switchCompleteButtonText(prevScreenName: String) { } } +@BindingAdapter("switchCompleteButtonBackground") +fun AppCompatButton.switchCompleteButtonBackground(isValidNickname: Boolean) { + if (isValidNickname) { + background = context.drawableOf(R.drawable.shape_yellow_fill_10_rect) + setTextColor(context.colorOf(R.color.gray_900)) + } else { + background = context.drawableOf(R.drawable.shape_gray200_fill_10_rect) + setTextColor(context.colorOf(R.color.gray_500)) + } +} + @BindingAdapter("setFeedLikeImage") fun setLikeImage(view: ImageView, isLiked: Boolean) { val imageRes = if (isLiked) { diff --git a/app/src/main/res/drawable/sel_upload_nickname_btn_color.xml b/app/src/main/res/drawable/sel_upload_nickname_btn_color.xml index d08085bf..a89be533 100644 --- a/app/src/main/res/drawable/sel_upload_nickname_btn_color.xml +++ b/app/src/main/res/drawable/sel_upload_nickname_btn_color.xml @@ -1,5 +1,5 @@ - + - \ No newline at end of file + diff --git a/app/src/main/res/drawable/shape_gray_fill_10_rect.xml b/app/src/main/res/drawable/shape_gray200_fill_10_rect.xml similarity index 100% rename from app/src/main/res/drawable/shape_gray_fill_10_rect.xml rename to app/src/main/res/drawable/shape_gray200_fill_10_rect.xml diff --git a/app/src/main/res/layout/activity_nickname.xml b/app/src/main/res/layout/activity_nickname.xml index 29fa48bb..185c839d 100644 --- a/app/src/main/res/layout/activity_nickname.xml +++ b/app/src/main/res/layout/activity_nickname.xml @@ -88,9 +88,9 @@ android:paddingVertical="12dp" android:text="@={vm._nickname}" android:textAppearance="@style/TextAppearance.WINEY.body_m_16" - android:textCursorDrawable="@drawable/shape_gray900_line_cursor" android:textColor="@color/gray_900" - android:textColorHint="@color/gray_400" /> + android:textColorHint="@color/gray_400" + android:textCursorDrawable="@drawable/shape_gray900_line_cursor" /> + app:layout_constraintTop_toTopOf="parent" + app:rippleColor="@android:color/transparent" /> @@ -137,22 +137,21 @@ + tools:background="@drawable/shape_gray200_fill_10_rect" + tools:text="@string/nickname_start_btn_text" + tools:textColor="@color/gray_500" /> From 9019d34d8a157de04709097d8938c2516fed128d Mon Sep 17 00:00:00 2001 From: leeeha Date: Sat, 26 Aug 2023 12:22:19 +0900 Subject: [PATCH 12/12] =?UTF-8?q?[mod]=20#150=20=EC=8A=A4=ED=86=A0?= =?UTF-8?q?=EB=A6=AC=EC=97=90=EC=84=9C=20=EC=8A=A4=ED=82=B5=20=EB=B2=84?= =?UTF-8?q?=ED=8A=BC=20=EB=88=84=EB=A5=B4=EB=A9=B4=20=EB=8B=89=EB=84=A4?= =?UTF-8?q?=EC=9E=84=20=ED=99=94=EB=A9=B4=EC=9C=BC=EB=A1=9C=20=EC=9D=B4?= =?UTF-8?q?=EB=8F=99=ED=95=98=EB=8F=84=EB=A1=9D=20=EB=B3=80=EA=B2=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../presentation/onboarding/story/StoryActivity.kt | 10 +--------- 1 file changed, 1 insertion(+), 9 deletions(-) diff --git a/app/src/main/java/com/android/go/sopt/winey/presentation/onboarding/story/StoryActivity.kt b/app/src/main/java/com/android/go/sopt/winey/presentation/onboarding/story/StoryActivity.kt index f41b3fa8..6d96d76a 100644 --- a/app/src/main/java/com/android/go/sopt/winey/presentation/onboarding/story/StoryActivity.kt +++ b/app/src/main/java/com/android/go/sopt/winey/presentation/onboarding/story/StoryActivity.kt @@ -10,7 +10,6 @@ import androidx.fragment.app.commit import androidx.fragment.app.replace import com.android.go.sopt.winey.R import com.android.go.sopt.winey.databinding.ActivityStoryBinding -import com.android.go.sopt.winey.presentation.main.MainActivity import com.android.go.sopt.winey.presentation.nickname.NicknameActivity import com.android.go.sopt.winey.util.binding.BindingActivity import com.android.go.sopt.winey.util.context.colorOf @@ -33,7 +32,7 @@ class StoryActivity : BindingActivity(R.layout.activity_st private fun initSkipButtonClickListener() { binding.tvStorySkip.setOnClickListener { - navigateToMainScreen() + navigateToNicknameScreen() } } @@ -92,13 +91,6 @@ class StoryActivity : BindingActivity(R.layout.activity_st } } - private fun navigateToMainScreen() { - Intent(this, MainActivity::class.java).apply { - addFlags(Intent.FLAG_ACTIVITY_CLEAR_TASK or Intent.FLAG_ACTIVITY_NEW_TASK) - startActivity(this) - } - } - companion object { private const val FIRST_PAGE_NUM = 1 private const val EXTRA_KEY = "PREV_SCREEN_NAME"