feat: add multi-select share and batch convert in downloaded/local album screens

- Add shareMultipleContentUris native handler in MainActivity for ACTION_SEND_MULTIPLE
- Add shareMultipleContentUris binding in PlatformBridge
- Add _shareSelected and _performBatchConversion methods to DownloadedAlbumScreen and LocalAlbumScreen
- Add batch convert bottom sheet UI with format/bitrate selection (MP3/Opus, 128k-320k)
- Add share & convert action buttons to selection bottom bar in both screens
- Add batch convert with full SAF support: temp copy, write-back, history update
- Add share/convert selection strings to l10n (all supported locales + app_en.arb)
- Add queue tab selection share/convert feature (queue_tab.dart)
- Update donate page
- Update go.sum with bumped dependency hashes
This commit is contained in:
zarzet
2026-02-18 18:05:48 +07:00
parent cdc5836785
commit 5605930aef
23 changed files with 2512 additions and 23 deletions
@@ -1546,6 +1546,28 @@ class MainActivity: FlutterFragmentActivity() {
result.error("share_failed", e.message, null)
}
}
"shareMultipleContentUris" -> {
val uriStrings = call.argument<List<String>>("uris") ?: emptyList()
val title = call.argument<String>("title") ?: ""
try {
val uris = ArrayList<Uri>(uriStrings.size)
for (s in uriStrings) {
uris.add(Uri.parse(s))
}
val shareIntent = Intent(Intent.ACTION_SEND_MULTIPLE).apply {
putParcelableArrayListExtra(Intent.EXTRA_STREAM, uris)
setType("audio/*")
addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION)
if (title.isNotBlank()) {
putExtra(Intent.EXTRA_SUBJECT, title)
}
}
startActivity(Intent.createChooser(shareIntent, title.ifBlank { "Share" }))
result.success(true)
} catch (e: Exception) {
result.error("share_failed", e.message, null)
}
}
"fetchLyrics" -> {
val spotifyId = call.argument<String>("spotify_id") ?: ""
val trackName = call.argument<String>("track_name") ?: ""