mirror of
https://gitee.com/zhangsken/AndroidIDE.git
synced 2026-10-16 07:49:44 +08:00
refactor(templates): make Parameter.value non-null
This commit is contained in:
@@ -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
|
||||
|
||||
+5
-7
@@ -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])
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user