That fuck shit the fascists are using
at master 91 lines 2.5 kB view raw
1package org.tm.archive.conversation 2 3import android.content.Context 4import android.net.Uri 5import android.util.AttributeSet 6import android.view.View 7import androidx.appcompat.widget.LinearLayoutCompat 8import androidx.lifecycle.Observer 9import org.tm.archive.R 10import org.tm.archive.components.AudioView 11import org.tm.archive.components.voice.VoiceNotePlaybackState 12import org.tm.archive.database.DraftTable 13import org.tm.archive.mms.AudioSlide 14 15class VoiceNoteDraftView @JvmOverloads constructor( 16 context: Context, 17 attrs: AttributeSet? = null, 18 defStyleAttr: Int = 0 19) : LinearLayoutCompat(context, attrs, defStyleAttr) { 20 21 var listener: Listener? = null 22 23 var draft: DraftTable.Draft? = null 24 private set 25 26 private lateinit var audioView: AudioView 27 28 val playbackStateObserver: Observer<VoiceNotePlaybackState> 29 get() = audioView.playbackStateObserver 30 31 init { 32 inflate(context, R.layout.voice_note_draft_view, this) 33 34 val delete: View = findViewById(R.id.voice_note_draft_delete) 35 36 delete.setOnClickListener { 37 if (draft != null) { 38 val uri = audioView.audioSlideUri 39 if (uri != null) { 40 listener?.onVoiceNoteDraftDelete(uri) 41 } 42 } 43 } 44 45 audioView = findViewById(R.id.voice_note_audio_view) 46 } 47 48 fun clearDraft() { 49 this.draft = null 50 } 51 52 fun setDraft(draft: DraftTable.Draft) { 53 audioView.setAudio( 54 AudioSlide.createFromVoiceNoteDraft(draft), 55 AudioViewCallbacksAdapter(), 56 true, 57 false 58 ) 59 60 this.draft = draft 61 } 62 63 private inner class AudioViewCallbacksAdapter : AudioView.Callbacks { 64 override fun onPlay(audioUri: Uri, progress: Double) { 65 listener?.onVoiceNoteDraftPlay(audioUri, progress) 66 } 67 68 override fun onPause(audioUri: Uri) { 69 listener?.onVoiceNoteDraftPause(audioUri) 70 } 71 72 override fun onSeekTo(audioUri: Uri, progress: Double) { 73 listener?.onVoiceNoteDraftSeekTo(audioUri, progress) 74 } 75 76 override fun onStopAndReset(audioUri: Uri) { 77 throw UnsupportedOperationException() 78 } 79 80 override fun onProgressUpdated(durationMillis: Long, playheadMillis: Long) = Unit 81 82 override fun onSpeedChanged(speed: Float, isPlaying: Boolean) = Unit 83 } 84 85 interface Listener { 86 fun onVoiceNoteDraftPlay(audioUri: Uri, progress: Double) 87 fun onVoiceNoteDraftPause(audioUri: Uri) 88 fun onVoiceNoteDraftSeekTo(audioUri: Uri, progress: Double) 89 fun onVoiceNoteDraftDelete(audioUri: Uri) 90 } 91}