diff --git a/apps/alarm/ChangeLog b/apps/alarm/ChangeLog index b2cd6cf16..247e1c63a 100644 --- a/apps/alarm/ChangeLog +++ b/apps/alarm/ChangeLog @@ -45,6 +45,7 @@ 0.40: Use substring of message when it's longer than fits the designated menu entry. 0.41: Fix a menu bug affecting alarms with empty messages. 0.42: Fix date not getting saved in event edit menu when tapping Confirm -0.43: New settings: Show confirm, Show Overflow, Show Type. +0.43: New settings: Show confirm, Show Overflow, Show Group. 0.44: Add "delete timer after expiration" setting to events. 0.45: Fix new alarm when selectedAlarm is undefined +0.46: Show alarm groups if the Show Group setting is ON. diff --git a/apps/alarm/app.js b/apps/alarm/app.js index 54cdbd309..e4a159543 100644 --- a/apps/alarm/app.js +++ b/apps/alarm/app.js @@ -73,39 +73,54 @@ function formatAlarmProperty(msg) { } } -function showMainMenu() { +function showMainMenu(group) { const menu = { - "": { "title": /*LANG*/"Alarms & Timers" }, - "< Back": () => load(), - /*LANG*/"New...": () => showNewMenu() + "": { "title": group ? group : /*LANG*/"Alarms & Timers" }, + "< Back": () => !group ? load() : showMainMenu(), + /*LANG*/"New...": () => showNewMenu(group) }; + const getGroups = settings.showGroup && !group; + const groups = getGroups ? {} : undefined; + var showAlarm; alarms.forEach((e, index) => { - menu[trimLabel(getLabel(e),40)] = { - value: e.on ? (e.timer ? iconTimerOn : iconAlarmOn) : (e.timer ? iconTimerOff : iconAlarmOff), - onchange: () => setTimeout(e.timer ? showEditTimerMenu : showEditAlarmMenu, 10, e, index) - }; + showAlarm = !settings.showGroup || (getGroups && !e.group) || (settings.showGroup && !getGroups && e.group === group); + if(showAlarm) { + menu[trimLabel(getLabel(e),40)] = { + value: e.on ? (e.timer ? iconTimerOn : iconAlarmOn) : (e.timer ? iconTimerOff : iconAlarmOff), + onchange: () => setTimeout(e.timer ? showEditTimerMenu : showEditAlarmMenu, 10, e, index, undefined, group) + }; + } else if (getGroups) { + groups[e.group] = undefined; + } }); - menu[/*LANG*/"Advanced"] = () => showAdvancedMenu(); + if (!group) { + Object.keys(groups).sort().forEach(g => menu[g] = () => showMainMenu(g)); + menu[/*LANG*/"Advanced"] = () => showAdvancedMenu(); + } E.showMenu(menu); } -function showNewMenu() { - E.showMenu({ +function showNewMenu(group) { + const newMenu = { "": { "title": /*LANG*/"New..." }, - "< Back": () => showMainMenu(), - /*LANG*/"Alarm": () => showEditAlarmMenu(undefined, undefined), + "< Back": () => showMainMenu(group), + /*LANG*/"Alarm": () => showEditAlarmMenu(undefined, undefined, false, null, group), /*LANG*/"Timer": () => showEditTimerMenu(undefined, undefined), - /*LANG*/"Event": () => showEditAlarmMenu(undefined, undefined, true) - }); + /*LANG*/"Event": () => showEditAlarmMenu(undefined, undefined, true, null, group) + }; + + if (group) delete newMenu[/*LANG*/"Timer"]; + E.showMenu(newMenu); } -function showEditAlarmMenu(selectedAlarm, alarmIndex, withDate) { +function showEditAlarmMenu(selectedAlarm, alarmIndex, withDate, group) { var isNew = alarmIndex === undefined; var alarm = require("sched").newDefaultAlarm(); + if (isNew && group) alarm.group = group; if (withDate || (selectedAlarm && selectedAlarm.date)) { alarm.del = require("sched").getSettings().defaultDeleteExpiredTimers; } @@ -127,7 +142,7 @@ function showEditAlarmMenu(selectedAlarm, alarmIndex, withDate) { "< Back": () => { prepareAlarmForSave(alarm, alarmIndex, time, date); saveAndReload(); - showMainMenu(); + showMainMenu(group); }, /*LANG*/"Hour": { value: time.h, @@ -171,7 +186,7 @@ function showEditAlarmMenu(selectedAlarm, alarmIndex, withDate) { keyboard.input({text:alarm.msg}).then(result => { alarm.msg = result; prepareAlarmForSave(alarm, alarmIndex, time, date, true); - setTimeout(showEditAlarmMenu, 10, alarm, alarmIndex, withDate); + setTimeout(showEditAlarmMenu, 10, alarm, alarmIndex, withDate, scroll, group); }); }, 100); } @@ -184,7 +199,7 @@ function showEditAlarmMenu(selectedAlarm, alarmIndex, withDate) { keyboard.input({text:alarm.group}).then(result => { alarm.group = result; prepareAlarmForSave(alarm, alarmIndex, time, date, true); - setTimeout(showEditAlarmMenu, 10, alarm, alarmIndex, withDate); + setTimeout(showEditAlarmMenu, 10, alarm, alarmIndex, withDate, scroll, group); }); }, 100); } @@ -202,7 +217,7 @@ function showEditAlarmMenu(selectedAlarm, alarmIndex, withDate) { alarm.rp = repeat; alarm.dow = dow; prepareAlarmForSave(alarm, alarmIndex, time, date, true); - setTimeout(showEditAlarmMenu, 10, alarm, alarmIndex, withDate); + setTimeout(showEditAlarmMenu, 10, alarm, alarmIndex, withDate, scroll, group); }) }, /*LANG*/"Vibrate": require("buzz_menu").pattern(alarm.vibrate, v => alarm.vibrate = v), @@ -218,11 +233,11 @@ function showEditAlarmMenu(selectedAlarm, alarmIndex, withDate) { value: alarm.hidden || false, onchange: v => alarm.hidden = v }, - /*LANG*/"Cancel": () => showMainMenu(), + /*LANG*/"Cancel": () => showMainMenu(group), /*LANG*/"Confirm": () => { prepareAlarmForSave(alarm, alarmIndex, time, date); saveAndReload(); - showMainMenu(); + showMainMenu(group); } }; @@ -244,10 +259,10 @@ function showEditAlarmMenu(selectedAlarm, alarmIndex, withDate) { if (confirm) { alarms.splice(alarmIndex, 1); saveAndReload(); - showMainMenu(); + showMainMenu(group); } else { alarm.t = require("time_utils").encodeTime(time); - setTimeout(showEditAlarmMenu, 10, alarm, alarmIndex, withDate); + setTimeout(showEditAlarmMenu, 10, alarm, alarmIndex, withDate, scroll, group); } }); };