AudioRecordingConfiguration: report more info about active use case
Report more information in onRecordingConfigChanged() callback and
AudioRecordingConfiguration:
- For client:
- Port ID (package private)
- Enabled effects
- Silenced by policy
- For stream:
- Active effects
- Active audio source
Bug: 111438757
Test: CTS tests for AudioRecordingConfiguration
Change-Id: I84952614ee5d9ede23afd5836c68da7a20e79a2e
diff --git a/services/core/java/com/android/server/audio/RecordingActivityMonitor.java b/services/core/java/com/android/server/audio/RecordingActivityMonitor.java
index 2feea41..905f826 100644
--- a/services/core/java/com/android/server/audio/RecordingActivityMonitor.java
+++ b/services/core/java/com/android/server/audio/RecordingActivityMonitor.java
@@ -20,11 +20,11 @@
import android.content.pm.PackageManager;
import android.media.AudioFormat;
import android.media.AudioManager;
-import android.media.AudioPlaybackConfiguration;
import android.media.AudioRecordingConfiguration;
import android.media.AudioSystem;
import android.media.IRecordingConfigDispatcher;
import android.media.MediaRecorder;
+import android.media.audiofx.AudioEffect;
import android.os.IBinder;
import android.os.RemoteException;
import android.util.Log;
@@ -64,12 +64,19 @@
* Implementation of android.media.AudioSystem.AudioRecordingCallback
*/
public void onRecordingConfigurationChanged(int event, int uid, int session, int source,
- int[] recordingInfo, String packName) {
+ int portId, boolean silenced, int[] recordingInfo,
+ AudioEffect.Descriptor[] clientEffects,
+ AudioEffect.Descriptor[] effects,
+ int activeSource, String packName) {
if (MediaRecorder.isSystemOnlyAudioSource(source)) {
return;
}
+ String clientEffectName = clientEffects.length == 0 ? "None" : clientEffects[0].name;
+ String effectName = effects.length == 0 ? "None" : effects[0].name;
+
final List<AudioRecordingConfiguration> configsSystem =
- updateSnapshot(event, uid, session, source, recordingInfo);
+ updateSnapshot(event, uid, session, source, recordingInfo,
+ portId, silenced, activeSource, clientEffects, effects);
if (configsSystem != null){
synchronized (mClients) {
// list of recording configurations for "public consumption". It is only computed if
@@ -179,13 +186,20 @@
* @param session
* @param source
* @param recordingFormat see
- * {@link AudioSystem.AudioRecordingCallback#onRecordingConfigurationChanged(int, int, int, int[])}
+ * {@link AudioSystem.AudioRecordingCallback#onRecordingConfigurationChanged(int, int, int,\
+ int, int, boolean, int[], AudioEffect.Descriptor[], AudioEffect.Descriptor[], int, String)}
* for the definition of the contents of the array
+ * @param portId
+ * @param silenced
+ * @param activeSource
+ * @param clientEffects
+ * @param effects
* @return null if the list of active recording sessions has not been modified, a list
* with the current active configurations otherwise.
*/
private List<AudioRecordingConfiguration> updateSnapshot(int event, int uid, int session,
- int source, int[] recordingInfo) {
+ int source, int[] recordingInfo, int portId, boolean silenced, int activeSource,
+ AudioEffect.Descriptor[] clientEffects, AudioEffect.Descriptor[] effects) {
final boolean configChanged;
final ArrayList<AudioRecordingConfiguration> configs;
synchronized(mRecordConfigs) {
@@ -211,7 +225,7 @@
.setSampleRate(recordingInfo[5])
.build();
final int patchHandle = recordingInfo[6];
- final Integer sessionKey = new Integer(session);
+ final Integer portIdKey = new Integer(portId);
final String[] packages = mPackMan.getPackagesForUid(uid);
final String packageName;
@@ -222,19 +236,20 @@
}
final AudioRecordingConfiguration updatedConfig =
new AudioRecordingConfiguration(uid, session, source,
- clientFormat, deviceFormat, patchHandle, packageName);
+ clientFormat, deviceFormat, patchHandle, packageName,
+ portId, silenced, activeSource, clientEffects, effects);
- if (mRecordConfigs.containsKey(sessionKey)) {
- if (updatedConfig.equals(mRecordConfigs.get(sessionKey))) {
+ if (mRecordConfigs.containsKey(portIdKey)) {
+ if (updatedConfig.equals(mRecordConfigs.get(portIdKey))) {
configChanged = false;
} else {
// config exists but has been modified
- mRecordConfigs.remove(sessionKey);
- mRecordConfigs.put(sessionKey, updatedConfig);
+ mRecordConfigs.remove(portIdKey);
+ mRecordConfigs.put(portIdKey, updatedConfig);
configChanged = true;
}
} else {
- mRecordConfigs.put(sessionKey, updatedConfig);
+ mRecordConfigs.put(portIdKey, updatedConfig);
configChanged = true;
}
if (configChanged) {