The visibility check counted the ring service's own foreground service as
a visible window, so every ring opened its screen directly: over any app
without the setting, and on a locked phone on top of the full-screen
intent. Started activities are now tracked through lifecycle callbacks.
The decision moves into DirectLaunchPolicy with JVM tests. It needs a
phone in use, leaves a screen already showing this ring alone so a
restart no longer resets a dismiss challenge, and never covers a call
from another app.
The switch stores the choice only once the overlay permission is granted
and clears it when the permission is gone, so it can't stick or come
back on by itself. It falls back to the app details page where the
permission page is missing. One shared intent opens the ring screens,
and the architecture notes no longer say a timer never takes the screen.