A Save still running with the app in the background now posts a progress notice — how many files, the one it is on, a bar, Stop all and Open — and takes it down when the queue empties. It sits on its own low-importance channel so it can be silenced without silencing the player's card, and rides its own dataSync foreground service rather than the media one: a mediaPlayback service stops itself when the bar empties, a download is not playback, and nothing else was keeping the process alive for a Save with nothing playing — which is how the first real Save died, four tracks in. Stop all goes through the same cancel(id) a row's tap takes, and Transfers grew the matching button beside Clear finished. The walk pushes two rows straight into the transfer store and reads the real notification back out of `dumpsys notification`, without fetching anything.
17 lines
843 B
Rust
17 lines
843 B
Rust
// `update` and `clear` are ours. registerListener / removeListener are the
|
|
// mobile plugin runtime's own commands, the ones `addPluginListener`
|
|
// invokes to hear the `action` event — commands like any other to the ACL,
|
|
// and without them here the listener is refused and the notice's buttons go
|
|
// nowhere. The media-session plugin carries the same scar.
|
|
const COMMANDS: &[&str] = &["update", "clear", "registerListener", "removeListener"];
|
|
|
|
fn main() {
|
|
// Registers the command permissions (permissions/autogenerated) and, on
|
|
// Android, hands the Gradle module under android/ to tauri-build, which
|
|
// includes it in the app project (tauri.settings.gradle) — but only with
|
|
// TAURI_ANDROID_PROJECT_PATH set, see ANDROID.md.
|
|
tauri_plugin::Builder::new(COMMANDS)
|
|
.android_path("android")
|
|
.build();
|
|
}
|