settings: add Quiet Mode options

Override LCD options during quiet time:
- Brightness
- Timeout
- Wake on Touch
- Wake on Twist
- Wake on Face Up
pull/697/head
Richard de Boer 2021-03-23 22:01:47 +01:00
parent 2ce6adcb55
commit ed548dd6e9
3 changed files with 125 additions and 15 deletions

View File

@ -26,4 +26,4 @@
Add whitelist option (fix #78) Add whitelist option (fix #78)
0.22: Move HID to BLE menu 0.22: Move HID to BLE menu
0.23: Change max time offset to 13 for NZ summer daylight time (NZDT) 0.23: Change max time offset to 13 for NZ summer daylight time (NZDT)
0.24: Add Quiet Mode setting 0.24: Add Quiet Mode settings

View File

@ -2,7 +2,13 @@
var settings = require('Storage').readJSON('setting.json', true); var settings = require('Storage').readJSON('setting.json', true);
if (!settings) return; if (!settings) return;
if (settings.options) Bangle.setOptions(settings.options); if (settings.options) Bangle.setOptions(settings.options);
if (settings.brightness && settings.brightness!=1) Bangle.setLCDBrightness(settings.brightness); if (settings.quiet && settings.qmOptions) Bangle.setOptions(settings.qmOptions);
if (settings.quiet && settings.qmBrightness) {
if (settings.qmBrightness!=1) Bangle.setLCDBrightness(settings.qmBrightness);
} else {
if (settings.brightness && settings.brightness!=1) Bangle.setLCDBrightness(settings.brightness);
}
if (settings.quiet && settings.qmTimeout) Bangle.setLCDTimeout(s.qmTimeout);
if (settings.passkey!==undefined && settings.passkey.length==6) NRF.setSecurity({passkey:settings.passkey, mitm:1, display:1}); if (settings.passkey!==undefined && settings.passkey.length==6) NRF.setSecurity({passkey:settings.passkey, mitm:1, display:1});
if (settings.whitelist) NRF.on('connect', function(addr) { if (!settings.whitelist.includes(addr)) NRF.disconnect(); }); if (settings.whitelist) NRF.on('connect', function(addr) { if (!settings.whitelist.includes(addr)) NRF.disconnect(); });
delete settings; delete settings;

View File

@ -6,12 +6,17 @@ let settings;
function updateSettings() { function updateSettings() {
//storage.erase('setting.json'); // - not needed, just causes extra writes if settings were the same //storage.erase('setting.json'); // - not needed, just causes extra writes if settings were the same
if (Object.keys(settings.qmOptions).length === 0) delete settings.qmOptions;
storage.write('setting.json', settings); storage.write('setting.json', settings);
if (!('qmOptions' in settings)) settings.qmOptions = {}; // easier if this always exists in this file
} }
function updateOptions() { function updateOptions() {
updateSettings(); updateSettings();
Bangle.setOptions(settings.options) Bangle.setOptions(settings.options)
if (settings.quiet) {
Bangle.setOptions(settings.qmOptions)
}
} }
function gToInternal(g) { function gToInternal(g) {
@ -49,20 +54,25 @@ function resetSettings() {
twistThreshold: 819.2, twistThreshold: 819.2,
twistMaxY: -800, twistMaxY: -800,
twistTimeout: 1000 twistTimeout: 1000
} },
// Quiet Mode options:
// we only set these if we want to override the default value
// qmOptions: {},
// qmBrightness: undefined,
// qmTimeout: undefined,
}; };
updateSettings(); updateSettings();
} }
settings = storage.readJSON('setting.json', 1); settings = storage.readJSON('setting.json', 1);
if (!settings) resetSettings(); if (!settings) resetSettings();
if (!('qmOptions' in settings)) settings.qmOptions = {}; // easier if this always exists in here
const boolFormat = v => v ? "On" : "Off"; const boolFormat = v => v ? "On" : "Off";
function showMainMenu() { function showMainMenu() {
var beepV = [false, true, "vib"]; var beepV = [false, true, "vib"];
var beepN = ["Off", "Piezo", "Vibrate"]; var beepN = ["Off", "Piezo", "Vibrate"];
var quietN = ["Off", "Alarms", "Silent"];
const mainmenu = { const mainmenu = {
'': { 'title': 'Settings' }, '': { 'title': 'Settings' },
'Make Connectable': ()=>makeConnectable(), 'Make Connectable': ()=>makeConnectable(),
@ -99,15 +109,7 @@ function showMainMenu() {
} }
} }
}, },
"Quiet Mode": { "Quiet Mode": ()=>showQuietModeMenu(),
value: settings.quiet | 0,
min: 0, max: 2,
format: v => quietN[v],
onchange: v => {
settings.quiet = v
updateSettings()
},
},
'Locale': ()=>showLocaleMenu(), 'Locale': ()=>showLocaleMenu(),
'Select Clock': ()=>showClockMenu(), 'Select Clock': ()=>showClockMenu(),
'Set Time': ()=>showSetTimeMenu(), 'Set Time': ()=>showSetTimeMenu(),
@ -235,7 +237,9 @@ function showLCDMenu() {
onchange: v => { onchange: v => {
settings.brightness = v || 1; settings.brightness = v || 1;
updateSettings(); updateSettings();
Bangle.setLCDBrightness(settings.brightness); if (!(settings.quiet && "qmBrightness" in settings)) {
Bangle.setLCDBrightness(settings.brightness);
}
} }
}, },
'LCD Timeout': { 'LCD Timeout': {
@ -246,7 +250,9 @@ function showLCDMenu() {
onchange: v => { onchange: v => {
settings.timeout = 0 | v; settings.timeout = 0 | v;
updateSettings(); updateSettings();
Bangle.setLCDTimeout(settings.timeout); if (!(settings.quiet && "qmTimeout" in settings)) {
Bangle.setLCDTimeout(settings.timeout);
}
} }
}, },
'Wake on BTN1': { 'Wake on BTN1': {
@ -330,6 +336,104 @@ function showLCDMenu() {
} }
return E.showMenu(lcdMenu) return E.showMenu(lcdMenu)
} }
function showQuietModeMenu() {
// we always keep settings.quiet and settings.qmOptions
// other qm values are deleted when not set
const modes = ["Off", "Alarms", "Silent"];
const qmDisabledFormat = v => v ? "Off" : "-";
const qmMenu = {
"": {"title": "Quiet Mode"},
"< Back": () => showMainMenu(),
"Quiet Mode": {
value: settings.quiet|0,
format: v => modes[v%3],
onchange: v => {
settings.quiet = v%3;
updateSettings();
updateOptions();
},
},
"LCD Brightness": {
value: settings.qmBrightness || 0,
min: 0, // 0 = use default
max: 1,
step: 0.1,
format: v => (v>0.05) ? v : "-",
onchange: v => {
if (v>0.05) { // prevent v=0.000000000000001 bugs
settings.qmBrightness = v;
} else {
delete settings.qmBrightness;
}
updateSettings();
if (settings.qmBrightness) { // show result, even if not quiet right now
Bangle.setLCDBrightness(v);
} else {
Bangle.setLCDBrightness(settings.brightness);
}
},
},
"LCD Timeout": {
value: settings.qmTimeout || 0,
min: 0, // 0 = use default (no constant on for quiet mode)
max: 60,
step: 5,
format: v => v>1 ? v : "-",
onchange: v => {
if (v>1) {
settings.qmTimeout = v;
} else {
delete settings.qmTimeout;
}
updateSettings();
if (settings.quiet && v>1) {
Bangle.setLCDTimeout(v);
} else {
Bangle.setLCDTimeout(settings.timeout);
}
},
},
// we disable wakeOn* events by overwriting them as false in qmOptions
// not disabled = not present in qmOptions at all
"Wake on FaceUp": {
value: "wakeOnFaceUp" in settings.qmOptions,
format: qmDisabledFormat,
onchange: () => {
if ("wakeOnFaceUp" in settings.qmOptions) {
delete settings.qmOptions.wakeOnFaceUp;
} else {
settings.qmOptions.wakeOnFaceUp = false;
}
updateOptions();
},
},
"Wake on Touch": {
value: "wakeOnTouch" in settings.qmOptions,
format: qmDisabledFormat,
onchange: () => {
if ("wakeOnTouch" in settings.qmOptions) {
delete settings.qmOptions.wakeOnTouch;
} else {
settings.qmOptions.wakeOnTouch = false;
}
updateOptions();
},
},
"Wake on Twist": {
value: "wakeOnTwist" in settings.qmOptions,
format: qmDisabledFormat,
onchange: () => {
if ("wakeOnTwist" in settings.qmOptions) {
delete settings.qmOptions.wakeOnTwist;
} else {
settings.qmOptions.wakeOnTwist = false;
}
updateOptions();
},
},
};
return E.showMenu(qmMenu);
}
function showLocaleMenu() { function showLocaleMenu() {
const localemenu = { const localemenu = {