All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.propellerads.sdk.bannerAd.ui.qr.QRBannerDialog.kt Maven / Gradle / Ivy

package com.propellerads.sdk.bannerAd.ui.qr

import android.os.Bundle
import android.view.LayoutInflater
import android.view.View
import androidx.lifecycle.ViewModelProvider
import com.propellerads.sdk.bannerAd.ui.base.BaseBannerDialog
import com.propellerads.sdk.bannerAd.ui.base.IBannerBuilder
import com.propellerads.sdk.bannerAd.ui.base.IBannerConfig
import com.propellerads.sdk.databinding.PropellerBannerQrBinding
import com.propellerads.sdk.repository.BannerAppearance
import kotlinx.coroutines.*
import kotlinx.coroutines.flow.Flow
import kotlinx.coroutines.flow.collect
import java.util.*

internal class QRBannerDialog
private constructor() : BaseBannerDialog() {

    companion object : IBannerBuilder {
        override fun build(
            requestUUID: UUID,
            config: IBannerConfig
        ) = QRBannerDialog().apply {
            arguments = Bundle().apply {
                putSerializable(IBannerConfig.REQUEST_UUID, requestUUID)
                putSerializable(IBannerConfig.CONFIG, config)
            }
        }
    }

    private val viewModel by lazy {
        ViewModelProvider(viewModelStore, defaultViewModelProviderFactory)
            .get(QRBannerDialogViewModel::class.java)
    }

    override val dismissFlow: Flow
        get() = viewModel.dismissFlow

    override fun configureBanner(
        inflater: LayoutInflater,
        config: IBannerConfig
    ): View? {

        if (config !is IQRBannerConfig) {
            dismissSafely()
            return null
        }

        viewModel.setConfig(config)

        configureDialogParams(config.appearance)

        val binding = when (config.appearance.layoutTemplate) {
            "qr_code_3_1" -> PropellerBannerQrBinding.inflate(inflater)
                .apply {
                    applyStyle(config)
                    launch {
                        viewModel.qrCodeImageFlow
                            .collect(this@apply::setQRImage)
                    }
                }
            else -> null
        }

        return binding?.root ?: View(context).also { dismissSafely() }
    }

    private fun configureDialogParams(appearance: BannerAppearance) {

        configureFullScreen(
            isFullWidth = appearance.isFullWidth,
            isFullHeight = appearance.isFullHeight
        )

        configureGravity(
            vertical = appearance.gravity,
        )

        configureBackground(
            color = appearance.backgroundColor,
            hasRoundedCorners = appearance.hasRoundedCorners,
        )
    }
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy