11package com.munchmates.android.Activities
22
33import android.content.Intent
4- import android.content.res.Configuration
54import android.graphics.Color
65import android.os.Bundle
7- import android.support.v7.app.AppCompatActivity
6+ import android.support.v7.widget.LinearLayoutManager
7+ import android.support.v7.widget.RecyclerView
88import android.view.*
9+ import android.widget.LinearLayout
910import android.widget.TextView
10- import com.google.firebase.auth.FirebaseAuth
1111import com.google.firebase.database.*
1212import com.munchmates.android.App
1313import com.munchmates.android.DatabaseObjs.Message
@@ -17,13 +17,17 @@ import com.munchmates.android.DatabaseObjs.User
1717import com.munchmates.android.R
1818import com.munchmates.android.Utils
1919import kotlinx.android.synthetic.main.activity_conversation.*
20+ import android.support.v7.widget.DividerItemDecoration
2021
21- class ConversationActivity : BaseMMActivity (), View.OnClickListener {
22+ class ConversationActivity : BaseMMActivity (), View.OnClickListener, Runnable {
2223
2324 val usersRef = FirebaseDatabase .getInstance().reference
2425 var messages = arrayListOf<Message >()
2526 var uid = " "
2627 var them = User ()
28+ var count = 0
29+ lateinit var cAdapter: RecyclerView .Adapter <* >
30+ lateinit var manager: LinearLayoutManager
2731
2832 override fun onCreate (savedInstanceState : Bundle ? ) {
2933 super .onCreate(savedInstanceState)
@@ -32,14 +36,31 @@ class ConversationActivity : BaseMMActivity(), View.OnClickListener {
3236
3337 uid = intent.getStringExtra(" uid" )
3438 them = App .users[uid]!!
35- listMessages()
39+
40+ manager = LinearLayoutManager (this , LinearLayoutManager .VERTICAL , true )
41+
42+ val thread = Thread (this )
43+ thread.start()
44+ }
45+
46+ override fun run () {
47+ while (true ) {
48+ val total = App .user.conversations.messageList[uid]!! .messages.size
49+ if (total != count) {
50+ count = total
51+ runOnUiThread {
52+ listMessages()
53+ }
54+ }
55+ Thread .sleep(2500 )
56+ }
3657 }
3758
3859 private fun listMessages () {
39- messages = arrayListOf ( )
60+ messages.removeAll(messages )
4061 if (App .user.conversations.messageList.contains(uid)) {
4162 // sort and remove old messages
42- messages = Utils .sortMessage(App .user.conversations.messageList[uid]!! .messages, uid)
63+ messages.addAll( Utils .sortMessage(App .user.conversations.messageList[uid]!! .messages, uid) )
4364
4465 // remove messages from db
4566 val usersRef = FirebaseDatabase .getInstance().reference.child(" USERS/${App .user.uid} /conversations/messageList/$uid /messages" )
@@ -50,27 +71,13 @@ class ConversationActivity : BaseMMActivity(), View.OnClickListener {
5071 }
5172
5273 private fun buildList () {
53- conv_list_msgs.removeAllViews()
54- for (msg in messages) {
55- val view = LayoutInflater .from(this ).inflate(R .layout.item_message, conv_list_msgs as ViewGroup , false )
56-
57- view.findViewById<TextView >(R .id.msg_text_msg).text = msg.text
58- view.findViewById<TextView >(R .id.msg_text_sender).text = " UID: ${msg.sender_id} "
59- view.findViewById<TextView >(R .id.msg_text_date).text = msg.dateTime
60-
61- var user = App .user
62- if (msg.sender_id == uid) {
63- user = them
64- }
65- view.findViewById<TextView >(R .id.msg_text_sender).text = " ${user.firstName} ${user.lastName} "
66-
67- if (msg.sender_id == App .user.uid) {
68- view.setBackgroundColor(Color .parseColor(" #EEEEEE" ))
69- }
70- conv_list_msgs.addView(view)
71- conv_list_msgs.addView(LayoutInflater .from(this ).inflate(R .layout.spacer, conv_list_msgs as ViewGroup , false ))
74+ cAdapter = ConvAdapter (messages.toTypedArray())
75+ val recyclerView = findViewById<RecyclerView >(R .id.conv_list_msgs).apply {
76+ setHasFixedSize(true )
77+ layoutManager = manager
78+ adapter = cAdapter
7279 }
73- conv_scroll.post { conv_scroll.fullScroll( View . FOCUS_DOWN ) }
80+ recyclerView.addItemDecoration( DividerItemDecoration (recyclerView.context, manager.orientation))
7481 }
7582
7683 override fun onClick (v : View ? ) {
@@ -81,8 +88,6 @@ class ConversationActivity : BaseMMActivity(), View.OnClickListener {
8188 var newMsg = Message (" ${App .user.firstName} ${App .user.lastName} " , App .user.uid, message, Utils .getDate(Utils .messageFormat), System .currentTimeMillis() / 1000.0 )
8289 addMessage(newMsg, App .user, them)
8390 addMessage(newMsg, them, App .user)
84- messages.add(newMsg)
85- buildList()
8691 }
8792 }
8893 }
@@ -121,4 +126,30 @@ class ConversationActivity : BaseMMActivity(), View.OnClickListener {
121126 else -> return super .onOptionsItemSelected(item)
122127 }
123128 }
129+
130+ class ConvAdapter (private val data : Array <Message >): RecyclerView.Adapter<ConvAdapter.ViewHolder>() {
131+ class ViewHolder (val layout : LinearLayout ): RecyclerView.ViewHolder(layout)
132+
133+ override fun onCreateViewHolder (parent : ViewGroup , viewType : Int ): ViewHolder {
134+ val view = LayoutInflater .from(parent.context).inflate(R .layout.item_message, parent, false ) as LinearLayout
135+ return ViewHolder (view)
136+ }
137+
138+ override fun onBindViewHolder (holder : ViewHolder , position : Int ) {
139+ val view = holder.layout
140+ val msg = data[position]
141+ view.findViewById<TextView >(R .id.msg_text_msg).text = msg.text
142+ view.findViewById<TextView >(R .id.msg_text_sender).text = " UID: ${msg.sender_id} "
143+ view.findViewById<TextView >(R .id.msg_text_date).text = msg.dateTime
144+
145+ var user = App .users[msg.sender_id]!!
146+ view.findViewById<TextView >(R .id.msg_text_sender).text = " ${user.firstName} ${user.lastName} "
147+
148+ if (msg.sender_id == App .user.uid) {
149+ view.setBackgroundColor(Color .parseColor(" #EEEEEE" ))
150+ }
151+ }
152+
153+ override fun getItemCount (): Int = data.size
154+ }
124155}
0 commit comments