BangleApps/apps/widhid/wid.js

139 lines
4.2 KiB
JavaScript
Raw Normal View History

2023-05-08 12:04:30 +00:00
(function () {
2023-05-08 14:02:54 +00:00
var settings = require("Storage").readJSON("setting.json", true) || { HID: false };
2023-05-08 12:04:30 +00:00
if (settings.HID !== "kbmedia") {
console.log("widhid: can't enable, HID setting isn't \"kbmedia\"");
return;
}
2023-05-10 07:05:29 +00:00
delete settings;
2023-05-08 14:02:54 +00:00
var anchor = { x: 0, y: 0 };
var start = { x: 0, y: 0 };
2023-05-08 12:04:30 +00:00
var dragging = false;
var activeTimeout;
2023-05-08 14:02:54 +00:00
var waitForRelease = true;
2023-05-10 22:13:19 +00:00
var onSwipe = (function (_lr, ud) {
if (ud > 0 && !activeTimeout && !Bangle.CLKINFO_FOCUS) {
2023-05-08 12:04:30 +00:00
listen();
2023-05-08 14:02:54 +00:00
Bangle.buzz(20);
2023-05-08 12:04:30 +00:00
}
});
2023-05-08 14:02:54 +00:00
var onDrag = (function (e) {
E.stopEventPropagation && E.stopEventPropagation();
2023-05-08 14:02:54 +00:00
if (e.b === 0) {
var wasDragging = dragging;
dragging = false;
if (waitForRelease) {
waitForRelease = false;
return;
}
if (!wasDragging
|| (Math.abs(e.x - anchor.x) < 2 && Math.abs(e.y - anchor.y) < 2)) {
toggle();
onEvent();
return;
}
}
if (waitForRelease)
2023-05-08 12:04:30 +00:00
return;
2023-05-08 14:02:54 +00:00
if (e.b && !dragging) {
2023-05-08 12:04:30 +00:00
dragging = true;
2023-05-08 14:02:54 +00:00
setStart(e);
Object.assign(anchor, start);
2023-05-08 12:04:30 +00:00
return;
}
2023-05-08 14:02:54 +00:00
var dx = e.x - start.x;
var dy = e.y - start.y;
if (Math.abs(dy) > 25 && Math.abs(dx) > 25) {
setStart(e);
2023-05-08 12:04:30 +00:00
return;
}
2023-05-08 14:02:54 +00:00
if (dx > 40) {
next();
onEvent();
waitForRelease = true;
}
else if (dx < -40) {
prev();
onEvent();
waitForRelease = true;
}
else if (dy > 30) {
down();
onEvent();
setStart(e);
}
else if (dy < -30) {
up();
onEvent();
setStart(e);
}
2023-05-08 12:04:30 +00:00
});
2023-05-08 14:02:54 +00:00
var setStart = function (_a) {
var x = _a.x, y = _a.y;
start.x = x;
start.y = y;
};
var onEvent = function () {
Bangle.buzz(20);
listen();
};
2023-05-08 12:04:30 +00:00
var listen = function () {
var wasActive = !!activeTimeout;
2023-05-08 14:02:54 +00:00
if (!wasActive) {
waitForRelease = true;
Bangle.on("drag", onDrag);
var dragHandlers = Bangle["#ondrag"];
if (dragHandlers && typeof dragHandlers !== "function") {
Bangle["#ondrag"] = [onDrag].concat(dragHandlers.filter(function (f) { return f !== onDrag; }));
}
2023-05-08 14:02:54 +00:00
redraw();
}
if (activeTimeout)
clearTimeout(activeTimeout);
2023-05-08 12:04:30 +00:00
activeTimeout = setTimeout(function () {
activeTimeout = undefined;
2023-05-08 14:02:54 +00:00
Bangle.removeListener("drag", onDrag);
2023-05-08 12:04:30 +00:00
redraw();
2023-05-08 14:02:54 +00:00
}, 3000);
2023-05-08 12:04:30 +00:00
};
var redraw = function () { return setTimeout(Bangle.drawWidgets, 50); };
var connected = NRF.getSecurityStatus().connected;
2023-05-08 12:04:30 +00:00
WIDGETS["hid"] = {
area: "tr",
sortorder: -20,
draw: function () {
if (this.width === 0)
return;
2023-05-08 12:04:30 +00:00
g.drawImage(activeTimeout
2023-05-08 14:02:54 +00:00
? require("heatshrink").decompress(atob("jEYxH+AEfH44XXAAYXXDKIXZDYp3pC/6KHUMwWHC/4XvUy4YGdqoA/AFoA=="))
: require("heatshrink").decompress(atob("jEYxH+AEcdjoXXAAYXXDKIXZDYp3pC/6KHUMwWHC/4XvUy4YGdqoA/AFoA==")), this.x + 2, this.y + 2);
2023-05-08 12:04:30 +00:00
},
width: connected ? 24 : 0,
2023-05-08 12:04:30 +00:00
};
if (connected)
Bangle.on("swipe", onSwipe);
2023-05-10 07:05:29 +00:00
delete connected;
2023-05-08 12:04:30 +00:00
NRF.on("connect", function () {
WIDGETS["hid"].width = 24;
Bangle.on("swipe", onSwipe);
2023-05-08 12:04:30 +00:00
redraw();
});
NRF.on("disconnect", function () {
WIDGETS["hid"].width = 0;
Bangle.removeListener("swipe", onSwipe);
2023-05-08 12:04:30 +00:00
redraw();
});
var sendHid = function (code) {
try {
NRF.sendHIDReport([1, code], function () { return NRF.sendHIDReport([1, 0]); });
}
catch (e) {
console.log("sendHIDReport:", e);
}
2023-05-08 12:04:30 +00:00
};
var next = function () { return sendHid(0x01); };
var prev = function () { return sendHid(0x02); };
var toggle = function () { return sendHid(0x10); };
var up = function () { return sendHid(0x40); };
var down = function () { return sendHid(0x80); };
})();