@@ -17,14 +17,17 @@ import app.k9mail.feature.launcher.FeatureLauncherTarget
1717import app.k9mail.legacy.message.controller.MessageReference
1818import com.fsck.k9.contacts.ContactPictureLoader
1919import com.fsck.k9.ui.helper.RelativeDateTimeFormatter
20+ import com.fsck.k9.ui.messagelist.MessageListFeatureFlags.UseComposeForMessageListItems
2021import com.fsck.k9.ui.messagelist.item.BannerInlineListInAppNotificationViewHolder
22+ import com.fsck.k9.ui.messagelist.item.ComposableMessageViewHolder
2123import com.fsck.k9.ui.messagelist.item.FooterViewHolder
2224import com.fsck.k9.ui.messagelist.item.MessageListViewHolder
2325import com.fsck.k9.ui.messagelist.item.MessageViewHolder
2426import com.fsck.k9.ui.messagelist.item.MessageViewHolderColors
2527import net.thunderbird.core.featureflag.FeatureFlagKey
2628import net.thunderbird.core.featureflag.FeatureFlagProvider
2729import net.thunderbird.core.featureflag.FeatureFlagResult
30+ import net.thunderbird.core.ui.theme.api.FeatureThemeProvider
2831import net.thunderbird.feature.notification.api.ui.action.NotificationAction
2932
3033private const val FOOTER_ID = 1L
@@ -42,6 +45,7 @@ class MessageListAdapter internal constructor(
4245 private val listItemListener : MessageListItemActionListener ,
4346 private val appearance : MessageListAppearance ,
4447 private val relativeDateTimeFormatter : RelativeDateTimeFormatter ,
48+ private val themeProvider : FeatureThemeProvider ,
4549 private val featureFlagProvider : FeatureFlagProvider ,
4650) : RecyclerView.Adapter<MessageListViewHolder>() {
4751
@@ -227,7 +231,15 @@ class MessageListAdapter internal constructor(
227231
228232 override fun onCreateViewHolder (parent : ViewGroup , viewType : Int ): MessageListViewHolder {
229233 return when (viewType) {
230- TYPE_MESSAGE -> createMessageViewHolder(parent)
234+ TYPE_MESSAGE -> {
235+ val result = featureFlagProvider.provide(UseComposeForMessageListItems )
236+ if (result.isEnabled()) {
237+ createComposableMessageViewHolder(parent)
238+ } else {
239+ createMessageViewHolder(parent)
240+ }
241+ }
242+
231243 TYPE_FOOTER -> FooterViewHolder .create(layoutInflater, parent, footerClickListener)
232244 TYPE_IN_APP_NOTIFICATION_BANNER_INLINE_LIST if isInAppNotificationEnabled ->
233245 BannerInlineListInAppNotificationViewHolder (
@@ -259,7 +271,7 @@ class MessageListAdapter internal constructor(
259271 }
260272 }
261273
262- private fun createMessageViewHolder (parent : ViewGroup ? ): MessageViewHolder =
274+ private fun createMessageViewHolder (parent : ViewGroup ): MessageViewHolder =
263275 MessageViewHolder .create(
264276 layoutInflater = layoutInflater,
265277 parent = parent,
@@ -275,19 +287,40 @@ class MessageListAdapter internal constructor(
275287 starClickListener = starClickListener,
276288 )
277289
290+ private fun createComposableMessageViewHolder (parent : ViewGroup ): MessageListViewHolder =
291+ ComposableMessageViewHolder .create(
292+ context = parent.context,
293+ themeProvider = themeProvider,
294+ onClick = { listItemListener.onMessageClicked(it) },
295+ onLongClick = { listItemListener.onToggleMessageSelection(it) },
296+ onFavouriteClick = { listItemListener.onToggleMessageFlag(it) },
297+ onAvatarClick = { listItemListener.onToggleMessageSelection(it) },
298+ appearance = appearance,
299+ )
300+
278301 override fun onBindViewHolder (holder : MessageListViewHolder , position : Int ) {
279302 when (val viewType = getItemViewType(position)) {
280303 TYPE_IN_APP_NOTIFICATION_BANNER_INLINE_LIST if isInAppNotificationEnabled ->
281304 (holder as BannerInlineListInAppNotificationViewHolder ).bind()
282305
283306 TYPE_MESSAGE -> {
284307 val messageListItem = getItem(position)
285- val messageViewHolder = holder as MessageViewHolder
286- messageViewHolder.bind(
287- messageListItem = messageListItem,
288- isActive = isActiveMessage(messageListItem),
289- isSelected = isSelected(messageListItem),
290- )
308+ val result = featureFlagProvider.provide(UseComposeForMessageListItems )
309+ if (result.isEnabled()) {
310+ val messageViewHolder = holder as ComposableMessageViewHolder
311+ messageViewHolder.bind(
312+ item = messageListItem,
313+ isActive = isActiveMessage(messageListItem),
314+ isSelected = isSelected(messageListItem),
315+ )
316+ } else {
317+ val messageViewHolder = holder as MessageViewHolder
318+ messageViewHolder.bind(
319+ messageListItem = messageListItem,
320+ isActive = isActiveMessage(messageListItem),
321+ isSelected = isSelected(messageListItem),
322+ )
323+ }
291324 }
292325
293326 TYPE_FOOTER -> {
@@ -368,8 +401,13 @@ class MessageListAdapter internal constructor(
368401 }
369402
370403 private fun getItemFromView (view : View ): MessageListItem ? {
371- val messageViewHolder = view.tag as MessageViewHolder
372- return getItemById(messageViewHolder.uniqueId)
404+ if (featureFlagProvider.provide(UseComposeForMessageListItems ).isEnabled()) {
405+ val messageViewHolder = view.tag as ComposableMessageViewHolder
406+ return getItemById(messageViewHolder.uniqueId)
407+ } else {
408+ val messageViewHolder = view.tag as MessageViewHolder
409+ return getItemById(messageViewHolder.uniqueId)
410+ }
373411 }
374412}
375413
0 commit comments