|
|
|
|
@@ -120,6 +120,7 @@ class NaviChatFragment : ChatBaseFragment(), WidgetCallback, MessageOperation, T
|
|
|
|
|
private var shouldHideLoader: Boolean? = false
|
|
|
|
|
private var shouldShowChatResolutionWidget: Boolean = false
|
|
|
|
|
private var delayForTypingCuesForBot = 1000L
|
|
|
|
|
private var delayForTypingCuesForGenAi = 300000L
|
|
|
|
|
private var delayForShowingCsat = 2000L
|
|
|
|
|
private var conversationId: String? = null
|
|
|
|
|
private var inactivityTimer: Runnable? = null
|
|
|
|
|
@@ -340,6 +341,10 @@ class NaviChatFragment : ChatBaseFragment(), WidgetCallback, MessageOperation, T
|
|
|
|
|
delayForTypingCuesForBot = botDelayInMs
|
|
|
|
|
Timber.d("Updated delayForTypingCuesForBot to $botDelayInMs")
|
|
|
|
|
}
|
|
|
|
|
it.genAiTypingCuesDelayInMs?.let { genAiDelayInMs ->
|
|
|
|
|
delayForTypingCuesForGenAi = genAiDelayInMs
|
|
|
|
|
Timber.d("Updated genAiTypingCuesDelayInMs to $genAiDelayInMs")
|
|
|
|
|
}
|
|
|
|
|
it.csatAppearanceDelayInMs?.let { csatDelayInMs ->
|
|
|
|
|
delayForShowingCsat = csatDelayInMs
|
|
|
|
|
}
|
|
|
|
|
@@ -965,7 +970,7 @@ class NaviChatFragment : ChatBaseFragment(), WidgetCallback, MessageOperation, T
|
|
|
|
|
private fun isValidTimeStamp(updatedAt: Timestamp?): Boolean {
|
|
|
|
|
updatedAt?.let {
|
|
|
|
|
val milliseconds = updatedAt.seconds * 1000 + updatedAt.nanoseconds / 1000000
|
|
|
|
|
if (System.currentTimeMillis() - milliseconds <= DELAY_TO_HIDE_TYPING) {
|
|
|
|
|
if (System.currentTimeMillis() - milliseconds <= delayForTypingCuesForGenAi) {
|
|
|
|
|
return true
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
@@ -994,7 +999,7 @@ class NaviChatFragment : ChatBaseFragment(), WidgetCallback, MessageOperation, T
|
|
|
|
|
scrollChatToLatestMessageReceived()
|
|
|
|
|
}
|
|
|
|
|
},
|
|
|
|
|
DELAY_TO_HIDE_TYPING
|
|
|
|
|
delayForTypingCuesForGenAi
|
|
|
|
|
)
|
|
|
|
|
} else {
|
|
|
|
|
typingStatusHandler.removeCallbacksAndMessages(null)
|
|
|
|
|
@@ -1103,14 +1108,14 @@ class NaviChatFragment : ChatBaseFragment(), WidgetCallback, MessageOperation, T
|
|
|
|
|
chatRVAdapter.list.isNotEmpty() &&
|
|
|
|
|
chatRVAdapter.list[0] is NaviChatTypingStatusWidget
|
|
|
|
|
) {
|
|
|
|
|
insertItemAtIndexAndSetTimeStamp(1, widgetModel)
|
|
|
|
|
insertItemAtIndexAndSetTimeStamp(1, widgetModel, true)
|
|
|
|
|
} else {
|
|
|
|
|
insertItemAtIndexAndSetTimeStamp(0, widgetModel)
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
private fun insertItemAtIndexAndSetTimeStamp(index: Int, widgetModel: NaviChatWidget) {
|
|
|
|
|
private fun insertItemAtIndexAndSetTimeStamp(index: Int, widgetModel: NaviChatWidget, scrollWithoutDelay: Boolean? = false) {
|
|
|
|
|
if (naviChatViewModel.latestMessageTimeStamp != null) {
|
|
|
|
|
if (!naviChatViewModel.getDividerShown() && !isDateSameWithCurrentDay(
|
|
|
|
|
naviChatViewModel.latestMessageTimeStamp
|
|
|
|
|
@@ -1121,7 +1126,7 @@ class NaviChatFragment : ChatBaseFragment(), WidgetCallback, MessageOperation, T
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
chatRVAdapter.insertNewItemAtIndex(index, widgetModel)
|
|
|
|
|
scrollChatToLatestMessageReceived()
|
|
|
|
|
scrollChatToLatestMessageReceived(scrollWithoutDelay)
|
|
|
|
|
naviChatViewModel.setLatestMessageLatestTimeStamp(widgetModel.rt_created_at)
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
@@ -1546,12 +1551,16 @@ class NaviChatFragment : ChatBaseFragment(), WidgetCallback, MessageOperation, T
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
fun scrollChatToLatestMessageReceived() {
|
|
|
|
|
fun scrollChatToLatestMessageReceived(scrollWithoutDelay: Boolean? = false) {
|
|
|
|
|
if (view != null) {
|
|
|
|
|
viewLifecycleOwner.lifecycleScope.launch(Dispatchers.IO) {
|
|
|
|
|
delay(DELAY_TO_SCROLL)
|
|
|
|
|
viewLifecycleOwner.lifecycleScope.launch(Dispatchers.Main) {
|
|
|
|
|
binding.rvChat.smoothScrollToPosition(0)
|
|
|
|
|
if (scrollWithoutDelay == true) {
|
|
|
|
|
binding.rvChat.smoothScrollToPosition(0)
|
|
|
|
|
} else {
|
|
|
|
|
viewLifecycleOwner.lifecycleScope.launch(Dispatchers.IO) {
|
|
|
|
|
delay(DELAY_TO_SCROLL)
|
|
|
|
|
viewLifecycleOwner.lifecycleScope.launch(Dispatchers.Main) {
|
|
|
|
|
binding.rvChat.smoothScrollToPosition(0)
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
}
|
|
|
|
|
@@ -1627,7 +1636,6 @@ class NaviChatFragment : ChatBaseFragment(), WidgetCallback, MessageOperation, T
|
|
|
|
|
companion object {
|
|
|
|
|
const val TAG = "NaviChatFragment"
|
|
|
|
|
private const val DELAY_TO_SCROLL = 200L
|
|
|
|
|
private const val DELAY_TO_HIDE_TYPING = 10000L
|
|
|
|
|
private const val MARGIN_TO_RIGHT = 16
|
|
|
|
|
private const val ANIMATION_DURATION = 400L
|
|
|
|
|
}
|
|
|
|
|
|