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)
0.22: Move HID to BLE menu
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);
if (!settings) return;
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.whitelist) NRF.on('connect', function(addr) { if (!settings.whitelist.includes(addr)) NRF.disconnect(); });
delete settings;

View File

@ -6,12 +6,17 @@ let settings;
function updateSettings() {
//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);
if (!('qmOptions' in settings)) settings.qmOptions = {}; // easier if this always exists in this file
}
function updateOptions() {
updateSettings();
Bangle.setOptions(settings.options)
if (settings.quiet) {
Bangle.setOptions(settings.qmOptions)
}
}
function gToInternal(g) {
@ -49,20 +54,25 @@ function resetSettings() {
twistThreshold: 819.2,
twistMaxY: -800,
twistTimeout: 1000
}
},
// Quiet Mode options:
// we only set these if we want to override the default value
// qmOptions: {},
// qmBrightness: undefined,
// qmTimeout: undefined,
};
updateSettings();
}
settings = storage.readJSON('setting.json', 1);
if (!settings) resetSettings();
if (!('qmOptions' in settings)) settings.qmOptions = {}; // easier if this always exists in here
const boolFormat = v => v ? "On" : "Off";
function showMainMenu() {
var beepV = [false, true, "vib"];
var beepN = ["Off", "Piezo", "Vibrate"];
var quietN = ["Off", "Alarms", "Silent"];
const mainmenu = {
'': { 'title': 'Settings' },
'Make Connectable': ()=>makeConnectable(),
@ -99,15 +109,7 @@ function showMainMenu() {
}
}
},
"Quiet Mode": {
value: settings.quiet | 0,
min: 0, max: 2,
format: v => quietN[v],
onchange: v => {
settings.quiet = v
updateSettings()
},
},
"Quiet Mode": ()=>showQuietModeMenu(),
'Locale': ()=>showLocaleMenu(),
'Select Clock': ()=>showClockMenu(),
'Set Time': ()=>showSetTimeMenu(),
@ -235,7 +237,9 @@ function showLCDMenu() {
onchange: v => {
settings.brightness = v || 1;
updateSettings();
Bangle.setLCDBrightness(settings.brightness);
if (!(settings.quiet && "qmBrightness" in settings)) {
Bangle.setLCDBrightness(settings.brightness);
}
}
},
'LCD Timeout': {
@ -246,7 +250,9 @@ function showLCDMenu() {
onchange: v => {
settings.timeout = 0 | v;
updateSettings();
Bangle.setLCDTimeout(settings.timeout);
if (!(settings.quiet && "qmTimeout" in settings)) {
Bangle.setLCDTimeout(settings.timeout);
}
}
},
'Wake on BTN1': {
@ -330,6 +336,104 @@ function showLCDMenu() {
}
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() {
const localemenu = {