Reworked and added the user feedback callback function to make the API consistent, implemented it on some screens/app already
This commit is contained in:
parent
8b16cf98aa
commit
fd0f44e888
@ -46,12 +46,16 @@ static void cleanup_event_cb(lv_event_t *e)
|
||||
|
||||
static void music_player_button_click_event_cb(lv_event_t *e)
|
||||
{
|
||||
MusicPlayerScreen_t *musicPlayerScreen = e->user_data;
|
||||
MusicPlaybackCtrlAction_e action = (MusicPlaybackCtrlAction_e)lv_obj_get_user_data(e->target);
|
||||
MusicPlayerScreen_t *musicPlayerScreen = lv_event_get_user_data(e);
|
||||
MusicPlaybackCtrlAction_e action = (MusicPlaybackCtrlAction_e)lv_obj_get_user_data(lv_event_get_target(e));
|
||||
|
||||
LV_LOG_USER("Action is : %u, code is : %u", action, e->code);
|
||||
if(musicPlayerScreen->musicPlaybackCtrlCb)
|
||||
{
|
||||
// Let's give the user some feedback by calling the callback if one is registered
|
||||
if(musicPlayerScreen->musicPlayerUserFeedbackCb)
|
||||
musicPlayerScreen->musicPlayerUserFeedbackCb();
|
||||
|
||||
if(action == MUSIC_CONTROL_PLAY)
|
||||
{
|
||||
MusicPlaybackCtrlAction_e stateToApply = musicPlayerScreen->currentPlayState == MUSIC_CONTROL_PLAY ? MUSIC_CONTROL_PAUSE : MUSIC_CONTROL_PLAY;
|
||||
@ -144,6 +148,17 @@ void music_player_screen_register_music_player_time_ref_ms_cb(MusicPlayerScreen_
|
||||
musicPlayerScreen->musicPlayerTimeRefmsCb = musicPlayerTimeRefmsCb;
|
||||
}
|
||||
|
||||
void music_player_screen_register_user_feedback_cb(MusicPlayerScreen_t * const musicPlayerScreen, MusicPlayerUserFeedbackCb_t musicPlayerUserFeedbackCb)
|
||||
{
|
||||
if(!musicPlayerScreen)
|
||||
{
|
||||
LV_LOG_ERROR("NULL pointer given !");
|
||||
return;
|
||||
}
|
||||
|
||||
musicPlayerScreen->musicPlayerUserFeedbackCb = musicPlayerUserFeedbackCb;
|
||||
}
|
||||
|
||||
void music_player_screen_notify_BLE_connection_state(MusicPlayerScreen_t * const musicPlayerScreen, bool connected)
|
||||
{
|
||||
if(!musicPlayerScreen)
|
||||
|
@ -20,6 +20,7 @@ typedef enum MusicPlaybackCtrlAction
|
||||
|
||||
typedef void (*MusicPlaybackCtrlCb_t)(MusicPlaybackCtrlAction_e musicPlaybackCtrlAction);
|
||||
typedef uint32_t (*MusicPlayerTimeRefmsCb_t)(void);
|
||||
typedef void (*MusicPlayerUserFeedbackCb_t)(void);
|
||||
|
||||
typedef struct PlayerButton
|
||||
{
|
||||
@ -51,6 +52,7 @@ typedef struct MusicPlayerScreen
|
||||
//Should not be erased attributes
|
||||
MusicPlaybackCtrlCb_t musicPlaybackCtrlCb;
|
||||
MusicPlayerTimeRefmsCb_t musicPlayerTimeRefmsCb;
|
||||
MusicPlayerUserFeedbackCb_t musicPlayerUserFeedbackCb;
|
||||
MusicPlaybackCtrlAction_e currentPlayState;
|
||||
char titleText[60];
|
||||
char artistText[30];
|
||||
@ -97,6 +99,17 @@ void music_player_screen_register_music_playback_control_cb(MusicPlayerScreen_t
|
||||
*/
|
||||
void music_player_screen_register_music_player_time_ref_ms_cb(MusicPlayerScreen_t * const musicPlayerScreen, MusicPlayerTimeRefmsCb_t musicPlayerTimeRefmsCb);
|
||||
|
||||
/**
|
||||
* @brief Registers a callback functions which will be called every time a user feedback should
|
||||
* be made. In this case, every time a player's button is clicked, the callback will be called.
|
||||
* This enables the app to react to user interaction.
|
||||
*
|
||||
* @param musicPlayerScreen a pointer to the music player screen's context structure.
|
||||
* @param musicPlayerUserFeedbackCb the callback of type @ref MusicPlayerUserFeedbackCb_t to register having
|
||||
* the following signature : void(void).
|
||||
*/
|
||||
void music_player_screen_register_user_feedback_cb(MusicPlayerScreen_t * const musicPlayerScreen, MusicPlayerUserFeedbackCb_t musicPlayerUserFeedbackCb);
|
||||
|
||||
/**
|
||||
* @brief Tells the music player whether the watch is connected to a smartphone through a BLE connection or not.
|
||||
* It, for example, enables the music player to grey the music controls (buttons) out if there is no established BLE connection.
|
||||
|
@ -856,6 +856,17 @@ void settings_screen_register_on_state_change_cb(SettingsScreen_t * const settin
|
||||
settingsScreen->settingsScreenOnStateChangeCb = settingsScreenOnStateChangeCb;
|
||||
}
|
||||
|
||||
void settings_screen_register_user_feedback_cb(SettingsScreen_t * const settingsScreen, SettingsScreenUserFeedbackCb_t settingsScreenUserFeedbackCb)
|
||||
{
|
||||
if(!settingsScreen)
|
||||
{
|
||||
LV_LOG_ERROR("NULL pointer given !");
|
||||
return;
|
||||
}
|
||||
|
||||
settingsScreen->settingsScreenUserFeedbackCb = settingsScreenUserFeedbackCb;
|
||||
}
|
||||
|
||||
void settings_screen_register_API_interface(SettingsScreen_t * const settingsScreen, SettingsScreenAPIInterface_t * const settingsScreenAPIInterface)
|
||||
{
|
||||
if(!settingsScreen)
|
||||
@ -980,6 +991,11 @@ static void _simulate_side_screen_item_click(SettingsScreen_t * const settingsSc
|
||||
|
||||
settingsScreen->last_selected_item = item;
|
||||
|
||||
// Let's give some user feedback that a category was selected by calling the
|
||||
// callback if one is registered
|
||||
if(settingsScreen->settingsScreenUserFeedbackCb)
|
||||
settingsScreen->settingsScreenUserFeedbackCb();
|
||||
|
||||
lv_obj_clean(settingsScreen->side_screen);
|
||||
|
||||
if(item == settingsScreen->time_and_date_item)
|
||||
|
@ -56,6 +56,7 @@ typedef enum SettingsScreenCategory
|
||||
} SettingsScreenCategory_e;
|
||||
|
||||
typedef void (*SettingsScreenOnStateChangeCb_t)(SettingsScreenState_e settingsScreenState, SettingsScreenCategory_e settingsScreenCategory);
|
||||
typedef void (*SettingsScreenUserFeedbackCb_t)(void);
|
||||
|
||||
typedef struct SettingsScreen
|
||||
{
|
||||
@ -132,6 +133,7 @@ typedef struct SettingsScreen
|
||||
/* Other */
|
||||
lv_timer_t *about_refresh_timer;
|
||||
SettingsScreenOnStateChangeCb_t settingsScreenOnStateChangeCb;
|
||||
SettingsScreenUserFeedbackCb_t settingsScreenUserFeedbackCb;
|
||||
} SettingsScreen_t;
|
||||
|
||||
void settings_screen_init(SettingsScreen_t * const settingsScreen);
|
||||
@ -139,13 +141,23 @@ void settings_screen_init(SettingsScreen_t * const settingsScreen);
|
||||
/**
|
||||
* @brief Registers a callback function which will be called every time the state of the application changes ie : is opened or closed.
|
||||
* This callback should be used to initialize and deinitialize needed devices drivers like the magnetometer or the temperature sensor.
|
||||
* @note The state of the application is passed as a parameter or the callback function.
|
||||
* @note The state of the application is passed as a parameter of the callback function.
|
||||
*
|
||||
* @param settingsScreen a pointer to the settings screen object structure.
|
||||
* @param settingsScreen a pointer to the previously initialized settings screen object structure.
|
||||
* @param SettingsScreenOnStateChangeCb the callback of type @ref SettingsScreenOnStateChangeCb_t to register.
|
||||
*/
|
||||
void settings_screen_register_on_state_change_cb(SettingsScreen_t * const settingsScreen, SettingsScreenOnStateChangeCb_t SettingsScreenOnStateChangeCb);
|
||||
|
||||
/**
|
||||
* @brief Registers a callback functions which will be called every time a user feedback should
|
||||
* be made. In this case, every time a UI element is clicked, the callback will be called.
|
||||
* This enables the app to react to user interaction.
|
||||
*
|
||||
* @param settingsScreen a pointer to the previously initialized settings screen object structure.
|
||||
* @param settingsScreenUserFeedbackCb the callback of type @ref SettingsScreenUserFeedbackCb_t to register.
|
||||
*/
|
||||
void settings_screen_register_user_feedback_cb(SettingsScreen_t * const settingsScreen, SettingsScreenUserFeedbackCb_t settingsScreenUserFeedbackCb);
|
||||
|
||||
void settings_screen_register_API_interface(SettingsScreen_t * const settingsScreen, SettingsScreenAPIInterface_t * const settingsScreenAPIInterface);
|
||||
|
||||
void settings_screen_create(SettingsScreen_t * const settingsScreen);
|
||||
|
Loading…
Reference in New Issue
Block a user