From 5a462775fdee3fd92049f30c6dbe1c0755c35d9c Mon Sep 17 00:00:00 2001 From: tibbi Date: Sun, 12 Apr 2020 10:50:05 +0200 Subject: [PATCH] show some suggestions at top of the contact picker screen --- .../activities/NewMessageActivity.kt | 33 ++++++++++++++++--- .../smsmessenger/extensions/Context.kt | 27 +++++++++++++++ .../linear_layout_horizontal_divider.xml | 6 ++++ .../main/res/layout/activity_new_message.xml | 32 ++++++++++++++++-- .../res/layout/item_suggested_contact.xml | 31 +++++++++++++++++ app/src/main/res/values/dimens.xml | 1 + app/src/main/res/values/strings.xml | 1 + 7 files changed, 124 insertions(+), 7 deletions(-) create mode 100644 app/src/main/res/drawable/linear_layout_horizontal_divider.xml create mode 100644 app/src/main/res/layout/item_suggested_contact.xml diff --git a/app/src/main/kotlin/com/simplemobiletools/smsmessenger/activities/NewMessageActivity.kt b/app/src/main/kotlin/com/simplemobiletools/smsmessenger/activities/NewMessageActivity.kt index 1ed8b86b..58fd422e 100644 --- a/app/src/main/kotlin/com/simplemobiletools/smsmessenger/activities/NewMessageActivity.kt +++ b/app/src/main/kotlin/com/simplemobiletools/smsmessenger/activities/NewMessageActivity.kt @@ -5,16 +5,16 @@ import android.os.Bundle import android.view.WindowManager import com.simplemobiletools.commons.extensions.* import com.simplemobiletools.commons.helpers.PERMISSION_READ_CONTACTS +import com.simplemobiletools.commons.helpers.ensureBackgroundThread import com.simplemobiletools.smsmessenger.R import com.simplemobiletools.smsmessenger.adapters.ContactsAdapter -import com.simplemobiletools.smsmessenger.extensions.config -import com.simplemobiletools.smsmessenger.extensions.getAvailableContacts -import com.simplemobiletools.smsmessenger.extensions.getThreadId +import com.simplemobiletools.smsmessenger.extensions.* import com.simplemobiletools.smsmessenger.helpers.THREAD_ID import com.simplemobiletools.smsmessenger.helpers.THREAD_TEXT import com.simplemobiletools.smsmessenger.helpers.THREAD_TITLE import com.simplemobiletools.smsmessenger.models.Contact import kotlinx.android.synthetic.main.activity_new_message.* +import kotlinx.android.synthetic.main.item_suggested_contact.view.* class NewMessageActivity : SimpleActivity() { private var allContacts = ArrayList() @@ -46,6 +46,7 @@ class NewMessageActivity : SimpleActivity() { } } + fillSuggestedContacts() new_message_to.onTextChangeListener { val searchString = it val filteredContacts = ArrayList() @@ -78,13 +79,35 @@ class NewMessageActivity : SimpleActivity() { } private fun setupAdapter(contacts: ArrayList) { - ContactsAdapter(this, contacts, suggestions_list, null) { + ContactsAdapter(this, contacts, contacts_list, null) { hideKeyboard() val text = intent.getStringExtra(Intent.EXTRA_TEXT) ?: "" launchThreadActivity((it as Contact).phoneNumber, it.name, text) }.apply { - suggestions_list.adapter = this + contacts_list.adapter = this + } + } + + private fun fillSuggestedContacts() { + ensureBackgroundThread { + val suggestions = getSuggestedContacts() + runOnUiThread { + suggestions_holder.removeAllViews() + if (suggestions.isEmpty()) { + suggestions_label.beGone() + suggestions_scrollview.beGone() + } else { + suggestions.forEach { + val contact = it + layoutInflater.inflate(R.layout.item_suggested_contact, null).apply { + suggested_contact_name.text = contact.name + loadImage(contact.photoUri, suggested_contact_image, contact.name) + suggestions_holder.addView(this) + } + } + } + } } } diff --git a/app/src/main/kotlin/com/simplemobiletools/smsmessenger/extensions/Context.kt b/app/src/main/kotlin/com/simplemobiletools/smsmessenger/extensions/Context.kt index 635ecf0b..82c484f6 100644 --- a/app/src/main/kotlin/com/simplemobiletools/smsmessenger/extensions/Context.kt +++ b/app/src/main/kotlin/com/simplemobiletools/smsmessenger/extensions/Context.kt @@ -338,6 +338,33 @@ fun Context.getPhoneNumberFromAddressId(canonicalAddressId: Int): String { return "" } +fun Context.getSuggestedContacts(): ArrayList { + val contacts = ArrayList() + val uri = Sms.CONTENT_URI + val projection = arrayOf( + Sms.ADDRESS + ) + + val selection = "1 == 1) GROUP BY (${Sms.ADDRESS}" + val selectionArgs = null + val sortOrder = "${Sms.DATE} DESC LIMIT 20" + + queryCursor(uri, projection, selection, selectionArgs, sortOrder, showErrors = true) { cursor -> + val senderNumber = cursor.getStringValue(Sms.ADDRESS) + val namePhoto = getNameAndPhotoFromPhoneNumber(senderNumber) + if (namePhoto == null || namePhoto.name == senderNumber) { + return@queryCursor + } + + val senderName = namePhoto.name + val photoUri = namePhoto.photoUri ?: "" + val contact = Contact(0, senderName, photoUri, senderNumber) + contacts.add(contact) + } + + return contacts +} + fun Context.getAvailableContacts(callback: (ArrayList) -> Unit) { ensureBackgroundThread { val names = getContactNames() diff --git a/app/src/main/res/drawable/linear_layout_horizontal_divider.xml b/app/src/main/res/drawable/linear_layout_horizontal_divider.xml new file mode 100644 index 00000000..45cccf6f --- /dev/null +++ b/app/src/main/res/drawable/linear_layout_horizontal_divider.xml @@ -0,0 +1,6 @@ + + + + diff --git a/app/src/main/res/layout/activity_new_message.xml b/app/src/main/res/layout/activity_new_message.xml index c328920d..2b8b5be2 100644 --- a/app/src/main/res/layout/activity_new_message.xml +++ b/app/src/main/res/layout/activity_new_message.xml @@ -38,11 +38,39 @@ android:background="@color/divider_grey" android:importantForAccessibility="no" /> + + + + + + + + + + + + + + diff --git a/app/src/main/res/values/dimens.xml b/app/src/main/res/values/dimens.xml index dfb21840..0bd5d4eb 100644 --- a/app/src/main/res/values/dimens.xml +++ b/app/src/main/res/values/dimens.xml @@ -2,5 +2,6 @@ 72dp 40dp + 64dp 36dp diff --git a/app/src/main/res/values/strings.xml b/app/src/main/res/values/strings.xml index 28dab393..94ee0c57 100644 --- a/app/src/main/res/values/strings.xml +++ b/app/src/main/res/values/strings.xml @@ -8,6 +8,7 @@ Create new message Add Contact or Number… + Suggestions Received SMS