feat: v3.5.0 - SAF storage, onboarding redesign, library scan fixes

- SAF Storage Access Framework for Android 10+ downloads
- Redesigned Setup/Tutorial screens with Material 3 Expressive
- Library scan hero card now shows real-time scanned count
- Library folder picker uses SAF (no MANAGE_EXTERNAL_STORAGE needed)
- SAF migration prompt for users updating from pre-SAF versions
- Home feed caching, donate page, per-app language support
- Merged 3.6.0-beta.1 changelog entries into 3.5.0
This commit is contained in:
zarzet
2026-02-07 11:48:37 +07:00
parent c0a9cb756f
commit ad606cca53
36 changed files with 4948 additions and 719 deletions
@@ -1039,6 +1039,26 @@ class MainActivity: FlutterFragmentActivity() {
result.error("open_failed", e.message, null)
}
}
"shareContentUri" -> {
val uriStr = call.argument<String>("uri") ?: ""
val title = call.argument<String>("title") ?: ""
try {
val uri = Uri.parse(uriStr)
val type = contentResolver.getType(uri) ?: "audio/*"
val shareIntent = Intent(Intent.ACTION_SEND).apply {
putExtra(Intent.EXTRA_STREAM, uri)
setType(type)
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") ?: ""