summaryrefslogtreecommitdiff
path: root/src/DisplayApp/Screens
diff options
context:
space:
mode:
authorAdam Pigg <adam@piggz.co.uk>2020-07-13 12:40:39 +0100
committerAdam Pigg <adam@piggz.co.uk>2020-07-13 12:40:39 +0100
commit306aa25aada3635506c593c6a90bf03218365d02 (patch)
treee26676df5ab92cc6f34f57da654ee8b79d10aa2d /src/DisplayApp/Screens
parent789e06fdb77704fa5da12355ad5f1d8c9d4455e5 (diff)
Initial code for music app screena and service
Diffstat (limited to 'src/DisplayApp/Screens')
-rw-r--r--src/DisplayApp/Screens/Music.cpp111
-rw-r--r--src/DisplayApp/Screens/Music.h47
2 files changed, 158 insertions, 0 deletions
diff --git a/src/DisplayApp/Screens/Music.cpp b/src/DisplayApp/Screens/Music.cpp
new file mode 100644
index 00000000..5b54c49c
--- /dev/null
+++ b/src/DisplayApp/Screens/Music.cpp
@@ -0,0 +1,111 @@
+#include <libs/lvgl/lvgl.h>
+#include "Music.h"
+
+using namespace Pinetime::Applications::Screens;
+extern lv_font_t jetbrains_mono_extrabold_compressed;
+extern lv_font_t jetbrains_mono_bold_20;
+
+static void event_handler(lv_obj_t * obj, lv_event_t event)
+{
+ Music* screen = static_cast<Music *>(obj->user_data);
+ screen->OnObjectEvent(obj, event);
+}
+
+Music::Music(Pinetime::Applications::DisplayApp *app, Pinetime::Controllers::MusicService &music) : Screen(app), musicService(music) {
+ lv_obj_t * label;
+
+ btnVolDown = lv_btn_create(lv_scr_act(), NULL);
+ btnVolDown->user_data = this;
+ lv_obj_set_event_cb(btnVolDown, event_handler);
+ lv_obj_align(btnVolDown, NULL, LV_ALIGN_IN_TOP_LEFT, 10, 10);
+ label = lv_label_create(btnVolDown, NULL);
+ lv_label_set_text(label, "v-");
+
+ btnVolUp = lv_btn_create(lv_scr_act(), NULL);
+ btnVolUp->user_data = this;
+ lv_obj_set_event_cb(btnVolUp, event_handler);
+ lv_obj_align(btnVolUp, NULL, LV_ALIGN_IN_TOP_RIGHT, -10, 10);
+ label = lv_label_create(btnVolUp, NULL);
+ lv_label_set_text(label, "v+");
+
+ btnPrev = lv_btn_create(lv_scr_act(), NULL);
+ btnPrev->user_data = this;
+ lv_obj_set_event_cb(btnPrev, event_handler);
+ lv_obj_set_size(btnPrev, LV_HOR_RES / 4, LV_VER_RES / 4);
+ lv_obj_align(btnPrev, NULL, LV_ALIGN_IN_BOTTOM_LEFT, 10,-10);
+ label = lv_label_create(btnPrev, NULL);
+ lv_label_set_text(label, "<<");
+
+ btnPlayPause = lv_btn_create(lv_scr_act(), NULL);
+ btnPlayPause->user_data = this;
+ lv_obj_set_event_cb(btnPlayPause, event_handler);
+ lv_obj_set_size(btnPlayPause, LV_HOR_RES / 4, LV_VER_RES / 4);
+ lv_obj_align(btnPlayPause, NULL, LV_ALIGN_IN_BOTTOM_MID, 0,-10);
+ label = lv_label_create(btnPlayPause, NULL);
+ lv_label_set_text(label, ">");
+
+ btnNext = lv_btn_create(lv_scr_act(), NULL);
+ btnNext->user_data = this;
+ lv_obj_set_event_cb(btnNext, event_handler);
+ lv_obj_set_size(btnNext, LV_HOR_RES / 4, LV_VER_RES / 4);
+ lv_obj_align(btnNext, NULL, LV_ALIGN_IN_BOTTOM_RIGHT, -10,-10);
+ label = lv_label_create(btnNext, NULL);
+ lv_label_set_text(label, ">>");
+
+ txtArtist = lv_label_create(lv_scr_act(), NULL);
+ lv_label_set_long_mode(txtArtist, LV_LABEL_LONG_SROLL);
+ lv_obj_align(txtArtist, NULL, LV_ALIGN_IN_LEFT_MID, 0,-20);
+ lv_label_set_text(txtArtist, "Artist Name");
+ lv_label_set_align(txtArtist, LV_LABEL_ALIGN_CENTER);
+ lv_obj_set_width(txtArtist, LV_HOR_RES);
+
+ txtTrack = lv_label_create(lv_scr_act(), NULL);
+ lv_label_set_long_mode(txtTrack, LV_LABEL_LONG_DOT);
+ lv_obj_align(txtTrack, NULL, LV_ALIGN_IN_LEFT_MID, 0,20);
+ lv_label_set_text(txtTrack, "This is a very long track name");
+ lv_label_set_align(txtTrack, LV_LABEL_ALIGN_CENTER);
+ lv_obj_set_width(txtTrack, LV_HOR_RES);
+}
+
+Music::~Music() {
+ lv_obj_clean(lv_scr_act());
+}
+
+bool Music::OnButtonPushed() {
+ running = false;
+ return true;
+}
+
+bool Music::Refresh() {
+
+ if (m_artist != musicService.artist()) {
+ m_artist = musicService.artist();
+ lv_label_set_text(txtArtist, m_artist.data());
+ }
+ if (m_track != musicService.track()) {
+ m_track = musicService.track();
+ lv_label_set_text(txtTrack, m_track.data());
+ }
+ if (m_album != musicService.album()) {
+ m_album = musicService.album();
+ }
+
+ return running;
+}
+
+void Music::OnObjectEvent(lv_obj_t* obj, lv_event_t event)
+{
+ if (event == LV_EVENT_CLICKED) {
+ if (obj == btnVolDown) {
+ musicService.event(Controllers::MusicService::EVENT_MUSIC_VOLUP);
+ } else if (obj == btnVolUp) {
+ musicService.event(Controllers::MusicService::EVENT_MUSIC_VOLDOWN);
+ } else if (obj == btnPrev) {
+ musicService.event(Controllers::MusicService::EVENT_MUSIC_PREV);
+ } else if (obj == btnPlayPause) {
+ musicService.event(Controllers::MusicService::EVENT_MUSIC_PLAY);
+ } else if (obj == btnNext) {
+ musicService.event(Controllers::MusicService::EVENT_MUSIC_NEXT);
+ }
+ }
+}
diff --git a/src/DisplayApp/Screens/Music.h b/src/DisplayApp/Screens/Music.h
new file mode 100644
index 00000000..538e1daf
--- /dev/null
+++ b/src/DisplayApp/Screens/Music.h
@@ -0,0 +1,47 @@
+#pragma once
+
+#include <cstdint>
+#include <chrono>
+#include <Components/Gfx/Gfx.h>
+#include "Screen.h"
+#include <bits/unique_ptr.h>
+#include <libs/lvgl/src/lv_core/lv_style.h>
+#include <libs/lvgl/src/lv_core/lv_obj.h>
+#include <Components/Battery/BatteryController.h>
+#include <Components/Ble/BleController.h>
+#include "../../Version.h"
+#include <Components/Ble/MusicService.h>
+#include <string>
+
+namespace Pinetime {
+ namespace Applications {
+ namespace Screens {
+
+ class Music : public Screen{
+ public:
+ Music(DisplayApp* app, Pinetime::Controllers::MusicService &music);
+ ~Music() override;
+
+ bool Refresh() override;
+ bool OnButtonPushed() override;
+
+ void OnObjectEvent(lv_obj_t* obj, lv_event_t event);
+
+ private:
+ lv_obj_t * btnPrev;
+ lv_obj_t * btnPlayPause;
+ lv_obj_t * btnNext;
+ lv_obj_t * btnVolDown;
+ lv_obj_t * btnVolUp;
+ lv_obj_t * txtArtist;
+ lv_obj_t * txtTrack;
+
+ bool running = true;
+ Pinetime::Controllers::MusicService &musicService;
+ std::string m_artist;
+ std::string m_album;
+ std::string m_track;
+ };
+ }
+ }
+}