mirror of https://github.com/espruino/BangleApps
Simplify settings and add locale submenu, add 12/24 hour option (fix #76), add distance format option, and ensure settings all apply at boot by moving them to the bootloader 'app' (fix #89)
parent
0e7742d936
commit
527ff57e99
|
@ -1,5 +1,24 @@
|
|||
// This ALWAYS runs at boot
|
||||
E.setFlags({pretokenise:1});
|
||||
// Load settings...
|
||||
var s = require('Storage').readJSON('@setting')||{};
|
||||
if (s.ble!==false) {
|
||||
if (s.HID) { // Humen interface device
|
||||
Bangle.HID = E.toUint8Array(atob("BQEJBqEBhQIFBxngKecVACUBdQGVCIEClQF1CIEBlQV1AQUIGQEpBZEClQF1A5EBlQZ1CBUAJXMFBxkAKXOBAAkFFQAm/wB1CJUCsQLABQwJAaEBhQEVACUBdQGVAQm1gQIJtoECCbeBAgm4gQIJzYECCeKBAgnpgQIJ6oECwA=="));
|
||||
NRF.setServices({}, {uart:true, hid:Bangle.HID});
|
||||
}
|
||||
}
|
||||
// If not programmable, force terminal onto screen
|
||||
if (s.dev===false) Terminal.setConsole(true);
|
||||
// we just reset, so BLE should be on
|
||||
if (s.ble===false) NRF.sleep();
|
||||
// Set time, vibrate, beep, etc
|
||||
if (!s.vibrate) Bangle.buzz=Promise.resolve;
|
||||
if (!s.beep) Bangle.beep=Promise.resolve;
|
||||
Bangle.setLCDTimeout(s.timeout);
|
||||
if (!s.timeout) Bangle.setLCDPower(1);
|
||||
E.setTimeZone(s.timezone);
|
||||
delete s;
|
||||
// All of this is just shim for older Bangles
|
||||
if (!Bangle.loadWidgets) {
|
||||
Bangle.loadWidgets = function(){
|
||||
|
|
|
@ -49,8 +49,6 @@ function drawApp() {
|
|||
}
|
||||
|
||||
if (next) {
|
||||
|
||||
if (settings.HIDGestures) {
|
||||
Bangle.on('aiGesture', (v) => {
|
||||
switch (v) {
|
||||
case 'swipeleft':
|
||||
|
@ -65,7 +63,6 @@ if (next) {
|
|||
break;
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
setWatch(function(e) {
|
||||
var len = e.time - e.lastTime;
|
||||
|
|
|
@ -1,11 +1,12 @@
|
|||
{
|
||||
ble: true, // Bluetooth enabled by default
|
||||
dev: true, // Espruino IDE enabled by default
|
||||
dev: true, // Is REPL on Bluetooth - can Espruino IDE be used?
|
||||
timeout: 10, // Default LCD timeout in seconds
|
||||
vibrate: true, // Vibration enabled by default. App must support
|
||||
beep: true, // Beep enabled by default. App must support
|
||||
timezone: 0, // Set the timezone for the device
|
||||
HID : false, // BLE HID mode, off by default
|
||||
HIDGestures: false,
|
||||
debug: false, // Debug mode disabled by default. App must support
|
||||
clock: null, // a string for the default clock's name
|
||||
"12hour" : false, // 12 or 24 hour clock?
|
||||
distance : "kilometer" // or "mile"
|
||||
}
|
||||
|
|
|
@ -1,27 +0,0 @@
|
|||
Bangle.HID = E.toUint8Array(atob("BQEJBqEBhQIFBxngKecVACUBdQGVCIEClQF1CIEBlQV1AQUIGQEpBZEClQF1A5EBlQZ1CBUAJXMFBxkAKXOBAAkFFQAm/wB1CJUCsQLABQwJAaEBhQEVACUBdQGVAQm1gQIJtoECCbeBAgm4gQIJzYECCeKBAgnpgQIJ6oECwA=="));
|
||||
|
||||
(function() {
|
||||
var s = require('Storage').readJSON('@setting');
|
||||
var adv = { uart: true };
|
||||
if (s.ble) {
|
||||
if (s.dev)
|
||||
Bluetooth.setConsole(true);
|
||||
else
|
||||
Terminal.setConsole(true);
|
||||
if (s.HID) {
|
||||
adv.hid = Bangle.HID;
|
||||
} else
|
||||
delete Bangle.HID;
|
||||
}
|
||||
NRF.setServices({}, adv);
|
||||
// we just reset, so BLE should be on
|
||||
try { // disable advertising if BLE should be off
|
||||
if (!s.ble) NRF.sleep();
|
||||
else NRF.wake();
|
||||
} catch(e) {}
|
||||
if (!s.vibrate) Bangle.buzz=Promise.resolve;
|
||||
if (!s.beep) Bangle.beep=Promise.resolve;
|
||||
Bangle.setLCDTimeout(s.timeout);
|
||||
if (!s.timeout) Bangle.setLCDPower(1);
|
||||
E.setTimeZone(s.timezone);
|
||||
})()
|
|
@ -5,13 +5,7 @@ g.clear();
|
|||
const storage = require('Storage');
|
||||
let settings;
|
||||
|
||||
function debug(msg, arg) {
|
||||
if (settings.debug)
|
||||
console.log(msg, arg);
|
||||
}
|
||||
|
||||
function updateSettings() {
|
||||
debug('updating settings', settings);
|
||||
//storage.erase('@setting'); // - not needed, just causes extra writes if settings were the same
|
||||
storage.write('@setting', settings);
|
||||
}
|
||||
|
@ -25,9 +19,9 @@ function resetSettings() {
|
|||
beep: true,
|
||||
timezone: 0,
|
||||
HID : false,
|
||||
HIDGestures: false,
|
||||
debug: false,
|
||||
clock: null
|
||||
clock: null,
|
||||
"12hour" : false,
|
||||
distance : "kilometer" // or "mile"
|
||||
};
|
||||
setLCDTimeout(settings.timeout);
|
||||
updateSettings();
|
||||
|
@ -43,6 +37,7 @@ const boolFormat = (v) => v ? "On" : "Off";
|
|||
function showMainMenu() {
|
||||
const mainmenu = {
|
||||
'': { 'title': 'Settings' },
|
||||
'Make Connectable': makeConnectable,
|
||||
'BLE': {
|
||||
value: settings.ble,
|
||||
format: boolFormat,
|
||||
|
@ -93,7 +88,28 @@ function showMainMenu() {
|
|||
}
|
||||
}
|
||||
},
|
||||
'Locale': showLocaleMenu,
|
||||
'Select Clock': showClockMenu,
|
||||
'HID': {
|
||||
value: settings.HID,
|
||||
format: boolFormat,
|
||||
onchange: () => {
|
||||
settings.HID = !settings.HID;
|
||||
updateSettings();
|
||||
}
|
||||
},
|
||||
'Set Time': showSetTimeMenu,
|
||||
'Reset Settings': showResetMenu,
|
||||
'Turn Off': Bangle.off,
|
||||
'< Back': ()=> {load();}
|
||||
};
|
||||
return E.showMenu(mainmenu);
|
||||
}
|
||||
|
||||
function showLocaleMenu() {
|
||||
const localemenu = {
|
||||
'': { 'title': 'Locale' },
|
||||
'< Back': showMainMenu,
|
||||
'Time Zone': {
|
||||
value: settings.timezone,
|
||||
min: -11,
|
||||
|
@ -104,37 +120,24 @@ function showMainMenu() {
|
|||
updateSettings();
|
||||
}
|
||||
},
|
||||
'HID': {
|
||||
value: settings.HID,
|
||||
format: boolFormat,
|
||||
onchange: () => {
|
||||
settings.HID = !settings.HID;
|
||||
'Clock Style': {
|
||||
value: !!settings["12hour"],
|
||||
format : v => v?"12hr":"24hr",
|
||||
onchange: v => {
|
||||
settings["12hour"] = v;
|
||||
updateSettings();
|
||||
}
|
||||
},
|
||||
'HID Gestures': {
|
||||
value: settings.HIDGestures,
|
||||
format: boolFormat,
|
||||
onchange: () => {
|
||||
settings.HIDGestures = !settings.HIDGestures;
|
||||
'Distance/Speed': {
|
||||
value: settings.distanceunit=="mile",
|
||||
format: v => v?"mile":"kilometer",
|
||||
onchange: v => {
|
||||
settings.distanceunit = v?"mile":"kilometer";
|
||||
updateSettings();
|
||||
}
|
||||
},
|
||||
'Debug': {
|
||||
value: settings.debug,
|
||||
format: boolFormat,
|
||||
onchange: () => {
|
||||
settings.debug = !settings.debug;
|
||||
updateSettings();
|
||||
}
|
||||
},
|
||||
'Set Time': showSetTimeMenu,
|
||||
'Make Connectable': makeConnectable,
|
||||
'Reset Settings': showResetMenu,
|
||||
'Turn Off': Bangle.off,
|
||||
'< Back': ()=> {load();}
|
||||
};
|
||||
return E.showMenu(mainmenu);
|
||||
return E.showMenu(localemenu);
|
||||
}
|
||||
|
||||
function showResetMenu() {
|
||||
|
@ -149,16 +152,7 @@ function showResetMenu() {
|
|||
}
|
||||
setTimeout(showMainMenu, 50);
|
||||
});
|
||||
},
|
||||
// this is include for debugging. remove for production
|
||||
/*'Erase': () => {
|
||||
storage.erase('=setting');
|
||||
storage.erase('-setting');
|
||||
storage.erase('@setting');
|
||||
storage.erase('*setting');
|
||||
storage.erase('+setting');
|
||||
E.reboot();
|
||||
}*/
|
||||
}
|
||||
};
|
||||
return E.showMenu(resetmenu);
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue