Avoid message failed notification when bubble thread is visible.

This commit is contained in:
Sagar
2025-04-16 19:08:57 +05:30
committed by Cody Henthorne
parent 16b4b3b6b7
commit e3a402394f
5 changed files with 29 additions and 3 deletions

View File

@@ -677,6 +677,8 @@ class ConversationFragment :
if (!args.conversationScreenType.isInBubble) {
AppDependencies.messageNotifier.setVisibleThread(ConversationId.forConversation(args.threadId))
} else {
AppDependencies.messageNotifier.setVisibleBubbleThread(ConversationId.forConversation(args.threadId))
}
viewModel.updateIdentityRecordsInBackground()
@@ -707,6 +709,8 @@ class ConversationFragment :
if (!args.conversationScreenType.isInBubble) {
AppDependencies.messageNotifier.clearVisibleThread()
} else {
AppDependencies.messageNotifier.clearVisibleBubbleThread()
}
if (activity?.isFinishing == true) {

View File

@@ -18,6 +18,8 @@ public interface MessageNotifier {
void setVisibleThread(@Nullable ConversationId conversationId);
@NonNull Optional<ConversationId> getVisibleThread();
void clearVisibleThread();
void setVisibleBubbleThread(@Nullable ConversationId conversationId);
void clearVisibleBubbleThread();
void setLastDesktopActivityTimestamp(long timestamp);
void notifyMessageDeliveryFailed(@NonNull Context context, @NonNull Recipient recipient, @NonNull ConversationId conversationId);
void notifyStoryDeliveryFailed(@NonNull Context context, @NonNull Recipient recipient, @NonNull ConversationId conversationId);

View File

@@ -52,6 +52,16 @@ public class OptimizedMessageNotifier implements MessageNotifier {
getNotifier().clearVisibleThread();
}
@Override
public void setVisibleBubbleThread(@Nullable ConversationId conversationId) {
getNotifier().setVisibleBubbleThread(conversationId);
}
@Override
public void clearVisibleBubbleThread() {
getNotifier().clearVisibleBubbleThread();
}
@Override
public void setLastDesktopActivityTimestamp(long timestamp) {
getNotifier().setLastDesktopActivityTimestamp(timestamp);

View File

@@ -47,6 +47,8 @@ import kotlin.math.max
class DefaultMessageNotifier(context: Application) : MessageNotifier {
@Volatile private var visibleThread: ConversationId? = null
@Volatile private var visibleBubbleThread: ConversationId? = null
@Volatile private var lastDesktopActivityTimestamp: Long = -1
@Volatile private var lastAudibleNotification: Long = -1
@@ -81,12 +83,20 @@ class DefaultMessageNotifier(context: Application) : MessageNotifier {
setVisibleThread(null)
}
override fun setVisibleBubbleThread(conversationId: ConversationId?) {
visibleBubbleThread = conversationId
}
override fun clearVisibleBubbleThread() {
setVisibleBubbleThread(null)
}
override fun setLastDesktopActivityTimestamp(timestamp: Long) {
lastDesktopActivityTimestamp = timestamp
}
override fun notifyMessageDeliveryFailed(context: Context, recipient: Recipient, conversationId: ConversationId) {
NotificationFactory.notifyMessageDeliveryFailed(context, recipient, conversationId, visibleThread)
NotificationFactory.notifyMessageDeliveryFailed(context, recipient, conversationId, visibleThread, visibleBubbleThread)
}
override fun notifyStoryDeliveryFailed(context: Context, recipient: Recipient, conversationId: ConversationId) {

View File

@@ -342,8 +342,8 @@ object NotificationFactory {
ringtone.play()
}
fun notifyMessageDeliveryFailed(context: Context, recipient: Recipient, thread: ConversationId, visibleThread: ConversationId?) {
if (thread == visibleThread) {
fun notifyMessageDeliveryFailed(context: Context, recipient: Recipient, thread: ConversationId, visibleThread: ConversationId?, visibleBubbleThread: ConversationId?) {
if (thread == visibleThread || thread == visibleBubbleThread) {
notifyInThread(context, recipient, 0)
return
}