788 lines
20 KiB
C
788 lines
20 KiB
C
#include "ui/ui.h"
|
|
#include "app_config.h"
|
|
#include "ui/ui_style.h"
|
|
#include "ui/ui_api.h"
|
|
#include "app_task.h"
|
|
#include "system/timer.h"
|
|
#include "key_event_deal.h"
|
|
#include "audio_config.h"
|
|
#include "jiffies.h"
|
|
#include "app_power_manage.h"
|
|
#include "asm/charge.h"
|
|
#include "../lyrics_api.h"
|
|
#include "audio_dec_file.h"
|
|
#include "music/music_player.h"
|
|
#ifndef CONFIG_MEDIA_NEW_ENABLE
|
|
#include "application/audio_eq_drc_apply.h"
|
|
#else
|
|
#include "audio_eq.h"
|
|
#endif
|
|
|
|
|
|
|
|
#if (TCFG_UI_ENABLE&&(CONFIG_UI_STYLE == STYLE_JL_SOUNDBOX))
|
|
|
|
#define STYLE_NAME JL
|
|
|
|
extern int ui_hide_main(int id);
|
|
extern int ui_show_main(int id);
|
|
extern void key_ui_takeover(u8 on);
|
|
extern void power_off_deal(struct sys_event *event, u8 step);
|
|
extern const char *music_file_get_cur_name(int *len, int *is_unicode);
|
|
|
|
typedef struct _MUSIC_UI_VAR {
|
|
u8 start: 1;
|
|
u8 menu: 1;
|
|
u8 eq_mode: 3;
|
|
u8 cycle_mode: 3;
|
|
u8 disp_lrc;
|
|
int timer;
|
|
int total_time;
|
|
int file_total;
|
|
int cur_num;
|
|
} MUSIC_UI_VAR;
|
|
|
|
|
|
static MUSIC_UI_VAR *__this = NULL;
|
|
static u8 enter_music_mode = 0;
|
|
static u16 disp_time = 0;
|
|
|
|
static int music_start(const char *type, u32 arg)
|
|
{
|
|
const char *file_name;
|
|
printf("__FUNCTION__ =%s type =%s %d\n", __FUNCTION__, type, arg);
|
|
struct unumber num;
|
|
struct utime time_r;
|
|
|
|
if (!__this) {
|
|
return 0;
|
|
}
|
|
|
|
if (type && !strcmp(type, "show_lyric")) {
|
|
if (arg) {
|
|
/* ui_hide(MUSIC_FILE);//不显示歌名 */
|
|
/* ui_show(MUSIC_LYRICS);//显示歌词 */
|
|
} else {
|
|
/* ui_hide(MUSIC_LYRICS);//不显示歌词 */
|
|
/* ui_show(MUSIC_FILE);//显示歌名 */
|
|
int len = 0;
|
|
int is_unicode = 0;
|
|
file_name = music_file_get_cur_name(&len, &is_unicode);
|
|
if (len && file_name) {
|
|
printf("is_unicode = %d\n", is_unicode);
|
|
put_buf(file_name, len);
|
|
if (is_unicode) {
|
|
ui_text_set_text_by_id(LRC_TEXT_ID_SEC, "", 16, FONT_DEFAULT);
|
|
ui_text_set_textw_by_id(MUSIC_FILE, file_name, len, FONT_ENDIAN_SMALL, FONT_DEFAULT | FONT_SHOW_SCROLL);
|
|
} else {
|
|
ui_text_set_text_by_id(LRC_TEXT_ID_SEC, "", 16, FONT_DEFAULT);
|
|
ui_text_set_text_by_id(MUSIC_FILE, file_name, len, FONT_DEFAULT);
|
|
}
|
|
|
|
}
|
|
}
|
|
return 0;
|
|
}
|
|
|
|
|
|
if (type && !strcmp(type, "dev")) {
|
|
if (arg && (!strncmp((char *)arg, "udisk", 5))) {
|
|
ui_pic_show_image_by_id(MUSIC_DEV, 1); //显示udik
|
|
} else {
|
|
ui_pic_show_image_by_id(MUSIC_DEV, 2); //显示sd
|
|
}
|
|
return 0;
|
|
}
|
|
|
|
|
|
if (type && !strcmp(type, "filenum")) {
|
|
num.type = TYPE_NUM;
|
|
num.numbs = 1;
|
|
num.number[0] = arg;
|
|
ui_number_update_by_id(MUSIC_CUR_NUM, &num);
|
|
return 0;
|
|
}
|
|
|
|
|
|
if (type && !strcmp(type, "total_filenum")) {
|
|
num.type = TYPE_NUM;
|
|
num.numbs = 1;
|
|
num.number[0] = arg;
|
|
ui_number_update_by_id(MUSIC_TOTAL_NUM, &num);
|
|
return 0;
|
|
}
|
|
|
|
return 0;
|
|
}
|
|
|
|
static const struct uimsg_handl ui_msg_handler[] = {
|
|
{ "music_start", music_start }, /* */
|
|
{ NULL, NULL}, /* 必须以此结尾! */
|
|
};
|
|
|
|
|
|
|
|
|
|
static void music_check_add(void *ptr);
|
|
|
|
/************************************************************
|
|
音乐模式主页窗口控件
|
|
************************************************************/
|
|
|
|
|
|
static int music_mode_onchange(void *ctr, enum element_change_event e, void *arg)
|
|
{
|
|
struct window *window = (struct window *)ctr;
|
|
static int bt_status_timer = 0;
|
|
switch (e) {
|
|
case ON_CHANGE_INIT:
|
|
puts("\n***music_mode_onchange***\n");
|
|
enter_music_mode = 1;
|
|
/* key_ui_takeover(1); */
|
|
if (!__this) {
|
|
__this = zalloc(sizeof(MUSIC_UI_VAR));
|
|
}
|
|
ui_register_msg_handler(ID_WINDOW_MUSIC, ui_msg_handler);
|
|
/*
|
|
* 注册APP消息响应
|
|
*/
|
|
if (!__this->timer) {
|
|
__this->timer = sys_timer_add(NULL, music_check_add, 500);
|
|
}
|
|
disp_time = 0;
|
|
break;
|
|
case ON_CHANGE_RELEASE:
|
|
|
|
if (__this->timer) {
|
|
sys_timer_del(__this->timer);
|
|
}
|
|
|
|
if (__this) {
|
|
free(__this);
|
|
__this = NULL;
|
|
}
|
|
break;
|
|
default:
|
|
return false;
|
|
}
|
|
return false;
|
|
}
|
|
|
|
|
|
|
|
REGISTER_UI_EVENT_HANDLER(ID_WINDOW_MUSIC)
|
|
.onchange = music_mode_onchange,
|
|
.onkey = NULL,
|
|
.ontouch = NULL,
|
|
};
|
|
|
|
|
|
|
|
|
|
/* extern void test_browser(); */
|
|
/************************************************************
|
|
音乐模式布局控件按键事件
|
|
************************************************************/
|
|
|
|
static void music_layout_init(int id)
|
|
{
|
|
#if (defined(TCFG_LRC_LYRICS_ENABLE) && (TCFG_LRC_LYRICS_ENABLE))
|
|
#else
|
|
#endif
|
|
}
|
|
|
|
static int music_layout_onchange(void *ctr, enum element_change_event e, void *arg)
|
|
{
|
|
struct ui_text *text = (struct ui_text *)ctr;
|
|
switch (e) {
|
|
case ON_CHANGE_INIT:
|
|
/* ui_text_set_text_attrs(text, NULL, 0, FONT_ENCODE_UTF8, 0, FONT_DEFAULT); */
|
|
break;
|
|
case ON_CHANGE_SHOW_PROBE:
|
|
break;
|
|
case ON_CHANGE_FIRST_SHOW:
|
|
ui_set_call(music_layout_init, 0);
|
|
break;
|
|
default:
|
|
return FALSE;
|
|
}
|
|
return FALSE;
|
|
}
|
|
|
|
static int music_layout_onkey(void *ctr, struct element_key_event *e)
|
|
{
|
|
printf("music_layout_onkey %d\n", e->value);
|
|
char *logo = music_player_get_dev_cur();
|
|
switch (e->value) {
|
|
case KEY_MENU:
|
|
ui_show(MUSIC_MENU_LAYOUT);
|
|
break;
|
|
case KEY_OK:
|
|
/* music_play_file_pp(); */
|
|
app_task_put_key_msg(KEY_MUSIC_PP, 0);
|
|
break;
|
|
case KEY_UP:
|
|
/* music_play_file_prev(); */
|
|
app_task_put_key_msg(KEY_MUSIC_PREV, 0);
|
|
break;
|
|
case KEY_DOWN:
|
|
app_task_put_key_msg(KEY_MUSIC_NEXT, 0);
|
|
/* music_play_file_next(); */
|
|
break;
|
|
case KEY_VOLUME_INC:
|
|
/* app_audio_volume_up(1); */
|
|
/* break; */
|
|
case KEY_VOLUME_DEC:
|
|
/* app_audio_volume_down(1); */
|
|
ui_show(MUSIC_VOL_LAYOUT);
|
|
break;
|
|
case KEY_MODE:
|
|
UI_HIDE_CURR_WINDOW();
|
|
ui_show_main(ID_WINDOW_SYS);
|
|
break;
|
|
case KEY_POWER_START:
|
|
case KEY_POWER:
|
|
power_off_deal(NULL, e->value - KEY_POWER_START);
|
|
break;
|
|
default:
|
|
return false;
|
|
break;
|
|
}
|
|
return false;
|
|
}
|
|
|
|
REGISTER_UI_EVENT_HANDLER(MUSIC_LAYOUT)
|
|
.onchange = music_layout_onchange,
|
|
.onkey = music_layout_onkey,
|
|
.ontouch = NULL,
|
|
};
|
|
|
|
void music_player_disp_status()
|
|
{
|
|
if (__this) {
|
|
__this->disp_lrc = 1;
|
|
ui_hide(MUSIC_START);
|
|
// ui_show(MUSIC_FILE);
|
|
// ui_show(MUSIC_LYRICS);
|
|
}
|
|
}
|
|
/************************************************************
|
|
音乐模式的定时器
|
|
************************************************************/
|
|
static void music_check_add(void *ptr)
|
|
{
|
|
int sencond;
|
|
struct utime time_r;
|
|
char *logo = music_player_get_dev_cur();
|
|
|
|
if (!__this) {
|
|
return;
|
|
}
|
|
|
|
#if TCFG_EQ_ENABLE
|
|
if (eq_mode_get_cur() != __this->eq_mode) {
|
|
__this->eq_mode = eq_mode_get_cur();
|
|
ui_pic_show_image_by_id(MUSIC_EQ, __this->eq_mode);
|
|
}
|
|
#endif
|
|
|
|
if (music_player_get_repeat_mode() != __this->cycle_mode) {
|
|
__this->cycle_mode = music_player_get_repeat_mode();
|
|
ui_pic_show_image_by_id(MUSIC_MLOOP, __this->cycle_mode);
|
|
}
|
|
|
|
|
|
if (true == file_dec_is_play()) {
|
|
if (!__this->start) {
|
|
ui_pic_show_image_by_id(MUSIC_START, 0);
|
|
if (!disp_time) {
|
|
disp_time = sys_timeout_add(NULL, music_player_disp_status, 200);
|
|
}
|
|
sencond = file_dec_get_total_time();
|
|
time_r.hour = sencond / 60 / 60;
|
|
time_r.min = sencond / 60 % 60;
|
|
time_r.sec = sencond % 60;
|
|
ui_time_update_by_id(MUSIC_TOTAL_TIME, &time_r);
|
|
__this->total_time = sencond;
|
|
__this->start = 1;
|
|
}
|
|
sencond = file_dec_get_total_time();
|
|
if (sencond != __this->total_time) {
|
|
time_r.hour = sencond / 60 / 60;
|
|
time_r.min = sencond / 60 % 60;
|
|
time_r.sec = sencond % 60;
|
|
ui_time_update_by_id(MUSIC_TOTAL_TIME, &time_r);
|
|
__this->total_time = sencond;
|
|
}
|
|
sencond = file_dec_get_cur_time();
|
|
/* printf("sec = %d \n", sencond); */
|
|
time_r.hour = sencond / 60 / 60;
|
|
time_r.min = sencond / 60 % 60;
|
|
time_r.sec = sencond % 60;
|
|
ui_time_update_by_id(MUSIC_CUR_TIME, &time_r);
|
|
if (__this->disp_lrc == 1) {
|
|
#if (defined(TCFG_LRC_LYRICS_ENABLE) && (TCFG_LRC_LYRICS_ENABLE))
|
|
if (lrc_show_api(MUSIC_FILE, file_dec_get_cur_time(), 0)) {
|
|
if (enter_music_mode == 1) {
|
|
UI_MSG_POST("music_start:dev=%4:filenum=%4:total_filenum=%4", logo, music_player_get_file_cur(), music_player_get_file_total());
|
|
enter_music_mode = 0;
|
|
}
|
|
} else {
|
|
if (enter_music_mode == 1) {
|
|
UI_MSG_POST("music_start:show_lyric=%4:dev=%4:filenum=%4:total_filenum=%4", 0, logo, music_player_get_file_cur(), music_player_get_file_total());
|
|
enter_music_mode = 0;
|
|
}
|
|
}
|
|
#endif
|
|
}
|
|
} else if (file_dec_is_pause()) {
|
|
if (__this->start) {
|
|
if (disp_time) {
|
|
sys_timeout_del(disp_time);
|
|
disp_time = 0;
|
|
// ui_hide(MUSIC_FILE);
|
|
// ui_hide(MUSIC_LYRICS);
|
|
ui_pic_show_image_by_id(MUSIC_START, 1);
|
|
}
|
|
__this->start = 0;
|
|
__this->disp_lrc = 0;
|
|
}
|
|
} else {
|
|
if (__this->start) {
|
|
if (disp_time) {
|
|
sys_timeout_del(disp_time);
|
|
disp_time = 0;
|
|
// ui_hide(MUSIC_FILE);
|
|
// ui_hide(MUSIC_LYRICS);
|
|
ui_pic_show_image_by_id(MUSIC_START, 1);
|
|
}
|
|
__this->start = 0;
|
|
__this->disp_lrc = 0;
|
|
}
|
|
}
|
|
}
|
|
|
|
/************************************************************
|
|
音乐模式的一些控件初始化事件
|
|
************************************************************/
|
|
|
|
static int play_timer_onchange(void *ctr, enum element_change_event e, void *arg)
|
|
{
|
|
struct ui_time *timer = (struct ui_time *)ctr;
|
|
int sencond = 0;
|
|
switch (e) {
|
|
case ON_CHANGE_INIT:
|
|
|
|
if (timer->text.elm.id == MUSIC_CUR_TIME) {
|
|
sencond = file_dec_get_cur_time();
|
|
} else if (timer->text.elm.id == MUSIC_TOTAL_TIME) {
|
|
sencond = file_dec_get_total_time();
|
|
}
|
|
|
|
timer->hour = sencond / 60 / 60;
|
|
if (true == file_dec_is_play()) {
|
|
timer->min = sencond / 60 % 60;
|
|
timer->sec = sencond % 60;
|
|
} else {
|
|
timer->min = sencond / 60 % 60;
|
|
timer->sec = sencond % 60;
|
|
}
|
|
break;
|
|
default:
|
|
return FALSE;
|
|
}
|
|
return FALSE;
|
|
}
|
|
|
|
REGISTER_UI_EVENT_HANDLER(MUSIC_TOTAL_TIME)
|
|
.onchange = play_timer_onchange,
|
|
.onkey = NULL,
|
|
.ontouch = NULL,
|
|
};
|
|
|
|
REGISTER_UI_EVENT_HANDLER(MUSIC_CUR_TIME)
|
|
.onchange = play_timer_onchange,
|
|
.onkey = NULL,
|
|
.ontouch = NULL,
|
|
};
|
|
|
|
|
|
|
|
|
|
|
|
|
|
/************************************************************
|
|
音乐模式主菜单列表按键事件
|
|
************************************************************/
|
|
|
|
static int music_enter_callback(void *ctr, struct element_key_event *e)
|
|
{
|
|
struct ui_grid *grid = (struct ui_grid *)ctr;
|
|
printf("ui key %s %d\n", __FUNCTION__, e->value);
|
|
int sel_item;
|
|
switch (e->value) {
|
|
case KEY_OK:
|
|
sel_item = ui_grid_cur_item(grid);
|
|
switch (sel_item) {
|
|
case 0:
|
|
ui_show(MUSIC_EQ_LAYOUT);
|
|
break;
|
|
case 1:
|
|
ui_show(MUSIC_CYCLE_LAYOUT);
|
|
break;
|
|
case 2:
|
|
ui_show(MUSIC_FILE_LAYOUT);
|
|
break;
|
|
case 3:
|
|
ui_hide(MUSIC_MENU_LAYOUT);
|
|
break;
|
|
}
|
|
break;
|
|
default:
|
|
return false;
|
|
}
|
|
return TRUE;
|
|
}
|
|
|
|
|
|
REGISTER_UI_EVENT_HANDLER(MUSIC_MENU_LIST)
|
|
.onchange = NULL,
|
|
.onkey = music_enter_callback,
|
|
.ontouch = NULL,
|
|
};
|
|
|
|
|
|
|
|
|
|
|
|
/************************************************************
|
|
音乐模式eq菜单列表按键事件
|
|
************************************************************/
|
|
|
|
static const int eq_mode_pic[] = {
|
|
MUSIC_2,
|
|
MUSIC_8,
|
|
MUSIC_12,
|
|
MUSIC_14,
|
|
MUSIC_16,
|
|
MUSIC_18,
|
|
};
|
|
|
|
|
|
|
|
#if TCFG_EQ_ENABLE
|
|
static int eq_pic_common_onchange(void *_ctrl, enum element_change_event event, void *arg)
|
|
{
|
|
struct ui_pic *pic = (struct ui_pic *)_ctrl;
|
|
switch (event) {
|
|
case ON_CHANGE_INIT:
|
|
if (pic->elm.id == eq_mode_pic[eq_mode_get_cur() % 6]) {
|
|
ui_pic_set_image_index(pic, 1);
|
|
}
|
|
break;
|
|
case ON_CHANGE_SHOW_POST:
|
|
break;
|
|
default:
|
|
return FALSE;
|
|
}
|
|
return FALSE;
|
|
}
|
|
|
|
REGISTER_UI_EVENT_HANDLER(MUSIC_2)
|
|
.onchange = eq_pic_common_onchange,
|
|
};
|
|
REGISTER_UI_EVENT_HANDLER(MUSIC_8)
|
|
.onchange = eq_pic_common_onchange,
|
|
};
|
|
REGISTER_UI_EVENT_HANDLER(MUSIC_12)
|
|
.onchange = eq_pic_common_onchange,
|
|
};
|
|
REGISTER_UI_EVENT_HANDLER(MUSIC_14)
|
|
.onchange = eq_pic_common_onchange,
|
|
};
|
|
REGISTER_UI_EVENT_HANDLER(MUSIC_16)
|
|
.onchange = eq_pic_common_onchange,
|
|
};
|
|
REGISTER_UI_EVENT_HANDLER(MUSIC_18)
|
|
.onchange = eq_pic_common_onchange,
|
|
};
|
|
#endif
|
|
|
|
static int music_eq_menu_list_onchange(void *ctr, enum element_change_event e, void *arg)
|
|
{
|
|
struct ui_grid *grid = (struct ui_grid *)ctr;
|
|
int list = 0;
|
|
switch (e) {
|
|
case ON_CHANGE_INIT:
|
|
printf("ON_CHANGE_INIT %d \n", grid->avail_item_num);
|
|
break;
|
|
}
|
|
return false;
|
|
}
|
|
|
|
static int music_eq_callback(void *ctr, struct element_key_event *e)
|
|
{
|
|
struct ui_grid *grid = (struct ui_grid *)ctr;
|
|
printf("ui key %s %d\n", __FUNCTION__, e->value);
|
|
int sel_item;
|
|
switch (e->value) {
|
|
case KEY_OK:
|
|
sel_item = ui_grid_cur_item(grid);
|
|
switch (sel_item) {
|
|
case 0:
|
|
case 1:
|
|
case 2:
|
|
case 3:
|
|
case 4:
|
|
case 5:
|
|
#if TCFG_EQ_ENABLE
|
|
eq_mode_set(sel_item);
|
|
#endif
|
|
case 6:
|
|
ui_hide(MUSIC_EQ_LAYOUT);
|
|
break;
|
|
}
|
|
break;
|
|
default:
|
|
return false;
|
|
}
|
|
return TRUE;
|
|
}
|
|
|
|
|
|
REGISTER_UI_EVENT_HANDLER(MUSIC_EQ_LIST)
|
|
.onchange = music_eq_menu_list_onchange,
|
|
.onkey = music_eq_callback,
|
|
.ontouch = NULL,
|
|
};
|
|
|
|
|
|
|
|
|
|
/************************************************************
|
|
音乐模式循环菜单列表按键事件
|
|
************************************************************/
|
|
|
|
static const int cycle_mode_pic[] = {
|
|
MUSIC_29,
|
|
MUSIC_32,
|
|
MUSIC_35,
|
|
MUSIC_38,
|
|
MUSIC_41,
|
|
};
|
|
|
|
|
|
static int music_cycle_menu_list_onchange(void *ctr, enum element_change_event e, void *arg)
|
|
{
|
|
struct ui_grid *grid = (struct ui_grid *)ctr;
|
|
int list = 0;
|
|
switch (e) {
|
|
case ON_CHANGE_INIT:
|
|
printf("ON_CHANGE_INIT %d \n", grid->avail_item_num);
|
|
int id = cycle_mode_pic[music_player_get_repeat_mode() % 5];
|
|
printf("id = %x \n", id);
|
|
ui_pic_show_image_by_id(id, 1);
|
|
break;
|
|
}
|
|
return false;
|
|
}
|
|
|
|
static int music_cycle_callback(void *ctr, struct element_key_event *e)
|
|
{
|
|
struct ui_grid *grid = (struct ui_grid *)ctr;
|
|
printf("ui key %s %d\n", __FUNCTION__, e->value);
|
|
int sel_item;
|
|
switch (e->value) {
|
|
case KEY_OK:
|
|
sel_item = ui_grid_cur_item(grid);
|
|
switch (sel_item) {
|
|
case 0:
|
|
case 1:
|
|
case 2:
|
|
case 3:
|
|
case 4:
|
|
music_player_set_repeat_mode(sel_item);
|
|
case 5:
|
|
ui_hide(MUSIC_CYCLE_LAYOUT);
|
|
break;
|
|
}
|
|
break;
|
|
default:
|
|
return false;
|
|
}
|
|
return TRUE;
|
|
}
|
|
|
|
|
|
REGISTER_UI_EVENT_HANDLER(MUSIC_CYCLE_LIST)
|
|
.onchange = music_cycle_menu_list_onchange,
|
|
.onkey = music_cycle_callback,
|
|
.ontouch = NULL,
|
|
};
|
|
|
|
|
|
|
|
/************************************************************
|
|
电池控件事件
|
|
************************************************************/
|
|
|
|
static void battery_timer(void *priv)
|
|
{
|
|
int incharge = 0;//充电标志
|
|
int id = (int)(priv);
|
|
static u8 percent = 0;
|
|
static u8 percent_last = 0;
|
|
if (1 || get_charge_online_flag()) { //充电时候图标动态效果
|
|
if (percent > get_vbat_percent()) {
|
|
percent = 0;
|
|
}
|
|
ui_battery_set_level_by_id(id, percent, incharge); //充电标志,ui可以显示不一样的图标
|
|
percent += 20;
|
|
} else {
|
|
|
|
percent = get_vbat_percent();
|
|
if (percent != percent_last) {
|
|
ui_battery_set_level_by_id(id, percent, incharge); //充电标志,ui可以显示不一样的图标,需要工具设置
|
|
percent_last = percent;
|
|
}
|
|
|
|
}
|
|
}
|
|
|
|
|
|
static int battery_onchange(void *ctr, enum element_change_event e, void *arg)
|
|
{
|
|
struct ui_battery *battery = (struct ui_battery *)ctr;
|
|
static u32 timer = 0;
|
|
int incharge = 0;//充电标志
|
|
|
|
switch (e) {
|
|
case ON_CHANGE_INIT:
|
|
ui_battery_set_level(battery, get_vbat_percent(), incharge);
|
|
if (!timer) {
|
|
timer = sys_timer_add((void *)battery->elm.id, battery_timer, 1 * 1000); //传入的id就是BT_BAT
|
|
}
|
|
break;
|
|
case ON_CHANGE_FIRST_SHOW:
|
|
break;
|
|
case ON_CHANGE_RELEASE:
|
|
if (timer) {
|
|
sys_timer_del(timer);
|
|
timer = 0;
|
|
}
|
|
break;
|
|
default:
|
|
return false;
|
|
}
|
|
return false;
|
|
}
|
|
REGISTER_UI_EVENT_HANDLER(MUSIC_BAT)
|
|
.onchange = battery_onchange,
|
|
.ontouch = NULL,
|
|
};
|
|
|
|
/************************************************************
|
|
音乐模式音量布局事件
|
|
************************************************************/
|
|
|
|
static u16 music_timer = 0;
|
|
static void music_vol_timeout(void *p)
|
|
{
|
|
int id = (int)(p);
|
|
if (ui_get_disp_status_by_id(id) == TRUE) {
|
|
ui_hide(id);
|
|
}
|
|
music_timer = 0;
|
|
}
|
|
|
|
static void vol_init(int id)
|
|
{
|
|
struct unumber num;
|
|
num.type = TYPE_NUM;
|
|
num.numbs = 1;
|
|
num.number[0] = app_audio_get_volume(APP_AUDIO_CURRENT_STATE);
|
|
ui_number_update_by_id(MUSIC_VOL_NUM, &num);
|
|
}
|
|
|
|
|
|
static int music_vol_layout_onchange(void *ctr, enum element_change_event e, void *arg)
|
|
{
|
|
struct layout *layout = (struct layout *)ctr;
|
|
struct unumber num;
|
|
switch (e) {
|
|
case ON_CHANGE_INIT:
|
|
if (!music_timer) {
|
|
music_timer = sys_timeout_add((void *)layout->elm.id, music_vol_timeout, 3000);
|
|
}
|
|
break;
|
|
|
|
case ON_CHANGE_FIRST_SHOW://布局第一次显示,可以对布局内的一些控件进行初始化
|
|
ui_set_call(vol_init, 0);
|
|
break;
|
|
case ON_CHANGE_SHOW_POST:
|
|
//有显示动作
|
|
break;
|
|
|
|
case ON_CHANGE_RELEASE:
|
|
if (music_timer) {
|
|
sys_timeout_del(music_timer);
|
|
music_timer = 0;
|
|
}
|
|
break;
|
|
default:
|
|
return FALSE;
|
|
}
|
|
return FALSE;
|
|
}
|
|
|
|
|
|
static int music_vol_layout_onkey(void *ctr, struct element_key_event *e)
|
|
{
|
|
printf("music_vol_layout_onkey %d\n", e->value);
|
|
struct unumber num;
|
|
u8 vol;
|
|
|
|
if (music_timer) {
|
|
sys_timer_modify(music_timer, 3000);
|
|
}
|
|
|
|
switch (e->value) {
|
|
case KEY_MENU:
|
|
break;
|
|
case KEY_UP:
|
|
case KEY_VOLUME_INC:
|
|
app_audio_volume_up(1);
|
|
vol = app_audio_get_volume(APP_AUDIO_CURRENT_STATE);
|
|
num.type = TYPE_NUM;
|
|
num.numbs = 1;
|
|
num.number[0] = vol;
|
|
ui_number_update_by_id(MUSIC_VOL_NUM, &num);
|
|
break;
|
|
case KEY_DOWN:
|
|
case KEY_VOLUME_DEC:
|
|
app_audio_volume_down(1);
|
|
vol = app_audio_get_volume(APP_AUDIO_CURRENT_STATE);
|
|
num.type = TYPE_NUM;
|
|
num.numbs = 1;
|
|
num.number[0] = vol;
|
|
ui_number_update_by_id(MUSIC_VOL_NUM, &num);
|
|
break;
|
|
default:
|
|
return false;
|
|
break;
|
|
}
|
|
return true;
|
|
}
|
|
|
|
|
|
|
|
REGISTER_UI_EVENT_HANDLER(MUSIC_VOL_LAYOUT)
|
|
.onchange = music_vol_layout_onchange,
|
|
.onkey = music_vol_layout_onkey,
|
|
.ontouch = NULL,
|
|
};
|
|
|
|
|
|
|
|
#endif
|