summaryrefslogtreecommitdiff
path: root/src/ui/ui_fsm.cpp
diff options
context:
space:
mode:
authorjacqueline <me@jacqueline.id.au>2023-08-28 20:36:31 +1000
committerjacqueline <me@jacqueline.id.au>2023-08-28 20:36:31 +1000
commitc214d4b40e2502bf22aa827e8f210cc4296de9fd (patch)
treeda596a778e53e2255994e79a640ba2eab58c2f42 /src/ui/ui_fsm.cpp
parentfa7fa98dc1a6d611dcc4badbfeebef307514a166 (diff)
downloadtangara-fw-c214d4b40e2502bf22aa827e8f210cc4296de9fd.tar.gz
Add some more icons, and reflect play/pause in top bar
Diffstat (limited to 'src/ui/ui_fsm.cpp')
-rw-r--r--src/ui/ui_fsm.cpp15
1 files changed, 15 insertions, 0 deletions
diff --git a/src/ui/ui_fsm.cpp b/src/ui/ui_fsm.cpp
index 32032978..dd3ba8fd 100644
--- a/src/ui/ui_fsm.cpp
+++ b/src/ui/ui_fsm.cpp
@@ -8,6 +8,7 @@
#include <memory>
+#include "audio_fsm.hpp"
#include "battery.hpp"
#include "core/lv_obj.h"
#include "misc/lv_gc.h"
@@ -110,12 +111,21 @@ void UiState::react(const system_fsm::BatteryStateChanged&) {
void UiState::UpdateTopBar() {
auto battery_state = sBattery->State();
+ bool has_queue = sQueue->GetCurrent().has_value();
+ bool is_playing = audio::AudioState::is_in_state<audio::states::Playback>();
+
widgets::TopBar::State state{
.playback_state = widgets::TopBar::PlaybackState::kIdle,
.battery_percent = static_cast<uint_fast8_t>(
battery_state.has_value() ? battery_state->percent : 100),
.is_charging = !battery_state.has_value() || battery_state->is_charging,
};
+
+ if (has_queue) {
+ state.playback_state = is_playing ? widgets::TopBar::PlaybackState::kPlaying
+ : widgets::TopBar::PlaybackState::kPaused;
+ }
+
if (sCurrentScreen) {
sCurrentScreen->UpdateTopBar(state);
}
@@ -208,6 +218,7 @@ void Playing::exit() {
}
void Playing::react(const audio::PlaybackStarted& ev) {
+ UpdateTopBar();
sPlayingScreen->OnTrackUpdate();
}
@@ -215,6 +226,10 @@ void Playing::react(const audio::PlaybackUpdate& ev) {
sPlayingScreen->OnPlaybackUpdate(ev.seconds_elapsed, ev.seconds_total);
}
+void Playing::react(const audio::PlaybackFinished& ev) {
+ UpdateTopBar();
+}
+
void Playing::react(const audio::QueueUpdate& ev) {
sPlayingScreen->OnQueueUpdate();
}