diff --git a/android/app/src/main/AndroidManifest.xml b/android/app/src/main/AndroidManifest.xml
index 63bc49b67..806bf9ec5 100644
--- a/android/app/src/main/AndroidManifest.xml
+++ b/android/app/src/main/AndroidManifest.xml
@@ -42,6 +42,28 @@
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/android/app/src/main/java/com/simplecityapps/shuttle/ui/MainActivity.kt b/android/app/src/main/java/com/simplecityapps/shuttle/ui/MainActivity.kt
index 3e31c0d13..d41b7cc65 100644
--- a/android/app/src/main/java/com/simplecityapps/shuttle/ui/MainActivity.kt
+++ b/android/app/src/main/java/com/simplecityapps/shuttle/ui/MainActivity.kt
@@ -67,6 +67,7 @@ class MainActivity : AppCompatActivity() {
navController.graph = graph
handleSearchQuery(intent)
+ handleViewIntent(intent)
billingManager.queryPurchases()
@@ -90,6 +91,7 @@ class MainActivity : AppCompatActivity() {
super.onNewIntent(intent)
handleSearchQuery(intent)
+ handleViewIntent(intent)
}
// Private
@@ -115,4 +117,26 @@ class MainActivity : AppCompatActivity() {
)
}
}
+
+ private fun handleViewIntent(intent: Intent?) {
+ if (intent?.action == Intent.ACTION_VIEW && intent.data != null) {
+ val uri = intent.data
+ val mimeType = intent.type
+
+ // Check if this is an audio file
+ if (mimeType?.startsWith("audio/") == true ||
+ mimeType == "application/ogg" ||
+ mimeType == "application/x-ogg" ||
+ mimeType == "application/itunes") {
+ ContextCompat.startForegroundService(
+ this,
+ Intent(this, PlaybackService::class.java).apply {
+ action = Intent.ACTION_VIEW
+ data = uri
+ type = mimeType
+ }
+ )
+ }
+ }
+ }
}
diff --git a/android/playback/src/main/java/com/simplecityapps/playback/PlaybackService.kt b/android/playback/src/main/java/com/simplecityapps/playback/PlaybackService.kt
index d168284f6..007fc1124 100644
--- a/android/playback/src/main/java/com/simplecityapps/playback/PlaybackService.kt
+++ b/android/playback/src/main/java/com/simplecityapps/playback/PlaybackService.kt
@@ -187,6 +187,13 @@ class PlaybackService :
ACTION_SKIP_PREV -> playbackManager.skipToPrev()
ACTION_SKIP_NEXT -> playbackManager.skipToNext(ignoreRepeat = true)
ACTION_SEARCH -> mediaSessionManager.mediaSession.controller?.transportControls?.playFromSearch(intent.extras?.getString(SearchManager.QUERY), Bundle())
+ Intent.ACTION_VIEW -> {
+ // Handle opening audio files
+ intent.data?.let { uri ->
+ Timber.v("Handling ACTION_VIEW for URI: $uri")
+ mediaSessionManager.mediaSession.controller?.transportControls?.playFromUri(uri, Bundle())
+ }
+ }
}
}