Donate to e Foundation | Murena handsets with /e/OS | Own a part of Murena! Learn more

Commit c011202b authored by Eric Laurent's avatar Eric Laurent Committed by Android (Google) Code Review
Browse files

Merge "AudioService: clear recording activities on audioserver crash"

parents 7fa0e124 0758420a
Loading
Loading
Loading
Loading
+3 −1
Original line number Diff line number Diff line
@@ -398,6 +398,8 @@ public class AudioService extends IAudioService.Stub
        public void onError(int error) {
            switch (error) {
            case AudioSystem.AUDIO_STATUS_SERVER_DIED:
                mRecordMonitor.clear();

                sendMsg(mAudioHandler, MSG_AUDIO_SERVER_DIED,
                        SENDMSG_NOOP, 0, 0, null, 0);
                sendMsg(mAudioHandler, MSG_DISPATCH_AUDIO_SERVER_STATE,
+27 −17
Original line number Diff line number Diff line
@@ -78,18 +78,22 @@ public final class RecordingActivityMonitor implements AudioSystem.AudioRecordin
                updateSnapshot(event, uid, session, source, recordingInfo,
                portId, silenced, activeSource, clientEffects, effects);
        if (configsSystem != null){
            dispatchCallbacks(configsSystem);
        }
    }
    private void dispatchCallbacks(List<AudioRecordingConfiguration> configs) {
        synchronized (mClients) {
            // list of recording configurations for "public consumption". It is only computed if
            // there are non-system recording activity listeners.
                final List<AudioRecordingConfiguration> configsPublic = mHasPublicClients ?
                        anonymizeForPublicConsumption(configsSystem) :
            final List<AudioRecordingConfiguration> configsPublic = mHasPublicClients
                    ? anonymizeForPublicConsumption(configs) :
                      new ArrayList<AudioRecordingConfiguration>();
            final Iterator<RecMonitorClient> clientIterator = mClients.iterator();
            while (clientIterator.hasNext()) {
                final RecMonitorClient rmc = clientIterator.next();
                try {
                    if (rmc.mIsPrivileged) {
                            rmc.mDispatcherCb.dispatchRecordingConfigChange(configsSystem);
                        rmc.mDispatcherCb.dispatchRecordingConfigChange(configs);
                    } else {
                        rmc.mDispatcherCb.dispatchRecordingConfigChange(configsPublic);
                    }
@@ -99,7 +103,6 @@ public final class RecordingActivityMonitor implements AudioSystem.AudioRecordin
            }
        }
    }
    }

    protected void dump(PrintWriter pw) {
        // players
@@ -130,6 +133,13 @@ public final class RecordingActivityMonitor implements AudioSystem.AudioRecordin
        AudioSystem.setRecordingCallback(this);
    }

    void clear() {
        synchronized (mRecordConfigs) {
            mRecordConfigs.clear();
        }
        dispatchCallbacks(new ArrayList<AudioRecordingConfiguration>());
    }

    void registerRecordingCallback(IRecordingConfigDispatcher rcdb, boolean isPrivileged) {
        if (rcdb == null) {
            return;