diff --git a/app/build.gradle b/app/build.gradle index 5f1130f2..8599a591 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -98,6 +98,7 @@ dependencies { // coil implementation 'io.coil-kt:coil:2.4.0' + implementation 'io.coil-kt:coil-gif:2.4.0' // Timber implementation 'com.jakewharton.timber:timber:5.0.1' diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 530d8cd5..f49d5deb 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -15,9 +15,25 @@ android:usesCleartextTraffic="true" android:theme="@style/Theme.Umbbaandroid" tools:targetApi="31"> + + + + (R.layout.activity_invite) { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) + goCommunicationActivity() + goInviteCodeActivity() + } + + private fun goCommunicationActivity() { + binding.btnStart.setOnClickListener { + startActivity(Intent(this, CommunicationActivity::class.java)) + } + } + + private fun goInviteCodeActivity() { + binding.btnInputCode.setOnClickListener { + startActivity(Intent(this, InviteCodeActivity::class.java)) + } } } \ No newline at end of file diff --git a/app/src/main/java/com/sopt/umbba_android/presentation/login/AgreePrivacyUseActivity.kt b/app/src/main/java/com/sopt/umbba_android/presentation/login/AgreePrivacyUseActivity.kt new file mode 100644 index 00000000..2bc71b70 --- /dev/null +++ b/app/src/main/java/com/sopt/umbba_android/presentation/login/AgreePrivacyUseActivity.kt @@ -0,0 +1,122 @@ +package com.sopt.umbba_android.presentation.login + +import android.content.Intent +import android.graphics.Typeface +import android.os.Bundle +import android.text.Spannable +import android.text.SpannableStringBuilder +import android.text.style.StyleSpan +import android.text.util.Linkify +import android.widget.TextView +import androidx.core.content.ContextCompat +import com.sopt.umbba_android.R +import com.sopt.umbba_android.databinding.ActivityAgreePrivacyUseBinding +import com.sopt.umbba_android.presentation.invite.InviteActivity +import com.sopt.umbba_android.util.binding.BindingActivity +import java.util.regex.Pattern + +class AgreePrivacyUseActivity : BindingActivity(R.layout.activity_agree_privacy_use) { + + override fun onCreate(savedInstanceState: Bundle?) { + super.onCreate(savedInstanceState) + + clickAllAgreeButton() + clickCircleButton() + setHyperLinkAndColorInTermsTextView() + setHyperLinkAndColorInPrivacyTextView() + goInviteActivity() + } + + private fun clickAllAgreeButton() { + with(binding) { + btnAllAgreeCheck.setOnClickListener { + btnAllAgreeCheck.isSelected = !btnAllAgreeCheck.isSelected + checkAllAgreeButton() + } + } + } + + private fun checkAllAgreeButton() { + with(binding) { + if (btnAllAgreeCheck.isSelected) { + btnUp14.isSelected = true + btnAgreeTermsAndCondition.isSelected = true + btnAgreePrivacy.isSelected = true + btnNext.isEnabled = true + } else { + btnUp14.isSelected = false + btnAgreeTermsAndCondition.isSelected = false + btnAgreePrivacy.isSelected = false + btnNext.isEnabled = false + } + } + } + + private fun clickCircleButton() { + with(binding) { + btnUp14.setOnClickListener { + btnUp14.isSelected = !btnUp14.isSelected + checkAllCircleButton() + } + btnAgreeTermsAndCondition.setOnClickListener { + btnAgreeTermsAndCondition.isSelected = !btnAgreeTermsAndCondition.isSelected + checkAllCircleButton() + } + btnAgreePrivacy.setOnClickListener { + btnAgreePrivacy.isSelected = !btnAgreePrivacy.isSelected + checkAllCircleButton() + } + } + } + + private fun checkAllCircleButton() { + with(binding) { + if (btnUp14.isSelected && btnAgreeTermsAndCondition.isSelected && btnAgreePrivacy.isSelected) { + btnAllAgreeCheck.isSelected = true + btnNext.isEnabled = true + } else { + btnAllAgreeCheck.isSelected = false + btnNext.isEnabled = false + } + } + } + + private fun setHyperLinkAndColorInTermsTextView() { + with(binding) { + setHyperLinkToTextView("서비스 이용약관", tvAgreeTermsAndCondition, "https://www.notion.so/f1a14bf60ed4421f9b3761ef88906adb?pvs=4") + setLinkTextColorToBlack(tvAgreeTermsAndCondition) + setLinkBold(tvAgreeTermsAndCondition, 13) + } + } + + private fun setHyperLinkAndColorInPrivacyTextView() { + with(binding) { + setHyperLinkToTextView("개인정보 수집 및 이용", tvAgreePrivacy, "https://www.notion.so/99fe0f58825d4f87bd3b987fadc623b6?pvs=4") + setLinkTextColorToBlack(tvAgreePrivacy) + setLinkBold(tvAgreePrivacy, 17) + } + } + + private fun setHyperLinkToTextView(text: String, view: TextView, uri: String) { + val transform = Linkify.TransformFilter { match, url -> "" } + val pattern = Pattern.compile(text) + + Linkify.addLinks(view, pattern, uri, null, transform) + } + + private fun setLinkTextColorToBlack(view: TextView) { + view.setLinkTextColor(ContextCompat.getColor(this, R.color.umbba_black)) + } + + private fun setLinkBold(view: TextView, end: Int) { + val sentence = SpannableStringBuilder(view.text) + sentence.setSpan(StyleSpan(Typeface.BOLD), 5, end, Spannable.SPAN_EXCLUSIVE_EXCLUSIVE) + view.text = sentence + } + + private fun goInviteActivity() { + binding.btnNext.setOnClickListener { + startActivity(Intent(this, InviteActivity::class.java)) + } + } +} \ No newline at end of file diff --git a/app/src/main/java/com/sopt/umbba_android/presentation/login/LoginActivity.kt b/app/src/main/java/com/sopt/umbba_android/presentation/login/LoginActivity.kt index 2ca026e4..24410308 100644 --- a/app/src/main/java/com/sopt/umbba_android/presentation/login/LoginActivity.kt +++ b/app/src/main/java/com/sopt/umbba_android/presentation/login/LoginActivity.kt @@ -1,5 +1,6 @@ package com.sopt.umbba_android.presentation.login +import android.content.Intent import android.os.Bundle import com.sopt.umbba_android.R import com.sopt.umbba_android.databinding.ActivityLoginBinding @@ -8,5 +9,18 @@ import com.sopt.umbba_android.util.binding.BindingActivity class LoginActivity : BindingActivity(R.layout.activity_login) { override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) + + loginWithKaKao() + } + + private fun loginWithKaKao() { + //TODO("카카오 로그인 및 자동 로그인 진행") + goAgreePrivacyUseActivity() + } + + private fun goAgreePrivacyUseActivity() { + binding.btnKakaoLogin.setOnClickListener { + startActivity(Intent(this, AgreePrivacyUseActivity::class.java)) + } } } \ No newline at end of file diff --git a/app/src/main/java/com/sopt/umbba_android/presentation/onboarding/CommunicationActivity.kt b/app/src/main/java/com/sopt/umbba_android/presentation/onboarding/CommunicationActivity.kt new file mode 100644 index 00000000..946620db --- /dev/null +++ b/app/src/main/java/com/sopt/umbba_android/presentation/onboarding/CommunicationActivity.kt @@ -0,0 +1,21 @@ +package com.sopt.umbba_android.presentation.onboarding + +import android.content.Intent +import android.os.Bundle +import com.sopt.umbba_android.R +import com.sopt.umbba_android.databinding.ActivityCommunicationBinding +import com.sopt.umbba_android.util.binding.BindingActivity + +class CommunicationActivity : BindingActivity(R.layout.activity_communication) { + override fun onCreate(savedInstanceState: Bundle?) { + super.onCreate(savedInstanceState) + + goInputInfoActivity() + } + + private fun goInputInfoActivity() { + binding.btnStart.setOnClickListener { + startActivity(Intent(this, InputInfoActivity::class.java)) + } + } +} \ No newline at end of file diff --git a/app/src/main/java/com/sopt/umbba_android/presentation/onboarding/InputInfoActivity.kt b/app/src/main/java/com/sopt/umbba_android/presentation/onboarding/InputInfoActivity.kt index 2cb73f7e..f8221338 100644 --- a/app/src/main/java/com/sopt/umbba_android/presentation/onboarding/InputInfoActivity.kt +++ b/app/src/main/java/com/sopt/umbba_android/presentation/onboarding/InputInfoActivity.kt @@ -1,16 +1,30 @@ package com.sopt.umbba_android.presentation.onboarding +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 com.sopt.umbba_android.R import com.sopt.umbba_android.databinding.ActivityInputInfoBinding +import com.sopt.umbba_android.presentation.viewmodel.InputInfoViewModel import com.sopt.umbba_android.util.binding.BindingActivity +import java.util.regex.Pattern class InputInfoActivity : BindingActivity(R.layout.activity_input_info), View.OnClickListener { + + private val viewModel by viewModels() override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) binding.clickListener = this + binding.viewmodel = viewModel + + checkAllInfoComplete() + validateName() + validateYear() + goSelectFamilyActivity() } override fun onClick(view: View?) { @@ -18,4 +32,77 @@ class InputInfoActivity : BindingActivity(R.layout.act R.id.iv_basic_back -> finish() } } + + private fun validateName() { + with(binding) { + etName.addTextChangedListener(object : TextWatcher { + override fun beforeTextChanged(p0: CharSequence?, p1: Int, p2: Int, p3: Int) {} + override fun onTextChanged(p0: CharSequence?, p1: Int, p2: Int, p3: Int) { + val namePattern = Pattern.compile(HANGUL_PATTERN) + if (!etName.text?.matches(namePattern.toRegex())!!) { + layoutInputName.error = "*형식이 올바르지 않습니다." + } else if (etName.text.toString().length > 7) { + layoutInputName.error = "*7글자 이하로 작성해주세요." + } else { + layoutInputName.error = null + } + } + override fun afterTextChanged(p0: Editable?) {} + }) + } + } + + private fun validateYear() { + with(binding) { + etYear.addTextChangedListener(object : TextWatcher { + override fun beforeTextChanged(p0: CharSequence?, p1: Int, p2: Int, p3: Int) {} + override fun onTextChanged(p0: CharSequence?, p1: Int, p2: Int, p3: Int) { + val yearPattern = Pattern.compile(NUMBER_PATTERN) + if (!etYear.text?.matches(yearPattern.toRegex())!!) { + layoutInputYear.error = "*형식이 올바르지 않습니다." + } else if (etYear.text.toString().length > 4) { + layoutInputYear.error = "*4글자로 작성해주세요." + } else { + layoutInputYear.error = null + } + } + override fun afterTextChanged(p0: Editable?) {} + }) + } + } + + private fun checkAllInfoComplete() { + viewModel.name.observe(this) { + viewModel.checkInfoComplete() + } + viewModel.man.observe(this) { + viewModel.checkInfoComplete() + } + viewModel.woman.observe(this) { + viewModel.checkInfoComplete() + } + viewModel.year.observe(this) { + viewModel.checkInfoComplete() + } + viewModel.isAllInfoComplete.observe(this) { + binding.btnNext.isEnabled = + binding.layoutInputName.error.isNullOrEmpty() && binding.layoutInputYear.error.isNullOrEmpty() && binding.etYear.text.toString() + .isNotEmpty() && binding.etName.text.toString().isNotEmpty() + } + } + + private fun goSelectFamilyActivity() { + binding.btnNext.setOnClickListener { + if (true) { //초대하는 사람 + startActivity(Intent(this, SelectFamilyActivity::class.java)) + } else { //초대받는 사람 + startActivity(Intent(this, QuestActivity::class.java)) + } + } + } + + companion object { + const val HANGUL_PATTERN = "^[가-힣]*$" + const val NUMBER_PATTERN = "^([12]\\d{3})*$" + } } \ No newline at end of file diff --git a/app/src/main/java/com/sopt/umbba_android/presentation/onboarding/OnboardingFinishActivity.kt b/app/src/main/java/com/sopt/umbba_android/presentation/onboarding/OnboardingFinishActivity.kt new file mode 100644 index 00000000..b42ee09f --- /dev/null +++ b/app/src/main/java/com/sopt/umbba_android/presentation/onboarding/OnboardingFinishActivity.kt @@ -0,0 +1,12 @@ +package com.sopt.umbba_android.presentation.onboarding + +import androidx.appcompat.app.AppCompatActivity +import android.os.Bundle +import com.sopt.umbba_android.R + +class OnboardingFinishActivity : AppCompatActivity() { + override fun onCreate(savedInstanceState: Bundle?) { + super.onCreate(savedInstanceState) + setContentView(R.layout.activity_onboarding_finish) + } +} \ No newline at end of file diff --git a/app/src/main/java/com/sopt/umbba_android/presentation/onboarding/SelectFamilyActivity.kt b/app/src/main/java/com/sopt/umbba_android/presentation/onboarding/SelectFamilyActivity.kt index b70826cd..66861144 100644 --- a/app/src/main/java/com/sopt/umbba_android/presentation/onboarding/SelectFamilyActivity.kt +++ b/app/src/main/java/com/sopt/umbba_android/presentation/onboarding/SelectFamilyActivity.kt @@ -1,17 +1,26 @@ package com.sopt.umbba_android.presentation.onboarding +import android.content.Intent import android.os.Bundle import android.view.View +import androidx.activity.viewModels import com.sopt.umbba_android.R import com.sopt.umbba_android.databinding.ActivitySelectFamilyBinding +import com.sopt.umbba_android.presentation.viewmodel.SelectFamilyViewModel import com.sopt.umbba_android.util.binding.BindingActivity class SelectFamilyActivity : BindingActivity(R.layout.activity_select_family), View.OnClickListener { + + private val viewModel by viewModels() override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) binding.clickListener = this + binding.viewmodel = viewModel + + checkAllSelectFamilyComplete() + goQuestActivity() } override fun onClick(view: View?) { @@ -19,4 +28,48 @@ class SelectFamilyActivity : R.id.iv_basic_back -> finish() } } + + private fun checkAllSelectFamilyComplete() { + viewModel.parent.observe(this) { + viewModel.checkSelectFamily() + addMoreQuestion() + modifyMoreQuestion() + } + viewModel.child.observe(this) { + viewModel.checkSelectFamily() + addMoreQuestion() + modifyMoreQuestion() + } + viewModel.mom.observe(this) { + viewModel.checkSelectFamily() + } + viewModel.dad.observe(this) { + viewModel.checkSelectFamily() + } + viewModel.isAllSelectFamily.observe(this) { + binding.btnNext.isEnabled = it + } + } + + private fun addMoreQuestion() { + if (binding.chip1.isCheckable || binding.chip2.isCheckable) { + binding.clMore.visibility = View.VISIBLE + } + } + + private fun modifyMoreQuestion() { + if (binding.chip1.isChecked) { + binding.chip3.text = "엄마" + binding.chip4.text = "아빠" + } else { + binding.chip3.text = "아들" + binding.chip4.text = "딸" + } + } + + private fun goQuestActivity() { + binding.btnNext.setOnClickListener { + startActivity(Intent(this, QuestActivity::class.java)) + } + } } \ No newline at end of file diff --git a/app/src/main/java/com/sopt/umbba_android/presentation/onboarding/SetTimeActivity.kt b/app/src/main/java/com/sopt/umbba_android/presentation/onboarding/SetTimeActivity.kt index 382b7590..2d75a416 100644 --- a/app/src/main/java/com/sopt/umbba_android/presentation/onboarding/SetTimeActivity.kt +++ b/app/src/main/java/com/sopt/umbba_android/presentation/onboarding/SetTimeActivity.kt @@ -1,5 +1,6 @@ package com.sopt.umbba_android.presentation.onboarding +import android.content.Intent import android.os.Bundle import android.view.View import com.sopt.umbba_android.R @@ -12,8 +13,10 @@ class SetTimeActivity : BindingActivity(R.layout.activit override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) binding.clickListener = this + customTimePickerInterval() setDefaultTime() + goOnboardingFinishActivity() } override fun onClick(view: View?) { @@ -30,4 +33,11 @@ class SetTimeActivity : BindingActivity(R.layout.activit binding.tpTime.hour = 23 binding.tpTime.minute = 0 } + + private fun goOnboardingFinishActivity() { + //if 푸시알림 허용 시 + startActivity(Intent(this, OnboardingFinishActivity::class.java)) + // else 푸시알림 비허용 시 못 넘어감 + TODO("푸시알림 권한 체크") + } } \ No newline at end of file diff --git a/app/src/main/java/com/sopt/umbba_android/presentation/qna/AnswerViewModel.kt b/app/src/main/java/com/sopt/umbba_android/presentation/qna/AnswerViewModel.kt index 1dbb102d..a76a7fbf 100644 --- a/app/src/main/java/com/sopt/umbba_android/presentation/qna/AnswerViewModel.kt +++ b/app/src/main/java/com/sopt/umbba_android/presentation/qna/AnswerViewModel.kt @@ -3,7 +3,6 @@ package com.sopt.umbba_android.presentation.qna import androidx.lifecycle.LiveData import androidx.lifecycle.MutableLiveData import androidx.lifecycle.ViewModel -import com.sopt.umbba_android.data.model.response.AnswerResponseDto class AnswerViewModel : ViewModel() { var answer = MutableLiveData() diff --git a/app/src/main/java/com/sopt/umbba_android/presentation/splash/OnboardingActivity.kt b/app/src/main/java/com/sopt/umbba_android/presentation/splash/OnboardingActivity.kt new file mode 100644 index 00000000..e0b2a89f --- /dev/null +++ b/app/src/main/java/com/sopt/umbba_android/presentation/splash/OnboardingActivity.kt @@ -0,0 +1,32 @@ +package com.sopt.umbba_android.presentation.splash + +import android.os.Build.VERSION.SDK_INT +import android.os.Bundle +import coil.ImageLoader +import coil.decode.GifDecoder +import coil.decode.ImageDecoderDecoder +import coil.load +import com.sopt.umbba_android.R +import com.sopt.umbba_android.databinding.ActivityOnboardingBinding +import com.sopt.umbba_android.util.binding.BindingActivity + +class OnboardingActivity : BindingActivity(R.layout.activity_onboarding) { + override fun onCreate(savedInstanceState: Bundle?) { + super.onCreate(savedInstanceState) + + initLogoGif() + } + + private fun initLogoGif() { + val imageLoader = ImageLoader.Builder(applicationContext) + .components { + if (SDK_INT >= 28) { + add(ImageDecoderDecoder.Factory()) + } else { + add(GifDecoder.Factory()) + } + }.build() + + binding.ivLogoGif.load(R.raw.splash_logo, imageLoader = imageLoader) + } +} \ No newline at end of file diff --git a/app/src/main/java/com/sopt/umbba_android/presentation/viewmodel/InputInfoViewModel.kt b/app/src/main/java/com/sopt/umbba_android/presentation/viewmodel/InputInfoViewModel.kt new file mode 100644 index 00000000..b8336000 --- /dev/null +++ b/app/src/main/java/com/sopt/umbba_android/presentation/viewmodel/InputInfoViewModel.kt @@ -0,0 +1,21 @@ +package com.sopt.umbba_android.presentation.viewmodel + +import androidx.lifecycle.MutableLiveData +import androidx.lifecycle.ViewModel + +class InputInfoViewModel : ViewModel() { + val name = MutableLiveData() + val man = MutableLiveData() + val woman = MutableLiveData() + val year = MutableLiveData() + + val isAllInfoComplete = MutableLiveData() + + fun checkInfoComplete() { + return if (!name.value.isNullOrEmpty() && !year.value.isNullOrEmpty() && ((man.value == true) || (woman.value == true))) { + isAllInfoComplete.value = true + } else { + isAllInfoComplete.value = false + } + } +} \ No newline at end of file diff --git a/app/src/main/java/com/sopt/umbba_android/presentation/viewmodel/SelectFamilyViewModel.kt b/app/src/main/java/com/sopt/umbba_android/presentation/viewmodel/SelectFamilyViewModel.kt new file mode 100644 index 00000000..59617bea --- /dev/null +++ b/app/src/main/java/com/sopt/umbba_android/presentation/viewmodel/SelectFamilyViewModel.kt @@ -0,0 +1,17 @@ +package com.sopt.umbba_android.presentation.viewmodel + +import androidx.lifecycle.MutableLiveData +import androidx.lifecycle.ViewModel + +class SelectFamilyViewModel : ViewModel() { + val parent = MutableLiveData() + val child = MutableLiveData() + val mom = MutableLiveData() + val dad = MutableLiveData() + + val isAllSelectFamily = MutableLiveData() + + fun checkSelectFamily() { + isAllSelectFamily.value = (parent.value == true || child.value == true) && (mom.value == true || dad.value == true) + } +} \ No newline at end of file diff --git a/app/src/main/res/color/sel_btn_pri500_text.xml b/app/src/main/res/color/sel_btn_pri500_text.xml index 42ceda1f..24904c6d 100644 --- a/app/src/main/res/color/sel_btn_pri500_text.xml +++ b/app/src/main/res/color/sel_btn_pri500_text.xml @@ -1,5 +1,5 @@ - - + + \ No newline at end of file diff --git a/app/src/main/res/color/sel_btn_white_text.xml b/app/src/main/res/color/sel_btn_white_text.xml new file mode 100644 index 00000000..02c0d19a --- /dev/null +++ b/app/src/main/res/color/sel_btn_white_text.xml @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/app/src/main/res/color/sel_choice_chip_pri500_text.xml b/app/src/main/res/color/sel_choice_chip_text.xml similarity index 100% rename from app/src/main/res/color/sel_choice_chip_pri500_text.xml rename to app/src/main/res/color/sel_choice_chip_text.xml diff --git a/app/src/main/res/drawable/ic_check_48.xml b/app/src/main/res/drawable/ic_check_48.xml new file mode 100644 index 00000000..1c5a4110 --- /dev/null +++ b/app/src/main/res/drawable/ic_check_48.xml @@ -0,0 +1,13 @@ + + + diff --git a/app/src/main/res/drawable/ic_circle_check_48.xml b/app/src/main/res/drawable/ic_circle_check_48.xml new file mode 100644 index 00000000..5ae7daec --- /dev/null +++ b/app/src/main/res/drawable/ic_circle_check_48.xml @@ -0,0 +1,20 @@ + + + + diff --git a/app/src/main/res/drawable/ic_close_grey.xml b/app/src/main/res/drawable/ic_close_grey.xml new file mode 100644 index 00000000..739f8e71 --- /dev/null +++ b/app/src/main/res/drawable/ic_close_grey.xml @@ -0,0 +1,9 @@ + + + diff --git a/app/src/main/res/drawable/ic_no_check_48.xml b/app/src/main/res/drawable/ic_no_check_48.xml new file mode 100644 index 00000000..2292f109 --- /dev/null +++ b/app/src/main/res/drawable/ic_no_check_48.xml @@ -0,0 +1,13 @@ + + + diff --git a/app/src/main/res/drawable/ic_no_circle_check_48.xml b/app/src/main/res/drawable/ic_no_circle_check_48.xml new file mode 100644 index 00000000..cdd69722 --- /dev/null +++ b/app/src/main/res/drawable/ic_no_circle_check_48.xml @@ -0,0 +1,20 @@ + + + + diff --git a/app/src/main/res/drawable/sel_btn_agree.xml b/app/src/main/res/drawable/sel_btn_agree.xml new file mode 100644 index 00000000..0fd56b3f --- /dev/null +++ b/app/src/main/res/drawable/sel_btn_agree.xml @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/sel_btn_agree_circle.xml b/app/src/main/res/drawable/sel_btn_agree_circle.xml new file mode 100644 index 00000000..0d46ba64 --- /dev/null +++ b/app/src/main/res/drawable/sel_btn_agree_circle.xml @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/sel_btn_next_agree.xml b/app/src/main/res/drawable/sel_btn_next_agree.xml new file mode 100644 index 00000000..aa05795f --- /dev/null +++ b/app/src/main/res/drawable/sel_btn_next_agree.xml @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/shape_grey_line_1dp_rect.xml b/app/src/main/res/drawable/shape_grey_line_1dp_rect.xml new file mode 100644 index 00000000..02041e7a --- /dev/null +++ b/app/src/main/res/drawable/shape_grey_line_1dp_rect.xml @@ -0,0 +1,5 @@ + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/activity_agree_privacy_use.xml b/app/src/main/res/layout/activity_agree_privacy_use.xml new file mode 100644 index 00000000..768d8c6e --- /dev/null +++ b/app/src/main/res/layout/activity_agree_privacy_use.xml @@ -0,0 +1,208 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/activity_communication.xml b/app/src/main/res/layout/activity_communication.xml new file mode 100644 index 00000000..decc7454 --- /dev/null +++ b/app/src/main/res/layout/activity_communication.xml @@ -0,0 +1,39 @@ + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/activity_input_info.xml b/app/src/main/res/layout/activity_input_info.xml index 0b55cfe9..06115dca 100644 --- a/app/src/main/res/layout/activity_input_info.xml +++ b/app/src/main/res/layout/activity_input_info.xml @@ -12,6 +12,10 @@ + + @@ -123,14 +133,14 @@ @@ -149,6 +160,7 @@ style="@style/ChoiceChipStyle" android:layout_width="128dp" android:layout_height="wrap_content" + android:checked="@={viewmodel.woman}" android:text="@string/woman" app:chipMinHeight="52dp" /> @@ -183,7 +195,11 @@ android:layout_height="wrap_content" android:layout_marginHorizontal="24dp" android:layout_marginTop="12dp" + android:layout_marginBottom="4dp" android:textSize="16sp" + app:endIconDrawable="@drawable/ic_close_grey" + app:endIconMode="clear_text" + app:endIconTint="@color/grey_800" app:hintAnimationEnabled="false" app:hintEnabled="false" app:layout_constraintBottom_toBottomOf="parent" @@ -197,7 +213,9 @@ android:layout_width="match_parent" android:layout_height="wrap_content" android:hint="@string/please_input_birth_year" - android:textColor="@color/black" /> + android:maxLines="1" + android:text="@={viewmodel.year}" + android:textColor="@color/umbba_black" /> @@ -212,7 +230,8 @@ android:layout_width="match_parent" android:layout_height="60dp" android:layout_marginHorizontal="24dp" - android:layout_marginVertical="24dp" + android:layout_marginTop="12dp" + android:layout_marginBottom="24dp" android:background="@drawable/sel_btn_next" android:enabled="false" android:stateListAnimator="@null" diff --git a/app/src/main/res/layout/activity_invite.xml b/app/src/main/res/layout/activity_invite.xml index 8c445931..c350abf6 100644 --- a/app/src/main/res/layout/activity_invite.xml +++ b/app/src/main/res/layout/activity_invite.xml @@ -28,7 +28,7 @@ style="@style/BrandTypeBigRegular20" android:layout_width="wrap_content" android:layout_height="wrap_content" - android:layout_marginTop="16dp" + android:layout_marginTop="2dp" android:text="@string/app_title" android:textColor="@color/primary_500" app:layout_constraintEnd_toEndOf="parent" @@ -51,7 +51,7 @@ style="@style/AndroidBody3Bold16" android:layout_width="match_parent" android:layout_height="60dp" - android:layout_marginHorizontal="21dp" + android:layout_marginHorizontal="24dp" android:layout_marginBottom="12dp" android:background="@drawable/shape_gradient_btn_r50_rect" android:enabled="true" @@ -88,7 +88,7 @@ android:id="@+id/btn_input_code" android:layout_width="match_parent" android:layout_height="60dp" - android:layout_marginHorizontal="21dp" + android:layout_marginHorizontal="24dp" android:layout_marginVertical="24dp" android:background="@drawable/shape_pri500_btn_stroke_r50_rect" android:stateListAnimator="@null" diff --git a/app/src/main/res/layout/activity_login.xml b/app/src/main/res/layout/activity_login.xml index cbb24183..2d624cb8 100644 --- a/app/src/main/res/layout/activity_login.xml +++ b/app/src/main/res/layout/activity_login.xml @@ -28,7 +28,7 @@ style="@style/BrandTypeBigRegular20" android:layout_width="wrap_content" android:layout_height="wrap_content" - android:layout_marginTop="16dp" + android:layout_marginTop="2dp" android:text="@string/app_title" android:textColor="@color/primary_500" app:layout_constraintEnd_toEndOf="parent" diff --git a/app/src/main/res/layout/activity_onboarding.xml b/app/src/main/res/layout/activity_onboarding.xml new file mode 100644 index 00000000..35b0346c --- /dev/null +++ b/app/src/main/res/layout/activity_onboarding.xml @@ -0,0 +1,45 @@ + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/activity_onboarding_finish.xml b/app/src/main/res/layout/activity_onboarding_finish.xml new file mode 100644 index 00000000..683863b7 --- /dev/null +++ b/app/src/main/res/layout/activity_onboarding_finish.xml @@ -0,0 +1,47 @@ + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/activity_question_answer.xml b/app/src/main/res/layout/activity_question_answer.xml index 9942269c..c9c947a6 100644 --- a/app/src/main/res/layout/activity_question_answer.xml +++ b/app/src/main/res/layout/activity_question_answer.xml @@ -148,7 +148,7 @@ android:background="@drawable/sel_btn_answer" android:stateListAnimator="@null" android:text="@string/btn_question_answer" - android:textColor="@color/sel_btn_pri500_text" + android:textColor="@color/sel_btn_white_text" app:layout_constraintBottom_toBottomOf="parent" /> \ No newline at end of file diff --git a/app/src/main/res/layout/activity_select_family.xml b/app/src/main/res/layout/activity_select_family.xml index ba0a2c86..221f1cb6 100644 --- a/app/src/main/res/layout/activity_select_family.xml +++ b/app/src/main/res/layout/activity_select_family.xml @@ -13,6 +13,10 @@ name="clickListener" type="android.view.View.OnClickListener" /> + + @@ -89,6 +95,7 @@ style="@style/ChoiceChipStyle" android:layout_width="128dp" android:layout_height="wrap_content" + android:checked="@={viewmodel.child}" android:text="@string/child" app:chipMinHeight="52dp" /> @@ -103,7 +110,8 @@ android:layout_marginHorizontal="28dp" android:layout_marginTop="12dp" android:background="@drawable/shape_g400_stroke_r8_rect" - app:layout_constraintTop_toBottomOf="@id/cl_family"> + app:layout_constraintTop_toBottomOf="@id/cl_family" + android:visibility="gone"> @@ -144,6 +154,7 @@ style="@style/ChoiceChipStyle" android:layout_width="128dp" android:layout_height="wrap_content" + android:checked="@={viewmodel.dad}" android:text="@string/dad" app:chipMinHeight="52dp" /> diff --git a/app/src/main/res/layout/activity_set_time.xml b/app/src/main/res/layout/activity_set_time.xml index c431c186..9183298a 100644 --- a/app/src/main/res/layout/activity_set_time.xml +++ b/app/src/main/res/layout/activity_set_time.xml @@ -65,11 +65,9 @@ android:layout_marginHorizontal="24dp" android:layout_marginVertical="24dp" android:background="@drawable/sel_btn_next" - android:enabled="true" android:stateListAnimator="@null" android:text="@string/btn_next" - android:textColor="@color/white" - android:textSize="16sp" + android:textColor="@color/umbba_white" app:layout_constraintBottom_toBottomOf="parent" /> diff --git a/app/src/main/res/layout/fragment_back_answer_dialog.xml b/app/src/main/res/layout/fragment_back_answer_dialog.xml index 5687747d..2d82c9fb 100644 --- a/app/src/main/res/layout/fragment_back_answer_dialog.xml +++ b/app/src/main/res/layout/fragment_back_answer_dialog.xml @@ -26,12 +26,13 @@ 질문 확인하기 - 상대에게 교신을 보낼 차례야\n초대를 수락받으면 문답이 시작돼 + 상대를 초대할 차례야\n상대방이 수락하면 문답이 시작돼 초대코드 복사 - 초대장 보내기 + 카카오톡으로 초대 보내기 답변을 저장하시겠어요? @@ -109,4 +109,20 @@ 상대와의 연결이 끊겼습니다 새로운 상대와 함께하려면\n회원탈퇴 후 이용해주세요 + + 과거에 도착했어!\n앞으로 나눌 이야기가 많을 거야 + + + 전체 동의하기 + 본인은 만 14세 이상이며, 엄빠도 어렸다 서비스 이용약관, 개인정보 수집 및 이용에 모두 동의합니다. + [필수] 만 14세 이상입니다. + 엄빠도 어렸다 서비스를 이용하기 위해서는 만 14세 이상이 되어야 합니다. 만 14세 미만의 이용자의 경우 서비스 이용이 제한됩니다. + [필수] 서비스 이용약관에 동의합니다. + [필수] 개인정보 수집 및 이용에 동의합니다. + \'(주)이승준 컴퍼니\'(이하 \'회사\')가 운영하는 \'엄빠도 어렸다\'는 개인정보보호법 제30조 의거 이용자의 개인정보보호와 권익을 보호하고 관련된 고충 및 애로사항을 신속하게 처리하기 위해 아래의 개인정보처리방침을 제정·운영하고 있습니다. + + + 전화 받기 + 오래된 공중전화에서 수신음이 들린다 + \ No newline at end of file diff --git a/app/src/main/res/values/styles.xml b/app/src/main/res/values/styles.xml index d4b1395c..58950ba3 100644 --- a/app/src/main/res/values/styles.xml +++ b/app/src/main/res/values/styles.xml @@ -15,8 +15,10 @@ true @color/error_red @drawable/ic_close + @color/error_red @color/error_red @style/ErrorTextAppearance + @color/error_red @color/grey_800 50dp @@ -26,9 +28,10 @@ @@ -62,7 +66,7 @@ @font/pretendard_regular normal 16sp - @color/sel_choice_chip_pri500_text + @color/sel_choice_chip_text center