Skip to content

Commit

Permalink
Merge pull request #1487 from simophin/ses-637-voice-message-keeps-pl…
Browse files Browse the repository at this point in the history
…aying

[SES-637] - Stop playing message if deleted
  • Loading branch information
ThomasSession authored Jun 21, 2024
2 parents 32cc6df + 2c90717 commit 46358f4
Show file tree
Hide file tree
Showing 3 changed files with 27 additions and 2 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -80,6 +80,11 @@ public synchronized static AudioSlidePlayer createFor(@NonNull Context context,
}
}

@Nullable
public synchronized static AudioSlidePlayer getInstance() {
return playing.orNull();
}

private AudioSlidePlayer(@NonNull Context context,
@NonNull AudioSlide slide,
@NonNull Listener listener)
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -27,10 +27,11 @@ import org.session.libsession.utilities.Address
import org.session.libsession.utilities.recipients.Recipient
import org.session.libsignal.utilities.IdPrefix
import org.session.libsignal.utilities.Log
import org.thoughtcrime.securesms.database.MmsSmsDatabase
import org.thoughtcrime.securesms.audio.AudioSlidePlayer

import org.thoughtcrime.securesms.database.Storage
import org.thoughtcrime.securesms.database.model.MessageRecord
import org.thoughtcrime.securesms.database.model.MmsMessageRecord
import org.thoughtcrime.securesms.repository.ConversationRepository

import java.util.UUID
Expand Down Expand Up @@ -103,6 +104,13 @@ class ConversationViewModel(
}
}

override fun onCleared() {
super.onCleared()

// Stop all voice message when exiting this page
AudioSlidePlayer.stopAll()
}

fun saveDraft(text: String) {
GlobalScope.launch(Dispatchers.IO) {
repository.saveDraft(threadId, text)
Expand Down Expand Up @@ -142,21 +150,33 @@ class ConversationViewModel(
}

fun deleteLocally(message: MessageRecord) {
stopPlayingAudioMessage(message)
val recipient = recipient ?: return Log.w("Loki", "Recipient was null for delete locally action")
repository.deleteLocally(recipient, message)
}

/**
* Stops audio player if its current playing is the one given in the message.
*/
private fun stopPlayingAudioMessage(message: MessageRecord) {
val mmsMessage = message as? MmsMessageRecord ?: return
val audioSlide = mmsMessage.slideDeck.audioSlide ?: return
AudioSlidePlayer.getInstance()?.takeIf { it.audioSlide == audioSlide }?.stop()
}

fun setRecipientApproved() {
val recipient = recipient ?: return Log.w("Loki", "Recipient was null for set approved action")
repository.setApproved(recipient, true)
}

fun deleteForEveryone(message: MessageRecord) = viewModelScope.launch {
val recipient = recipient ?: return@launch Log.w("Loki", "Recipient was null for delete for everyone - aborting delete operation.")
stopPlayingAudioMessage(message)

repository.deleteForEveryone(threadId, recipient, message)
.onSuccess {
Log.d("Loki", "Deleted message ${message.id} ")
stopPlayingAudioMessage(message)
}
.onFailure {
Log.w("Loki", "FAILED TO delete message ${message.id} ")
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -68,7 +68,7 @@ class VoiceMessageView : RelativeLayout, AudioSlidePlayer.Listener {
return
}

val player = AudioSlidePlayer.createFor(context, audio, this)
val player = AudioSlidePlayer.createFor(context.applicationContext, audio, this)
this.player = player

(audio.asAttachment() as? DatabaseAttachment)?.let { attachment ->
Expand Down

0 comments on commit 46358f4

Please sign in to comment.