InfiniTime icon indicating copy to clipboard operation
InfiniTime copied to clipboard

Infineat Watchface

Open dmlls opened this issue 2 years ago • 46 comments

This PR implements the new watchface Infineat.

For anyone interested in trying it, it is already available here.

Note: the linked version differs slightly from the one in this PR, since it adds extended Latin support.


demo


This PR also implements a handy CheckboxList (check the watchface list in the above demo). I kept this class as general as possible, along the lines of Tile or ApplicationList, so that it can be used for other purposes as well.

This watchface could be considered "heavy" in terms of flash storage, since it adds two new fonts and an image. However, I've tried to keep things at their absolute minimum. One of the fonts only includes numbers (Bebas Neue, the main font used for the time) and the other (Teko) includes the characters [A-Za-z0-9]. The range of the letters in the Teko font could even be reduced, since they are only used for the days of the week ("Mon", "Tue", "Wed", etc).

The image is the PINE64 logo and has a size of 23x31px. I tried to make its background transparent so that it could be used in other places, but I didn't get it to render correctly. So in the end the background is white. If someone wants to try to make it transparent, I can provide the original SVG.

For a comparison, the latest build in develop:

 Memory region         Used Size  Region Size  %age Used
           FLASH:      403028 B       480 KB     82.00%
             RAM:       54872 B        64 KB     83.73%

And the Infineat build:

Memory region         Used Size  Region Size  %age Used
           FLASH:      416464 B       480 KB     84.73%
             RAM:       54984 B        64 KB     83.90%

dmlls avatar Mar 07 '22 18:03 dmlls

Neat

thefenriswolf avatar Mar 07 '22 19:03 thefenriswolf

Everytime a pick the Inifineat watchface my PineTime reboots.

ytsejam1138 avatar Mar 08 '22 18:03 ytsejam1138

@ytsejam1138 mmh interesting... How did you install it exactly? Also, just to check, you got it from here right? https://github.com/dmlls/InfiniTime/releases/tag/1.8.0-infineat

Anyone else having the same issue?

dmlls avatar Mar 08 '22 19:03 dmlls

@ytsejam1138 mmh interesting... How did you install it exactly? Also, just to check, you got it from here right? https://github.com/dmlls/InfiniTime/releases/tag/1.8.0-infineat

Anyone else having the same issue?

I installed it with the latest Gadgetbridge. And yes I downloaded it from GitHub from the link above.

ytsejam1138 avatar Mar 08 '22 19:03 ytsejam1138

@ytsejam1138 I just tried upgrading from InfiniTime 1.8.0 with Gadgetbridge and everything works fine. Maybe you can try with nRF Connect? And maybe also try downloading the image again, just in case.

If that doesn't work, please open an issue on my repo, we'll continue the conversation there. Let's keep this space for the PR itself :)

dmlls avatar Mar 08 '22 19:03 dmlls

open issue for the bootloop here: https://github.com/dmlls/InfiniTime/issues/1

NeroBurner avatar Mar 09 '22 22:03 NeroBurner

I tried to install the image and it broke my watch First I couldn't change brightness, so I restored and brightness still didn't work, so I downgraded to 1.7.1 and now Bluetooth stopped connecting

joseph58tech avatar Mar 10 '22 15:03 joseph58tech

I tried to install the image and it broke my watch First I couldn't change brightness, so I restored and brightness still didn't work, so I downgraded to 1.7.1 and now Bluetooth stopped connecting

OK I restarted my watch wich restored back to 1.8.0 and now everything works again

joseph58tech avatar Mar 10 '22 15:03 joseph58tech

@dmlls I've got a quote from @kieranc

[M] When is it required/recommended to increase the version number in the settings-class? Every time a new setting is added? Or only if a setting is changed/removed? [T] <KieranC> when a new setting is added afaik [T] <KieranC> when i added new settings without incrementing it, the initial values were initialised randomly [T] <KieranC> so if you increment it, on boot all settings will have their values initialised from... settings.h values? but if it's not incremented they won't

So I think incrementing the version number in Settings.h may fix the freeze/reboot error

NeroBurner avatar Mar 11 '22 21:03 NeroBurner

The image is the PINE64 logo and has a size of 23x31px. I tried to make its background transparent so that it could be used in other places, but I didn't get it to render correctly. So in the end the background is white. If someone wants to try to make it transparent, I can provide the original SVG.

Nice looking watchface! As far as the image transparency you might want to look at this option from lv_conf:

/*Images pixels with this color will not be drawn (with chroma keying)*/
#define LV_COLOR_TRANSP    LV_COLOR_MAKE(0x6c, 0xFc, 0x6a)         /*LV_COLOR_LIME: pure green*/

kieranc avatar Mar 12 '22 10:03 kieranc

Just tried 11b81157 on InfiniSim and on my dev-device and it works :tada:

NeroBurner avatar Mar 13 '22 19:03 NeroBurner

@dmlls This watchface looks really good, thanks for creating this PR! :1st_place_medal:

However, as you may know, we are a bit tight in memory, and I try to avoid adding new "big" resources like fonts for now (until we are able to move a few of them to the external memory). Have you already tested your Infineat with existing fonts? It probably don't look as neat as it is with new fonts, but would that be an acceptable compromise?

JF002 avatar Mar 14 '22 20:03 JF002

@dmlls This watchface looks really good, thanks for creating this PR! 🥇

However, as you may know, we are a bit tight in memory, and I try to avoid adding new "big" resources like fonts for now (until we are able to move a few of them to the external memory). Have you already tested your Infineat with existing fonts? It probably don't look as neat as it is with new fonts, but would that be an acceptable compromise?

@JF002 totally understand, I'll see what I can do with the existent fonts ;) I'd like to take as few space from other contributors as possible, great things won't stop coming to InfiniTime!

In any case, if anyone still prefers the original watchface, they can always refer to the fork.

dmlls avatar Mar 18 '22 14:03 dmlls

@kieranc @NeroBurner thanks for the suggestions guys!

dmlls avatar Mar 18 '22 15:03 dmlls

I added a couple of commits that respectively:

  • Make the Pine64 logo background transparent. I simply used the option "True color with alpha" when converting the image with the LVGL Image Converter. This however adds an extra 4 KiB to the C file.
  • Remove all new fonts included in the original Infineat watchface and use existing fonts. Well, I guess it's a little underwhelming but not terrible either. I personally always found the monospaced fonts in InfiniTime looking a bit old-fashioned (except for the Terminal watchface ;).

demo_existing_fonts

The new stats are:

Memory region         Used Size  Region Size  %age Used
           FLASH:      411524 B       480 KB     83.72%
             RAM:       54520 B        64 KB     83.19%

That's 1% less of flash usage with respect to the original Infineat watchface.

dmlls avatar Mar 21 '22 09:03 dmlls

It still looks neat indeed!

Could you add a battery-symbol to the watchface? I'd like to see the battery level on my watchface without needing to look at either gadgetbridge or the pinetime-settings. Otherwise this would be the first watchface without some sort of battery indicator

NeroBurner avatar Mar 21 '22 10:03 NeroBurner

It still looks neat indeed!

Could you add a battery-symbol to the watchface? I'd like to see the battery level on my watchface without needing to look at either gadgetbridge or the pinetime-settings. Otherwise this would be the first watchface without some sort of battery indicator

Yeah I found it weird that there is no battery indicator, I just noticed this about a day ago when I was going to look down at my watch so I could check the battery, and there was no watch face indicator.

joseph58tech avatar Mar 21 '22 19:03 joseph58tech

As a cleaner option than adding a battery icon you could make the bar on the left go red when battery is below a preset percentage. maybe 40% currently would be safe-ish

kieranc avatar Mar 22 '22 14:03 kieranc

@kieranc that's also a good idea. Only thing that it may not that intuitive for users who know nothing about the watchface. I actually had thought of something similar (see https://github.com/dmlls/InfiniTime/pull/3#issuecomment-1072860833).

I will make a couple mockups with different approaches and post them here to gather feedback.

dmlls avatar Mar 23 '22 08:03 dmlls

So, this is what I came up with:

Option 1: battery icon bottom-left.

icon_bottom_left


Option 2: battery icon top-left.

icon_top_left


Option 3: Pine64 logo as battery indicator.

logo_fill

The mockups have the original font, but it would obviously be the same with the system font. The 3rd option seems to me the less "intrusive" one, although I also like the 1st one.

I'd like to do a small voting with reactions:

  • Option 1: 🚀
  • Option 2: 🎉
  • Option 3: ❤️

dmlls avatar Mar 25 '22 09:03 dmlls

Option 3: ❤️

But use a darker color on the pinecone to give it more contrast so it will be easier to read at a glance.

ytsejam1138 avatar Mar 25 '22 15:03 ytsejam1138

I like options 1 and 3, 3 is clearly the coolest but risks not being obvious at first glance.

kieranc avatar Mar 25 '22 15:03 kieranc

option 3 : but as well a little more darker and in order to see , in action , can you link for each of them (or at least 1 and 3 )a dfu ?

lman0 avatar Mar 25 '22 22:03 lman0

it lack as well a state for when charging @dmlls , maybe maybe the pinecone blinking would help for option 3

lman0 avatar Mar 27 '22 12:03 lman0

So... I implemented the battery indicator (option 3) with a nice little charging animation. Here's a demo:

demo_battery

I also rebased develop.

If you guys could take it for a spin and test that everything works fine, that'd be great! 😀

dmlls avatar Apr 03 '22 21:04 dmlls

I let the CI to run, so people can potentially use those builds to test.

Avamander avatar Apr 03 '22 22:04 Avamander

Really excited for this one. When I got my Pinetime, I found the watch faces by zephyrlabs and was immediately bummed there was no way to load them without integrating them into the firmware. Terminal is cool and I have been enjoying it, but really want to see more fancy watchfaces. This really hits the spot!

Zandengoff avatar Apr 21 '22 00:04 Zandengoff

hi tested around a week , no problem of usability no crash whatosever and the battery indicator is big enough to be readable and understandable (at very least 40% and 60% are very clear) if anything , it would be great to have the hr data visible (if it activated) at the right , maybe, of the step counter.

keep the good work @dmlls

trman avatar Apr 21 '22 16:04 trman

@Zandengoff thank you!

@trman thanks too for the testing!

if anything , it would be great to have the hr data visible (if it activated) at the right , maybe, of the step counter.

This point was discussed briefly here https://github.com/dmlls/InfiniTime/pull/3#issuecomment-1072860833. I'm open to continue this discussion, but in my opinion adding the heart rate information takes more from the cleanliness of the design than functionality it provides. Unfortunately, the PineTime screen is rather small and things get crowded pretty easily ;)

dmlls avatar Apr 22 '22 10:04 dmlls

hello

the watchface is quite neat , so i decided to give it a try @dmlls ! after toying around , i found the background change quite good. but then i clicked on the bottom " on" label of the setting ... i found that when the background is removed , so is the battery icon ! that is quite inconvenient :(

could you make remain when off , only the little white background and the battery icon ? maybe another way , would to make the battery icon remain without background but with it colour inverted ( so it could become a white pine battery on black background)

lman0 avatar Apr 22 '22 21:04 lman0