diff --git a/app/src/main/java/oppen/tva/ui/TvaActivity.kt b/app/src/main/java/oppen/tva/ui/TvaActivity.kt index d45e9a0..f701798 100644 --- a/app/src/main/java/oppen/tva/ui/TvaActivity.kt +++ b/app/src/main/java/oppen/tva/ui/TvaActivity.kt @@ -209,10 +209,18 @@ class TvaActivity : AppCompatActivity() { } var imageState: TvaState.ResponseImage? = null + var audioState: TvaState.ResponseAudio? = null private fun renderAudio(state: TvaState.ResponseAudio) = runOnUiThread { loadingView(false) - AudioPlayer.play(this, binding, mediaPlayer, state) + AudioPlayer.play(this, binding, mediaPlayer, state){ state -> + audioState = state + val intent = Intent(Intent.ACTION_CREATE_DOCUMENT) + intent.addCategory(Intent.CATEGORY_OPENABLE) + intent.type = "audio/mpeg" + intent.putExtra(Intent.EXTRA_TITLE, File(state.uri.path).name) + startActivityForResult(intent, CREATE_AUDIO_FILE_REQ) + } } private fun renderImage(state: TvaState.ResponseImage) = runOnUiThread{ @@ -229,10 +237,19 @@ class TvaActivity : AppCompatActivity() { override fun onActivityResult(requestCode: Int, resultCode: Int, data: Intent?) { super.onActivityResult(requestCode, resultCode, data) - if(resultCode == RESULT_OK && requestCode == CREATE_IMAGE_FILE_REQ){ - if(imageState == null) return - data?.data?.let{ uri -> - val cachedFile = File(imageState!!.cacheUri.path ?: "") + if(resultCode == RESULT_OK && (requestCode == CREATE_IMAGE_FILE_REQ || requestCode == CREATE_AUDIO_FILE_REQ)){ + if(imageState == null && audioState == null) return + + //todo - tidy this mess up... + data?.data?.let{ uri -> + val cachedFile = when { + imageState != null -> { + File(imageState!!.cacheUri.path ?: "") + } + else -> { + File(audioState!!.cacheUri.path ?: "") + } + } contentResolver.openFileDescriptor(uri, "w")?.use { fileDescriptor -> FileOutputStream(fileDescriptor.fileDescriptor).use { destOutput -> val sourceChannel = FileInputStream(cachedFile).channel @@ -243,6 +260,11 @@ class TvaActivity : AppCompatActivity() { } } } + + Snackbar.make(binding.root, "File saved to device", Snackbar.LENGTH_SHORT).show() + + imageState = null + audioState = null } } diff --git a/app/src/main/java/oppen/tva/ui/audio_player/AudioPlayer.kt b/app/src/main/java/oppen/tva/ui/audio_player/AudioPlayer.kt index 72652ae..7199536 100644 --- a/app/src/main/java/oppen/tva/ui/audio_player/AudioPlayer.kt +++ b/app/src/main/java/oppen/tva/ui/audio_player/AudioPlayer.kt @@ -1,6 +1,7 @@ package oppen.tva.ui.audio_player import android.content.Context +import android.content.Intent import android.media.MediaMetadataRetriever import android.media.MediaPlayer import android.view.MenuInflater @@ -10,11 +11,17 @@ import androidx.core.view.MenuCompat import oppen.tva.R import oppen.tva.databinding.ActivityTvaBinding import oppen.tva.io.TvaState +import oppen.tva.ui.CREATE_IMAGE_FILE_REQ import oppen.visible +import java.io.File object AudioPlayer { - fun play(context: Context, binding: ActivityTvaBinding, mediaPlayer: MediaPlayer, state: TvaState.ResponseAudio){ + fun play(context: Context, + binding: ActivityTvaBinding, + mediaPlayer: MediaPlayer, + state: TvaState.ResponseAudio, + onSaveAudio: (state: TvaState.ResponseAudio) -> Unit){ val metadataRetriever = MediaMetadataRetriever() metadataRetriever.setDataSource(context, state.cacheUri) @@ -74,9 +81,12 @@ object AudioPlayer { inflater.inflate(R.menu.audio_overflow, popup.menu) popup.setOnMenuItemClickListener { menuItem -> when(menuItem.itemId){ - R.id.audio_overflow_save_file -> {} + R.id.audio_overflow_save_file -> { + onSaveAudio(state) + } R.id.audio_overflow_dismiss -> { mediaPlayer.stop() + mediaPlayer.release() binding.audioPlayer.visible(false) } }