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
diff --git a/Android.bp b/Android.bp
index c6f9362..5953007 100644
--- a/Android.bp
+++ b/Android.bp
@@ -547,6 +547,7 @@
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 @@
// 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 ca921ff..c82fee0f 100644
--- a/ApiDocs.bp
+++ b/ApiDocs.bp
@@ -83,6 +83,10 @@
merge_annotations_dirs: [
"metalava-manual",
],
+ // TODO(b/169090544): remove below aidl includes.
+ aidl: {
+ local_include_dirs: ["media/aidl"],
+ },
}
droidstubs {
@@ -150,6 +154,10 @@
":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 bb65387..ad2250c 100644
--- a/StubLibraries.bp
+++ b/StubLibraries.bp
@@ -51,9 +51,12 @@
":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 c4d123c..06b5b67 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.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 @@
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 8895b3a..828707b 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 81d8291..cee3635 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 @@
* 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 1d31285..de8823c 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.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 @@
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 ebcf10d..509eb25 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.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 @@
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;
}