diff --git a/navi-common/src/main/java/com/navi/common/model/vkyc/VkycStatus.kt b/navi-common/src/main/java/com/navi/common/model/vkyc/VkycStatus.kt index 1065aed16e..5d8133c637 100644 --- a/navi-common/src/main/java/com/navi/common/model/vkyc/VkycStatus.kt +++ b/navi-common/src/main/java/com/navi/common/model/vkyc/VkycStatus.kt @@ -11,11 +11,17 @@ import android.os.Parcelable import com.google.gson.annotations.SerializedName import com.navi.base.model.CtaData import com.navi.common.model.RequestConfig +import com.navi.naviwidgets.models.response.ImageFieldData +import com.navi.naviwidgets.models.response.TextFieldData import kotlinx.parcelize.Parcelize @Parcelize data class VkycStatus( @SerializedName("status") val status: String, + @SerializedName("agentName") val agentName: TextFieldData? = null, + @SerializedName("agentImage") val agentImage: ImageFieldData? = null, + @SerializedName("agentConnectedToast") val agentConnectedToast: TextFieldData? = null, + @SerializedName("agentConnectedToastTimeout") val agentConnectedToastTimeout: Long? = null, @SerializedName("nextCta") val nextCtaData: CtaData, @SerializedName("requestConfig") val requestConfig: RequestConfig, ) : Parcelable diff --git a/navi-vkyc/src/main/java/com/navi/vkyc/presentation/fragments/VKYCWaitingForExecutiveFragment.kt b/navi-vkyc/src/main/java/com/navi/vkyc/presentation/fragments/VKYCWaitingForExecutiveFragment.kt index 0be166f79c..dbd8d903ec 100644 --- a/navi-vkyc/src/main/java/com/navi/vkyc/presentation/fragments/VKYCWaitingForExecutiveFragment.kt +++ b/navi-vkyc/src/main/java/com/navi/vkyc/presentation/fragments/VKYCWaitingForExecutiveFragment.kt @@ -387,6 +387,7 @@ class VKYCWaitingForExecutiveFragment : BaseFragment(), NaviHeaderView.Interacti ) isNavigating = true stopVkycAgentPolling() + arguments?.putParcelable(VKYC_AGENT_STATUS, it) (requireActivity() as VKYCActivity).navigateToScreen( VkycScreens.VKYC_MEETING_ROOM.name, arguments @@ -496,6 +497,7 @@ class VKYCWaitingForExecutiveFragment : BaseFragment(), NaviHeaderView.Interacti companion object { const val TAG = "VKYCWaitingForExecutiveFragment" + const val VKYC_AGENT_STATUS = "VKYC_AGENT_STATUS" private const val DEFAULT_SLIDE_PERIOD_TIME = 3500L private const val FOUR_SECONDS = 4L private const val ONE_SECOND = 1L diff --git a/navi-vkyc/src/main/java/com/navi/vkyc/presentation/fragments/VKycFullScreenMeetingRoomFragment.kt b/navi-vkyc/src/main/java/com/navi/vkyc/presentation/fragments/VKycFullScreenMeetingRoomFragment.kt index 410b8d5277..46146bf246 100644 --- a/navi-vkyc/src/main/java/com/navi/vkyc/presentation/fragments/VKycFullScreenMeetingRoomFragment.kt +++ b/navi-vkyc/src/main/java/com/navi/vkyc/presentation/fragments/VKycFullScreenMeetingRoomFragment.kt @@ -8,8 +8,12 @@ package com.navi.vkyc.presentation.fragments import android.os.Bundle +import android.os.Handler +import android.os.Looper import android.view.LayoutInflater import android.view.View +import android.view.View.GONE +import android.view.View.VISIBLE import android.view.ViewGroup import android.widget.LinearLayout import androidx.core.view.isVisible @@ -22,14 +26,19 @@ import com.navi.common.firebaseremoteconfig.FirebaseRemoteConfigHelper import com.navi.common.firebaseremoteconfig.FirebaseRemoteConfigHelper.VKYC_SHOULD_SHOW_FLIP_CAMERA_BUTTON import com.navi.common.model.vkyc.VKYCBgConfig import com.navi.common.model.vkyc.VKYCScreenConfig +import com.navi.common.model.vkyc.VkycStatus import com.navi.common.ui.activity.BaseActivity import com.navi.common.ui.fragment.BaseFragment import com.navi.design.utils.dpToPxInInt import com.navi.design.utils.getNaviDrawable import com.navi.design.utils.parseColorSafe import com.navi.design.utils.spannedText +import com.navi.naviwidgets.extensions.setImageFieldData +import com.navi.naviwidgets.extensions.setTextFieldData +import com.navi.naviwidgets.extensions.setVisibilityState import com.navi.vkyc.databinding.VkycFullscreenMeetingRoomFragmentBinding import com.navi.vkyc.presentation.activity.VKYCActivity +import com.navi.vkyc.presentation.fragments.VKYCWaitingForExecutiveFragment.Companion.VKYC_AGENT_STATUS import com.navi.vkyc.presentation.view.NaviHeaderView import com.navi.vkyc.presentation.viewmodel.VKYCViewModel import com.navi.vkyc.presentation.viewmodel.VKycFullScreenViewModel @@ -50,6 +59,7 @@ class VKycFullScreenMeetingRoomFragment : BaseFragment(), NaviHeaderView.Interac private lateinit var vkycViewModel: VKYCViewModel private val vKycFullScreenViewModel by viewModels() + private var vkycAgentStatus: VkycStatus? = null private lateinit var binding: VkycFullscreenMeetingRoomFragmentBinding @@ -72,6 +82,7 @@ class VKycFullScreenMeetingRoomFragment : BaseFragment(), NaviHeaderView.Interac ) binding.vm = vKycFullScreenViewModel binding.lifecycleOwner = viewLifecycleOwner + this.vkycAgentStatus = arguments?.getParcelable(VKYC_AGENT_STATUS) initError(vkycViewModel, actionErrorV2Enabled = true) initUi() initObservers() @@ -80,6 +91,25 @@ class VKycFullScreenMeetingRoomFragment : BaseFragment(), NaviHeaderView.Interac private fun initUi() { binding.videoSurfaceView.keepScreenOn = true binding.ivSwitchCamera.isVisible = FirebaseRemoteConfigHelper.getBoolean(VKYC_SHOULD_SHOW_FLIP_CAMERA_BUTTON) + setVkycAgentImageAndName() + } + + private fun setVkycAgentImageAndName() { + this.vkycAgentStatus?.agentImage?.let { + binding.customerExecutiveImage.setVisibilityState(GONE) + binding.customerExecutiveView.setImageFieldData(it) + } + this.vkycAgentStatus?.agentConnectedToast?.let { + binding.agentConnectedToast.setTextFieldData(it) + binding.agentConnectedToast.setVisibilityState(VISIBLE) + } + Handler(Looper.getMainLooper()).postDelayed({ + binding.agentConnectedToast.setVisibilityState(GONE) + }, this.vkycAgentStatus?.agentConnectedToastTimeout ?: 2500) + this.vkycAgentStatus?.agentName?.let { + binding.naviExecutiveText.setVisibilityState(GONE) + binding.naviExecutiveName.setTextFieldData(it) + } } private fun initObservers() { diff --git a/navi-vkyc/src/main/res/layout/vkyc_fullscreen_meeting_room_fragment.xml b/navi-vkyc/src/main/res/layout/vkyc_fullscreen_meeting_room_fragment.xml index a54ee86615..129a42b3e4 100644 --- a/navi-vkyc/src/main/res/layout/vkyc_fullscreen_meeting_room_fragment.xml +++ b/navi-vkyc/src/main/res/layout/vkyc_fullscreen_meeting_room_fragment.xml @@ -42,16 +42,25 @@ app:layout_constraintStart_toStartOf="parent" app:layout_constraintTop_toBottomOf="@id/header_view" /> - + app:layout_constraintTop_toTopOf="@id/videoSurfaceView"> + + + app:layout_constraintBottom_toBottomOf="@id/customerExecutiveViewCard" + app:layout_constraintEnd_toEndOf="@id/customerExecutiveViewCard" + app:layout_constraintStart_toStartOf="@id/customerExecutiveViewCard" /> + + @@ -129,10 +158,13 @@ android:background="@drawable/transparent_green_border_with_radius" android:orientation="horizontal" android:visibility="@{vm.customerExecutiveSpeaking?View.VISIBLE:View.GONE, default=visible}" - app:layout_constraintBottom_toBottomOf="@id/customerExecutiveView" - app:layout_constraintLeft_toLeftOf="@id/customerExecutiveView" - app:layout_constraintRight_toRightOf="@id/customerExecutiveView" - app:layout_constraintTop_toTopOf="@id/customerExecutiveView" /> + app:layout_constraintBottom_toBottomOf="@id/customerExecutiveViewCard" + app:layout_constraintHorizontal_bias="0.0" + android:elevation="@dimen/layout_dp_8" + app:layout_constraintLeft_toLeftOf="@id/customerExecutiveViewCard" + app:layout_constraintRight_toRightOf="@id/customerExecutiveViewCard" + app:layout_constraintTop_toTopOf="@id/customerExecutiveViewCard" + app:layout_constraintVertical_bias="0.0" /> + android:elevation="@dimen/layout_dp_8" + app:constraint_referenced_ids="customerExecutiveViewCard,face_guide_top" /> + + diff --git a/navi-widgets/src/main/java/com/navi/naviwidgets/utils/NaviWidgetIconUtils.kt b/navi-widgets/src/main/java/com/navi/naviwidgets/utils/NaviWidgetIconUtils.kt index ac1b553629..db6abccfd5 100644 --- a/navi-widgets/src/main/java/com/navi/naviwidgets/utils/NaviWidgetIconUtils.kt +++ b/navi-widgets/src/main/java/com/navi/naviwidgets/utils/NaviWidgetIconUtils.kt @@ -663,6 +663,7 @@ object NaviWidgetIconUtils { private const val RIGHT_ARROW_WITH_YELLOW_CIRCLE_BG = "RIGHT_ARROW_WITH_YELLOW_CIRCLE_BG" private const val OUTLINED_INFO_ICON_BLACK_LARGE = "OUTLINED_INFO_ICON_BLACK_LARGE" private const val DOWNTIME_ICON_IMAGE = "DOWNTIME_ICON_IMAGE" + private const val GREEN_CHECK_MARK_24 = "GREEN_CHECK_MARK_24" fun updateIcon( imageDetail: ImageDetail, @@ -1359,6 +1360,7 @@ object NaviWidgetIconUtils { LOW_NETWORK_ICON -> R.drawable.ic_low_internet RIGHT_ARROW_WITH_YELLOW_CIRCLE_BG -> R.drawable.right_arrow_with_yellow_circle_bg DOWNTIME_ICON_IMAGE -> R.drawable.down_time_icon + GREEN_CHECK_MARK_24 -> R.drawable.ic_check_mark_24 else -> -1 } } diff --git a/navi-widgets/src/main/res/drawable/ic_check_mark_24.xml b/navi-widgets/src/main/res/drawable/ic_check_mark_24.xml new file mode 100644 index 0000000000..64e2d9561a --- /dev/null +++ b/navi-widgets/src/main/res/drawable/ic_check_mark_24.xml @@ -0,0 +1,47 @@ + + + + + + + + + + + + + + +