From 633f7cf5c0df6ba7975c648b571ec048b7c655a6 Mon Sep 17 00:00:00 2001 From: tibbi Date: Mon, 21 Dec 2020 18:02:07 +0100 Subject: [PATCH] create a db table for Messages too --- .../databases/MessagesDatabase.kt | 8 +++++++- .../smsmessenger/extensions/Context.kt | 3 +++ .../smsmessenger/helpers/Converters.kt | 16 ++++++++++++++++ .../smsmessenger/interfaces/MessagesDao.kt | 11 +++++++++++ .../smsmessenger/models/Message.kt | 19 +++++++++++++++++-- 5 files changed, 54 insertions(+), 3 deletions(-) create mode 100644 app/src/main/kotlin/com/simplemobiletools/smsmessenger/interfaces/MessagesDao.kt diff --git a/app/src/main/kotlin/com/simplemobiletools/smsmessenger/databases/MessagesDatabase.kt b/app/src/main/kotlin/com/simplemobiletools/smsmessenger/databases/MessagesDatabase.kt index cfbde698..c3064d34 100644 --- a/app/src/main/kotlin/com/simplemobiletools/smsmessenger/databases/MessagesDatabase.kt +++ b/app/src/main/kotlin/com/simplemobiletools/smsmessenger/databases/MessagesDatabase.kt @@ -11,11 +11,13 @@ import com.simplemobiletools.smsmessenger.helpers.Converters import com.simplemobiletools.smsmessenger.interfaces.AttachmentsDao import com.simplemobiletools.smsmessenger.interfaces.ConversationsDao import com.simplemobiletools.smsmessenger.interfaces.MessageAttachmentsDao +import com.simplemobiletools.smsmessenger.interfaces.MessagesDao import com.simplemobiletools.smsmessenger.models.Attachment import com.simplemobiletools.smsmessenger.models.Conversation +import com.simplemobiletools.smsmessenger.models.Message import com.simplemobiletools.smsmessenger.models.MessageAttachment -@Database(entities = [Conversation::class, Attachment::class, MessageAttachment::class], version = 2) +@Database(entities = [Conversation::class, Attachment::class, MessageAttachment::class, Message::class], version = 2) @TypeConverters(Converters::class) abstract class MessagesDatabase : RoomDatabase() { @@ -25,6 +27,8 @@ abstract class MessagesDatabase : RoomDatabase() { abstract fun MessageAttachmentsDao(): MessageAttachmentsDao + abstract fun MessagesDao(): MessagesDao + companion object { private var db: MessagesDatabase? = null @@ -44,6 +48,8 @@ abstract class MessagesDatabase : RoomDatabase() { private val MIGRATION_1_2 = object : Migration(1, 2) { override fun migrate(database: SupportSQLiteDatabase) { + database.execSQL("CREATE TABLE IF NOT EXISTS `messages` (`id` INTEGER PRIMARY KEY NOT NULL, `body` TEXT NOT NULL, `type` INTEGER NOT NULL, `participants` TEXT NOT NULL, `date` INTEGER NOT NULL, `read` INTEGER NOT NULL, `thread` INTEGER NOT NULL, `is_mms` INTEGER NOT NULL, `attachment` TEXT, `sender_name` TEXT NOT NULL, `sender_photo_uri` TEXT NOT NULL, `subscription_id` INTEGER NOT NULL)") + database.execSQL("CREATE TABLE IF NOT EXISTS `message_attachments` (`id` INTEGER PRIMARY KEY NOT NULL, `text` TEXT NOT NULL, `attachments` TEXT NOT NULL)") database.execSQL("CREATE TABLE IF NOT EXISTS `attachments` (`id` INTEGER PRIMARY KEY AUTOINCREMENT, `message_id` INTEGER NOT NULL, `uri_string` TEXT NOT NULL, `mimetype` TEXT NOT NULL, `width` INTEGER NOT NULL, `height` INTEGER NOT NULL, `filename` TEXT NOT NULL)") 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 b8627e35..142cd360 100644 --- a/app/src/main/kotlin/com/simplemobiletools/smsmessenger/extensions/Context.kt +++ b/app/src/main/kotlin/com/simplemobiletools/smsmessenger/extensions/Context.kt @@ -30,6 +30,7 @@ import com.simplemobiletools.smsmessenger.helpers.* import com.simplemobiletools.smsmessenger.interfaces.AttachmentsDao import com.simplemobiletools.smsmessenger.interfaces.ConversationsDao import com.simplemobiletools.smsmessenger.interfaces.MessageAttachmentsDao +import com.simplemobiletools.smsmessenger.interfaces.MessagesDao import com.simplemobiletools.smsmessenger.models.* import com.simplemobiletools.smsmessenger.receivers.DirectReplyReceiver import com.simplemobiletools.smsmessenger.receivers.MarkAsReadReceiver @@ -47,6 +48,8 @@ val Context.attachmentsDB: AttachmentsDao get() = getMessagessDB().AttachmentsDa val Context.messageAttachmentsDB: MessageAttachmentsDao get() = getMessagessDB().MessageAttachmentsDao() +val Context.messagesDB: MessagesDao get() = getMessagessDB().MessagesDao() + fun Context.getMessages(threadId: Int): ArrayList { val uri = Sms.CONTENT_URI val projection = arrayOf( diff --git a/app/src/main/kotlin/com/simplemobiletools/smsmessenger/helpers/Converters.kt b/app/src/main/kotlin/com/simplemobiletools/smsmessenger/helpers/Converters.kt index 5c168683..27c94855 100644 --- a/app/src/main/kotlin/com/simplemobiletools/smsmessenger/helpers/Converters.kt +++ b/app/src/main/kotlin/com/simplemobiletools/smsmessenger/helpers/Converters.kt @@ -3,15 +3,31 @@ package com.simplemobiletools.smsmessenger.helpers import androidx.room.TypeConverter import com.google.gson.Gson import com.google.gson.reflect.TypeToken +import com.simplemobiletools.commons.models.SimpleContact import com.simplemobiletools.smsmessenger.models.Attachment +import com.simplemobiletools.smsmessenger.models.MessageAttachment class Converters { private val gson = Gson() private val attachmentType = object : TypeToken>() {}.type + private val simpleContactType = object : TypeToken>() {}.type + private val messageAttachmentType = object : TypeToken() {}.type @TypeConverter fun jsonToAttachmentList(value: String) = gson.fromJson>(value, attachmentType) @TypeConverter fun attachmentListToJson(list: ArrayList) = gson.toJson(list) + + @TypeConverter + fun jsonToSimpleContactList(value: String) = gson.fromJson>(value, simpleContactType) + + @TypeConverter + fun simpleContactListToJson(list: ArrayList) = gson.toJson(list) + + @TypeConverter + fun jsonToMessageAttachment(value: String) = gson.fromJson(value, messageAttachmentType) + + @TypeConverter + fun messageAttachmentToJson(messageAttachment: MessageAttachment) = gson.toJson(messageAttachment) } diff --git a/app/src/main/kotlin/com/simplemobiletools/smsmessenger/interfaces/MessagesDao.kt b/app/src/main/kotlin/com/simplemobiletools/smsmessenger/interfaces/MessagesDao.kt new file mode 100644 index 00000000..cd8398ef --- /dev/null +++ b/app/src/main/kotlin/com/simplemobiletools/smsmessenger/interfaces/MessagesDao.kt @@ -0,0 +1,11 @@ +package com.simplemobiletools.smsmessenger.interfaces + +import androidx.room.Dao +import androidx.room.Query +import com.simplemobiletools.smsmessenger.models.Message + +@Dao +interface MessagesDao { + @Query("SELECT * FROM messages") + fun getAll(): List +} 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 a0c2631d..f21a3269 100644 --- a/app/src/main/kotlin/com/simplemobiletools/smsmessenger/models/Message.kt +++ b/app/src/main/kotlin/com/simplemobiletools/smsmessenger/models/Message.kt @@ -1,10 +1,25 @@ package com.simplemobiletools.smsmessenger.models import android.provider.Telephony +import androidx.room.ColumnInfo +import androidx.room.Entity +import androidx.room.PrimaryKey import com.simplemobiletools.commons.models.SimpleContact +@Entity(tableName = "messages") data class Message( - 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() { + @PrimaryKey val id: Long, + @ColumnInfo(name = "body") val body: String, + @ColumnInfo(name = "type") val type: Int, + @ColumnInfo(name = "participants") val participants: ArrayList, + @ColumnInfo(name = "date") val date: Int, + @ColumnInfo(name = "read") val read: Boolean, + @ColumnInfo(name = "thread") val thread: Int, + @ColumnInfo(name = "is_mms") val isMMS: Boolean, + @ColumnInfo(name = "attachment") val attachment: MessageAttachment?, + @ColumnInfo(name = "sender_name") var senderName: String, + @ColumnInfo(name = "sender_photo_uri") val senderPhotoUri: String, + @ColumnInfo(name = "subscription_id") val subscriptionId: Int) : ThreadItem() { + fun isReceivedMessage() = type == Telephony.Sms.MESSAGE_TYPE_INBOX }