That fuck shit the fascists are using
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}