Simplified code by removing two layers of nested functions

This commit is contained in:
Jim Martens 2019-07-20 20:24:17 +02:00
parent d1b6829655
commit 6a4cd40a0c
2 changed files with 24 additions and 75 deletions

View File

@ -38,7 +38,8 @@ enum class Problem(val string: String) {
enum class OptionType {
COMPONENT,
PROBLEM,
BINARY,
BINARY_HAVE_YOU_TRIED,
BINARY_DID_IT_WORK,
STORY
}

View File

@ -126,9 +126,6 @@ class MessageListActivity : AppCompatActivity() {
model, adapter,
::componentSelected,
::problemSelected,
::yesNoSelected,
::triedAnswer,
::doesItWorkAnswer,
::didItWorkQuestion,
::pleaseTry,
::problemSolved,
@ -176,26 +173,7 @@ class MessageListActivity : AppCompatActivity() {
adapter: ArrayAdapter<SpinnerOption>,
componentSelected: (MessageListViewModel, ArrayAdapter<SpinnerOption>) -> List<Message>,
problemSelected: (MessageListViewModel, ArrayAdapter<SpinnerOption>) -> List<Message>,
yesNoSelected: (SpinnerOption,
MessageListViewModel,
ArrayAdapter<SpinnerOption>,
triedAnswer: (SpinnerOption, MessageListViewModel,
didItWorkQuestion: (MessageListViewModel) -> List<Message>,
pleaseTry: () -> List<Message>) -> List<Message>,
doesItWorkAnswer: (SpinnerOption, MessageListViewModel, ArrayAdapter<SpinnerOption>,
problemSolved: (MessageListViewModel, ArrayAdapter<SpinnerOption>) -> List<Message>,
nextSolutionQuestion: (MessageListViewModel, ArrayAdapter<SpinnerOption>) -> List<Message>) -> List<Message>,
didItWorkQuestion: (MessageListViewModel) -> List<Message>,
pleaseTry: () -> List<Message>,
problemSolved: (MessageListViewModel, ArrayAdapter<SpinnerOption>) -> List<Message>,
nextSolutionQuestion: (MessageListViewModel, ArrayAdapter<SpinnerOption>) -> List<Message>) -> List<Message>,
triedAnswer: (SpinnerOption, MessageListViewModel,
didItWorkQuestion: (MessageListViewModel) -> List<Message>,
pleaseTry: () -> List<Message>) -> List<Message>,
doesItWorkAnswer: (SpinnerOption, MessageListViewModel, ArrayAdapter<SpinnerOption>,
problemSolved: (MessageListViewModel, ArrayAdapter<SpinnerOption>) -> List<Message>,
nextSolutionQuestion: (MessageListViewModel, ArrayAdapter<SpinnerOption>) -> List<Message>) -> List<Message>,
didItWorkQuestion: (MessageListViewModel) -> List<Message>,
didItWorkQuestion: (MessageListViewModel, ArrayAdapter<SpinnerOption>) -> List<Message>,
pleaseTry: () -> List<Message>,
problemSolved: (MessageListViewModel, ArrayAdapter<SpinnerOption>) -> List<Message>,
nextSolutionQuestion: (MessageListViewModel, ArrayAdapter<SpinnerOption>) -> List<Message>,
@ -210,11 +188,17 @@ class MessageListActivity : AppCompatActivity() {
model.problem.value = Problem.valueOf(selectedOption.id)
problemSelected(model, adapter)
}
OptionType.BINARY -> {
yesNoSelected(selectedOption, model, adapter,
triedAnswer, doesItWorkAnswer,
didItWorkQuestion, pleaseTry,
problemSolved, nextSolutionQuestion)
OptionType.BINARY_HAVE_YOU_TRIED -> {
when (selectedOption.id) {
"YES" -> didItWorkQuestion(model, adapter)
else -> pleaseTry()
}
}
OptionType.BINARY_DID_IT_WORK -> {
when (selectedOption.id) {
"YES" -> problemSolved(model, adapter)
else -> nextSolutionQuestion(model, adapter)
}
}
OptionType.STORY -> {
doNotShowSpinner()
@ -271,7 +255,7 @@ class MessageListActivity : AppCompatActivity() {
model.spinnerOptions.value?.addAll(SpinnerOption.getOptions(
resources.getStringArray(R.array.binary_values),
resources.getStringArray(R.array.binary),
OptionType.BINARY))
OptionType.BINARY_HAVE_YOU_TRIED))
adapter.notifyDataSetChanged()
return listOf(
@ -280,51 +264,15 @@ class MessageListActivity : AppCompatActivity() {
)
}
private fun yesNoSelected(selection: SpinnerOption, model: MessageListViewModel, adapter: ArrayAdapter<SpinnerOption>,
triedAnswer: (SpinnerOption,
MessageListViewModel,
didItWorkQuestion: (MessageListViewModel) -> List<Message>,
pleaseTry: () -> List<Message>) -> List<Message>,
doesItWorkAnswer: (SpinnerOption,
MessageListViewModel,
ArrayAdapter<SpinnerOption>,
problemSolved: (MessageListViewModel, ArrayAdapter<SpinnerOption>) -> List<Message>,
nextSolutionQuestion: (MessageListViewModel, ArrayAdapter<SpinnerOption>) -> List<Message>) -> List<Message>,
didItWorkQuestion: (MessageListViewModel) -> List<Message>,
pleaseTry: () -> List<Message>,
problemSolved: (MessageListViewModel, ArrayAdapter<SpinnerOption>) -> List<Message>,
nextSolutionQuestion: (MessageListViewModel, ArrayAdapter<SpinnerOption>) -> List<Message>): List<Message> {
val state: State? = model.currentSolutionState.value
if (state != null) {
return when (state) {
State.HAVE_YOU_TRIED -> triedAnswer(selection, model, didItWorkQuestion, pleaseTry)
State.DID_IT_WORK -> doesItWorkAnswer(selection, model, adapter, problemSolved, nextSolutionQuestion)
}
}
// defacto this case should not happen
return listOf()
}
private fun triedAnswer(selection: SpinnerOption, model: MessageListViewModel,
didItWorkQuestion: (MessageListViewModel) -> List<Message>,
pleaseTry: () -> List<Message>): List<Message> {
return when (selection.id) {
"YES" -> didItWorkQuestion(model)
else -> pleaseTry()
}
}
private fun doesItWorkAnswer(selection: SpinnerOption, model: MessageListViewModel, adapter: ArrayAdapter<SpinnerOption>,
problemSolved: (MessageListViewModel, ArrayAdapter<SpinnerOption>) -> List<Message>,
nextSolutionQuestion: (MessageListViewModel, ArrayAdapter<SpinnerOption>) -> List<Message>): List<Message> {
return when (selection.id) {
"YES" -> problemSolved(model, adapter)
else -> nextSolutionQuestion(model, adapter)
}
}
private fun didItWorkQuestion(model: MessageListViewModel): List<Message> {
private fun didItWorkQuestion(model: MessageListViewModel, adapter: ArrayAdapter<SpinnerOption>): List<Message> {
model.currentSolutionState.value = State.DID_IT_WORK
model.spinnerOptions.value?.clear()
model.spinnerOptions.value?.addAll(SpinnerOption.getOptions(
resources.getStringArray(R.array.binary_values),
resources.getStringArray(R.array.binary),
OptionType.BINARY_DID_IT_WORK))
adapter.notifyDataSetChanged()
return listOf(
Message(getString(R.string.okay), false, System.currentTimeMillis()),
Message(getString(R.string.did_it_work), false, System.currentTimeMillis())
@ -391,7 +339,7 @@ class MessageListActivity : AppCompatActivity() {
model.spinnerOptions.value?.addAll(SpinnerOption.getOptions(
resources.getStringArray(R.array.binary_values),
resources.getStringArray(R.array.binary),
OptionType.BINARY))
OptionType.BINARY_HAVE_YOU_TRIED))
adapter.notifyDataSetChanged()
return listOf(