diff --git a/app/src/main/kotlin/com/simplemobiletools/smsmessenger/activities/ThreadActivity.kt b/app/src/main/kotlin/com/simplemobiletools/smsmessenger/activities/ThreadActivity.kt index c52c8b4c..e876f789 100644 --- a/app/src/main/kotlin/com/simplemobiletools/smsmessenger/activities/ThreadActivity.kt +++ b/app/src/main/kotlin/com/simplemobiletools/smsmessenger/activities/ThreadActivity.kt @@ -6,6 +6,7 @@ import com.simplemobiletools.smsmessenger.adapters.ThreadAdapter import com.simplemobiletools.smsmessenger.extensions.getMessages import com.simplemobiletools.smsmessenger.helpers.THREAD_ID import com.simplemobiletools.smsmessenger.helpers.THREAD_NAME +import com.simplemobiletools.smsmessenger.models.ThreadItem import kotlinx.android.synthetic.main.activity_thread.* class ThreadActivity : SimpleActivity() { @@ -18,8 +19,9 @@ class ThreadActivity : SimpleActivity() { val threadID = intent.getIntExtra(THREAD_ID, 0) val messages = getMessages(threadID) messages.sortBy { it.id } + val items = messages.toMutableList() as ArrayList - ThreadAdapter(this, messages, thread_messages_list, thread_messages_fastscroller) { + ThreadAdapter(this, items, thread_messages_list, thread_messages_fastscroller) { }.apply { thread_messages_list.adapter = this diff --git a/app/src/main/kotlin/com/simplemobiletools/smsmessenger/adapters/ThreadAdapter.kt b/app/src/main/kotlin/com/simplemobiletools/smsmessenger/adapters/ThreadAdapter.kt index f5ae7db8..7d19a948 100644 --- a/app/src/main/kotlin/com/simplemobiletools/smsmessenger/adapters/ThreadAdapter.kt +++ b/app/src/main/kotlin/com/simplemobiletools/smsmessenger/adapters/ThreadAdapter.kt @@ -11,13 +11,16 @@ import com.simplemobiletools.commons.views.FastScroller import com.simplemobiletools.commons.views.MyRecyclerView import com.simplemobiletools.smsmessenger.R import com.simplemobiletools.smsmessenger.activities.SimpleActivity -import com.simplemobiletools.smsmessenger.helpers.RECEIVED_MESSAGE -import com.simplemobiletools.smsmessenger.helpers.SENT_MESSAGE +import com.simplemobiletools.smsmessenger.helpers.THREAD_DATE_TIME +import com.simplemobiletools.smsmessenger.helpers.THREAD_RECEIVED_MESSAGE +import com.simplemobiletools.smsmessenger.helpers.THREAD_SENT_MESSAGE import com.simplemobiletools.smsmessenger.models.Message +import com.simplemobiletools.smsmessenger.models.ThreadDateTime +import com.simplemobiletools.smsmessenger.models.ThreadItem import kotlinx.android.synthetic.main.item_received_message.view.* class ThreadAdapter( - activity: SimpleActivity, var messages: ArrayList, + activity: SimpleActivity, var messages: ArrayList, recyclerView: MyRecyclerView, fastScroller: FastScroller, itemClick: (Any) -> Unit @@ -43,29 +46,33 @@ class ThreadAdapter( override fun getSelectableItemCount() = messages.size - override fun getIsItemSelectable(position: Int) = true + override fun getIsItemSelectable(position: Int) = !isThreadDateTime(position) - override fun getItemSelectionKey(position: Int) = messages.getOrNull(position)?.id + override fun getItemSelectionKey(position: Int) = (messages.getOrNull(position) as? Message)?.id - override fun getItemKeyPosition(key: Int) = messages.indexOfFirst { it.id == key } + override fun getItemKeyPosition(key: Int) = messages.indexOfFirst { (it as? Message)?.id == key } override fun onActionModeCreated() {} override fun onActionModeDestroyed() {} override fun onCreateViewHolder(parent: ViewGroup, viewType: Int): ViewHolder { - val layout = if (viewType == RECEIVED_MESSAGE) { - R.layout.item_received_message - } else { - R.layout.item_sent_message + val layout = when (viewType) { + THREAD_DATE_TIME -> R.layout.item_thread_date_time + THREAD_RECEIVED_MESSAGE -> R.layout.item_received_message + else -> R.layout.item_sent_message } return createViewHolder(layout, parent) } override fun onBindViewHolder(holder: ViewHolder, position: Int) { - val message = messages[position] - holder.bindView(message, true, true) { itemView, layoutPosition -> - setupView(itemView, message) + val item = messages[position] + holder.bindView(item, true, true) { itemView, layoutPosition -> + if (item is ThreadDateTime) { + setupDateTime(itemView, item) + } else { + setupView(itemView, item as Message) + } } bindViewHolder(holder) } @@ -73,16 +80,15 @@ class ThreadAdapter( override fun getItemCount() = messages.size override fun getItemViewType(position: Int): Int { - return if (messages[position].isReceivedMessage()) { - RECEIVED_MESSAGE - } else { - SENT_MESSAGE + val item = messages[position] + return when { + item is ThreadDateTime -> THREAD_DATE_TIME + (messages[position] as? Message)?.isReceivedMessage() == true -> THREAD_RECEIVED_MESSAGE + else -> THREAD_SENT_MESSAGE } } - private fun getItemWithKey(key: Int): Message? = messages.firstOrNull { it.id == key } - - private fun getSelectedItems() = messages.filter { selectedKeys.contains(it.id) } as ArrayList + private fun isThreadDateTime(position: Int) = messages.getOrNull(position) is ThreadDateTime private fun setupView(view: View, message: Message) { view.apply { @@ -96,4 +102,8 @@ class ThreadAdapter( } } } + + private fun setupDateTime(view: View, dateTime: ThreadDateTime) { + + } } diff --git a/app/src/main/kotlin/com/simplemobiletools/smsmessenger/helpers/Constants.kt b/app/src/main/kotlin/com/simplemobiletools/smsmessenger/helpers/Constants.kt index 9ecebf38..57c4c82c 100644 --- a/app/src/main/kotlin/com/simplemobiletools/smsmessenger/helpers/Constants.kt +++ b/app/src/main/kotlin/com/simplemobiletools/smsmessenger/helpers/Constants.kt @@ -3,6 +3,7 @@ package com.simplemobiletools.smsmessenger.helpers const val THREAD_ID = "thread_id" const val THREAD_NAME = "thread_name" -// message types for the thread list view -const val RECEIVED_MESSAGE = 1 -const val SENT_MESSAGE = 2 +// view types for the thread list view +const val THREAD_DATE_TIME = 1 +const val THREAD_RECEIVED_MESSAGE = 2 +const val THREAD_SENT_MESSAGE = 3 diff --git a/app/src/main/kotlin/com/simplemobiletools/smsmessenger/models/Message.kt b/app/src/main/kotlin/com/simplemobiletools/smsmessenger/models/Message.kt index d6e359b4..91c1fb63 100644 --- a/app/src/main/kotlin/com/simplemobiletools/smsmessenger/models/Message.kt +++ b/app/src/main/kotlin/com/simplemobiletools/smsmessenger/models/Message.kt @@ -5,6 +5,6 @@ import android.provider.Telephony data class Message( val id: Int, val subject: String, val body: String, val type: Int, val address: String, val date: Int, val read: Boolean, val thread: Int -) { +) : ThreadItem() { fun isReceivedMessage() = type == Telephony.Sms.MESSAGE_TYPE_INBOX } diff --git a/app/src/main/kotlin/com/simplemobiletools/smsmessenger/models/ThreadDateTime.kt b/app/src/main/kotlin/com/simplemobiletools/smsmessenger/models/ThreadDateTime.kt new file mode 100644 index 00000000..ee042f89 --- /dev/null +++ b/app/src/main/kotlin/com/simplemobiletools/smsmessenger/models/ThreadDateTime.kt @@ -0,0 +1,3 @@ +package com.simplemobiletools.smsmessenger.models + +open class ThreadDateTime(val date: Int) diff --git a/app/src/main/kotlin/com/simplemobiletools/smsmessenger/models/ThreadItem.kt b/app/src/main/kotlin/com/simplemobiletools/smsmessenger/models/ThreadItem.kt new file mode 100644 index 00000000..534397fa --- /dev/null +++ b/app/src/main/kotlin/com/simplemobiletools/smsmessenger/models/ThreadItem.kt @@ -0,0 +1,3 @@ +package com.simplemobiletools.smsmessenger.models + +open class ThreadItem diff --git a/app/src/main/res/layout/item_thread_date_time.xml b/app/src/main/res/layout/item_thread_date_time.xml new file mode 100644 index 00000000..ebb33bf8 --- /dev/null +++ b/app/src/main/res/layout/item_thread_date_time.xml @@ -0,0 +1,8 @@ + +