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 4c4ef9ed..3bf1645e 100644 --- a/app/src/main/kotlin/com/simplemobiletools/smsmessenger/activities/MainActivity.kt +++ b/app/src/main/kotlin/com/simplemobiletools/smsmessenger/activities/MainActivity.kt @@ -246,7 +246,7 @@ class MainActivity : SimpleActivity() { if (config.appRunCount == 1) { conversations.map { it.threadId }.forEach { threadId -> - val messages = getMessages(threadId) + val messages = getMessages(threadId, false) messages.chunked(30).forEach { currentMessages -> messagesDB.insertMessages(*currentMessages.toTypedArray()) } 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 82ac97e7..cf9db08b 100644 --- a/app/src/main/kotlin/com/simplemobiletools/smsmessenger/activities/ThreadActivity.kt +++ b/app/src/main/kotlin/com/simplemobiletools/smsmessenger/activities/ThreadActivity.kt @@ -237,7 +237,7 @@ class ThreadActivity : SimpleActivity() { privateContacts = MyContactsContentProvider.getSimpleContacts(this, privateCursor) val cachedMessagesCode = messages.clone().hashCode() - messages = getMessages(threadId) + messages = getMessages(threadId, true) val hasParticipantWithoutName = participants.any { it.phoneNumbers.map { it.normalizedNumber }.contains(it.name) @@ -959,7 +959,7 @@ class ThreadActivity : SimpleActivity() { } val lastMaxId = messages.maxByOrNull { it.id }?.id ?: 0L - messages = getMessages(threadId) + messages = getMessages(threadId, true) messages.filter { !it.isReceivedMessage() && it.id > lastMaxId }.forEach { latestMessage -> // subscriptionIds seem to be not filled out at sending with multiple SIM cards, so fill it manually 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 3c4f12bd..93154d87 100644 --- a/app/src/main/kotlin/com/simplemobiletools/smsmessenger/extensions/Context.kt +++ b/app/src/main/kotlin/com/simplemobiletools/smsmessenger/extensions/Context.kt @@ -8,6 +8,7 @@ import android.app.PendingIntent import android.content.* import android.database.Cursor import android.graphics.Bitmap +import android.graphics.BitmapFactory import android.media.AudioAttributes import android.media.AudioManager import android.media.RingtoneManager @@ -53,7 +54,7 @@ val Context.messageAttachmentsDB: MessageAttachmentsDao get() = getMessagessDB() val Context.messagesDB: MessagesDao get() = getMessagessDB().MessagesDao() -fun Context.getMessages(threadId: Long): ArrayList { +fun Context.getMessages(threadId: Long, getImageResolutions: Boolean): ArrayList { val uri = Sms.CONTENT_URI val projection = arrayOf( Sms._ID, @@ -107,7 +108,7 @@ fun Context.getMessages(threadId: Long): ArrayList { messages.add(message) } - messages.addAll(getMMS(threadId, sortOrder)) + messages.addAll(getMMS(threadId, getImageResolutions, sortOrder)) messages = messages.filter { it.participants.isNotEmpty() } .sortedWith(compareBy { it.date }.thenBy { it.id }).toMutableList() as ArrayList @@ -115,7 +116,7 @@ fun Context.getMessages(threadId: Long): ArrayList { } // as soon as a message contains multiple recipients it counts as an MMS instead of SMS -fun Context.getMMS(threadId: Long? = null, sortOrder: String? = null): ArrayList { +fun Context.getMMS(threadId: Long? = null, getImageResolutions: Boolean = false, sortOrder: String? = null): ArrayList { val uri = Mms.CONTENT_URI val projection = arrayOf( Mms._ID, @@ -159,7 +160,7 @@ fun Context.getMMS(threadId: Long? = null, sortOrder: String? = null): ArrayList } val isMMS = true - val attachment = getMmsAttachment(mmsId) + val attachment = getMmsAttachment(mmsId, getImageResolutions) val body = attachment.text var senderName = "" var senderPhotoUri = "" @@ -270,7 +271,7 @@ fun Context.getConversationIds(): List { // based on https://stackoverflow.com/a/6446831/1967672 @SuppressLint("NewApi") -fun Context.getMmsAttachment(id: Long): MessageAttachment { +fun Context.getMmsAttachment(id: Long, getImageResolutions: Boolean): MessageAttachment { val uri = if (isQPlus()) { Mms.Part.CONTENT_URI } else { @@ -293,7 +294,22 @@ fun Context.getMmsAttachment(id: Long): MessageAttachment { if (mimetype == "text/plain") { messageAttachment.text = cursor.getStringValue(Mms.Part.TEXT) ?: "" } else if (mimetype.startsWith("image/") || mimetype.startsWith("video/")) { - val attachment = Attachment(partId, id, Uri.withAppendedPath(uri, partId.toString()).toString(), mimetype, 0, 0, "") + val fileUri = Uri.withAppendedPath(uri, partId.toString()) + var width = 0 + var height = 0 + + if (getImageResolutions) { + try { + val options = BitmapFactory.Options() + options.inJustDecodeBounds = true + BitmapFactory.decodeStream(contentResolver.openInputStream(fileUri), null, options) + width = options.outWidth + height = options.outHeight + } catch (e: Exception) { + } + } + + val attachment = Attachment(partId, id, fileUri.toString(), mimetype, width, height, "") messageAttachment.attachments.add(attachment) } else if (mimetype != "application/smil") { val attachment = Attachment(partId, id, Uri.withAppendedPath(uri, partId.toString()).toString(), mimetype, 0, 0, attachmentName) @@ -317,7 +333,7 @@ fun Context.getLatestMMS(): Message? { fun Context.getThreadSnippet(threadId: Long): String { val sortOrder = "${Mms.DATE} DESC LIMIT 1" - val latestMms = getMMS(threadId, sortOrder).firstOrNull() + val latestMms = getMMS(threadId, false, sortOrder).firstOrNull() var snippet = latestMms?.body ?: "" val uri = Sms.CONTENT_URI