mirror of https://github.com/espruino/BangleApps
messagesoverlay - Track the backed up handlers while the overlay is up
parent
a6b92215fa
commit
f8174e5106
|
@ -410,18 +410,79 @@ let getTouchHandler = function(ovr){
|
||||||
};
|
};
|
||||||
};
|
};
|
||||||
|
|
||||||
let restoreHandler = function(event){
|
const EVENTS=["touch", "drag", "swipe", "lock"];
|
||||||
LOG("Restore", backup[event]);
|
|
||||||
Bangle.removeAllListeners(event);
|
let hasBackup = false;
|
||||||
Bangle["#on" + event]=backup[event];
|
|
||||||
backup[event] = undefined;
|
let origOn = Bangle.on;
|
||||||
|
let backupOn = function(event, handler){
|
||||||
|
if (EVENTS.includes(event)){
|
||||||
|
if (!backup[event])
|
||||||
|
backup[event] = [];
|
||||||
|
backup[event].push(handler);
|
||||||
|
}
|
||||||
|
else origOn.call(Bangle, event, handler);
|
||||||
};
|
};
|
||||||
|
|
||||||
let backupHandler = function(event){
|
let origRemove = Bangle.removeListener;
|
||||||
if (backupDone) return; // do not backup, overlay is already up
|
let backupRemove = function(event, handler){
|
||||||
|
if (EVENTS.includes(event) && backup[event]){
|
||||||
|
LOG("backup for " + event + ": " + backup[event]);
|
||||||
|
backup[event] = backup[event].filter(e=>e!==handler);
|
||||||
|
}
|
||||||
|
else origRemove.call(Bangle, event, handler);
|
||||||
|
};
|
||||||
|
|
||||||
|
let origRemoveAll = Bangle.removeAllListeners;
|
||||||
|
let backupRemoveAll = function(event){
|
||||||
|
if (backup[event])
|
||||||
|
backup[event] = undefined;
|
||||||
|
origRemoveAll.call(Bangle);
|
||||||
|
};
|
||||||
|
|
||||||
|
let restoreHandlers = function(){
|
||||||
|
if (!hasBackup){
|
||||||
|
LOG("No backup available");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
for (let event of EVENTS){
|
||||||
|
LOG("Restore", backup[event]);
|
||||||
|
origRemoveAll.call(Bangle, event);
|
||||||
|
if (backup[event] && backup[event].length == 1)
|
||||||
|
backup[event] = backup[event][0];
|
||||||
|
Bangle["#on" + event]=backup[event];
|
||||||
|
backup[event] = undefined;
|
||||||
|
}
|
||||||
|
|
||||||
|
Bangle.on = origOn;
|
||||||
|
Bangle.removeListener = origRemove;
|
||||||
|
Bangle.removeAllListeners = origRemoveAll;
|
||||||
|
|
||||||
|
hasBackup = false;
|
||||||
|
};
|
||||||
|
|
||||||
|
let backupHandlers = function(){
|
||||||
|
if (hasBackup){
|
||||||
|
LOG("Backup already exists");
|
||||||
|
return false; // do not backup, overlay is already up
|
||||||
|
}
|
||||||
|
|
||||||
|
for (let event of EVENTS){
|
||||||
backup[event] = Bangle["#on" + event];
|
backup[event] = Bangle["#on" + event];
|
||||||
LOG("Backed up", backup[event]);
|
if (typeof backup[event] == "function")
|
||||||
|
backup[event] = [ backup[event] ];
|
||||||
|
LOG("Backed up", backup[event], event);
|
||||||
Bangle.removeAllListeners(event);
|
Bangle.removeAllListeners(event);
|
||||||
|
}
|
||||||
|
|
||||||
|
Bangle.on = backupOn;
|
||||||
|
Bangle.removeListener = backupRemove;
|
||||||
|
Bangle.removeAllListeners = backupRemoveAll;
|
||||||
|
|
||||||
|
hasBackup = true;
|
||||||
|
|
||||||
|
return true;
|
||||||
};
|
};
|
||||||
|
|
||||||
let cleanup = function(){
|
let cleanup = function(){
|
||||||
|
@ -429,38 +490,33 @@ let cleanup = function(){
|
||||||
Bangle.removeListener("lock", lockListener);
|
Bangle.removeListener("lock", lockListener);
|
||||||
lockListener = undefined;
|
lockListener = undefined;
|
||||||
}
|
}
|
||||||
restoreHandler("touch");
|
restoreHandlers();
|
||||||
restoreHandler("swipe");
|
|
||||||
restoreHandler("drag");
|
|
||||||
|
|
||||||
Bangle.setLCDOverlay();
|
Bangle.setLCDOverlay();
|
||||||
backupDone = false;
|
|
||||||
ovr = undefined;
|
ovr = undefined;
|
||||||
quiet = undefined;
|
quiet = undefined;
|
||||||
};
|
};
|
||||||
|
|
||||||
let backup = {};
|
let backup = {};
|
||||||
|
|
||||||
let backupDone = false;
|
|
||||||
|
|
||||||
let main = function(ovr, event) {
|
let main = function(ovr, event) {
|
||||||
LOG("Main", event.t);
|
LOG("Main", event.t);
|
||||||
|
let didBackup = backupHandlers();
|
||||||
|
|
||||||
if (!lockListener) {
|
if (!lockListener) {
|
||||||
lockListener = function (e){
|
lockListener = function (e){
|
||||||
updateClearingTimeout();
|
updateClearingTimeout();
|
||||||
drawBorder();
|
drawBorder();
|
||||||
};
|
};
|
||||||
Bangle.on('lock', lockListener);
|
LOG("Add overlay lock handlers");
|
||||||
|
origOn.call(Bangle, 'lock', lockListener);
|
||||||
}
|
}
|
||||||
backupHandler("touch");
|
|
||||||
backupHandler("swipe");
|
if (didBackup){
|
||||||
backupHandler("drag");
|
LOG("Add overlay UI handlers");
|
||||||
if (!backupDone){
|
origOn.call(Bangle, 'touch', getTouchHandler(ovr));
|
||||||
Bangle.on('touch', getTouchHandler(ovr));
|
origOn.call(Bangle, 'drag', getDragHandler(ovr));
|
||||||
Bangle.on('drag', getDragHandler(ovr));
|
|
||||||
}
|
}
|
||||||
backupDone=true;
|
|
||||||
|
|
||||||
if (event !== undefined){
|
if (event !== undefined){
|
||||||
drawBorder(ovr);
|
drawBorder(ovr);
|
||||||
|
|
Loading…
Reference in New Issue