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-09 06:38:56 +00:00
|
|
|
var onSwipe = (function (_lr, ud) {
|
2023-05-08 19:44:21 +00:00
|
|
|
if (Bangle.CLKINFO_FOCUS)
|
|
|
|
return;
|
2023-05-08 14:02:54 +00:00
|
|
|
if (!activeTimeout && ud > 0) {
|
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) {
|
|
|
|
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) {
|
|
|
|
suspendOthers();
|
|
|
|
waitForRelease = true;
|
|
|
|
Bangle.on("drag", onDrag);
|
|
|
|
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
|
|
|
resumeOthers();
|
|
|
|
redraw();
|
2023-05-08 14:02:54 +00:00
|
|
|
}, 3000);
|
2023-05-08 12:04:30 +00:00
|
|
|
};
|
2023-05-09 06:38:56 +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 () {
|
2023-05-08 14:07:42 +00:00
|
|
|
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
|
|
|
},
|
2023-05-09 06:38:56 +00:00
|
|
|
width: connected ? 24 : 0,
|
2023-05-08 12:04:30 +00:00
|
|
|
};
|
2023-05-09 06:38:56 +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;
|
2023-05-09 06:38:56 +00:00
|
|
|
Bangle.on("swipe", onSwipe);
|
2023-05-08 12:04:30 +00:00
|
|
|
redraw();
|
|
|
|
});
|
|
|
|
NRF.on("disconnect", function () {
|
|
|
|
WIDGETS["hid"].width = 0;
|
2023-05-09 06:38:56 +00:00
|
|
|
Bangle.removeListener("swipe", onSwipe);
|
2023-05-08 12:04:30 +00:00
|
|
|
redraw();
|
|
|
|
});
|
|
|
|
var sendHid = function (code) {
|
|
|
|
NRF.sendHIDReport([1, code], function () { return NRF.sendHIDReport([1, 0]); });
|
|
|
|
};
|
|
|
|
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); };
|
2023-05-08 20:46:16 +00:00
|
|
|
var touchEvents = {
|
|
|
|
tap: null,
|
|
|
|
gesture: null,
|
|
|
|
aiGesture: null,
|
|
|
|
swipe: null,
|
|
|
|
touch: null,
|
|
|
|
drag: null,
|
|
|
|
stroke: null,
|
|
|
|
};
|
2023-05-08 12:04:30 +00:00
|
|
|
var suspendOthers = function () {
|
2023-05-08 20:46:16 +00:00
|
|
|
for (var event in touchEvents) {
|
|
|
|
var handlers = Bangle["#on".concat(event)];
|
|
|
|
if (!handlers)
|
|
|
|
continue;
|
|
|
|
var newEvents = void 0;
|
|
|
|
if (handlers instanceof Array)
|
|
|
|
newEvents = handlers.slice();
|
|
|
|
else
|
|
|
|
newEvents = [handlers];
|
|
|
|
for (var _i = 0, newEvents_1 = newEvents; _i < newEvents_1.length; _i++) {
|
|
|
|
var handler = newEvents_1[_i];
|
|
|
|
Bangle.removeListener(event, handler);
|
|
|
|
}
|
|
|
|
touchEvents[event] = newEvents;
|
|
|
|
}
|
2023-05-08 12:04:30 +00:00
|
|
|
};
|
|
|
|
var resumeOthers = function () {
|
2023-05-08 20:46:16 +00:00
|
|
|
for (var event in touchEvents) {
|
|
|
|
var handlers = touchEvents[event];
|
|
|
|
touchEvents[event] = null;
|
|
|
|
if (handlers)
|
|
|
|
for (var _i = 0, handlers_1 = handlers; _i < handlers_1.length; _i++) {
|
|
|
|
var handler = handlers_1[_i];
|
2023-05-08 21:06:10 +00:00
|
|
|
try {
|
|
|
|
Bangle.on(event, handler);
|
|
|
|
}
|
|
|
|
catch (e) {
|
|
|
|
console.log("couldn't restore \"".concat(event, "\" handler:"), e);
|
|
|
|
}
|
2023-05-08 20:46:16 +00:00
|
|
|
}
|
|
|
|
}
|
2023-05-08 12:04:30 +00:00
|
|
|
};
|
|
|
|
})();
|