mirror of https://github.com/espruino/BangleApps
The library combines musicinfo+musicstate messages, and waited for a "complete" message before emitting the event. But once you are playing music you don't get new music state events. The problem was that when the first "complete" message arrives, the UI is load()ed, so the library forgets its state, and doesn't emit anymore music events until the play state changes. This - changes the library to keep combining music messages, but always emit an event - makes the UI only launch itself if it sees a "complete" music event - makes the UI also combine musicinfo+musicstate messages |
||
---|---|---|
.. | ||
ChangeLog | ||
README.md | ||
app.png | ||
lib.js | ||
metadata.json | ||
settings.js |
README.md
Messages library
This library handles the passing of messages. It can storess a list of messages and allows them to be retrieved by other apps.
Example
Assuming you are using GadgetBridge and "overlay notifications":
- Gadgetbridge sends an event to your watch for an incoming message
- The
android
app parses the message, and callsrequire("messages").pushMessage({/** the message */})
require("messages")
callsBangle.emit("message", "text", {/** the message */})
- Overlay Notifications shows the message in an overlay, and marks it as
handled
- The default UI app (Message UI,
messagegui
) sees the event is marked ashandled
, so does nothing. - The default widget (
widmessages
) does nothing withhandled
, and shows a notification icon. - You tap the notification, in order to open the full GUI: Overlay Notifications
calls
require("messages").openGUI({/** the message */})
openGUI
callsrequire("messagegui").open(/** copy of the message */)
.- The
messagegui
library loads the Message UI app.
Events
When a new message arrives, a "message"
event is emitted, you can listen for
it like this:
myMessageListener = Bangle.on("message", (type, message)=>{
if (message.handled) return; // another app already handled this message
// <type> is one of "text", "call", "alarm", "map", or "music"
// see `messages/lib.js` for possible <message> formats
// message.t could be "add", "modify" or "remove"
E.showMessage(`${message.title}\n${message.body}`, `${message.t} ${type} message`);
// You can prevent the default `message` app from loading by setting `message.handled = true`:
message.handled = true;
});
Apps can launch the full GUI by calling require("messages").openGUI()
, if you
want to write your own GUI, it should include boot code that listens for
"messageGUI"
events:
Bangle.on("messageGUI", message=>{
if (message.handled) return; // another app already opened it's GUI
message.handled = true; // prevent other apps form launching
Bangle.load("my_message_gui.app.js");
})
Requests
Please file any issues on https://github.com/espruino/BangleApps/issues/new?title=[messages]%20library
Creator
Gordon Williams
Contributors
Attributions
Icons used in this app are from https://icons8.com