save audio and images locally

This commit is contained in:
Öppen 2020-08-26 17:13:26 +01:00
parent ea2368d12a
commit adfab9df23
2 changed files with 39 additions and 7 deletions

View File

@ -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
}
}

View File

@ -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)
}
}