mirror of
https://github.com/zarzet/SpotiFLAC-Mobile.git
synced 2026-10-10 09:54:07 +02:00
feat: v3.5.0 - instant home feed, SAF display path, per-app language
- Cache home feed to SharedPreferences for instant restore on app launch - Resolve SAF tree URIs to human-readable paths (e.g. /storage/emulated/0/Music) - Add Android 13+ per-app language support (locale_config.xml) - Bump version to 3.5.0+73
This commit is contained in:
1 parent
239e073a8c
commit
5fa00c0051
8 files changed
+132
-8
No files matched your search
@@ -62,9 +62,37 @@ class MainActivity: FlutterFragmentActivity() {
|
||||
|
||||
val payload = JSONObject()
|
||||
payload.put("tree_uri", uri.toString())
|
||||
payload.put("display_name", resolveSafDisplayPath(uri))
|
||||
result.success(payload.toString())
|
||||
}
|
||||
|
||||
/**
|
||||
* Resolve a SAF tree URI to a human-readable path.
|
||||
* e.g. "content://...tree/primary%3AMusic" -> "/storage/emulated/0/Music"
|
||||
* "content://...tree/1234-5678%3AMusic" -> "SD Card/Music"
|
||||
*/
|
||||
private fun resolveSafDisplayPath(treeUri: Uri): String {
|
||||
try {
|
||||
val docId = android.provider.DocumentsContract.getTreeDocumentId(treeUri)
|
||||
if (docId.isNullOrEmpty()) return treeUri.toString()
|
||||
|
||||
val parts = docId.split(":", limit = 2)
|
||||
val storageId = parts.getOrNull(0) ?: return docId
|
||||
val subPath = parts.getOrNull(1) ?: ""
|
||||
|
||||
val prefix = if (storageId == "primary") {
|
||||
"/storage/emulated/0"
|
||||
} else {
|
||||
"SD Card"
|
||||
}
|
||||
|
||||
return if (subPath.isEmpty()) prefix else "$prefix/$subPath"
|
||||
} catch (e: Exception) {
|
||||
android.util.Log.w("SpotiFLAC", "Failed to resolve SAF display path: ${e.message}")
|
||||
return treeUri.toString()
|
||||
}
|
||||
}
|
||||
|
||||
data class SafScanProgress(
|
||||
var totalFiles: Int = 0,
|
||||
var scannedFiles: Int = 0,
|
||||
|
||||
Reference in new issue
Block a user