diff --git a/app/src/main/java/com/itsaky/androidide/fragments/TemplateDetailsFragment.kt b/app/src/main/java/com/itsaky/androidide/fragments/TemplateDetailsFragment.kt index 6049078f1..04de9f3e5 100644 --- a/app/src/main/java/com/itsaky/androidide/fragments/TemplateDetailsFragment.kt +++ b/app/src/main/java/com/itsaky/androidide/fragments/TemplateDetailsFragment.kt @@ -78,7 +78,7 @@ class TemplateDetailsFragment : val isValid = template.parameters.fold(true) { isValid, param -> if (param is StringParameter) { - return@fold isValid && ConstraintVerifier.isValid(param.value ?: "", + return@fold isValid && ConstraintVerifier.isValid(param.value, param.constraints) } else isValid } diff --git a/templates-api/src/main/java/com/itsaky/androidide/templates/base/base.kt b/templates-api/src/main/java/com/itsaky/androidide/templates/base/base.kt index bc6807c6b..6996ebf1a 100644 --- a/templates-api/src/main/java/com/itsaky/androidide/templates/base/base.kt +++ b/templates-api/src/main/java/com/itsaky/androidide/templates/base/base.kt @@ -67,7 +67,7 @@ fun baseProject(block: ProjectTemplateBuilder.() -> Unit // When project name is changed, change the package name accordingly projectName.observe { name -> val newPackage = - AndroidUtils.appNameToPackageName(name.value!!, packageName.value!!) + AndroidUtils.appNameToPackageName(name.value, packageName.value) packageName.setValue(newPackage) } @@ -86,9 +86,9 @@ fun baseProject(block: ProjectTemplateBuilder.() -> Unit preRecipe = { this@apply._executor = this - this@apply._data = ProjectTemplateData(projectName.value!!, - File(saveLocation.value!!, projectName.value!!), ProjectVersionData(), - language = language.value!!, useKts = useKts.value ?: useKts.default) + this@apply._data = ProjectTemplateData(projectName.value, + File(saveLocation.value, projectName.value), ProjectVersionData(), + language = language.value, useKts = useKts.value) if (data.projectDir.exists() && data.projectDir.listFiles() ?.isNotEmpty() == true @@ -97,9 +97,9 @@ fun baseProject(block: ProjectTemplateBuilder.() -> Unit } setDefaultModuleData( - ModuleTemplateData(":app", appName = data.name, packageName.value!!, + ModuleTemplateData(":app", appName = data.name, packageName.value, data.moduleNameToDir(":app"), type = AndroidApp, - language = language.value!!, minSdk = minSdk.value!!, + language = language.value, minSdk = minSdk.value, useKts = data.useKts)) } @@ -167,11 +167,11 @@ fun baseAndroidModule(isLibrary: Boolean = false, SpinnerWidget(type), SpinnerWidget(language), CheckBoxWidget(useKts)) preRecipe = commonPreRecipe { - ModuleTemplateData(name = moduleName.value!!, appName = appName?.value, - packageName = packageName.value!!, - projectDir = requireProjectData().moduleNameToDir(moduleName.value!!), - type = type.value!!, language = language.value!!, - minSdk = minSdk.value!!, useKts = useKts.value ?: useKts.default) + ModuleTemplateData(name = moduleName.value, appName = appName?.value, + packageName = packageName.value, + projectDir = requireProjectData().moduleNameToDir(moduleName.value), + type = type.value, language = language.value, + minSdk = minSdk.value, useKts = useKts.value) } postRecipe = commonPostRecipe() diff --git a/templates-api/src/main/java/com/itsaky/androidide/templates/parameters.kt b/templates-api/src/main/java/com/itsaky/androidide/templates/parameters.kt index 35ee4d4a5..32a228a2c 100644 --- a/templates-api/src/main/java/com/itsaky/androidide/templates/parameters.kt +++ b/templates-api/src/main/java/com/itsaky/androidide/templates/parameters.kt @@ -88,10 +88,13 @@ abstract class Parameter(@StringRes val name: Int, private val observers = hashSetOf>() private val lock = ReentrantLock() + private var _value: T? = null - var value: T? = null - get() = field ?: default - private set + /** + * The value of this parameter. + */ + val value: T + get() = _value ?: default /** * Set the new value to this parameter. @@ -100,7 +103,7 @@ abstract class Parameter(@StringRes val name: Int, * @param notify Whether the observers must be notified of the change or not. */ fun setValue(value: T, notify: Boolean = true) { - this.value = value + this._value = value if (notify) { notifyObservers() @@ -293,7 +296,7 @@ fun > enumParameter(block: EnumParameterBuilder.() -> Unit fun projectNameParameter(configure: StringParameterBuilder.() -> Unit = {}) = stringParameter { - name = R.string.project_app_name + name = string.project_app_name default = "My Application" startIcon = R.drawable.ic_android constraints = listOf(NONEMPTY) @@ -303,7 +306,7 @@ fun projectNameParameter(configure: StringParameterBuilder.() -> Unit = {}) = fun packageNameParameter(configure: StringParameterBuilder.() -> Unit = {}) = stringParameter { - name = R.string.package_name + name = string.package_name default = "com.example.myapplication" startIcon = R.drawable.ic_package constraints = listOf(NONEMPTY, PACKAGE) @@ -314,7 +317,7 @@ fun packageNameParameter(configure: StringParameterBuilder.() -> Unit = {}) = fun projectLanguageParameter( configure: EnumParameterBuilder.() -> Unit = {} ) = enumParameter { - name = R.string.wizard_language + name = string.wizard_language default = Java displayName = Language::lang startIcon = R.drawable.ic_language_java @@ -324,7 +327,7 @@ fun projectLanguageParameter( fun minSdkParameter(configure: EnumParameterBuilder.() -> Unit = {}) = enumParameter { - name = R.string.minimum_sdk + name = string.minimum_sdk default = Sdk.Lollipop displayName = Sdk::displayName startIcon = R.drawable.ic_min_sdk diff --git a/templates-impl/src/main/java/com/itsaky/androidide/templates/impl/TemplateWidgetViewProviderImpl.kt b/templates-impl/src/main/java/com/itsaky/androidide/templates/impl/TemplateWidgetViewProviderImpl.kt index 387b267a9..f4574e0a1 100644 --- a/templates-impl/src/main/java/com/itsaky/androidide/templates/impl/TemplateWidgetViewProviderImpl.kt +++ b/templates-impl/src/main/java/com/itsaky/androidide/templates/impl/TemplateWidgetViewProviderImpl.kt @@ -84,7 +84,7 @@ class TemplateWidgetViewProviderImpl : ITemplateWidgetViewProvider { val observer = object : DefaultObserver() { override fun onChanged(parameter: Parameter) { disableAndRun { - root.isChecked = param.value ?: false + root.isChecked = param.value } } } @@ -105,7 +105,7 @@ class TemplateWidgetViewProviderImpl : ITemplateWidgetViewProvider { val observer = object : DefaultObserver() { override fun onChanged(parameter: Parameter) { disableAndRun { - input.setText(param.value ?: "") + input.setText(param.value) } } } @@ -152,19 +152,17 @@ class TemplateWidgetViewProviderImpl : ITemplateWidgetViewProvider { androidx.appcompat.R.layout.support_simple_spinner_dropdown_item, array)) - - val defaultName = - enumToName[param.default] ?: param.default.name + val defaultName = enumToName[param.default] ?: param.default.name root.isEnabled = nameToEnum.size > 1 input.listSelection = array.indexOf(defaultName) input.setText(defaultName, false) - val observer = object : DefaultObserver>() { + val observer = object : DefaultObserver>() { override fun onChanged(parameter: Parameter>) { (parameter as EnumParameter<*>).apply { disableAndRun { - input.setText(enumToName[value ?: default]) + input.setText(enumToName[value]) } } }