diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 8f178bf..9e7d774 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -2,8 +2,6 @@ - - - + + + + + + + + \ No newline at end of file diff --git a/app/src/main/java/com/example/myapplication/LockerFragment.kt b/app/src/main/java/com/example/myapplication/LockerFragment.kt index 859e7c3..51cb04e 100644 --- a/app/src/main/java/com/example/myapplication/LockerFragment.kt +++ b/app/src/main/java/com/example/myapplication/LockerFragment.kt @@ -1,9 +1,11 @@ package com.example.myapplication +import android.content.Intent import android.os.Bundle import android.view.LayoutInflater import android.view.View import android.view.ViewGroup +import androidx.appcompat.app.AppCompatActivity import androidx.fragment.app.Fragment import com.example.myapplication.databinding.FragmentLockerBinding import com.google.android.material.tabs.TabLayoutMediator @@ -27,8 +29,48 @@ class LockerFragment : Fragment() { tab.text = information[position] }.attach() + binding.lockerLoginTv.setOnClickListener { + startActivity(Intent(activity, LoginActivity::class.java)) + } + return binding.root } + + override fun onStart() { + super.onStart() + initViews() + } + + private fun getJwt():Int{ + val spf = activity?.getSharedPreferences("auth", AppCompatActivity.MODE_PRIVATE) + return spf!!.getInt("jwt", 0) + } + + private fun initViews() { + val jwt: Int = getJwt() + if (jwt == 0) { + binding.lockerLoginTv.text = "로그인" + binding.lockerLoginTv.setOnClickListener { + startActivity(Intent(activity, LoginActivity::class.java)) + } + } + else { + binding.lockerLoginTv.text = "로그아웃" + binding.lockerLoginTv.setOnClickListener { + logout() + startActivity(Intent(activity, MainActivity::class.java)) + } + } + } + + private fun logout() { + val spf = activity?.getSharedPreferences("auth",AppCompatActivity.MODE_PRIVATE) + val editor = spf!!.edit() + editor.remove("jwt") + editor.apply() + } + + } diff --git a/app/src/main/java/com/example/myapplication/LoginActivity.kt b/app/src/main/java/com/example/myapplication/LoginActivity.kt new file mode 100644 index 0000000..41f5ed0 --- /dev/null +++ b/app/src/main/java/com/example/myapplication/LoginActivity.kt @@ -0,0 +1,67 @@ +package com.example.myapplication + +import android.content.Intent +import android.os.Bundle +import android.util.Log +import android.widget.Toast +import androidx.appcompat.app.AppCompatActivity +import com.example.flo.SongDatabase +import com.example.myapplication.databinding.ActivityLoginBinding + +class LoginActivity : AppCompatActivity() { + + lateinit var binding : ActivityLoginBinding + override fun onCreate(savedInstanceState: Bundle?) { + super.onCreate(savedInstanceState) + binding = ActivityLoginBinding.inflate(layoutInflater) + setContentView(binding.root) + + binding.loginSignUpTv.setOnClickListener { + startActivity(Intent(this, SignUpActivity::class.java)) + } + + binding.loginSignInBtn.setOnClickListener{ + login() + } + } + + private fun login() { + if (binding.loginIdEt.text.toString().isEmpty() || binding.loginDirectInputEt.text.toString().isEmpty()) { + Toast.makeText(this, "이메일을 입력해주세요", Toast.LENGTH_SHORT).show() + return + } + + if (binding.loginPasswordEt.text.toString().isEmpty()) { + Toast.makeText(this, "비밀번호를 입력해주세요", Toast.LENGTH_SHORT).show() + return + } + + val email : String = binding.loginIdEt.text.toString() + "@" + binding.loginDirectInputEt.text.toString() + val pwd : String = binding.loginPasswordEt.text.toString() + + val songDB = SongDatabase.getInstance(this)!! + val user = songDB.UserDao().getUser(email, pwd) + + user.let { + Log.d("LOGIN_ACT/GET_USER", "userId: ${user!!.id}, $user") + saveJwt(user!!.id) + startMainActivity() + } + Toast.makeText(this, "회원 정보가 존재하지 않습니다", Toast.LENGTH_SHORT).show() + } + + private fun startMainActivity() { + val intent = Intent(this, MainActivity::class.java) + startActivity(intent) + } + + private fun saveJwt(jwt : Int) { + val spf = getSharedPreferences("auth", MODE_PRIVATE) + val editor = spf.edit() + + editor.putInt("jwt", jwt) + editor.apply() + } + + +} \ No newline at end of file diff --git a/app/src/main/java/com/example/myapplication/SignUpActivity.kt b/app/src/main/java/com/example/myapplication/SignUpActivity.kt new file mode 100644 index 0000000..035822e --- /dev/null +++ b/app/src/main/java/com/example/myapplication/SignUpActivity.kt @@ -0,0 +1,54 @@ +package com.example.myapplication + +import android.os.Bundle +import android.util.Log +import android.widget.Toast +import androidx.appcompat.app.AppCompatActivity +import com.example.flo.SongDatabase +import com.example.myapplication.databinding.ActivitySignUpBinding + +class SignUpActivity : AppCompatActivity() { + + lateinit var binding: ActivitySignUpBinding + + override fun onCreate(savedInstanceState: Bundle?) { + super.onCreate(savedInstanceState) + binding = ActivitySignUpBinding.inflate(layoutInflater) + setContentView(binding.root) + + binding.signUpSignUpBtn.setOnClickListener { + val signUpCompletion = signUp() + if(signUpCompletion) { + finish() + } + } + + } + + private fun getUser() : User { + val email : String = binding.signUpIdEt.text.toString() + "@" + binding.signUpDirectInputEt.text.toString() + val pwd : String = binding.signUpPasswordEt.text.toString() + return User(email, pwd) + } + + private fun signUp() : Boolean { + if(binding.signUpIdEt.text.toString().isEmpty() || binding.signUpDirectInputEt.text.toString().isEmpty()) { + Toast.makeText(this, "이메일 형식이 잘못되었습니다.", Toast.LENGTH_SHORT).show() + return false + } + + if(binding.signUpPasswordEt.text.toString() != binding.signUpPasswordCheckEt.text.toString()) { + Toast.makeText(this, "비밀번호가 일치하지 않습니다.", Toast.LENGTH_SHORT).show() + return false + } + + val userDB = SongDatabase.getInstance(this)!! + userDB.UserDao().insert(getUser()) + + val user = userDB.UserDao().getUsers() + Log.d("sign up", user.toString()) + + Toast.makeText(this, "회원가입이 완료되었습니다.", Toast.LENGTH_SHORT).show() + return true + } +} \ No newline at end of file diff --git a/app/src/main/java/com/example/myapplication/SongDatabase.kt b/app/src/main/java/com/example/myapplication/SongDatabase.kt index 29d0f14..099b62f 100644 --- a/app/src/main/java/com/example/myapplication/SongDatabase.kt +++ b/app/src/main/java/com/example/myapplication/SongDatabase.kt @@ -7,6 +7,8 @@ import androidx.room.RoomDatabase import com.example.myapplication.Album //import com.example.myapplication.AlbumDao import com.example.myapplication.Song +import com.example.myapplication.User +import com.example.myapplication.UserDao /* @@ -36,10 +38,11 @@ abstract class SongDatabase: RoomDatabase() { */ //@Database(entities = [Song::class, Album::class], version = 1) -@Database(entities = [Song::class], version = 1) +@Database(entities = [Song::class, User::class], version = 1) abstract class SongDatabase: RoomDatabase() { abstract fun songDao(): SongDao //abstract fun albumDao(): AlbumDao + abstract fun UserDao(): UserDao companion object { private var instance: SongDatabase? = null diff --git a/app/src/main/java/com/example/myapplication/User.kt b/app/src/main/java/com/example/myapplication/User.kt new file mode 100644 index 0000000..4010bee --- /dev/null +++ b/app/src/main/java/com/example/myapplication/User.kt @@ -0,0 +1,12 @@ +package com.example.myapplication + +import androidx.room.Entity +import androidx.room.PrimaryKey + +@Entity(tableName = "UserTable") +data class User( + var email : String, + var password : String +) { + @PrimaryKey(autoGenerate = true) var id : Int = 0 +} \ No newline at end of file diff --git a/app/src/main/java/com/example/myapplication/UserDao.kt b/app/src/main/java/com/example/myapplication/UserDao.kt new file mode 100644 index 0000000..7c57352 --- /dev/null +++ b/app/src/main/java/com/example/myapplication/UserDao.kt @@ -0,0 +1,15 @@ +package com.example.myapplication + +import androidx.room.Dao +import androidx.room.Insert +import androidx.room.Query + +@Dao +interface UserDao { + @Insert + fun insert(user : User) + @Query("select * from UserTable") + fun getUsers() : List + @Query("select * from UserTable where email =:email and password = :password") + fun getUser(email : String, password : String) : User? +} \ No newline at end of file diff --git a/app/src/main/res/layout/activity_login.xml b/app/src/main/res/layout/activity_login.xml new file mode 100644 index 0000000..ab4419f --- /dev/null +++ b/app/src/main/res/layout/activity_login.xml @@ -0,0 +1,284 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/activity_sign_up.xml b/app/src/main/res/layout/activity_sign_up.xml new file mode 100644 index 0000000..9346cfe --- /dev/null +++ b/app/src/main/res/layout/activity_sign_up.xml @@ -0,0 +1,221 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/app/src/main/res/layout/activity_sign_up/xml.kt b/app/src/main/res/layout/activity_sign_up/xml.kt new file mode 100644 index 0000000..80d3742 --- /dev/null +++ b/app/src/main/res/layout/activity_sign_up/xml.kt @@ -0,0 +1,4 @@ +package layout.activity_sign_up + +class xml { +} \ No newline at end of file