diff --git a/client/android/div/src/main/java/com/yandex/div/core/expression/variables/VariableController.kt b/client/android/div/src/main/java/com/yandex/div/core/expression/variables/VariableController.kt index a7d1b125b..c169a3544 100644 --- a/client/android/div/src/main/java/com/yandex/div/core/expression/variables/VariableController.kt +++ b/client/android/div/src/main/java/com/yandex/div/core/expression/variables/VariableController.kt @@ -97,8 +97,8 @@ internal class VariableController { } private fun onVariableDeclared(variable: Variable) { - notifyVariableChanged(variable) variable.addObserver(notifyVariableChangedCallback) + notifyVariableChanged(variable) } fun getMutableVariable(name: String): Variable? { diff --git a/client/android/div/src/test/java/com/yandex/div/core/expression/variables/VariableControllerTest.kt b/client/android/div/src/test/java/com/yandex/div/core/expression/variables/VariableControllerTest.kt index 4a371f6dd..ba547dc9e 100644 --- a/client/android/div/src/test/java/com/yandex/div/core/expression/variables/VariableControllerTest.kt +++ b/client/android/div/src/test/java/com/yandex/div/core/expression/variables/VariableControllerTest.kt @@ -74,6 +74,21 @@ class VariableControllerTest { Assert.assertEquals("non-initialized", lastValue) } + @Test + fun `variable changed inside declaration callback`() { + val variable = Variable.StringVariable("late_init_variable", "declared_value") + var counter = 0 + subscribe(variable.name) { + if (counter < 5) { + counter++ + variable.set("new_value_$counter") + } + } + + declareVariable(variable) + Assert.assertEquals(5, counter) + } + @Test fun `null returned when no variable specified`() { Assert.assertNull(variableController.getMutableVariable("unknown_variable"))