From e40974bc00e099ecc44541035fca1f930606e4d3 Mon Sep 17 00:00:00 2001 From: Dyllan Kobal Date: Sat, 10 Sep 2022 14:27:42 -0400 Subject: [PATCH 1/3] Added Fast Forward and Rewind Buttons to Music App --- src/components/ble/MusicService.h | 2 + src/displayapp/screens/Music.cpp | 92 +++++++++++++++++++++++++------ src/displayapp/screens/Music.h | 14 +++++ 3 files changed, 91 insertions(+), 17 deletions(-) diff --git a/src/components/ble/MusicService.h b/src/components/ble/MusicService.h index 047d0d26..92eaf6e7 100644 --- a/src/components/ble/MusicService.h +++ b/src/components/ble/MusicService.h @@ -62,6 +62,8 @@ namespace Pinetime { static const char EVENT_MUSIC_PREV = 0x04; static const char EVENT_MUSIC_VOLUP = 0x05; static const char EVENT_MUSIC_VOLDOWN = 0x06; + static const char EVENT_MUSIC_FORWARD = 0x07; + static const char EVENT_MUSIC_REWIND = 0x08; enum MusicStatus { NotPlaying = 0x00, Playing = 0x01 }; diff --git a/src/displayapp/screens/Music.cpp b/src/displayapp/screens/Music.cpp index 1abb16a4..54ca0e0a 100644 --- a/src/displayapp/screens/Music.cpp +++ b/src/displayapp/screens/Music.cpp @@ -1,5 +1,4 @@ /* Copyright (C) 2020 JF, Adam Pigg, Avamander - This file is part of InfiniTime. InfiniTime is free software: you can redistribute it and/or modify @@ -23,6 +22,7 @@ #include "displayapp/icons/music/disc.c" #include "displayapp/icons/music/disc_f_1.c" #include "displayapp/icons/music/disc_f_2.c" +#include using namespace Pinetime::Applications::Screens; @@ -55,6 +55,26 @@ Music::Music(Pinetime::Applications::DisplayApp* app, Pinetime::Controllers::Mus lv_style_set_bg_color(&btn_style, LV_STATE_DEFAULT, LV_COLOR_AQUA); lv_style_set_bg_opa(&btn_style, LV_STATE_DEFAULT, LV_OPA_50); + btnRewind = lv_btn_create(lv_scr_act(), nullptr); + btnRewind->user_data = this; + lv_obj_set_event_cb(btnRewind, event_handler); + lv_obj_set_size(btnRewind, 76, 76); + lv_obj_align(btnRewind, nullptr, LV_ALIGN_IN_BOTTOM_LEFT, 0, 0); + lv_obj_add_style(btnRewind, LV_STATE_DEFAULT, &btn_style); + label = lv_label_create(btnRewind, nullptr); + lv_label_set_text_static(label, "-10"); + lv_obj_set_hidden(btnRewind, true); + + btnForward = lv_btn_create(lv_scr_act(), nullptr); + btnForward->user_data = this; + lv_obj_set_event_cb(btnForward, event_handler); + lv_obj_set_size(btnForward, 76, 76); + lv_obj_align(btnForward, nullptr, LV_ALIGN_IN_BOTTOM_RIGHT, 0, 0); + lv_obj_add_style(btnForward, LV_STATE_DEFAULT, &btn_style); + label = lv_label_create(btnForward, nullptr); + lv_label_set_text_static(label, "+10"); + lv_obj_set_hidden(btnForward, true); + btnVolDown = lv_btn_create(lv_scr_act(), nullptr); btnVolDown->user_data = this; lv_obj_set_event_cb(btnVolDown, event_handler); @@ -223,10 +243,14 @@ void Music::UpdateLength() { 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_VOLDOWN); - } else if (obj == btnVolUp) { + if (obj == btnForward) { + musicService.event(Controllers::MusicService::EVENT_MUSIC_FORWARD); + } else if (obj == btnRewind) { + musicService.event(Controllers::MusicService::EVENT_MUSIC_REWIND); + } else 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) { @@ -248,25 +272,59 @@ void Music::OnObjectEvent(lv_obj_t* obj, lv_event_t event) { } } +void Music::UpdateButtons() { + switch(currentButton) + { + case BTN_NEXT_PREV: + lv_obj_set_hidden(btnForward, true); + lv_obj_set_hidden(btnRewind, true); + lv_obj_set_hidden(btnVolDown, true); + lv_obj_set_hidden(btnVolUp, true); + lv_obj_set_hidden(btnNext, false); + lv_obj_set_hidden(btnPrev, false); + break; + case BTN_VOL: + lv_obj_set_hidden(btnForward, true); + lv_obj_set_hidden(btnRewind, true); + lv_obj_set_hidden(btnVolDown, false); + lv_obj_set_hidden(btnVolUp, false); + lv_obj_set_hidden(btnNext, true); + lv_obj_set_hidden(btnPrev, true); + break; + case BTN_FOR_REWIND: + lv_obj_set_hidden(btnForward, false); + lv_obj_set_hidden(btnRewind, false); + lv_obj_set_hidden(btnVolDown, true); + lv_obj_set_hidden(btnVolUp, true); + lv_obj_set_hidden(btnNext, true); + lv_obj_set_hidden(btnPrev, true); + break; + default: + lv_obj_set_hidden(btnForward, true); + lv_obj_set_hidden(btnRewind, true); + lv_obj_set_hidden(btnVolDown, true); + lv_obj_set_hidden(btnVolUp, true); + lv_obj_set_hidden(btnNext, false); + lv_obj_set_hidden(btnPrev, false); + break; + } +} + bool Music::OnTouchEvent(Pinetime::Applications::TouchEvents event) { switch (event) { case TouchEvents::SwipeUp: { - lv_obj_set_hidden(btnVolDown, false); - lv_obj_set_hidden(btnVolUp, false); - - lv_obj_set_hidden(btnNext, true); - lv_obj_set_hidden(btnPrev, true); + currentButton++; + if (currentButton > BTN_MAX-1) + currentButton = 0; + UpdateButtons(); return true; } case TouchEvents::SwipeDown: { - if (lv_obj_get_hidden(btnNext)) { - lv_obj_set_hidden(btnNext, false); - lv_obj_set_hidden(btnPrev, false); - lv_obj_set_hidden(btnVolDown, true); - lv_obj_set_hidden(btnVolUp, true); - return true; - } - return false; + currentButton--; + if (currentButton < 0) + currentButton = BTN_MAX-1; + UpdateButtons(); + return true; } case TouchEvents::SwipeLeft: { musicService.event(Controllers::MusicService::EVENT_MUSIC_NEXT); diff --git a/src/displayapp/screens/Music.h b/src/displayapp/screens/Music.h index 258a4020..23e108cf 100644 --- a/src/displayapp/screens/Music.h +++ b/src/displayapp/screens/Music.h @@ -44,11 +44,22 @@ namespace Pinetime { void UpdateLength(); + void UpdateButtons(); + + typedef enum { + BTN_NEXT_PREV, + BTN_VOL, + BTN_FOR_REWIND, + BTN_MAX + } MusicButtons; + lv_obj_t* btnPrev; lv_obj_t* btnPlayPause; lv_obj_t* btnNext; lv_obj_t* btnVolDown; lv_obj_t* btnVolUp; + lv_obj_t* btnForward; + lv_obj_t* btnRewind; lv_obj_t* txtArtist; lv_obj_t* txtTrack; lv_obj_t* txtPlayPause; @@ -79,6 +90,9 @@ namespace Pinetime { lv_task_t* taskRefresh; + /** For knowing which buttons should be shown */ + int currentButton = 0; + /** Watchapp */ }; } From 3504a07f9c0e455a8047b041eb026e0928c961bd Mon Sep 17 00:00:00 2001 From: Dyllan Kobal Date: Sat, 10 Sep 2022 14:46:23 -0400 Subject: [PATCH 2/3] Flipped what the volume up and down buttons do, since I accidentally had them reversed --- src/displayapp/screens/Music.cpp | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/displayapp/screens/Music.cpp b/src/displayapp/screens/Music.cpp index 54ca0e0a..ec991caa 100644 --- a/src/displayapp/screens/Music.cpp +++ b/src/displayapp/screens/Music.cpp @@ -248,9 +248,9 @@ void Music::OnObjectEvent(lv_obj_t* obj, lv_event_t event) { } else if (obj == btnRewind) { musicService.event(Controllers::MusicService::EVENT_MUSIC_REWIND); } else if (obj == btnVolDown) { - musicService.event(Controllers::MusicService::EVENT_MUSIC_VOLUP); - } else if (obj == btnVolUp) { musicService.event(Controllers::MusicService::EVENT_MUSIC_VOLDOWN); + } else if (obj == btnVolUp) { + musicService.event(Controllers::MusicService::EVENT_MUSIC_VOLUP); } else if (obj == btnPrev) { musicService.event(Controllers::MusicService::EVENT_MUSIC_PREV); } else if (obj == btnPlayPause) { From db11bda78588a8256951a4ea68fd452aa6a14645 Mon Sep 17 00:00:00 2001 From: Dyllan Kobal Date: Mon, 17 Oct 2022 18:48:53 -0400 Subject: [PATCH 3/3] Fixed formatting --- src/displayapp/screens/Music.cpp | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/src/displayapp/screens/Music.cpp b/src/displayapp/screens/Music.cpp index ec991caa..4acc34b3 100644 --- a/src/displayapp/screens/Music.cpp +++ b/src/displayapp/screens/Music.cpp @@ -295,9 +295,9 @@ void Music::UpdateButtons() { lv_obj_set_hidden(btnForward, false); lv_obj_set_hidden(btnRewind, false); lv_obj_set_hidden(btnVolDown, true); - lv_obj_set_hidden(btnVolUp, true); - lv_obj_set_hidden(btnNext, true); - lv_obj_set_hidden(btnPrev, true); + lv_obj_set_hidden(btnVolUp, true); + lv_obj_set_hidden(btnNext, true); + lv_obj_set_hidden(btnPrev, true); break; default: lv_obj_set_hidden(btnForward, true);