Merge pull request #3740 from thinkpoop/master
[gbmusic] Fix #3737 and a handful of other fixesmaster
commit
78bd2c26b6
|
|
@ -12,3 +12,4 @@
|
|||
0.11: Use default Bangle formatter for booleans
|
||||
0.12: Issue newline before GB commands (solves issue with console.log and ignored commands)
|
||||
0.13: Upgrade to new translation system
|
||||
0.14: Fix auto-start saved state; fix clearing track number; allow widget clicks
|
||||
|
|
|
|||
|
|
@ -91,8 +91,7 @@ function rScroller(l) {
|
|||
const w = g.stringWidth(l.label)+40,
|
||||
y = l.y+l.h/2;
|
||||
l.offset = l.offset%w;
|
||||
g.setClipRect(l.x, l.y, l.x+l.w-1, l.y+l.h-1)
|
||||
.setColor(l.col).setBgColor(l.bgCol) // need to set colors: iScroll calls this function outside Layout
|
||||
g.setColor(l.col).setBgColor(l.bgCol) // need to set colors: iScroll calls this function outside Layout
|
||||
.setFontAlign(-1, 0) // left center
|
||||
.clearRect(l.x, l.y, l.x+l.w-1, l.y+l.h-1)
|
||||
.drawString(l.label, l.x-l.offset+40, y)
|
||||
|
|
@ -128,57 +127,8 @@ function rInfo(l) {
|
|||
.setFontAlign(0, -1) // center top
|
||||
.drawString(l.label, l.x+l.w/2, l.y);
|
||||
}
|
||||
/**
|
||||
* Render icon
|
||||
* @param l
|
||||
*/
|
||||
function rIcon(l) {
|
||||
const x2 = l.x+l.w-1,
|
||||
y2 = l.y+l.h-1;
|
||||
switch(l.icon) {
|
||||
case "pause": {
|
||||
const w13 = l.w/3;
|
||||
g.drawRect(l.x, l.y, l.x+w13, y2);
|
||||
g.drawRect(l.x+l.w-w13, l.y, x2, y2);
|
||||
break;
|
||||
}
|
||||
case "play": {
|
||||
g.drawPoly([
|
||||
l.x, l.y,
|
||||
x2, l.y+l.h/2,
|
||||
l.x, y2,
|
||||
], true);
|
||||
break;
|
||||
}
|
||||
case "previous": {
|
||||
const w15 = l.w*1/5;
|
||||
g.drawPoly([
|
||||
x2, l.y,
|
||||
l.x+w15, l.y+l.h/2,
|
||||
x2, y2,
|
||||
], true);
|
||||
g.drawRect(l.x, l.y, l.x+w15, y2);
|
||||
break;
|
||||
}
|
||||
case "next": {
|
||||
const w45 = l.w*4/5;
|
||||
g.drawPoly([
|
||||
l.x, l.y,
|
||||
l.x+w45, l.y+l.h/2,
|
||||
l.x, y2,
|
||||
], true);
|
||||
g.drawRect(l.x+w45, l.y, x2, y2);
|
||||
break;
|
||||
}
|
||||
default: { // red X
|
||||
console.log(`Unknown icon: ${l.icon}`);
|
||||
g.setColor("#f00")
|
||||
.drawRect(l.x, l.y, x2, y2)
|
||||
.drawLine(l.x, l.y, x2, y2)
|
||||
.drawLine(l.x, y2, x2, l.y);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
let layout;
|
||||
function makeUI() {
|
||||
Bangle.loadWidgets();
|
||||
|
|
@ -417,7 +367,7 @@ function handleButton2Press() {
|
|||
let tCommand = {};
|
||||
/**
|
||||
* Send command and highlight corresponding control
|
||||
* @param {string} command - "play"/"pause"/"next"/"previous"/"volumeup"/"volumedown"
|
||||
* @param {"play"|"pause"|"playpause"|"next"|"previous"|"volumeup"|"volumedown"} command
|
||||
*/
|
||||
function sendCommand(command) {
|
||||
Bluetooth.println("");
|
||||
|
|
@ -433,15 +383,21 @@ function sendCommand(command) {
|
|||
drawControls();
|
||||
}
|
||||
|
||||
function handleTouch(btn, pos) {
|
||||
if (pos === undefined || pos.y >= Bangle.appRect.y) {
|
||||
togglePlay();
|
||||
}
|
||||
}
|
||||
|
||||
function togglePlay() {
|
||||
sendCommand(stat==="play" ? "pause" : "play");
|
||||
sendCommand("playpause");
|
||||
}
|
||||
|
||||
/**
|
||||
* Setup touch+swipe for Bangle.js 1
|
||||
*/
|
||||
function touch1() {
|
||||
Bangle.on("touch", togglePlay);
|
||||
Bangle.on("touch", handleTouch);
|
||||
Bangle.on("swipe", dir => {
|
||||
sendCommand(dir===1 ? "previous" : "next");
|
||||
});
|
||||
|
|
@ -450,7 +406,7 @@ function touch1() {
|
|||
* Setup touch+swipe for Bangle.js 2
|
||||
*/
|
||||
function touch2() {
|
||||
Bangle.on("touch", togglePlay);
|
||||
Bangle.on("touch", handleTouch);
|
||||
// swiping
|
||||
let drag;
|
||||
Bangle.on("drag", e => {
|
||||
|
|
@ -483,10 +439,9 @@ function startLCDWatch() {
|
|||
Bangle.on("lcdPower", (on) => {
|
||||
if (on) {
|
||||
// redraw and resume scrolling
|
||||
tick();
|
||||
layout.render();
|
||||
fadeOut();
|
||||
if (offset.offset!==null) {
|
||||
if (layout.title.offset!==null) { // Making an assumption about what offset.offset was supposed to be
|
||||
if (!iScroll) {
|
||||
iScroll = setInterval(scroll, 200);
|
||||
}
|
||||
|
|
|
|||
|
|
@ -1,6 +1,6 @@
|
|||
setTimeout( // make other boot code run first, so we override e.g. android.boot.js GB
|
||||
() => {
|
||||
const APP = global.__FILE__==="gbmusic.app.js",
|
||||
const APP = globalThis.__FILE__==="gbmusic.app.js",
|
||||
a = !!(require("Storage").readJSON("gbmusic.json", 1) || {}).autoStart;
|
||||
|
||||
let s, i; // state, info
|
||||
|
|
@ -10,7 +10,7 @@ setTimeout( // make other boot code run first, so we override e.g. android.boot.
|
|||
* Only runs while other apps are loaded
|
||||
*/
|
||||
function check() {
|
||||
if (s!=="play" || !i || !a || !Bangle.CLOCK) return; // only launch app if we know which song we are playing, and autoLoad is enabled
|
||||
if ((!s || s.state!=="play") || !i || !a || !Bangle.CLOCK) return; // only launch app if we know which song we are playing, and autoLoad is enabled
|
||||
delete (i.t);
|
||||
// store info and launch music app
|
||||
require("Storage").writeJSON("gbmusic.load.json", {
|
||||
|
|
@ -20,18 +20,19 @@ setTimeout( // make other boot code run first, so we override e.g. android.boot.
|
|||
load("gbmusic.app.js");
|
||||
}
|
||||
|
||||
global.GB = (_GB => e => {
|
||||
|
||||
globalThis.GB = (_GB => e => {
|
||||
// we eat music events!
|
||||
switch(e.t) {
|
||||
case "musicinfo":
|
||||
i = e;
|
||||
return APP ? info(e) : check();
|
||||
return APP ? globalThis.info(e) : check();
|
||||
case "musicstate":
|
||||
s = e.state;
|
||||
return APP ? state(e) : check();
|
||||
s = e;
|
||||
return APP ? globalThis.state(e) : check();
|
||||
default:
|
||||
// pass on other events
|
||||
if (_GB) setTimeout(_GB, 0, e);
|
||||
}
|
||||
})(global.GB);
|
||||
})(globalThis.GB);
|
||||
}, 1);
|
||||
|
|
|
|||
|
|
@ -2,7 +2,7 @@
|
|||
"id": "gbmusic",
|
||||
"name": "Gadgetbridge Music Controls",
|
||||
"shortName": "Music Controls",
|
||||
"version": "0.13",
|
||||
"version": "0.14",
|
||||
"description": "Control the music on your Gadgetbridge-connected phone",
|
||||
"icon": "icon.png",
|
||||
"screenshots": [{"url":"screenshot_v1_d.png"},{"url":"screenshot_v1_l.png"},
|
||||
|
|
|
|||
Loading…
Reference in New Issue