android: the downloads say so in the shade

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.
This commit is contained in:
KeelrLeek committed 2026-09-14 00:44:11 -05:00
1 parent 4fc6e9c630
commit 5738c2d7bf
31 files changed
+1358 -6

No files matched your search

+4
View File
@@ -60,6 +60,10 @@ audio-formats = { path = "../crates/audio-formats" }
tauri-plugin-media-session = { path = "../crates/tauri-plugin-media-session" }
tauri-plugin-storage = { path = "../crates/tauri-plugin-storage" }
tauri-plugin-share = { path = "../crates/tauri-plugin-share" }
# The phone's downloads notice (a second Kotlin foreground service, dataSync).
# Registered everywhere so the permission set resolves on every platform; on
# the desktop its commands answer "not here".
tauri-plugin-transfer-notice = { path = "../crates/tauri-plugin-transfer-notice" }
semver = "1"
tauri-plugin-opener = "2.5.5"
+5
View File
@@ -1,3 +1,8 @@
// tauri-build only rewrites gen/android/tauri.settings.gradle and
// app/tauri.build.gradle.kts — the lines that include every plugin's own
// Android module — when this build script re-runs, so touch this file
// whenever a plugin is added (ANDROID.md). The downloads notice was the
// last one.
fn main() {
tauri_build::build()
}
+2 -1
View File
@@ -23,6 +23,7 @@
"media-session:default",
"opener:default",
"storage:default",
"share:default"
"share:default",
"transfer-notice:default"
]
}
+4
View File
@@ -85,6 +85,10 @@ pub fn run() {
app.handle().plugin(tauri_plugin_storage::init())?;
// The share sheet on the phone: a link sent from another app lands in the import.
app.handle().plugin(tauri_plugin_share::init())?;
// The downloads in the phone's shade: a progress notice on its own
// channel and its own dataSync service, so a Save survives the app
// going to the background with nothing playing.
app.handle().plugin(tauri_plugin_transfer_notice::init())?;
#[cfg(desktop)]
app.handle().plugin(tauri_plugin_updater::Builder::new().build())?;
// Must run before anything touches the app-data dir.