> Actually eval('('+appSettings+')') is significantly worse I'm afraid.
>
> Basically, if you do Storage.read you get a pointer to external memory
> Any functions have their code kept in that memory so it saves loads of
> RAM. The second you append to the string it has to copy everything to
> RAM - so now every function ends up in RAM, not Flash :(
This reverts commit c135c70f
Apps and widgets can add a `<appid>.settings.js` file which can be
opened from the "App/widget settings" submenu.
This file should define a single function to configure the app/widget.
The function is passed a `back` argument, which can be used to return to
the settings menu by calling `back()`.
Example `<appid>.settings.js`:
```
function settings(back) {
const mySettingsMenu = {
'': { 'title': 'My Widget' },
'< Back': back, // go back to settings menu
'Sound': {
value: false,
format: s => s ? 'on' : 'off',
onchange: s => {if(s) Bangle.beep()} // TODO: save new value
},
};
E.showMenu(mySettingsMenu)
}
```
New Bangle.js firmwares remove 8 char name restriction so we're ditching the first char -> file type and using normal file extensions
Took the opportunity to remove code for older Bangle.js (since the new stuff won't work anyway)
Also removed the need for an 'app.json' - it's now renamed 'app.info' on the watch, and we just auto-generate it
Renamed a few apps so widgets all start with 'wid'