Loading services/core/java/com/android/server/audio/AudioService.java +70 −43 Original line number Diff line number Diff line Loading @@ -297,6 +297,7 @@ public class AudioService extends IAudioService.Stub // these messages can only be queued, i.e. sent with queueMsgUnderWakeLock(), // and not with sendMsg(..., ..., SENDMSG_QUEUE, ...) private static final int MSG_DISABLE_AUDIO_FOR_UID = 100; private static final int MSG_INIT_STREAMS_VOLUMES = 101; // end of messages handled under wakelock // retry delay in case of failure to indicate system ready to AudioFlinger Loading Loading @@ -822,7 +823,34 @@ public class AudioService extends IAudioService.Stub updateStreamVolumeAlias(false /*updateVolumes*/, TAG); readPersistedSettings(); readUserRestrictions(); mSettingsObserver = new SettingsObserver(); mPlaybackMonitor = new PlaybackActivityMonitor(context, MAX_STREAM_VOLUME[AudioSystem.STREAM_ALARM]); mMediaFocusControl = new MediaFocusControl(mContext, mPlaybackMonitor); readAndSetLowRamDevice(); mIsCallScreeningModeSupported = AudioSystem.isCallScreeningModeSupported(); if (mSystemServer.isPrivileged()) { LocalServices.addService(AudioManagerInternal.class, new AudioServiceInternal()); mUserManagerInternal.addUserRestrictionsListener(mUserRestrictionsListener); mRecordMonitor.initMonitor(); } mMonitorRotation = SystemProperties.getBoolean("ro.audio.monitorRotation", false); // done with service initialization, continue additional work in our Handler thread queueMsgUnderWakeLock(mAudioHandler, MSG_INIT_STREAMS_VOLUMES, 0 /* arg1 */, 0 /* arg2 */, null /* obj */, 0 /* delay */); } /** * Called by handling of MSG_INIT_STREAMS_VOLUMES */ private void onInitStreamsAndVolumes() { createStreamStates(); // must be called after createStreamStates() as it uses MUSIC volume as default if no Loading @@ -833,20 +861,42 @@ public class AudioService extends IAudioService.Stub // relies on audio policy having correct ranges for volume indexes. mSafeUsbMediaVolumeIndex = getSafeUsbMediaVolumeIndex(); mPlaybackMonitor = new PlaybackActivityMonitor(context, MAX_STREAM_VOLUME[AudioSystem.STREAM_ALARM]); mMediaFocusControl = new MediaFocusControl(mContext, mPlaybackMonitor); readAndSetLowRamDevice(); mIsCallScreeningModeSupported = AudioSystem.isCallScreeningModeSupported(); // Call setRingerModeInt() to apply correct mute // state on streams affected by ringer mode. mRingerAndZenModeMutedStreams = 0; setRingerModeInt(getRingerModeInternal(), false); final float[] preScale = new float[3]; preScale[0] = mContext.getResources().getFraction( com.android.internal.R.fraction.config_prescaleAbsoluteVolume_index1, 1, 1); preScale[1] = mContext.getResources().getFraction( com.android.internal.R.fraction.config_prescaleAbsoluteVolume_index2, 1, 1); preScale[2] = mContext.getResources().getFraction( com.android.internal.R.fraction.config_prescaleAbsoluteVolume_index3, 1, 1); for (int i = 0; i < preScale.length; i++) { if (0.0f <= preScale[i] && preScale[i] <= 1.0f) { mPrescaleAbsoluteVolume[i] = preScale[i]; } } initExternalEventReceivers(); // check on volume initialization checkVolumeRangeInitialization("AudioService()"); } /** * Initialize intent receives and settings observers for this service. * Must be called after createStreamStates() as the handling of some events * may affect or need volumes, e.g. BluetoothHeadset.ACTION_AUDIO_STATE_CHANGED * (for intent receiver), or Settings.Global.ZEN_MODE (for settings observer) */ private void initExternalEventReceivers() { mSettingsObserver = new SettingsObserver(); // Register for device connection intent broadcasts. IntentFilter intentFilter = new IntentFilter(BluetoothHeadset.ACTION_AUDIO_STATE_CHANGED); Loading @@ -862,7 +912,6 @@ public class AudioService extends IAudioService.Stub intentFilter.addAction(Intent.ACTION_PACKAGES_SUSPENDED); intentFilter.addAction(Intent.ACTION_CONFIGURATION_CHANGED); mMonitorRotation = SystemProperties.getBoolean("ro.audio.monitorRotation", false); if (mMonitorRotation) { RotationHelper.init(mContext, mAudioHandler); } Loading @@ -870,34 +919,8 @@ public class AudioService extends IAudioService.Stub intentFilter.addAction(AudioEffect.ACTION_OPEN_AUDIO_EFFECT_CONTROL_SESSION); intentFilter.addAction(AudioEffect.ACTION_CLOSE_AUDIO_EFFECT_CONTROL_SESSION); context.registerReceiverAsUser(mReceiver, UserHandle.ALL, intentFilter, null, null); if (mSystemServer.isPrivileged()) { LocalServices.addService(AudioManagerInternal.class, new AudioServiceInternal()); mUserManagerInternal.addUserRestrictionsListener(mUserRestrictionsListener); mContext.registerReceiverAsUser(mReceiver, UserHandle.ALL, intentFilter, null, null); mRecordMonitor.initMonitor(); } final float[] preScale = new float[3]; preScale[0] = mContext.getResources().getFraction( com.android.internal.R.fraction.config_prescaleAbsoluteVolume_index1, 1, 1); preScale[1] = mContext.getResources().getFraction( com.android.internal.R.fraction.config_prescaleAbsoluteVolume_index2, 1, 1); preScale[2] = mContext.getResources().getFraction( com.android.internal.R.fraction.config_prescaleAbsoluteVolume_index3, 1, 1); for (int i = 0; i < preScale.length; i++) { if (0.0f <= preScale[i] && preScale[i] <= 1.0f) { mPrescaleAbsoluteVolume[i] = preScale[i]; } } // check on volume initialization checkVolumeRangeInitialization("AudioService()"); } public void systemReady() { Loading Loading @@ -2593,7 +2616,7 @@ public class AudioService extends IAudioService.Stub // StreamVolumeCommand contains the information needed to defer the process of // setStreamVolume() in case the user has to acknowledge the safe volume warning message. class StreamVolumeCommand { static class StreamVolumeCommand { public final int mStreamType; public final int mIndex; public final int mFlags; Loading @@ -2612,7 +2635,7 @@ public class AudioService extends IAudioService.Stub .append(mIndex).append(",flags=").append(mFlags).append(",device=") .append(mDevice).append('}').toString(); } }; } private int getNewRingerMode(int stream, int index, int flags) { // setRingerMode does nothing if the device is single volume,so the value would be unchanged Loading Loading @@ -3321,7 +3344,7 @@ public class AudioService extends IAudioService.Stub } private int mRmtSbmxFullVolRefCount = 0; private ArrayList<RmtSbmxFullVolDeathHandler> mRmtSbmxFullVolDeathHandlers = private final ArrayList<RmtSbmxFullVolDeathHandler> mRmtSbmxFullVolDeathHandlers = new ArrayList<RmtSbmxFullVolDeathHandler>(); public void forceRemoteSubmixFullVolume(boolean startForcing, IBinder cb) { Loading Loading @@ -5882,7 +5905,6 @@ public class AudioService extends IAudioService.Stub private final Intent mStreamDevicesChanged; private VolumeStreamState(String settingName, int streamType) { mVolumeIndexSettingName = settingName; mStreamType = streamType; Loading Loading @@ -6658,6 +6680,11 @@ public class AudioService extends IAudioService.Stub mAudioEventWakeLock.release(); break; case MSG_INIT_STREAMS_VOLUMES: onInitStreamsAndVolumes(); mAudioEventWakeLock.release(); break; case MSG_CHECK_MUSIC_ACTIVE: onCheckMusicActive((String) msg.obj); break; Loading Loading @@ -9216,7 +9243,7 @@ public class AudioService extends IAudioService.Stub } } private HashMap<IBinder, AsdProxy> mAudioServerStateListeners = private final HashMap<IBinder, AsdProxy> mAudioServerStateListeners = new HashMap<IBinder, AsdProxy>(); private void checkMonitorAudioServerStatePermission() { Loading Loading
services/core/java/com/android/server/audio/AudioService.java +70 −43 Original line number Diff line number Diff line Loading @@ -297,6 +297,7 @@ public class AudioService extends IAudioService.Stub // these messages can only be queued, i.e. sent with queueMsgUnderWakeLock(), // and not with sendMsg(..., ..., SENDMSG_QUEUE, ...) private static final int MSG_DISABLE_AUDIO_FOR_UID = 100; private static final int MSG_INIT_STREAMS_VOLUMES = 101; // end of messages handled under wakelock // retry delay in case of failure to indicate system ready to AudioFlinger Loading Loading @@ -822,7 +823,34 @@ public class AudioService extends IAudioService.Stub updateStreamVolumeAlias(false /*updateVolumes*/, TAG); readPersistedSettings(); readUserRestrictions(); mSettingsObserver = new SettingsObserver(); mPlaybackMonitor = new PlaybackActivityMonitor(context, MAX_STREAM_VOLUME[AudioSystem.STREAM_ALARM]); mMediaFocusControl = new MediaFocusControl(mContext, mPlaybackMonitor); readAndSetLowRamDevice(); mIsCallScreeningModeSupported = AudioSystem.isCallScreeningModeSupported(); if (mSystemServer.isPrivileged()) { LocalServices.addService(AudioManagerInternal.class, new AudioServiceInternal()); mUserManagerInternal.addUserRestrictionsListener(mUserRestrictionsListener); mRecordMonitor.initMonitor(); } mMonitorRotation = SystemProperties.getBoolean("ro.audio.monitorRotation", false); // done with service initialization, continue additional work in our Handler thread queueMsgUnderWakeLock(mAudioHandler, MSG_INIT_STREAMS_VOLUMES, 0 /* arg1 */, 0 /* arg2 */, null /* obj */, 0 /* delay */); } /** * Called by handling of MSG_INIT_STREAMS_VOLUMES */ private void onInitStreamsAndVolumes() { createStreamStates(); // must be called after createStreamStates() as it uses MUSIC volume as default if no Loading @@ -833,20 +861,42 @@ public class AudioService extends IAudioService.Stub // relies on audio policy having correct ranges for volume indexes. mSafeUsbMediaVolumeIndex = getSafeUsbMediaVolumeIndex(); mPlaybackMonitor = new PlaybackActivityMonitor(context, MAX_STREAM_VOLUME[AudioSystem.STREAM_ALARM]); mMediaFocusControl = new MediaFocusControl(mContext, mPlaybackMonitor); readAndSetLowRamDevice(); mIsCallScreeningModeSupported = AudioSystem.isCallScreeningModeSupported(); // Call setRingerModeInt() to apply correct mute // state on streams affected by ringer mode. mRingerAndZenModeMutedStreams = 0; setRingerModeInt(getRingerModeInternal(), false); final float[] preScale = new float[3]; preScale[0] = mContext.getResources().getFraction( com.android.internal.R.fraction.config_prescaleAbsoluteVolume_index1, 1, 1); preScale[1] = mContext.getResources().getFraction( com.android.internal.R.fraction.config_prescaleAbsoluteVolume_index2, 1, 1); preScale[2] = mContext.getResources().getFraction( com.android.internal.R.fraction.config_prescaleAbsoluteVolume_index3, 1, 1); for (int i = 0; i < preScale.length; i++) { if (0.0f <= preScale[i] && preScale[i] <= 1.0f) { mPrescaleAbsoluteVolume[i] = preScale[i]; } } initExternalEventReceivers(); // check on volume initialization checkVolumeRangeInitialization("AudioService()"); } /** * Initialize intent receives and settings observers for this service. * Must be called after createStreamStates() as the handling of some events * may affect or need volumes, e.g. BluetoothHeadset.ACTION_AUDIO_STATE_CHANGED * (for intent receiver), or Settings.Global.ZEN_MODE (for settings observer) */ private void initExternalEventReceivers() { mSettingsObserver = new SettingsObserver(); // Register for device connection intent broadcasts. IntentFilter intentFilter = new IntentFilter(BluetoothHeadset.ACTION_AUDIO_STATE_CHANGED); Loading @@ -862,7 +912,6 @@ public class AudioService extends IAudioService.Stub intentFilter.addAction(Intent.ACTION_PACKAGES_SUSPENDED); intentFilter.addAction(Intent.ACTION_CONFIGURATION_CHANGED); mMonitorRotation = SystemProperties.getBoolean("ro.audio.monitorRotation", false); if (mMonitorRotation) { RotationHelper.init(mContext, mAudioHandler); } Loading @@ -870,34 +919,8 @@ public class AudioService extends IAudioService.Stub intentFilter.addAction(AudioEffect.ACTION_OPEN_AUDIO_EFFECT_CONTROL_SESSION); intentFilter.addAction(AudioEffect.ACTION_CLOSE_AUDIO_EFFECT_CONTROL_SESSION); context.registerReceiverAsUser(mReceiver, UserHandle.ALL, intentFilter, null, null); if (mSystemServer.isPrivileged()) { LocalServices.addService(AudioManagerInternal.class, new AudioServiceInternal()); mUserManagerInternal.addUserRestrictionsListener(mUserRestrictionsListener); mContext.registerReceiverAsUser(mReceiver, UserHandle.ALL, intentFilter, null, null); mRecordMonitor.initMonitor(); } final float[] preScale = new float[3]; preScale[0] = mContext.getResources().getFraction( com.android.internal.R.fraction.config_prescaleAbsoluteVolume_index1, 1, 1); preScale[1] = mContext.getResources().getFraction( com.android.internal.R.fraction.config_prescaleAbsoluteVolume_index2, 1, 1); preScale[2] = mContext.getResources().getFraction( com.android.internal.R.fraction.config_prescaleAbsoluteVolume_index3, 1, 1); for (int i = 0; i < preScale.length; i++) { if (0.0f <= preScale[i] && preScale[i] <= 1.0f) { mPrescaleAbsoluteVolume[i] = preScale[i]; } } // check on volume initialization checkVolumeRangeInitialization("AudioService()"); } public void systemReady() { Loading Loading @@ -2593,7 +2616,7 @@ public class AudioService extends IAudioService.Stub // StreamVolumeCommand contains the information needed to defer the process of // setStreamVolume() in case the user has to acknowledge the safe volume warning message. class StreamVolumeCommand { static class StreamVolumeCommand { public final int mStreamType; public final int mIndex; public final int mFlags; Loading @@ -2612,7 +2635,7 @@ public class AudioService extends IAudioService.Stub .append(mIndex).append(",flags=").append(mFlags).append(",device=") .append(mDevice).append('}').toString(); } }; } private int getNewRingerMode(int stream, int index, int flags) { // setRingerMode does nothing if the device is single volume,so the value would be unchanged Loading Loading @@ -3321,7 +3344,7 @@ public class AudioService extends IAudioService.Stub } private int mRmtSbmxFullVolRefCount = 0; private ArrayList<RmtSbmxFullVolDeathHandler> mRmtSbmxFullVolDeathHandlers = private final ArrayList<RmtSbmxFullVolDeathHandler> mRmtSbmxFullVolDeathHandlers = new ArrayList<RmtSbmxFullVolDeathHandler>(); public void forceRemoteSubmixFullVolume(boolean startForcing, IBinder cb) { Loading Loading @@ -5882,7 +5905,6 @@ public class AudioService extends IAudioService.Stub private final Intent mStreamDevicesChanged; private VolumeStreamState(String settingName, int streamType) { mVolumeIndexSettingName = settingName; mStreamType = streamType; Loading Loading @@ -6658,6 +6680,11 @@ public class AudioService extends IAudioService.Stub mAudioEventWakeLock.release(); break; case MSG_INIT_STREAMS_VOLUMES: onInitStreamsAndVolumes(); mAudioEventWakeLock.release(); break; case MSG_CHECK_MUSIC_ACTIVE: onCheckMusicActive((String) msg.obj); break; Loading Loading @@ -9216,7 +9243,7 @@ public class AudioService extends IAudioService.Stub } } private HashMap<IBinder, AsdProxy> mAudioServerStateListeners = private final HashMap<IBinder, AsdProxy> mAudioServerStateListeners = new HashMap<IBinder, AsdProxy>(); private void checkMonitorAudioServerStatePermission() { Loading