Add InternalSettings option for ConversationItem V2.

This commit is contained in:
Alex Hart
2023-07-10 13:51:07 -03:00
committed by Clark Chen
parent 584c90521a
commit 7e909f2bee
6 changed files with 102 additions and 14 deletions

View File

@@ -273,8 +273,13 @@ public class ConversationFragment extends LoggingFragment implements Multiselect
FrameLayout parent = new FrameLayout(context);
parent.setLayoutParams(new FrameLayout.LayoutParams(FrameLayout.LayoutParams.MATCH_PARENT, FrameLayout.LayoutParams.WRAP_CONTENT));
CachedInflater.from(context).cacheUntilLimit(R.layout.v2_conversation_item_text_only_incoming, parent, 25);
CachedInflater.from(context).cacheUntilLimit(R.layout.v2_conversation_item_text_only_outgoing, parent, 25);
if (SignalStore.internalValues().useConversationFragmentV2() && SignalStore.internalValues().useConversationItemV2()) {
CachedInflater.from(context).cacheUntilLimit(R.layout.v2_conversation_item_text_only_incoming, parent, 25);
CachedInflater.from(context).cacheUntilLimit(R.layout.v2_conversation_item_text_only_outgoing, parent, 25);
} else {
CachedInflater.from(context).cacheUntilLimit(R.layout.conversation_item_received_text_only, parent, 25);
CachedInflater.from(context).cacheUntilLimit(R.layout.conversation_item_sent_text_only, parent, 25);
}
CachedInflater.from(context).cacheUntilLimit(R.layout.conversation_item_received_multimedia, parent, 10);
CachedInflater.from(context).cacheUntilLimit(R.layout.conversation_item_sent_multimedia, parent, 10);
CachedInflater.from(context).cacheUntilLimit(R.layout.conversation_item_update, parent, 5);

View File

@@ -41,6 +41,7 @@ import org.thoughtcrime.securesms.databinding.V2ConversationItemTextOnlyIncoming
import org.thoughtcrime.securesms.databinding.V2ConversationItemTextOnlyOutgoingBinding
import org.thoughtcrime.securesms.giph.mp4.GiphyMp4PlaybackPolicyEnforcer
import org.thoughtcrime.securesms.groups.v2.GroupDescriptionUtil
import org.thoughtcrime.securesms.keyvalue.SignalStore
import org.thoughtcrime.securesms.messagerequests.MessageRequestState
import org.thoughtcrime.securesms.mms.GlideRequests
import org.thoughtcrime.securesms.phonenumbers.PhoneNumberFormatter
@@ -91,25 +92,37 @@ class ConversationAdapterV2(
ConversationUpdateViewHolder(view)
}
registerFactory(OutgoingTextOnly::class.java) { parent ->
val view = CachedInflater.from(parent.context).inflate<View>(R.layout.v2_conversation_item_text_only_outgoing, parent, false)
V2TextOnlyViewHolder(V2ConversationItemTextOnlyOutgoingBinding.bind(view).bridge(), this)
}
registerFactory(OutgoingMedia::class.java) { parent ->
val view = CachedInflater.from(parent.context).inflate<View>(R.layout.conversation_item_sent_multimedia, parent, false)
OutgoingMediaViewHolder(view)
}
registerFactory(IncomingTextOnly::class.java) { parent ->
val view = CachedInflater.from(parent.context).inflate<View>(R.layout.v2_conversation_item_text_only_incoming, parent, false)
V2TextOnlyViewHolder(V2ConversationItemTextOnlyIncomingBinding.bind(view).bridge(), this)
}
registerFactory(IncomingMedia::class.java) { parent ->
val view = CachedInflater.from(parent.context).inflate<View>(R.layout.conversation_item_received_multimedia, parent, false)
IncomingMediaViewHolder(view)
}
if (SignalStore.internalValues().useConversationItemV2()) {
registerFactory(OutgoingTextOnly::class.java) { parent ->
val view = CachedInflater.from(parent.context).inflate<View>(R.layout.v2_conversation_item_text_only_outgoing, parent, false)
V2TextOnlyViewHolder(V2ConversationItemTextOnlyOutgoingBinding.bind(view).bridge(), this)
}
registerFactory(IncomingTextOnly::class.java) { parent ->
val view = CachedInflater.from(parent.context).inflate<View>(R.layout.v2_conversation_item_text_only_incoming, parent, false)
V2TextOnlyViewHolder(V2ConversationItemTextOnlyIncomingBinding.bind(view).bridge(), this)
}
} else {
registerFactory(OutgoingTextOnly::class.java) { parent ->
val view = CachedInflater.from(parent.context).inflate<View>(R.layout.conversation_item_sent_text_only, parent, false)
OutgoingTextOnlyViewHolder(view)
}
registerFactory(IncomingTextOnly::class.java) { parent ->
val view = CachedInflater.from(parent.context).inflate<View>(R.layout.conversation_item_received_text_only, parent, false)
IncomingTextOnlyViewHolder(view)
}
}
}
override fun onAttachedToRecyclerView(recyclerView: RecyclerView) {
@@ -272,6 +285,29 @@ class ConversationAdapterV2(
}
}
private inner class OutgoingTextOnlyViewHolder(itemView: View) : ConversationViewHolder<OutgoingTextOnly>(itemView) {
override fun bind(model: OutgoingTextOnly) {
bindable.setEventListener(clickListener)
bindable.bind(
lifecycleOwner,
model.conversationMessage,
previousMessage,
nextMessage,
glideRequests,
Locale.getDefault(),
_selected,
model.conversationMessage.threadRecipient,
searchQuery,
false,
hasWallpaper && displayMode.displayWallpaper(),
true, // isMessageRequestAccepted,
model.conversationMessage == inlineContent,
colorizer,
displayMode
)
}
}
private inner class OutgoingMediaViewHolder(itemView: View) : ConversationViewHolder<OutgoingMedia>(itemView) {
override fun bind(model: OutgoingMedia) {
bindable.setEventListener(clickListener)
@@ -295,6 +331,29 @@ class ConversationAdapterV2(
}
}
private inner class IncomingTextOnlyViewHolder(itemView: View) : ConversationViewHolder<IncomingTextOnly>(itemView) {
override fun bind(model: IncomingTextOnly) {
bindable.setEventListener(clickListener)
bindable.bind(
lifecycleOwner,
model.conversationMessage,
previousMessage,
nextMessage,
glideRequests,
Locale.getDefault(),
_selected,
model.conversationMessage.threadRecipient,
searchQuery,
false,
hasWallpaper && displayMode.displayWallpaper(),
true, // isMessageRequestAccepted,
model.conversationMessage == inlineContent,
colorizer,
displayMode
)
}
}
private inner class IncomingMediaViewHolder(itemView: View) : ConversationViewHolder<IncomingMedia>(itemView) {
override fun bind(model: IncomingMedia) {
bindable.setEventListener(clickListener)