Coverage Summary for Class: ModalWindowInAppViewHolder (cloud.mindbox.mobile_sdk.inapp.presentation.view)

Class Method, % Branch, % Line, % Instruction, %
ModalWindowInAppViewHolder 0% (0/7) 0% (0/8) 0% (0/49) 0% (0/239)
ModalWindowInAppViewHolder$show$backAction$1 0% (0/1) 0% (0/3) 0% (0/18)
Total 0% (0/8) 0% (0/8) 0% (0/52) 0% (0/257)


 package cloud.mindbox.mobile_sdk.inapp.presentation.view
 
 import android.view.LayoutInflater
 import android.view.View
 import android.view.ViewGroup
 import android.widget.FrameLayout
 import androidx.core.view.isVisible
 import cloud.mindbox.mobile_sdk.R
 import cloud.mindbox.mobile_sdk.inapp.domain.models.Element
 import cloud.mindbox.mobile_sdk.inapp.domain.models.InAppType
 import cloud.mindbox.mobile_sdk.inapp.domain.models.InAppTypeWrapper
 import cloud.mindbox.mobile_sdk.inapp.domain.models.Layer
 import cloud.mindbox.mobile_sdk.inapp.presentation.InAppCallback
 import cloud.mindbox.mobile_sdk.inapp.presentation.MindboxView
 import cloud.mindbox.mobile_sdk.logger.mindboxLogI
 import cloud.mindbox.mobile_sdk.removeChildById
 
 internal class ModalWindowInAppViewHolder(
     wrapper: InAppTypeWrapper<InAppType.ModalWindow>,
     controller: InAppViewHolder.InAppController,
     inAppCallback: InAppCallback,
 ) : AbstractInAppViewHolder<InAppType.ModalWindow>(wrapper, controller, inAppCallback) {
 
     private var currentBackground: ViewGroup? = null
 
     override fun bind() {
         wrapper.inAppType.elements.forEach { element ->
             when (element) {
                 is Element.CloseButton -> {
                     val inAppCrossView = InAppCrossView(
                         currentDialog.context,
                         element
                     ).apply {
                         setOnClickListener {
                             inAppCallback.onInAppDismissed(wrapper.inAppType.inAppId)
                             mindboxLogI("In-app dismissed by close click")
                             inAppController.close()
                         }
                     }
                     inAppLayout.addView(inAppCrossView)
                     inAppCrossView.prepareViewForModalWindow(inAppLayout)
                 }
             }
         }
         currentBackground?.apply {
             setOnClickListener {
                 inAppCallback.onInAppDismissed(wrapper.inAppType.inAppId)
                 mindboxLogI("In-app dismissed by background click")
                 inAppController.close()
             }
 
             isVisible = true
         }
     }
 
     override fun addUrlSource(layer: Layer.ImageLayer, inAppCallback: InAppCallback) {
         super.addUrlSource(layer, inAppCallback)
         when (layer.source) {
             is Layer.ImageLayer.Source.UrlSource -> {
                 InAppImageView(currentDialog.context).also { inAppImageView ->
                     inAppImageView.visibility = View.INVISIBLE
                     inAppLayout.addView(inAppImageView)
                     inAppImageView.prepareViewForModalWindow(inAppLayout)
                     preparedImages[inAppImageView] = false
                     getImageFromCache(layer.source.url, inAppImageView)
                 }
             }
         }
     }
 
     override fun show(currentRoot: MindboxView) {
         super.show(currentRoot)
         mindboxLogI("Try to show in-app with id ${wrapper.inAppType.inAppId}")
         wrapper.inAppType.layers.forEach { layer ->
             when (layer) {
                 is Layer.ImageLayer -> {
                     addUrlSource(layer, inAppCallback)
                 }
                 else -> {}
             }
         }
         mindboxLogI("Show ${wrapper.inAppType.inAppId} on ${this.hashCode()}")
         currentDialog.requestFocus()
         val backAction = {
             inAppCallback.onInAppDismissed(wrapper.inAppType.inAppId)
             mindboxLogI("In-app dismissed by back press")
             inAppController.close()
         }
         bindBackAction(currentRoot, backAction)
     }
 
     override fun initView(currentRoot: ViewGroup) {
         super.initView(currentRoot)
         currentDialog.removeChildById(R.id.inapp_background_layout)
         currentBackground = LayoutInflater.from(currentRoot.context)
             .inflate(R.layout.mindbox_blur_layout, currentRoot, false) as FrameLayout
         currentDialog.addView(currentBackground, 0)
     }
 }