Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

채팅 관련 기능 #23

Merged
merged 7 commits into from
Aug 25, 2022
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 3 additions & 3 deletions .idea/deploymentTargetDropDown.xml

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

6 changes: 3 additions & 3 deletions .idea/misc.xml

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

18 changes: 14 additions & 4 deletions app/build.gradle
Original file line number Diff line number Diff line change
Expand Up @@ -65,12 +65,21 @@ dependencies {
// glide 라이브러리
implementation 'com.github.bumptech.glide:glide:4.12.0'

// implementation 'androidx.room:room-runtime:2.4.3'
// annotationProcessor 'androidx.room:room-compiler:2.4.3om'

//circleView
implementation 'de.hdodenhof:circleimageview:3.1.0'
// Coroutine

//okhttp
implementation 'com.squareup.okhttp3:okhttp:3.12.6'
implementation 'com.squareup.okhttp3:mockwebserver:3.12.1'


// stomp
implementation 'com.github.NaikSoftware:StompProtocolAndroid:1.6.6'
//rx
implementation 'io.reactivex.rxjava2:rxjava:2.2.5'
implementation 'io.reactivex.rxjava2:rxandroid:2.1.0'

/* Coroutine
implementation 'org.jetbrains.kotlinx:kotlinx-coroutines-android:1.6.0'
implementation 'com.squareup.retrofit2:retrofit:2.6.0'
implementation 'com.squareup.retrofit2:converter-gson:2.6.0'
Expand All @@ -82,4 +91,5 @@ dependencies {
implementation 'com.squareup.okhttp3:okhttp:4.9.1'
implementation 'com.squareup.okhttp3:logging-interceptor:4.9.1'

*/
}
3 changes: 3 additions & 0 deletions app/src/main/AndroidManifest.xml
Original file line number Diff line number Diff line change
Expand Up @@ -100,6 +100,9 @@
android:exported="true">
</activity>

<activity android:name=".view.chat.ChattingActivity"
android:exported="true"/>


</application>

Expand Down
5 changes: 4 additions & 1 deletion app/src/main/java/com/umc/project/mbtree/data/Chat.kt
Original file line number Diff line number Diff line change
Expand Up @@ -3,5 +3,8 @@ package com.umc.project.mbtree.data
data class Chat(
var content:String,
var time:String,
var viewType:Int //1:왼쪽 2:오른쪽 3:센터
var viewType:Int, //1:왼쪽 2:오른쪽 3:센터
var question: String? = "",
var answer1: String? = "",
var answer2: String? = ""
)
66 changes: 66 additions & 0 deletions app/src/main/java/com/umc/project/mbtree/data/ChatResponse.kt
Original file line number Diff line number Diff line change
@@ -0,0 +1,66 @@
package com.umc.project.mbtree.data

data class MatchResponse (
val responseResult: String,
val chatRoomId: Int,
val userId: Int
)

data class ChatList(
val isSuccess: Boolean,
val code: Int,
val message: String,
val result: ArrayList<ChatListResult>
)

data class ChatListResult(
val id: Int,
val user1: User?,
val user2: User?,
val quit: Int
)

data class ChatContent(
val isSuccess: Boolean,
val code: Int,
val message: String
)

data class Quiz(
val isSuccess: Boolean,
val code: Int,
val message: String,
val result: QuizResult
)

data class QuizResult(
val id: Int,
val quiz: String,
val keyword: String,
val answer1: String,
val answer2: String
)

data class QuizAnswer(
val isSuccess: Boolean,
val code: Int,
val message: String,
val result: QuizAnswerResult?
){
data class QuizAnswerResult(
val id:Int,
val user1: String,
val user2: String,
val quiz: String,
val quilt: String,
val answer1: Int,
val answer2: Int
)
}

data class QuizAnswerConfirm(
val isSuccess: Boolean,
val code: Int,
val message: String,
val result: Int
)
11 changes: 8 additions & 3 deletions app/src/main/java/com/umc/project/mbtree/data/User.kt
Original file line number Diff line number Diff line change
Expand Up @@ -15,8 +15,13 @@ import androidx.room.PrimaryKey


data class User(
val id:Int,
val id: Int,
var uuid: String?,
var name: String,
var userToken: String,
var mbti: String
var email: String,
var mbti: String,
var location: String,
var token: String,
var point: Int,
var createDate: String?
)
Original file line number Diff line number Diff line change
@@ -0,0 +1,41 @@
package com.umc.project.mbtree.remote

import com.umc.project.mbtree.data.*
import retrofit2.Call
import retrofit2.http.GET
import retrofit2.http.POST
import retrofit2.http.Query

interface ChatRetrofitInterface {

//랜덤채팅 매칭시작
@GET("chat/join")
fun matchingChat(@Query("userId")userId: Int): Call<MatchResponse>

//채팅 리스트 출력
@GET("chat/list")
fun getChatListById(@Query("userId")userId: Int): Call<ChatList>

//채팅방 내용 불러오기
@GET("chat/list")
fun getChatContent(
@Query("userId")userId: Int,
@Query("roomId")roomId:Int
): Call<ChatContent>

//퀴즈 가져오기
@GET("chat/quiz")
fun getQuiz(@Query("roomId")roomId: Int): Call<Quiz>

//퀴즈 정답 입력
@GET("chat/answerQuiz")
fun setQuizAnswer(
@Query("roomId")roomId: Int,
@Query("userId")userId: Int,
@Query("answer")answer: Int
): Call<QuizAnswer>

//퀴즈 정답 비교
@GET("chat/checkAnswer")
fun getQuizAnswer(@Query("roomId")roomId: Int): Call<QuizAnswerConfirm>
}
31 changes: 31 additions & 0 deletions app/src/main/java/com/umc/project/mbtree/remote/NetworkModule.kt
Original file line number Diff line number Diff line change
@@ -0,0 +1,31 @@
package com.umc.project.mbtree.remote

import com.google.gson.GsonBuilder
import okhttp3.OkHttpClient
import okhttp3.logging.HttpLoggingInterceptor
import retrofit2.Retrofit
import retrofit2.converter.gson.GsonConverterFactory

const val BASE_URL = "https://mbtree.site/"

var gson = GsonBuilder().setLenient().create()

//레트로핏 객체 반환
fun getRetrofit(): Retrofit{

val okHttpClient: OkHttpClient by lazy {
OkHttpClient.Builder()
.addInterceptor(HttpLoggingInterceptor().apply {
level = HttpLoggingInterceptor.Level.BODY
})
.build()
}

val retrofit = Retrofit.Builder()
.baseUrl(BASE_URL)
.addConverterFactory(GsonConverterFactory.create(gson))
.client(okHttpClient)
.build()

return retrofit
}
Original file line number Diff line number Diff line change
Expand Up @@ -2,6 +2,7 @@ package com.umc.project.mbtree.view.chat

import android.view.LayoutInflater
import android.view.ViewGroup
import android.widget.Toast
import androidx.recyclerview.widget.RecyclerView
import com.umc.project.mbtree.data.User
import com.umc.project.mbtree.databinding.ItemListBinding
Expand All @@ -26,7 +27,10 @@ class ChatListRVAdapter(private val chatList:ArrayList<User>):RecyclerView.Adapt
//binding.ivListProfile
binding.tvListName.text = u.name
binding.tvListMbti.text = u.mbti

// itemView.setOnLongClickListener{
// //롱클릭 시 삭제
// }
}
}

}
Original file line number Diff line number Diff line change
@@ -1,22 +1,45 @@
package com.umc.project.mbtree.view.chat

import android.content.Context
import android.util.Log
import android.view.LayoutInflater
import android.view.View
import android.view.ViewGroup
import android.widget.Button
import android.widget.TextView
import android.widget.Toast
import androidx.recyclerview.widget.RecyclerView
import com.umc.project.mbtree.R
import com.umc.project.mbtree.data.Chat
import com.umc.project.mbtree.databinding.ItemChatMeBinding
import com.umc.project.mbtree.data.QuizAnswer
import com.umc.project.mbtree.data.QuizAnswerConfirm
import com.umc.project.mbtree.remote.ChatRetrofitInterface
import com.umc.project.mbtree.remote.getRetrofit
import org.w3c.dom.Text
import retrofit2.Call
import retrofit2.Callback
import retrofit2.Response

class ChatRVAdapter(private val context: Context,
private val chatList:ArrayList<Chat>): RecyclerView.Adapter<RecyclerView.ViewHolder>() {
var chatList2 = mutableListOf<Chat>()
//,private val chatList:ArrayList<Chat>
class ChatRVAdapter(private val context: Context): RecyclerView.Adapter<RecyclerView.ViewHolder>() {

var chatList = mutableListOf<Chat>()

interface MyItemClickListener{
fun clickButton1(chat: Chat)
fun clickButton2(chat: Chat)
// fun setQuizAnswer(roomId:Int, userId:Int, answer:Int)
// fun getQuizAnswer(roomId: Int)
}
private lateinit var mItemClickListener: MyItemClickListener
fun setMyItemClickListener(itemClickListener: MyItemClickListener){
mItemClickListener = itemClickListener
}

//처음에 화면에 보일 아이템뷰 생성
override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): RecyclerView.ViewHolder {
val view: View?

return when(viewType){
1 -> {
view = LayoutInflater.from(parent.context).inflate(
Expand All @@ -30,12 +53,15 @@ class ChatRVAdapter(private val context: Context,
)
RightViewHolder(view)
}
else -> {
3 -> {
view = LayoutInflater.from(parent.context).inflate(
R.layout.item_chat_you, parent, false
R.layout.item_chat_question, parent, false
)
CenterViewHolder(view)
}
else -> {
throw RuntimeException("Error")
}
}
}

Expand All @@ -61,6 +87,10 @@ class ChatRVAdapter(private val context: Context,
return chatList.size
}

fun addItem(chat: Chat){
chatList.add(chat)
}

//xml을 여러개 사용하려면 오버라이딩 해줘야 함
override fun getItemViewType(position: Int): Int {
return chatList[position].viewType
Expand All @@ -83,10 +113,22 @@ class ChatRVAdapter(private val context: Context,
}

inner class CenterViewHolder(view: View): RecyclerView.ViewHolder(view){
private val content: TextView = view.findViewById(R.id.tv_chat_content)
private val question: TextView = view.findViewById(R.id.tv_chat_question)
private val a1: Button = view.findViewById(R.id.btn_chat_a)
private val a2: Button = view.findViewById(R.id.btn_chat_b)

fun bind(chat: Chat){
content.text = chat.content
question.text = chat.question
a1.text = chat.answer1
a2.text = chat.answer2

a1.setOnClickListener{
mItemClickListener.clickButton1(chatList[position])
}
a2.setOnClickListener{
mItemClickListener.clickButton2(chatList[position])
}
}
}
}

}
Loading