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)
}
}