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()) + } + } } }