이메일 화면 구현하기

2022. 12. 1. 11:27Basic

  • LoginActivity.kt
package com.example.myapplication.ui.login

import android.app.Activity
import androidx.lifecycle.Observer
import androidx.lifecycle.ViewModelProvider
import android.os.Bundle
import android.provider.ContactsContract.CommonDataKinds.Email
import androidx.annotation.StringRes
import androidx.appcompat.app.AppCompatActivity
import android.text.Editable
import android.text.TextWatcher
import android.view.View
import android.view.inputmethod.EditorInfo
import android.widget.Button
import android.widget.EditText
import android.widget.Toast
import androidx.core.widget.addTextChangedListener
import androidx.lifecycle.enableSavedStateHandles
import com.example.myapplication.databinding.ActivityLoginBinding

import com.example.myapplication.R
import com.google.android.gms.tasks.Task
import com.google.firebase.auth.FirebaseAuth
import com.google.firebase.auth.FirebaseAuthException
import com.google.firebase.auth.ktx.auth
import com.google.firebase.ktx.Firebase

class LoginActivity : AppCompatActivity() {

    private lateinit var loginViewModel: LoginViewModel
    private lateinit var binding: ActivityLoginBinding
    private lateinit var auth: FirebaseAuth

    override fun onCreate(savedInstanceState: Bundle?) {
        super.onCreate(savedInstanceState)

       binding = ActivityLoginBinding.inflate(layoutInflater)

        setContentView(binding.root)



        inintlogin()
        initsignlogin()
        initEmailAndPassword()

    }


    private fun inintlogin() {
        binding.login.setOnClickListener {

            val email = getInputEmail()
            val password = getInputpassword()

            auth.signInWithEmailAndPassword(email, password)
                .addOnCompleteListener(this) { task ->
                    if (task.isSuccessful) {
                        finish()


                    } else {
                        Toast.makeText(this, "로그인에 실패햇습니다. 이메일또는 비밀번호를 확인해주세요", Toast.LENGTH_SHORT)
                            .show()
                    }
                }


        }
    }

    private fun initsignlogin() {
        binding.signlogin.setOnClickListener({
            val email = getInputEmail()
            val password = getInputpassword()


            auth.createUserWithEmailAndPassword(email, password)
                .addOnCompleteListener(this) { task ->
                    if (task.isSuccessful) {
                        Toast.makeText(this, "회원가입에 성공했습니다. 로그인 버튼을 눌러 로그인해주세요", Toast.LENGTH_SHORT)
                            .show()

                    } else {
                        Toast.makeText(this, "이미 가입한 이메일이거나, 회원가입에 실패햇습니다.", Toast.LENGTH_SHORT)
                            .show()

                    }
                }
        })
    }

    private fun initEmailAndPassword() {

        binding.email.addTextChangedListener {
            binding.login.isEnabled = binding.email.text.isNotEmpty() && binding.password.text.isNotEmpty()
        }

        binding.password.addTextChangedListener {
            binding.login.isEnabled = binding.email.text.isNotEmpty() && binding.password.text.isNotEmpty()

        }

    }


    private fun getInputEmail(): String {
        return binding.username.text.toString()
    }

    private fun getInputpassword(): String {
        return binding.password.text.toString()
    }

}

                                                                         

  • 액티비티 레이아웃
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/container"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingBottom="@dimen/activity_vertical_margin"
    tools:context=".ui.login.LoginActivity">


    <TextView
        android:id="@+id/username"
        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:layout_marginBottom="72dp"
        android:text="@string/main_desc"
        android:textSize="20dp"
        app:layout_constraintBottom_toTopOf="@id/username"


        tools:layout_editor_absoluteX="34dp"></TextView>

    <EditText
        android:id="@+id/email"
        android:layout_width="0dp"
        android:layout_height="wrap_content"
        android:layout_marginTop="112dp"


        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toTopOf="parent" />

    <EditText
        android:id="@+id/password"

        android:layout_width="match_parent"
        android:layout_height="wrap_content"
        android:inputType="textPassword"
        app:layout_constraintTop_toBottomOf="@id/email">

    </EditText>


    <Button
        android:id="@+id/login"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_gravity="start"
        android:layout_marginTop="16dp"
        android:layout_marginBottom="64dp"
        android:enabled="false"
        android:text="로그인"
        app:layout_constraintBottom_toBottomOf="parent"
        app:layout_constraintEnd_toEndOf="parent"
        app:layout_constraintStart_toStartOf="parent"
        app:layout_constraintTop_toBottomOf="@+id/password"
        app:layout_constraintVertical_bias="0.2" />

    <Button
        android:id="@+id/signlogin"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_marginTop="16dp"
        android:layout_marginEnd="24dp"
        android:text="회원가입"
        app:layout_constraintBottom_toBottomOf="@id/login"
        app:layout_constraintEnd_toStartOf="@id/login"
        app:layout_constraintTop_toBottomOf="@id/login"
        app:layout_constraintTop_toTopOf="@id/login"
        app:layout_constraintVertical_bias="1.0" />


</androidx.constraintlayout.widget.ConstraintLayout>

 

  • 앱 실행 화면