mirror of https://github.com/espruino/BangleApps
settings: add Quiet Mode options
Override LCD options during quiet time: - Brightness - Timeout - Wake on Touch - Wake on Twist - Wake on Face Uppull/697/head
parent
2ce6adcb55
commit
ed548dd6e9
|
@ -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
|
||||||
|
|
|
@ -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;
|
||||||
|
|
|
@ -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 = {
|
||||||
|
|
Loading…
Reference in New Issue