Custom watch face turns black (disappears) while swiping in the menu on device (Vivoactive 5)

This issue is fixed on the Vivoactive 5 with firmware 12.10, released on 2024-11-20. (No changes to custom watch faces required)

See bug report: https://forums.garmin.com/developer/connect-iq/i/bug-reports/watch-faces-downloaded-show-a-blank-screen-when-starting-to-scroll-up-or-down


On my device, Vivoactive 5, I noticed that the stock watch faces slightly move and stay visible during a swipe gesture (opening Recents or Glances menu).

The template custom watch face, I initialized with the SDK (version below), shows a different behaviour: It turns black as soon as the swipe gesture starts.

If you start a swipe gesture by accident, this is extremely irritating, as it takes a second or more for the watch face to appear again.

Is this intended behaviour and is there a way to fix this?

Thanks in advance!

Connect IQ SDK v7.1.1
App Type: Watch Face simple
minApiLevel="3.1.0"

  • Here is the unedited template code of the watch face View:
    import Toybox.Graphics;
    import Toybox.Lang;
    import Toybox.System;
    import Toybox.WatchUi;

    class TestFaceView extends WatchUi.WatchFace {
        function initialize() {
            WatchFace.initialize();
        }

        // Load your resources here
        function onLayout(dc as Dc) as Void {
            setLayout(Rez.Layouts.WatchFace(dc));
        }

        // Called when this View is brought to the foreground. Restore
        // the state of this View and prepare it to be shown. This includes
        // loading resources into memory.
        function onShow() as Void {
        }

        // Update the view
        function onUpdate(dc as Dc) as Void {
            // Get and show the current time
            var clockTime = System.getClockTime();
            var timeString = Lang.format("$1$:$2$", [clockTime.hour, clockTime.min.format("%02d")]);
            var view = View.findDrawableById("TimeLabel") as Text;
            view.setText(timeString);
            // Call the parent onUpdate function to redraw the layout
            View.onUpdate(dc);
        }

        // Called when this View is removed from the screen. Save the
        // state of this View here. This includes freeing resources from
        // memory.
        function onHide() as Void {
        }

        // The user has just looked at their watch. Timers and animations may be started here.
        function onExitSleep() as Void {
        }

        // Terminate any active timers and prepare for slow updates.
        function onEnterSleep() as Void {
        }
    }
  • Yeah I noticed the same thing on my Forerunner 955 with CIQ watchfaces. I think it's intentional and I don't think there's anything that can be done about it.

    This effect is especially noticeable if you swipe very slowly (or hold your finger motionless on the screen after swiping partway.) It's also noticeable if you just press UP or DOWN (which are obviously not buttons you have on your VIvoactive 5.)

    Interestingly, this doesn't happen on Forerunner 935 (which lacks a touchscreen). When you press UP or DOWN from a CIQ watchface, the watch attempts to smoothly scroll it out of the way, but it's *extremely* slow (especially compared to native watchfaces.)

    I assume the new behavior for modern watches is an attempt to optimize this behavior. (There's another recent thread about how scrolling away from CIQ watchfaces is still slow on watches like Instinct 2, and even Epix Gen 2 users have complained that CIQ watchfaces interfere with the "double-click LIGHT button for flashlight" feature.)

    Just another example of how Garmin devices have to make various UI/UX tradeoffs to balance out slow hardware. When we swipe stuff on a phone or tablet, we're used to the content smoothly tracking our finger. When the content abruptly disappears, only to be replaced by the next "page" with no transition, it looks terrible. But obviously it's even worse if the next page takes too long to appear.

  • If I were Garmin, I would do something similar to what some app switchers / OSs (*) have done - take a screenshot of the watchface when the user starts scrolling, and scroll that (instead of trying to scroll the live watchface.) Assuming that can be done quickly enough, it would give the user the *illusion* of a smooth transition / content that tracks the finger no matter how slowly you swipe (or even if you stop swiping part way and hold your finger motionless so that both the watchface and the next page are visible at the same time.)

    (* i.e. they take a screenshot of the last state of an app or window so that they can show a very quick preview even if the app isn't currently rendering its display.)

    EDIT: It seems that Garmin basically does this for native watchfaces. If you partially scroll a native watchface that displays always-on seconds (on a my 955 which has a MIP display), the seconds stop animating. Strange that they'd do this for native watchfaces but not CIQ watchfaces.

  • Try one of my watch faces to help narrow this down.  I just checked it on a va5. but I found you may have to swipe a couple of times to see "Recent", but no black screens.

    The template is about as simple as you can get, but maybe a setting like AOD is involved.

    https://apps.garmin.com/apps/3d8dd9a3-a90c-45b0-8170-043161dfc26f

  • I did some further testing and found the black screen effect only happens when swiping *away* from a CIQ watchface (on my 955). When I swipe *towards* a CIQ watchface, it works as expected (the CIQ watchface is immediately rendered - even when only part of it is visible - and it smoothly scrolls into view.)

  • I just checked it on a va5. but I found you may have to swipe a couple of times to see "Recent", but no black screens.

    Have you tried swiping partway and leaving your finger motionless on the screen, so that for a native watchface, part of the watchface and part of the next page (glances or whatever) would be on the screen at the same time? When I do that on my 955 with a CIQ watchface, the watchface disappears completely while part of the glance page appears. On the other hand, if I swipe partway from the glance page below the watchface back to a CIQ watchface (again leaving my finger motionless on the screen), I see both the (partial) CIQ watchface and the (partial) glance page at the same time.

    If you just swipe away from the watchface quickly, the transition from watchface to black to the next page (e.g. glances) may be too quick to be noticeable (which is probably what Garmin wants.)

    I don't have a VA5, but my experience on FR955 is exactly what OP said, and I doubt it's a coincidence. Especially bc I'm seeing this on a MIP device, I doubt it has anything to do with AOD. The most obvious explanation would be that Garmin is trying to speed up the act of scrolling away from CIQ watchfaces. Consider:

    - scrolling away from CIQ watchfaces was *extremely* slow on FR935 (for example), and FR935 attempted to smoothly scroll CIQ watchfaces out of the way (no black screens)

    - you are participating in a thread where people are complaining that scrolling away from a CIQ watchface on Instinct 2 is very slow

  • If I do a slow swipe to the right on the va5, "Recent" starts to appear on the left side and if I stop, wait, lift my finger, "Recent" fills the screen.

    The fact is, the processor on those older devices isn't the same as a few generations later.  The I2 is also more limited than many.  Just look at available memory for different app types...

  • If I do a slow swipe to the right on the va5, "Recent" starts to appear on the left side and if I stop, wait, lift my finger, "Recent" fills the screen.

    Yeah so you only answered half of my question: what happens to the CIQ watchface while "Recent" starts to appear? Does it stay partially visible or does it disappear completely?

    Again, this is what I see on my 955, when partially/slowly swiping up or down from the watchface:

    - native watchfaces: the native watchface partially remains on the screen, while the glance scrolls into view

    - CIQ watchfaces: the CIQ watchface disappears immediately, while the glance scrolls into view

    Again, the difference is extremely obvious if I partially swipe and stop (leaving my finger motionless on the screen.)

    With a native watchface I can freeze the screen so half the watchface and half the glance page are visible at the same time.

    With CIQ watchfaces, the half of the screen where the watchface would be is black, while half the glance page is visible.

    The fact is, the processor on those older devices isn't the same as a few generations later.  The I2 is also more limited than many.  Just look at available memory for different app types...

    Right and yet I have a 955 (with a modern processor that's much faster than 935), and it does the same thing that OP is describing. As I said above, people are also complaining about how CIQ watchfaces cause issues with the "double click LIGHT to open flashlight" feature on Epix gen 2, which obviously has a modern processor.

    Maybe it's a bug / oversight, or maybe it's an intentional move to avoid problems that have plagued other devices. Then again, scrolling *back* to a CIQ watchface works fine, so maybe it is a bug.

  • Yeah so you only answered half of my question: what happens to the CIQ watchface while "Recent" starts to appear? Does it stay partially visible or does it disappear completely?

    The right side of the screen is black.  But I'm also swiping a a crazy slow speed..  If I start and the stop a short bit later, the right edge of "recent" apps appears, and if I lift my finger, the screen clears and my watch face appears right away.  On some devices, the dc is cleared before onUpdate is called.

    See this is why I asked the poster to try my WF from 2015 on the va5, and I can look into whatever odd he sees. With my own source code and my own va5.

  • I tried your "Simple Big" watch face and surprisingly, I see the exact same effect as with the template.

    It turns black immediately at the shortes swipe gesture already, actually even before the menu is partially visible.

    My Vivoactive 5 has SW Version 10.20 (API Level 5.0.0) installed.

    Thanks for looking into this!

    Here is an image to make sure we talk about the same thing.

    Left: Custom watch face disappears

    Right: Stock watch face stays visible