-
I've been wanted to change the way notifications work for a while, and finally have a proof of concept ready to work with, using the new
Bangle.SetLCDOverlay
from Gordon.
Firstly, big thanks to Gordon for this new feature , it's fabulous! Exactly what I was looking for, though I didn't know it before!Goals:
- Fast notifications (when you hear a notification on the phone, it should be on the watch as soon as you look at it.
- Large notifications (as much text as possible on display at once)
- Separate the comms to gadgetbridge, the message view, music controls, and call handling. Easier to tweak and change if they are separate.
My new notification system replaces the Android app on the watch with a very slightly tweaked version. Instead of linking into the Messages app it emits events, which can then be picked up by other apps.
The notifications themselves use
SetLCDOverlay
to show a message over the top of whatever you have on screen at the time. They're scrollable (sort of) for long messages, but have no actions, they simply show you the notification.It is very, very low quality at the moment, lots of missing features, but does show notifications. To try it out, remove your
Android
andMessages
app from your Bangle, and install the two apps here: https://sir-indy.github.io/BangleApps/?q=aa
Be aware that I'm actively working on this and it could change or break without warning!Things to do:
- Make notifications prettier: maybe a coloured outline, centred text.
- Fix scrolling: currently for long messages they drop off the screen.
- Change notifications to a
notify
type app, so others can use it. - Change the Comms app to log the messages somewhere.
- Write a new message viewing app.
- Add actionable call notifications.
- Write a music control app.
If anyone has any thoughts they'd like to share about my way of doing this, or suggestions to make things work better, please let me know. Just be aware that I'm primarily making this for myself and my use case, so may not implement every idea.
PS. there was supposed to be a screenshot attached, but I can't use
g.dump()
to get an image of the Overlay. Sorry! - Fast notifications (when you hear a notification on the phone, it should be on the watch as soon as you look at it.
-
I've made a 3d printed stand too, this is for a banglejs2 with a continuous loop strap. It also stops the charger slipping and trying to short itself on the steel strap!
Details here: https://www.printables.com/model/233771-banglejs2-watch-stand -
You're correct that
layout.update
takes a long time, because it's recalculating the sizes of every element. But there are other ways to update only certain elements of the layout, see the docs here: https://www.espruino.com/Bangle.js+Layout#updating-the-screen.
The first is 'lazy' - it will only update the items that have changed when you calllayout.render
(not.update
, you shouldn't need to call that manually).The second is, if you give the items you want to change in your layout an
id
, you can clear it, update it, then render just that item:my_layout.clear(my_layout[id_name]); my_layout[id_name].label = new_value; my_layout.render(my_layout[id_name]);
This doesn't change the size, or change any other items, so it's much faster.
I made this into a function in one of my apps to repeatedly change text values: https://github.com/sir-indy/BangleApps/blob/2508fd38abf4c1f701967824395a311c6c34b114/apps/smpltmr/app.js#L167-L171Hope that helps!
-
Personally, I'd rather have less places to talk, I'm happy with this forum and often forget to check GitHub anyway! There was a question at one point about moving the whole forum to GitHub forums, but don't know where that went.
I've had great success talking about all the things @Kane mentioned right here! The people here are very friendly and happy to help, it's been excellent for me. But maybe I'm just old fashioned...
-
-
-
-
Yep, that works! All looks good to me. I particularly like the marker, having a visual indication for when the letter is locked in really helps.
Do you mind sharing how you change branch in GitHub? I've been working on one thing at a time because the checking script and pages only work on the main branch. Switching between branches would be very helpful!
-
Hi @Ganblejs,
I'm trying to test out your new changes, but I can only see V0.01 at the link you posted? Am I looking in the wrong place?I've seen the bug with the ok-button shrinking the text, but in the alarm message, so it's not something we've changed here. It may be something that I've broken when I tweaked the layout library, I'll look into it.
Align buttons: Annoyingly, that is something else I changed then accidentally overwrote my code and missed it! Easy to fix though, at the start of the code put
var btnWidth = g.getWidth()/3;
, then in each button in the layout addwidth:btnWidth
. This will fix them all at exactly the same size. -
Hi, they sound like good changes, good idea.
I did have the text displayed correctly on launch, but accidentally overwrote my code with an old version, oops! Didn't notice that I'd missed that. Can you do me a favour and make another change? Capitalise the first word 'Swipe' in the help text, that's been bugging me.I suspect you can fix the exit problem by clearing the charTimeout in the 'back' function of the layout. Use the same code as in the backspace and onKeypad function. Now that chunk will be used in 3 places you could wrap it up as it's own clearTimeout function if you want.
Hope that helps!
-
-
@Alessandro don't worry about it, lower case with a larger icons looks better than upper case and small icon. Thanks for trying though!
-
Thank you Gordon! I'll keep working on it. So basically I shouldn't have worried about changing things in the first place!
- Double high scroller sounds like a good idea, I'll use that.
- What actions are required?
- Tick - opens the notification on the phone / responds positively - swipe right?
- Cross - dismisses the notification on the phone / responds negatively - swipe left?
- Delete?
- Mark Read/Unread?
- Each message menu also has 'Mark all read' and 'Delete all'. Should these move to the main list of messages?
- Tick - opens the notification on the phone / responds positively - swipe right?
- A note at the bottom showing the swipe actions is a good idea, something like
<- X _ _ _ _ Tick ->
.
- Double high scroller sounds like a good idea, I'll use that.
-
Pull request opened here: https://github.com/espruino/BangleApps/pull/1814
-
Thank you for the feedback Gordon, rigrig and Alessandro.
I can see the sense in Gordon and rigrig's points, splitting will be confusing and messy. Alessandro, thank you for pointing out that GitHub issue, I didn't think to look there! I think I've got carried away with the 'proper' way to design software, and forgotten about having something usable for everyone. I'll put aside thoughts of splitting up the
messages
app then, and focus on potential improvements to it.@Gordon, I like the idea to put in a custom display code, that would be neat. So I could make a new app that wrote to the
messages.custom.js
file, and it would use that? That would be useful if you want to keep the message view as it is, but I'll explain my proposed changes below:I didn't want to do anything earth-shattering, just make messages easier to read, without needing a free hand to tap the message to enlarge. See the screenshots below. I was going to look at replacing the current static message view, with lots of space taken by big buttons and big header, with the sort of
E.showScroller
you get when you tap the message, but preferably with nice buttons at the bottom.For short messages, there wouldn't be much difference, you would still see the buttons at the bottom of the screen, but for longer messages it wouldn't have to shrink the text down, it could just be scrolled up to get to the action buttons.
-
Hi,
I know there are many threads about the messages app (at least these: 1, 2, 3), so I don't want to try to change it. I would like to try and make an alternative messages app though.
My problem is that I don't want to also make a Calls, Music and Maps interface. Since the Messages app currently handles all of these, and the Android app requires the messages app, at the moment I can't make an alternative messages app without them. (Now I nearly have a nice keyboard app I'd also like to be able to reply to messages, but it sounds like there are problems there. But one step at a time).
Could the current Messages app be split into 4 apps, for each type of notification? Then it would be easier to have alternatives, and to pick and choose between them.
If this sounds sensible I'm happy to try and split them, but it does sound like a lot of work so don't want to start down that route without knowing if it would be useful.
-
Looking good @Alessandro! I like the last two icon options, with the X inside the alarm icon or the small X.
Is there an option for capitalised day of the week? Personally I preferMTWTF__
overmtwtf__
. -
Thank you, you're right generating the layout again seems to be the only way to do it at the moment. It feels like there should be a better way, but it works.
Great idea to pop up the help message on first launch! Very nice way to make it clear to the user how to use the app. I think I'll use that in future apps too, so thank you for that.
I'll make these changes and submit a pull request. How do you want to be credited? It seems most apps have a link to the original author Github Page, do you want your name on it as @Ganblejs or thyttan?
-
@Ganblejs, I've made some progress with the swipe issues, turns out you need to
Bangle.removeListener("swipe", onSwipe);
on exit, then it works fine.I'm having the opposite problem with the help screen though, tap the text to open the help screen, press ok to go back, and all the buttons in the layout stop responding. I'll look into this as I've had the problem before in my timer app, and fudged it with a custom onTouch, but it looks like we need a proper solution.
I'll add your setting for duration in later, for now shortened to 500ms, any less for me and I can't press the buttons quickly (and accurately) enough. Shows why a setting is a good idea!
(EDIT: tried to download a screenshot, came as a .dib format, attached to the message fine, but no preview image. Tried to remove and replace with a converted PNG version, error)
-
Hi @Ganblejs, thanks for your feedback and suggestions! It's great to have someone excited by something you've made!
Going point-by-point:
- User defined duration - we can make it configurable, just wondering why you'd want to change it? Was it too fast, too slow? Is there a better default we should use?
- Swipe - really like this idea, I've been giving it some thought and will fold your code into mine to use left for space, right for backspace, up/down for caps lock. Hiding the bottom row is a good idea, and with most of the bottom row functions replaced by swipes we can permanently remove it and have bigger buttons, which will help a lot!
It's come up in these forums before that swipes without an indicator that you can swipe could mean people don't know the option is there, but we can list it in the description, and maybe put a help message up when the text is tapped? - Auto switching letter case - this could make it hard to type in all caps, so I'll leave this as it is for now.
- promises - I can't help there, I don't know either! It was basically trial and (lots of) error getting this far. As far as I know though, when we call the back function which includes
Bangle.setUI();
, that should clear any custom interface code. I'll have a look though and see what I can find out.
- User defined duration - we can make it configurable, just wondering why you'd want to change it? Was it too fast, too slow? Is there a better default we should use?
-
It's ready, if anyone wants to try it out: https://sir-indy.github.io/BangleApps/?id=kbmulti
You'll also need to install Noteify to be able to use it.I'm probably going to tweak it some more, try a few different fonts on the buttons to see what looks clearest.
Any feedback please let me know, I've found that with just a little practice I'm now quite accurate and quick with it.
-
Sorry I wasn't clear, I didn't mean show the days of week and repeat symbol, I meant show just the symbol, since you need to tap on the alarm to actually do anything with it, and days of week are listed inside. But I can see that having the days of week on the main menu would be useful, sorry to cause confusion.
I like Gordon's idea to colour the icon, that should be nice and clear. Depending on the colours, the whole text could be 'greyed out', but I know dithered text doesn't look great so this may not be an option.
You could remove the Alarm/Timer text and still make it clear which are alarms and which are timers by changing the formatting. Show alarms as time, e.g. 12:45, 07:00. Show timers as durations, e.g. 5m, 1h20, 12h. Don't know how well that would translate though.
-
This thread is asking the same question, you might be able to join forces: http://forum.espruino.com/conversations/375397
But similar to user140377, I think the touchscreen is probably accurate and it's just using big fingers on a tiny screen that makes it tricky. I'm getting better at hitting the button I want with practice.
-
This might be unpopular, but my feedback on these changes is mostly negative:
I agree with user140377 - the checkbox is very clear on the tiny screen. Worth remembering when looking at giant icons on a computer that the real icon is ~3mm tall, and if the only change is a ~1mm tick or cross in the centre it could be hard to spot, especially if the user has bad eyesight. For the same reason, I liked the previous 'repeat' symbol. Nice and clear, obvious what it means, and symbols don't need translating. Personally I'm quite happy tapping the alarm to take me to a menu with all the options for it.
I do like the idea to hide the Bulk Actions behind another layer though, it was making me nervous having a DELETE ALL button there that I might accidentally press!
If you want to add more features to the alarms, directly adding a message would be nice, rather than going through Noteify.
Hi rigrig,
Yes, I tried your smessages app and liked it! I thought it was improvement over the standard messages, but still not quite exactly what I wanted. It did give me the nudge I needed to try and make my own.
I like your ideas, and different apps handling
message
events sounds like a good idea. The reason I've gone forBangle.on('notification'
style events was simply so you don't need an app called messages. Would messages become a new class of app, like clock or keyboard?Though now I look at the different classes of app, there is a
notify
class. That sounds more like what I'm making, so I will convert my notification app into a proper notification library.I've not been keeping up with fast app switching, it sounds promising!