@@ -16,13 +16,15 @@ import android.widget.SeekBar
1616import android.widget.SeekBar.OnSeekBarChangeListener
1717import androidx.core.content.ContextCompat
1818import androidx.fragment.app.Fragment
19+ import androidx.fragment.app.activityViewModels
1920import androidx.lifecycle.lifecycleScope
2021import autodagger.AutoInjector
2122import com.nextcloud.android.common.ui.theme.utils.ColorRole
2223import com.nextcloud.talk.R
2324import com.nextcloud.talk.application.NextcloudTalkApplication
2425import com.nextcloud.talk.application.NextcloudTalkApplication.Companion.sharedApplication
2526import com.nextcloud.talk.chat.data.io.AudioFocusRequestManager
27+ import com.nextcloud.talk.chat.viewmodels.MessageInputViewModel
2628import com.nextcloud.talk.databinding.FragmentMessageInputVoiceRecordingBinding
2729import com.nextcloud.talk.ui.theme.ViewThemeUtils
2830import kotlinx.coroutines.flow.collect
@@ -43,6 +45,8 @@ class MessageInputVoiceRecordingFragment : Fragment() {
4345 @Inject
4446 lateinit var viewThemeUtils: ViewThemeUtils
4547
48+ private val messageInputViewModel: MessageInputViewModel by activityViewModels()
49+
4650 lateinit var binding: FragmentMessageInputVoiceRecordingBinding
4751 private lateinit var chatActivity: ChatActivity
4852 private var pause = false
@@ -58,48 +62,48 @@ class MessageInputVoiceRecordingFragment : Fragment() {
5862 themeVoiceRecordingView()
5963 initVoiceRecordingView()
6064 initObservers()
61- this .lifecycle.addObserver(chatActivity. messageInputViewModel)
65+ this .lifecycle.addObserver(messageInputViewModel)
6266 return binding.root
6367 }
6468
6569 override fun onDestroyView () {
6670 super .onDestroyView()
67- chatActivity. messageInputViewModel.stopMediaPlayer() // if it wasn't stopped already
68- this .lifecycle.removeObserver(chatActivity. messageInputViewModel)
71+ messageInputViewModel.stopMediaPlayer() // if it wasn't stopped already
72+ this .lifecycle.removeObserver(messageInputViewModel)
6973 }
7074
7175 private fun initObservers () {
72- chatActivity. messageInputViewModel.startMicInput(requireContext())
73- chatActivity. messageInputViewModel.micInputAudioObserver.observe(viewLifecycleOwner) {
76+ messageInputViewModel.startMicInput(requireContext())
77+ messageInputViewModel.micInputAudioObserver.observe(viewLifecycleOwner) {
7478 binding.micInputCloud.setRotationSpeed(it.first, it.second)
7579 }
7680
7781 lifecycleScope.launch {
78- chatActivity. messageInputViewModel.mediaPlayerSeekbarObserver.onEach { progress ->
82+ messageInputViewModel.mediaPlayerSeekbarObserver.onEach { progress ->
7983 if (progress >= SEEK_LIMIT ) {
8084 togglePausePlay()
8185 binding.seekbar.progress = 0
82- } else if (! pause && chatActivity. messageInputViewModel.isVoicePreviewPlaying.value == true ) {
86+ } else if (! pause && messageInputViewModel.isVoicePreviewPlaying.value == true ) {
8387 binding.seekbar.progress = progress
8488 }
8589 }.collect()
8690 }
8791
88- chatActivity. messageInputViewModel.getAudioFocusChange.observe(viewLifecycleOwner) { state ->
92+ messageInputViewModel.getAudioFocusChange.observe(viewLifecycleOwner) { state ->
8993 when (state) {
9094 AudioFocusRequestManager .ManagerState .AUDIO_FOCUS_CHANGE_LOSS -> {
91- if (chatActivity. messageInputViewModel.isVoicePreviewPlaying.value == true ) {
92- chatActivity. messageInputViewModel.stopMediaPlayer()
95+ if (messageInputViewModel.isVoicePreviewPlaying.value == true ) {
96+ messageInputViewModel.stopMediaPlayer()
9397 }
9498 }
9599 AudioFocusRequestManager .ManagerState .AUDIO_FOCUS_CHANGE_LOSS_TRANSIENT -> {
96- if (chatActivity. messageInputViewModel.isVoicePreviewPlaying.value == true ) {
97- chatActivity. messageInputViewModel.pauseMediaPlayer()
100+ if (messageInputViewModel.isVoicePreviewPlaying.value == true ) {
101+ messageInputViewModel.pauseMediaPlayer()
98102 }
99103 }
100104 AudioFocusRequestManager .ManagerState .BROADCAST_RECEIVED -> {
101- if (chatActivity. messageInputViewModel.isVoicePreviewPlaying.value == true ) {
102- chatActivity. messageInputViewModel.pauseMediaPlayer()
105+ if (messageInputViewModel.isVoicePreviewPlaying.value == true ) {
106+ messageInputViewModel.pauseMediaPlayer()
103107 }
104108 }
105109 }
@@ -129,13 +133,13 @@ class MessageInputVoiceRecordingFragment : Fragment() {
129133 togglePausePlay()
130134 }
131135
132- binding.audioRecordDuration.base = chatActivity. messageInputViewModel.getRecordingTime.value ? : 0L
136+ binding.audioRecordDuration.base = messageInputViewModel.getRecordingTime.value ? : 0L
133137 binding.audioRecordDuration.start()
134138
135139 binding.seekbar.setOnSeekBarChangeListener(object : OnSeekBarChangeListener {
136140 override fun onProgressChanged (seekbar : SeekBar , progress : Int , fromUser : Boolean ) {
137141 if (fromUser) {
138- chatActivity. messageInputViewModel.seekMediaPlayerTo(progress)
142+ messageInputViewModel.seekMediaPlayerTo(progress)
139143 }
140144 }
141145
@@ -151,23 +155,23 @@ class MessageInputVoiceRecordingFragment : Fragment() {
151155
152156 private fun clear () {
153157 chatActivity.chatViewModel.setVoiceRecordingLocked(false )
154- chatActivity. messageInputViewModel.stopMicInput()
158+ messageInputViewModel.stopMicInput()
155159 chatActivity.chatViewModel.stopAudioRecording()
156- chatActivity. messageInputViewModel.stopMediaPlayer()
160+ messageInputViewModel.stopMediaPlayer()
157161 binding.audioRecordDuration.stop()
158162 binding.audioRecordDuration.clearAnimation()
159163 }
160164
161165 private fun togglePreviewVisibility () {
162166 val visibility = binding.voicePreviewContainer.visibility
163167 binding.voicePreviewContainer.visibility = if (visibility == View .VISIBLE ) {
164- chatActivity. messageInputViewModel.stopMediaPlayer()
168+ messageInputViewModel.stopMediaPlayer()
165169 binding.playPauseBtn.icon = ContextCompat .getDrawable(
166170 requireContext(),
167171 R .drawable.ic_baseline_play_arrow_voice_message_24
168172 )
169173 pause = true
170- chatActivity. messageInputViewModel.startMicInput(requireContext())
174+ messageInputViewModel.startMicInput(requireContext())
171175 chatActivity.chatViewModel.startAudioRecording(requireContext(), chatActivity.currentConversation!! )
172176 binding.audioRecordDuration.visibility = View .VISIBLE
173177 binding.audioRecordDuration.base = SystemClock .elapsedRealtime()
@@ -176,7 +180,7 @@ class MessageInputVoiceRecordingFragment : Fragment() {
176180 } else {
177181 pause = false
178182 binding.seekbar.progress = 0
179- chatActivity. messageInputViewModel.stopMicInput()
183+ messageInputViewModel.stopMicInput()
180184 chatActivity.chatViewModel.stopAudioRecording()
181185 binding.audioRecordDuration.visibility = View .GONE
182186 binding.audioRecordDuration.stop()
@@ -186,18 +190,18 @@ class MessageInputVoiceRecordingFragment : Fragment() {
186190
187191 private fun togglePausePlay () {
188192 val path = chatActivity.chatViewModel.getCurrentVoiceRecordFile()
189- if (chatActivity. messageInputViewModel.isVoicePreviewPlaying.value == true ) {
193+ if (messageInputViewModel.isVoicePreviewPlaying.value == true ) {
190194 binding.playPauseBtn.icon = ContextCompat .getDrawable(
191195 requireContext(),
192196 R .drawable.ic_baseline_play_arrow_voice_message_24
193197 )
194- chatActivity. messageInputViewModel.stopMediaPlayer()
198+ messageInputViewModel.stopMediaPlayer()
195199 } else {
196200 binding.playPauseBtn.icon = ContextCompat .getDrawable(
197201 requireContext(),
198202 R .drawable.ic_baseline_pause_voice_message_24
199203 )
200- chatActivity. messageInputViewModel.startMediaPlayer(path)
204+ messageInputViewModel.startMediaPlayer(path)
201205 }
202206 }
203207
0 commit comments