Skip to content

5.2. 로그인

mdb1217 edited this page Jan 15, 2021 · 4 revisions

WrittenBy

구현 방법

로그인 Main

(1) 다양한 Listener를 사용한 예외처리

구현 코드

로그인 Main

(1) 다양한 Listener를 이용한 예외처리

  • SignInActivity.kt
   	class SignInActivity : BaseActivity<ActivitySignInBinding, UserViewModel>() {

    override val layoutResourceId: Int
        get() = R.layout.activity_sign_in
    override val viewModel: UserViewModel by viewModel()
    private var passwordIsVisible = true
    private var isValidPassword = false
    private var isValidEmail = false

    override fun initView() {
        initClickEvent()
        visibleButtonChange()
        etColorChange()
        emailAndPasswordValid()
        setupToast(this, viewModel.toastMessage)
    }

    override fun initBeforeBinding() {

    }

    override fun initAfterBinding() {
        observeSignInResult()
    }

    override fun onStart() {
        super.onStart()
        if(getAutoLogin() && getUserToken() != ""){
            if(getKeywordExist()){
                startMainActivity()
            }else {
                startKeywordListActivity()
            }
        }
    }

    private fun initClickEvent() {
        binding.ibAutoLogin.isSelected = true
        binding.ibAutoLogin.setOnClickListener {
            it.isSelected = !it.isSelected
            FourMostPreference.setAutoLogin(it.isSelected)
        }
        binding.tvFindId.setOnClickListener {
            shortToast(R.string.msg_service_is_being_prepared)
        }
        binding.tvFindPassword.setOnClickListener {
            shortToast(R.string.msg_service_is_being_prepared)
        }
        binding.tvSignUp.setOnClickListener {
            startActivity(Intent(this, SignUpTermsActivity::class.java))
        }
        binding.btnSignIn.setOnClickListener {
            val email = binding.etEmail.text.toString()
            val password = binding.etPassword.text.toString()
            if (isValidEmail && isValidPassword) {
                viewModel.postSignIn(email, password)
            }else {
                shortToast(R.string.msg_sign_in_error)
            }
        }
    }

    private fun emailAndPasswordValid() {
        binding.etEmail.addTextChangedListener {
            isValidEmail = !LoginPatternCheckUtil.isNotValidEmail(binding.etEmail.text.toString())
            binding.btnSignIn.isEnabled = binding.etEmail.text.isNotEmpty() && binding.etPassword.text.isNotEmpty()
        }

        binding.etPassword.addTextChangedListener {
            isValidPassword = !LoginPatternCheckUtil.isNotValidPassword(binding.etPassword.text.toString())
            binding.btnSignIn.isEnabled = binding.etEmail.text.isNotEmpty() && binding.etPassword.text.isNotEmpty()
        }
    }

    private fun visibleButtonChange() {
        binding.ivVisibleButton.setOnClickListener {
            if(passwordIsVisible) {
                binding.ivVisibleButton.setBackgroundResource(R.drawable.ic_visible)
                binding.etPassword.transformationMethod = HideReturnsTransformationMethod.getInstance()
                passwordIsVisible = false
            }
            else {
                binding.ivVisibleButton.setBackgroundResource(R.drawable.ic_invisible)
                binding.etPassword.transformationMethod = PasswordTransformationMethod.getInstance()
                passwordIsVisible = true
            }
        }
    }

    private fun etColorChange() {
        binding.etEmail.setOnFocusChangeListener { view, hasFocus ->
            if(hasFocus){
                binding.etEmail.setBackgroundResource(R.drawable.rectangle_orange_radius_15)
            }
            else {
                if(binding.etEmail.text.isEmpty()) {
                    binding.etEmail.setBackgroundResource(R.drawable.rectangle_gray_radius_15)
                }
            }
        }

        binding.etPassword.setOnFocusChangeListener { view, hasFocus ->
            if(hasFocus){
                binding.clPassword.setBackgroundResource(R.drawable.rectangle_orange_radius_15)
                binding.ivVisibleButton.visibility = View.VISIBLE
            }
            else {
                if(binding.etPassword.text.isEmpty()) {
                    binding.clPassword.setBackgroundResource(R.drawable.rectangle_gray_radius_15)
                    binding.ivVisibleButton.visibility = View.INVISIBLE
                }
            }
        }
    }

    private fun observeSignInResult() {
        viewModel.signInEvent.observe(this, EventObserver{
            setKeywordExist(it == "keywordsExist")
            if(it == "keywordsExist"){
                startMainActivity()
            }else {
                startKeywordListActivity()
            }
        })
    }

    private fun startMainActivity() {
        startActivity(Intent(this, MainActivity::class.java))
        finish()
    }

    private fun startKeywordListActivity() {
        startActivity(Intent(this, KeywordListActivity::class.java))
        finish()
    }
}

실행 화면

로그인
img