From 45574753c760e80464c782e5252e83469a36dc4b Mon Sep 17 00:00:00 2001 From: "Alinson S. Xavier" Date: Tue, 22 Dec 2020 10:23:07 -0600 Subject: [PATCH] ShowHabitPresenter: Listen to commands and auto-update --- .../habits/show/ShowHabitActivity.kt | 10 ++++ .../habits/show/ShowHabitPresenter.kt | 53 +++++++++++++------ 2 files changed, 48 insertions(+), 15 deletions(-) diff --git a/android/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/show/ShowHabitActivity.kt b/android/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/show/ShowHabitActivity.kt index 2cff3bf30..454a7a56e 100644 --- a/android/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/show/ShowHabitActivity.kt +++ b/android/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/show/ShowHabitActivity.kt @@ -26,4 +26,14 @@ class ShowHabitActivity : HabitsActivity() { super.onCreate(savedInstanceState) setScreen(component.showHabitScreen) } + + override fun onResume() { + super.onResume() + component.showHabitPresenter.onResume() + } + + override fun onPause() { + component.showHabitPresenter.onPause() + super.onPause() + } } \ No newline at end of file diff --git a/android/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/show/ShowHabitPresenter.kt b/android/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/show/ShowHabitPresenter.kt index a640ed554..0255cc39f 100644 --- a/android/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/show/ShowHabitPresenter.kt +++ b/android/uhabits-android/src/main/java/org/isoron/uhabits/activities/habits/show/ShowHabitPresenter.kt @@ -20,6 +20,7 @@ package org.isoron.uhabits.activities.habits.show import org.isoron.androidbase.activities.* +import org.isoron.uhabits.core.commands.* import org.isoron.uhabits.core.models.* import org.isoron.uhabits.core.utils.* import javax.inject.* @@ -28,10 +29,44 @@ import javax.inject.* class ShowHabitPresenter @Inject constructor( val habit: Habit, -) { + val commandRunner: CommandRunner, +) : CommandRunner.Listener { + private val listeners = mutableListOf() + private var data = ShowHabitViewModel() + + fun onResume() { + commandRunner.addListener(this) + refresh() + notifyListeners() + } + + fun onPause() { + commandRunner.removeListener(this) + } + + fun addListener(listener: Listener) { + listeners.add(listener) + } + + fun removeListener(listener: Listener) { + listeners.remove(listener) + } + + fun requestData(listener: Listener) { + listener.onData(data) + } - private fun build(): ShowHabitViewModel { + override fun onCommandExecuted(command: Command?, refreshKey: Long?) { + refresh() + notifyListeners() + } + + private fun notifyListeners() { + for (l in listeners) l.onData(data) + } + + private fun refresh() { val scores = habit.scores val today = DateUtils.getTodayWithOffset() val lastMonth = today.minus(30) @@ -39,7 +74,7 @@ class ShowHabitPresenter val scoreToday = scores.todayValue.toFloat() val scoreLastMonth = scores.getValue(lastMonth).toFloat() val scoreLastYear = scores.getValue(lastYear).toFloat() - return ShowHabitViewModel( + data = ShowHabitViewModel( title = habit.name, color = habit.color, isNumerical = habit.isNumerical, @@ -50,18 +85,6 @@ class ShowHabitPresenter ) } - fun addListener(listener: Listener) { - listeners.add(listener) - } - - fun removeListener(listener: Listener) { - listeners.remove(listener) - } - - fun requestData(listener: Listener) { - listener.onData(build()) - } - interface Listener { fun onData(data: ShowHabitViewModel) }