• Every widget that changes it's width during draw needs to schedule a redraw. This seems somewhat wasteful since at least with simple timeouts all calls will eventually be executed. The update methods can all be called without needing to schedule additional draws. Drawing in that case only needs to be done if an app actually calls drawWidgets.

    The current state of affairs is at https://github.com/halemmerich/BangleApp­s/tree/experimental/widgetUpdate and my apploader at https://halemmerich.github.io/BangleApps­/

    There are now two apps that should work indepent from each other: fastload and widgetupdate

    fastload mostly wraps load to automatically decide between reboot and fast loading. That keeps the apps a tiny bit simpler. The rest just basically wraps methods to be able to show a different loading screen and add handling remove-methods in the E.show* methods. This will probably stay an app on my apploader for the foreseeable future and I suspect to have missed a lot of edgecases.

    widgetupdate is a bit more interesting as it handles the hiding of widgets (including wrapping touch,drag and swipe handlers) as well as setting a correct appRect and detection of an app loading widgets or not. That should work for all apps without changes in the app. This also does essentially the same thing for the drawing as the newest widget_utils module does but at widget loading time. Newly available methods are Bangle.updateWidgets() and Bangle.hideWidgets().

    There also is a small modification in bootloader which adds Bangle.showClock. That is used in widclose and launch to get the clock loaded while beeing able to be modified by fastload if installed. Essentially this prevents using eval there, which can not be overriden to modify its behaviour. It always calls load, which is then optionally overriden by fastload with the eval approach depending on the existence of Bangle.uiRemove.

    Maybe some of the widget handling could be integrated into the firmware to fix the current bad behaviour with regard to Bangle.CLOCK changes.

    Alternatively the fast loading using eval from clock to launcher could be reverted to get the widgets working like they were before and then optionally reinstated by installing fastload and/or widgetupdate. That would however mean implementing remove handlers in watchfaces/apps and update methods in widgets that are not used if those two apps are not installed.

    TL;DR: To try it out install bleeding edge firmware, install fastload and widgetupdate ,update everything my apploader has newer versions of and probably expect bugs (especially messages is currently practically not tested at all) :)

  • I gave it a spin! A video of me navigating the watch with presses of the physical buton, then using Quick launch, and doing some other stuff, is attached.

    It's a bit inconsistent with it sometimes displaying 'load' message, sometimes 'fastload' message and sometimes no message box. The most consistently inconsistent (😛) thing with regard to this is when I go back and forth between clock and launcher using the Quick launch app for swipes.

    I also noticed that if I had 'Widget editor' installed the widgets would not be rendered graphically, but could be pressed (e.g. back button).

    Used both fastload helper and widgetupdate.

About

Avatar for halemmerich @halemmerich started