diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index aaafd46..14496f4 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -18,7 +18,8 @@ android:exported="true" android:screenOrientation="portrait" android:label="@string/app_name" - android:theme="@style/Theme.Owori"> + android:theme="@style/Theme.Owori" + android:windowSoftInputMode="adjustResize"> diff --git a/app/src/main/java/com/owori/android/auth/ui/view/PolicyFragment.kt b/app/src/main/java/com/owori/android/auth/ui/view/PolicyFragment.kt new file mode 100644 index 0000000..680276b --- /dev/null +++ b/app/src/main/java/com/owori/android/auth/ui/view/PolicyFragment.kt @@ -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(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() { + + } + +} \ No newline at end of file diff --git a/app/src/main/java/com/owori/android/auth/ui/viewmodel/PolicyViewModel.kt b/app/src/main/java/com/owori/android/auth/ui/viewmodel/PolicyViewModel.kt new file mode 100644 index 0000000..e2b744f --- /dev/null +++ b/app/src/main/java/com/owori/android/auth/ui/viewmodel/PolicyViewModel.kt @@ -0,0 +1,127 @@ +package com.owori.android.auth.ui.viewmodel + +import android.util.Log +import androidx.lifecycle.LiveData +import androidx.lifecycle.MutableLiveData +import com.owori.android.common.SingleLiveEvent +import com.owori.android.common.ui.viewmodel.BaseViewModel + +class PolicyViewModel : BaseViewModel() { + private val _currentIndex: MutableLiveData = MutableLiveData(0) + val currentIndex: LiveData = _currentIndex + private val _finishPolicy: SingleLiveEvent = SingleLiveEvent() + val finishPolicy: LiveData = _finishPolicy + private val _returnLogin: SingleLiveEvent = SingleLiveEvent() + val returnLogin: LiveData = _returnLogin + private val _indexBack: SingleLiveEvent = SingleLiveEvent() + val indexBack: LiveData = _indexBack + private val _indexForward: SingleLiveEvent = SingleLiveEvent() + val indexForward: LiveData = _indexForward + private val _shareCode: SingleLiveEvent = SingleLiveEvent() + val shareCode: LiveData = _shareCode + private val _checkedAll: SingleLiveEvent = SingleLiveEvent() + val checkedAll: LiveData = _checkedAll + private val _notChecked: SingleLiveEvent = SingleLiveEvent() + val notChecked: LiveData = _notChecked + private val _personalInfoClicked: SingleLiveEvent = SingleLiveEvent() + val personalInfoClicked: LiveData = _personalInfoClicked + private val _serviceClicked: SingleLiveEvent = SingleLiveEvent() + val serviceClicked: LiveData = _serviceClicked + + val _nickName: MutableLiveData = MutableLiveData() + val nickName: LiveData = _nickName + val _birthDate: MutableLiveData = MutableLiveData("") + val birthDate: LiveData = _birthDate + val _groupName: MutableLiveData = MutableLiveData("") + val groupName: LiveData = _groupName + val _groupCode: MutableLiveData = MutableLiveData("") + val groupCode: LiveData = _groupCode + val _serviceChecked: MutableLiveData = MutableLiveData(false) + val serviceChecked: LiveData = _serviceChecked + val _personalInfoChecked: MutableLiveData = MutableLiveData(false) + val personalInfoChecked: LiveData = _personalInfoChecked + + private var _lastIndex : MutableLiveData = MutableLiveData(0) + val lastIndex = _lastIndex + + fun onClickCheckButton() { + _currentIndex.value?.let { _index -> + when (_index) { + in 4..5 -> { + _currentIndex.value = LAST_PAGE + _lastIndex.value = _index + if(personalInfoChecked.value == true && serviceChecked.value == true) { + _checkedAll.call() + } + _indexForward.call() + } + LAST_PAGE -> { + _finishPolicy.call() + } + else -> { + _lastIndex.value = _index + _currentIndex.value = _currentIndex.value?.plus(1) + _indexForward.call() + } + } + } + } + + fun onClickBackButton() { + _currentIndex.value?.let { _index -> + if (_index == 0) _returnLogin.call() + else { + _currentIndex.value = lastIndex.value + if(_lastIndex.value == 5) { + _lastIndex.value = 2 + } else { + _lastIndex.value = _lastIndex.value?.minus(1) + } + _indexBack.call() + } + } + } + + fun onClickReceivedCodeButton() { + _currentIndex.value?.let { _index -> + _lastIndex.value = 2 + _currentIndex.value = 5 + _indexForward.call() + } + } + + fun onClickMakeCodeButton() { + _lastIndex.value = 2 + _currentIndex.value = 3 + _indexForward.call() + } + + fun onClickShareCodeButton() { + _shareCode.call() + } + + fun onClickCheckBox() { + if(personalInfoChecked.value == true && serviceChecked.value == true) { + _checkedAll.call() + } else { + + } + } + + fun onClickService() { + _serviceClicked.call() + } + + fun onClickPersonalInfo() { + _personalInfoClicked.call() + } + + fun setCurrentItemIndex(index: Int) { + _currentIndex.value = index + } + + companion object { + private const val LAST_PAGE = 6 + } + +} \ No newline at end of file diff --git a/app/src/main/java/com/owori/android/presenter/login/LoginFragment.kt b/app/src/main/java/com/owori/android/presenter/login/LoginFragment.kt index a8568a0..90981b6 100644 --- a/app/src/main/java/com/owori/android/presenter/login/LoginFragment.kt +++ b/app/src/main/java/com/owori/android/presenter/login/LoginFragment.kt @@ -26,11 +26,11 @@ class LoginFragment : BaseFragment(R.layou with(viewModel) { // TODO : PolicyFragment를 위해 작성한 부분이라 수정 필요. callKakaoLogin.observe(viewLifecycleOwner) { - navigateTo(R.id.action_loginFragment_to_PolicyFragment) + navigateTo(R.id.action_LoginFragment_to_nickNameFragment) } callGoogleLogin.observe(viewLifecycleOwner) { - navigateTo(R.id.action_loginFragment_to_PolicyFragment) + navigateTo(R.id.action_LoginFragment_to_nickNameFragment) } } } diff --git a/app/src/main/java/com/owori/android/presenter/onboarding/AgreeAutoLoginFragment.kt b/app/src/main/java/com/owori/android/presenter/onboarding/AgreeAutoLoginFragment.kt new file mode 100644 index 0000000..30e6781 --- /dev/null +++ b/app/src/main/java/com/owori/android/presenter/onboarding/AgreeAutoLoginFragment.kt @@ -0,0 +1,26 @@ +package com.owori.android.auth.ui.view + +import android.os.Bundle +import androidx.fragment.app.Fragment +import android.view.LayoutInflater +import android.view.View +import android.view.ViewGroup +import com.google.android.material.bottomsheet.BottomSheetDialogFragment +import com.owori.android.R +import com.owori.android.databinding.FragmentAgreeAutoLoginBinding + + +class AgreeAutoLoginFragment: BottomSheetDialogFragment() { + + private lateinit var binding: FragmentAgreeAutoLoginBinding + override fun onCreateView( + inflater: LayoutInflater, container: ViewGroup?, + savedInstanceState: Bundle? + ): View? { + // Inflate the layout for this fragment + binding = FragmentAgreeAutoLoginBinding.inflate(inflater, container, false) + return binding.root + } + + +} \ No newline at end of file diff --git a/app/src/main/java/com/owori/android/presenter/policy/AgreeServiceConditionFragment.kt b/app/src/main/java/com/owori/android/presenter/policy/AgreeServiceConditionFragment.kt new file mode 100644 index 0000000..90190c0 --- /dev/null +++ b/app/src/main/java/com/owori/android/presenter/policy/AgreeServiceConditionFragment.kt @@ -0,0 +1,23 @@ +package com.owori.android.presenter.policy + +import androidx.fragment.app.viewModels +import com.owori.android.R +import com.owori.android.core.BaseFragment +import com.owori.android.databinding.FragmentAgreeServiceConditionBinding + +class AgreeServiceConditionFragment : BaseFragment(R.layout.fragment_agree_service_condition) { + override val viewModel: AgreeServiceConditionViewModel by viewModels() + override fun setBindingVariables() { + with(binding) { + vm = viewModel + } + } + + override fun initView() { + + } + + override fun initObserver() { + + } +} \ No newline at end of file diff --git a/app/src/main/java/com/owori/android/presenter/policy/AgreeServiceConditionViewModel.kt b/app/src/main/java/com/owori/android/presenter/policy/AgreeServiceConditionViewModel.kt new file mode 100644 index 0000000..904d7d0 --- /dev/null +++ b/app/src/main/java/com/owori/android/presenter/policy/AgreeServiceConditionViewModel.kt @@ -0,0 +1,17 @@ +package com.owori.android.presenter.policy + +import androidx.lifecycle.LiveData +import com.owori.android.core.BaseViewModel +import com.owori.android.presenter.util.SingleLiveEvent +import dagger.hilt.android.lifecycle.HiltViewModel +import javax.inject.Inject + +@HiltViewModel +class AgreeServiceConditionViewModel @Inject constructor(): BaseViewModel() { + private val _btnNext: SingleLiveEvent = SingleLiveEvent() + val btnNext: LiveData = _btnNext + + fun onClickCheckButton() { + _btnNext.call() + } +} \ No newline at end of file diff --git a/app/src/main/java/com/owori/android/presenter/policy/BirthDateFragment.kt b/app/src/main/java/com/owori/android/presenter/policy/BirthDateFragment.kt new file mode 100644 index 0000000..095b54e --- /dev/null +++ b/app/src/main/java/com/owori/android/presenter/policy/BirthDateFragment.kt @@ -0,0 +1,30 @@ +package com.owori.android.presenter.policy + + +import androidx.fragment.app.viewModels +import com.owori.android.R +import com.owori.android.core.BaseFragment +import com.owori.android.core.navigateTo +import com.owori.android.databinding.FragmentBirthDateBinding + + +class BirthDateFragment : BaseFragment(R.layout.fragment_birth_date) { + override val viewModel: BirthDateViewModel by viewModels() + override fun setBindingVariables() { + with(binding) { + vm = viewModel + } + } + + override fun initView() { + + } + + override fun initObserver() { + with(viewModel) { + btnNext.observe(viewLifecycleOwner) { + navigateTo(R.id.action_birthDateFragment_to_familyConnectFragment) + } + } + } +} \ No newline at end of file diff --git a/app/src/main/java/com/owori/android/presenter/policy/BirthDateViewModel.kt b/app/src/main/java/com/owori/android/presenter/policy/BirthDateViewModel.kt new file mode 100644 index 0000000..11dd9f1 --- /dev/null +++ b/app/src/main/java/com/owori/android/presenter/policy/BirthDateViewModel.kt @@ -0,0 +1,17 @@ +package com.owori.android.presenter.policy + +import androidx.lifecycle.LiveData +import com.owori.android.core.BaseViewModel +import com.owori.android.presenter.util.SingleLiveEvent +import dagger.hilt.android.lifecycle.HiltViewModel +import javax.inject.Inject + +@HiltViewModel +class BirthDateViewModel @Inject constructor(): BaseViewModel() { + private val _btnNext: SingleLiveEvent = SingleLiveEvent() + val btnNext: LiveData = _btnNext + + fun onClickCheckButton() { + _btnNext.call() + } +} \ No newline at end of file diff --git a/app/src/main/java/com/owori/android/presenter/policy/FamilyConnectFragment.kt b/app/src/main/java/com/owori/android/presenter/policy/FamilyConnectFragment.kt new file mode 100644 index 0000000..ee5dc4c --- /dev/null +++ b/app/src/main/java/com/owori/android/presenter/policy/FamilyConnectFragment.kt @@ -0,0 +1,33 @@ +package com.owori.android.presenter.policy + + +import androidx.fragment.app.viewModels +import com.owori.android.R +import com.owori.android.core.BaseFragment +import com.owori.android.core.navigateTo +import com.owori.android.databinding.FragmentFamilyConnectBinding + + +class FamilyConnectFragment : BaseFragment(R.layout.fragment_family_connect) { + override val viewModel: FamilyConnectViewModel by viewModels() + override fun setBindingVariables() { + with(binding) { + vm = viewModel + } + } + + override fun initView() { + + } + + override fun initObserver() { + with(viewModel) { + returnLogin.observe(viewLifecycleOwner) { + navigateTo(R.id.action_familyConnectFragment_to_inputFamilyCodeFragment) + } + btnNext.observe(viewLifecycleOwner) { + navigateTo(R.id.action_familyConnectFragment_to_groupFragment) + } + } + } +} \ No newline at end of file diff --git a/app/src/main/java/com/owori/android/presenter/policy/FamilyConnectViewModel.kt b/app/src/main/java/com/owori/android/presenter/policy/FamilyConnectViewModel.kt new file mode 100644 index 0000000..88f2df4 --- /dev/null +++ b/app/src/main/java/com/owori/android/presenter/policy/FamilyConnectViewModel.kt @@ -0,0 +1,24 @@ +package com.owori.android.presenter.policy + +import androidx.lifecycle.LiveData +import com.owori.android.core.BaseViewModel +import com.owori.android.presenter.util.SingleLiveEvent +import dagger.hilt.android.lifecycle.HiltViewModel +import javax.inject.Inject + +@HiltViewModel +class FamilyConnectViewModel @Inject constructor(): BaseViewModel() { + + private val _btnNext: SingleLiveEvent = SingleLiveEvent() + val btnNext: LiveData = _btnNext + private val _returnLogin: SingleLiveEvent = SingleLiveEvent() + val returnLogin: LiveData = _returnLogin + + fun onClickCheckButton() { + _btnNext.call() + } + + fun onClickBackButton() { + _returnLogin.call() + } +} \ No newline at end of file diff --git a/app/src/main/java/com/owori/android/presenter/policy/GroupFragment.kt b/app/src/main/java/com/owori/android/presenter/policy/GroupFragment.kt new file mode 100644 index 0000000..c51f86b --- /dev/null +++ b/app/src/main/java/com/owori/android/presenter/policy/GroupFragment.kt @@ -0,0 +1,30 @@ +package com.owori.android.presenter.policy + + +import androidx.fragment.app.viewModels +import com.owori.android.R +import com.owori.android.core.BaseFragment +import com.owori.android.core.navigateTo +import com.owori.android.databinding.FragmentGroupBinding + + +class GroupFragment : BaseFragment(R.layout.fragment_group) { + override val viewModel: GroupViewModel by viewModels() + override fun setBindingVariables() { + with(binding) { + vm = viewModel + } + } + + override fun initView() { + + } + + override fun initObserver() { + with(viewModel) { + btnNext.observe(viewLifecycleOwner) { + navigateTo(R.id.action_groupFragment_to_shareCodeFragment) + } + } + } +} \ No newline at end of file diff --git a/app/src/main/java/com/owori/android/presenter/policy/GroupViewModel.kt b/app/src/main/java/com/owori/android/presenter/policy/GroupViewModel.kt new file mode 100644 index 0000000..57dbb10 --- /dev/null +++ b/app/src/main/java/com/owori/android/presenter/policy/GroupViewModel.kt @@ -0,0 +1,17 @@ +package com.owori.android.presenter.policy + +import androidx.lifecycle.LiveData +import com.owori.android.core.BaseViewModel +import com.owori.android.presenter.util.SingleLiveEvent +import dagger.hilt.android.lifecycle.HiltViewModel +import javax.inject.Inject + +@HiltViewModel +class GroupViewModel @Inject constructor(): BaseViewModel() { + private val _btnNext: SingleLiveEvent = SingleLiveEvent() + val btnNext: LiveData = _btnNext + + fun onClickCheckButton() { + _btnNext.call() + } +} \ No newline at end of file diff --git a/app/src/main/java/com/owori/android/presenter/policy/InputFamilyCodeFragment.kt b/app/src/main/java/com/owori/android/presenter/policy/InputFamilyCodeFragment.kt new file mode 100644 index 0000000..9921dfa --- /dev/null +++ b/app/src/main/java/com/owori/android/presenter/policy/InputFamilyCodeFragment.kt @@ -0,0 +1,30 @@ +package com.owori.android.presenter.policy + + +import androidx.fragment.app.viewModels +import com.owori.android.R +import com.owori.android.core.BaseFragment +import com.owori.android.core.navigateTo +import com.owori.android.databinding.FragmentInputFamilyCodeBinding + + +class InputFamilyCodeFragment : BaseFragment(R.layout.fragment_input_family_code) { + override val viewModel: InputFamilyCodeViewModel by viewModels() + override fun setBindingVariables() { + with(binding) { + vm = viewModel + } + } + + override fun initView() { + + } + + override fun initObserver() { + with(viewModel) { + btnNext.observe(viewLifecycleOwner) { + navigateTo(R.id.action_inputFamilyCodeFragment_to_agreeServiceConditionFragment) + } + } + } +} \ No newline at end of file diff --git a/app/src/main/java/com/owori/android/presenter/policy/InputFamilyCodeViewModel.kt b/app/src/main/java/com/owori/android/presenter/policy/InputFamilyCodeViewModel.kt new file mode 100644 index 0000000..dc3472d --- /dev/null +++ b/app/src/main/java/com/owori/android/presenter/policy/InputFamilyCodeViewModel.kt @@ -0,0 +1,17 @@ +package com.owori.android.presenter.policy + +import androidx.lifecycle.LiveData +import com.owori.android.core.BaseViewModel +import com.owori.android.presenter.util.SingleLiveEvent +import dagger.hilt.android.lifecycle.HiltViewModel +import javax.inject.Inject + +@HiltViewModel +class InputFamilyCodeViewModel @Inject constructor(): BaseViewModel() { + private val _btnNext: SingleLiveEvent = SingleLiveEvent() + val btnNext: LiveData = _btnNext + + fun onClickCheckButton() { + _btnNext.call() + } +} \ No newline at end of file diff --git a/app/src/main/java/com/owori/android/presenter/policy/NickNameFragment.kt b/app/src/main/java/com/owori/android/presenter/policy/NickNameFragment.kt new file mode 100644 index 0000000..dfb6d16 --- /dev/null +++ b/app/src/main/java/com/owori/android/presenter/policy/NickNameFragment.kt @@ -0,0 +1,51 @@ +package com.owori.android.presenter.policy + + +import androidx.core.content.ContextCompat +import androidx.fragment.app.viewModels +import com.owori.android.R +import com.owori.android.core.BaseFragment +import com.owori.android.core.navigateTo +import com.owori.android.databinding.FragmentNickNameBinding +import dagger.hilt.android.AndroidEntryPoint + +@AndroidEntryPoint +class NickNameFragment: BaseFragment(R.layout.fragment_nick_name) { + override val viewModel: NickNameViewModel by viewModels() + override fun setBindingVariables() { + with(binding) { + vm = viewModel + } + } + + override fun initView() { + + } + + override fun initObserver() { + with(viewModel) { + nickname.observe(viewLifecycleOwner) { + setViewPagerButton(it) + } + + returnLogin.observe(viewLifecycleOwner) { + requireActivity().onBackPressedDispatcher.onBackPressed() + } + btnNext.observe(viewLifecycleOwner) { + navigateTo(R.id.action_nickNameFragment_to_birthDateFragment) + } + } + } + + fun setViewPagerButton(nickname: String) { + val isInputted = nickname.isNotEmpty() + with(binding.viewpagerButton) { + isEnabled = isInputted + if(isInputted) { + setTextColor(ContextCompat.getColor(requireContext(), R.color.white)) + } else { + setTextColor(ContextCompat.getColor(requireContext(), R.color.grey_909090)) + } + } + } +} \ No newline at end of file diff --git a/app/src/main/java/com/owori/android/presenter/policy/NickNameViewModel.kt b/app/src/main/java/com/owori/android/presenter/policy/NickNameViewModel.kt new file mode 100644 index 0000000..cbda814 --- /dev/null +++ b/app/src/main/java/com/owori/android/presenter/policy/NickNameViewModel.kt @@ -0,0 +1,27 @@ +package com.owori.android.presenter.policy + +import androidx.lifecycle.LiveData +import androidx.lifecycle.MutableLiveData +import com.owori.android.core.BaseViewModel +import com.owori.android.presenter.util.SingleLiveEvent +import dagger.hilt.android.lifecycle.HiltViewModel +import javax.inject.Inject + +@HiltViewModel +class NickNameViewModel @Inject constructor(): BaseViewModel(){ + val _nickname: MutableLiveData = MutableLiveData("") + val nickname: LiveData = _nickname + + private val _returnLogin: SingleLiveEvent = SingleLiveEvent() + val returnLogin: LiveData = _returnLogin + private val _btnNext: SingleLiveEvent = SingleLiveEvent() + val btnNext: LiveData = _btnNext + + fun onClickCheckButton() { + _btnNext.call() + } + + fun onClickBackButton() { + _returnLogin.call() + } +} \ No newline at end of file diff --git a/app/src/main/java/com/owori/android/presenter/policy/ShareCodeFragment.kt b/app/src/main/java/com/owori/android/presenter/policy/ShareCodeFragment.kt new file mode 100644 index 0000000..435a8ba --- /dev/null +++ b/app/src/main/java/com/owori/android/presenter/policy/ShareCodeFragment.kt @@ -0,0 +1,30 @@ +package com.owori.android.presenter.policy + + +import androidx.fragment.app.viewModels +import com.owori.android.R +import com.owori.android.core.BaseFragment +import com.owori.android.core.navigateTo +import com.owori.android.databinding.FragmentShareCodeBinding + + +class ShareCodeFragment : BaseFragment(R.layout.fragment_share_code) { + override val viewModel: ShareCodeViewModel by viewModels() + override fun setBindingVariables() { + with(binding) { + vm = viewModel + } + } + + override fun initView() { + + } + + override fun initObserver() { + with(viewModel) { + btnNext.observe(viewLifecycleOwner) { + navigateTo(R.id.action_shareCodeFragment_to_agreeServiceConditionFragment) + } + } + } +} \ No newline at end of file diff --git a/app/src/main/java/com/owori/android/presenter/policy/ShareCodeViewModel.kt b/app/src/main/java/com/owori/android/presenter/policy/ShareCodeViewModel.kt new file mode 100644 index 0000000..337c4cb --- /dev/null +++ b/app/src/main/java/com/owori/android/presenter/policy/ShareCodeViewModel.kt @@ -0,0 +1,18 @@ +package com.owori.android.presenter.policy + +import androidx.lifecycle.LiveData +import com.owori.android.core.BaseViewModel +import com.owori.android.presenter.util.SingleLiveEvent +import dagger.hilt.android.lifecycle.HiltViewModel +import javax.inject.Inject + +@HiltViewModel +class ShareCodeViewModel @Inject constructor(): BaseViewModel() { + private val _btnNext: SingleLiveEvent = SingleLiveEvent() + val btnNext: LiveData = _btnNext + + + fun onClickCheckButton() { + _btnNext.call() + } +} \ No newline at end of file diff --git a/app/src/main/java/com/owori/android/presenter/util/TextViewExtension.kt b/app/src/main/java/com/owori/android/presenter/util/TextViewExtension.kt index d1a0a67..395aeb0 100644 --- a/app/src/main/java/com/owori/android/presenter/util/TextViewExtension.kt +++ b/app/src/main/java/com/owori/android/presenter/util/TextViewExtension.kt @@ -26,3 +26,10 @@ fun TextView.setSubTitleText(currentItemIndex: Int) { ) } +@BindingAdapter("setTextLength") +fun TextView.setTextLength(text: String) { + setText( + text.length.toString() + ) +} + diff --git a/app/src/main/res/drawable/arrow_back.xml b/app/src/main/res/drawable/arrow_back.xml new file mode 100644 index 0000000..87a773f --- /dev/null +++ b/app/src/main/res/drawable/arrow_back.xml @@ -0,0 +1,5 @@ + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/arrow_next.xml b/app/src/main/res/drawable/arrow_next.xml new file mode 100644 index 0000000..7709483 --- /dev/null +++ b/app/src/main/res/drawable/arrow_next.xml @@ -0,0 +1,5 @@ + + + diff --git a/app/src/main/res/drawable/check_btn_ripple.xml b/app/src/main/res/drawable/check_btn_ripple.xml new file mode 100644 index 0000000..ba659b0 --- /dev/null +++ b/app/src/main/res/drawable/check_btn_ripple.xml @@ -0,0 +1,5 @@ + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/check_btn_selector.xml b/app/src/main/res/drawable/check_btn_selector.xml new file mode 100644 index 0000000..846f880 --- /dev/null +++ b/app/src/main/res/drawable/check_btn_selector.xml @@ -0,0 +1,9 @@ + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/check_text_selector.xml b/app/src/main/res/drawable/check_text_selector.xml new file mode 100644 index 0000000..de50880 --- /dev/null +++ b/app/src/main/res/drawable/check_text_selector.xml @@ -0,0 +1,9 @@ + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/close.png b/app/src/main/res/drawable/close.png new file mode 100644 index 0000000..a4dfab9 Binary files /dev/null and b/app/src/main/res/drawable/close.png differ diff --git a/app/src/main/res/drawable/color_check_button.xml b/app/src/main/res/drawable/color_check_button.xml new file mode 100644 index 0000000..846f880 --- /dev/null +++ b/app/src/main/res/drawable/color_check_button.xml @@ -0,0 +1,9 @@ + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/dot.png b/app/src/main/res/drawable/dot.png new file mode 100644 index 0000000..73aa0d5 Binary files /dev/null and b/app/src/main/res/drawable/dot.png differ diff --git a/app/src/main/res/drawable/family_code.png b/app/src/main/res/drawable/family_code.png new file mode 100644 index 0000000..baa3529 Binary files /dev/null and b/app/src/main/res/drawable/family_code.png differ diff --git a/app/src/main/res/drawable/focused_agree.png b/app/src/main/res/drawable/focused_agree.png new file mode 100644 index 0000000..6e4bc22 Binary files /dev/null and b/app/src/main/res/drawable/focused_agree.png differ diff --git a/app/src/main/res/drawable/focused_agree.xml b/app/src/main/res/drawable/focused_agree.xml new file mode 100644 index 0000000..3ed01c7 --- /dev/null +++ b/app/src/main/res/drawable/focused_agree.xml @@ -0,0 +1,12 @@ + + + + diff --git a/app/src/main/res/drawable/focused_birthdate.png b/app/src/main/res/drawable/focused_birthdate.png new file mode 100644 index 0000000..fef74d1 Binary files /dev/null and b/app/src/main/res/drawable/focused_birthdate.png differ diff --git a/app/src/main/res/drawable/focused_birthdate.xml b/app/src/main/res/drawable/focused_birthdate.xml new file mode 100644 index 0000000..5eb23c5 --- /dev/null +++ b/app/src/main/res/drawable/focused_birthdate.xml @@ -0,0 +1,12 @@ + + + + diff --git a/app/src/main/res/drawable/focused_connect.png b/app/src/main/res/drawable/focused_connect.png new file mode 100644 index 0000000..564a432 Binary files /dev/null and b/app/src/main/res/drawable/focused_connect.png differ diff --git a/app/src/main/res/drawable/focused_connect.xml b/app/src/main/res/drawable/focused_connect.xml new file mode 100644 index 0000000..f6b94e6 --- /dev/null +++ b/app/src/main/res/drawable/focused_connect.xml @@ -0,0 +1,12 @@ + + + + diff --git a/app/src/main/res/drawable/focused_group.png b/app/src/main/res/drawable/focused_group.png new file mode 100644 index 0000000..9e02b5c Binary files /dev/null and b/app/src/main/res/drawable/focused_group.png differ diff --git a/app/src/main/res/drawable/focused_group.xml b/app/src/main/res/drawable/focused_group.xml new file mode 100644 index 0000000..03aecc6 --- /dev/null +++ b/app/src/main/res/drawable/focused_group.xml @@ -0,0 +1,12 @@ + + + + diff --git a/app/src/main/res/drawable/focused_nickname.png b/app/src/main/res/drawable/focused_nickname.png new file mode 100644 index 0000000..55c8c91 Binary files /dev/null and b/app/src/main/res/drawable/focused_nickname.png differ diff --git a/app/src/main/res/drawable/focused_nickname.xml b/app/src/main/res/drawable/focused_nickname.xml new file mode 100644 index 0000000..fc7ea31 --- /dev/null +++ b/app/src/main/res/drawable/focused_nickname.xml @@ -0,0 +1,12 @@ + + + + diff --git a/app/src/main/res/drawable/input_code_explain_background.xml b/app/src/main/res/drawable/input_code_explain_background.xml new file mode 100644 index 0000000..7af3c8e --- /dev/null +++ b/app/src/main/res/drawable/input_code_explain_background.xml @@ -0,0 +1,12 @@ + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/make_code_background.xml b/app/src/main/res/drawable/make_code_background.xml new file mode 100644 index 0000000..8a8f9fd --- /dev/null +++ b/app/src/main/res/drawable/make_code_background.xml @@ -0,0 +1,11 @@ + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/navigation_line.xml b/app/src/main/res/drawable/navigation_line.xml new file mode 100644 index 0000000..317fe1e --- /dev/null +++ b/app/src/main/res/drawable/navigation_line.xml @@ -0,0 +1,7 @@ + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/no_background.xml b/app/src/main/res/drawable/no_background.xml new file mode 100644 index 0000000..71bc3f6 --- /dev/null +++ b/app/src/main/res/drawable/no_background.xml @@ -0,0 +1,11 @@ + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/received_code_background.xml b/app/src/main/res/drawable/received_code_background.xml new file mode 100644 index 0000000..ed52708 --- /dev/null +++ b/app/src/main/res/drawable/received_code_background.xml @@ -0,0 +1,14 @@ + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/ripple_check_button.xml b/app/src/main/res/drawable/ripple_check_button.xml new file mode 100644 index 0000000..d638a07 --- /dev/null +++ b/app/src/main/res/drawable/ripple_check_button.xml @@ -0,0 +1,7 @@ + + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/round_bottomsheet.xml b/app/src/main/res/drawable/round_bottomsheet.xml new file mode 100644 index 0000000..fb23872 --- /dev/null +++ b/app/src/main/res/drawable/round_bottomsheet.xml @@ -0,0 +1,8 @@ + + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/share_code_background.xml b/app/src/main/res/drawable/share_code_background.xml new file mode 100644 index 0000000..34ff801 --- /dev/null +++ b/app/src/main/res/drawable/share_code_background.xml @@ -0,0 +1,11 @@ + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/drawable/share_pricture.png b/app/src/main/res/drawable/share_pricture.png new file mode 100644 index 0000000..e07baab Binary files /dev/null and b/app/src/main/res/drawable/share_pricture.png differ diff --git a/app/src/main/res/drawable/unfocused_agree.png b/app/src/main/res/drawable/unfocused_agree.png new file mode 100644 index 0000000..941d7e8 Binary files /dev/null and b/app/src/main/res/drawable/unfocused_agree.png differ diff --git a/app/src/main/res/drawable/unfocused_agree.xml b/app/src/main/res/drawable/unfocused_agree.xml new file mode 100644 index 0000000..caaa112 --- /dev/null +++ b/app/src/main/res/drawable/unfocused_agree.xml @@ -0,0 +1,14 @@ + + + + diff --git a/app/src/main/res/drawable/unfocused_birthdate.png b/app/src/main/res/drawable/unfocused_birthdate.png new file mode 100644 index 0000000..e332a3b Binary files /dev/null and b/app/src/main/res/drawable/unfocused_birthdate.png differ diff --git a/app/src/main/res/drawable/unfocused_birthdate.xml b/app/src/main/res/drawable/unfocused_birthdate.xml new file mode 100644 index 0000000..eb48e1e --- /dev/null +++ b/app/src/main/res/drawable/unfocused_birthdate.xml @@ -0,0 +1,14 @@ + + + + diff --git a/app/src/main/res/drawable/unfocused_connect.png b/app/src/main/res/drawable/unfocused_connect.png new file mode 100644 index 0000000..7facc1d Binary files /dev/null and b/app/src/main/res/drawable/unfocused_connect.png differ diff --git a/app/src/main/res/drawable/unfocused_connect.xml b/app/src/main/res/drawable/unfocused_connect.xml new file mode 100644 index 0000000..a0816c4 --- /dev/null +++ b/app/src/main/res/drawable/unfocused_connect.xml @@ -0,0 +1,14 @@ + + + + diff --git a/app/src/main/res/drawable/unfocused_group.png b/app/src/main/res/drawable/unfocused_group.png new file mode 100644 index 0000000..9487306 Binary files /dev/null and b/app/src/main/res/drawable/unfocused_group.png differ diff --git a/app/src/main/res/drawable/unfocused_group.xml b/app/src/main/res/drawable/unfocused_group.xml new file mode 100644 index 0000000..cb69f24 --- /dev/null +++ b/app/src/main/res/drawable/unfocused_group.xml @@ -0,0 +1,14 @@ + + + + diff --git a/app/src/main/res/drawable/unfocused_nickname.png b/app/src/main/res/drawable/unfocused_nickname.png new file mode 100644 index 0000000..cd60507 Binary files /dev/null and b/app/src/main/res/drawable/unfocused_nickname.png differ diff --git a/app/src/main/res/drawable/unfocused_nickname.xml b/app/src/main/res/drawable/unfocused_nickname.xml new file mode 100644 index 0000000..cf450fd --- /dev/null +++ b/app/src/main/res/drawable/unfocused_nickname.xml @@ -0,0 +1,14 @@ + + + + diff --git a/app/src/main/res/layout/fragment_agree_auto_login.xml b/app/src/main/res/layout/fragment_agree_auto_login.xml new file mode 100644 index 0000000..110a853 --- /dev/null +++ b/app/src/main/res/layout/fragment_agree_auto_login.xml @@ -0,0 +1,71 @@ + + + + + + + +