Fix file intent issue

Fix a problem where the file intent wouldnt work on any fragment that wasnt MainFragment.
This commit is contained in:
OxygenCobalt 2021-02-20 09:46:29 -07:00
parent 7a4b654222
commit cc14648099
No known key found for this signature in database
GPG key ID: 37DBE3621FE9AD47
6 changed files with 56 additions and 21 deletions

View file

@ -53,6 +53,14 @@ class MainActivity : AppCompatActivity() {
// We have to manually push the intent whenever we get one so that MainFragment
// can catch any file intents
setIntent(intent)
// TODO: Idea Needed
// Move to all non-loading fragments
// Use ext fun
// Apply bool to intent to make sure it doesnt fire again???
// Need it to
// - Run everywhere except loading
// - Dont fire after the first go
}
@Suppress("DEPRECATION")

View file

@ -126,10 +126,6 @@ class MainFragment : Fragment() {
// TODO?: Add an option to view it instead of play it if this becomes too annoying
if (intent != null && intent.action == Intent.ACTION_VIEW) {
playbackModel.playWithIntent(intent, requireContext())
// Clear intent so that this does not fire again
// I see no consequences from doing this
activity.intent = null
} else {
playbackModel.restorePlaybackIfNeeded(requireContext())
}

View file

@ -1,5 +1,6 @@
package org.oxycblt.auxio.playback
import android.content.Intent
import android.content.res.ColorStateList
import android.os.Bundle
import android.view.LayoutInflater
@ -200,6 +201,13 @@ class PlaybackFragment : Fragment(), SeekBar.OnSeekBarChangeListener {
playbackModel.enableAnimation()
}
val intent = requireActivity().intent
// If the intent of the activity is a file intent, then play it.
if (intent != null && intent.action == Intent.ACTION_VIEW) {
playbackModel.playWithIntent(intent, requireContext())
}
}
// --- SEEK CALLBACKS ---

View file

@ -160,11 +160,18 @@ class PlaybackViewModel : ViewModel(), PlaybackStateManager.Callback {
/** Play a song using an intent */
fun playWithIntent(intent: Intent, context: Context) {
val uri = intent.data ?: return
val fired = intent.getBooleanExtra(KEY_INTENT_PLAY_FIRED, false)
viewModelScope.launch {
musicStore.getSongForUri(uri, context.contentResolver)?.let { song ->
playSong(song)
if (!fired) {
// Make sure any intents that are passed here never fire again
intent.putExtra(KEY_INTENT_PLAY_FIRED, true)
val uri = intent.data ?: return
viewModelScope.launch {
musicStore.getSongForUri(uri, context.contentResolver)?.let { song ->
playSong(song)
}
}
}
}
@ -420,4 +427,8 @@ class PlaybackViewModel : ViewModel(), PlaybackStateManager.Callback {
override fun onInUserQueueUpdate(isInUserQueue: Boolean) {
mIsInUserQueue.value = isInUserQueue
}
companion object {
private const val KEY_INTENT_PLAY_FIRED = "KEY_PLAY_DONE"
}
}

View file

@ -1,5 +1,6 @@
package org.oxycblt.auxio.playback.queue
import android.content.Intent
import android.os.Build
import android.os.Bundle
import android.view.LayoutInflater
@ -98,6 +99,17 @@ class QueueFragment : Fragment() {
return binding.root
}
override fun onResume() {
super.onResume()
val intent = requireActivity().intent
// If the intent of the activity is a file intent, then play it.
if (intent != null && intent.action == Intent.ACTION_VIEW) {
playbackModel.playWithIntent(intent, requireContext())
}
}
/**
* Create the queue data that should be displayed
* @return The list of headers/songs that should be displayed.

View file

@ -11,7 +11,6 @@ import android.content.pm.ServiceInfo
import android.media.AudioManager
import android.os.Build
import android.os.IBinder
import android.os.Parcelable
import android.support.v4.media.MediaMetadataCompat
import android.support.v4.media.session.MediaSessionCompat
import android.view.KeyEvent
@ -73,9 +72,7 @@ class PlaybackService : Service(), Player.EventListener, PlaybackStateManager.Ca
private var isForeground = false
private val serviceJob = Job()
private val serviceScope = CoroutineScope(
serviceJob + Dispatchers.Main
)
private val serviceScope = CoroutineScope(serviceJob + Dispatchers.Main)
// --- SERVICE OVERRIDES ---
@ -257,13 +254,11 @@ class PlaybackService : Service(), Player.EventListener, PlaybackStateManager.Ca
}
override fun onShuffleUpdate(isShuffling: Boolean) {
if (!settingsManager.useAltNotifAction) {
return
if (settingsManager.useAltNotifAction) {
notification.setShuffle(this, isShuffling)
startForegroundOrNotify()
}
notification.setShuffle(this, isShuffling)
startForegroundOrNotify()
}
override fun onSeek(position: Long) {
@ -312,7 +307,8 @@ class PlaybackService : Service(), Player.EventListener, PlaybackStateManager.Ca
* Create the [SimpleExoPlayer] instance.
*/
private fun newPlayer(): SimpleExoPlayer {
// Since Auxio is a music player, only specify an audio renderer to save battery/apk size/cache size.
// Since Auxio is a music player, only specify an audio renderer to save
// battery/apk size/cache size
val audioRenderer = RenderersFactory { handler, _, audioListener, _, _ ->
arrayOf(
MediaCodecAudioRenderer(
@ -445,9 +441,9 @@ class PlaybackService : Service(), Player.EventListener, PlaybackStateManager.Ca
* Handle a media button intent.
*/
private fun handleMediaButtonEvent(event: Intent): Boolean {
val item = event.getParcelableExtra<Parcelable>(Intent.EXTRA_KEY_EVENT) as KeyEvent
val item = event.getParcelableExtra<KeyEvent>(Intent.EXTRA_KEY_EVENT)
if (item.action == KeyEvent.ACTION_DOWN) {
if (item != null && item.action == KeyEvent.ACTION_DOWN) {
return when (item.keyCode) {
// Play/Pause if any of the keys are play/pause
KeyEvent.KEYCODE_MEDIA_PAUSE, KeyEvent.KEYCODE_MEDIA_PLAY,
@ -518,6 +514,10 @@ class PlaybackService : Service(), Player.EventListener, PlaybackStateManager.Ca
stopForegroundAndNotification()
}
Intent.ACTION_VIEW -> {
logD("wat this works")
}
// --- HEADSET CASES ---
BluetoothDevice.ACTION_ACL_CONNECTED -> resumeFromPlug()