Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Feat/#21 가족 초대하기 기능 개발 #47

Open
wants to merge 17 commits into
base: develop
Choose a base branch
from
Open
Changes from 3 commits
Commits
Show all changes
17 commits
Select commit Hold shift + click to select a range
19acb8e
feat: 닉네임 입력화면, 생년월일 입력화면, 가족 그룹명 입력화면, 가족연결 화면, 초대하기 화면, 약관동의 화면 UI구…
posite Sep 24, 2023
ac5dbc6
feat: 사용자의 닉네임 입력을 위한 화면 구성 #14
posite Oct 7, 2023
329337a
fix: 잘못된 UI 수정 및 색상 추가, NickNameViewModel과 관련 없는 코드 수정
posite Oct 22, 2023
8de06d5
feat: 사용자의 생년월일 입력을 위한 화면 구성 #16
posite Oct 23, 2023
92616d4
fix: edittext hint 크기 및 색상 수정
posite Oct 23, 2023
87787b5
chore: review 반영 및 conflic resolve
posite Nov 9, 2023
7c59dcd
feat: 성선월일 입력 화면 구현 및 develop pull
posite Nov 9, 2023
a41fe9e
feat: 가족연결 화면 구현 #20
posite Nov 10, 2023
3d0899b
chore: pull develop branch #9
posite Dec 17, 2023
55ef70e
Merge branch 'feat/#9-개인정보입력화면개발' into feat/#14-닉네임-입력-화면-개발
posite Dec 17, 2023
895ea7d
Merge pull request #41 from TeamOwori/feat/#14-닉네임-입력-화면-개발
posite Dec 17, 2023
3f73f28
Merge pull request #42 from TeamOwori/feat/#16-생년월일-입력-화면
posite Dec 17, 2023
61625e0
Merge pull request #43 from TeamOwori/feat/#20-가족연결-기능-개발
posite Dec 17, 2023
f4b7daa
feat: 가족 그룹명 입력 화면 구성 및 view 오류 수정
posite Dec 17, 2023
730c5a4
feat: 초대하기 기능 구현 #21
posite Dec 17, 2023
8858c93
chore: timer 시작 시간 수정 및 변수 이름 변경 #21
posite Dec 17, 2023
fa66b64
fix: 매직 넘버 제거 및 필요 없는 databinding 코드 제거 #21
posite Dec 22, 2023
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
302 changes: 302 additions & 0 deletions app/src/main/java/com/owori/android/auth/ui/view/PolicyFragment.kt
Original file line number Diff line number Diff line change
@@ -0,0 +1,302 @@
package com.owori.android.auth.ui.view

import android.content.Intent
import android.net.Uri
import android.text.Editable
import android.text.SpannableStringBuilder
import android.text.Spanned
import android.text.TextWatcher
import android.text.style.ForegroundColorSpan
import android.util.Log
import android.view.Menu
import android.view.MenuInflater
import android.view.MenuItem
import android.view.View
import android.widget.TextView
import androidx.activity.addCallback
import androidx.appcompat.app.AppCompatActivity
import androidx.core.content.ContextCompat
import androidx.core.view.MenuHost
import androidx.core.view.MenuProvider
import com.owori.android.R
import com.owori.android.databinding.FragmentPolicyBinding
import com.owori.android.auth.ui.viewmodel.PolicyViewModel
import com.owori.android.common.ui.view.BaseFragment
import org.koin.android.ext.android.inject

class PolicyFragment :
BaseFragment<FragmentPolicyBinding, PolicyViewModel>(R.layout.fragment_policy) {
override val viewModel: PolicyViewModel by inject()

override fun setBindingVariables() {
with(binding) {
vm = viewModel
}
}

override fun initView() {
initTextWatcher()
initShareCodeExplain()
}

override fun initObserver() {
with(viewModel) {
nickName.observe(viewLifecycleOwner) {
Log.d("nickname", it)
if(it.isEmpty()) {
setButtonEnableFalse()
} else {
setButtonEnableTrue()
}
}
birthDate.observe(viewLifecycleOwner) {
val verify = it.split("-")
if(verify.size == 3) {
if(verify[0].length == 4 && verify[1].length == 2 && verify[2].length == 2) {
setButtonEnableTrue()
} else {
setButtonEnableFalse()
}
} else {
setButtonEnableFalse()
}
}

finishPolicy.observe(viewLifecycleOwner) {
val bottomSheetFragment = AgreeAutoLoginFragment()
bottomSheetFragment.show(parentFragmentManager, bottomSheetFragment.tag)
}
returnLogin.observe(viewLifecycleOwner) {
Log.d("뒤로가기", "1번에서 뒤로가기 눌림")
}
indexBack.observe(viewLifecycleOwner) {
// binding.viewpagerButton.isEnabled = true

setFrameVisibility()
setCurrentFragment()
}
indexForward.observe(viewLifecycleOwner) {
binding.viewpagerButton.isEnabled = false
setFrameVisibility()
setCurrentFragment()
}
groupName.observe(viewLifecycleOwner) {
if(it.isEmpty()) {
setButtonEnableFalse()
} else {
setButtonEnableTrue()
}
}
shareCode.observe(viewLifecycleOwner) {

}
groupCode.observe(viewLifecycleOwner) {
if(it.isEmpty()) {
setButtonEnableFalse()
} else {
setButtonEnableTrue()
}
}
checkedAll.observe(viewLifecycleOwner) {
setButtonEnableTrue()
val bottomSheetFragment = AgreeAutoLoginFragment()
bottomSheetFragment.show(parentFragmentManager, bottomSheetFragment.tag)
}
notChecked.observe(viewLifecycleOwner) {
setButtonEnableFalse()
}
serviceClicked.observe(viewLifecycleOwner) {
val intent = Intent(Intent.ACTION_VIEW, Uri.parse(resources.getString(R.string.service_page)))
startActivity(intent)
}
personalInfoClicked.observe(viewLifecycleOwner) {
val intent = Intent(Intent.ACTION_VIEW, Uri.parse(resources.getString(R.string.personal_info_page)))
startActivity(intent)
}
}
}

private fun setCurrentFragment() {
Log.d("currentIndex", viewModel.currentIndex.value.toString())
Log.d("lastIndex", viewModel.lastIndex.value.toString())
binding.indicatorLayout.visibility = View.VISIBLE
binding.backButton.visibility = View.VISIBLE
when (viewModel.currentIndex.value) {
0 -> {
binding.nicknameFrame.visibility = View.VISIBLE
if(!viewModel.nickName.value.isNullOrEmpty()) {
setButtonEnableTrue()
} else {
setButtonEnableFalse()
}
}
1 -> {
binding.birthdateFrame.visibility = View.VISIBLE
val verify = viewModel.birthDate.value?.split("-")
if(verify?.size == 3) {
if(verify[0].length == 4 && verify[1].length == 2 && verify[2].length == 2){
setButtonEnableTrue()
} else {
setButtonEnableFalse()
}
} else {
setButtonEnableFalse()
}
binding.viewpagerButton.visibility = View.VISIBLE
}
2 -> {
binding.familyConnectFrame.visibility = View.VISIBLE
binding.viewpagerButton.visibility = View.INVISIBLE
}
3 -> {
binding.groupFrame.visibility = View.VISIBLE
binding.viewpagerButton.visibility = View.VISIBLE
if(!viewModel.groupName.value.isNullOrEmpty()) {
setButtonEnableTrue()
} else {
setButtonEnableFalse()
}
}
4 -> {
binding.shareCodeFrame.visibility = View.VISIBLE
binding.indicatorLayout.visibility = View.GONE
binding.backButton.visibility = View.GONE
binding.closeButton.visibility = View.VISIBLE
setButtonEnableTrue()
}
5 -> {
if(!viewModel.groupCode.value.isNullOrEmpty()) {
setButtonEnableTrue()
} else {
setButtonEnableFalse()
}
binding.indicatorLayout.visibility = View.GONE
binding.backButton.visibility = View.GONE
binding.closeButton.visibility = View.VISIBLE
binding.viewpagerButton.visibility = View.VISIBLE
binding.inputCodeFrame.visibility = View.VISIBLE
binding.inputCodeExplainFrame.visibility = View.VISIBLE
}
6 -> {
if(viewModel.serviceChecked.value == true && viewModel.personalInfoChecked.value == true) {
setButtonEnableTrue()
} else {
setButtonEnableFalse()
}
setButtonEnableFalse()
binding.agreeServiceConditionFrame.visibility = View.VISIBLE
}
}
}

private fun initTextWatcher() {
binding.birthdateEt.addTextChangedListener(object : TextWatcher {
override fun beforeTextChanged(s: CharSequence?, start: Int, count: Int, after: Int) {
}
override fun onTextChanged(s: CharSequence?, start: Int, before: Int, count: Int) {
var textlength = 0
if(binding.birthdateEt.isFocusable() && !s.toString().equals("")) {
try{
textlength = binding.birthdateEt.text.toString().length
}catch (e: NumberFormatException){
e.printStackTrace()
return
}
if (textlength == 4 && before != 1) {
val date = binding.birthdateEt.text.toString()+"-"
binding.birthdateEt.setText(date)
binding.birthdateEt.setSelection(binding.birthdateEt.text.length)

}else if (textlength == 7&& before != 1){
val date = binding.birthdateEt.text.toString()+"-"
binding.birthdateEt.setText(date)
binding.birthdateEt.setSelection(binding.birthdateEt.text.length)

}else if(textlength == 5 && !binding.birthdateEt.text.toString().contains("-") && !binding.birthdateEt.text.toString().substring(0,4).contains('-')){
val date = binding.birthdateEt.text.toString().substring(0,4)+"-"+binding.birthdateEt.text.toString().substring(4)
binding.birthdateEt.setText(date)
binding.birthdateEt.setSelection(binding.birthdateEt.text.length)

}else if(textlength == 8 && binding.birthdateEt.text.toString().substring(7,8) != "-" && !binding.birthdateEt.text.toString().substring(0,4).contains('-')
&& !binding.birthdateEt.text.toString().substring(5,8).contains('-') && !binding.birthdateEt.text.toString().substring(5).contains('-')){
val date = binding.birthdateEt.text.toString().substring(0,7)+"-"+binding.birthdateEt.text.toString().substring(7)
binding.birthdateEt.setText(date)
binding.birthdateEt.setSelection(binding.birthdateEt.text.length)

}
}

}

override fun afterTextChanged(s: Editable?) {
}

})
}
private fun initCustomOnBackPressed() {
requireActivity().onBackPressedDispatcher.addCallback(this) {
viewModel.onClickBackButton()
}
}

private fun setFrameVisibility() {
binding.closeButton.visibility = View.GONE
binding.nicknameFrame.visibility = View.GONE
binding.birthdateFrame.visibility = View.GONE
binding.familyConnectFrame.visibility = View.GONE
binding.groupFrame.visibility = View.GONE
binding.shareCodeFrame.visibility = View.GONE
binding.inputCodeFrame.visibility = View.GONE
binding.inputCodeExplainFrame.visibility = View.GONE
binding.agreeServiceConditionFrame.visibility = View.GONE
}

private fun setButtonEnableTrue() {
binding.viewpagerButton.isEnabled = true
binding.viewpagerButton.setTextColor(ContextCompat.getColor(requireContext(), R.color.white))
}

private fun setButtonEnableFalse() {
binding.viewpagerButton.isEnabled = false
binding.viewpagerButton.setTextColor(ContextCompat.getColor(requireContext(), R.color.grey_909090))
}



private fun initShareCodeExplain() {
val builder = SpannableStringBuilder(binding.shareCodeExplain.text.toString())
val color9090Span1 = ForegroundColorSpan(ContextCompat.getColor(requireContext(), R.color.grey_909090))
val color9090Span2 = ForegroundColorSpan(ContextCompat.getColor(requireContext(), R.color.grey_909090))
builder.setSpan(color9090Span1, 12, 19, Spanned.SPAN_INCLUSIVE_INCLUSIVE)
builder.setSpan(color9090Span2, 48, 70, Spanned.SPAN_INCLUSIVE_INCLUSIVE)
binding.shareCodeExplain.text = builder
}

private fun setInputGroupCodeResult(result: Int) {
when(result) {
0 -> {
binding.inputCodeResult.text = resources.getString(R.string.input_code_success)
binding.inputCodeResult.setTextColor(ContextCompat.getColor(requireContext(), R.color.blue_1C86FF))
}
1-> {
binding.inputCodeResult.text = resources.getString(R.string.input_code_wrong)
binding.inputCodeResult.setTextColor(ContextCompat.getColor(requireContext(), R.color.red_FF3F3F))
}
2 -> {
binding.inputCodeResult.text = resources.getString(R.string.input_code_late)
binding.inputCodeResult.setTextColor(ContextCompat.getColor(requireContext(), R.color.red_FF3F3F))
}
else -> {
binding.inputCodeResult.text = resources.getString(R.string.input_code_wrong)
binding.inputCodeResult.setTextColor(ContextCompat.getColor(requireContext(), R.color.red_FF3F3F))
}
}

}


private fun registerOnPageChangeCallback() {

}

}
Loading