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 b28f3f44..0702dd4c 100644 --- a/app/src/main/kotlin/com/simplemobiletools/smsmessenger/adapters/ThreadAdapter.kt +++ b/app/src/main/kotlin/com/simplemobiletools/smsmessenger/adapters/ThreadAdapter.kt @@ -81,9 +81,9 @@ class ThreadAdapter(activity: SimpleActivity, var messages: ArrayList + val messagesToRemove = getSelectedItems() val positions = getSelectedItemPositions() messagesToRemove.forEach { activity.deleteMessage((it as Message).id, it.isMMS) @@ -186,7 +186,7 @@ class ThreadAdapter(activity: SimpleActivity, var messages: ArrayList + private fun getSelectedItems() = messages.filter { selectedKeys.contains((it as? Message)?.hashCode() ?: 0) } as ArrayList private fun isThreadDateTime(position: Int) = messages.getOrNull(position) is ThreadDateTime @@ -199,7 +199,7 @@ class ThreadAdapter(activity: SimpleActivity, var messages: ArrayList { return@queryCursor } - val id = cursor.getIntValue(Sms._ID) + val id = cursor.getLongValue(Sms._ID) val body = cursor.getStringValue(Sms.BODY) val type = cursor.getIntValue(Sms.TYPE) val namePhoto = getNameAndPhotoFromPhoneNumber(senderNumber) - val senderName = namePhoto?.name ?: "" - val photoUri = namePhoto?.photoUri ?: "" + val senderName = namePhoto.name + val photoUri = namePhoto.photoUri ?: "" val date = (cursor.getLongValue(Sms.DATE) / 1000).toInt() val read = cursor.getIntValue(Sms.READ) == 1 val thread = cursor.getIntValue(Sms.THREAD_ID) @@ -127,7 +127,7 @@ fun Context.getMMS(threadId: Int? = null, sortOrder: String? = null): ArrayList< val contactsMap = HashMap() val threadParticipants = HashMap>() queryCursor(uri, projection, selection, selectionArgs, sortOrder, showErrors = true) { cursor -> - val mmsId = cursor.getIntValue(Mms._ID) + val mmsId = cursor.getLongValue(Mms._ID) val type = cursor.getIntValue(Mms.MESSAGE_BOX) val date = cursor.getLongValue(Mms.DATE).toInt() val read = cursor.getIntValue(Mms.READ) == 1 @@ -143,17 +143,15 @@ fun Context.getMMS(threadId: Int? = null, sortOrder: String? = null): ArrayList< val isMMS = true val attachment = getMmsAttachment(mmsId) - val body = attachment?.text ?: "" + val body = attachment.text var senderName = "" var senderPhotoUri = "" if (type != Mms.MESSAGE_BOX_SENT && type != Mms.MESSAGE_BOX_FAILED) { val number = getMMSSender(mmsId) val namePhoto = getNameAndPhotoFromPhoneNumber(number) - if (namePhoto != null) { - senderName = namePhoto.name - senderPhotoUri = namePhoto.photoUri ?: "" - } + senderName = namePhoto.name + senderPhotoUri = namePhoto.photoUri ?: "" } val message = Message(mmsId, body, type, participants, date, read, threadId, isMMS, attachment, senderName, senderPhotoUri, subscriptionId) @@ -167,7 +165,7 @@ fun Context.getMMS(threadId: Int? = null, sortOrder: String? = null): ArrayList< return messages } -fun Context.getMMSSender(msgId: Int): String { +fun Context.getMMSSender(msgId: Long): String { val uri = Uri.parse("${Mms.CONTENT_URI}/$msgId/addr") val projection = arrayOf( Mms.Addr.ADDRESS @@ -241,7 +239,7 @@ fun Context.getConversations(threadId: Long? = null, privateContacts: ArrayList< // based on https://stackoverflow.com/a/6446831/1967672 @SuppressLint("NewApi") -fun Context.getMmsAttachment(id: Int): MessageAttachment? { +fun Context.getMmsAttachment(id: Long): MessageAttachment { val uri = if (isQPlus()) { Mms.Part.CONTENT_URI } else { @@ -335,8 +333,8 @@ fun Context.getThreadParticipants(threadId: Int, contactsMap: HashMap): Arr queryCursor(uri, projection, selection, selectionArgs, sortOrder, showErrors = true) { cursor -> val senderNumber = cursor.getStringValue(Sms.ADDRESS) ?: return@queryCursor val namePhoto = getNameAndPhotoFromPhoneNumber(senderNumber) - var senderName = namePhoto?.name ?: "" - var photoUri = namePhoto?.photoUri ?: "" - if (namePhoto == null || isNumberBlocked(senderNumber, blockedNumbers)) { + var senderName = namePhoto.name + var photoUri = namePhoto.photoUri ?: "" + if (isNumberBlocked(senderNumber, blockedNumbers)) { return@queryCursor } else if (namePhoto.name == senderNumber) { if (privateContacts.isNotEmpty()) { @@ -437,7 +435,7 @@ fun Context.getSuggestedContacts(privateContacts: ArrayList): Arr return contacts } -fun Context.getNameAndPhotoFromPhoneNumber(number: String): NamePhoto? { +fun Context.getNameAndPhotoFromPhoneNumber(number: String): NamePhoto { if (!hasPermission(PERMISSION_READ_CONTACTS)) { return NamePhoto(number, null) } @@ -497,7 +495,7 @@ fun Context.deleteConversation(threadId: Int) { conversationsDB.deleteThreadId(threadId.toLong()) } -fun Context.deleteMessage(id: Int, isMMS: Boolean) { +fun Context.deleteMessage(id: Long, isMMS: Boolean) { val uri = if (isMMS) Mms.CONTENT_URI else Sms.CONTENT_URI val selection = "${Sms._ID} = ?" val selectionArgs = arrayOf(id.toString()) @@ -508,7 +506,7 @@ fun Context.deleteMessage(id: Int, isMMS: Boolean) { } } -fun Context.markMessageRead(id: Int, isMMS: Boolean) { +fun Context.markMessageRead(id: Long, isMMS: Boolean) { val uri = if (isMMS) Mms.CONTENT_URI else Sms.CONTENT_URI val contentValues = ContentValues().apply { put(Sms.READ, 1) @@ -581,7 +579,7 @@ fun Context.getThreadId(addresses: Set): Long { fun Context.showReceivedMessageNotification(address: String, body: String, threadID: Int, bitmap: Bitmap?) { val privateCursor = getMyContactsCursor()?.loadInBackground() ensureBackgroundThread { - var sender = getNameAndPhotoFromPhoneNumber(address)?.name ?: "" + var sender = getNameAndPhotoFromPhoneNumber(address).name if (address == sender) { val privateContacts = MyContactsContentProvider.getSimpleContacts(this, privateCursor) sender = privateContacts.firstOrNull { it.doesContainPhoneNumber(address) }?.name ?: address 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 e18df07c..a0c2631d 100644 --- a/app/src/main/kotlin/com/simplemobiletools/smsmessenger/models/Message.kt +++ b/app/src/main/kotlin/com/simplemobiletools/smsmessenger/models/Message.kt @@ -4,7 +4,7 @@ import android.provider.Telephony import com.simplemobiletools.commons.models.SimpleContact data class Message( - val id: Int, val body: String, val type: Int, val participants: ArrayList, val date: Int, val read: Boolean, val thread: Int, + val id: Long, val body: String, val type: Int, val participants: ArrayList, val date: Int, val read: Boolean, val thread: Int, val isMMS: Boolean, val attachment: MessageAttachment?, var senderName: String, val senderPhotoUri: String, val subscriptionId: Int) : ThreadItem() { fun isReceivedMessage() = type == Telephony.Sms.MESSAGE_TYPE_INBOX } diff --git a/app/src/main/kotlin/com/simplemobiletools/smsmessenger/models/MessageAttachment.kt b/app/src/main/kotlin/com/simplemobiletools/smsmessenger/models/MessageAttachment.kt index 53f4b94f..51fd8ee2 100644 --- a/app/src/main/kotlin/com/simplemobiletools/smsmessenger/models/MessageAttachment.kt +++ b/app/src/main/kotlin/com/simplemobiletools/smsmessenger/models/MessageAttachment.kt @@ -1,3 +1,3 @@ package com.simplemobiletools.smsmessenger.models -data class MessageAttachment(val id: Int, var text: String, var attachments: ArrayList) +data class MessageAttachment(val id: Long, var text: String, var attachments: ArrayList) diff --git a/app/src/main/kotlin/com/simplemobiletools/smsmessenger/models/ThreadError.kt b/app/src/main/kotlin/com/simplemobiletools/smsmessenger/models/ThreadError.kt index 69df786f..9b0f003e 100644 --- a/app/src/main/kotlin/com/simplemobiletools/smsmessenger/models/ThreadError.kt +++ b/app/src/main/kotlin/com/simplemobiletools/smsmessenger/models/ThreadError.kt @@ -1,3 +1,3 @@ package com.simplemobiletools.smsmessenger.models -data class ThreadError(val messageID: Int) : ThreadItem() +data class ThreadError(val messageID: Long) : ThreadItem() diff --git a/app/src/main/kotlin/com/simplemobiletools/smsmessenger/models/ThreadSuccess.kt b/app/src/main/kotlin/com/simplemobiletools/smsmessenger/models/ThreadSuccess.kt index ec7a4d20..fa75eb53 100644 --- a/app/src/main/kotlin/com/simplemobiletools/smsmessenger/models/ThreadSuccess.kt +++ b/app/src/main/kotlin/com/simplemobiletools/smsmessenger/models/ThreadSuccess.kt @@ -1,4 +1,4 @@ package com.simplemobiletools.smsmessenger.models // show a check after the latest message, if it is a sent one and succeeded -data class ThreadSuccess(val messageID: Int) : ThreadItem() +data class ThreadSuccess(val messageID: Long) : ThreadItem()