diff --git a/app/src/main/AndroidManifest.xml b/app/src/main/AndroidManifest.xml
index 23b51c595..903bb3877 100644
--- a/app/src/main/AndroidManifest.xml
+++ b/app/src/main/AndroidManifest.xml
@@ -26,7 +26,19 @@
+
+
+
+
+
+
+
+
+
+
+
+
()
val navToItem: LiveData get() = mNavToItem
+ private val musicStore = MusicStore.getInstance()
+
/**
* Update the current navigation status
* @param value Whether the current [DetailFragment] is navigating or not.
@@ -107,4 +114,13 @@ class DetailViewModel : ViewModel() {
fun doneWithNavToItem() {
mNavToItem.value = null
}
+
+ /** Navigate to an item using a file [Intent] */
+ fun navigateWithIntent(intent: Intent, app: Application) {
+ val uri = intent.data ?: return
+
+ viewModelScope.launch {
+ mNavToItem.value = musicStore.getSongForUri(uri, app.contentResolver)
+ }
+ }
}
diff --git a/app/src/main/java/org/oxycblt/auxio/loading/LoadingFragment.kt b/app/src/main/java/org/oxycblt/auxio/loading/LoadingFragment.kt
index da81f0a45..1c5a81c85 100644
--- a/app/src/main/java/org/oxycblt/auxio/loading/LoadingFragment.kt
+++ b/app/src/main/java/org/oxycblt/auxio/loading/LoadingFragment.kt
@@ -62,7 +62,7 @@ class LoadingFragment : Fragment() {
if (noPermissions()) {
// MusicStore.Response.NO_PERMS isnt actually returned by MusicStore, its just
- // a way to keep the current permission state on_hand
+ // a way to keep the current permission state across device changes
loadingModel.notifyNoPermissions()
}
diff --git a/app/src/main/java/org/oxycblt/auxio/music/Models.kt b/app/src/main/java/org/oxycblt/auxio/music/Models.kt
index caa7dde22..f204fedb4 100644
--- a/app/src/main/java/org/oxycblt/auxio/music/Models.kt
+++ b/app/src/main/java/org/oxycblt/auxio/music/Models.kt
@@ -23,6 +23,7 @@ sealed class Parent : BaseModel()
/**
* The data object for a song. Inherits [BaseModel].
+ * @property fileName The raw filename for this track
* @property albumId The Song's Album ID. Never use this outside of when attaching a song to its album.
* @property track The Song's Track number
* @property duration The duration of the song, in millis.
@@ -35,6 +36,7 @@ sealed class Parent : BaseModel()
data class Song(
override val id: Long = -1,
override val name: String,
+ val fileName: String,
val albumId: Long = -1,
val track: Int = -1,
val duration: Long = 0,
diff --git a/app/src/main/java/org/oxycblt/auxio/music/MusicStore.kt b/app/src/main/java/org/oxycblt/auxio/music/MusicStore.kt
index 3e76ccf82..a3479ed28 100644
--- a/app/src/main/java/org/oxycblt/auxio/music/MusicStore.kt
+++ b/app/src/main/java/org/oxycblt/auxio/music/MusicStore.kt
@@ -1,6 +1,9 @@
package org.oxycblt.auxio.music
import android.app.Application
+import android.content.ContentResolver
+import android.net.Uri
+import android.provider.OpenableColumns
import kotlinx.coroutines.Dispatchers
import kotlinx.coroutines.withContext
import org.oxycblt.auxio.logD
@@ -72,6 +75,20 @@ class MusicStore private constructor() {
}
}
+ /**
+ * Get the song for a specific URI.
+ */
+ suspend fun getSongForUri(uri: Uri, resolver: ContentResolver): Song? {
+ return withContext(Dispatchers.IO) {
+ resolver.query(uri, null, null, null, null)?.use { cursor ->
+ cursor.moveToFirst()
+ val fileName = cursor.getString(cursor.getColumnIndex(OpenableColumns.DISPLAY_NAME))
+
+ return@withContext songs.find { it.fileName == fileName }
+ }
+ }
+ }
+
enum class Response {
NO_MUSIC, NO_PERMS, FAILED, SUCCESS
}
diff --git a/app/src/main/java/org/oxycblt/auxio/music/processing/MusicLoader.kt b/app/src/main/java/org/oxycblt/auxio/music/processing/MusicLoader.kt
index 5cf1f10ad..7e5860cf9 100644
--- a/app/src/main/java/org/oxycblt/auxio/music/processing/MusicLoader.kt
+++ b/app/src/main/java/org/oxycblt/auxio/music/processing/MusicLoader.kt
@@ -158,12 +158,13 @@ class MusicLoader(private val app: Application) {
while (cursor.moveToNext()) {
val id = cursor.getLong(idIndex)
- val title = cursor.getString(titleIndex) ?: cursor.getString(fileIndex)
+ val title = cursor.getString(titleIndex)
+ val fileName = cursor.getString(fileIndex)
val albumId = cursor.getLong(albumIndex)
val track = cursor.getInt(trackIndex)
val duration = cursor.getLong(durationIndex)
- songs.add(Song(id, title, albumId, track, duration))
+ songs.add(Song(id, title ?: fileName, fileName, albumId, track, duration))
}
cursor.close()
diff --git a/app/src/main/res/values-de/strings.xml b/app/src/main/res/values-de/strings.xml
index 7a0900bc1..4be8ecf11 100644
--- a/app/src/main/res/values-de/strings.xml
+++ b/app/src/main/res/values-de/strings.xml
@@ -87,7 +87,7 @@
Zurückspulen, bevor zurück springen
Zurückspulen, bevor zum vorheriger Lied springen
Wiedergabezustand abspeichern
- der aktuell Wiedergabezustand jetzt abspeichern
+ Der aktuell Wiedergabezustand jetzt abspeichern
Keine Musik gefunden