Added an app to adjust the loading screen

pull/2757/head^2
Gordon Williams 2023-05-18 11:01:06 +01:00
parent e69c088f08
commit b39bd76770
5 changed files with 110 additions and 0 deletions

View File

@ -0,0 +1 @@
0.01: New App!

View File

@ -0,0 +1,15 @@
# Loading Screen Settings
This app allows you to choose the loading screen that's displayed when swapping between apps on Bangle.js.
## Usage
Go to the Launcher, then `Settings`, then `Apps` and click on `Loading Screen` - you can then click to choose the loading screen you'll see.
## Internals
When reloading an app (fast load doesn't display anything), Bangle.js looks for a file called `.loading` (in versions 2v18+) which should be
an image. If it doesn't exist, the default `Loading...` screen is displayed. If it does exist and is less than 3 bytes long,
nothing is displayed, or if it's an image it is displayed, centered.
This app sets that image file accordingly, but you can always upload your own file.

BIN
apps/loadingscreen/app.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 773 B

View File

@ -0,0 +1,13 @@
{ "id": "loadingscreen",
"name": "Loading Screen",
"version":"0.01",
"description": "On Bangle.js 2v18+, customize the app loading screen",
"icon": "app.png",
"tags": "tool",
"type": "settings",
"supports" : ["BANGLEJS2"],
"readme": "README.md",
"storage": [
{"name":"loadingscreen.settings.js","url":"settings.js"}
]
}

View File

@ -0,0 +1,81 @@
(function(back) {
function goBack() {
var im = require("Storage").read(".loading");
if (im && im.length>3) {
var i = g.imageMetrics(im);
g.reset().drawImage(im, (g.getWidth()-i.width)/2, (g.getHeight()-i.height)/2);
}
setTimeout(back, 500);
}
function savePattern(pattern) {
E.showMessage("Please wait...");
var im = Graphics.createImage(pattern,"string");
var w = g.getWidth(), h = g.getHeight();
var b = Graphics.createArrayBuffer(w,h,1,{msb:true});
for (var y=0;y<h;y+=im.height)
for (var x=0;x<w;x+=im.width)
b.drawImage(im,x,y);
b.transparent = 0;
require("Storage").write(".loading",b.asImage("string"));
goBack();
}
function iconHourglass() {
// To get FG+BG+transparent, convert a monochrome image as a 2 bit greyscale using the image converter
return require("heatshrink").decompress(atob("mE4wUBqAOJgtABZMBGjH/ABALlBhA8LBIJrBBZCDCBZEFqoLJqoLO4BBDgYLcn/wBYcP/gLFCYIbBBY38BYYFBBYVACIILE+EBBYY1BLgX/BYgVBEAQECBYSQCJAQcCRwNVqg8CBYIDCioLDCYQbDBYRUBFYPwBwJ8BBQQ8BCgQaCHQQLNEZQ7LKZZrLQYbKDQYabDAASbFYoQACWYg2DAQrjPNIRtCBYjKCBYLMCBaIKBAAILGAAwLNRwQLHgrJCBY8BRIQLHSoYLJBQ4MDBcYAWNYIAIgKDBABEFA="));
}
function iconRetro() {
// A mac-style loading window
return require("heatshrink").decompress(atob("rk1gP/ABP4DBMDwALJnAWK39/+4tH3EEgIWJoEXC34WZORSghZ1oW/CzkB8AQC4AWFhgEBgOMFowSCjAtGhkPx8HzncuwWE4OMjHY41sDgQWCjHPzOMs3MCwuNzOYCw9Y7IWI5oWE5uwCwUf5+O53es187aJJFogAFFooAEg4HCcv4Wbn//ACnwA"))
}
E.showMenu({
"": {title:/*LANG*/"Loading Screen"},
"Default" : () => {require("Storage").erase(".loading");goBack()},
"No Screen" : () => {require("Storage").write(".loading","NO");goBack()}, // less than 3 chars and nothing is rendered
"Hourglass" : () => {require("Storage").write(".loading",iconHourglass());goBack()},
"Retro" : () => {require("Storage").write(".loading",iconRetro());goBack()},
"Stripes" : () => savePattern(`
XX..XX..
.XX..XX.
..XX..XX
X..XX..X
XX..XX..
.XX..XX.
..XX..XX
X..XX..X
`),
"Lines" : () => savePattern(`
XXXXXXXX
........
XXXXXXXX
........
XXXXXXXX
........
XXXXXXXX
........
`),
"Dots" : () => savePattern(`
......
..XX..
.XXXX.
.XXXX.
..XX..
......
`)
});
/* For testing, this generates an image with a different colour surrounding on it
require("FontSinclair").add(Graphics);
var b = Graphics.createArrayBuffer(84,12,2);
b.setBgColor(1).clear();
b.transparent = 1;
b.setFont("Sinclair").setColor(0);
for (var y=-2;y<=2;y++) for (var x=-2;x<=2;x++) b.drawString("LOADING...",2+x,2+y);
b.setColor(3).drawString("LOADING...",2,2);
g.drawImage(b.asImage("string"));
*/
})