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

tech.skot.tools.starter.view.View.kt Maven / Gradle / Ivy

package tech.skot.tools.starter.view

import com.squareup.kotlinpoet.*
import tech.skot.Versions
import tech.skot.tools.generation.writeStringTo
import tech.skot.tools.starter.BuildGradleGenerator
import tech.skot.tools.starter.ModuleGenerator
import tech.skot.tools.starter.StarterGenerator

fun StarterGenerator.view() {
    ModuleGenerator("view", configuration, rootDir).apply {
        buildGradle {
            plugin(BuildGradleGenerator.Plugin.Id("tech.skot.viewlegacy"))
            plugin(BuildGradleGenerator.Plugin.Kotlin("android"))

        }
        androidPackage = configuration.appPackage + ".view"
        justAndroid = true
        mainPackage = configuration.appPackage


        val baseActivityClassName = ClassName(configuration.appPackage + ".android", "BaseActivity")
        val rootActivityClassName =
            ClassName(configuration.appPackage + ".android", "RootActivity")

        androidActivities = listOf(
            ModuleGenerator.Activity(
                className = rootActivityClassName,
                template = ModuleGenerator.activityTemplateRoot,
                theme = "SplashTheme"
            ),
            ModuleGenerator.Activity(
                className = baseActivityClassName,
                template = ModuleGenerator.activityTemplateSimple,
                theme = "AppTheme"
            )
        )

        FileSpec.builder(baseActivityClassName.packageName, baseActivityClassName.simpleName)
            .addType(
                TypeSpec.classBuilder(baseActivityClassName.simpleName)
                    .superclass(ClassName("tech.skot.core.components", "SKActivity"))
                    .addModifiers(KModifier.OPEN)
                    .addProperty(
                        PropertySpec.builder(
                            "featureInitializer",
                            ClassName(
                                configuration.appPackage,
                                "${
                                    configuration.appPackage.substringAfterLast(".").capitalize()
                                }Initializer"
                            )
                        )
                            .initializer("get()")
                            .addModifiers(KModifier.OVERRIDE)
                            .build()
                    )
                    .build()
            )
            .addImport("tech.skot.core.di", "get")
            .build()
            .writeTo(rootDir.resolve("$name/src/androidMain/kotlin"))



        val initializeView = ClassName("${configuration.appPackage}.di", "initializeView")
            FileSpec.builder(initializeView.packageName, initializeView.simpleName)
                .addImport("tech.skot.core.components", "SKComponentView")
                .addImport("android.view", "Gravity")
                .addImport("android.widget", "FrameLayout")
                .addImport("com.google.android.material.snackbar", "Snackbar")
                .addImport("android.os", "Build")
                .addImport("tech.skot.core.components", "SKActivity")

                .addImport(rootActivityClassName.packageName, rootActivityClassName.simpleName)
                .addFunction(
                    FunSpec.builder(initializeView.simpleName)
                        .addModifiers(KModifier.SUSPEND)
                        .addStatement("SKActivity.launchActivityClass = RootActivity::class.java")
                        .addCode(
                            CodeBlock.of(
                                """SKComponentView.displayMessage = { message ->
        Snackbar.make(activity.window.decorView, message.content, Snackbar.LENGTH_LONG)
            .apply {
                view.apply {
                    (layoutParams as? FrameLayout.LayoutParams)?.let {
                        it.gravity = Gravity.TOP
                        if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
                            it.topMargin = activity.window?.decorView?.rootWindowInsets?.systemWindowInsetTop
                                ?: 0
                        }

                        layoutParams = it
                    }
                }
                show()
            }
    }"""
                            )
                        )
                        .build()
                )
                .build()
                .writeTo(rootDir.resolve("$name/src/androidMain/kotlin"))




        rootDir.writeStringTo(
            "$name/src/androidMain/res/values/style.xml", """

    
    
            
""".trimIndent()
        )

        rootDir.writeStringTo(
            "$name/src/androidMain/res/layout/splash.xml", """

    
    

    

           
""".trimIndent()
        )


        rootDir.writeStringTo(
            "$name/src/androidMain/res_referenced/values/strings.xml",
            """

"""
        )
    }.generate()
    modules.add("view")
}




© 2015 - 2025 Weber Informatics LLC | Privacy Policy