The ask
A home-screen widget.
Why this one has history
The 2.1.0 store listing claimed Widget and full media-notification controls
as a shipping feature. On 2026-08-24 that claim was deleted, because there is
no widget: no AppWidgetProvider, no Glance, no appwidget receiver in the
manifest, no widget XML anywhere in the repo. The manifest's only receiver is
DownloadActionReceiver. The media-notification half is real, which is
probably how the bullet survived a read.
So this issue is the other branch of that fix. Either the claim stays deleted
forever or this gets built and the claim comes back honestly.
Shape
Greenfield. No androidx.glance and no appwidget dependency in
app/build.gradle.kts or gradle/libs.versions.toml today.
Glance (androidx.glance:glance-appwidget) is the right tool. It is Compose-
flavored on the authoring side and compiles to RemoteViews, which is what
widgets actually run. Writing raw RemoteViews for a media widget in 2026 is
choosing pain.
Minimum useful widget, in priority order:
- Current book cover, title, and play/pause. That is the whole feature for
most people.
- Progress through the book, and chapter position.
- Skip back / skip forward, matching the notification's transport.
The hard part, named up front
State. The widget process is not the app process, and GlanceAppWidget.update()
is async and has to work after the app's process has been killed. The source of
truth has to be the MediaSession in PlaybackService
(app/src/main/AndroidManifest.xml:52, a Media3 MediaLibraryService), reached
through a MediaController the widget builds on demand, not a StateFlow held
in a ViewModel that no longer exists.
Getting that wrong produces a widget that is correct while the app is open and
frozen on a stale book the rest of the time, which is worse than no widget.
Cover art is the second trap. RemoteViews bitmaps have a hard transaction
size limit and the browse-artwork work in PRs #88 to #92 already learned that
lesson once on Android Auto. Reuse whatever bounding those fixes established
rather than passing a full-size cover.
Free or unlock?
Recommend FREE, and this is a reasoned position rather than a default.
A widget is a convenience, which is normally the gated side of the line. But it
is also the app sitting on someone's home screen every day, which is reach, and
reach is the diagnosed bottleneck. Gating it hides the app from exactly the
people most likely to buy the unlock. Same reasoning that made the 30-day
Dossier and its share card free on 2026-08-16.
Not foreclosed: it is a legitimate price-ladder lever if volume ever arrives.
Post-2.1.0. Nothing here blocks the release or the price flip.
The ask
A home-screen widget.
Why this one has history
The 2.1.0 store listing claimed
Widget and full media-notification controlsas a shipping feature. On 2026-08-24 that claim was deleted, because there is
no widget: no
AppWidgetProvider, no Glance, no appwidget receiver in themanifest, no widget XML anywhere in the repo. The manifest's only receiver is
DownloadActionReceiver. The media-notification half is real, which isprobably how the bullet survived a read.
So this issue is the other branch of that fix. Either the claim stays deleted
forever or this gets built and the claim comes back honestly.
Shape
Greenfield. No
androidx.glanceand no appwidget dependency inapp/build.gradle.ktsorgradle/libs.versions.tomltoday.Glance (
androidx.glance:glance-appwidget) is the right tool. It is Compose-flavored on the authoring side and compiles to
RemoteViews, which is whatwidgets actually run. Writing raw
RemoteViewsfor a media widget in 2026 ischoosing pain.
Minimum useful widget, in priority order:
most people.
The hard part, named up front
State. The widget process is not the app process, and
GlanceAppWidget.update()is async and has to work after the app's process has been killed. The source of
truth has to be the
MediaSessioninPlaybackService(
app/src/main/AndroidManifest.xml:52, a Media3MediaLibraryService), reachedthrough a
MediaControllerthe widget builds on demand, not aStateFlowheldin a ViewModel that no longer exists.
Getting that wrong produces a widget that is correct while the app is open and
frozen on a stale book the rest of the time, which is worse than no widget.
Cover art is the second trap.
RemoteViewsbitmaps have a hard transactionsize limit and the browse-artwork work in PRs #88 to #92 already learned that
lesson once on Android Auto. Reuse whatever bounding those fixes established
rather than passing a full-size cover.
Free or unlock?
Recommend FREE, and this is a reasoned position rather than a default.
A widget is a convenience, which is normally the gated side of the line. But it
is also the app sitting on someone's home screen every day, which is reach, and
reach is the diagnosed bottleneck. Gating it hides the app from exactly the
people most likely to buy the unlock. Same reasoning that made the 30-day
Dossier and its share card free on 2026-08-16.
Not foreclosed: it is a legitimate price-ladder lever if volume ever arrives.
Post-2.1.0. Nothing here blocks the release or the price flip.