diff --git a/apps/msgtwscr/boot.js b/apps/msgtwscr/boot.js index 0a7923c05..fa4e4edd6 100644 --- a/apps/msgtwscr/boot.js +++ b/apps/msgtwscr/boot.js @@ -4,8 +4,7 @@ onTwistEmitDrag(); } - // If Fastload Utils is installed this is used: - Bangle.on("message", (_, msg)=>{if (Bangle.CLOCK && msg.new) { + let attachAfterTimeout = ()=>{ setTimeout(()=>{ if (global.__FILE__=="messagegui.new.js") { onTwistEmitDrag(); @@ -16,6 +15,11 @@ // activating when it shouldn't. // Maybe we could add events for when fast load and/or Bangle.uiRemove occurs? // Then that could be used similarly to boot code and/or the `kill` event. + } + + // If Fastload Utils is installed this is used: + Bangle.on("message", (_, msg)=>{if (Bangle.CLOCK && msg.new) { + attachAfterTimeout(); }}); // twistThreshold How much acceleration to register a twist of the watch strap? Can be negative for opposite direction. default = 800 @@ -23,16 +27,22 @@ // twistTimeout How little time (in ms) must a twist take from low->high acceleration? default = 1000 function onTwistEmitDrag() { Bangle.setOptions({twistThreshold:2500, twistMaxY:-800, twistTimeout:400}); + let isTwistDragging = false; let twistHandler = ()=>{ - Bangle.setLocked(false); - Bangle.setLCDPower(true); - Bangle.emit("swipe",0,-1); - let i = 25; - const int = setInterval(() => { - Bangle.emit("drag", {dy:-3}) - i--; - if (i<1) clearInterval(int); - }, 10); + if (!isTwistDragging) { + isTwistDragging = true; + Bangle.setLocked(false); + Bangle.setLCDPower(true); + let i = 25; + const int = setInterval(() => { + Bangle.emit("drag", {dy:-3, b:i===0?0:1}) + i--; + if (i<0) { + clearInterval(int); + isTwistDragging = false; + } + }, 10); + } } Bangle.on("twist", twistHandler); // Give messagegui some extra time to add its remove function to @@ -43,6 +53,8 @@ Bangle.uiRemove = function () { Bangle.removeListener("twist", twistHandler) showMessageUIRemove(); + // Reset twist drag logic if we go to next message. + attachAfterTimeout(); } }}, 800)