From d4fc32bcb524c45ae788893e258c6a7b3dd2bfb9 Mon Sep 17 00:00:00 2001 From: adarshs Date: Tue, 5 Apr 2022 15:36:25 +0530 Subject: [PATCH] Latest message scroll issue --- .../chat/ui/fragments/NaviChatFragment.kt | 28 +++++++++++++------ .../res/layout/fragment_common_navi_chat.xml | 4 +-- 2 files changed, 21 insertions(+), 11 deletions(-) diff --git a/navi-chat/src/main/java/com/navi/chat/ui/fragments/NaviChatFragment.kt b/navi-chat/src/main/java/com/navi/chat/ui/fragments/NaviChatFragment.kt index 85f94c7a1d..b40c0a94f8 100644 --- a/navi-chat/src/main/java/com/navi/chat/ui/fragments/NaviChatFragment.kt +++ b/navi-chat/src/main/java/com/navi/chat/ui/fragments/NaviChatFragment.kt @@ -9,6 +9,7 @@ package com.navi.chat.ui.fragments import android.os.Bundle import android.view.LayoutInflater import android.view.View +import android.view.View.VISIBLE import android.view.ViewGroup import androidx.databinding.DataBindingUtil import androidx.lifecycle.Lifecycle @@ -54,6 +55,7 @@ import com.navi.naviwidgets.utils.NAVI_CHAT_MESSAGE_WITH_ACTION_ITEM_SELECTED import com.navi.naviwidgets.viewholder.NaviChatViewHolderFactoryImpl import dagger.hilt.android.EntryPointAccessors import kotlinx.coroutines.Dispatchers +import kotlinx.coroutines.delay import kotlinx.coroutines.flow.collectLatest import kotlinx.coroutines.launch import timber.log.Timber @@ -172,9 +174,7 @@ class NaviChatFragment : ChatBaseFragment(), WidgetCallback, MessageOperation, T chatPagingRVAdapter.registerAdapterDataObserver(object : RecyclerView.AdapterDataObserver() { override fun onItemRangeInserted(positionStart: Int, itemCount: Int) { - viewLifecycleOwner.lifecycleScope.launch(Dispatchers.Main) { - scrollChatToLatestMessageReceived() - } + scrollChatToLatestMessageReceived() } override fun onItemRangeChanged(positionStart: Int, itemCount: Int) { @@ -247,6 +247,7 @@ class NaviChatFragment : ChatBaseFragment(), WidgetCallback, MessageOperation, T writePath = naviChatInitiateResponse.writePath.orEmpty() ) ) + binding.rvChat.visibility = VISIBLE } naviChatSharedViewModel.ratingMetaData.observeNonNull(viewLifecycleOwner) { metadata -> @@ -292,13 +293,21 @@ class NaviChatFragment : ChatBaseFragment(), WidgetCallback, MessageOperation, T @ExperimentalPagingApi private fun scrollChatToLatestMessageReceived() { if (naviChatViewModel.getIsScrollReachedEnd().not() || - naviChatViewModel.getFirstCompletelyVisibleMessagePosition() in 0..1 + naviChatViewModel.getFirstCompletelyVisibleMessagePosition() == 0 ) { - linearLayoutManager.smoothScrollToPosition( - binding.rvChat, - null, - 0 - ) + viewLifecycleOwner.lifecycleScope.launch(Dispatchers.Main) { + linearLayoutManager.smoothScrollToPosition( + binding.rvChat, + null, + 0 + ) + viewLifecycleOwner.lifecycleScope.launch(Dispatchers.IO) { + delay(DELAY_TO_SCROLL) + viewLifecycleOwner.lifecycleScope.launch(Dispatchers.Main) { + binding.rvChat.smoothScrollToPosition(0) + } + } + } } } @@ -366,5 +375,6 @@ class NaviChatFragment : ChatBaseFragment(), WidgetCallback, MessageOperation, T companion object { const val TAG = "NaviChatFragment" + private const val DELAY_TO_SCROLL = 100L } } \ No newline at end of file diff --git a/navi-chat/src/main/res/layout/fragment_common_navi_chat.xml b/navi-chat/src/main/res/layout/fragment_common_navi_chat.xml index efad158d80..2326185538 100644 --- a/navi-chat/src/main/res/layout/fragment_common_navi_chat.xml +++ b/navi-chat/src/main/res/layout/fragment_common_navi_chat.xml @@ -1,5 +1,4 @@ - -