Fix leak in recording session.

This commit is contained in:
Alex Hart 2023-01-31 15:07:24 -04:00 committed by Nicholas Tinsley
parent 5febe6490c
commit eceed641bf
2 changed files with 19 additions and 2 deletions

View file

@ -3376,6 +3376,8 @@ public class ConversationParentFragment extends Fragment
voiceNoteMediaController.pausePlayback();
recordingSession = new RecordingSession(audioRecorder.startRecording());
disposables.add(recordingSession);
}
@Override
@ -3685,10 +3687,11 @@ public class ConversationParentFragment extends Fragment
// Listeners
private class RecordingSession implements SingleObserver<VoiceNoteDraft> {
private class RecordingSession implements SingleObserver<VoiceNoteDraft>, Disposable {
private boolean saveDraft = true;
private boolean shouldSend = false;
private Disposable disposable = Disposable.empty();
RecordingSession(Single<VoiceNoteDraft> observable) {
observable.observeOn(AndroidSchedulers.mainThread()).subscribe(this);
@ -3696,6 +3699,7 @@ public class ConversationParentFragment extends Fragment
@Override
public void onSubscribe(@io.reactivex.rxjava3.annotations.NonNull Disposable d) {
this.disposable = d;
}
@Override
@ -3709,12 +3713,15 @@ public class ConversationParentFragment extends Fragment
draftViewModel.saveEphemeralVoiceNoteDraft(draft.asDraft());
}
}
recordingSession.dispose();
recordingSession = null;
}
@Override
public void onError(Throwable t) {
Toast.makeText(requireContext(), R.string.ConversationActivity_unable_to_record_audio, Toast.LENGTH_LONG).show();
recordingSession.dispose();
recordingSession = null;
}
@ -3734,6 +3741,16 @@ public class ConversationParentFragment extends Fragment
this.shouldSend = true;
audioRecorder.stopRecording();
}
@Override
public void dispose() {
disposable.dispose();
}
@Override
public boolean isDisposed() {
return disposable.isDisposed();
}
}
private class QuickCameraToggleListener implements OnClickListener {

View file

@ -205,7 +205,7 @@ public class ConversationViewModel extends ViewModel {
scheduledMessageCount = threadId
.observeOn(Schedulers.io())
.flatMap(scheduledMessagesRepository::getScheduledMessageCount);
.switchMap(scheduledMessagesRepository::getScheduledMessageCount);
Observable<Recipient> liveRecipient = recipientId.distinctUntilChanged().switchMap(id -> Recipient.live(id).asObservable());