
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