Fix bad bubble tints for chats with wallpapers.

This commit is contained in:
Greyson Parrelli
2026-04-08 22:04:17 -04:00
parent c7c108bd77
commit 453e5bede7
3 changed files with 21 additions and 10 deletions

View File

@@ -13,9 +13,12 @@ import org.signal.core.models.UriSerializer
import org.signal.core.models.media.Media
import org.thoughtcrime.securesms.badges.models.Badge
import org.thoughtcrime.securesms.conversation.ConversationIntents.ConversationScreenType
import org.thoughtcrime.securesms.conversation.colors.ChatColors
import org.thoughtcrime.securesms.mms.SlideFactory
import org.thoughtcrime.securesms.recipients.Recipient.Companion.resolved
import org.thoughtcrime.securesms.recipients.RecipientId
import org.thoughtcrime.securesms.stickers.StickerLocator
import org.thoughtcrime.securesms.wallpaper.ChatWallpaper
@Serializable
@Parcelize
@@ -40,6 +43,14 @@ data class ConversationArgs(
@IgnoredOnParcel
val draftMediaType: SlideFactory.MediaType? = SlideFactory.MediaType.from(draftContentType)
@IgnoredOnParcel
val wallpaper: ChatWallpaper?
get() = resolved(recipientId).wallpaper
@IgnoredOnParcel
val chatColors: ChatColors
get() = resolved(recipientId).chatColors
fun canInitializeFromDatabase(): Boolean {
return draftText == null && (draftMedia == null || ConversationIntents.isBubbleIntentUri(draftMedia) || ConversationIntents.isNotificationIntentUri(draftMedia)) && draftMediaType == null
}

View File

@@ -480,7 +480,8 @@ class ConversationFragment :
repository = ConversationRepository(localContext = requireContext(), isInBubble = args.conversationScreenType == ConversationScreenType.BUBBLE),
recipientRepository = conversationRecipientRepository,
messageRequestRepository = messageRequestRepository,
scheduledMessagesRepository = ScheduledMessagesRepository()
scheduledMessagesRepository = ScheduledMessagesRepository(),
initialChatColors = args.chatColors
)
}
@@ -686,6 +687,8 @@ class ConversationFragment :
incognito = args.isIncognito
)
conversationToolbarOnScrollHelper.attach(binding.conversationItemRecycler)
presentWallpaper(args.wallpaper)
presentChatColors(args.chatColors)
presentConversationTitle(viewModel.recipientSnapshot)
presentGroupConversationSubtitle(createGroupSubtitleString(viewModel.titleViewParticipantsSnapshot))
presentActionBarMenu()
@@ -1680,11 +1683,6 @@ class ConversationFragment :
presentChatColors(recipient.chatColors)
invalidateOptionsMenu()
updateMessageRequestAcceptedState(!viewModel.hasMessageRequestState)
recyclerViewColorizer.setChatColors(recipient.chatColors)
if (adapter.onHasWallpaperChanged(hasWallpaper = recipient.wallpaper != null)) {
conversationItemDecorations.hasWallpaper = recipient.wallpaper != null
}
}
@MainThread
@@ -2151,7 +2149,7 @@ class ConversationFragment :
lifecycleOwner = viewLifecycleOwner,
requestManager = Glide.with(this),
clickListener = ConversationItemClickListener(),
hasWallpaper = viewModel.wallpaperSnapshot != null,
hasWallpaper = args.wallpaper != null,
colorizer = colorizer,
startExpirationTimeout = viewModel::startExpirationTimeout,
chatColorsDataProvider = viewModel::chatColorsSnapshot,
@@ -2168,7 +2166,7 @@ class ConversationFragment :
adapter.setPagingController(viewModel.pagingController)
recyclerViewColorizer = RecyclerViewColorizer(binding.conversationItemRecycler)
viewModel.recipientSnapshot?.chatColors?.let { recyclerViewColorizer.setChatColors(it) }
recyclerViewColorizer.setChatColors(args.chatColors)
binding.conversationItemRecycler.adapter = ConcatAdapter(typingIndicatorAdapter, adapter)
multiselectItemDecoration = MultiselectItemDecoration(
@@ -2205,7 +2203,7 @@ class ConversationFragment :
threadHeaderMarginDecoration.toolbarMargin = statusBarInset + resources.getDimensionPixelSize(R.dimen.signal_m3_toolbar_height) + 16.dp
binding.conversationItemRecycler.addItemDecoration(threadHeaderMarginDecoration)
conversationItemDecorations = ConversationItemDecorations(hasWallpaper = viewModel.wallpaperSnapshot != null)
conversationItemDecorations = ConversationItemDecorations(hasWallpaper = args.wallpaper != null)
binding.conversationItemRecycler.addItemDecoration(conversationItemDecorations, 0)
}

View File

@@ -59,6 +59,7 @@ import org.thoughtcrime.securesms.banner.banners.UnauthorizedBanner
import org.thoughtcrime.securesms.contactshare.Contact
import org.thoughtcrime.securesms.conversation.ConversationMessage
import org.thoughtcrime.securesms.conversation.ScheduledMessagesRepository
import org.thoughtcrime.securesms.conversation.colors.ChatColors
import org.thoughtcrime.securesms.conversation.mutiselect.MultiselectPart
import org.thoughtcrime.securesms.conversation.plaintext.PlaintextExportRepository
import org.thoughtcrime.securesms.conversation.v2.data.ConversationElementKey
@@ -111,6 +112,7 @@ import kotlin.time.Duration
class ConversationViewModel(
val threadId: Long,
requestedStartingPosition: Int,
initialChatColors: ChatColors,
private val repository: ConversationRepository,
recipientRepository: ConversationRecipientRepository,
messageRequestRepository: MessageRequestRepository,
@@ -158,7 +160,7 @@ class ConversationViewModel(
.observeOn(AndroidSchedulers.mainThread())
private val chatBounds: BehaviorSubject<Rect> = BehaviorSubject.create()
private val chatColors: RxStore<ChatColorsDrawable.ChatColorsData> = RxStore(ChatColorsDrawable.ChatColorsData(null, null))
private val chatColors: RxStore<ChatColorsDrawable.ChatColorsData> = RxStore(ChatColorsDrawable.ChatColorsData(initialChatColors, null))
val chatColorsSnapshot: ChatColorsDrawable.ChatColorsData get() = chatColors.state
@Volatile