Login
1 branch 0 tags
Ben (Desktop/Arch) Removed placeholder games section d4023dd 1 month ago 47 Commits
moon / firmware / src / screens / home_screen.c
#include "home_screen.h"
#include "../topbar.h"
#include "music_screen.h"
#include <stdlib.h>

static void list_event_cb(lv_event_t *e) {
    lv_event_code_t code = lv_event_get_code(e);
    if (code == LV_EVENT_CLICKED) {
        lv_obj_t *btn = lv_event_get_target(e);
        screen_type_t screen = (screen_type_t)(uintptr_t)lv_obj_get_user_data(btn);
        navigate_to(screen);
    }
}

ui_state_t setup_home_screen(void) {
    home_screen_state_t *state = calloc(1, sizeof(home_screen_state_t));

    state->list = bvs_list_create();
    topbar_set_title("Onigiri");

    // Add menu entries
    lv_obj_t *now_playing_btn = bvs_list_add_button(state->list, NULL, "Now Playing");
    lv_obj_set_user_data(now_playing_btn, (void *)(uintptr_t)SCREEN_NOW_PLAYING);
    lv_obj_add_event_cb(now_playing_btn, list_event_cb, LV_EVENT_CLICKED, NULL);

    lv_obj_t *music_btn = bvs_list_add_button(state->list, NULL, "Music");
    lv_obj_set_user_data(music_btn, (void *)(uintptr_t)SCREEN_MUSIC);
    lv_obj_add_event_cb(music_btn, list_event_cb, LV_EVENT_CLICKED, NULL);

    lv_obj_t *podcasts_btn = bvs_list_add_button(state->list, NULL, "Podcasts");
    lv_obj_t *audiobooks_btn = bvs_list_add_button(state->list, NULL, "Audiobooks");
    lv_obj_set_user_data(audiobooks_btn, (void *)(uintptr_t)SCREEN_AUDIOBOOKS);
    lv_obj_add_event_cb(audiobooks_btn, list_event_cb, LV_EVENT_CLICKED, NULL);

    lv_obj_t *settings_btn = bvs_list_add_button(state->list, NULL, "Settings");
    lv_obj_set_user_data(settings_btn, (void *)(uintptr_t)SCREEN_SETTINGS);
    lv_obj_add_event_cb(settings_btn, list_event_cb, LV_EVENT_CLICKED, NULL);

    // Add all buttons to group for keyboard navigation
    lv_group_add_obj(lv_group_get_default(), now_playing_btn);
    lv_group_add_obj(lv_group_get_default(), music_btn);
    lv_group_add_obj(lv_group_get_default(), podcasts_btn);
    lv_group_add_obj(lv_group_get_default(), audiobooks_btn);
    lv_group_add_obj(lv_group_get_default(), settings_btn);
    lv_group_focus_obj(music_btn);

    return (ui_state_t){.type = SCREEN_HOME, .home = state};
}

void free_home_screen(home_screen_state_t *state) {
    if (!state) return;

    bvs_list_clear(state->list);
    free(state);
}

void update_home_screen(home_screen_state_t *state) {
    (void)state;  // LVGL handles updates via timer
}