Merge "Address corner case in which empty audio is requested and MusicRecognitionManagerService crashes." into sc-dev am: 2b14f17e99 am: 6c491f07f6

Original change: https://googleplex-android-review.googlesource.com/c/platform/frameworks/base/+/15208796

Change-Id: I75b2dd7d3977b6a06cbd29da09a127b04baa93b9
This commit is contained in:
Christian Frank
2021-07-08 07:58:22 +00:00
committed by Automerger Merge Worker

View File

@@ -208,6 +208,24 @@ public final class MusicRecognitionManagerPerUserService extends
@NonNull RecognitionRequest recognitionRequest,
IMusicRecognitionManagerCallback clientCallback,
ParcelFileDescriptor audioSink) {
int maxAudioLengthSeconds = Math.min(recognitionRequest.getMaxAudioLengthSeconds(),
MAX_STREAMING_SECONDS);
if (maxAudioLengthSeconds <= 0) {
// TODO(b/192992319): A request to stream 0s of audio can be used to initialize the
// music recognition service implementation, hence not reporting an error here.
// The TODO for Android T is to move this functionality into an init() API call.
Slog.i(TAG, "No audio requested. Closing stream.");
try {
audioSink.close();
clientCallback.onAudioStreamClosed();
} catch (IOException e) {
Slog.e(TAG, "Problem closing stream.", e);
} catch (RemoteException ignored) {
// Ignored.
}
return;
}
try {
startRecordAudioOp(attributionTag);
} catch (SecurityException e) {
@@ -224,8 +242,6 @@ public final class MusicRecognitionManagerPerUserService extends
return;
}
int maxAudioLengthSeconds = Math.min(recognitionRequest.getMaxAudioLengthSeconds(),
MAX_STREAMING_SECONDS);
AudioRecord audioRecord = createAudioRecord(recognitionRequest, maxAudioLengthSeconds);
try (OutputStream fos =
new ParcelFileDescriptor.AutoCloseOutputStream(audioSink)) {