From da7c21ec5175ea494b148f0ba92e8d638608144a Mon Sep 17 00:00:00 2001 From: Ytai Ben-Tsvi Date: Wed, 16 Sep 2020 13:04:31 -0700 Subject: [PATCH] Separate AIDL packages This moves the android.media.audio.common, android.media.permission and android.media.soundtrigger_middleware AIDL files to a their own separate aidl_interface module for Java. Previously, because of how the framework JAR is configured, those files were automatically compiled into it and we had to disable Java for this target, creating a discrepancy between C++ and Java, which would require us to similarly diverge any dependent targets if we want cross-language support. As part of this change, we also had to switch from using the FileDescriptor type to ParcelFileDescriptor, as this is the only type supported outside of the framework JAR and is also the recommended practice. Test: Manual verification of basic soundtrigger functionality. Change-Id: Ib65c19dd7c7f5433cfa527fa74bb61ac677f5cf5 --- Android.bp | 2 + ApiDocs.bp | 8 ++ StubLibraries.bp | 7 +- .../hardware/soundtrigger/ConversionUtil.java | 9 +- media/Android.bp | 93 ++++++------------- .../media/audio/common/AudioChannelMask.aidl | 0 .../media/audio/common/AudioConfig.aidl | 0 .../media/audio/common/AudioFormat.aidl | 0 .../media/audio/common/AudioOffloadInfo.aidl | 0 .../media/audio/common/AudioStreamType.aidl | 0 .../media/audio/common/AudioUsage.aidl | 0 .../android/media/permission/Identity.aidl | 0 .../AudioCapabilities.aidl | 0 .../ConfidenceLevel.aidl | 0 .../ISoundTriggerCallback.aidl | 0 .../ISoundTriggerMiddlewareService.aidl | 0 .../ISoundTriggerModule.aidl | 0 .../ModelParameter.aidl | 0 .../ModelParameterRange.aidl | 0 .../media/soundtrigger_middleware/OWNERS | 0 .../media/soundtrigger_middleware/Phrase.aidl | 0 .../PhraseRecognitionEvent.aidl | 0 .../PhraseRecognitionExtra.aidl | 0 .../PhraseSoundModel.aidl | 0 .../RecognitionConfig.aidl | 0 .../RecognitionEvent.aidl | 0 .../RecognitionMode.aidl | 0 .../RecognitionStatus.aidl | 0 .../soundtrigger_middleware/SoundModel.aidl | 3 +- .../SoundModelType.aidl | 0 .../SoundTriggerModuleDescriptor.aidl | 0 .../SoundTriggerModuleProperties.aidl | 0 .../media/soundtrigger_middleware/Status.aidl | 0 .../ConversionUtil.java | 17 +++- .../SoundTriggerMiddlewareImplTest.java | 3 +- 35 files changed, 72 insertions(+), 70 deletions(-) rename media/{java => aidl}/android/media/audio/common/AudioChannelMask.aidl (100%) rename media/{java => aidl}/android/media/audio/common/AudioConfig.aidl (100%) rename media/{java => aidl}/android/media/audio/common/AudioFormat.aidl (100%) rename media/{java => aidl}/android/media/audio/common/AudioOffloadInfo.aidl (100%) rename media/{java => aidl}/android/media/audio/common/AudioStreamType.aidl (100%) rename media/{java => aidl}/android/media/audio/common/AudioUsage.aidl (100%) rename media/{java => aidl}/android/media/permission/Identity.aidl (100%) rename media/{java => aidl}/android/media/soundtrigger_middleware/AudioCapabilities.aidl (100%) rename media/{java => aidl}/android/media/soundtrigger_middleware/ConfidenceLevel.aidl (100%) rename media/{java => aidl}/android/media/soundtrigger_middleware/ISoundTriggerCallback.aidl (100%) rename media/{java => aidl}/android/media/soundtrigger_middleware/ISoundTriggerMiddlewareService.aidl (100%) rename media/{java => aidl}/android/media/soundtrigger_middleware/ISoundTriggerModule.aidl (100%) rename media/{java => aidl}/android/media/soundtrigger_middleware/ModelParameter.aidl (100%) rename media/{java => aidl}/android/media/soundtrigger_middleware/ModelParameterRange.aidl (100%) rename media/{java => aidl}/android/media/soundtrigger_middleware/OWNERS (100%) rename media/{java => aidl}/android/media/soundtrigger_middleware/Phrase.aidl (100%) rename media/{java => aidl}/android/media/soundtrigger_middleware/PhraseRecognitionEvent.aidl (100%) rename media/{java => aidl}/android/media/soundtrigger_middleware/PhraseRecognitionExtra.aidl (100%) rename media/{java => aidl}/android/media/soundtrigger_middleware/PhraseSoundModel.aidl (100%) rename media/{java => aidl}/android/media/soundtrigger_middleware/RecognitionConfig.aidl (100%) rename media/{java => aidl}/android/media/soundtrigger_middleware/RecognitionEvent.aidl (100%) rename media/{java => aidl}/android/media/soundtrigger_middleware/RecognitionMode.aidl (100%) rename media/{java => aidl}/android/media/soundtrigger_middleware/RecognitionStatus.aidl (100%) rename media/{java => aidl}/android/media/soundtrigger_middleware/SoundModel.aidl (94%) rename media/{java => aidl}/android/media/soundtrigger_middleware/SoundModelType.aidl (100%) rename media/{java => aidl}/android/media/soundtrigger_middleware/SoundTriggerModuleDescriptor.aidl (100%) rename media/{java => aidl}/android/media/soundtrigger_middleware/SoundTriggerModuleProperties.aidl (100%) rename media/{java => aidl}/android/media/soundtrigger_middleware/Status.aidl (100%) diff --git a/Android.bp b/Android.bp index c6f9362b4919c..59530079d4ade 100644 --- a/Android.bp +++ b/Android.bp @@ -547,6 +547,7 @@ java_library { exclude_srcs: ["core/java/android/content/pm/AndroidTestBaseUpdater.java"], aidl: { generate_get_transaction_name: true, + local_include_dirs: ["media/aidl"], }, dxflags: [ "--core-library", @@ -583,6 +584,7 @@ java_library { // in favor of an API stubs dependency in java_library "framework" below. "mimemap", "mediatranscoding_aidl_interface-java", + "soundtrigger_middleware-aidl-java", ], // For backwards compatibility. stem: "framework", diff --git a/ApiDocs.bp b/ApiDocs.bp index ca921ff97c350..c82fee0fe8ace 100644 --- a/ApiDocs.bp +++ b/ApiDocs.bp @@ -83,6 +83,10 @@ stubs_defaults { merge_annotations_dirs: [ "metalava-manual", ], + // TODO(b/169090544): remove below aidl includes. + aidl: { + local_include_dirs: ["media/aidl"], + }, } droidstubs { @@ -150,6 +154,10 @@ doc_defaults { ":current-support-api", ":current-androidx-api", ], + // TODO(b/169090544): remove below aidl includes. + aidl: { + local_include_dirs: ["media/aidl"], + }, } doc_defaults { diff --git a/StubLibraries.bp b/StubLibraries.bp index bb6538739c493..ad2250ca15135 100644 --- a/StubLibraries.bp +++ b/StubLibraries.bp @@ -51,9 +51,12 @@ stubs_defaults { ":android_icu4j_public_api_files", "**/package.html", ], - // TODO(b/147699819): remove below aidl includes. + // TODO(b/147699819, b/169090544): remove below aidl includes. aidl: { - local_include_dirs: ["telephony/java"], + local_include_dirs: [ + "telephony/java", + "media/aidl", + ], }, libs: ["framework-internal-utils"], installable: false, diff --git a/core/java/android/hardware/soundtrigger/ConversionUtil.java b/core/java/android/hardware/soundtrigger/ConversionUtil.java index c4d123ca4382c..06b5b6745bd17 100644 --- a/core/java/android/hardware/soundtrigger/ConversionUtil.java +++ b/core/java/android/hardware/soundtrigger/ConversionUtil.java @@ -32,10 +32,12 @@ import android.media.soundtrigger_middleware.RecognitionMode; import android.media.soundtrigger_middleware.SoundModel; import android.media.soundtrigger_middleware.SoundTriggerModuleDescriptor; import android.media.soundtrigger_middleware.SoundTriggerModuleProperties; +import android.os.ParcelFileDescriptor; import android.os.SharedMemory; import android.system.ErrnoException; import java.io.FileDescriptor; +import java.io.IOException; import java.nio.ByteBuffer; import java.util.Arrays; import java.util.UUID; @@ -109,7 +111,12 @@ class ConversionUtil { aidlModel.type = apiModel.getType(); aidlModel.uuid = api2aidlUuid(apiModel.getUuid()); aidlModel.vendorUuid = api2aidlUuid(apiModel.getVendorUuid()); - aidlModel.data = byteArrayToSharedMemory(apiModel.getData(), "SoundTrigger SoundModel"); + try { + aidlModel.data = ParcelFileDescriptor.dup( + byteArrayToSharedMemory(apiModel.getData(), "SoundTrigger SoundModel")); + } catch (IOException e) { + throw new RuntimeException(e); + } aidlModel.dataSize = apiModel.getData().length; return aidlModel; } diff --git a/media/Android.bp b/media/Android.bp index 8895b3a9a2ba7..828707b70e7b4 100644 --- a/media/Android.bp +++ b/media/Android.bp @@ -1,85 +1,52 @@ aidl_interface { name: "audio_common-aidl", unstable: true, - local_include_dir: "java", + local_include_dir: "aidl", srcs: [ - "java/android/media/audio/common/AudioChannelMask.aidl", - "java/android/media/audio/common/AudioConfig.aidl", - "java/android/media/audio/common/AudioFormat.aidl", - "java/android/media/audio/common/AudioOffloadInfo.aidl", - "java/android/media/audio/common/AudioStreamType.aidl", - "java/android/media/audio/common/AudioUsage.aidl", + "aidl/android/media/audio/common/AudioChannelMask.aidl", + "aidl/android/media/audio/common/AudioConfig.aidl", + "aidl/android/media/audio/common/AudioFormat.aidl", + "aidl/android/media/audio/common/AudioOffloadInfo.aidl", + "aidl/android/media/audio/common/AudioStreamType.aidl", + "aidl/android/media/audio/common/AudioUsage.aidl", ], - backend: - { - cpp: { - enabled: true, - }, - java: { - // Already generated as part of the entire media java library. - enabled: false, - }, - }, } aidl_interface { name: "media_permission-aidl", unstable: true, - local_include_dir: "java", + local_include_dir: "aidl", srcs: [ - "java/android/media/permission/Identity.aidl", + "aidl/android/media/permission/Identity.aidl", ], - backend: - { - cpp: { - enabled: true, - }, - java: { - // Already generated as part of the entire media java library. - enabled: false, - }, - }, } aidl_interface { name: "soundtrigger_middleware-aidl", unstable: true, - local_include_dir: "java", + local_include_dir: "aidl", srcs: [ - "java/android/media/soundtrigger_middleware/ConfidenceLevel.aidl", - "java/android/media/soundtrigger_middleware/ISoundTriggerCallback.aidl", - "java/android/media/soundtrigger_middleware/ISoundTriggerMiddlewareService.aidl", - "java/android/media/soundtrigger_middleware/ISoundTriggerModule.aidl", - "java/android/media/soundtrigger_middleware/ModelParameter.aidl", - "java/android/media/soundtrigger_middleware/ModelParameterRange.aidl", - "java/android/media/soundtrigger_middleware/Phrase.aidl", - "java/android/media/soundtrigger_middleware/PhraseRecognitionEvent.aidl", - "java/android/media/soundtrigger_middleware/PhraseRecognitionExtra.aidl", - "java/android/media/soundtrigger_middleware/PhraseSoundModel.aidl", - "java/android/media/soundtrigger_middleware/RecognitionConfig.aidl", - "java/android/media/soundtrigger_middleware/RecognitionEvent.aidl", - "java/android/media/soundtrigger_middleware/RecognitionMode.aidl", - "java/android/media/soundtrigger_middleware/RecognitionStatus.aidl", - "java/android/media/soundtrigger_middleware/SoundModel.aidl", - "java/android/media/soundtrigger_middleware/SoundModelType.aidl", - "java/android/media/soundtrigger_middleware/SoundTriggerModuleDescriptor.aidl", - "java/android/media/soundtrigger_middleware/SoundTriggerModuleProperties.aidl", - "java/android/media/soundtrigger_middleware/Status.aidl", + "aidl/android/media/soundtrigger_middleware/AudioCapabilities.aidl", + "aidl/android/media/soundtrigger_middleware/ConfidenceLevel.aidl", + "aidl/android/media/soundtrigger_middleware/ISoundTriggerCallback.aidl", + "aidl/android/media/soundtrigger_middleware/ISoundTriggerMiddlewareService.aidl", + "aidl/android/media/soundtrigger_middleware/ISoundTriggerModule.aidl", + "aidl/android/media/soundtrigger_middleware/ModelParameter.aidl", + "aidl/android/media/soundtrigger_middleware/ModelParameterRange.aidl", + "aidl/android/media/soundtrigger_middleware/Phrase.aidl", + "aidl/android/media/soundtrigger_middleware/PhraseRecognitionEvent.aidl", + "aidl/android/media/soundtrigger_middleware/PhraseRecognitionExtra.aidl", + "aidl/android/media/soundtrigger_middleware/PhraseSoundModel.aidl", + "aidl/android/media/soundtrigger_middleware/RecognitionConfig.aidl", + "aidl/android/media/soundtrigger_middleware/RecognitionEvent.aidl", + "aidl/android/media/soundtrigger_middleware/RecognitionMode.aidl", + "aidl/android/media/soundtrigger_middleware/RecognitionStatus.aidl", + "aidl/android/media/soundtrigger_middleware/SoundModel.aidl", + "aidl/android/media/soundtrigger_middleware/SoundModelType.aidl", + "aidl/android/media/soundtrigger_middleware/SoundTriggerModuleDescriptor.aidl", + "aidl/android/media/soundtrigger_middleware/SoundTriggerModuleProperties.aidl", + "aidl/android/media/soundtrigger_middleware/Status.aidl", ], - backend: - { - cpp: { - enabled: true, - }, - java: { - // Already generated as part of the entire media java library. - enabled: false, - }, - ndk: { - // Not currently needed, and disabled because of b/146172425 - enabled: false, - }, - }, imports: [ "audio_common-aidl", "media_permission-aidl", diff --git a/media/java/android/media/audio/common/AudioChannelMask.aidl b/media/aidl/android/media/audio/common/AudioChannelMask.aidl similarity index 100% rename from media/java/android/media/audio/common/AudioChannelMask.aidl rename to media/aidl/android/media/audio/common/AudioChannelMask.aidl diff --git a/media/java/android/media/audio/common/AudioConfig.aidl b/media/aidl/android/media/audio/common/AudioConfig.aidl similarity index 100% rename from media/java/android/media/audio/common/AudioConfig.aidl rename to media/aidl/android/media/audio/common/AudioConfig.aidl diff --git a/media/java/android/media/audio/common/AudioFormat.aidl b/media/aidl/android/media/audio/common/AudioFormat.aidl similarity index 100% rename from media/java/android/media/audio/common/AudioFormat.aidl rename to media/aidl/android/media/audio/common/AudioFormat.aidl diff --git a/media/java/android/media/audio/common/AudioOffloadInfo.aidl b/media/aidl/android/media/audio/common/AudioOffloadInfo.aidl similarity index 100% rename from media/java/android/media/audio/common/AudioOffloadInfo.aidl rename to media/aidl/android/media/audio/common/AudioOffloadInfo.aidl diff --git a/media/java/android/media/audio/common/AudioStreamType.aidl b/media/aidl/android/media/audio/common/AudioStreamType.aidl similarity index 100% rename from media/java/android/media/audio/common/AudioStreamType.aidl rename to media/aidl/android/media/audio/common/AudioStreamType.aidl diff --git a/media/java/android/media/audio/common/AudioUsage.aidl b/media/aidl/android/media/audio/common/AudioUsage.aidl similarity index 100% rename from media/java/android/media/audio/common/AudioUsage.aidl rename to media/aidl/android/media/audio/common/AudioUsage.aidl diff --git a/media/java/android/media/permission/Identity.aidl b/media/aidl/android/media/permission/Identity.aidl similarity index 100% rename from media/java/android/media/permission/Identity.aidl rename to media/aidl/android/media/permission/Identity.aidl diff --git a/media/java/android/media/soundtrigger_middleware/AudioCapabilities.aidl b/media/aidl/android/media/soundtrigger_middleware/AudioCapabilities.aidl similarity index 100% rename from media/java/android/media/soundtrigger_middleware/AudioCapabilities.aidl rename to media/aidl/android/media/soundtrigger_middleware/AudioCapabilities.aidl diff --git a/media/java/android/media/soundtrigger_middleware/ConfidenceLevel.aidl b/media/aidl/android/media/soundtrigger_middleware/ConfidenceLevel.aidl similarity index 100% rename from media/java/android/media/soundtrigger_middleware/ConfidenceLevel.aidl rename to media/aidl/android/media/soundtrigger_middleware/ConfidenceLevel.aidl diff --git a/media/java/android/media/soundtrigger_middleware/ISoundTriggerCallback.aidl b/media/aidl/android/media/soundtrigger_middleware/ISoundTriggerCallback.aidl similarity index 100% rename from media/java/android/media/soundtrigger_middleware/ISoundTriggerCallback.aidl rename to media/aidl/android/media/soundtrigger_middleware/ISoundTriggerCallback.aidl diff --git a/media/java/android/media/soundtrigger_middleware/ISoundTriggerMiddlewareService.aidl b/media/aidl/android/media/soundtrigger_middleware/ISoundTriggerMiddlewareService.aidl similarity index 100% rename from media/java/android/media/soundtrigger_middleware/ISoundTriggerMiddlewareService.aidl rename to media/aidl/android/media/soundtrigger_middleware/ISoundTriggerMiddlewareService.aidl diff --git a/media/java/android/media/soundtrigger_middleware/ISoundTriggerModule.aidl b/media/aidl/android/media/soundtrigger_middleware/ISoundTriggerModule.aidl similarity index 100% rename from media/java/android/media/soundtrigger_middleware/ISoundTriggerModule.aidl rename to media/aidl/android/media/soundtrigger_middleware/ISoundTriggerModule.aidl diff --git a/media/java/android/media/soundtrigger_middleware/ModelParameter.aidl b/media/aidl/android/media/soundtrigger_middleware/ModelParameter.aidl similarity index 100% rename from media/java/android/media/soundtrigger_middleware/ModelParameter.aidl rename to media/aidl/android/media/soundtrigger_middleware/ModelParameter.aidl diff --git a/media/java/android/media/soundtrigger_middleware/ModelParameterRange.aidl b/media/aidl/android/media/soundtrigger_middleware/ModelParameterRange.aidl similarity index 100% rename from media/java/android/media/soundtrigger_middleware/ModelParameterRange.aidl rename to media/aidl/android/media/soundtrigger_middleware/ModelParameterRange.aidl diff --git a/media/java/android/media/soundtrigger_middleware/OWNERS b/media/aidl/android/media/soundtrigger_middleware/OWNERS similarity index 100% rename from media/java/android/media/soundtrigger_middleware/OWNERS rename to media/aidl/android/media/soundtrigger_middleware/OWNERS diff --git a/media/java/android/media/soundtrigger_middleware/Phrase.aidl b/media/aidl/android/media/soundtrigger_middleware/Phrase.aidl similarity index 100% rename from media/java/android/media/soundtrigger_middleware/Phrase.aidl rename to media/aidl/android/media/soundtrigger_middleware/Phrase.aidl diff --git a/media/java/android/media/soundtrigger_middleware/PhraseRecognitionEvent.aidl b/media/aidl/android/media/soundtrigger_middleware/PhraseRecognitionEvent.aidl similarity index 100% rename from media/java/android/media/soundtrigger_middleware/PhraseRecognitionEvent.aidl rename to media/aidl/android/media/soundtrigger_middleware/PhraseRecognitionEvent.aidl diff --git a/media/java/android/media/soundtrigger_middleware/PhraseRecognitionExtra.aidl b/media/aidl/android/media/soundtrigger_middleware/PhraseRecognitionExtra.aidl similarity index 100% rename from media/java/android/media/soundtrigger_middleware/PhraseRecognitionExtra.aidl rename to media/aidl/android/media/soundtrigger_middleware/PhraseRecognitionExtra.aidl diff --git a/media/java/android/media/soundtrigger_middleware/PhraseSoundModel.aidl b/media/aidl/android/media/soundtrigger_middleware/PhraseSoundModel.aidl similarity index 100% rename from media/java/android/media/soundtrigger_middleware/PhraseSoundModel.aidl rename to media/aidl/android/media/soundtrigger_middleware/PhraseSoundModel.aidl diff --git a/media/java/android/media/soundtrigger_middleware/RecognitionConfig.aidl b/media/aidl/android/media/soundtrigger_middleware/RecognitionConfig.aidl similarity index 100% rename from media/java/android/media/soundtrigger_middleware/RecognitionConfig.aidl rename to media/aidl/android/media/soundtrigger_middleware/RecognitionConfig.aidl diff --git a/media/java/android/media/soundtrigger_middleware/RecognitionEvent.aidl b/media/aidl/android/media/soundtrigger_middleware/RecognitionEvent.aidl similarity index 100% rename from media/java/android/media/soundtrigger_middleware/RecognitionEvent.aidl rename to media/aidl/android/media/soundtrigger_middleware/RecognitionEvent.aidl diff --git a/media/java/android/media/soundtrigger_middleware/RecognitionMode.aidl b/media/aidl/android/media/soundtrigger_middleware/RecognitionMode.aidl similarity index 100% rename from media/java/android/media/soundtrigger_middleware/RecognitionMode.aidl rename to media/aidl/android/media/soundtrigger_middleware/RecognitionMode.aidl diff --git a/media/java/android/media/soundtrigger_middleware/RecognitionStatus.aidl b/media/aidl/android/media/soundtrigger_middleware/RecognitionStatus.aidl similarity index 100% rename from media/java/android/media/soundtrigger_middleware/RecognitionStatus.aidl rename to media/aidl/android/media/soundtrigger_middleware/RecognitionStatus.aidl diff --git a/media/java/android/media/soundtrigger_middleware/SoundModel.aidl b/media/aidl/android/media/soundtrigger_middleware/SoundModel.aidl similarity index 94% rename from media/java/android/media/soundtrigger_middleware/SoundModel.aidl rename to media/aidl/android/media/soundtrigger_middleware/SoundModel.aidl index 81d8291e85aa3..cee3635a1e3bf 100644 --- a/media/java/android/media/soundtrigger_middleware/SoundModel.aidl +++ b/media/aidl/android/media/soundtrigger_middleware/SoundModel.aidl @@ -16,6 +16,7 @@ package android.media.soundtrigger_middleware; import android.media.soundtrigger_middleware.SoundModelType; +import android.os.ParcelFileDescriptor; /** * Base sound model descriptor. This struct can be extended for various specific types by way of @@ -32,7 +33,7 @@ parcelable SoundModel { * was build for */ String vendorUuid; /** Opaque data transparent to Android framework */ - FileDescriptor data; + ParcelFileDescriptor data; /** Size of the above data, in bytes. */ int dataSize; } diff --git a/media/java/android/media/soundtrigger_middleware/SoundModelType.aidl b/media/aidl/android/media/soundtrigger_middleware/SoundModelType.aidl similarity index 100% rename from media/java/android/media/soundtrigger_middleware/SoundModelType.aidl rename to media/aidl/android/media/soundtrigger_middleware/SoundModelType.aidl diff --git a/media/java/android/media/soundtrigger_middleware/SoundTriggerModuleDescriptor.aidl b/media/aidl/android/media/soundtrigger_middleware/SoundTriggerModuleDescriptor.aidl similarity index 100% rename from media/java/android/media/soundtrigger_middleware/SoundTriggerModuleDescriptor.aidl rename to media/aidl/android/media/soundtrigger_middleware/SoundTriggerModuleDescriptor.aidl diff --git a/media/java/android/media/soundtrigger_middleware/SoundTriggerModuleProperties.aidl b/media/aidl/android/media/soundtrigger_middleware/SoundTriggerModuleProperties.aidl similarity index 100% rename from media/java/android/media/soundtrigger_middleware/SoundTriggerModuleProperties.aidl rename to media/aidl/android/media/soundtrigger_middleware/SoundTriggerModuleProperties.aidl diff --git a/media/java/android/media/soundtrigger_middleware/Status.aidl b/media/aidl/android/media/soundtrigger_middleware/Status.aidl similarity index 100% rename from media/java/android/media/soundtrigger_middleware/Status.aidl rename to media/aidl/android/media/soundtrigger_middleware/Status.aidl diff --git a/services/core/java/com/android/server/soundtrigger_middleware/ConversionUtil.java b/services/core/java/com/android/server/soundtrigger_middleware/ConversionUtil.java index 1d31285ed9c7b..de8823c4b7f3e 100644 --- a/services/core/java/com/android/server/soundtrigger_middleware/ConversionUtil.java +++ b/services/core/java/com/android/server/soundtrigger_middleware/ConversionUtil.java @@ -40,7 +40,10 @@ import android.media.soundtrigger_middleware.SoundModel; import android.media.soundtrigger_middleware.SoundModelType; import android.media.soundtrigger_middleware.SoundTriggerModuleProperties; import android.os.HidlMemoryUtil; +import android.os.ParcelFileDescriptor; +import java.io.FileDescriptor; +import java.io.IOException; import java.util.regex.Matcher; /** @@ -196,8 +199,18 @@ class ConversionUtil { hidlModel.header.type = aidl2hidlSoundModelType(aidlModel.type); hidlModel.header.uuid = aidl2hidlUuid(aidlModel.uuid); hidlModel.header.vendorUuid = aidl2hidlUuid(aidlModel.vendorUuid); - hidlModel.data = HidlMemoryUtil.fileDescriptorToHidlMemory(aidlModel.data, - aidlModel.dataSize); + + // Extract a dup of the underlying FileDescriptor out of aidlModel.data without changing + // the original. + FileDescriptor fd = new FileDescriptor(); + try { + ParcelFileDescriptor dup = aidlModel.data.dup(); + fd.setInt$(dup.detachFd()); + hidlModel.data = HidlMemoryUtil.fileDescriptorToHidlMemory(fd, aidlModel.dataSize); + } catch (IOException e) { + throw new RuntimeException(e); + } + return hidlModel; } diff --git a/services/tests/servicestests/src/com/android/server/soundtrigger_middleware/SoundTriggerMiddlewareImplTest.java b/services/tests/servicestests/src/com/android/server/soundtrigger_middleware/SoundTriggerMiddlewareImplTest.java index ebcf10dd019f4..509eb25633767 100644 --- a/services/tests/servicestests/src/com/android/server/soundtrigger_middleware/SoundTriggerMiddlewareImplTest.java +++ b/services/tests/servicestests/src/com/android/server/soundtrigger_middleware/SoundTriggerMiddlewareImplTest.java @@ -59,6 +59,7 @@ import android.os.HidlMemoryUtil; import android.os.HwParcel; import android.os.IHwBinder; import android.os.IHwInterface; +import android.os.ParcelFileDescriptor; import android.os.RemoteException; import android.os.SharedMemory; import android.system.ErrnoException; @@ -126,7 +127,7 @@ public class SoundTriggerMiddlewareImplTest { model.uuid = "12345678-2345-3456-4567-abcdef987654"; model.vendorUuid = "87654321-5432-6543-7654-456789fedcba"; byte[] data = new byte[]{91, 92, 93, 94, 95}; - model.data = byteArrayToFileDescriptor(data); + model.data = new ParcelFileDescriptor(byteArrayToFileDescriptor(data)); model.dataSize = data.length; return model; }