1
0
Fork 0
BangleApps/apps/ptlaunch/boot.js

98 lines
2.6 KiB
JavaScript

(function () {
var DEBUG = false;
var log = (message) => {
if (DEBUG) {
console.log(JSON.stringify(message));
}
};
var storedPatterns;
var CIRCLE_RADIUS = 25;
var CIRCLE_RADIUS_2 = Math.pow(CIRCLE_RADIUS, 2);
var positions = [];
var getPattern = (positions) => {
var circles = [
{ x: 25, y: 25, i: 0 },
{ x: 87, y: 25, i: 1 },
{ x: 150, y: 25, i: 2 },
{ x: 25, y: 87, i: 3 },
{ x: 87, y: 87, i: 4 },
{ x: 150, y: 87, i: 5 },
{ x: 25, y: 150, i: 6 },
{ x: 87, y: 150, i: 7 },
{ x: 150, y: 150, i: 8 },
];
return positions.reduce((pattern, p, i, arr) => {
var idx = circles.findIndex((c) => {
var dx = p.x > c.x ? p.x - c.x : c.x - p.x;
if (dx > CIRCLE_RADIUS) {
return false;
}
var dy = p.y > c.y ? p.y - c.y : c.y - p.y;
if (dy > CIRCLE_RADIUS) {
return false;
}
if (dx + dy <= CIRCLE_RADIUS) {
return true;
}
return dx * dx + dy * dy <= CIRCLE_RADIUS_2;
});
if (idx >= 0) {
pattern += circles[idx].i;
circles.splice(idx, 1);
}
if (circles.length === 0) {
arr.splice(1);
}
return pattern;
}, "");
};
var dragHandler = (position) => {
positions.push(position);
if (position.b === 0 || positions.length >= 200) {
var pattern = getPattern(positions);
log(pattern);
if (pattern) {
if (storedPatterns[pattern]) {
var app = storedPatterns[pattern].app;
if (!!app && !!app.src) {
if (storedPatterns.settings) {
if (storedPatterns.settings.lockDisabled) {
Bangle.setLCDPower(true);
}
}
Bangle.removeListener("drag", dragHandler);
load(app.src);
}
}
}
positions = [];
}
};
var sui = Bangle.setUI;
Bangle.setUI = function (mode, cb) {
sui(mode, cb);
if (typeof mode === "object") mode = (mode.clock ? "clock" : "") + mode.mode;
if (!mode || !mode.startsWith("clock")) {
storedPatterns = {};
Bangle.removeListener("drag", dragHandler);
return;
}
var storage = require("Storage");
storedPatterns = storage.readJSON("ptlaunch.patterns.json", 1) || {};
if (Object.keys(storedPatterns).length > 0) {
Bangle.on("drag", dragHandler);
if (storedPatterns.settings) {
if (storedPatterns.settings.lockDisabled) {
Bangle.setOptions({ lockTimeout: 1000 * 60 * 60 * 24 * 365 });
}
}
}
};
})();