Merge "Address corner case in which empty audio is requested and MusicRecognitionManagerService crashes." into sc-dev am: 2b14f17e99
Original change: https://googleplex-android-review.googlesource.com/c/platform/frameworks/base/+/15208796 Change-Id: Ie2e4a2aac2952758869223ff6490c3557e1b4f42
This commit is contained in:
@@ -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)) {
|
||||
|
||||
Reference in New Issue
Block a user