From b955678e904fbad634ee4b30f3be0d391b576edf Mon Sep 17 00:00:00 2001 From: tibbi Date: Mon, 21 Dec 2020 16:40:48 +0100 Subject: [PATCH] creating a database table for MessageAttachments too --- .../smsmessenger/databases/MessagesDatabase.kt | 11 ++++++++++- .../smsmessenger/extensions/Context.kt | 3 +++ .../smsmessenger/helpers/Converters.kt | 17 +++++++++++++++++ .../interfaces/MessageAttachmentsDao.kt | 11 +++++++++++ .../smsmessenger/models/MessageAttachment.kt | 10 +++++++++- 5 files changed, 50 insertions(+), 2 deletions(-) create mode 100644 app/src/main/kotlin/com/simplemobiletools/smsmessenger/helpers/Converters.kt create mode 100644 app/src/main/kotlin/com/simplemobiletools/smsmessenger/interfaces/MessageAttachmentsDao.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 774bc8a4..cfbde698 100644 --- a/app/src/main/kotlin/com/simplemobiletools/smsmessenger/databases/MessagesDatabase.kt +++ b/app/src/main/kotlin/com/simplemobiletools/smsmessenger/databases/MessagesDatabase.kt @@ -4,20 +4,27 @@ import android.content.Context import androidx.room.Database import androidx.room.Room import androidx.room.RoomDatabase +import androidx.room.TypeConverters import androidx.room.migration.Migration import androidx.sqlite.db.SupportSQLiteDatabase +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.models.Attachment import com.simplemobiletools.smsmessenger.models.Conversation +import com.simplemobiletools.smsmessenger.models.MessageAttachment -@Database(entities = [Conversation::class, Attachment::class], version = 2) +@Database(entities = [Conversation::class, Attachment::class, MessageAttachment::class], version = 2) +@TypeConverters(Converters::class) abstract class MessagesDatabase : RoomDatabase() { abstract fun ConversationsDao(): ConversationsDao abstract fun AttachmentsDao(): AttachmentsDao + abstract fun MessageAttachmentsDao(): MessageAttachmentsDao + companion object { private var db: MessagesDatabase? = null @@ -37,6 +44,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 `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)") database.execSQL("CREATE UNIQUE INDEX `index_attachments_message_id` ON `attachments` (`message_id`)") } 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 83b7104b..b8627e35 100644 --- a/app/src/main/kotlin/com/simplemobiletools/smsmessenger/extensions/Context.kt +++ b/app/src/main/kotlin/com/simplemobiletools/smsmessenger/extensions/Context.kt @@ -29,6 +29,7 @@ import com.simplemobiletools.smsmessenger.databases.MessagesDatabase 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.models.* import com.simplemobiletools.smsmessenger.receivers.DirectReplyReceiver import com.simplemobiletools.smsmessenger.receivers.MarkAsReadReceiver @@ -44,6 +45,8 @@ val Context.conversationsDB: ConversationsDao get() = getMessagessDB().Conversat val Context.attachmentsDB: AttachmentsDao get() = getMessagessDB().AttachmentsDao() +val Context.messageAttachmentsDB: MessageAttachmentsDao get() = getMessagessDB().MessageAttachmentsDao() + 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 new file mode 100644 index 00000000..5c168683 --- /dev/null +++ b/app/src/main/kotlin/com/simplemobiletools/smsmessenger/helpers/Converters.kt @@ -0,0 +1,17 @@ +package com.simplemobiletools.smsmessenger.helpers + +import androidx.room.TypeConverter +import com.google.gson.Gson +import com.google.gson.reflect.TypeToken +import com.simplemobiletools.smsmessenger.models.Attachment + +class Converters { + private val gson = Gson() + private val attachmentType = object : TypeToken>() {}.type + + @TypeConverter + fun jsonToAttachmentList(value: String) = gson.fromJson>(value, attachmentType) + + @TypeConverter + fun attachmentListToJson(list: ArrayList) = gson.toJson(list) +} diff --git a/app/src/main/kotlin/com/simplemobiletools/smsmessenger/interfaces/MessageAttachmentsDao.kt b/app/src/main/kotlin/com/simplemobiletools/smsmessenger/interfaces/MessageAttachmentsDao.kt new file mode 100644 index 00000000..8517f80d --- /dev/null +++ b/app/src/main/kotlin/com/simplemobiletools/smsmessenger/interfaces/MessageAttachmentsDao.kt @@ -0,0 +1,11 @@ +package com.simplemobiletools.smsmessenger.interfaces + +import androidx.room.Dao +import androidx.room.Query +import com.simplemobiletools.smsmessenger.models.MessageAttachment + +@Dao +interface MessageAttachmentsDao { + @Query("SELECT * FROM message_attachments") + fun getAll(): List +} 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 51fd8ee2..a95ea775 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,11 @@ package com.simplemobiletools.smsmessenger.models -data class MessageAttachment(val id: Long, var text: String, var attachments: ArrayList) +import androidx.room.ColumnInfo +import androidx.room.Entity +import androidx.room.PrimaryKey + +@Entity(tableName = "message_attachments") +data class MessageAttachment( + @PrimaryKey val id: Long, + @ColumnInfo(name = "text") var text: String, + @ColumnInfo(name = "attachments") var attachments: ArrayList)