diff --git a/.idea/deploymentTargetDropDown.xml b/.idea/deploymentTargetDropDown.xml index ff23a87..19cc484 100644 --- a/.idea/deploymentTargetDropDown.xml +++ b/.idea/deploymentTargetDropDown.xml @@ -6,12 +6,12 @@ <type value="QUICK_BOOT_TARGET" /> <deviceKey> <Key> - <type value="VIRTUAL_DEVICE_PATH" />\ - <value value="C:\Users\eunyoung\.android\avd\Pixel_4_API_28_2.avd" />\ + <type value="VIRTUAL_DEVICE_PATH" /> + <value value="C:\Users\user\.android\avd\Pixel_2_API_27.avd" /> </Key> </deviceKey> </Target> </targetSelectedWithDropDown> - <timeTargetWasSelectedWithDropDown value="2022-08-23T16:48:40.961589700Z" /> + <timeTargetWasSelectedWithDropDown value="2022-08-08T16:17:38.292200500Z" /> </component> </project> \ No newline at end of file diff --git a/.idea/misc.xml b/.idea/misc.xml index 79df485..f2f3600 100644 --- a/.idea/misc.xml +++ b/.idea/misc.xml @@ -44,14 +44,14 @@ <entry key="..\:/work/mobileApp/mbtree/app/src/main/res/drawable/tv_chat_question.xml" value="0.1795" /> <entry key="..\:/work/mobileApp/mbtree/app/src/main/res/drawable/tv_chat_you.xml" value="0.1" /> <entry key="..\:/work/mobileApp/mbtree/app/src/main/res/layout/activity_answer.xml" value="0.264" /> - <entry key="..\:/work/mobileApp/mbtree/app/src/main/res/layout/activity_chatting.xml" value="0.264" /> + <entry key="..\:/work/mobileApp/mbtree/app/src/main/res/layout/activity_chatting.xml" value="0.2571428571428571" /> <entry key="..\:/work/mobileApp/mbtree/app/src/main/res/layout/activity_login.xml" value="0.1484375" /> <entry key="..\:/work/mobileApp/mbtree/app/src/main/res/layout/activity_main.xml" value="0.2" /> - <entry key="..\:/work/mobileApp/mbtree/app/src/main/res/layout/fragment_chatting.xml" value="0.21333333333333335" /> + <entry key="..\:/work/mobileApp/mbtree/app/src/main/res/layout/fragment_chatting.xml" value="0.264" /> <entry key="..\:/work/mobileApp/mbtree/app/src/main/res/layout/fragment_friend.xml" value="0.2" /> <entry key="..\:/work/mobileApp/mbtree/app/src/main/res/layout/fragment_tree.xml" value="0.176" /> <entry key="..\:/work/mobileApp/mbtree/app/src/main/res/layout/item_chat_end.xml" value="0.24427083333333333" /> - <entry key="..\:/work/mobileApp/mbtree/app/src/main/res/layout/item_chat_me.xml" value="0.24947916666666667" /> + <entry key="..\:/work/mobileApp/mbtree/app/src/main/res/layout/item_chat_me.xml" value="0.4" /> <entry key="..\:/work/mobileApp/mbtree/app/src/main/res/layout/item_chat_question.xml" value="0.4" /> <entry key="..\:/work/mobileApp/mbtree/app/src/main/res/layout/item_chat_you.xml" value="0.4" /> <entry key="..\:/work/mobileApp/mbtree/app/src/main/res/layout/item_list.xml" value="0.24479166666666666" /> diff --git a/app/build.gradle b/app/build.gradle index a81fe70..5644e59 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -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' @@ -82,4 +91,5 @@ dependencies { implementation 'com.squareup.okhttp3:okhttp:4.9.1' implementation 'com.squareup.okhttp3:logging-interceptor:4.9.1' + */ } \ No newline at end of file diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml index 8d838fc..3d6ab9b 100644 --- a/app/src/main/AndroidManifest.xml +++ b/app/src/main/AndroidManifest.xml @@ -100,6 +100,9 @@ android:exported="true"> </activity> + <activity android:name=".view.chat.ChattingActivity" + android:exported="true"/> + </application> diff --git a/app/src/main/java/com/umc/project/mbtree/data/Chat.kt b/app/src/main/java/com/umc/project/mbtree/data/Chat.kt index 61ab6b6..d2cb9fc 100644 --- a/app/src/main/java/com/umc/project/mbtree/data/Chat.kt +++ b/app/src/main/java/com/umc/project/mbtree/data/Chat.kt @@ -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? = "" ) diff --git a/app/src/main/java/com/umc/project/mbtree/data/ChatResponse.kt b/app/src/main/java/com/umc/project/mbtree/data/ChatResponse.kt new file mode 100644 index 0000000..6a50264 --- /dev/null +++ b/app/src/main/java/com/umc/project/mbtree/data/ChatResponse.kt @@ -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 +) \ No newline at end of file diff --git a/app/src/main/java/com/umc/project/mbtree/data/User.kt b/app/src/main/java/com/umc/project/mbtree/data/User.kt index 53ca8bc..aeca9fe 100644 --- a/app/src/main/java/com/umc/project/mbtree/data/User.kt +++ b/app/src/main/java/com/umc/project/mbtree/data/User.kt @@ -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? ) diff --git a/app/src/main/java/com/umc/project/mbtree/remote/ChatRetrofitInterface.kt b/app/src/main/java/com/umc/project/mbtree/remote/ChatRetrofitInterface.kt new file mode 100644 index 0000000..994eb94 --- /dev/null +++ b/app/src/main/java/com/umc/project/mbtree/remote/ChatRetrofitInterface.kt @@ -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> +} \ No newline at end of file diff --git a/app/src/main/java/com/umc/project/mbtree/remote/NetworkModule.kt b/app/src/main/java/com/umc/project/mbtree/remote/NetworkModule.kt new file mode 100644 index 0000000..cbd6ae6 --- /dev/null +++ b/app/src/main/java/com/umc/project/mbtree/remote/NetworkModule.kt @@ -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 +} \ No newline at end of file diff --git a/app/src/main/java/com/umc/project/mbtree/view/chat/ChatListRVAdapter.kt b/app/src/main/java/com/umc/project/mbtree/view/chat/ChatListRVAdapter.kt index 38a687c..ff144a4 100644 --- a/app/src/main/java/com/umc/project/mbtree/view/chat/ChatListRVAdapter.kt +++ b/app/src/main/java/com/umc/project/mbtree/view/chat/ChatListRVAdapter.kt @@ -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 @@ -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{ +// //롱클릭 시 삭제 +// } } } - } \ No newline at end of file diff --git a/app/src/main/java/com/umc/project/mbtree/view/chat/ChatRVAdapter.kt b/app/src/main/java/com/umc/project/mbtree/view/chat/ChatRVAdapter.kt index 79e231e..3688c38 100644 --- a/app/src/main/java/com/umc/project/mbtree/view/chat/ChatRVAdapter.kt +++ b/app/src/main/java/com/umc/project/mbtree/view/chat/ChatRVAdapter.kt @@ -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( @@ -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") + } } } @@ -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 @@ -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]) + } } } -} \ No newline at end of file + +} diff --git a/app/src/main/java/com/umc/project/mbtree/view/chat/ChattingActivity.kt b/app/src/main/java/com/umc/project/mbtree/view/chat/ChattingActivity.kt index d5e53c4..be16d41 100644 --- a/app/src/main/java/com/umc/project/mbtree/view/chat/ChattingActivity.kt +++ b/app/src/main/java/com/umc/project/mbtree/view/chat/ChattingActivity.kt @@ -1,34 +1,239 @@ package com.umc.project.mbtree.view.chat +import android.content.Intent import android.os.Bundle +import android.os.Handler +import android.os.Looper +import android.util.Log +import android.view.MotionEvent +import android.view.View +import android.widget.Toast import androidx.appcompat.app.AppCompatActivity -import com.umc.project.mbtree.data.Chat +import androidx.core.os.postDelayed +import androidx.recyclerview.widget.LinearLayoutManager +import com.umc.project.mbtree.R +import com.umc.project.mbtree.data.* import com.umc.project.mbtree.databinding.ActivityChattingBinding +import com.umc.project.mbtree.remote.ChatRetrofitInterface +import com.umc.project.mbtree.remote.getRetrofit +import kotlinx.android.synthetic.main.item_chat_question.view.* +import org.json.JSONObject +import retrofit2.Call +import retrofit2.Callback +import retrofit2.Response +import ua.naiksoftware.stomp.Stomp +import ua.naiksoftware.stomp.dto.LifecycleEvent +import ua.naiksoftware.stomp.dto.StompHeader class ChattingActivity: AppCompatActivity() { lateinit var binding: ActivityChattingBinding lateinit var multiAdapter: ChatRVAdapter - val chatList = mutableListOf<Chat>() +// private var flag: Boolean = true + + private val url = "wss://mbtree.site/chat-websocket/websocket" + val stompClient = Stomp.over(Stomp.ConnectionProvider.OKHTTP, url) override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) binding = ActivityChattingBinding.inflate(layoutInflater) setContentView(binding.root) - //dummy data - var chatDatas = ArrayList<Chat>() - chatDatas.apply{ - add(Chat("안녕하세요", "12:00", 1)) - add(Chat("네 안녕하세요", "12:00", 2)) - add(Chat("지금 뭐하세요?", "12:00", 1)) - add(Chat("저 코딩하는데요", "12:00", 2)) - add(Chat("시간어택", "12:00", 3)) + val roomId = intent.getIntExtra("roomId", -1) + val userId = 3 + Log.d("ChattinActivity", "넘어온 roomId: " + roomId) + + getQuiz(roomId) + + if(roomId != -1){ + try { + runStomp(roomId, userId) + } catch (e:Exception){ + Log.d("ERROR", "stomp 자체의 오류") + Log.d("ERROR", e.message.toString()) + } } - multiAdapter = ChatRVAdapter(this, chatDatas) + // dummy data + var chatDatas = mutableListOf<Chat>() + multiAdapter = ChatRVAdapter(this) binding.rvChatList.adapter = multiAdapter - multiAdapter.chatList2 = chatDatas + binding.rvChatList.layoutManager = LinearLayoutManager(this) + + multiAdapter.setMyItemClickListener(object: ChatRVAdapter.MyItemClickListener{ + override fun clickButton1(chat:Chat) { + Toast.makeText(applicationContext, "1번 선택", Toast.LENGTH_SHORT).show() + setQuizAnswer(roomId, userId, 1) + getQuizAnswer(roomId) +// flag = true + } + override fun clickButton2(chat:Chat) { + Toast.makeText(applicationContext, "2번 선택", Toast.LENGTH_SHORT).show() + setQuizAnswer(roomId, userId, 2) + getQuizAnswer(roomId) +// flag = true + } + }) + multiAdapter.chatList = chatDatas multiAdapter.notifyDataSetChanged() + + } + + //stomp구현 + fun runStomp(roomId: Int, userId: Int){ + stompClient.connect() + + stompClient.topic("/topic/chat/${roomId}").subscribe{ topicMessage -> + Log.d("message Receive", topicMessage.payload) + val sender = JSONObject(topicMessage.payload).getString("userId").toInt() + if(sender != userId){ + val content = JSONObject(topicMessage.payload).getString("message") + multiAdapter.addItem(Chat(content, "12:00", 1)) + + runOnUiThread{ + multiAdapter.notifyDataSetChanged() + } + } + } + + stompClient.lifecycle().subscribe{ lifecycleEvent -> + when(lifecycleEvent.type){ + LifecycleEvent.Type.OPENED -> { + Log.d("OPENED", "opened") + } + LifecycleEvent.Type.CLOSED -> { + Log.d("CLOSED", "closed") + } + LifecycleEvent.Type.ERROR -> { + Log.d("ERROR", "error") + Log.i("CONNECT ERROR", lifecycleEvent.exception.toString()) + } + else -> { + Log.d("else", lifecycleEvent.message) + } + } + } + + binding.etChatSend.setOnTouchListener(object : View.OnTouchListener{ + override fun onTouch(v: View?, event: MotionEvent?): Boolean { + if(event?.action == MotionEvent.ACTION_UP){ + if(event.rawX >= (binding.etChatSend.right - binding.etChatSend.compoundDrawables[2].bounds.width())){ + //action here +// Toast.makeText(applicationContext, "누름", Toast.LENGTH_SHORT).show() + sendStomp(binding.etChatSend.text.toString(), roomId, userId) + binding.etChatSend.text = null + return true + } + } + return false + } + }) + } + + fun sendStomp(msg: String, roomId: Int, userId: Int){ + val data = JSONObject() + data.put("messageType", "CHAT") + data.put("userId", userId.toString()) + data.put("message", msg) + + stompClient.send("/app/chat.message/${roomId}", data.toString()).subscribe() + Log.d("Message Send", "내가 보낸거: " + msg) + + multiAdapter.addItem(Chat(msg, "12:00", 2)) + runOnUiThread{ + multiAdapter.notifyDataSetChanged() + } + } + + //키워드 질문 가져오기 + fun getQuiz(roomId: Int){ + val retrofitService = getRetrofit().create(ChatRetrofitInterface::class.java) + retrofitService.getQuiz(roomId) + .enqueue(object: Callback<Quiz>{ + override fun onResponse(call: Call<Quiz>, response: Response<Quiz>) { + var resp = response.body()!! + if(resp.isSuccess){ + val result = resp.result + + Log.d("ChattingActivity", "Q. ${result.quiz}") + Log.d("ChattingActivity", result.answer1) + Log.d("ChattingActivity", result.answer2) + binding.tvChatKeyword.visibility = View.VISIBLE + binding.tvChatKeyword.text = "Q. " + result.keyword + + Handler(Looper.getMainLooper()).postDelayed({ + binding.tvChatKeyword.visibility = View.GONE + multiAdapter.addItem(Chat(result.quiz, "00:00", 3, + result.quiz, result.answer1, result.answer2)) + + runOnUiThread{ + multiAdapter.notifyDataSetChanged() + } + }, 50000) + } + } + + override fun onFailure(call: Call<Quiz>, t: Throwable) { + Log.d("Chatting Activity", t.message.toString()) + } + + }) + } + + //퀴즈 정답 입력 + fun setQuizAnswer(roomId:Int, userId:Int, answer:Int){ + val retrofitService = getRetrofit().create(ChatRetrofitInterface::class.java) + retrofitService.setQuizAnswer(roomId, userId, answer) + .enqueue(object: Callback<QuizAnswer>{ + override fun onResponse( + call: Call<QuizAnswer>, + response: Response<QuizAnswer> + ) { + var resp = response.body()!! + if(resp.isSuccess){ + Log.d("ChattingActivity", resp.result!!.user1) + Log.d("ChattingActivity", resp.result!!.user2) + Log.d("ChattingActivity", resp.result!!.quiz) + } + else{ + Log.d("Chatting Activity",resp.message) + } + } + + override fun onFailure(call: Call<QuizAnswer>, t: Throwable) { + Log.d("ChatRVAdapter", t.message.toString()) + } + + }) + } + + //퀴즈 정답 결과 + fun getQuizAnswer(roomId: Int){ + val retrofitService = getRetrofit().create(ChatRetrofitInterface::class.java) + retrofitService.getQuizAnswer(roomId) + .enqueue(object : Callback<QuizAnswerConfirm>{ + override fun onResponse( + call: Call<QuizAnswerConfirm>, + response: Response<QuizAnswerConfirm> + ) { + var resp = response.body()!! + if(resp.isSuccess){ + if(resp.result == 1) + Toast.makeText(applicationContext, "서로 통했습니다!", Toast.LENGTH_SHORT).show() + else + Toast.makeText(applicationContext, "상대방과의 키워드 매칭에 실패했습니다", Toast.LENGTH_SHORT).show() + } + } + + override fun onFailure(call: Call<QuizAnswerConfirm>, t: Throwable) { + Log.d("ChatRVAdapter", t.message.toString()) + } + + }) + } + + override fun onDestroy() { + super.onDestroy() + stompClient.disconnect() } } \ No newline at end of file diff --git a/app/src/main/java/com/umc/project/mbtree/view/chat/ChattingFragment.kt b/app/src/main/java/com/umc/project/mbtree/view/chat/ChattingFragment.kt index e1fc241..dde8aea 100644 --- a/app/src/main/java/com/umc/project/mbtree/view/chat/ChattingFragment.kt +++ b/app/src/main/java/com/umc/project/mbtree/view/chat/ChattingFragment.kt @@ -1,17 +1,35 @@ -package com.umc.project.mbtree.view.chat +package com.umc.project.mbtree.view +import android.content.Intent +import android.graphics.drawable.Drawable import android.os.Bundle +import android.util.Log import android.view.LayoutInflater import android.view.View import android.view.ViewGroup +import android.widget.Toast import androidx.fragment.app.Fragment import androidx.recyclerview.widget.LinearLayoutManager +import com.umc.project.mbtree.R +import com.umc.project.mbtree.data.Chat +import com.umc.project.mbtree.data.ChatList +import com.umc.project.mbtree.data.MatchResponse import com.umc.project.mbtree.data.User import com.umc.project.mbtree.databinding.FragmentChattingBinding +import com.umc.project.mbtree.remote.ChatRetrofitInterface +import com.umc.project.mbtree.remote.getRetrofit +import com.umc.project.mbtree.view.chat.ChatListRVAdapter +import com.umc.project.mbtree.view.chat.ChattingActivity +import retrofit2.Call +import retrofit2.Callback +import retrofit2.Response class ChattingFragment: Fragment() { lateinit var binding: FragmentChattingBinding + private val serverUrl = "https://mbtree.site" + private val userId = 3 + var datas = ArrayList<User>() override fun onCreateView( inflater: LayoutInflater, @@ -20,19 +38,94 @@ class ChattingFragment: Fragment() { ): View? { binding = FragmentChattingBinding.inflate(inflater, container, false) - //dummy data - var datas = ArrayList<User>() - datas.apply { - add(User(1, "user1", "123", "ISFP")) - add(User(2, "user2", "234", "ISFJ")) - add(User(3, "user3", "345", "ESFP")) - } + getChatList(userId) + + //매칭시작 버튼클릭 + binding.btnChatListStart.setOnClickListener{ +// Toast.makeText(context, "매칭시작", Toast.LENGTH_SHORT).show() + binding.btnChatListStart.setBackgroundColor(resources.getColor(R.color.white)) + binding.btnChatListStart.setTextColor(resources.getColor(R.color.main_color)) + binding.btnChatListStart.text = "매칭 중입니다..." - //채팅리스트 어댑터 붙이기 - val adaper = ChatListRVAdapter(datas) - binding.rvChatList.adapter = adaper - binding.rvChatList.layoutManager = LinearLayoutManager(context, LinearLayoutManager.VERTICAL, false) + matchingStart(userId) + } return binding.root } + + private fun getChatList(userId: Int){ + val retrofitService = getRetrofit().create(ChatRetrofitInterface::class.java) + retrofitService.getChatListById(userId) + .enqueue(object : Callback<ChatList>{ + override fun onResponse(call: Call<ChatList>, response: Response<ChatList>) { + var cList = response.body()!! + + if(cList.isSuccess){ + Log.d("CHATLIST", "isSuccess:" + cList.isSuccess) + Log.d("CHATLIST", "code:" + cList.code) + Log.d("CHATLIST", "message:" + cList.message) + + for(c in cList.result){ + var u1 = c.user1 + var u2 = c.user2 + + if(u1 != null && u2 != null) { + Log.d("CHATLIST", "uuid: " + u1?.uuid) + datas.add(User(1, u1.uuid, u1.name, u1.email, u1.mbti, u1.location, u1.token, u1.point, u1.createDate)) +// datas.add(User(2, u2.uuid, u2.name, u2.email, u2.mbti, u2.location, u2.token, u2.point, u2.createDate)) + + //채팅리스트 어댑터 붙이기 + val adaper = ChatListRVAdapter(datas) + binding.rvChatList.adapter = adaper + binding.rvChatList.layoutManager = LinearLayoutManager(context, LinearLayoutManager.VERTICAL, false) + Log.d("CHATLIST", "Adatper붙이기 완료") + } + } + } + + } + + override fun onFailure(call: Call<ChatList>, t: Throwable) { + Log.d("CHATLIST", t.message.toString()) + } + + }) + } + + private fun matchingStart(userId: Int){ + val retrofitService = getRetrofit().create(ChatRetrofitInterface::class.java) + retrofitService.matchingChat(userId) + .enqueue(object : Callback<MatchResponse> { + override fun onResponse(call: Call<MatchResponse>, response: Response<MatchResponse>) { + var resp = response.body()!! + + if(resp.responseResult == "SUCCESS"){ + Log.d("CHAT MATCH", "responseResult: " + resp.responseResult) + Log.d("CHAT MATCH", "chatRoomId: " + resp.chatRoomId) + + changeButton() + + val intent = Intent(activity, ChattingActivity::class.java) + intent.putExtra("roomId", resp.chatRoomId) + Log.d("CHAT LIST", "매칭된 roomId: " + resp.chatRoomId) + startActivity(intent) + } + else{ + Log.d("CHAT MATCH", "responseResult: " + resp.responseResult) + changeButton() + } + } + + override fun onFailure(call: Call<MatchResponse>, t: Throwable) { + Log.d("CHAT MATCH", t.message.toString()) + } + + }) + } + + private fun changeButton() { + binding.btnChatListStart.setBackgroundResource((R.drawable.bg_textview)) + binding.btnChatListStart.setTextColor(resources.getColor(R.color.white)) + binding.btnChatListStart.text = "매칭 시작" + } } \ No newline at end of file diff --git a/app/src/main/java/com/umc/project/mbtree/view/friend/FriendFragment.kt b/app/src/main/java/com/umc/project/mbtree/view/friend/FriendFragment.kt index 63130d1..9036a4e 100644 --- a/app/src/main/java/com/umc/project/mbtree/view/friend/FriendFragment.kt +++ b/app/src/main/java/com/umc/project/mbtree/view/friend/FriendFragment.kt @@ -26,9 +26,9 @@ class FriendFragment: Fragment() { //dummy data var datas = ArrayList<User>() datas.apply { - add(User(1, "user1", "123", "ISFP")) - add(User(2, "user2", "234", "ISFJ")) - add(User(3, "user3", "345", "ESFP")) + add(User(1, "22d31", "user1", "test@naver.com", "isfp", "temp", "ase2", 0, null)) + add(User(2, "22d31", "user2", "test@naver.com", "isfp", "temp", "ase2", 0, null)) + add(User(3, "22d31", "user3", "test@naver.com", "isfp", "temp", "ase2", 0, null)) } diff --git a/app/src/main/java/com/umc/project/mbtree/view/tree/LockerBottomSheet.kt b/app/src/main/java/com/umc/project/mbtree/view/tree/LockerBottomSheet.kt index db93da1..b00c7bc 100644 --- a/app/src/main/java/com/umc/project/mbtree/view/tree/LockerBottomSheet.kt +++ b/app/src/main/java/com/umc/project/mbtree/view/tree/LockerBottomSheet.kt @@ -29,9 +29,9 @@ class LockerBottomSheet: BottomSheetDialogFragment() { binding = LockerLayoutBinding.inflate(inflater, container, false) var datas = ArrayList<User>() datas.apply { - add(User(1, "user1", "123", "ISFP")) - add(User(2, "user2", "234", "ISFP")) - add(User(3, "user3", "345", "ISFP")) + add(User(1, "22d31", "user1", "test@naver.com", "isfp", "temp", "ase2", 0, null)) + add(User(2, "22d31", "user2", "test@naver.com", "isfp", "temp", "ase2", 0, null)) + add(User(3, "22d31", "user3", "test@naver.com", "isfp", "temp", "ase2", 0, null)) } val adaper = LockerRVAdapter(datas) diff --git a/app/src/main/res/layout/activity_chatting.xml b/app/src/main/res/layout/activity_chatting.xml index 3d1850b..a7f854b 100644 --- a/app/src/main/res/layout/activity_chatting.xml +++ b/app/src/main/res/layout/activity_chatting.xml @@ -34,7 +34,6 @@ android:id="@+id/iv_chat_profile" android:layout_width="match_parent" android:layout_height="match_parent" - android:scaleType="fitCenter" android:background="@color/grey_76" android:src="@drawable/ic_my"/> </androidx.cardview.widget.CardView> @@ -95,11 +94,13 @@ android:layout_marginTop="28dp" android:layout_marginHorizontal="20dp" app:layout_constraintTop_toBottomOf="@+id/tv_chat_keyword" + android:layout_marginBottom="20dp" app:layout_constraintStart_toStartOf="parent" - app:layout_constraintEnd_toEndOf="parent"/> + app:layout_constraintEnd_toEndOf="parent" + app:layout_constraintBottom_toTopOf="@+id/et_chat_send"/> <EditText - android:id="@+id/et_chat_sent" + android:id="@+id/et_chat_send" android:layout_width="match_parent" android:layout_height="50dp" android:paddingVertical="5dp" diff --git a/app/src/main/res/layout/fragment_chatting.xml b/app/src/main/res/layout/fragment_chatting.xml index a0e61f6..deeb34e 100644 --- a/app/src/main/res/layout/fragment_chatting.xml +++ b/app/src/main/res/layout/fragment_chatting.xml @@ -36,6 +36,7 @@ android:id="@+id/btn_chat_list_start" android:layout_width="match_parent" android:layout_height="wrap_content" + style="@style/Widget.AppCompat.Button.Borderless" android:text="매칭 시작" android:textSize="15sp" android:textColor="@color/white" diff --git a/app/src/main/res/layout/item_chat_me.xml b/app/src/main/res/layout/item_chat_me.xml index aacb4f3..0de9c09 100644 --- a/app/src/main/res/layout/item_chat_me.xml +++ b/app/src/main/res/layout/item_chat_me.xml @@ -12,7 +12,8 @@ android:text="메시지 테스트" android:textSize="@dimen/chat_text" android:textColor="@color/black" - android:padding="5dp" + android:paddingVertical="5dp" + android:paddingHorizontal="8dp" android:background="@drawable/tv_chat_me" app:layout_constraintEnd_toEndOf="parent" app:layout_constraintTop_toTopOf="parent"/> diff --git a/app/src/main/res/layout/item_chat_you.xml b/app/src/main/res/layout/item_chat_you.xml index c6e36fd..84d99d5 100644 --- a/app/src/main/res/layout/item_chat_you.xml +++ b/app/src/main/res/layout/item_chat_you.xml @@ -12,7 +12,8 @@ android:text="메시지 테스트" android:textSize="@dimen/chat_text" android:textColor="@color/black" - android:padding="5dp" + android:paddingVertical="5dp" + android:paddingHorizontal="8dp" android:background="@drawable/tv_chat_you" app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toTopOf="parent"/> diff --git a/build.gradle b/build.gradle index 932e4c5..c440181 100644 --- a/build.gradle +++ b/build.gradle @@ -1,4 +1,11 @@ // Top-level build file where you can add configuration options common to all sub-projects/modules. +buildscript { + repositories { + jcenter() + maven { url "https://jitpack.io" } + } +} + plugins { id 'com.android.application' version '7.2.1' apply false id 'com.android.library' version '7.2.1' apply false diff --git a/settings.gradle b/settings.gradle index cba649d..3db1eef 100644 --- a/settings.gradle +++ b/settings.gradle @@ -14,6 +14,8 @@ dependencyResolutionManagement { // 카카오 sdk 레포지토리 설정 maven { url 'https://devrepo.kakao.com/nexus/content/groups/public/' } + // stomp관련 설정 + maven { url "https://jitpack.io" } } } rootProject.name = "mbtree"