Login
1 branch 0 tags
Ben (Desktop/Arch) Limited podcast episode list to 16 entries b36bce8 29 days ago 80 Commits
moon / src / screens / home_screen.c
#include "home_screen.h"
#include <stdlib.h>
#include "../topbar.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);
	}
}

static void cancel_event_cb(lv_event_t* e) {
	(void)e;
	// Home is the root screen, no back navigation
}

static lv_obj_t* add_home_button(lv_obj_t* list,
                                 const char* label,
                                 screen_type_t screen) {
	lv_obj_t* btn = bvs_list_add_nav_button(list, NULL, label, list_event_cb,
	                                        NULL, cancel_event_cb);
	lv_obj_set_user_data(btn, (void*)(uintptr_t)screen);
	return btn;
}

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

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

	// Add menu entries
	lv_obj_t* now_playing_btn =
	    add_home_button(state->list, "Now Playing", SCREEN_NOW_PLAYING);
	add_home_button(state->list, "Music", SCREEN_MUSIC);
	add_home_button(state->list, "Podcasts", SCREEN_PODCASTS);
	add_home_button(state->list, "Audiobooks", SCREEN_AUDIOBOOKS);
	add_home_button(state->list, "Settings", SCREEN_SETTINGS);

	lv_group_focus_obj(now_playing_btn);

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

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

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