mirror of https://git.sr.ht/~oppen/ariane
save audio and images locally
This commit is contained in:
parent
ea2368d12a
commit
adfab9df23
|
@ -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
|
||||
}
|
||||
}
|
||||
|
||||
|
|
|
@ -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)
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue