refactor(templates): make Parameter.value non-null

This commit is contained in:
Akash Yadav
2023-05-24 17:46:33 +05:30
parent bd79f7503c
commit e68b08d216
4 changed files with 28 additions and 27 deletions
@@ -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
}
@@ -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()
@@ -88,10 +88,13 @@ abstract class Parameter<T>(@StringRes val name: Int,
private val observers = hashSetOf<Observer<T>>()
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<T>(@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 <T : Enum<*>> enumParameter(block: EnumParameterBuilder<T>.() -> 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<Language>.() -> Unit = {}
) = enumParameter<Language> {
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<Sdk>.() -> Unit = {}) =
enumParameter<Sdk> {
name = R.string.minimum_sdk
name = string.minimum_sdk
default = Sdk.Lollipop
displayName = Sdk::displayName
startIcon = R.drawable.ic_min_sdk
@@ -84,7 +84,7 @@ class TemplateWidgetViewProviderImpl : ITemplateWidgetViewProvider {
val observer = object : DefaultObserver<Boolean>() {
override fun onChanged(parameter: Parameter<Boolean>) {
disableAndRun {
root.isChecked = param.value ?: false
root.isChecked = param.value
}
}
}
@@ -105,7 +105,7 @@ class TemplateWidgetViewProviderImpl : ITemplateWidgetViewProvider {
val observer = object : DefaultObserver<String>() {
override fun onChanged(parameter: Parameter<String>) {
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<Enum<*>>() {
val observer = object : DefaultObserver<Enum<*>>() {
override fun onChanged(parameter: Parameter<Enum<*>>) {
(parameter as EnumParameter<*>).apply {
disableAndRun {
input.setText(enumToName[value ?: default])
input.setText(enumToName[value])
}
}
}