When >1 clockinfo, swiping one back tries to ensure they don't display the same thing
parent
0ac8ac3ec6
commit
a59957be1e
|
|
@ -4,3 +4,4 @@
|
||||||
0.04: On 2v18+ firmware, we can now stop swipe events from being handled by other apps
|
0.04: On 2v18+ firmware, we can now stop swipe events from being handled by other apps
|
||||||
eg. when a clockinfo is selected, swipes won't affect swipe-down widgets
|
eg. when a clockinfo is selected, swipes won't affect swipe-down widgets
|
||||||
0.05: Reported image for battery is now transparent (2v18+)
|
0.05: Reported image for battery is now transparent (2v18+)
|
||||||
|
0.06: When >1 clockinfo, swiping one back tries to ensure they don't display the same thing
|
||||||
|
|
@ -10,7 +10,12 @@ if (stepGoal == undefined) {
|
||||||
stepGoal = d != undefined && d.settings != undefined ? d.settings.goal : 10000;
|
stepGoal = d != undefined && d.settings != undefined ? d.settings.goal : 10000;
|
||||||
}
|
}
|
||||||
|
|
||||||
// Load the settings, with defaults
|
/// How many times has addInteractive been called?
|
||||||
|
exports.loadCount = 0;
|
||||||
|
/// A list of all the instances returned by addInteractive
|
||||||
|
exports.clockInfos = [];
|
||||||
|
|
||||||
|
/// Load the settings, with defaults
|
||||||
exports.loadSettings = function() {
|
exports.loadSettings = function() {
|
||||||
return Object.assign({
|
return Object.assign({
|
||||||
hrmOn : 0, // 0(Always), 1(Tap)
|
hrmOn : 0, // 0(Always), 1(Tap)
|
||||||
|
|
@ -22,6 +27,7 @@ exports.loadSettings = function() {
|
||||||
);
|
);
|
||||||
};
|
};
|
||||||
|
|
||||||
|
/// Load a list of ClockInfos - this does not cache and reloads each time
|
||||||
exports.load = function() {
|
exports.load = function() {
|
||||||
var settings = exports.loadSettings();
|
var settings = exports.loadSettings();
|
||||||
delete settings.apps; // keep just the basic settings in memory
|
delete settings.apps; // keep just the basic settings in memory
|
||||||
|
|
@ -63,7 +69,7 @@ exports.load = function() {
|
||||||
} else img=atob("GBiBAAABgAADwAAHwAAPgACfAAHOAAPkBgHwDwP4Hwf8Pg/+fB//OD//kD//wD//4D//8D//4B//QB/+AD/8AH/4APnwAHAAACAAAA==");
|
} else img=atob("GBiBAAABgAADwAAHwAAPgACfAAHOAAPkBgHwDwP4Hwf8Pg/+fB//OD//kD//wD//4D//8D//4B//QB/+AD/8AH/4APnwAHAAACAAAA==");
|
||||||
return {
|
return {
|
||||||
text : v + "%", v : v, min:0, max:100, img : img
|
text : v + "%", v : v, min:0, max:100, img : img
|
||||||
}
|
};
|
||||||
},
|
},
|
||||||
show : function() { this.interval = setInterval(()=>this.emit('redraw'), 60000); Bangle.on("charging", batteryUpdateHandler); batteryUpdateHandler(); },
|
show : function() { this.interval = setInterval(()=>this.emit('redraw'), 60000); Bangle.on("charging", batteryUpdateHandler); batteryUpdateHandler(); },
|
||||||
hide : function() { clearInterval(this.interval); delete this.interval; Bangle.removeListener("charging", batteryUpdateHandler); },
|
hide : function() { clearInterval(this.interval); delete this.interval; Bangle.removeListener("charging", batteryUpdateHandler); },
|
||||||
|
|
@ -73,7 +79,7 @@ exports.load = function() {
|
||||||
get : () => { let v = Bangle.getHealthStatus("day").steps; return {
|
get : () => { let v = Bangle.getHealthStatus("day").steps; return {
|
||||||
text : v, v : v, min : 0, max : stepGoal,
|
text : v, v : v, min : 0, max : stepGoal,
|
||||||
img : atob("GBiBAAcAAA+AAA/AAA/AAB/AAB/gAA/g4A/h8A/j8A/D8A/D+AfH+AAH8AHn8APj8APj8AHj4AHg4AADAAAHwAAHwAAHgAAHgAADAA==")
|
img : atob("GBiBAAcAAA+AAA/AAA/AAB/AAB/gAA/g4A/h8A/j8A/D8A/D+AfH+AAH8AHn8APj8APj8AHj4AHg4AADAAAHwAAHwAAHgAAHgAADAA==")
|
||||||
}},
|
};},
|
||||||
show : function() { Bangle.on("step", stepUpdateHandler); stepUpdateHandler(); },
|
show : function() { Bangle.on("step", stepUpdateHandler); stepUpdateHandler(); },
|
||||||
hide : function() { Bangle.removeListener("step", stepUpdateHandler); },
|
hide : function() { Bangle.removeListener("step", stepUpdateHandler); },
|
||||||
},
|
},
|
||||||
|
|
@ -82,7 +88,7 @@ exports.load = function() {
|
||||||
get : () => { return {
|
get : () => { return {
|
||||||
text : (hrm||"--") + " bpm", v : hrm, min : 40, max : 200,
|
text : (hrm||"--") + " bpm", v : hrm, min : 40, max : 200,
|
||||||
img : atob("GBiBAAAAAAAAAAAAAAAAAAAAAADAAADAAAHAAAHjAAHjgAPngH9n/n82/gA+AAA8AAA8AAAcAAAYAAAYAAAAAAAAAAAAAAAAAAAAAA==")
|
img : atob("GBiBAAAAAAAAAAAAAAAAAAAAAADAAADAAAHAAAHjAAHjgAPngH9n/n82/gA+AAA8AAA8AAAcAAAYAAAYAAAAAAAAAAAAAAAAAAAAAA==")
|
||||||
}},
|
};},
|
||||||
run : function() {
|
run : function() {
|
||||||
Bangle.setHRMPower(1,"clkinfo");
|
Bangle.setHRMPower(1,"clkinfo");
|
||||||
if (settings.hrmOn==1/*Tap*/) {
|
if (settings.hrmOn==1/*Tap*/) {
|
||||||
|
|
@ -131,11 +137,11 @@ exports.load = function() {
|
||||||
require("Storage").list(/clkinfo.js$/).forEach(fn => {
|
require("Storage").list(/clkinfo.js$/).forEach(fn => {
|
||||||
try{
|
try{
|
||||||
var a = eval(require("Storage").read(fn))();
|
var a = eval(require("Storage").read(fn))();
|
||||||
var b = menu.find(x => x.name === a.name)
|
var b = menu.find(x => x.name === a.name);
|
||||||
if(b) b.items = b.items.concat(a.items);
|
if(b) b.items = b.items.concat(a.items);
|
||||||
else menu = menu.concat(a);
|
else menu = menu.concat(a);
|
||||||
} catch(e){
|
} catch(e){
|
||||||
console.log("Could not load clock info "+E.toJS(fn))
|
console.log("Could not load clock info "+E.toJS(fn));
|
||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|
@ -204,11 +210,12 @@ exports.addInteractive = function(menu, options) {
|
||||||
if ("function" == typeof options) options = {draw:options}; // backwards compatibility
|
if ("function" == typeof options) options = {draw:options}; // backwards compatibility
|
||||||
options.index = 0|exports.loadCount;
|
options.index = 0|exports.loadCount;
|
||||||
exports.loadCount = options.index+1;
|
exports.loadCount = options.index+1;
|
||||||
|
exports.clockInfos[options.index] = options;
|
||||||
options.focus = options.index==0 && options.x===undefined; // focus if we're the first one loaded and no position has been defined
|
options.focus = options.index==0 && options.x===undefined; // focus if we're the first one loaded and no position has been defined
|
||||||
const appName = (options.app||"default")+":"+options.index;
|
const appName = (options.app||"default")+":"+options.index;
|
||||||
|
|
||||||
// load the currently showing clock_infos
|
// load the currently showing clock_infos
|
||||||
let settings = exports.loadSettings()
|
let settings = exports.loadSettings();
|
||||||
if (settings.apps[appName]) {
|
if (settings.apps[appName]) {
|
||||||
let a = settings.apps[appName].a|0;
|
let a = settings.apps[appName].a|0;
|
||||||
let b = settings.apps[appName].b|0;
|
let b = settings.apps[appName].b|0;
|
||||||
|
|
@ -259,6 +266,10 @@ exports.addInteractive = function(menu, options) {
|
||||||
//can happen for dynamic ones (alarms, events)
|
//can happen for dynamic ones (alarms, events)
|
||||||
//in the worst case we come back to 0
|
//in the worst case we come back to 0
|
||||||
} while(menu[options.menuA].items.length==0);
|
} while(menu[options.menuA].items.length==0);
|
||||||
|
// When we change, ensure we don't display the same thing as another clockinfo if we can avoid it
|
||||||
|
while ((options.menuB < menu[options.menuA].items.length) &&
|
||||||
|
exports.clockInfos.some(m => (m!=options) && m.menuA==options.menuA && m.menuB==options.menuB))
|
||||||
|
options.menuB++;
|
||||||
}
|
}
|
||||||
if (oldMenuItem) {
|
if (oldMenuItem) {
|
||||||
menuHideItem(oldMenuItem);
|
menuHideItem(oldMenuItem);
|
||||||
|
|
@ -319,6 +330,7 @@ exports.addInteractive = function(menu, options) {
|
||||||
delete Bangle.CLKINFO_FOCUS;
|
delete Bangle.CLKINFO_FOCUS;
|
||||||
menuHideItem(menu[options.menuA].items[options.menuB]);
|
menuHideItem(menu[options.menuA].items[options.menuB]);
|
||||||
exports.loadCount--;
|
exports.loadCount--;
|
||||||
|
delete exports.clockInfos[options.index];
|
||||||
};
|
};
|
||||||
options.redraw = function() {
|
options.redraw = function() {
|
||||||
drawItem(menu[options.menuA].items[options.menuB]);
|
drawItem(menu[options.menuA].items[options.menuB]);
|
||||||
|
|
@ -339,8 +351,7 @@ exports.addInteractive = function(menu, options) {
|
||||||
menuShowItem(menu[options.menuA].items[options.menuB]);
|
menuShowItem(menu[options.menuA].items[options.menuB]);
|
||||||
|
|
||||||
return true;
|
return true;
|
||||||
}
|
};
|
||||||
|
|
||||||
delete settings; // don't keep settings in RAM - save space
|
delete settings; // don't keep settings in RAM - save space
|
||||||
return options;
|
return options;
|
||||||
};
|
};
|
||||||
|
|
|
||||||
|
|
@ -1,7 +1,7 @@
|
||||||
{ "id": "clock_info",
|
{ "id": "clock_info",
|
||||||
"name": "Clock Info Module",
|
"name": "Clock Info Module",
|
||||||
"shortName": "Clock Info",
|
"shortName": "Clock Info",
|
||||||
"version":"0.05",
|
"version":"0.06",
|
||||||
"description": "A library used by clocks to provide extra information on the clock face (Altitude, BPM, etc)",
|
"description": "A library used by clocks to provide extra information on the clock face (Altitude, BPM, etc)",
|
||||||
"icon": "app.png",
|
"icon": "app.png",
|
||||||
"type": "module",
|
"type": "module",
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue