Simplified code by removing two layers of nested functions
This commit is contained in:
parent
d1b6829655
commit
6a4cd40a0c
|
@ -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
|
||||
}
|
||||
|
||||
|
|
|
@ -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(
|
||||
|
|
Loading…
Reference in New Issue