diff --git a/backy/week4/app/build.gradle.kts b/backy/week4/app/build.gradle.kts
index fdc7769..92a4c18 100644
--- a/backy/week4/app/build.gradle.kts
+++ b/backy/week4/app/build.gradle.kts
@@ -58,4 +58,19 @@ dependencies {
implementation("androidx.room:room-ktx:$roomVersion")
kapt("androidx.room:room-compiler:$roomVersion")
+ //Retrofit
+ implementation("com.squareup.retrofit2:retrofit:2.9.0")
+ implementation("com.squareup.retrofit2:converter-gson:2.9.0")
+ implementation("com.squareup.retrofit2:adapter-rxjava2:2.9.0")
+
+ //okhttp
+ implementation("com.squareup.okhttp3:okhttp:4.12.0")
+ implementation("com.squareup.okhttp3:logging-interceptor:4.12.0")
+
+ //Glide
+ implementation("com.github.bumptech.glide:glide:4.11.0")
+ implementation("com.github.bumptech.glide:compiler:4.11.0")
+
+ implementation("org.jetbrains.kotlinx:kotlinx-coroutines-core:1.8.0")
+ implementation("org.jetbrains.kotlinx:kotlinx-coroutines-android:1.8.0")
}
\ No newline at end of file
diff --git a/backy/week4/app/src/main/AndroidManifest.xml b/backy/week4/app/src/main/AndroidManifest.xml
index 0d6e6f8..ff68b8a 100644
--- a/backy/week4/app/src/main/AndroidManifest.xml
+++ b/backy/week4/app/src/main/AndroidManifest.xml
@@ -5,6 +5,7 @@
+
+ android:theme="@style/Theme.Week2"
+ android:usesCleartextTraffic="true">
+
+ @POST("login")
+ fun login(@Body user: User):Call
+
+ @GET("test")
+ fun test(@Header("Authorization") token: String): Call
+}
\ No newline at end of file
diff --git a/backy/week4/app/src/main/java/com/rkdgudrn4094/week2/AuthService.kt b/backy/week4/app/src/main/java/com/rkdgudrn4094/week2/AuthService.kt
new file mode 100644
index 0000000..f5ecc42
--- /dev/null
+++ b/backy/week4/app/src/main/java/com/rkdgudrn4094/week2/AuthService.kt
@@ -0,0 +1,119 @@
+package com.rkdgudrn4094.week2
+
+import android.util.Log
+import retrofit2.Call
+import retrofit2.Callback
+import retrofit2.Response
+
+class AuthService {
+ private lateinit var signUpView: SignUpView
+ private lateinit var loginView: LoginView
+ private lateinit var testView: TestView
+
+ fun setSignUpView(signUpView: SignUpView){
+ this.signUpView = signUpView
+ }
+ fun setLoginView(loginView: LoginView){
+ this.loginView = loginView
+ }
+ fun setTestView(testView: TestView){
+ this.testView = testView
+ }
+
+ fun signUp(user: User){
+ val authService = getRetrofit().create(AuthRetrofitInterface::class.java)
+ authService.signUp(user).enqueue(object: Callback{
+ override fun onResponse(
+ call: Call,
+ response: Response
+ ) {
+ Log.d("SIGNUP/SUCCESS", response.toString())
+
+ val resp: AuthResponse = response.body()!!
+
+ if(::signUpView.isInitialized){
+ when(resp.code){
+ "COMMON201"->signUpView.onSignUpSuccess()
+ else->signUpView.onSignUpFailure()
+ }
+ }
+
+ }
+
+ override fun onFailure(
+ call: Call,
+ t: Throwable
+ ) {
+ Log.d("SIGNUP/FAILURE", t.message.toString())
+ }
+
+
+ })
+
+ Log.d("SIGNUP", "HELLOOO")
+ }
+
+ fun login(user: User){
+ val authService = getRetrofit().create(AuthRetrofitInterface::class.java)
+ authService.login(user).enqueue(object: Callback{
+ override fun onResponse(
+ call: Call,
+ response: Response
+ ) {
+ Log.d("LOGIN/SUCCESS", response.toString())
+
+ val resp: AuthResponse = response.body()!!
+ val code = resp.code
+ if(::loginView.isInitialized){
+ when(code){
+ "COMMON200_1"->loginView.onLoginSuccess(code, resp.data!!)
+ else->loginView.onLoginFailure()
+ }
+ }
+
+ }
+
+ override fun onFailure(
+ call: Call,
+ t: Throwable
+ ) {
+ Log.d("LOGIN/FAILURE", t.message.toString())
+ }
+ })
+
+ Log.d("LOGIN", "HELLOOO")
+ }
+
+ fun test(token: String){
+ val bearerToken = if (token.startsWith("Bearer ")) token else "Bearer $token"
+
+ val authService = getRetrofit().create(AuthRetrofitInterface::class.java)
+ authService.test(bearerToken).enqueue(object: Callback{
+ override fun onResponse(
+ call: Call,
+ response: Response
+ ) {
+ Log.d("TEST/SUCCESS", response.toString())
+
+ val resp: TestResponse = response.body()!!
+ val code = resp.code
+ if(::testView.isInitialized){
+ when(code){
+ "COMMON200_1"->testView.onTestSuccess(resp.message)
+ else->testView.onTestFailure()
+ }
+ }
+ }
+
+ override fun onFailure(
+ call: Call,
+ t: Throwable
+ ) {
+ Log.d("TEST/FAILURE", t.message.toString())
+ }
+
+ })
+
+ Log.d("LOGIN", "HELLOOO")
+ }
+}
\ No newline at end of file
diff --git a/backy/week4/app/src/main/java/com/rkdgudrn4094/week2/LoginActivity.kt b/backy/week4/app/src/main/java/com/rkdgudrn4094/week2/LoginActivity.kt
index 4b7b8db..dc51841 100644
--- a/backy/week4/app/src/main/java/com/rkdgudrn4094/week2/LoginActivity.kt
+++ b/backy/week4/app/src/main/java/com/rkdgudrn4094/week2/LoginActivity.kt
@@ -8,7 +8,7 @@ import android.widget.Toast
import androidx.appcompat.app.AppCompatActivity
import com.rkdgudrn4094.week2.databinding.ActivityLoginBinding
-class LoginActivity: AppCompatActivity() {
+class LoginActivity: AppCompatActivity(), LoginView {
lateinit var binding: ActivityLoginBinding
override fun onCreate(savedInstanceState: Bundle?) {
@@ -39,6 +39,7 @@ class LoginActivity: AppCompatActivity() {
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)
@@ -46,7 +47,11 @@ class LoginActivity: AppCompatActivity() {
Log.d("LOGIN_ACT/GET_USER", "userId: ${user.id}, $user")
saveJwt(user.id)
startMainActivity()
- }
+ }*/
+ val authService = AuthService()
+ authService.setLoginView(this)
+
+ authService.login(User("", email, pwd))
Toast.makeText(this, "회원 정보가 존재하지 않습니다.", Toast.LENGTH_SHORT).show()
}
@@ -59,8 +64,30 @@ class LoginActivity: AppCompatActivity() {
editor.apply()
}
+ private fun saveJwt2(jwt: String){
+ val spf = getSharedPreferences("auth2", MODE_PRIVATE)
+ val editor = spf.edit()
+
+ editor.putString("jwt", jwt)
+ editor.apply()
+ }
+
private fun startMainActivity(){
val intent = Intent(this, MainActivity::class.java)
startActivity(intent)
}
+
+ override fun onLoginSuccess(code: String, data: LoginData) {
+ Log.d("LOGIN","code:${code}")
+ when(code){
+ "COMMON200_1"->{
+ saveJwt2(data.accessToken)
+ startMainActivity()
+ }
+ }
+ }
+
+ override fun onLoginFailure() {
+ // 로그인 실패 처리
+ }
}
\ No newline at end of file
diff --git a/backy/week4/app/src/main/java/com/rkdgudrn4094/week2/LoginView.kt b/backy/week4/app/src/main/java/com/rkdgudrn4094/week2/LoginView.kt
new file mode 100644
index 0000000..e0ae971
--- /dev/null
+++ b/backy/week4/app/src/main/java/com/rkdgudrn4094/week2/LoginView.kt
@@ -0,0 +1,6 @@
+package com.rkdgudrn4094.week2
+
+interface LoginView {
+ fun onLoginSuccess(code: String, data: LoginData)
+ fun onLoginFailure()
+}
\ No newline at end of file
diff --git a/backy/week4/app/src/main/java/com/rkdgudrn4094/week2/MainActivity.kt b/backy/week4/app/src/main/java/com/rkdgudrn4094/week2/MainActivity.kt
index 7e7eba5..61b6f7e 100644
--- a/backy/week4/app/src/main/java/com/rkdgudrn4094/week2/MainActivity.kt
+++ b/backy/week4/app/src/main/java/com/rkdgudrn4094/week2/MainActivity.kt
@@ -9,15 +9,12 @@ import androidx.activity.enableEdgeToEdge
import androidx.activity.result.contract.ActivityResultContracts
import androidx.appcompat.app.AppCompatActivity
import androidx.core.splashscreen.SplashScreen.Companion.installSplashScreen
-import androidx.core.view.ViewCompat
-import androidx.core.view.WindowInsetsCompat
import com.google.gson.Gson
import com.rkdgudrn4094.week2.databinding.ActivityMainBinding
-//import kotlin.jvm.java
-class MainActivity : AppCompatActivity(), HomeFragmentDataListener {
+class MainActivity : AppCompatActivity(), HomeFragmentDataListener, TestView {
private val getResultText = registerForActivityResult(ActivityResultContracts.StartActivityForResult()){
- result ->
+ result ->
if (result.resultCode == Activity.RESULT_OK){
val title = result.data?.getStringExtra("title")
val singer = result.data?.getStringExtra("singer")
@@ -41,23 +38,7 @@ class MainActivity : AppCompatActivity(), HomeFragmentDataListener {
inputDummySongs()
inputDummyAlbums()
- //val song = Song(binding.mainMiniplayerTitleTv.text.toString(), binding.mainMiniplayerSingerTv.text.toString(), 0, 60, false, "music_lilac")
-
binding.mainPlayerCl.setOnClickListener {
-
- /*
- Log.d("Activity", "MainActivity, song.second:${song.second}")
- val intent = Intent(this, SongActivity::class.java)
- intent.putExtra("title", song.title)
- intent.putExtra("singer", song.singer)
- intent.putExtra("second", song.second)
- intent.putExtra("playTime", song.playTime)
- intent.putExtra("isPlaying", song.isPlaying)
- intent.putExtra("music", song.music)
- getResultText.launch(intent)
-
- */
-
val editor = getSharedPreferences("song", MODE_PRIVATE).edit()
editor.putInt("songId", song.id)
editor.apply()
@@ -66,7 +47,13 @@ class MainActivity : AppCompatActivity(), HomeFragmentDataListener {
startActivity(intent)
}
+ binding.mainTokenTestTv.setOnClickListener {
+ testToken()
+ }
+
initBottomNavigation()
+
+ Log.d("MAIN/JWT_TO_SERVER", getJwt().toString())
}
private fun initBottomNavigation(){
@@ -161,6 +148,28 @@ class MainActivity : AppCompatActivity(), HomeFragmentDataListener {
Log.d("OnStart song ID", song.second.toString())
}
+ private fun getJwt(): String?{
+ val spf = this.getSharedPreferences("auth2", AppCompatActivity.MODE_PRIVATE)
+ return spf!!.getString("jwt", "")
+ }
+
+ override fun onTestSuccess(message: String) {
+ Toast.makeText(this, "msg: ${message}", Toast.LENGTH_LONG).show()
+ }
+
+ override fun onTestFailure() {
+ //테스트 실패 코드
+ }
+
+ private fun testToken(){
+ val authService = AuthService()
+ authService.setTestView(this)
+
+ val token: String=getJwt()!!
+ Log.d("MAIN", "getJwt: ${token}")
+
+ authService.test(token)
+ }
private fun inputDummySongs(){
diff --git a/backy/week4/app/src/main/java/com/rkdgudrn4094/week2/NetworkModule.kt b/backy/week4/app/src/main/java/com/rkdgudrn4094/week2/NetworkModule.kt
new file mode 100644
index 0000000..e46ccae
--- /dev/null
+++ b/backy/week4/app/src/main/java/com/rkdgudrn4094/week2/NetworkModule.kt
@@ -0,0 +1,16 @@
+package com.rkdgudrn4094.week2
+
+import retrofit2.Retrofit
+import retrofit2.converter.gson.GsonConverterFactory
+
+const val BASE_URL = "http://43.200.73.115:8080/"
+
+fun getRetrofit(): Retrofit{
+ val retrofit = Retrofit.Builder().baseUrl(BASE_URL)
+ .addConverterFactory(GsonConverterFactory.create()).build()
+
+ return retrofit
+}
+/*
+class NetworkModule {
+}*/
\ No newline at end of file
diff --git a/backy/week4/app/src/main/java/com/rkdgudrn4094/week2/SignUpActivity.kt b/backy/week4/app/src/main/java/com/rkdgudrn4094/week2/SignUpActivity.kt
index 38c55d1..927b163 100644
--- a/backy/week4/app/src/main/java/com/rkdgudrn4094/week2/SignUpActivity.kt
+++ b/backy/week4/app/src/main/java/com/rkdgudrn4094/week2/SignUpActivity.kt
@@ -3,11 +3,16 @@ package com.rkdgudrn4094.week2
import android.os.Bundle
import android.os.PersistableBundle
import android.util.Log
+import android.view.View
import android.widget.Toast
import androidx.appcompat.app.AppCompatActivity
import com.rkdgudrn4094.week2.databinding.ActivitySignupBinding
+import retrofit2.Call
+import retrofit2.Callback
+import retrofit2.Response
+import retrofit2.create
-class SignUpActivity: AppCompatActivity() {
+class SignUpActivity: AppCompatActivity(), SignUpView {
lateinit var binding: ActivitySignupBinding
@@ -18,17 +23,19 @@ class SignUpActivity: AppCompatActivity() {
binding.signUpSignUpBtn.setOnClickListener {
signUp()
- finish()
+ //finish()
}
}
private fun getUser(): User{
val email: String = binding.signUpIdEt.text.toString() + '@' + binding.signUpDirectInputEt.text.toString()
val pwd: String = binding.signUpPasswordEt.text.toString()
+ var name: String = binding.signUpNameEt.text.toString()
- return User(email, pwd)
+ return User(name, email, pwd)
}
+ /*
private fun signUp(){
if (binding.signUpIdEt.text.toString().isEmpty() || binding.signUpDirectInputEt.text.toString().isEmpty()){
Toast.makeText(this, "이메일 형식이 잘못되었습니다.", Toast.LENGTH_SHORT).show()
@@ -45,4 +52,36 @@ class SignUpActivity: AppCompatActivity() {
val user = userDB.userDao().getUsers()
Log.d("SIGNUPACT", user.toString())
}
+
+ */
+
+ private fun signUp(){
+ if (binding.signUpIdEt.text.toString().isEmpty() || binding.signUpDirectInputEt.text.toString().isEmpty()){
+ Toast.makeText(this, "이메일 형식이 잘못되었습니다.", Toast.LENGTH_SHORT).show()
+ return
+ }
+ if (binding.signUpPasswordEt.text.toString() != binding.signUpPasswordCheckEt.text.toString()){
+ Toast.makeText(this, "비밀번호가 일치하지 않습니다.", Toast.LENGTH_SHORT).show()
+ return
+ }
+ if (binding.signUpNameEt.text.toString().isEmpty()){
+ Toast.makeText(this, "이름 형식이 잘못되었습니다.", Toast.LENGTH_SHORT).show()
+ return
+ }
+
+
+
+ val authService = AuthService()
+ authService.setSignUpView(this)
+
+ authService.signUp(getUser())
+ }
+
+ override fun onSignUpSuccess() {
+ finish()
+ }
+
+ override fun onSignUpFailure() {
+ // 회원 가입 실패 처리
+ }
}
\ No newline at end of file
diff --git a/backy/week4/app/src/main/java/com/rkdgudrn4094/week2/SignUpView.kt b/backy/week4/app/src/main/java/com/rkdgudrn4094/week2/SignUpView.kt
new file mode 100644
index 0000000..c2729f6
--- /dev/null
+++ b/backy/week4/app/src/main/java/com/rkdgudrn4094/week2/SignUpView.kt
@@ -0,0 +1,6 @@
+package com.rkdgudrn4094.week2
+
+interface SignUpView {
+ fun onSignUpSuccess()
+ fun onSignUpFailure()
+}
\ No newline at end of file
diff --git a/backy/week4/app/src/main/java/com/rkdgudrn4094/week2/TestResponse.kt b/backy/week4/app/src/main/java/com/rkdgudrn4094/week2/TestResponse.kt
new file mode 100644
index 0000000..ca1e533
--- /dev/null
+++ b/backy/week4/app/src/main/java/com/rkdgudrn4094/week2/TestResponse.kt
@@ -0,0 +1,14 @@
+package com.rkdgudrn4094.week2
+
+import com.google.gson.annotations.SerializedName
+
+data class TestResponse(
+ @SerializedName(value="status") val status: Boolean,
+ @SerializedName(value="code") val code: String,
+ @SerializedName(value="message") val message: String,
+ @SerializedName(value="data") val data: TestData?
+)
+
+data class TestData(
+ @SerializedName(value="result") val result: String
+)
diff --git a/backy/week4/app/src/main/java/com/rkdgudrn4094/week2/TestView.kt b/backy/week4/app/src/main/java/com/rkdgudrn4094/week2/TestView.kt
new file mode 100644
index 0000000..b648550
--- /dev/null
+++ b/backy/week4/app/src/main/java/com/rkdgudrn4094/week2/TestView.kt
@@ -0,0 +1,6 @@
+package com.rkdgudrn4094.week2
+
+interface TestView {
+ fun onTestSuccess(message: String)
+ fun onTestFailure()
+}
\ No newline at end of file
diff --git a/backy/week4/app/src/main/java/com/rkdgudrn4094/week2/User.kt b/backy/week4/app/src/main/java/com/rkdgudrn4094/week2/User.kt
index 65f8d59..b5506e9 100644
--- a/backy/week4/app/src/main/java/com/rkdgudrn4094/week2/User.kt
+++ b/backy/week4/app/src/main/java/com/rkdgudrn4094/week2/User.kt
@@ -2,11 +2,13 @@ package com.rkdgudrn4094.week2
import androidx.room.Entity
import androidx.room.PrimaryKey
+import com.google.gson.annotations.SerializedName
@Entity(tableName = "UserTable")
data class User(
- var email: String,
- var password: String
+ @SerializedName(value = "name") var name: String,
+ @SerializedName(value = "email") var email: String,
+ @SerializedName(value = "password") var password: String
){
@PrimaryKey(autoGenerate = true) var id: Int = 0
-}
+}
\ No newline at end of file
diff --git a/backy/week4/app/src/main/res/layout/activity_main.xml b/backy/week4/app/src/main/res/layout/activity_main.xml
index 5fdd1fa..9df7346 100644
--- a/backy/week4/app/src/main/res/layout/activity_main.xml
+++ b/backy/week4/app/src/main/res/layout/activity_main.xml
@@ -93,7 +93,22 @@
+
+
+
+