From ae46efaba5cfd41779420f814e511ae5631d46fc Mon Sep 17 00:00:00 2001 From: Moez Bhatti Date: Mon, 2 Apr 2018 21:51:31 -0400 Subject: [PATCH] Don't show empty conversations in conversation list --- .../java/mapper/CursorToConversationImpl.kt | 10 ++++++---- .../java/repository/MessageRepositoryImpl.kt | 17 +++++++++++------ domain/src/main/java/model/Conversation.kt | 1 + 3 files changed, 18 insertions(+), 10 deletions(-) diff --git a/data/src/main/java/mapper/CursorToConversationImpl.kt b/data/src/main/java/mapper/CursorToConversationImpl.kt index fa2a425f..59968714 100644 --- a/data/src/main/java/mapper/CursorToConversationImpl.kt +++ b/data/src/main/java/mapper/CursorToConversationImpl.kt @@ -21,7 +21,6 @@ package mapper import android.content.Context import android.database.Cursor import android.net.Uri -import android.provider.Telephony import android.provider.Telephony.Threads import model.Conversation import model.Recipient @@ -35,14 +34,16 @@ class CursorToConversationImpl @Inject constructor(private val context: Context) Threads._ID, Threads.DATE, Threads.RECIPIENT_IDS, + Threads.MESSAGE_COUNT, Threads.READ, Threads.SNIPPET) const val ID = 0 const val DATE = 1 const val RECIPIENT_IDS = 2 - const val READ = 3 - const val SNIPPET = 4 + const val MESSAGE_COUNT = 3 + const val READ = 4 + const val SNIPPET = 5 } override fun map(from: Cursor): Conversation { @@ -54,6 +55,7 @@ class CursorToConversationImpl @Inject constructor(private val context: Context) .filter { it.isNotBlank() } .map { recipientId -> recipientId.toLong() } .map { recipientId -> Recipient().apply { id = recipientId } }) + count = from.getInt(MESSAGE_COUNT) read = from.getInt(READ) == 1 snippet = from.getString(SNIPPET) ?: "" } @@ -61,7 +63,7 @@ class CursorToConversationImpl @Inject constructor(private val context: Context) override fun getConversationsCursor(lastSync: Long): Cursor { return context.contentResolver.query(URI, PROJECTION, - "date > $lastSync AND ${Telephony.Threads.MESSAGE_COUNT} > 0", null, + "date > $lastSync", null, "date desc") } diff --git a/data/src/main/java/repository/MessageRepositoryImpl.kt b/data/src/main/java/repository/MessageRepositoryImpl.kt index 10fccad4..5aff2dea 100644 --- a/data/src/main/java/repository/MessageRepositoryImpl.kt +++ b/data/src/main/java/repository/MessageRepositoryImpl.kt @@ -68,6 +68,7 @@ class MessageRepositoryImpl @Inject constructor( return realm .where(Conversation::class.java) .notEqualTo("id", 0L) + .greaterThan("count", 0) .equalTo("archived", archived) .equalTo("blocked", false) .isNotEmpty("recipients") @@ -83,6 +84,7 @@ class MessageRepositoryImpl @Inject constructor( val realm = Realm.getDefaultInstance() return realm.copyFromRealm(realm.where(Conversation::class.java) .notEqualTo("id", 0L) + .greaterThan("count", 0) .equalTo("archived", false) .equalTo("blocked", false) .isNotEmpty("recipients") @@ -246,17 +248,20 @@ class MessageRepositoryImpl @Inject constructor( .equalTo("id", threadId) .findFirst() ?: return - val message = realm + val messages = realm .where(Message::class.java) .equalTo("threadId", threadId) .sort("date", Sort.DESCENDING) - .findAll().firstOrNull() ?: return + .findAll() + + val message = messages.firstOrNull() realm.executeTransaction { - conversation.date = message.date - conversation.snippet = message.getSummary() - conversation.read = message.read - conversation.me = message.isMe() + conversation.count = messages.size + conversation.date = message?.date ?: 0 + conversation.snippet = message?.getSummary() ?: "" + conversation.read = message?.read ?: true + conversation.me = message?.isMe() ?: false } } } diff --git a/domain/src/main/java/model/Conversation.kt b/domain/src/main/java/model/Conversation.kt index e5157001..13c36480 100644 --- a/domain/src/main/java/model/Conversation.kt +++ b/domain/src/main/java/model/Conversation.kt @@ -31,6 +31,7 @@ open class Conversation : RealmObject() { @Index var archived: Boolean = false @Index var blocked: Boolean = false var recipients: RealmList = RealmList() + var count: Int = 0 var date: Long = 0 var snippet: String = "" var read: Boolean = true