mirror of
https://github.com/signalapp/Signal-Android.git
synced 2026-04-24 02:39:55 +01:00
Write voice recording data in 1s intervals to drafts.
This commit is contained in:
committed by
Cody Henthorne
parent
7978cc668d
commit
0afa75564f
@@ -35,9 +35,9 @@ public class AudioRecorder {
|
||||
private final AudioRecordingHandler uiHandler;
|
||||
private final AudioRecorderFocusManager audioFocusManager;
|
||||
|
||||
private Recorder recorder;
|
||||
private Future<Uri> recordingUriFuture;
|
||||
|
||||
private Recorder recorder;
|
||||
private Future<Uri> recordingUriFuture;
|
||||
private volatile Uri recordingUri;
|
||||
private SingleSubject<VoiceNoteDraft> recordingSubject;
|
||||
|
||||
public AudioRecorder(@NonNull Context context, @Nullable AudioRecordingHandler uiHandler) {
|
||||
@@ -88,10 +88,12 @@ public class AudioRecorder {
|
||||
|
||||
ParcelFileDescriptor fds[] = ParcelFileDescriptor.createPipe();
|
||||
|
||||
recordingUriFuture = BlobProvider.getInstance()
|
||||
.forData(new ParcelFileDescriptor.AutoCloseInputStream(fds[0]), 0)
|
||||
.withMimeType(MediaUtil.AUDIO_AAC)
|
||||
.createForDraftAttachmentAsync(context);
|
||||
BlobProvider.BlobBuilder blobBuilder = BlobProvider.getInstance()
|
||||
.forData(new ParcelFileDescriptor.AutoCloseInputStream(fds[0]), 0)
|
||||
.withMimeType(MediaUtil.AUDIO_AAC);
|
||||
|
||||
recordingUri = blobBuilder.buildUriForDraftAttachment();
|
||||
recordingUriFuture = blobBuilder.createForDraftAttachmentAsync(context);
|
||||
|
||||
recorder = useMediaRecorderWrapper ? new MediaRecorderWrapper() : new AudioCodec();
|
||||
int focusResult = audioFocusManager.requestAudioFocus();
|
||||
@@ -130,6 +132,7 @@ public class AudioRecorder {
|
||||
recordingSubject = null;
|
||||
recorder = null;
|
||||
recordingUriFuture = null;
|
||||
recordingUri = null;
|
||||
});
|
||||
}
|
||||
|
||||
@@ -157,6 +160,27 @@ public class AudioRecorder {
|
||||
recordingSubject = null;
|
||||
recorder = null;
|
||||
recordingUriFuture = null;
|
||||
recordingUri = null;
|
||||
});
|
||||
}
|
||||
|
||||
/**
|
||||
* Gets a snapshot of the current recording as a VoiceNoteDraft, without stopping the recording.
|
||||
* This can be used to periodically save drafts while recording is in progress.
|
||||
* Returns null if there is no active recording.
|
||||
*/
|
||||
@Nullable
|
||||
public VoiceNoteDraft getCurrentRecordingSnapshot() {
|
||||
if (recordingUri == null) {
|
||||
return null;
|
||||
}
|
||||
|
||||
try {
|
||||
long size = MediaUtil.getMediaSize(context, recordingUri);
|
||||
return new VoiceNoteDraft(recordingUri, size);
|
||||
} catch (IOException e) {
|
||||
Log.w(TAG, "Error getting current recording snapshot", e);
|
||||
return null;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user