diff --git a/app/build.gradle b/app/build.gradle index 21e5c575..015fa347 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -25,8 +25,8 @@ android { applicationId "sopt.motivoo" minSdk 24 targetSdk 34 - versionCode 4 - versionName "1.0.1" + versionCode 1 + versionName "1.0.0" buildConfigField "String", "BASE_URL", properties["base_url"] buildConfigField "String", "FIREBASE_RULE_UID", properties["firebase_rule_uid"] diff --git a/app/release/app-release.aab b/app/release/app-release.aab index 4fdc3bb2..d2ef3afc 100644 Binary files a/app/release/app-release.aab and b/app/release/app-release.aab differ diff --git a/app/release/app-release.apk b/app/release/app-release.apk new file mode 100644 index 00000000..908c220c Binary files /dev/null and b/app/release/app-release.apk differ diff --git a/app/release/app-release.apk.zip b/app/release/app-release.apk.zip new file mode 100644 index 00000000..5b8af7a2 Binary files /dev/null and b/app/release/app-release.apk.zip differ diff --git a/app/release/motivoo.apk b/app/release/motivoo.apk new file mode 100644 index 00000000..54eb11b0 Binary files /dev/null and b/app/release/motivoo.apk differ diff --git a/app/release/output-metadata.json b/app/release/output-metadata.json index c8b5227d..8722e4a3 100644 --- a/app/release/output-metadata.json +++ b/app/release/output-metadata.json @@ -12,7 +12,7 @@ "filters": [], "attributes": [], "versionCode": 1, - "versionName": "1.0", + "versionName": "1.0.0", "outputFile": "app-release.apk" } ], diff --git a/app/src/main/java/sopt/motivoo/data/datasource/local/MotivooStorageImpl.kt b/app/src/main/java/sopt/motivoo/data/datasource/local/MotivooStorageImpl.kt index 30ee3119..1c9ade40 100644 --- a/app/src/main/java/sopt/motivoo/data/datasource/local/MotivooStorageImpl.kt +++ b/app/src/main/java/sopt/motivoo/data/datasource/local/MotivooStorageImpl.kt @@ -31,10 +31,6 @@ class MotivooStorageImpl @Inject constructor(@ApplicationContext context: Contex } } - override var nickName: String - get() = pref.getString(NAME, "") ?: "" - set(value) = pref.edit { putString(NAME, value) } - override var userId: Long set(value) = pref.edit { putLong(USER_ID, value) } get() = pref.getLong(USER_ID, 0L) @@ -83,7 +79,15 @@ class MotivooStorageImpl @Inject constructor(@ApplicationContext context: Contex override fun clear() { pref.edit { - clear() + remove(ACCESS_TOKEN) + remove(REFRESH_TOKEN) + remove(IS_LOGIN) + remove(IS_MATCHED) + remove(USER_ID) + remove(MY_GOAL_STEP_COUNT) + remove(OTHER_GOAL_STEP_COUNT) + remove(IS_ONBOARDING_FINISHED) + remove(IS_TERMS_FINISHED) } } @@ -93,12 +97,13 @@ class MotivooStorageImpl @Inject constructor(@ApplicationContext context: Contex remove(ACCESS_TOKEN) remove(REFRESH_TOKEN) remove(IS_LOGIN) + remove(IS_MATCHED) + remove(IS_ONBOARDING_FINISHED) } } companion object { private const val FILE_NAME = "MtDataStore" - private const val NAME = "name" const val ACCESS_TOKEN = "accessToken" const val REFRESH_TOKEN = "refreshToken" private const val IS_LOGIN = "isLogin" diff --git a/app/src/main/java/sopt/motivoo/data/model/request/onboarding/RequestOnboardingDto.kt b/app/src/main/java/sopt/motivoo/data/model/request/onboarding/RequestOnboardingDto.kt index 16db4e84..4302a66f 100644 --- a/app/src/main/java/sopt/motivoo/data/model/request/onboarding/RequestOnboardingDto.kt +++ b/app/src/main/java/sopt/motivoo/data/model/request/onboarding/RequestOnboardingDto.kt @@ -18,5 +18,7 @@ data class RequestOnboardingDto( @SerialName("is_exercise") val isExercise: Boolean, @SerialName("type") - val type: String + val type: String, + @SerialName("nickname") + val nickname: String ) diff --git a/app/src/main/java/sopt/motivoo/domain/entity/MotivooStorage.kt b/app/src/main/java/sopt/motivoo/domain/entity/MotivooStorage.kt index 6d221bf6..4341c37f 100644 --- a/app/src/main/java/sopt/motivoo/domain/entity/MotivooStorage.kt +++ b/app/src/main/java/sopt/motivoo/domain/entity/MotivooStorage.kt @@ -1,7 +1,6 @@ package sopt.motivoo.domain.entity interface MotivooStorage { - var nickName: String var accessToken: String var refreshToken: String var isUserLoggedIn: Boolean diff --git a/app/src/main/java/sopt/motivoo/presentation/MainActivity.kt b/app/src/main/java/sopt/motivoo/presentation/MainActivity.kt index a77e5db3..5001d42d 100644 --- a/app/src/main/java/sopt/motivoo/presentation/MainActivity.kt +++ b/app/src/main/java/sopt/motivoo/presentation/MainActivity.kt @@ -207,6 +207,7 @@ class MainActivity : AppCompatActivity() { private fun setTopVisible(navController: NavController) { val topVisibleDestinations = setOf( + R.id.nickNameFragment, R.id.ageQuestionFragment, R.id.doExerciseQuestionFragment, R.id.frequencyQuestionFragment, @@ -215,7 +216,7 @@ class MainActivity : AppCompatActivity() { R.id.whatExerciseQuestionFragment, R.id.whatActivityQuestionFragment ) - val backInvisibleDestinations = setOf(R.id.ageQuestionFragment) + val backInvisibleDestinations = setOf(R.id.nickNameFragment) navController.addOnDestinationChangedListener { _, destination, _ -> binding.clOnboardingToolbar.visibility = @@ -228,13 +229,14 @@ class MainActivity : AppCompatActivity() { private fun getProgressValue(destinationId: Int): Float { return when (destinationId) { - R.id.ageQuestionFragment -> 1f - R.id.doExerciseQuestionFragment -> 2f - R.id.whatExerciseQuestionFragment -> 3f - R.id.whatActivityQuestionFragment -> 3f - R.id.frequencyQuestionFragment -> 4f - R.id.timeQuestionFragment -> 5f - R.id.soreSpotQuestionFragment -> 6f + R.id.nickNameFragment -> 1f + R.id.ageQuestionFragment -> 2f + R.id.doExerciseQuestionFragment -> 3f + R.id.whatExerciseQuestionFragment -> 4f + R.id.whatActivityQuestionFragment -> 4f + R.id.frequencyQuestionFragment -> 5f + R.id.timeQuestionFragment -> 6f + R.id.soreSpotQuestionFragment -> 7f else -> 0f } } diff --git a/app/src/main/java/sopt/motivoo/presentation/auth/LoginFragment.kt b/app/src/main/java/sopt/motivoo/presentation/auth/LoginFragment.kt index f1b14aab..46346ead 100644 --- a/app/src/main/java/sopt/motivoo/presentation/auth/LoginFragment.kt +++ b/app/src/main/java/sopt/motivoo/presentation/auth/LoginFragment.kt @@ -100,7 +100,7 @@ class LoginFragment : BindingFragment(R.layout.fragment_lo .onEach { event -> when (event) { NavigationEvent.Home -> findNavController().navigate(R.id.action_loginFragment_to_homeFragment) - NavigationEvent.AgeQuestion -> findNavController().navigate(R.id.action_loginFragment_to_ageQuestionFragment) + NavigationEvent.NickName -> findNavController().navigate(R.id.action_loginFragment_to_nickNameFragment) NavigationEvent.StartMotivoo -> findNavController().navigate(R.id.action_loginFragment_to_startMotivooFragment) NavigationEvent.TermsOfUse -> findNavController().navigate(R.id.action_loginFragment_to_termsOfUseFragment) NavigationEvent.Permission -> findNavController().navigate(R.id.action_loginFragment_to_permissionFragment) diff --git a/app/src/main/java/sopt/motivoo/presentation/intro/SplashFragment.kt b/app/src/main/java/sopt/motivoo/presentation/intro/SplashFragment.kt index bc74440f..ba194dd1 100644 --- a/app/src/main/java/sopt/motivoo/presentation/intro/SplashFragment.kt +++ b/app/src/main/java/sopt/motivoo/presentation/intro/SplashFragment.kt @@ -46,7 +46,7 @@ class SplashFragment : BindingFragment(R.layout.fragment_ .onEach { event -> when (event) { NavigationEvent.Home -> navigateToFragment(R.id.action_splashFragment_to_homeFragment) - NavigationEvent.AgeQuestion -> navigateToFragment(R.id.action_splashFragment_to_ageQuestionFragment) + NavigationEvent.NickName -> navigateToFragment(R.id.action_splashFragment_to_nickNameFragment) NavigationEvent.StartMotivoo -> navigateToFragment(R.id.action_splashFragment_to_startMotivooFragment) NavigationEvent.Login -> navigateToFragment(R.id.action_splashFragment_to_loginFragment) NavigationEvent.TermsOfUse -> navigateToFragment(R.id.action_splashFragment_to_termsOfUseFragment) diff --git a/app/src/main/java/sopt/motivoo/presentation/intro/TermsOfUseFragment.kt b/app/src/main/java/sopt/motivoo/presentation/intro/TermsOfUseFragment.kt index 4d3e0154..c76b9b9d 100644 --- a/app/src/main/java/sopt/motivoo/presentation/intro/TermsOfUseFragment.kt +++ b/app/src/main/java/sopt/motivoo/presentation/intro/TermsOfUseFragment.kt @@ -92,7 +92,7 @@ class TermsOfUseFragment : private fun clickDoneButton() { binding.btnTermsOfUseDone.setOnSingleClickListener { motivooStorage.isFinishedTermsOfUse = true - findNavController().navigate(R.id.action_termsOfUseFragment_to_AgeQuestionFragment) + findNavController().navigate(R.id.action_termsOfUseFragment_to_nickNameFragment) } } diff --git a/app/src/main/java/sopt/motivoo/presentation/invitecode/GetInviteCodeFragment.kt b/app/src/main/java/sopt/motivoo/presentation/invitecode/GetInviteCodeFragment.kt index 5b82cda8..ed8099d9 100644 --- a/app/src/main/java/sopt/motivoo/presentation/invitecode/GetInviteCodeFragment.kt +++ b/app/src/main/java/sopt/motivoo/presentation/invitecode/GetInviteCodeFragment.kt @@ -93,10 +93,10 @@ class GetInviteCodeFragment : private fun setClipboard() { val clipboard: ClipboardManager = requireContext().getSystemService(CLIPBOARD_SERVICE) as ClipboardManager - val inviteCode = binding.tvGetInviteCode.text - val clip = ClipData.newPlainText(INVITE_CODE, inviteCode) binding.btnGetInviteCodeCopy.setOnSingleClickListener { + val inviteCode = binding.tvGetInviteCode.text + val clip = ClipData.newPlainText(INVITE_CODE, inviteCode) clipboard.setPrimaryClip(clip) if (Build.VERSION.SDK_INT <= Build.VERSION_CODES.S_V2) setClipBoardToastAnimation() diff --git a/app/src/main/java/sopt/motivoo/presentation/onboarding/AgeQuestionFragment.kt b/app/src/main/java/sopt/motivoo/presentation/onboarding/AgeQuestionFragment.kt index 34b96de7..a2ba005f 100644 --- a/app/src/main/java/sopt/motivoo/presentation/onboarding/AgeQuestionFragment.kt +++ b/app/src/main/java/sopt/motivoo/presentation/onboarding/AgeQuestionFragment.kt @@ -4,7 +4,6 @@ import android.os.Bundle import android.transition.TransitionManager import android.view.View import android.view.ViewGroup -import androidx.activity.OnBackPressedCallback import androidx.constraintlayout.widget.ConstraintLayout import androidx.fragment.app.activityViewModels import androidx.lifecycle.Lifecycle @@ -34,7 +33,6 @@ class AgeQuestionFragment : collectData() clickNextButton() - overrideOnBackPressed() } private fun clickNextButton() { @@ -126,17 +124,6 @@ class AgeQuestionFragment : binding.clUserType.layoutParams = layoutParams } - private fun overrideOnBackPressed() { - requireActivity().onBackPressedDispatcher.addCallback( - viewLifecycleOwner, - object : OnBackPressedCallback(true) { - override fun handleOnBackPressed() { - requireActivity().finishAffinity() - } - } - ) - } - companion object { private const val TOP_MARGIN = 13 } diff --git a/app/src/main/java/sopt/motivoo/presentation/onboarding/NickNameFragment.kt b/app/src/main/java/sopt/motivoo/presentation/onboarding/NickNameFragment.kt new file mode 100644 index 00000000..7da47ae3 --- /dev/null +++ b/app/src/main/java/sopt/motivoo/presentation/onboarding/NickNameFragment.kt @@ -0,0 +1,104 @@ +package sopt.motivoo.presentation.onboarding + +import android.os.Bundle +import android.view.View +import android.view.animation.AnimationUtils +import androidx.activity.OnBackPressedCallback +import androidx.fragment.app.activityViewModels +import androidx.lifecycle.Lifecycle +import androidx.lifecycle.flowWithLifecycle +import androidx.lifecycle.lifecycleScope +import androidx.navigation.fragment.findNavController +import kotlinx.coroutines.delay +import kotlinx.coroutines.flow.distinctUntilChanged +import kotlinx.coroutines.flow.launchIn +import kotlinx.coroutines.flow.onEach +import kotlinx.coroutines.launch +import sopt.motivoo.R +import sopt.motivoo.databinding.FragmentNicknameBinding +import sopt.motivoo.util.binding.BindingFragment +import sopt.motivoo.util.extension.drawableOf +import sopt.motivoo.util.extension.setOnSingleClickListener + +class NickNameFragment : BindingFragment(R.layout.fragment_nickname) { + + private val onboardingViewModel by activityViewModels() + private var lastNickNameLength = 0 + + override fun onViewCreated(view: View, savedInstanceState: Bundle?) { + super.onViewCreated(view, savedInstanceState) + binding.onboardingViewModel = onboardingViewModel + collectData() + clickNextButton() + overrideOnBackPressed() + } + + private fun clickNextButton() { + binding.btnNicknameDone.setOnSingleClickListener { + findNavController().navigate(R.id.action_nickNameFragment_to_ageQuestionFragment) + } + } + + private fun collectData() { + onboardingViewModel.nickName.flowWithLifecycle( + viewLifecycleOwner.lifecycle, + Lifecycle.State.STARTED + ) + .distinctUntilChanged() + .onEach { it?.let { it1 -> handleNickNameChange(it1) } } + .launchIn(viewLifecycleOwner.lifecycleScope) + } + + private fun handleNickNameChange(nickName: String) { + val currentLength = nickName.length + binding.btnNicknameDone.isEnabled = nickName.isNotEmpty() + + if (currentLength >= 8 && lastNickNameLength != currentLength) { + setErrorAnimation() + } else if (currentLength < 8) { + resetErrorState() + } + + lastNickNameLength = currentLength + } + + private fun setErrorAnimation() { + val fadeIn = AnimationUtils.loadAnimation(context, R.anim.fade_in) + with(binding) { + tvNicknameErrorMessage.startAnimation(fadeIn) + etNickname.background = + requireContext().drawableOf(R.drawable.shape_edittext_error_radius8) + tvNicknameErrorMessage.visibility = View.VISIBLE + + lifecycleScope.launch { + delay(FOUR_SECONDS) + val fadeOut = AnimationUtils.loadAnimation(context, R.anim.fade_out) + binding.tvNicknameErrorMessage.startAnimation(fadeOut) + binding.tvNicknameErrorMessage.visibility = View.INVISIBLE + binding.etNickname.background = + requireContext().drawableOf(R.drawable.selector_edittext_input) + } + } + } + + private fun resetErrorState() { + binding.tvNicknameErrorMessage.visibility = View.INVISIBLE + binding.etNickname.background = + requireContext().drawableOf(R.drawable.selector_edittext_input) + } + + private fun overrideOnBackPressed() { + requireActivity().onBackPressedDispatcher.addCallback( + viewLifecycleOwner, + object : OnBackPressedCallback(true) { + override fun handleOnBackPressed() { + requireActivity().finishAffinity() + } + } + ) + } + + companion object { + const val FOUR_SECONDS = 4000L + } +} diff --git a/app/src/main/java/sopt/motivoo/presentation/onboarding/OnboardingViewModel.kt b/app/src/main/java/sopt/motivoo/presentation/onboarding/OnboardingViewModel.kt index e3319db5..e59a551c 100644 --- a/app/src/main/java/sopt/motivoo/presentation/onboarding/OnboardingViewModel.kt +++ b/app/src/main/java/sopt/motivoo/presentation/onboarding/OnboardingViewModel.kt @@ -39,6 +39,8 @@ class OnboardingViewModel @Inject constructor( val age = MutableStateFlow(null) + val nickName = MutableStateFlow(null) + val isFirst = MutableLiveData(true) val isValidAge: StateFlow = age.map { ageString -> @@ -178,7 +180,8 @@ class OnboardingViewModel @Inject constructor( exerciseTime = timeTypeString, exerciseType = exerciseType, isExercise = isDoExercise, - type = userTypeString + type = userTypeString, + nickname = nickName.value.toString() ) onboardingRepository.postOnboardingInfo(requestDto) .onSuccess { diff --git a/app/src/main/java/sopt/motivoo/util/NavigationDecider.kt b/app/src/main/java/sopt/motivoo/util/NavigationDecider.kt index 5ffb7a20..2b2c1284 100644 --- a/app/src/main/java/sopt/motivoo/util/NavigationDecider.kt +++ b/app/src/main/java/sopt/motivoo/util/NavigationDecider.kt @@ -8,20 +8,20 @@ class NavigationDecider @Inject constructor( ) { fun determineNavigationDestination(): NavigationEvent { return when { - !motivooStorage.isFinishedPermission && motivooStorage.isUserLoggedIn -> - NavigationEvent.Permission + motivooStorage.isUserMatched -> + NavigationEvent.Home - !motivooStorage.isFinishedTermsOfUse && motivooStorage.isUserLoggedIn -> - NavigationEvent.TermsOfUse + !motivooStorage.isUserMatched && motivooStorage.isFinishedOnboarding && motivooStorage.isUserLoggedIn && motivooStorage.isFinishedTermsOfUse && motivooStorage.isFinishedPermission -> + NavigationEvent.StartMotivoo - !motivooStorage.isUserMatched && !motivooStorage.isFinishedOnboarding && motivooStorage.isUserLoggedIn -> - NavigationEvent.AgeQuestion + !motivooStorage.isUserMatched && !motivooStorage.isFinishedOnboarding && motivooStorage.isUserLoggedIn && motivooStorage.isFinishedTermsOfUse && motivooStorage.isFinishedPermission -> + NavigationEvent.NickName - !motivooStorage.isUserMatched && motivooStorage.isFinishedOnboarding && motivooStorage.isUserLoggedIn -> - NavigationEvent.StartMotivoo + !motivooStorage.isFinishedTermsOfUse && motivooStorage.isFinishedPermission && motivooStorage.isUserLoggedIn -> + NavigationEvent.TermsOfUse - motivooStorage.isUserMatched && motivooStorage.isFinishedOnboarding && motivooStorage.isUserLoggedIn -> - NavigationEvent.Home + !motivooStorage.isFinishedPermission && motivooStorage.isUserLoggedIn -> + NavigationEvent.Permission else -> NavigationEvent.Login @@ -31,7 +31,7 @@ class NavigationDecider @Inject constructor( sealed class NavigationEvent { data object Home : NavigationEvent() - data object AgeQuestion : NavigationEvent() + data object NickName : NavigationEvent() data object StartMotivoo : NavigationEvent() data object Login : NavigationEvent() data object Permission : NavigationEvent() diff --git a/app/src/main/res/layout/activity_main.xml b/app/src/main/res/layout/activity_main.xml index 2878f1a2..89d6c4bd 100644 --- a/app/src/main/res/layout/activity_main.xml +++ b/app/src/main/res/layout/activity_main.xml @@ -31,7 +31,7 @@ app:progressView_autoAnimate="true" app:progressView_colorBackground="@color/gray_100_F4F5F9" app:progressView_colorProgress="@color/red_400_FF6259" - app:progressView_max="6" + app:progressView_max="7" app:progressView_min="0" app:progressView_progress="4" app:progressView_progressFromPrevious="true" /> diff --git a/app/src/main/res/layout/bottom_sheet_home.xml b/app/src/main/res/layout/bottom_sheet_home.xml index bf9e5248..25ce3ffd 100644 --- a/app/src/main/res/layout/bottom_sheet_home.xml +++ b/app/src/main/res/layout/bottom_sheet_home.xml @@ -87,7 +87,7 @@ android:id="@+id/pv_loading" android:layout_width="0dp" android:layout_height="0dp" - android:background="@color/gray_600_7072764d" + android:background="@color/white_FFFFFF4d" android:padding="150dp" android:visibility="invisible" app:layout_constraintBottom_toBottomOf="parent" diff --git a/app/src/main/res/layout/dialog_home_photo.xml b/app/src/main/res/layout/dialog_home_photo.xml index 63811024..320dfa86 100644 --- a/app/src/main/res/layout/dialog_home_photo.xml +++ b/app/src/main/res/layout/dialog_home_photo.xml @@ -35,7 +35,7 @@ android:id="@+id/pv_loading" android:layout_width="0dp" android:layout_height="0dp" - android:background="@color/gray_600_7072764d" + android:background="@color/white_FFFFFF4d" android:padding="150dp" android:visibility="invisible" app:layout_constraintBottom_toBottomOf="parent" diff --git a/app/src/main/res/layout/fragment_exercise.xml b/app/src/main/res/layout/fragment_exercise.xml index 32999cda..8a428893 100644 --- a/app/src/main/res/layout/fragment_exercise.xml +++ b/app/src/main/res/layout/fragment_exercise.xml @@ -66,7 +66,7 @@ android:id="@+id/pv_loading" android:layout_width="0dp" android:layout_height="0dp" - android:background="@color/gray_600_7072764d" + android:background="@color/white_FFFFFF4d" android:padding="150dp" android:visibility="invisible" app:layout_constraintBottom_toBottomOf="parent" diff --git a/app/src/main/res/layout/fragment_home.xml b/app/src/main/res/layout/fragment_home.xml index 30281d62..f59c3a4c 100644 --- a/app/src/main/res/layout/fragment_home.xml +++ b/app/src/main/res/layout/fragment_home.xml @@ -258,7 +258,7 @@ android:id="@+id/pv_loading" android:layout_width="0dp" android:layout_height="0dp" - android:background="@color/gray_600_7072764d" + android:background="@color/white_FFFFFF4d" android:padding="150dp" android:visibility="invisible" app:layout_constraintBottom_toBottomOf="parent" diff --git a/app/src/main/res/layout/fragment_login.xml b/app/src/main/res/layout/fragment_login.xml index 11568f0d..e2a51acf 100644 --- a/app/src/main/res/layout/fragment_login.xml +++ b/app/src/main/res/layout/fragment_login.xml @@ -99,7 +99,7 @@ android:id="@+id/pv_loading" android:layout_width="0dp" android:layout_height="0dp" - android:background="@color/gray_600_7072764d" + android:background="@color/white_FFFFFF4d" android:padding="150dp" android:visibility="invisible" app:layout_constraintBottom_toBottomOf="parent" diff --git a/app/src/main/res/layout/fragment_nickname.xml b/app/src/main/res/layout/fragment_nickname.xml new file mode 100644 index 00000000..663896b5 --- /dev/null +++ b/app/src/main/res/layout/fragment_nickname.xml @@ -0,0 +1,92 @@ + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/fragment_permission.xml b/app/src/main/res/layout/fragment_permission.xml index ce5e69d9..8eba69b2 100644 --- a/app/src/main/res/layout/fragment_permission.xml +++ b/app/src/main/res/layout/fragment_permission.xml @@ -142,11 +142,12 @@ style="@style/Caption2_re" android:layout_width="0dp" android:layout_height="wrap_content" - android:layout_marginTop="4dp" + android:layout_marginTop="5dp" android:layout_marginEnd="24dp" + android:layout_marginBottom="35dp" android:text="@string/permission_camera_description" android:textColor="@color/gray_700_464747" - app:layout_constraintBottom_toBottomOf="@id/iv_permission_camera" + app:layout_constraintBottom_toTopOf="@+id/tv_permission_gallery_title" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintStart_toStartOf="@id/tv_permission_camera_title" app:layout_constraintTop_toBottomOf="@id/tv_permission_camera_title" /> @@ -190,7 +191,7 @@ style="@style/Caption2_re" android:layout_width="0dp" android:layout_height="wrap_content" - android:layout_marginTop="4dp" + android:layout_marginTop="5dp" android:layout_marginEnd="24dp" android:text="@string/permission_gallery_description" android:textColor="@color/gray_700_464747" diff --git a/app/src/main/res/layout/fragment_sore_spot_qusetion.xml b/app/src/main/res/layout/fragment_sore_spot_qusetion.xml index 10b547fc..3b187650 100644 --- a/app/src/main/res/layout/fragment_sore_spot_qusetion.xml +++ b/app/src/main/res/layout/fragment_sore_spot_qusetion.xml @@ -154,7 +154,7 @@ android:id="@+id/pv_loading" android:layout_width="0dp" android:layout_height="0dp" - android:background="@color/gray_600_7072764d" + android:background="@color/white_FFFFFF4d" android:padding="150dp" android:visibility="invisible" app:layout_constraintBottom_toBottomOf="parent" diff --git a/app/src/main/res/navigation/navigation_main.xml b/app/src/main/res/navigation/navigation_main.xml index a8d85286..69af2f00 100644 --- a/app/src/main/res/navigation/navigation_main.xml +++ b/app/src/main/res/navigation/navigation_main.xml @@ -20,12 +20,12 @@ - + + + + \ No newline at end of file diff --git a/app/src/main/res/values/colors.xml b/app/src/main/res/values/colors.xml index f19bebfd..f3c49ac3 100644 --- a/app/src/main/res/values/colors.xml +++ b/app/src/main/res/values/colors.xml @@ -2,6 +2,7 @@ #090909 #FFFFFF + #4dFFFFFF #FF19A3 #FFE6F5 diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index db28f2c4..46e49925 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -7,6 +7,10 @@ 탈퇴하기 + 별명을 알려주세요 + 별명 + 별명을 입력해주세요 + 8자 이내로 입력해주세요. 당신은\n부모인가요 자녀인가요? 맞춤 운동을 제공해드려요! 나이를 알려주세요 @@ -203,5 +207,4 @@ 매칭이 끊어졌어요 매칭이 끊어져 모티부를 이용할 수 없어요\n탈퇴 후 다시 가입해주세요 잠시 연결이 불안정해요 -