From 431edfe2eeb92d0ae7a980a7974c395b49129ed7 Mon Sep 17 00:00:00 2001 From: Moez Bhatti Date: Tue, 26 Jun 2018 15:28:01 -0400 Subject: [PATCH] Add ScheduledMessage to realm schema --- .../moez/QKSMS/migration/QkRealmMigration.kt | 14 +++++- .../ScheduledMessageRepositoryImpl.kt | 47 +++++++++++++++++++ .../com/moez/QKSMS/model/ScheduledMessage.kt | 14 ++++++ .../repository/ScheduledMessageRepository.kt | 30 ++++++++++++ .../com/moez/QKSMS/injection/AppModule.kt | 7 ++- 5 files changed, 110 insertions(+), 2 deletions(-) create mode 100644 data/src/main/java/com/moez/QKSMS/repository/ScheduledMessageRepositoryImpl.kt create mode 100644 domain/src/main/java/com/moez/QKSMS/model/ScheduledMessage.kt create mode 100644 domain/src/main/java/com/moez/QKSMS/repository/ScheduledMessageRepository.kt diff --git a/data/src/main/java/com/moez/QKSMS/migration/QkRealmMigration.kt b/data/src/main/java/com/moez/QKSMS/migration/QkRealmMigration.kt index 40772045..232c7603 100644 --- a/data/src/main/java/com/moez/QKSMS/migration/QkRealmMigration.kt +++ b/data/src/main/java/com/moez/QKSMS/migration/QkRealmMigration.kt @@ -26,7 +26,7 @@ import io.realm.RealmMigration class QkRealmMigration : RealmMigration { companion object { - const val SCHEMA_VERSION: Long = 3 + const val SCHEMA_VERSION: Long = 4 } override fun migrate(realm: DynamicRealm, oldVersion: Long, newVersion: Long) { @@ -53,6 +53,18 @@ class QkRealmMigration : RealmMigration { version++ } + if (version == 3L) { + realm.schema.create("ScheduledMessage") + .addField("id", Long::class.java, FieldAttribute.PRIMARY_KEY, FieldAttribute.REQUIRED) + .addField("date", Long::class.java, FieldAttribute.REQUIRED) + .addRealmListField("recipients", String::class.java) + .addField("sendAsGroup", Boolean::class.java, FieldAttribute.REQUIRED) + .addField("body", String::class.java, FieldAttribute.REQUIRED) + .addRealmListField("attachments", String::class.java) + + version++ + } + if (version < newVersion) { throw IllegalStateException("Migration missing from v$oldVersion to v$newVersion") } diff --git a/data/src/main/java/com/moez/QKSMS/repository/ScheduledMessageRepositoryImpl.kt b/data/src/main/java/com/moez/QKSMS/repository/ScheduledMessageRepositoryImpl.kt new file mode 100644 index 00000000..7be155cd --- /dev/null +++ b/data/src/main/java/com/moez/QKSMS/repository/ScheduledMessageRepositoryImpl.kt @@ -0,0 +1,47 @@ +package com.moez.QKSMS.repository + +import com.moez.QKSMS.model.ScheduledMessage +import io.realm.Realm +import io.realm.RealmList +import io.realm.RealmResults + +class ScheduledMessageRepositoryImpl : ScheduledMessageRepository { + + override fun saveScheduledMessage(date: Long, recipients: RealmList, sendAsGroup: Boolean, body: String, + attachments: RealmList): Long { + + return Realm.getDefaultInstance().use { realm -> + val id = (realm.where(ScheduledMessage::class.java).max("id")?.toLong() ?: -1) + 1 + val message = ScheduledMessage(id, date, recipients, sendAsGroup, body, attachments) + + realm.executeTransaction { realm.insertOrUpdate(message) } + + id + } + } + + override fun getScheduledMessages(): RealmResults { + return Realm.getDefaultInstance() + .where(ScheduledMessage::class.java) + .sort("date") + .findAll() + } + + override fun getScheduledMessage(id: Long): ScheduledMessage? { + return Realm.getDefaultInstance() + .where(ScheduledMessage::class.java) + .equalTo("id", id) + .findFirst() + } + + override fun deleteScheduledMessage(id: Long) { + Realm.getDefaultInstance().use { realm -> + val message = realm.where(ScheduledMessage::class.java) + .equalTo("id", id) + .findFirst() + + realm.executeTransaction { message?.deleteFromRealm() } + } + } + +} \ No newline at end of file diff --git a/domain/src/main/java/com/moez/QKSMS/model/ScheduledMessage.kt b/domain/src/main/java/com/moez/QKSMS/model/ScheduledMessage.kt new file mode 100644 index 00000000..8d26fca9 --- /dev/null +++ b/domain/src/main/java/com/moez/QKSMS/model/ScheduledMessage.kt @@ -0,0 +1,14 @@ +package com.moez.QKSMS.model + +import io.realm.RealmList +import io.realm.RealmObject +import io.realm.annotations.PrimaryKey + +open class ScheduledMessage( + @PrimaryKey var id: Long = 0, + var date: Long = 0, + var recipients: RealmList = RealmList(), + var sendAsGroup: Boolean = true, + var body: String = "", + var attachments: RealmList = RealmList() +) : RealmObject() \ No newline at end of file diff --git a/domain/src/main/java/com/moez/QKSMS/repository/ScheduledMessageRepository.kt b/domain/src/main/java/com/moez/QKSMS/repository/ScheduledMessageRepository.kt new file mode 100644 index 00000000..73f747c5 --- /dev/null +++ b/domain/src/main/java/com/moez/QKSMS/repository/ScheduledMessageRepository.kt @@ -0,0 +1,30 @@ +package com.moez.QKSMS.repository + +import com.moez.QKSMS.model.ScheduledMessage +import io.realm.RealmList +import io.realm.RealmResults + +interface ScheduledMessageRepository { + + /** + * Saves a scheduled message and returns the id if successful + */ + fun saveScheduledMessage(date: Long, recipients: RealmList, sendAsGroup: Boolean, body: String, + attachments: RealmList): Long + + /** + * Returns all of the scheduled messages, sorted chronologically + */ + fun getScheduledMessages(): RealmResults + + /** + * Returns the scheduled message with the given [id] + */ + fun getScheduledMessage(id: Long): ScheduledMessage? + + /** + * Deletes the scheduled message with the given [id] + */ + fun deleteScheduledMessage(id: Long) + +} \ No newline at end of file diff --git a/presentation/src/main/java/com/moez/QKSMS/injection/AppModule.kt b/presentation/src/main/java/com/moez/QKSMS/injection/AppModule.kt index dcc2fa32..26022add 100644 --- a/presentation/src/main/java/com/moez/QKSMS/injection/AppModule.kt +++ b/presentation/src/main/java/com/moez/QKSMS/injection/AppModule.kt @@ -19,10 +19,10 @@ package com.moez.QKSMS.injection import android.app.Application -import androidx.lifecycle.ViewModelProvider import android.content.ContentResolver import android.content.Context import android.preference.PreferenceManager +import androidx.lifecycle.ViewModelProvider import com.f2prateek.rx.preferences2.RxSharedPreferences import com.moez.QKSMS.common.ViewModelFactory import com.moez.QKSMS.common.util.NotificationManagerImpl @@ -57,6 +57,8 @@ import com.moez.QKSMS.repository.ImageRepository import com.moez.QKSMS.repository.ImageRepostoryImpl import com.moez.QKSMS.repository.MessageRepository import com.moez.QKSMS.repository.MessageRepositoryImpl +import com.moez.QKSMS.repository.ScheduledMessageRepository +import com.moez.QKSMS.repository.ScheduledMessageRepositoryImpl import com.moez.QKSMS.repository.SyncRepository import com.moez.QKSMS.repository.SyncRepositoryImpl import dagger.Module @@ -139,6 +141,9 @@ class AppModule(private var application: Application) { @Provides fun provideMessageRepository(repository: MessageRepositoryImpl): MessageRepository = repository + @Provides + fun provideScheduledMessagesRepository(repository: ScheduledMessageRepositoryImpl): ScheduledMessageRepository = repository + @Provides fun provideSyncRepository(repository: SyncRepositoryImpl): SyncRepository = repository