From 40cc4e1bf16735c6a4f7976936250bb99db6f396 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Caner=20Tu=CC=88re?= Date: Mon, 9 Sep 2024 14:59:52 +0300 Subject: [PATCH] bug fix and bind versions service --- .../quickprojectwizard/ComposeTemplate.kt | 222 +++++++++--------- .../cnrture/quickprojectwizard/XMLTemplate.kt | 222 +++++++++--------- .../quickprojectwizard/gradle/Library.kt | 2 +- .../recipes/ComposeProjectRecipe.kt | 2 +- .../recipes/XMLProjectRecipe.kt | 2 +- 5 files changed, 235 insertions(+), 215 deletions(-) diff --git a/src/main/kotlin/com/github/cnrture/quickprojectwizard/ComposeTemplate.kt b/src/main/kotlin/com/github/cnrture/quickprojectwizard/ComposeTemplate.kt index c4c0410..a70d61e 100644 --- a/src/main/kotlin/com/github/cnrture/quickprojectwizard/ComposeTemplate.kt +++ b/src/main/kotlin/com/github/cnrture/quickprojectwizard/ComposeTemplate.kt @@ -4,128 +4,138 @@ import com.android.tools.idea.wizard.template.* import com.android.tools.idea.wizard.template.impl.defaultPackageNameParameter import com.github.cnrture.quickprojectwizard.general.ImageLibrary import com.github.cnrture.quickprojectwizard.general.NetworkLibrary +import com.github.cnrture.quickprojectwizard.gradle.network.getVersions import com.github.cnrture.quickprojectwizard.recipes.composeProjectRecipe +import kotlinx.coroutines.* import java.net.URL import java.util.* -val composeTemplate - get() = template { - name = "QPW - Compose Project" - description = "Quickly create a new project with libraries, tools and screens you want." - minApi = 23 - constraints = listOf(TemplateConstraint.AndroidX, TemplateConstraint.Kotlin) - category = Category.Application - formFactor = FormFactor.Mobile - screens = listOf(WizardUiContext.NewProject, WizardUiContext.NewProjectExtraDetail) - - val packageName = defaultPackageNameParameter - val projectName = packageName.value.split(".").last() - .replaceFirstChar { if (it.isLowerCase()) it.titlecase(Locale.getDefault()) else it.toString() } - - val selectedNetworkLibrary = enumParameter { - name = "Network Library" - default = NetworkLibrary.None +val composeTemplate = template { + name = "QPW - Compose Project" + description = "Quickly create a new project with libraries, tools and screens you want." + minApi = 23 + constraints = listOf(TemplateConstraint.AndroidX, TemplateConstraint.Kotlin) + category = Category.Application + formFactor = FormFactor.Mobile + screens = listOf(WizardUiContext.NewProject, WizardUiContext.NewProjectExtraDetail) + + runBlocking { + try { + getVersions() + println("Versions fetched successfully") + } catch (e: Exception) { + println("Failed to fetch versions: ${e.message}") } + } - val isRoomEnable = booleanParameter { - name = "Room" - default = false - } + val packageName = defaultPackageNameParameter + val projectName = packageName.value.split(".").last() + .replaceFirstChar { if (it.isLowerCase()) it.titlecase(Locale.getDefault()) else it.toString() } - val isHiltEnable = booleanParameter { - name = "Hilt" - default = false - } + val selectedNetworkLibrary = enumParameter { + name = "Network Library" + default = NetworkLibrary.None + } - val isNavigationEnable = booleanParameter { - name = "Navigation" - default = false - } + val isRoomEnable = booleanParameter { + name = "Room" + default = false + } - val selectedImageLibrary = enumParameter { - name = "Image Library" - default = ImageLibrary.None - } + val isHiltEnable = booleanParameter { + name = "Hilt" + default = false + } - val isKtLintEnable = booleanParameter { - name = "KtLint" - default = false - } + val isNavigationEnable = booleanParameter { + name = "Navigation" + default = false + } - val isDetektEnable = booleanParameter { - name = "Detekt" - default = false - } + val selectedImageLibrary = enumParameter { + name = "Image Library" + default = ImageLibrary.None + } - val isFirebaseEnable = booleanParameter { - name = "Firebase" - default = false - } + val isKtLintEnable = booleanParameter { + name = "KtLint" + default = false + } - val isWorkManagerEnable = booleanParameter { - name = "WorkManager" - default = false - } + val isDetektEnable = booleanParameter { + name = "Detekt" + default = false + } - val dataDiDomainPresentationUiPackages = booleanParameter { - name = "data - di - domain - presentation - ui packages" - default = false - } + val isFirebaseEnable = booleanParameter { + name = "Firebase" + default = false + } - val screens = stringParameter { - name = "Screens" - default = "" - } + val isWorkManagerEnable = booleanParameter { + name = "WorkManager" + default = false + } - val javaJvmVersion = stringParameter { - name = "Java & JVM Version" - default = "17" - } + val dataDiDomainPresentationUiPackages = booleanParameter { + name = "data - di - domain - presentation - ui packages" + default = false + } - widgets( - CheckBoxWidget(isRoomEnable), - CheckBoxWidget(isHiltEnable), - CheckBoxWidget(isNavigationEnable), - CheckBoxWidget(isFirebaseEnable), - CheckBoxWidget(isKtLintEnable), - CheckBoxWidget(isDetektEnable), - CheckBoxWidget(isWorkManagerEnable), - CheckBoxWidget(dataDiDomainPresentationUiPackages), - EnumWidget(selectedNetworkLibrary), - EnumWidget(selectedImageLibrary), - TextFieldWidget(screens), - LabelWidget( - "Please enter the screens you want to create. (e.g. Home, Detail, Profile)" + - "\nNote: First item is start destination" - ), - LabelWidget(" "), - TextFieldWidget(javaJvmVersion), - LabelWidget("8 or 11 or 17 etc."), - LabelWidget(" "), - UrlLinkWidget("Created by Caner Ture", "https://bento.me/canerture"), - PackageNameWidget(packageName), - ) + val screens = stringParameter { + name = "Screens" + default = "" + } - thumb = { Thumb { URL("https://canerture.com/quick_project_wizard_template.png") } } - - recipe = { data: TemplateData -> - composeProjectRecipe( - moduleData = data as ModuleTemplateData, - packageName = packageName.value, - isRoomEnable = isRoomEnable.value, - isWorkManagerEnable = isWorkManagerEnable.value, - selectedNetworkLibrary = selectedNetworkLibrary.value, - isHiltEnable = isHiltEnable.value, - isNavigationEnable = isNavigationEnable.value, - selectedImageLibrary = selectedImageLibrary.value, - isKtLintEnable = isKtLintEnable.value, - isDetektEnable = isDetektEnable.value, - isFirebaseEnable = isFirebaseEnable.value, - dataDiDomainPresentationUiPackages = dataDiDomainPresentationUiPackages.value, - screens = screens.value, - minApi = minApi, - javaJvmVersion = javaJvmVersion.value, - projectName = projectName - ) - } + val javaJvmVersion = stringParameter { + name = "Java & JVM Version" + default = "17" + } + + widgets( + CheckBoxWidget(isRoomEnable), + CheckBoxWidget(isHiltEnable), + CheckBoxWidget(isNavigationEnable), + CheckBoxWidget(isFirebaseEnable), + CheckBoxWidget(isKtLintEnable), + CheckBoxWidget(isDetektEnable), + CheckBoxWidget(isWorkManagerEnable), + CheckBoxWidget(dataDiDomainPresentationUiPackages), + EnumWidget(selectedNetworkLibrary), + EnumWidget(selectedImageLibrary), + TextFieldWidget(screens), + LabelWidget( + "Please enter the screens you want to create. (e.g. Home, Detail, Profile)" + + "\nNote: First item is start destination" + ), + LabelWidget(" "), + TextFieldWidget(javaJvmVersion), + LabelWidget("8 or 11 or 17 etc."), + LabelWidget(" "), + UrlLinkWidget("Created by Caner Ture", "https://bento.me/canerture"), + PackageNameWidget(packageName), + ) + + thumb = { Thumb { URL("https://canerture.com/quick_project_wizard_template.png") } } + + recipe = { data: TemplateData -> + composeProjectRecipe( + moduleData = data as ModuleTemplateData, + packageName = packageName.value, + isRoomEnable = isRoomEnable.value, + isWorkManagerEnable = isWorkManagerEnable.value, + selectedNetworkLibrary = selectedNetworkLibrary.value, + isHiltEnable = isHiltEnable.value, + isNavigationEnable = isNavigationEnable.value, + selectedImageLibrary = selectedImageLibrary.value, + isKtLintEnable = isKtLintEnable.value, + isDetektEnable = isDetektEnable.value, + isFirebaseEnable = isFirebaseEnable.value, + dataDiDomainPresentationUiPackages = dataDiDomainPresentationUiPackages.value, + screens = screens.value, + minApi = minApi, + javaJvmVersion = javaJvmVersion.value, + projectName = projectName + ) } +} diff --git a/src/main/kotlin/com/github/cnrture/quickprojectwizard/XMLTemplate.kt b/src/main/kotlin/com/github/cnrture/quickprojectwizard/XMLTemplate.kt index 5e40c1b..3c939e7 100644 --- a/src/main/kotlin/com/github/cnrture/quickprojectwizard/XMLTemplate.kt +++ b/src/main/kotlin/com/github/cnrture/quickprojectwizard/XMLTemplate.kt @@ -4,128 +4,138 @@ import com.android.tools.idea.wizard.template.* import com.android.tools.idea.wizard.template.impl.defaultPackageNameParameter import com.github.cnrture.quickprojectwizard.general.ImageLibrary import com.github.cnrture.quickprojectwizard.general.NetworkLibrary +import com.github.cnrture.quickprojectwizard.gradle.network.getVersions import com.github.cnrture.quickprojectwizard.recipes.xmlProjectRecipe +import kotlinx.coroutines.runBlocking import java.net.URL import java.util.* -val xmlTemplate - get() = template { - name = "QPW - XML Project" - description = "Quickly create a new project with libraries, tools and screens you want." - minApi = 23 - constraints = listOf(TemplateConstraint.AndroidX, TemplateConstraint.Kotlin) - category = Category.Application - formFactor = FormFactor.Mobile - screens = listOf(WizardUiContext.NewProject, WizardUiContext.NewProjectExtraDetail) - - val packageName = defaultPackageNameParameter - val projectName = packageName.value.split(".").last() - .replaceFirstChar { if (it.isLowerCase()) it.titlecase(Locale.getDefault()) else it.toString() } - - val selectedNetworkLibrary = enumParameter { - name = "Network Library" - default = NetworkLibrary.None +val xmlTemplate = template { + name = "QPW - XML Project" + description = "Quickly create a new project with libraries, tools and screens you want." + minApi = 23 + constraints = listOf(TemplateConstraint.AndroidX, TemplateConstraint.Kotlin) + category = Category.Application + formFactor = FormFactor.Mobile + screens = listOf(WizardUiContext.NewProject, WizardUiContext.NewProjectExtraDetail) + + runBlocking { + try { + getVersions() + println("Versions fetched successfully") + } catch (e: Exception) { + println("Failed to fetch versions: ${e.message}") } + } - val isRoomEnable = booleanParameter { - name = "Room" - default = false - } + val packageName = defaultPackageNameParameter + val projectName = packageName.value.split(".").last() + .replaceFirstChar { if (it.isLowerCase()) it.titlecase(Locale.getDefault()) else it.toString() } - val isHiltEnable = booleanParameter { - name = "Hilt" - default = false - } + val selectedNetworkLibrary = enumParameter { + name = "Network Library" + default = NetworkLibrary.None + } - val isNavigationEnable = booleanParameter { - name = "Navigation" - default = false - } + val isRoomEnable = booleanParameter { + name = "Room" + default = false + } - val selectedImageLibrary = enumParameter { - name = "Image Library" - default = ImageLibrary.None - } + val isHiltEnable = booleanParameter { + name = "Hilt" + default = false + } - val isKtLintEnable = booleanParameter { - name = "KtLint" - default = false - } + val isNavigationEnable = booleanParameter { + name = "Navigation" + default = false + } - val isDetektEnable = booleanParameter { - name = "Detekt" - default = false - } + val selectedImageLibrary = enumParameter { + name = "Image Library" + default = ImageLibrary.None + } - val isFirebaseEnable = booleanParameter { - name = "Firebase" - default = false - } + val isKtLintEnable = booleanParameter { + name = "KtLint" + default = false + } - val isWorkManagerEnable = booleanParameter { - name = "WorkManager" - default = false - } + val isDetektEnable = booleanParameter { + name = "Detekt" + default = false + } - val dataDiDomainPresentationUiPackages = booleanParameter { - name = "data - di - domain - presentation - ui packages" - default = false - } + val isFirebaseEnable = booleanParameter { + name = "Firebase" + default = false + } - val screens = stringParameter { - name = "Screens" - default = "" - } + val isWorkManagerEnable = booleanParameter { + name = "WorkManager" + default = false + } - val javaJvmVersion = stringParameter { - name = "Java & JVM Version" - default = "17" - } + val dataDiDomainPresentationUiPackages = booleanParameter { + name = "data - di - domain - presentation - ui packages" + default = false + } - widgets( - CheckBoxWidget(isRoomEnable), - CheckBoxWidget(isHiltEnable), - CheckBoxWidget(isNavigationEnable), - CheckBoxWidget(isFirebaseEnable), - CheckBoxWidget(isKtLintEnable), - CheckBoxWidget(isDetektEnable), - CheckBoxWidget(isWorkManagerEnable), - CheckBoxWidget(dataDiDomainPresentationUiPackages), - EnumWidget(selectedNetworkLibrary), - EnumWidget(selectedImageLibrary), - TextFieldWidget(screens), - LabelWidget( - "Please enter the screens you want to create. (e.g. Home, Detail, Profile)" + - "\nNote: First item is start destination" - ), - LabelWidget(" "), - TextFieldWidget(javaJvmVersion), - LabelWidget("8 or 11 or 17 etc."), - LabelWidget(" "), - UrlLinkWidget("Created by Caner Ture", "https://bento.me/canerture"), - PackageNameWidget(packageName), - ) + val screens = stringParameter { + name = "Screens" + default = "" + } - thumb = { Thumb { URL("https://canerture.com/quick_project_wizard_template.png") } } - - recipe = { data: TemplateData -> - xmlProjectRecipe( - moduleData = data as ModuleTemplateData, - packageName = packageName.value, - isRoomEnable = isRoomEnable.value, - isWorkManagerEnable = isWorkManagerEnable.value, - selectedNetworkLibrary = selectedNetworkLibrary.value, - isHiltEnable = isHiltEnable.value, - isNavigationEnable = isNavigationEnable.value, - selectedImageLibrary = selectedImageLibrary.value, - isKtLintEnable = isKtLintEnable.value, - isDetektEnable = isDetektEnable.value, - isFirebaseEnable = isFirebaseEnable.value, - dataDiDomainPresentationUiPackages = dataDiDomainPresentationUiPackages.value, - screens = screens.value, - minApi = minApi, - javaJvmVersion = javaJvmVersion.value, - projectName = projectName - ) - } + val javaJvmVersion = stringParameter { + name = "Java & JVM Version" + default = "17" + } + + widgets( + CheckBoxWidget(isRoomEnable), + CheckBoxWidget(isHiltEnable), + CheckBoxWidget(isNavigationEnable), + CheckBoxWidget(isFirebaseEnable), + CheckBoxWidget(isKtLintEnable), + CheckBoxWidget(isDetektEnable), + CheckBoxWidget(isWorkManagerEnable), + CheckBoxWidget(dataDiDomainPresentationUiPackages), + EnumWidget(selectedNetworkLibrary), + EnumWidget(selectedImageLibrary), + TextFieldWidget(screens), + LabelWidget( + "Please enter the screens you want to create. (e.g. Home, Detail, Profile)" + + "\nNote: First item is start destination" + ), + LabelWidget(" "), + TextFieldWidget(javaJvmVersion), + LabelWidget("8 or 11 or 17 etc."), + LabelWidget(" "), + UrlLinkWidget("Created by Caner Ture", "https://bento.me/canerture"), + PackageNameWidget(packageName), + ) + + thumb = { Thumb { URL("https://canerture.com/quick_project_wizard_template.png") } } + + recipe = { data: TemplateData -> + xmlProjectRecipe( + moduleData = data as ModuleTemplateData, + packageName = packageName.value, + isRoomEnable = isRoomEnable.value, + isWorkManagerEnable = isWorkManagerEnable.value, + selectedNetworkLibrary = selectedNetworkLibrary.value, + isHiltEnable = isHiltEnable.value, + isNavigationEnable = isNavigationEnable.value, + selectedImageLibrary = selectedImageLibrary.value, + isKtLintEnable = isKtLintEnable.value, + isDetektEnable = isDetektEnable.value, + isFirebaseEnable = isFirebaseEnable.value, + dataDiDomainPresentationUiPackages = dataDiDomainPresentationUiPackages.value, + screens = screens.value, + minApi = minApi, + javaJvmVersion = javaJvmVersion.value, + projectName = projectName + ) } +} diff --git a/src/main/kotlin/com/github/cnrture/quickprojectwizard/gradle/Library.kt b/src/main/kotlin/com/github/cnrture/quickprojectwizard/gradle/Library.kt index 176840f..dcfd3bf 100644 --- a/src/main/kotlin/com/github/cnrture/quickprojectwizard/gradle/Library.kt +++ b/src/main/kotlin/com/github/cnrture/quickprojectwizard/gradle/Library.kt @@ -3,7 +3,7 @@ package com.github.cnrture.quickprojectwizard.gradle sealed class Library(val libName: String, val group: String, val name: String, val verRef: String? = null) { data object CoreKtx : Library("core-ktx", "androidx.core", "core-ktx", "core-ktx") data object Junit : Library("junit", "junit", "junit", "junit") - data object JunitExt : Library("junit-ext", "androidx.test.ext", "junit", "junitVersion") + data object JunitExt : Library("junit-ext", "androidx.test.ext", "junit", "junit-ext") data object EspressoCore : Library("espresso-core", "androidx.test.espresso", "espresso-core", "espresso-core") data object AppCompat : Library("appcompat", "androidx.appcompat", "appcompat", "appcompat") data object Material : Library("material", "com.google.android.material", "material", "material") diff --git a/src/main/kotlin/com/github/cnrture/quickprojectwizard/recipes/ComposeProjectRecipe.kt b/src/main/kotlin/com/github/cnrture/quickprojectwizard/recipes/ComposeProjectRecipe.kt index e00f437..18c7208 100644 --- a/src/main/kotlin/com/github/cnrture/quickprojectwizard/recipes/ComposeProjectRecipe.kt +++ b/src/main/kotlin/com/github/cnrture/quickprojectwizard/recipes/ComposeProjectRecipe.kt @@ -59,7 +59,7 @@ fun RecipeExecutor.composeProjectRecipe( generateManifest(hasApplicationBlock = true) val screenList = if (screens.isNotEmpty()) { - screens.split(",").map { it.trim() } + screens.split(",").map { it.trim() }.filter { it.isNotEmpty() } } else { listOf("Main") } diff --git a/src/main/kotlin/com/github/cnrture/quickprojectwizard/recipes/XMLProjectRecipe.kt b/src/main/kotlin/com/github/cnrture/quickprojectwizard/recipes/XMLProjectRecipe.kt index 6317d05..174195d 100644 --- a/src/main/kotlin/com/github/cnrture/quickprojectwizard/recipes/XMLProjectRecipe.kt +++ b/src/main/kotlin/com/github/cnrture/quickprojectwizard/recipes/XMLProjectRecipe.kt @@ -50,7 +50,7 @@ fun RecipeExecutor.xmlProjectRecipe( generateManifest(hasApplicationBlock = true) val screenList = if (screens.isNotEmpty()) { - screens.split(",").map { it.trim() } + screens.split(",").map { it.trim() }.filter { it.isNotEmpty() } } else { listOf("Main") }