MOBILE-3833 capture: Fix discard in-app audio in device

main
Dani Palou 2022-04-07 13:05:18 +02:00
parent 4aeababbf6
commit 15b6e12b04
1 changed files with 38 additions and 10 deletions

View File

@ -130,7 +130,27 @@ export class CoreEmulatorCaptureMediaComponent implements OnInit, OnDestroy {
* @return Promise resolved when ready.
*/
protected async initCordovaMediaPlugin(): Promise<void> {
try {
await this.createFileAndMediaInstance();
this.readyToCapture = true;
this.previewMedia = this.previewAudio?.nativeElement;
} catch (error) {
this.dismissWithError(-1, error.message || error);
}
}
/**
* Create a file entry and the cordova media instance.
*/
protected async createFileAndMediaInstance(): Promise<void> {
this.filePath = this.getFilePath();
// First create the file.
this.fileEntry = await CoreFile.createFile(this.filePath);
// Now create the media instance.
let absolutePath = CoreText.concatenatePaths(CoreFile.getBasePathInstant(), this.filePath);
if (Platform.is('ios')) {
@ -138,17 +158,21 @@ export class CoreEmulatorCaptureMediaComponent implements OnInit, OnDestroy {
absolutePath = absolutePath.replace(/^file:\/\//, '');
}
try {
// First create the file.
this.fileEntry = await CoreFile.createFile(this.filePath);
// Now create the media instance.
this.mediaFile = Media.create(absolutePath);
this.readyToCapture = true;
this.previewMedia = this.previewAudio?.nativeElement;
} catch (error) {
this.dismissWithError(-1, error.message || error);
}
/**
* Reset the file and the cordova media instance.
*/
protected async resetCordovaMediaCapture(): Promise<void> {
if (this.filePath) {
// Remove old file, don't block the user for this.
CoreFile.removeFile(this.filePath);
}
this.mediaFile?.release();
await this.createFileAndMediaInstance();
}
/**
@ -410,11 +434,15 @@ export class CoreEmulatorCaptureMediaComponent implements OnInit, OnDestroy {
/**
* Discard the captured media.
*/
discard(): void {
async discard(): Promise<void> {
this.previewMedia?.pause();
this.streamVideo?.nativeElement.play();
this.audioDrawer?.start();
if (this.isCordovaAudioCapture) {
await this.resetCordovaMediaCapture();
}
this.hasCaptured = false;
this.isCapturing = false;
this.resetChrono = true;