Skip to content

Commit a3bcdf2

Browse files
[SES-5370] - Wrong reactions used for notifications (#2077)
Co-authored-by: ThomasSession <thomas.r@getsession.org>
1 parent acfe2b3 commit a3bcdf2

4 files changed

Lines changed: 35 additions & 21 deletions

File tree

app/src/main/java/org/thoughtcrime/securesms/database/ReactionDatabase.kt

Lines changed: 16 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@ import kotlinx.coroutines.flow.MutableSharedFlow
99
import net.zetetic.database.sqlcipher.SQLiteDatabase
1010
import org.json.JSONArray
1111
import org.json.JSONException
12+
import org.session.libsignal.utilities.AccountId
1213
import org.session.libsession.utilities.Address
1314
import org.session.libsignal.utilities.SaneJSONObject
1415
import org.thoughtcrime.securesms.database.helpers.SQLCipherOpenHelper
@@ -376,18 +377,29 @@ class ReactionDatabase(context: Context, helper: Provider<SQLCipherOpenHelper>)
376377
}
377378
}
378379

379-
fun getReactionsForThread(threadId: Long, minSendTimeMsExclusive: Long): List<ReactionRecord> {
380+
fun getIncomingReactionsForMyMessages(
381+
threadId: Long,
382+
minSendTimeMsExclusive: Long,
383+
myId: AccountId
384+
): List<ReactionRecord> {
380385
//language=roomsql
381386
return readableDatabase.query("""
382387
SELECT * FROM $TABLE_NAME
383388
WHERE ($MESSAGE_ID, $IS_MMS) IN (
384-
SELECT m.${SmsDatabase.ID}, 0 FROM ${SmsDatabase.TABLE_NAME} m WHERE m.${SmsDatabase.THREAD_ID} = ?1
389+
SELECT m.${SmsDatabase.ID}, 0 FROM ${SmsDatabase.TABLE_NAME} m
390+
WHERE m.${SmsDatabase.THREAD_ID} = ?1
391+
AND m.${SmsDatabase.IS_OUTGOING}
392+
385393
UNION ALL
386-
SELECT m.${MmsSmsColumns.ID}, 1 FROM ${MmsDatabase.TABLE_NAME} m WHERE m.${MmsSmsColumns.THREAD_ID} = ?1
394+
395+
SELECT m.${MmsSmsColumns.ID}, 1 FROM ${MmsDatabase.TABLE_NAME} m
396+
WHERE m.${MmsSmsColumns.THREAD_ID} = ?1
397+
AND m.${MmsSmsColumns.IS_OUTGOING}
387398
)
399+
AND $AUTHOR_ID != ?3
388400
AND $DATE_SENT > ?2
389401
ORDER BY $DATE_SENT, $SORT_ID
390-
""", arrayOf(threadId, minSendTimeMsExclusive)).use { cursor ->
402+
""", arrayOf<Any>(threadId, minSendTimeMsExclusive, myId.hexString)).use { cursor ->
391403
buildList(cursor.count) {
392404
while (cursor.moveToNext()) {
393405
add(readReaction(cursor))

app/src/main/java/org/thoughtcrime/securesms/notifications/FullNotificationHandler.kt

Lines changed: 7 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@ import org.session.libsession.utilities.StringSubstitutionConstants
1717
import org.session.libsession.utilities.recipients.Recipient
1818
import org.session.libsession.utilities.recipients.effectiveNotifyType
1919
import org.session.libsignal.utilities.Log
20+
import org.thoughtcrime.securesms.auth.LoginStateRepository
2021
import org.thoughtcrime.securesms.conversation.v2.messages.MessageFormatter
2122
import org.thoughtcrime.securesms.conversation.v2.utilities.MentionUtilities
2223
import org.thoughtcrime.securesms.database.MmsDatabase
@@ -55,6 +56,7 @@ class FullNotificationHandler @Inject constructor(
5556
@ApplicationContext context: Context,
5657
threadDb: ThreadDatabase,
5758
private val mmsSmsDatabase: MmsSmsDatabase,
59+
private val loginStateRepository: LoginStateRepository,
5860
private val mmsDatabase: MmsDatabase,
5961
private val smsDatabase: SmsDatabase,
6062
recipientRepository: RecipientRepository,
@@ -228,7 +230,11 @@ class FullNotificationHandler @Inject constructor(
228230
// No reactions for communities are notified...
229231
emptyList()
230232
} else {
231-
reactionDatabase.getReactionsForThread(threadId, threadLastSeen)
233+
reactionDatabase.getIncomingReactionsForMyMessages(
234+
threadId = threadId,
235+
minSendTimeMsExclusive = threadLastSeen,
236+
myId = loginStateRepository.requireLocalAccountId()
237+
)
232238
}
233239

234240
Log.d(TAG, "threadId=$threadId: found ${newMessages.size} message(s), ${newReactions.size} reaction(s) since lastSeen=$threadLastSeen")

app/src/main/java/org/thoughtcrime/securesms/notifications/NameOnlyNotificationHandler.kt

Lines changed: 5 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -10,6 +10,7 @@ import kotlinx.coroutines.flow.merge
1010
import network.loki.messenger.R
1111
import org.session.libsession.utilities.Address
1212
import org.session.libsignal.utilities.Log
13+
import org.thoughtcrime.securesms.auth.LoginStateRepository
1314
import org.thoughtcrime.securesms.conversation.v2.utilities.MentionUtilities
1415
import org.thoughtcrime.securesms.database.MmsDatabase
1516
import org.thoughtcrime.securesms.database.MmsSmsDatabase
@@ -46,6 +47,7 @@ class NameOnlyNotificationHandler @Inject constructor(
4647
private val mmsDatabase: MmsDatabase,
4748
private val smsDatabase: SmsDatabase,
4849
private val reactionDb: ReactionDatabase,
50+
private val loginStateRepository: LoginStateRepository,
4951
recipientRepository: RecipientRepository,
5052
currentActivityObserver: CurrentActivityObserver,
5153
avatarUtils: AvatarUtils,
@@ -139,12 +141,13 @@ class NameOnlyNotificationHandler @Inject constructor(
139141
// Only notify reaction when notify type is ALL
140142
if (threadNotifyType != NotifyType.ALL) return
141143

142-
val reactions = reactionDb.getReactionsForThread(
144+
val reactions = reactionDb.getIncomingReactionsForMyMessages(
143145
threadId = message.threadId,
144146
minSendTimeMsExclusive = max(
145147
lastSeen,
146148
lastNotifiedMessageTimestamp.getOrDefault(message.threadId, 0L)
147-
)
149+
),
150+
myId = loginStateRepository.requireLocalAccountId(),
148151
)
149152

150153
if (reactions.isEmpty()) {

app/src/main/java/org/thoughtcrime/securesms/notifications/NoNameOrContentNotificationHandler.kt

Lines changed: 7 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -9,22 +9,17 @@ import android.content.Intent
99
import android.content.pm.PackageManager
1010
import android.os.Bundle
1111
import androidx.collection.MutableLongLongMap
12-
import androidx.collection.arraySetOf
1312
import androidx.core.app.ActivityCompat
1413
import androidx.core.app.NotificationCompat
1514
import androidx.core.app.NotificationManagerCompat
16-
import androidx.core.content.ContextCompat
1715
import dagger.hilt.android.qualifiers.ApplicationContext
18-
import org.session.libsignal.utilities.Log
1916
import kotlinx.coroutines.flow.FlowCollector
2017
import kotlinx.coroutines.flow.merge
2118
import network.loki.messenger.R
2219
import org.session.libsession.utilities.Address
23-
import org.session.libsession.utilities.Address.Companion.toAddress
24-
import org.session.libsession.utilities.recipients.Recipient
25-
import org.session.libsession.utilities.recipients.effectiveNotifyType
20+
import org.session.libsignal.utilities.Log
21+
import org.thoughtcrime.securesms.auth.LoginStateRepository
2622
import org.thoughtcrime.securesms.conversation.v2.ConversationActivityV2
27-
import org.thoughtcrime.securesms.conversation.v2.utilities.MentionUtilities
2823
import org.thoughtcrime.securesms.conversation.v2.utilities.MentionUtilities.mentionsMe
2924
import org.thoughtcrime.securesms.database.MmsDatabase
3025
import org.thoughtcrime.securesms.database.MmsSmsDatabase
@@ -34,17 +29,13 @@ import org.thoughtcrime.securesms.database.RecipientRepository
3429
import org.thoughtcrime.securesms.database.SmsDatabase
3530
import org.thoughtcrime.securesms.database.ThreadDatabase
3631
import org.thoughtcrime.securesms.database.ThreadId
37-
import org.thoughtcrime.securesms.database.getAddressAndLastSeen
38-
import org.thoughtcrime.securesms.database.getAllLastSeen
3932
import org.thoughtcrime.securesms.database.getLastSeen
4033
import org.thoughtcrime.securesms.database.model.MessageChanges
4134
import org.thoughtcrime.securesms.database.model.MessageId
42-
import org.thoughtcrime.securesms.database.model.MessageRecord
4335
import org.thoughtcrime.securesms.database.model.NotifyType
4436
import org.thoughtcrime.securesms.database.model.ReactionRecord
4537
import org.thoughtcrime.securesms.database.model.ThreadChanges
4638
import org.thoughtcrime.securesms.home.HomeActivity
47-
import org.thoughtcrime.securesms.notifications.ThreadBasedNotificationHandler.Companion.currentlyShowingConversation
4839
import org.thoughtcrime.securesms.notifications.ThreadBasedNotificationHandler.Companion.getChannelIdFor
4940
import org.thoughtcrime.securesms.preferences.PreferenceStorage
5041
import org.thoughtcrime.securesms.util.AppVisibilityManager
@@ -75,6 +66,7 @@ class NoNameOrContentNotificationHandler @Inject constructor(
7566
private val notificationManager: NotificationManagerCompat,
7667
private val prefs: PreferenceStorage,
7768
private val appVisibilityManager: AppVisibilityManager,
69+
private val loginStateRepository: LoginStateRepository,
7870
): BaseNotificationHandler(
7971
currentActivityObserver = currentActivityObserver,
8072
threadDb = threadDb,
@@ -182,9 +174,10 @@ class NoNameOrContentNotificationHandler @Inject constructor(
182174

183175
val threadLastNotified = lastNotifiedByThreadId.getOrDefault(message.threadId, 0L)
184176

185-
val newReactions = reactionDatabase.getReactionsForThread(
186-
message.threadId,
187-
max(threadLastSeen, threadLastNotified)
177+
val newReactions = reactionDatabase.getIncomingReactionsForMyMessages(
178+
threadId = message.threadId,
179+
minSendTimeMsExclusive = max(threadLastSeen, threadLastNotified),
180+
myId = loginStateRepository.requireLocalAccountId()
188181
)
189182

190183
if (newReactions.isEmpty()) {

0 commit comments

Comments
 (0)