pass only the ThreadId to ThreadActivity, fetch other data

This commit is contained in:
tibbi 2020-04-06 11:13:47 +02:00
parent ba08a74cf9
commit 5b6b5db17b
5 changed files with 54 additions and 14 deletions

View File

@ -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 {

View File

@ -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)

View File

@ -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<Message> {
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(

View File

@ -0,0 +1,3 @@
package com.simplemobiletools.smsmessenger.models
data class MessagingThread(val id: Int, val title: String, val address: String)

View File

@ -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)