forked from len0rd/rockbox
shortcuts: sleep timer: allow omitting number of minutes
'sleep' can now appear in the data field of a 'time' shortcut without being followed by a number, allowing you to stop a running timer, or to start a new one using the default sleep timer duration (the duration setting can already be added to the Shortcuts menu as well). Also see here: https://forums.rockbox.org/index.php/topic,54312.msg250940.html Change-Id: I9d0e62ef1b6187c35133067349729a4d94273c7a
This commit is contained in:
parent
b8b4fdd999
commit
f631bfe5b4
3 changed files with 50 additions and 17 deletions
|
@ -520,7 +520,7 @@ static int seconds_to_min(int secs)
|
|||
|
||||
/* A string representation of either whether a sleep timer will be started or
|
||||
canceled, and how long it will be or how long is remaining in brackets */
|
||||
static char* sleep_timer_getname(int selected_item, void * data,
|
||||
char* sleep_timer_getname(int selected_item, void * data,
|
||||
char *buffer, size_t buffer_len)
|
||||
{
|
||||
(void)selected_item;
|
||||
|
@ -537,7 +537,7 @@ static char* sleep_timer_getname(int selected_item, void * data,
|
|||
return buffer;
|
||||
}
|
||||
|
||||
static int sleep_timer_voice(int selected_item, void*data)
|
||||
int sleep_timer_voice(int selected_item, void*data)
|
||||
{
|
||||
(void)selected_item;
|
||||
(void)data;
|
||||
|
@ -555,7 +555,7 @@ static int sleep_timer_voice(int selected_item, void*data)
|
|||
}
|
||||
|
||||
/* If a sleep timer is running, cancel it, otherwise start one */
|
||||
static int toggle_sleeptimer(void)
|
||||
int toggle_sleeptimer(void)
|
||||
{
|
||||
set_sleeptimer_duration(get_sleep_timer() ? 0
|
||||
: global_settings.sleeptimer_duration);
|
||||
|
|
|
@ -244,10 +244,13 @@ static void shortcuts_ata_idle_callback(void)
|
|||
#endif
|
||||
{
|
||||
write(fd, "sleep ", 6);
|
||||
if (sc->u.timedata.sleep_timeout >= 0)
|
||||
{
|
||||
len = snprintf(buf, MAX_PATH, "%d", sc->u.timedata.sleep_timeout);
|
||||
write(fd, buf, len);
|
||||
}
|
||||
}
|
||||
}
|
||||
else
|
||||
write(fd, sc->u.path, strlen(sc->u.path));
|
||||
|
||||
|
@ -348,8 +351,12 @@ static int readline_cb(int n, char *buf, void *parameters)
|
|||
sc->u.timedata.talktime = true;
|
||||
else
|
||||
#endif
|
||||
if (!strncasecmp(value, "sleep ", strlen("sleep ")))
|
||||
sc->u.timedata.sleep_timeout = atoi(&value[strlen("sleep ")]);
|
||||
if (!strncasecmp(value, "sleep", strlen("sleep")))
|
||||
{
|
||||
/* 'sleep' may appear alone or followed by number after a space */
|
||||
sc->u.timedata.sleep_timeout = strlen(&value[5]) > 1 ?
|
||||
atoi(&value[strlen("sleep ")]) : -1;
|
||||
}
|
||||
else
|
||||
sc->type = SHORTCUT_UNDEFINED; /* error */
|
||||
break;
|
||||
|
@ -411,6 +418,8 @@ void shortcuts_init(void)
|
|||
--buflib_move_lock;
|
||||
}
|
||||
|
||||
char* sleep_timer_getname(int selected_item, void * data,
|
||||
char *buffer, size_t buffer_len); /* settings_menu.c */
|
||||
static const char * shortcut_menu_get_name(int selected_item, void * data,
|
||||
char * buffer, size_t buffer_len)
|
||||
{
|
||||
|
@ -420,8 +429,21 @@ static const char * shortcut_menu_get_name(int selected_item, void * data,
|
|||
return "";
|
||||
if (sc->type == SHORTCUT_SETTING)
|
||||
return sc->name[0] ? sc->name : P2STR(ID2P(sc->u.setting->lang_id));
|
||||
else if (sc->type == SHORTCUT_SEPARATOR || sc->type == SHORTCUT_TIME)
|
||||
else if (sc->type == SHORTCUT_SEPARATOR)
|
||||
return sc->name;
|
||||
else if (sc->type == SHORTCUT_TIME)
|
||||
{
|
||||
if (sc->u.timedata.sleep_timeout < 0
|
||||
#if CONFIG_RTC
|
||||
&& !sc->u.timedata.talktime
|
||||
#endif
|
||||
) /* Toggle Sleep Timer */
|
||||
{
|
||||
sleep_timer_getname(selected_item, data, buffer, buffer_len);
|
||||
return buffer;
|
||||
}
|
||||
return sc->name;
|
||||
}
|
||||
else if (sc->type == SHORTCUT_SHUTDOWN && sc->name[0] == '\0')
|
||||
{
|
||||
/* No translation support as only soft_shutdown has LANG_SHUTDOWN defined */
|
||||
|
@ -513,6 +535,7 @@ static enum themable_icons shortcut_menu_get_icon(int selected_item, void * data
|
|||
}
|
||||
|
||||
void talk_timedate(void);
|
||||
int sleep_timer_voice(int selected_item, void*data); /* settings_menu.c */
|
||||
static int shortcut_menu_speak_item(int selected_item, void * data)
|
||||
{
|
||||
(void)data;
|
||||
|
@ -576,7 +599,9 @@ static int shortcut_menu_speak_item(int selected_item, void * data)
|
|||
talk_timedate();
|
||||
else
|
||||
#endif
|
||||
if (sc->name[0])
|
||||
if (sc->u.timedata.sleep_timeout < 0)
|
||||
sleep_timer_voice(selected_item, data);
|
||||
else if (sc->name[0])
|
||||
talk_spell(sc->name, false);
|
||||
break;
|
||||
case SHORTCUT_SHUTDOWN:
|
||||
|
@ -596,7 +621,7 @@ static int shortcut_menu_speak_item(int selected_item, void * data)
|
|||
|
||||
const char* sleep_timer_formatter(char* buffer, size_t buffer_size,
|
||||
int value, const char* unit);
|
||||
|
||||
int toggle_sleeptimer(void); /* settings_menu.c */
|
||||
int do_shortcut_menu(void *ignored)
|
||||
{
|
||||
(void)ignored;
|
||||
|
@ -717,10 +742,16 @@ int do_shortcut_menu(void *ignored)
|
|||
#endif
|
||||
{
|
||||
char timer_buf[10];
|
||||
if (sc->u.timedata.sleep_timeout >= 0)
|
||||
{
|
||||
set_sleeptimer_duration(sc->u.timedata.sleep_timeout);
|
||||
splashf(HZ, "%s (%s)", str(LANG_SLEEP_TIMER),
|
||||
sleep_timer_formatter(timer_buf, sizeof(timer_buf),
|
||||
sc->u.timedata.sleep_timeout, NULL));
|
||||
sc->u.timedata.sleep_timeout,
|
||||
NULL));
|
||||
}
|
||||
else
|
||||
toggle_sleeptimer();
|
||||
}
|
||||
break;
|
||||
case SHORTCUT_UNDEFINED:
|
||||
|
|
|
@ -325,8 +325,10 @@ Available types are:
|
|||
\item[separator] \config{data} is ignored; \config{name} can be used to display text,
|
||||
or left blank to make the list more accessible with visual gaps
|
||||
\item[time] \config{data} needs to be \opt{rtc}{either ``talk'' to talk the time, or }``sleep X''
|
||||
where X is the number of minutes to run the sleep timer for (0 to disable). \config{name}
|
||||
is required for this shortcut type.
|
||||
where X can, optionally, be the number of minutes to run the sleep timer for (0 to disable).
|
||||
If ``sleep'' is not followed by a number, the sleep timer can be stopped, if running,
|
||||
or started using the default duration; \config{name} will be ignored in that case. Otherwise
|
||||
\config{name} is required for this shortcut type.
|
||||
\item[shutdown] \config{data} is ignored; \config{name} can be used to display text
|
||||
\end{description}
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue