Log audio recording and dynamic policy registration history
Bug: 78248310
Test: adb shell dumpsys audio, check under "recording activity"
Change-Id: I5d25d4728b7dea717e257c1d9a8efae9b002b437
diff --git a/services/core/java/com/android/server/audio/RecordingActivityMonitor.java b/services/core/java/com/android/server/audio/RecordingActivityMonitor.java
index 34309b6..2feea41 100644
--- a/services/core/java/com/android/server/audio/RecordingActivityMonitor.java
+++ b/services/core/java/com/android/server/audio/RecordingActivityMonitor.java
@@ -103,6 +103,9 @@
conf.dump(pw);
}
}
+ pw.println("\n");
+ // log
+ sEventLogger.dump(pw);
}
private ArrayList<AudioRecordingConfiguration> anonymizeForPublicConsumption(
@@ -190,6 +193,9 @@
case AudioManager.RECORD_CONFIG_EVENT_STOP:
// return failure if an unknown recording session stopped
configChanged = (mRecordConfigs.remove(new Integer(session)) != null);
+ if (configChanged) {
+ sEventLogger.log(new RecordingEvent(event, uid, session, source, null));
+ }
break;
case AudioManager.RECORD_CONFIG_EVENT_START:
final AudioFormat clientFormat = new AudioFormat.Builder()
@@ -231,6 +237,9 @@
mRecordConfigs.put(sessionKey, updatedConfig);
configChanged = true;
}
+ if (configChanged) {
+ sEventLogger.log(new RecordingEvent(event, uid, session, source, packageName));
+ }
break;
default:
Log.e(TAG, String.format("Unknown event %d for session %d, source %d",
@@ -281,4 +290,36 @@
mDispatcherCb.asBinder().unlinkToDeath(this, 0);
}
}
+
+ /**
+ * Inner class for recording event logging
+ */
+ private static final class RecordingEvent extends AudioEventLogger.Event {
+ private final int mRecEvent;
+ private final int mClientUid;
+ private final int mSession;
+ private final int mSource;
+ private final String mPackName;
+
+ RecordingEvent(int event, int uid, int session, int source, String packName) {
+ mRecEvent = event;
+ mClientUid = uid;
+ mSession = session;
+ mSource = source;
+ mPackName = packName;
+ }
+
+ @Override
+ public String eventToString() {
+ return new StringBuilder("rec ").append(
+ mRecEvent == AudioManager.RECORD_CONFIG_EVENT_START ? "start" : "stop ")
+ .append(" uid:").append(mClientUid)
+ .append(" session:").append(mSession)
+ .append(" src:").append(MediaRecorder.toLogFriendlyAudioSource(mSource))
+ .append(mPackName == null ? "" : " pack:" + mPackName).toString();
+ }
+ }
+
+ private static final AudioEventLogger sEventLogger = new AudioEventLogger(50,
+ "recording activity as reported through AudioSystem.AudioRecordingCallback");
}