Finished the UI of the music player, still need to properly increment the current track play position
This commit is contained in:
parent
66fa33cde1
commit
890e461b90
@ -118,9 +118,10 @@ int APIENTRY WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, LPSTR szCmdLi
|
||||
music_player_screen_init(&musicPlayerScreen);
|
||||
music_player_screen_register_music_playback_control_cb(&musicPlayerScreen, &(musicPlaybackCtrlCb));
|
||||
music_player_screen_set_playing_music_title_and_artist(&musicPlayerScreen, "Sun Is Up Hoho Haha", "Inna");
|
||||
music_player_screen_set_music_duration(&musicPlayerScreen, 5896);
|
||||
music_player_screen_set_music_position(&musicPlayerScreen, 122);
|
||||
music_player_screen_set_music_playing_state(&musicPlayerScreen, MUSIC_CONTROL_PLAY);
|
||||
music_player_screen_notify_BLE_connection_state(&musicPlayerScreen, true);
|
||||
music_player_screen_set_music_duration(&musicPlayerScreen, 3*60+42);
|
||||
music_player_screen_set_music_position(&musicPlayerScreen, 24);
|
||||
//music_player_screen_set_music_playing_state(&musicPlayerScreen, MUSIC_CONTROL_PLAY);
|
||||
|
||||
altimeter_screen_register_measurement_cb(&altimeterScreen, &(alti_meas_cb));
|
||||
|
||||
|
@ -1,7 +1,9 @@
|
||||
#include "music_player_screen.h"
|
||||
#include "menu_screen.h"
|
||||
#include <stdio.h>
|
||||
#include <string.h>
|
||||
#include "music_player_screen.h"
|
||||
#include "menu_screen.h"
|
||||
|
||||
void _set_UI_no_ble_connection(MusicPlayerScreen_t * const musicPlayerScreen, bool connected);
|
||||
|
||||
static void gesture_event_cb(lv_event_t *e)
|
||||
{
|
||||
@ -67,6 +69,13 @@ static void music_player_button_click_event_cb(lv_event_t *e)
|
||||
}
|
||||
}
|
||||
|
||||
static void track_position_update_cb(lv_timer_t *timer)
|
||||
{
|
||||
MusicPlayerScreen_t *musicPlayerScreen = timer->user_data;
|
||||
|
||||
music_player_screen_set_music_position(musicPlayerScreen, ++musicPlayerScreen->currentMusicPosition);
|
||||
}
|
||||
|
||||
void music_player_screen_init(MusicPlayerScreen_t * const musicPlayerScreen)
|
||||
{
|
||||
if(!musicPlayerScreen)
|
||||
@ -90,6 +99,22 @@ void music_player_screen_register_music_playback_control_cb(MusicPlayerScreen_t
|
||||
musicPlayerScreen->musicPlaybackCtrlCb = musicPlaybackCtrlCb;
|
||||
}
|
||||
|
||||
void music_player_screen_notify_BLE_connection_state(MusicPlayerScreen_t * const musicPlayerScreen, bool connected)
|
||||
{
|
||||
if(!musicPlayerScreen)
|
||||
{
|
||||
LV_LOG_ERROR("NULL pointer given !");
|
||||
return;
|
||||
}
|
||||
|
||||
if(musicPlayerScreen->ble_connection_state != connected)
|
||||
{
|
||||
musicPlayerScreen->ble_connection_state = connected;
|
||||
if(musicPlayerScreen->display != NULL)
|
||||
_set_UI_no_ble_connection(musicPlayerScreen, musicPlayerScreen->ble_connection_state);
|
||||
}
|
||||
}
|
||||
|
||||
void music_player_screen_set_playing_music_title_and_artist(MusicPlayerScreen_t * const musicPlayerScreen, const char *title, const char *artist)
|
||||
{
|
||||
if(!musicPlayerScreen)
|
||||
@ -176,6 +201,10 @@ void music_player_screen_set_music_playing_state(MusicPlayerScreen_t * const mus
|
||||
if(playingState != MUSIC_CONTROL_PAUSE && playingState != MUSIC_CONTROL_PLAY) return;
|
||||
|
||||
musicPlayerScreen->currentPlayState = playingState;
|
||||
if(musicPlayerScreen->currentPlayState == MUSIC_CONTROL_PLAY)
|
||||
lv_timer_resume(musicPlayerScreen->timePositionTimer);
|
||||
else
|
||||
lv_timer_pause(musicPlayerScreen->timePositionTimer);
|
||||
|
||||
if(!musicPlayerScreen->playPauseBtn.label) return;
|
||||
|
||||
@ -209,7 +238,18 @@ void music_player_screen_create(MusicPlayerScreen_t * const musicPlayerScreen)
|
||||
musicPlayerScreen->display = NULL;
|
||||
}
|
||||
musicPlayerScreen->display = lv_obj_create(NULL);
|
||||
lv_obj_set_style_bg_color(musicPlayerScreen->display, lv_color_black(), LV_PART_MAIN);
|
||||
lv_obj_set_style_bg_color(musicPlayerScreen->display, lv_color_white(), LV_PART_MAIN);
|
||||
lv_obj_clear_flag(musicPlayerScreen->display, LV_OBJ_FLAG_SCROLLABLE);
|
||||
|
||||
//Black circled background
|
||||
lv_obj_t *blackCircle = lv_obj_create(musicPlayerScreen->display);
|
||||
lv_obj_set_style_bg_color(blackCircle, lv_color_black(), LV_PART_MAIN);
|
||||
lv_obj_set_style_border_width(blackCircle, 0, LV_PART_MAIN);
|
||||
lv_obj_set_style_pad_all(blackCircle, 0, LV_PART_MAIN);
|
||||
lv_obj_set_style_radius(blackCircle, LV_RADIUS_CIRCLE, LV_PART_MAIN);
|
||||
//The +1 to the hor and ver res is used to get rid of graphical issue... (1px white background bleeding on the black one)
|
||||
lv_obj_set_size(blackCircle, lv_disp_get_ver_res(NULL)+1, lv_disp_get_hor_res(NULL)+1);
|
||||
lv_obj_center(blackCircle);
|
||||
|
||||
//Let's create the UI for this amazing music player ...
|
||||
//Play/Pause button
|
||||
@ -234,62 +274,62 @@ void music_player_screen_create(MusicPlayerScreen_t * const musicPlayerScreen)
|
||||
lv_obj_add_event_cb(musicPlayerScreen->playPauseBtn.button, &(music_player_button_click_event_cb), LV_EVENT_CLICKED, musicPlayerScreen);
|
||||
|
||||
//Previous track button
|
||||
lv_obj_t *previousBtn = lv_btn_create(musicPlayerScreen->display);
|
||||
lv_obj_set_size(previousBtn, 47, 47);
|
||||
lv_obj_set_style_radius(previousBtn, LV_RADIUS_CIRCLE, LV_PART_MAIN);
|
||||
lv_obj_align_to(previousBtn, musicPlayerScreen->playPauseBtn.label, LV_ALIGN_OUT_LEFT_MID, -25, 0);
|
||||
musicPlayerScreen->previousBtn = lv_btn_create(musicPlayerScreen->display);
|
||||
lv_obj_set_size(musicPlayerScreen->previousBtn, 47, 47);
|
||||
lv_obj_set_style_radius(musicPlayerScreen->previousBtn, LV_RADIUS_CIRCLE, LV_PART_MAIN);
|
||||
lv_obj_align_to(musicPlayerScreen->previousBtn, musicPlayerScreen->playPauseBtn.label, LV_ALIGN_OUT_LEFT_MID, -25, 0);
|
||||
|
||||
lv_obj_t *previousBtnLabel = lv_label_create(previousBtn);
|
||||
lv_obj_t *previousBtnLabel = lv_label_create(musicPlayerScreen->previousBtn);
|
||||
lv_label_set_text_static(previousBtnLabel, LV_SYMBOL_LEFT LV_SYMBOL_LEFT);
|
||||
lv_obj_set_style_text_font(previousBtnLabel, &lv_font_montserrat_24, LV_PART_MAIN);
|
||||
lv_obj_center(previousBtnLabel);
|
||||
|
||||
lv_obj_set_user_data(previousBtn, (void *)MUSIC_CONTROL_PREVIOUS);
|
||||
lv_obj_add_event_cb(previousBtn, &(music_player_button_click_event_cb), LV_EVENT_SHORT_CLICKED, musicPlayerScreen);
|
||||
lv_obj_add_event_cb(previousBtn, &(music_player_button_click_event_cb), LV_EVENT_LONG_PRESSED, musicPlayerScreen);
|
||||
lv_obj_set_user_data(musicPlayerScreen->previousBtn, (void *)MUSIC_CONTROL_PREVIOUS);
|
||||
lv_obj_add_event_cb(musicPlayerScreen->previousBtn, &(music_player_button_click_event_cb), LV_EVENT_SHORT_CLICKED, musicPlayerScreen);
|
||||
lv_obj_add_event_cb(musicPlayerScreen->previousBtn, &(music_player_button_click_event_cb), LV_EVENT_LONG_PRESSED, musicPlayerScreen);
|
||||
|
||||
//Next track button
|
||||
lv_obj_t *nextBtn = lv_btn_create(musicPlayerScreen->display);
|
||||
lv_obj_set_size(nextBtn, 47, 47);
|
||||
lv_obj_set_style_radius(nextBtn, LV_RADIUS_CIRCLE, LV_PART_MAIN);
|
||||
lv_obj_align_to(nextBtn, musicPlayerScreen->playPauseBtn.label, LV_ALIGN_OUT_RIGHT_MID, 25, 0);
|
||||
musicPlayerScreen->nextBtn = lv_btn_create(musicPlayerScreen->display);
|
||||
lv_obj_set_size(musicPlayerScreen->nextBtn, 47, 47);
|
||||
lv_obj_set_style_radius(musicPlayerScreen->nextBtn, LV_RADIUS_CIRCLE, LV_PART_MAIN);
|
||||
lv_obj_align_to(musicPlayerScreen->nextBtn, musicPlayerScreen->playPauseBtn.label, LV_ALIGN_OUT_RIGHT_MID, 25, 0);
|
||||
|
||||
lv_obj_t *nextBtnLabel = lv_label_create(nextBtn);
|
||||
lv_obj_t *nextBtnLabel = lv_label_create(musicPlayerScreen->nextBtn);
|
||||
lv_label_set_text_static(nextBtnLabel, LV_SYMBOL_RIGHT LV_SYMBOL_RIGHT);
|
||||
lv_obj_set_style_text_font(nextBtnLabel, &lv_font_montserrat_24, LV_PART_MAIN);
|
||||
lv_obj_center(nextBtnLabel);
|
||||
|
||||
lv_obj_set_user_data(nextBtn, (void *)MUSIC_CONTROL_NEXT);
|
||||
lv_obj_add_event_cb(nextBtn, &(music_player_button_click_event_cb), LV_EVENT_SHORT_CLICKED, musicPlayerScreen);
|
||||
lv_obj_add_event_cb(nextBtn, &(music_player_button_click_event_cb), LV_EVENT_LONG_PRESSED, musicPlayerScreen);
|
||||
lv_obj_set_user_data(musicPlayerScreen->nextBtn, (void *)MUSIC_CONTROL_NEXT);
|
||||
lv_obj_add_event_cb(musicPlayerScreen->nextBtn, &(music_player_button_click_event_cb), LV_EVENT_SHORT_CLICKED, musicPlayerScreen);
|
||||
lv_obj_add_event_cb(musicPlayerScreen->nextBtn, &(music_player_button_click_event_cb), LV_EVENT_LONG_PRESSED, musicPlayerScreen);
|
||||
|
||||
//Volume down button
|
||||
lv_obj_t *volumeDownBtn = lv_btn_create(musicPlayerScreen->display);
|
||||
lv_obj_set_size(volumeDownBtn, 47, 47);
|
||||
lv_obj_set_style_radius(volumeDownBtn, LV_RADIUS_CIRCLE, LV_PART_MAIN);
|
||||
lv_obj_align_to(volumeDownBtn, previousBtn, LV_ALIGN_BOTTOM_MID, 25, 50);
|
||||
musicPlayerScreen->volumeDownBtn = lv_btn_create(musicPlayerScreen->display);
|
||||
lv_obj_set_size(musicPlayerScreen->volumeDownBtn, 47, 47);
|
||||
lv_obj_set_style_radius(musicPlayerScreen->volumeDownBtn, LV_RADIUS_CIRCLE, LV_PART_MAIN);
|
||||
lv_obj_align_to(musicPlayerScreen->volumeDownBtn, musicPlayerScreen->previousBtn, LV_ALIGN_BOTTOM_MID, 25, 50);
|
||||
|
||||
lv_obj_t *volumeDownBtnLabel = lv_label_create(volumeDownBtn);
|
||||
lv_obj_t *volumeDownBtnLabel = lv_label_create(musicPlayerScreen->volumeDownBtn);
|
||||
lv_label_set_text_static(volumeDownBtnLabel, LV_SYMBOL_VOLUME_MID);
|
||||
lv_obj_set_style_text_font(volumeDownBtnLabel, &lv_font_montserrat_24, LV_PART_MAIN);
|
||||
lv_obj_center(volumeDownBtnLabel);
|
||||
|
||||
lv_obj_set_user_data(volumeDownBtn, (void *)MUSIC_CONTROL_VOLUMEDOWN);
|
||||
lv_obj_add_event_cb(volumeDownBtn, &(music_player_button_click_event_cb), LV_EVENT_CLICKED, musicPlayerScreen);
|
||||
lv_obj_set_user_data(musicPlayerScreen->volumeDownBtn, (void *)MUSIC_CONTROL_VOLUMEDOWN);
|
||||
lv_obj_add_event_cb(musicPlayerScreen->volumeDownBtn, &(music_player_button_click_event_cb), LV_EVENT_CLICKED, musicPlayerScreen);
|
||||
|
||||
//Volume up button
|
||||
lv_obj_t *volumeUpBtn = lv_btn_create(musicPlayerScreen->display);
|
||||
lv_obj_set_size(volumeUpBtn, 47, 47);
|
||||
lv_obj_set_style_radius(volumeUpBtn, LV_RADIUS_CIRCLE, LV_PART_MAIN);
|
||||
lv_obj_align_to(volumeUpBtn, nextBtn, LV_ALIGN_BOTTOM_MID, -25, 50);
|
||||
musicPlayerScreen->volumeUpBtn = lv_btn_create(musicPlayerScreen->display);
|
||||
lv_obj_set_size(musicPlayerScreen->volumeUpBtn, 47, 47);
|
||||
lv_obj_set_style_radius(musicPlayerScreen->volumeUpBtn, LV_RADIUS_CIRCLE, LV_PART_MAIN);
|
||||
lv_obj_align_to(musicPlayerScreen->volumeUpBtn, musicPlayerScreen->nextBtn, LV_ALIGN_BOTTOM_MID, -25, 50);
|
||||
|
||||
lv_obj_t *volumeUpBtnLabel = lv_label_create(volumeUpBtn);
|
||||
lv_obj_t *volumeUpBtnLabel = lv_label_create(musicPlayerScreen->volumeUpBtn);
|
||||
lv_label_set_text_static(volumeUpBtnLabel, LV_SYMBOL_VOLUME_MAX);
|
||||
lv_obj_set_style_text_font(volumeUpBtnLabel, &lv_font_montserrat_24, LV_PART_MAIN);
|
||||
lv_obj_center(volumeUpBtnLabel);
|
||||
|
||||
lv_obj_set_user_data(volumeUpBtn, (void *)MUSIC_CONTROL_VOLUMEUP);
|
||||
lv_obj_add_event_cb(volumeUpBtn, &(music_player_button_click_event_cb), LV_EVENT_CLICKED, musicPlayerScreen);
|
||||
lv_obj_set_user_data(musicPlayerScreen->volumeUpBtn, (void *)MUSIC_CONTROL_VOLUMEUP);
|
||||
lv_obj_add_event_cb(musicPlayerScreen->volumeUpBtn, &(music_player_button_click_event_cb), LV_EVENT_CLICKED, musicPlayerScreen);
|
||||
|
||||
//Track title
|
||||
if(musicPlayerScreen->titleLabel)
|
||||
@ -360,6 +400,16 @@ void music_player_screen_create(MusicPlayerScreen_t * const musicPlayerScreen)
|
||||
music_player_screen_set_music_duration(musicPlayerScreen, musicPlayerScreen->currentMusicDuration);
|
||||
music_player_screen_set_music_position(musicPlayerScreen, musicPlayerScreen->currentMusicPosition);
|
||||
|
||||
_set_UI_no_ble_connection(musicPlayerScreen, musicPlayerScreen->ble_connection_state);
|
||||
|
||||
if(musicPlayerScreen->timePositionTimer)
|
||||
{
|
||||
LV_LOG_ERROR("timePositionTimer should be NULL here !");
|
||||
lv_timer_del(musicPlayerScreen->timePositionTimer);
|
||||
musicPlayerScreen->timePositionTimer = NULL;
|
||||
}
|
||||
musicPlayerScreen->timePositionTimer = lv_timer_create(&(track_position_update_cb), 1000, musicPlayerScreen);
|
||||
lv_timer_pause(musicPlayerScreen->timePositionTimer);
|
||||
|
||||
//We register the event callback to handle gestures
|
||||
lv_obj_add_event_cb(musicPlayerScreen->display, &(gesture_event_cb), LV_EVENT_GESTURE, musicPlayerScreen);
|
||||
@ -374,6 +424,31 @@ void music_player_screen_destroy(MusicPlayerScreen_t * const musicPlayerScreen)
|
||||
LV_LOG_ERROR("NULL pointer given !");
|
||||
return;
|
||||
}
|
||||
|
||||
lv_timer_del(musicPlayerScreen->timePositionTimer);
|
||||
memset(musicPlayerScreen, 0, offsetof(MusicPlayerScreen_t, musicPlaybackCtrlCb));
|
||||
}
|
||||
|
||||
void _set_UI_no_ble_connection(MusicPlayerScreen_t * const musicPlayerScreen, bool connected)
|
||||
{
|
||||
if(connected)
|
||||
{
|
||||
lv_obj_clear_state(musicPlayerScreen->playPauseBtn.button, LV_STATE_DISABLED);
|
||||
lv_obj_clear_state(musicPlayerScreen->previousBtn, LV_STATE_DISABLED);
|
||||
lv_obj_clear_state(musicPlayerScreen->nextBtn, LV_STATE_DISABLED);
|
||||
lv_obj_clear_state(musicPlayerScreen->volumeDownBtn, LV_STATE_DISABLED);
|
||||
lv_obj_clear_state(musicPlayerScreen->volumeUpBtn, LV_STATE_DISABLED);
|
||||
lv_label_set_text_static(musicPlayerScreen->titleLabel, musicPlayerScreen->titleText);
|
||||
lv_obj_clear_flag(musicPlayerScreen->artistLabel, LV_OBJ_FLAG_HIDDEN);
|
||||
}
|
||||
else
|
||||
{
|
||||
lv_obj_add_state(musicPlayerScreen->playPauseBtn.button, LV_STATE_DISABLED);
|
||||
lv_obj_add_state(musicPlayerScreen->previousBtn, LV_STATE_DISABLED);
|
||||
lv_obj_add_state(musicPlayerScreen->nextBtn, LV_STATE_DISABLED);
|
||||
lv_obj_add_state(musicPlayerScreen->volumeDownBtn, LV_STATE_DISABLED);
|
||||
lv_obj_add_state(musicPlayerScreen->volumeUpBtn, LV_STATE_DISABLED);
|
||||
lv_label_set_text_static(musicPlayerScreen->titleLabel,"\t\t\t\t\t\tPhone not connected !");
|
||||
lv_obj_set_style_bg_color(musicPlayerScreen->titleLabel, lv_color_black(), LV_PART_MAIN);
|
||||
lv_obj_add_flag(musicPlayerScreen->artistLabel, LV_OBJ_FLAG_HIDDEN);
|
||||
}
|
||||
}
|
||||
|
@ -36,10 +36,15 @@ typedef struct MusicPlayerScreen
|
||||
//Can be erased attributes
|
||||
lv_obj_t *display;
|
||||
PlayerButton_t playPauseBtn;
|
||||
lv_obj_t *previousBtn;
|
||||
lv_obj_t *nextBtn;
|
||||
lv_obj_t *volumeDownBtn;
|
||||
lv_obj_t *volumeUpBtn;
|
||||
lv_obj_t *playbackArc;
|
||||
lv_obj_t *titleLabel;
|
||||
lv_obj_t *artistLabel;
|
||||
TimeLabel_t positionTimeLabel, durationTimeLabel;
|
||||
lv_timer_t *timePositionTimer;
|
||||
//Should not be erased attributes
|
||||
MusicPlaybackCtrlCb_t musicPlaybackCtrlCb;
|
||||
MusicPlaybackCtrlAction_e currentPlayState;
|
||||
@ -47,12 +52,15 @@ typedef struct MusicPlayerScreen
|
||||
char artistText[30];
|
||||
uint16_t currentMusicDuration; //The currently playing music's total duration in seconds.
|
||||
uint16_t currentMusicPosition; //The currently playing music's cursor position in seconds.
|
||||
bool ble_connection_state;
|
||||
} MusicPlayerScreen_t;
|
||||
|
||||
void music_player_screen_init(MusicPlayerScreen_t * const musicPlayerScreen);
|
||||
|
||||
void music_player_screen_register_music_playback_control_cb(MusicPlayerScreen_t * const musicPlayerScreen, MusicPlaybackCtrlCb_t musicPlaybackCtrlCb);
|
||||
|
||||
void music_player_screen_notify_BLE_connection_state(MusicPlayerScreen_t * const musicPlayerScreen, bool connected);
|
||||
|
||||
void music_player_screen_set_playing_music_title_and_artist(MusicPlayerScreen_t * const musicPlayerScreen, const char *title, const char *artist);
|
||||
|
||||
void music_player_screen_set_music_duration(MusicPlayerScreen_t * const musicPlayerScreen, uint16_t durationInSeconds);
|
||||
|
Loading…
Reference in New Issue
Block a user