diff --git a/app/build.gradle b/app/build.gradle index 130dba3f..dc0077ae 100644 --- a/app/build.gradle +++ b/app/build.gradle @@ -56,7 +56,7 @@ android { } dependencies { - implementation 'com.simplemobiletools:commons:5.33.31' + implementation 'com.simplemobiletools:commons:5.33.32' implementation 'org.greenrobot:eventbus:3.2.0' implementation 'com.klinkerapps:android-smsmms:5.2.6' implementation 'com.github.tibbi:IndicatorFastScroll:c3de1d040a' diff --git a/app/src/main/kotlin/com/simplemobiletools/smsmessenger/activities/SearchActivity.kt b/app/src/main/kotlin/com/simplemobiletools/smsmessenger/activities/SearchActivity.kt index 6066975c..999b9146 100644 --- a/app/src/main/kotlin/com/simplemobiletools/smsmessenger/activities/SearchActivity.kt +++ b/app/src/main/kotlin/com/simplemobiletools/smsmessenger/activities/SearchActivity.kt @@ -3,6 +3,7 @@ package com.simplemobiletools.smsmessenger.activities import android.annotation.SuppressLint import android.app.SearchManager import android.content.Context +import android.content.Intent import android.os.Bundle import android.view.Menu import android.view.MenuItem @@ -11,8 +12,11 @@ import androidx.core.view.MenuItemCompat import com.simplemobiletools.commons.extensions.* import com.simplemobiletools.commons.helpers.ensureBackgroundThread import com.simplemobiletools.smsmessenger.R +import com.simplemobiletools.smsmessenger.adapters.SearchResultsAdapter import com.simplemobiletools.smsmessenger.extensions.conversationsDB import com.simplemobiletools.smsmessenger.extensions.messagesDB +import com.simplemobiletools.smsmessenger.helpers.THREAD_ID +import com.simplemobiletools.smsmessenger.helpers.THREAD_TITLE import com.simplemobiletools.smsmessenger.models.SearchResult import kotlinx.android.synthetic.main.activity_search.* @@ -83,18 +87,30 @@ class SearchActivity : SimpleActivity() { if (text == mLastSearchedText) { val searchResults = ArrayList() conversations.forEach { conversation -> - val searchResult = SearchResult(conversation.title, conversation.phoneNumber, conversation.date, conversation.threadId) + val date = conversation.date.formatDateOrTime(this, true, true) + val searchResult = SearchResult(conversation.title, conversation.phoneNumber, date, conversation.threadId) searchResults.add(searchResult) } messages.forEach { message -> - val searchResult = SearchResult(message.senderName, message.body, message.date, message.threadId) + val date = message.date.formatDateOrTime(this, true, true) + val searchResult = SearchResult(message.senderName, message.body, date, message.threadId) searchResults.add(searchResult) } runOnUiThread { search_results_list.beVisibleIf(searchResults.isNotEmpty()) search_placeholder.beVisibleIf(searchResults.isEmpty()) + + SearchResultsAdapter(this, searchResults, search_results_list) { + Intent(this, ThreadActivity::class.java).apply { + putExtra(THREAD_ID, (it as SearchResult).threadId) + putExtra(THREAD_TITLE, it.title) + startActivity(this) + } + }.apply { + search_results_list.adapter = this + } } } } diff --git a/app/src/main/kotlin/com/simplemobiletools/smsmessenger/adapters/ConversationsAdapter.kt b/app/src/main/kotlin/com/simplemobiletools/smsmessenger/adapters/ConversationsAdapter.kt index 8b1de0ca..ed8f66ae 100644 --- a/app/src/main/kotlin/com/simplemobiletools/smsmessenger/adapters/ConversationsAdapter.kt +++ b/app/src/main/kotlin/com/simplemobiletools/smsmessenger/adapters/ConversationsAdapter.kt @@ -232,7 +232,7 @@ class ConversationsAdapter(activity: SimpleActivity, var conversations: ArrayLis } conversation_date.apply { - text = conversation.date.formatDateOrTime(context, true) + text = conversation.date.formatDateOrTime(context, true, false) setTextSize(TypedValue.COMPLEX_UNIT_PX, fontSize * 0.8f) } diff --git a/app/src/main/kotlin/com/simplemobiletools/smsmessenger/adapters/SearchResultsAdapter.kt b/app/src/main/kotlin/com/simplemobiletools/smsmessenger/adapters/SearchResultsAdapter.kt new file mode 100644 index 00000000..11c1b6a5 --- /dev/null +++ b/app/src/main/kotlin/com/simplemobiletools/smsmessenger/adapters/SearchResultsAdapter.kt @@ -0,0 +1,70 @@ +package com.simplemobiletools.smsmessenger.adapters + +import android.util.TypedValue +import android.view.Menu +import android.view.View +import android.view.ViewGroup +import com.simplemobiletools.commons.adapters.MyRecyclerViewAdapter +import com.simplemobiletools.commons.extensions.getTextSize +import com.simplemobiletools.commons.views.MyRecyclerView +import com.simplemobiletools.smsmessenger.R +import com.simplemobiletools.smsmessenger.activities.SimpleActivity +import com.simplemobiletools.smsmessenger.models.SearchResult +import kotlinx.android.synthetic.main.item_search_result.view.* +import java.util.* + +class SearchResultsAdapter(activity: SimpleActivity, var searchResults: ArrayList, recyclerView: MyRecyclerView, itemClick: (Any) -> Unit) : + MyRecyclerViewAdapter(activity, recyclerView, null, itemClick) { + private var fontSize = activity.getTextSize() + + override fun getActionMenuId() = 0 + + override fun prepareActionMode(menu: Menu) {} + + override fun actionItemPressed(id: Int) {} + + override fun getSelectableItemCount() = searchResults.size + + override fun getIsItemSelectable(position: Int) = false + + override fun getItemSelectionKey(position: Int) = searchResults.getOrNull(position)?.hashCode() + + override fun getItemKeyPosition(key: Int) = searchResults.indexOfFirst { it.hashCode() == key } + + override fun onActionModeCreated() {} + + override fun onActionModeDestroyed() {} + + override fun onCreateViewHolder(parent: ViewGroup, viewType: Int) = createViewHolder(R.layout.item_search_result, parent) + + override fun onBindViewHolder(holder: ViewHolder, position: Int) { + val searchResult = searchResults[position] + holder.bindView(searchResult, true, false) { itemView, layoutPosition -> + setupView(itemView, searchResult) + } + bindViewHolder(holder) + } + + override fun getItemCount() = searchResults.size + + private fun setupView(view: View, searchResult: SearchResult) { + view.apply { + search_result_title.apply { + text = searchResult.title + setTextColor(textColor) + setTextSize(TypedValue.COMPLEX_UNIT_PX, fontSize * 1.2f) + } + + search_result_snippet.apply { + text = searchResult.snippet + setTextColor(textColor) + setTextSize(TypedValue.COMPLEX_UNIT_PX, fontSize * 0.9f) + } + + search_result_date.apply { + text = searchResult.date + setTextSize(TypedValue.COMPLEX_UNIT_PX, fontSize * 0.8f) + } + } + } +} 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 e5599c2b..5590a1d0 100644 --- a/app/src/main/kotlin/com/simplemobiletools/smsmessenger/adapters/ThreadAdapter.kt +++ b/app/src/main/kotlin/com/simplemobiletools/smsmessenger/adapters/ThreadAdapter.kt @@ -42,8 +42,10 @@ import kotlinx.android.synthetic.main.item_thread_error.view.* import kotlinx.android.synthetic.main.item_thread_sending.view.* import kotlinx.android.synthetic.main.item_thread_success.view.* -class ThreadAdapter(activity: SimpleActivity, var messages: ArrayList, recyclerView: MyRecyclerView, fastScroller: FastScroller, - itemClick: (Any) -> Unit) : MyRecyclerViewAdapter(activity, recyclerView, fastScroller, itemClick) { +class ThreadAdapter( + activity: SimpleActivity, var messages: ArrayList, recyclerView: MyRecyclerView, fastScroller: FastScroller, + itemClick: (Any) -> Unit +) : MyRecyclerViewAdapter(activity, recyclerView, fastScroller, itemClick) { private val roundedCornersRadius = resources.getDimension(R.dimen.normal_margin).toInt() private var fontSize = activity.getTextSize() @@ -329,7 +331,7 @@ class ThreadAdapter(activity: SimpleActivity, var messages: ArrayList + + + + + + + + +