You know the deal: a Niagara widget popup holds exactly one widget. So it's Spotify or Audible or Pocket Casts, never all three at once.
Widget Stack is ONE widget with SEVERAL players living inside it. Basically a player dashboard at a glance: every app gets its own row with cover, title and controls, and the one that's playing is highlighted. Drop it into a single popup, pick your apps per row, done.
On top of that, I never liked my phone's built-in media controls. They only show whatever played last, and switching between players there is clunky. This fixes both for me.
What it does
- 1 to 4 rows, you choose which app goes into which row
- Cover art, title, and back / play-pause / forward per row, the playing row is highlighted
- Rows stay there even when the app isn't running and show the last played item. ▶ tries to resume it
- Podcast and audiobook apps without "next track" get skip back/forward instead (e.g. 15 s in Spotify podcasts)
- Material You colors, light and dark, resizable
- Works with anything that has proper media controls: Spotify, YouTube Music, Audible, Pocket Casts, AntennaPod, Tidal, Deezer, ...
Privacy
It needs notification access, because that's the only way Android lets an app read media sessions. It does not read or store notification content, and it has no internet permission at all. Code is MIT on GitHub, no dependencies besides Kotlin.
Heads-up for sideloading
Android 13+ greys out notification access for apps not installed from a store. Settings → Apps → Widget Stack → ⋮ → "Allow restricted settings" fixes it (steps are in the README).
Download (APK) and source: https://github.com/Intersebbtor/widget-stack
Android 12+. Feedback and bug reports welcome, especially which apps misbehave on resume.