Fix leak in recording session.
This commit is contained in:
parent
5febe6490c
commit
eceed641bf
2 changed files with 19 additions and 2 deletions
|
@ -3376,6 +3376,8 @@ public class ConversationParentFragment extends Fragment
|
||||||
|
|
||||||
voiceNoteMediaController.pausePlayback();
|
voiceNoteMediaController.pausePlayback();
|
||||||
recordingSession = new RecordingSession(audioRecorder.startRecording());
|
recordingSession = new RecordingSession(audioRecorder.startRecording());
|
||||||
|
|
||||||
|
disposables.add(recordingSession);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@ -3685,10 +3687,11 @@ public class ConversationParentFragment extends Fragment
|
||||||
|
|
||||||
// Listeners
|
// Listeners
|
||||||
|
|
||||||
private class RecordingSession implements SingleObserver<VoiceNoteDraft> {
|
private class RecordingSession implements SingleObserver<VoiceNoteDraft>, Disposable {
|
||||||
|
|
||||||
private boolean saveDraft = true;
|
private boolean saveDraft = true;
|
||||||
private boolean shouldSend = false;
|
private boolean shouldSend = false;
|
||||||
|
private Disposable disposable = Disposable.empty();
|
||||||
|
|
||||||
RecordingSession(Single<VoiceNoteDraft> observable) {
|
RecordingSession(Single<VoiceNoteDraft> observable) {
|
||||||
observable.observeOn(AndroidSchedulers.mainThread()).subscribe(this);
|
observable.observeOn(AndroidSchedulers.mainThread()).subscribe(this);
|
||||||
|
@ -3696,6 +3699,7 @@ public class ConversationParentFragment extends Fragment
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onSubscribe(@io.reactivex.rxjava3.annotations.NonNull Disposable d) {
|
public void onSubscribe(@io.reactivex.rxjava3.annotations.NonNull Disposable d) {
|
||||||
|
this.disposable = d;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
@ -3709,12 +3713,15 @@ public class ConversationParentFragment extends Fragment
|
||||||
draftViewModel.saveEphemeralVoiceNoteDraft(draft.asDraft());
|
draftViewModel.saveEphemeralVoiceNoteDraft(draft.asDraft());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
recordingSession.dispose();
|
||||||
recordingSession = null;
|
recordingSession = null;
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void onError(Throwable t) {
|
public void onError(Throwable t) {
|
||||||
Toast.makeText(requireContext(), R.string.ConversationActivity_unable_to_record_audio, Toast.LENGTH_LONG).show();
|
Toast.makeText(requireContext(), R.string.ConversationActivity_unable_to_record_audio, Toast.LENGTH_LONG).show();
|
||||||
|
recordingSession.dispose();
|
||||||
recordingSession = null;
|
recordingSession = null;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -3734,6 +3741,16 @@ public class ConversationParentFragment extends Fragment
|
||||||
this.shouldSend = true;
|
this.shouldSend = true;
|
||||||
audioRecorder.stopRecording();
|
audioRecorder.stopRecording();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void dispose() {
|
||||||
|
disposable.dispose();
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public boolean isDisposed() {
|
||||||
|
return disposable.isDisposed();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
private class QuickCameraToggleListener implements OnClickListener {
|
private class QuickCameraToggleListener implements OnClickListener {
|
||||||
|
|
|
@ -205,7 +205,7 @@ public class ConversationViewModel extends ViewModel {
|
||||||
|
|
||||||
scheduledMessageCount = threadId
|
scheduledMessageCount = threadId
|
||||||
.observeOn(Schedulers.io())
|
.observeOn(Schedulers.io())
|
||||||
.flatMap(scheduledMessagesRepository::getScheduledMessageCount);
|
.switchMap(scheduledMessagesRepository::getScheduledMessageCount);
|
||||||
|
|
||||||
Observable<Recipient> liveRecipient = recipientId.distinctUntilChanged().switchMap(id -> Recipient.live(id).asObservable());
|
Observable<Recipient> liveRecipient = recipientId.distinctUntilChanged().switchMap(id -> Recipient.live(id).asObservable());
|
||||||
|
|
||||||
|
|
Loading…
Add table
Reference in a new issue