From 5b6b5db17b0de72a662f127372d842eee5a9f8fd Mon Sep 17 00:00:00 2001 From: tibbi Date: Mon, 6 Apr 2020 11:13:47 +0200 Subject: [PATCH] pass only the ThreadId to ThreadActivity, fetch other data --- .../smsmessenger/activities/MainActivity.kt | 4 --- .../smsmessenger/activities/ThreadActivity.kt | 21 +++++++---- .../smsmessenger/extensions/Context.kt | 36 +++++++++++++++++++ .../smsmessenger/models/MessagingThread.kt | 3 ++ .../smsmessenger/receivers/SmsReceiver.kt | 4 --- 5 files changed, 54 insertions(+), 14 deletions(-) create mode 100644 app/src/main/kotlin/com/simplemobiletools/smsmessenger/models/MessagingThread.kt diff --git a/app/src/main/kotlin/com/simplemobiletools/smsmessenger/activities/MainActivity.kt b/app/src/main/kotlin/com/simplemobiletools/smsmessenger/activities/MainActivity.kt index dd7788e0..5b8ee0f8 100644 --- a/app/src/main/kotlin/com/simplemobiletools/smsmessenger/activities/MainActivity.kt +++ b/app/src/main/kotlin/com/simplemobiletools/smsmessenger/activities/MainActivity.kt @@ -19,8 +19,6 @@ import com.simplemobiletools.smsmessenger.adapters.MessagesAdapter import com.simplemobiletools.smsmessenger.extensions.config import com.simplemobiletools.smsmessenger.extensions.getMessages import com.simplemobiletools.smsmessenger.helpers.THREAD_ID -import com.simplemobiletools.smsmessenger.helpers.THREAD_NAME -import com.simplemobiletools.smsmessenger.helpers.THREAD_NUMBER import com.simplemobiletools.smsmessenger.models.Events import com.simplemobiletools.smsmessenger.models.Message import kotlinx.android.synthetic.main.activity_main.* @@ -140,8 +138,6 @@ class MainActivity : SimpleActivity() { MessagesAdapter(this, messages, messages_list, messages_fastscroller) { Intent(this, ThreadActivity::class.java).apply { putExtra(THREAD_ID, (it as Message).thread) - putExtra(THREAD_NAME, it.senderName) - putExtra(THREAD_NUMBER, it.senderNumber) startActivity(this) } }.apply { 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 06e5d301..c61414b8 100644 --- a/app/src/main/kotlin/com/simplemobiletools/smsmessenger/activities/ThreadActivity.kt +++ b/app/src/main/kotlin/com/simplemobiletools/smsmessenger/activities/ThreadActivity.kt @@ -5,15 +5,15 @@ import android.content.Intent import android.os.Bundle import android.provider.Telephony import android.telephony.SmsManager +import android.util.Log import com.simplemobiletools.commons.extensions.applyColorFilter import com.simplemobiletools.commons.extensions.onTextChangeListener +import com.simplemobiletools.commons.extensions.toast import com.simplemobiletools.commons.extensions.value import com.simplemobiletools.commons.helpers.ensureBackgroundThread import com.simplemobiletools.smsmessenger.R import com.simplemobiletools.smsmessenger.adapters.ThreadAdapter -import com.simplemobiletools.smsmessenger.extensions.config -import com.simplemobiletools.smsmessenger.extensions.getMessages -import com.simplemobiletools.smsmessenger.extensions.markSMSRead +import com.simplemobiletools.smsmessenger.extensions.* import com.simplemobiletools.smsmessenger.helpers.* import com.simplemobiletools.smsmessenger.models.Events import com.simplemobiletools.smsmessenger.models.ThreadDateTime @@ -29,13 +29,23 @@ class ThreadActivity : SimpleActivity() { private val MIN_DATE_TIME_DIFF_SECS = 300 private var targetNumber = "" + private var threadId = 0 private var bus: EventBus? = null override fun onCreate(savedInstanceState: Bundle?) { super.onCreate(savedInstanceState) setContentView(R.layout.activity_thread) - title = intent.getStringExtra(THREAD_NAME) ?: getString(R.string.app_launcher_name) - targetNumber = intent.getStringExtra(THREAD_NUMBER)!! + + threadId = intent.getIntExtra(THREAD_ID, 0) + val thread = getThreadInfo(threadId) + if (thread == null) { + toast(R.string.unknown_error_occurred) + finish() + return + } + + title = thread.title + targetNumber = thread.address bus = EventBus.getDefault() bus!!.register(this) @@ -61,7 +71,6 @@ class ThreadActivity : SimpleActivity() { } private fun setupButtons() { - val threadId = intent.getIntExtra(THREAD_ID, 0) thread_type_message.setColors(config.textColor, config.primaryColor, config.backgroundColor) thread_send_message.applyColorFilter(config.textColor) 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 6893f417..3900a502 100644 --- a/app/src/main/kotlin/com/simplemobiletools/smsmessenger/extensions/Context.kt +++ b/app/src/main/kotlin/com/simplemobiletools/smsmessenger/extensions/Context.kt @@ -13,6 +13,7 @@ import com.simplemobiletools.commons.helpers.PERMISSION_READ_CONTACTS import com.simplemobiletools.commons.helpers.isMarshmallowPlus import com.simplemobiletools.smsmessenger.helpers.Config import com.simplemobiletools.smsmessenger.models.Message +import com.simplemobiletools.smsmessenger.models.MessagingThread val Context.config: Config get() = Config.newInstance(applicationContext) @@ -83,6 +84,41 @@ fun Context.getMessages(threadID: Int? = null): ArrayList { return messages } +fun Context.getThreadInfo(id: Int): MessagingThread? { + val uri = Telephony.Sms.CONTENT_URI + val projection = arrayOf( + Telephony.Sms._ID, + Telephony.Sms.ADDRESS, + Telephony.Sms.PERSON + ) + val selection = "${Telephony.Sms.THREAD_ID} = ?" + val selectionArgs = arrayOf(id.toString()) + var cursor: Cursor? = null + try { + cursor = contentResolver.query(uri, projection, selection, selectionArgs, null) + if (cursor?.moveToFirst() == true) { + val person = cursor.getIntValue(Telephony.Sms.PERSON) + val address = cursor.getStringValue(Telephony.Sms.ADDRESS) + var title = address + + if (title != null && person != 0) { + title = getPersonsName(person) ?: title + } else if (title.areDigitsOnly()) { + val contactId = getNameFromPhoneNumber(title) + if (contactId != null) { + title = getPersonsName(contactId) ?: title + } + } + + return MessagingThread(id, title, address) + } + } catch (e: Exception) { + } finally { + cursor?.close() + } + return null +} + fun Context.getPersonsName(id: Int): String? { val uri = ContactsContract.Data.CONTENT_URI val projection = arrayOf( diff --git a/app/src/main/kotlin/com/simplemobiletools/smsmessenger/models/MessagingThread.kt b/app/src/main/kotlin/com/simplemobiletools/smsmessenger/models/MessagingThread.kt new file mode 100644 index 00000000..43d80e86 --- /dev/null +++ b/app/src/main/kotlin/com/simplemobiletools/smsmessenger/models/MessagingThread.kt @@ -0,0 +1,3 @@ +package com.simplemobiletools.smsmessenger.models + +data class MessagingThread(val id: Int, val title: String, val address: String) diff --git a/app/src/main/kotlin/com/simplemobiletools/smsmessenger/receivers/SmsReceiver.kt b/app/src/main/kotlin/com/simplemobiletools/smsmessenger/receivers/SmsReceiver.kt index 283791f7..152bac72 100644 --- a/app/src/main/kotlin/com/simplemobiletools/smsmessenger/receivers/SmsReceiver.kt +++ b/app/src/main/kotlin/com/simplemobiletools/smsmessenger/receivers/SmsReceiver.kt @@ -25,8 +25,6 @@ import com.simplemobiletools.smsmessenger.activities.ThreadActivity import com.simplemobiletools.smsmessenger.extensions.getThreadId import com.simplemobiletools.smsmessenger.extensions.insertNewSMS import com.simplemobiletools.smsmessenger.helpers.THREAD_ID -import com.simplemobiletools.smsmessenger.helpers.THREAD_NAME -import com.simplemobiletools.smsmessenger.helpers.THREAD_NUMBER import com.simplemobiletools.smsmessenger.helpers.refreshMessages class SmsReceiver : BroadcastReceiver() { @@ -72,8 +70,6 @@ class SmsReceiver : BroadcastReceiver() { val intent = Intent(context, ThreadActivity::class.java).apply { putExtra(THREAD_ID, threadID) - putExtra(THREAD_NAME, address) - putExtra(THREAD_NUMBER, address) } val pendingIntent = PendingIntent.getActivity(context, threadID, intent, PendingIntent.FLAG_UPDATE_CURRENT)