val args = invoke.parseArgs(NowPlayingArgs::class.java) /* The window is on no screen anywhere — MediaService ignores it and the card cannot show it — so logcat is the only place on the device it can be read back, and tests/mobile/smoke.mjs reads it from exactly here. One line per update, and an update is a track change, a transport change or the thirty-second top-up, never a position tick. `at=` goes LAST because a title may hold anything, spaces and `=` included. */ val window = args.queue ?: emptyList() android.util.Log.i( "SoulStream", "media window n=" + window.size + " i=" + (args.queueIndex ?: -1) + " art=" + window.count { !it.artKey.isNullOrEmpty() } + " at=" + (window.getOrNull(args.queueIndex ?: -1)?.title ?: ""), ) ensureNotificationPermission()