Loading media/java/android/media/AudioManager.java +4 −2 Original line number Diff line number Diff line Loading @@ -6806,7 +6806,9 @@ public class AudioManager { /** * @hide * Sets the computed sound dose value to {@code csd} * Sets the computed sound dose value to {@code csd}. A negative value will * reset all the CSD related timeouts: after a momentary exposure warning and * before the momentary exposure reaches RS2 (see IEC62368-1 10.6.5) */ @TestApi @RequiresPermission(Manifest.permission.MODIFY_AUDIO_SETTINGS_PRIVILEGED) Loading Loading @@ -6850,7 +6852,7 @@ public class AudioManager { /** * @hide * Returns whether CSD is enabled on this device. * Returns whether CSD is enabled and supported by the HAL on this device. */ @TestApi @RequiresPermission(Manifest.permission.MODIFY_AUDIO_SETTINGS_PRIVILEGED) Loading services/core/java/com/android/server/audio/AudioService.java +22 −17 Original line number Diff line number Diff line Loading @@ -16,6 +16,7 @@ package com.android.server.audio; import static android.Manifest.permission.MODIFY_AUDIO_SETTINGS_PRIVILEGED; import static android.Manifest.permission.REMOTE_AUDIO_PLAYBACK; import static android.app.BroadcastOptions.DELIVERY_GROUP_POLICY_MOST_RECENT; import static android.media.AudioManager.RINGER_MODE_NORMAL; Loading Loading @@ -313,7 +314,7 @@ public class AudioService extends IAudioService.Stub * volumes will be updated in case of a change. * @param alias if true, STREAM_NOTIFICATION is aliased to STREAM_RING */ @android.annotation.EnforcePermission(android.Manifest.permission.MODIFY_AUDIO_SETTINGS_PRIVILEGED) @android.annotation.EnforcePermission(MODIFY_AUDIO_SETTINGS_PRIVILEGED) public void setNotifAliasRingForTest(boolean alias) { super.setNotifAliasRingForTest_enforcePermission(); boolean update = (mNotifAliasRing != alias); Loading Loading @@ -3867,7 +3868,7 @@ public class AudioService extends IAudioService.Stub @Override @android.annotation.EnforcePermission(anyOf = { android.Manifest.permission.MODIFY_AUDIO_SETTINGS_PRIVILEGED, MODIFY_AUDIO_SETTINGS_PRIVILEGED, android.Manifest.permission.MODIFY_AUDIO_ROUTING }) /** @see AudioManager#setVolumeGroupVolumeIndex(int, int, int) */ Loading Loading @@ -3914,7 +3915,7 @@ public class AudioService extends IAudioService.Stub @Override @android.annotation.EnforcePermission(anyOf = { android.Manifest.permission.MODIFY_AUDIO_SETTINGS_PRIVILEGED, MODIFY_AUDIO_SETTINGS_PRIVILEGED, android.Manifest.permission.MODIFY_AUDIO_ROUTING }) /** @see AudioManager#getVolumeGroupVolumeIndex(int) */ Loading @@ -3933,7 +3934,7 @@ public class AudioService extends IAudioService.Stub /** @see AudioManager#getVolumeGroupMaxVolumeIndex(int) */ @android.annotation.EnforcePermission(anyOf = { android.Manifest.permission.MODIFY_AUDIO_SETTINGS_PRIVILEGED, MODIFY_AUDIO_SETTINGS_PRIVILEGED, android.Manifest.permission.MODIFY_AUDIO_ROUTING }) public int getVolumeGroupMaxVolumeIndex(int groupId) { Loading @@ -3949,7 +3950,7 @@ public class AudioService extends IAudioService.Stub /** @see AudioManager#getVolumeGroupMinVolumeIndex(int) */ @android.annotation.EnforcePermission(anyOf = { android.Manifest.permission.MODIFY_AUDIO_SETTINGS_PRIVILEGED, MODIFY_AUDIO_SETTINGS_PRIVILEGED, android.Manifest.permission.MODIFY_AUDIO_ROUTING }) public int getVolumeGroupMinVolumeIndex(int groupId) { Loading Loading @@ -5075,7 +5076,7 @@ public class AudioService extends IAudioService.Stub * @see AudioManager#addOnStreamAliasingChangedListener(Executor, Runnable) * @see AudioManager#removeOnStreamAliasingChangedListener(Runnable) */ @android.annotation.EnforcePermission(android.Manifest.permission.MODIFY_AUDIO_SETTINGS_PRIVILEGED) @android.annotation.EnforcePermission(MODIFY_AUDIO_SETTINGS_PRIVILEGED) public void registerStreamAliasingDispatcher(IStreamAliasingDispatcher isad, boolean register) { super.registerStreamAliasingDispatcher_enforcePermission(); Objects.requireNonNull(isad); Loading Loading @@ -5103,7 +5104,7 @@ public class AudioService extends IAudioService.Stub * @see AudioManager#getIndependentStreamTypes() * @return the list of non-aliased stream types */ @android.annotation.EnforcePermission(android.Manifest.permission.MODIFY_AUDIO_SETTINGS_PRIVILEGED) @android.annotation.EnforcePermission(MODIFY_AUDIO_SETTINGS_PRIVILEGED) public ArrayList<Integer> getIndependentStreamTypes() { super.getIndependentStreamTypes_enforcePermission(); Loading @@ -5125,7 +5126,7 @@ public class AudioService extends IAudioService.Stub * @param sourceStreamType the stream type for which the alias is queried * @return the stream alias */ @android.annotation.EnforcePermission(android.Manifest.permission.MODIFY_AUDIO_SETTINGS_PRIVILEGED) @android.annotation.EnforcePermission(MODIFY_AUDIO_SETTINGS_PRIVILEGED) public @AudioManager.PublicStreamTypes int getStreamTypeAlias(@AudioManager.PublicStreamTypes int sourceStreamType) { super.getStreamTypeAlias_enforcePermission(); Loading @@ -5140,7 +5141,7 @@ public class AudioService extends IAudioService.Stub * @return true when volume control is performed through volume groups, false if it uses * stream types. */ @android.annotation.EnforcePermission(android.Manifest.permission.MODIFY_AUDIO_SETTINGS_PRIVILEGED) @android.annotation.EnforcePermission(MODIFY_AUDIO_SETTINGS_PRIVILEGED) public boolean isVolumeControlUsingVolumeGroups() { super.isVolumeControlUsingVolumeGroups_enforcePermission(); Loading Loading @@ -10528,49 +10529,53 @@ public class AudioService extends IAudioService.Stub } @Override @android.annotation.EnforcePermission(android.Manifest.permission.MODIFY_AUDIO_SETTINGS_PRIVILEGED) @android.annotation.EnforcePermission(MODIFY_AUDIO_SETTINGS_PRIVILEGED) public float getOutputRs2UpperBound() { super.getOutputRs2UpperBound_enforcePermission(); return mSoundDoseHelper.getOutputRs2UpperBound(); } @Override @android.annotation.EnforcePermission(android.Manifest.permission.MODIFY_AUDIO_SETTINGS_PRIVILEGED) @android.annotation.EnforcePermission(MODIFY_AUDIO_SETTINGS_PRIVILEGED) public void setOutputRs2UpperBound(float rs2Value) { super.setOutputRs2UpperBound_enforcePermission(); mSoundDoseHelper.setOutputRs2UpperBound(rs2Value); } @Override @android.annotation.EnforcePermission(android.Manifest.permission.MODIFY_AUDIO_SETTINGS_PRIVILEGED) @android.annotation.EnforcePermission(MODIFY_AUDIO_SETTINGS_PRIVILEGED) public float getCsd() { super.getCsd_enforcePermission(); return mSoundDoseHelper.getCsd(); } @Override @android.annotation.EnforcePermission(android.Manifest.permission.MODIFY_AUDIO_SETTINGS_PRIVILEGED) @android.annotation.EnforcePermission(MODIFY_AUDIO_SETTINGS_PRIVILEGED) public void setCsd(float csd) { super.setCsd_enforcePermission(); if (csd < 0.0f) { mSoundDoseHelper.resetCsdTimeouts(); } else { mSoundDoseHelper.setCsd(csd); } } @Override @android.annotation.EnforcePermission(android.Manifest.permission.MODIFY_AUDIO_SETTINGS_PRIVILEGED) @android.annotation.EnforcePermission(MODIFY_AUDIO_SETTINGS_PRIVILEGED) public void forceUseFrameworkMel(boolean useFrameworkMel) { super.forceUseFrameworkMel_enforcePermission(); mSoundDoseHelper.forceUseFrameworkMel(useFrameworkMel); } @Override @android.annotation.EnforcePermission(android.Manifest.permission.MODIFY_AUDIO_SETTINGS_PRIVILEGED) @android.annotation.EnforcePermission(MODIFY_AUDIO_SETTINGS_PRIVILEGED) public void forceComputeCsdOnAllDevices(boolean computeCsdOnAllDevices) { super.forceComputeCsdOnAllDevices_enforcePermission(); mSoundDoseHelper.forceComputeCsdOnAllDevices(computeCsdOnAllDevices); } @Override @android.annotation.EnforcePermission(android.Manifest.permission.MODIFY_AUDIO_SETTINGS_PRIVILEGED) @android.annotation.EnforcePermission(MODIFY_AUDIO_SETTINGS_PRIVILEGED) public boolean isCsdEnabled() { super.isCsdEnabled_enforcePermission(); return mSoundDoseHelper.isCsdEnabled(); Loading services/core/java/com/android/server/audio/SoundDoseHelper.java +44 −3 Original line number Diff line number Diff line Loading @@ -21,6 +21,8 @@ import static com.android.server.audio.AudioService.MIN_STREAM_VOLUME; import static com.android.server.audio.AudioService.MSG_SET_DEVICE_VOLUME; import static com.android.server.audio.AudioService.SAFE_MEDIA_VOLUME_MSG_START; import static java.lang.Math.floor; import android.annotation.NonNull; import android.app.AlarmManager; import android.app.PendingIntent; Loading Loading @@ -94,6 +96,8 @@ public class SoundDoseHelper { private static final int MOMENTARY_EXPOSURE_TIMEOUT_MS = (20 * 3600 * 1000); // 20 hours private static final int MOMENTARY_EXPOSURE_TIMEOUT_UNINITIALIZED = -1; // 30s after boot completed private static final int SAFE_VOLUME_CONFIGURE_TIMEOUT_MS = 30000; Loading Loading @@ -147,6 +151,9 @@ public class SoundDoseHelper { */ private final SparseIntArray mSafeMediaVolumeDevices = new SparseIntArray(); /** Used for testing to enforce safe media on all devices */ private boolean mForceSafeMediaOnAllDevices = false; // mMusicActiveMs is the cumulative time of music activity since safe volume was disabled. // When this time reaches UNSAFE_VOLUME_MUSIC_ACTIVE_MS_MAX, the safe media volume is re-enabled // automatically. mMusicActiveMs is rounded to a multiple of MUSIC_ACTIVE_POLL_PERIOD_MS. Loading @@ -170,7 +177,7 @@ public class SoundDoseHelper { private float mCurrentCsd = 0.f; @GuardedBy("mCsdStateLock") private long mLastMomentaryExposureTimeMs = -1; private long mLastMomentaryExposureTimeMs = MOMENTARY_EXPOSURE_TIMEOUT_UNINITIALIZED; // dose at which the next dose reached warning occurs @GuardedBy("mCsdStateLock") Loading Loading @@ -364,6 +371,7 @@ public class SoundDoseHelper { SoundDoseRecord[] doseRecordsArray; synchronized (mCsdStateLock) { mCurrentCsd = csd; mNextCsdWarning = (float) floor(csd + 1.0); mDoseRecords.clear(); Loading @@ -389,6 +397,22 @@ public class SoundDoseHelper { } } void resetCsdTimeouts() { if (!mEnableCsd) { return; } synchronized (mSafeMediaVolumeStateLock) { mSafeMediaVolumeState = SAFE_MEDIA_VOLUME_ACTIVE; mMusicActiveMs = 0; saveMusicActiveMs(); } synchronized (mCsdStateLock) { mLastMomentaryExposureTimeMs = MOMENTARY_EXPOSURE_TIMEOUT_UNINITIALIZED; } } void forceUseFrameworkMel(boolean useFrameworkMel) { if (!mEnableCsd) { return; Loading Loading @@ -423,10 +447,27 @@ public class SoundDoseHelper { } catch (RemoteException e) { Log.e(TAG, "Exception while forcing CSD computation on all devices", e); } mForceSafeMediaOnAllDevices = computeCsdOnAllDevices; } boolean isCsdEnabled() { return mEnableCsd; if (!mEnableCsd) { return false; } final ISoundDose soundDose = mSoundDose.get(); if (soundDose == null) { Log.w(TAG, "Sound dose interface not initialized"); return false; } try { return soundDose.isSoundDoseHalSupported(); } catch (RemoteException e) { Log.e(TAG, "Exception while forcing CSD computation on all devices", e); } return false; } /*package*/ int safeMediaVolumeIndex(int device) { Loading Loading @@ -490,7 +531,7 @@ public class SoundDoseHelper { private boolean checkSafeMediaVolume_l(int streamType, int index, int device) { return (mSafeMediaVolumeState == SAFE_MEDIA_VOLUME_ACTIVE) && (AudioService.mStreamVolumeAlias[streamType] == AudioSystem.STREAM_MUSIC) && safeDevicesContains(device) && (safeDevicesContains(device) || mForceSafeMediaOnAllDevices) && (index > safeMediaVolumeIndex(device)); } Loading Loading
media/java/android/media/AudioManager.java +4 −2 Original line number Diff line number Diff line Loading @@ -6806,7 +6806,9 @@ public class AudioManager { /** * @hide * Sets the computed sound dose value to {@code csd} * Sets the computed sound dose value to {@code csd}. A negative value will * reset all the CSD related timeouts: after a momentary exposure warning and * before the momentary exposure reaches RS2 (see IEC62368-1 10.6.5) */ @TestApi @RequiresPermission(Manifest.permission.MODIFY_AUDIO_SETTINGS_PRIVILEGED) Loading Loading @@ -6850,7 +6852,7 @@ public class AudioManager { /** * @hide * Returns whether CSD is enabled on this device. * Returns whether CSD is enabled and supported by the HAL on this device. */ @TestApi @RequiresPermission(Manifest.permission.MODIFY_AUDIO_SETTINGS_PRIVILEGED) Loading
services/core/java/com/android/server/audio/AudioService.java +22 −17 Original line number Diff line number Diff line Loading @@ -16,6 +16,7 @@ package com.android.server.audio; import static android.Manifest.permission.MODIFY_AUDIO_SETTINGS_PRIVILEGED; import static android.Manifest.permission.REMOTE_AUDIO_PLAYBACK; import static android.app.BroadcastOptions.DELIVERY_GROUP_POLICY_MOST_RECENT; import static android.media.AudioManager.RINGER_MODE_NORMAL; Loading Loading @@ -313,7 +314,7 @@ public class AudioService extends IAudioService.Stub * volumes will be updated in case of a change. * @param alias if true, STREAM_NOTIFICATION is aliased to STREAM_RING */ @android.annotation.EnforcePermission(android.Manifest.permission.MODIFY_AUDIO_SETTINGS_PRIVILEGED) @android.annotation.EnforcePermission(MODIFY_AUDIO_SETTINGS_PRIVILEGED) public void setNotifAliasRingForTest(boolean alias) { super.setNotifAliasRingForTest_enforcePermission(); boolean update = (mNotifAliasRing != alias); Loading Loading @@ -3867,7 +3868,7 @@ public class AudioService extends IAudioService.Stub @Override @android.annotation.EnforcePermission(anyOf = { android.Manifest.permission.MODIFY_AUDIO_SETTINGS_PRIVILEGED, MODIFY_AUDIO_SETTINGS_PRIVILEGED, android.Manifest.permission.MODIFY_AUDIO_ROUTING }) /** @see AudioManager#setVolumeGroupVolumeIndex(int, int, int) */ Loading Loading @@ -3914,7 +3915,7 @@ public class AudioService extends IAudioService.Stub @Override @android.annotation.EnforcePermission(anyOf = { android.Manifest.permission.MODIFY_AUDIO_SETTINGS_PRIVILEGED, MODIFY_AUDIO_SETTINGS_PRIVILEGED, android.Manifest.permission.MODIFY_AUDIO_ROUTING }) /** @see AudioManager#getVolumeGroupVolumeIndex(int) */ Loading @@ -3933,7 +3934,7 @@ public class AudioService extends IAudioService.Stub /** @see AudioManager#getVolumeGroupMaxVolumeIndex(int) */ @android.annotation.EnforcePermission(anyOf = { android.Manifest.permission.MODIFY_AUDIO_SETTINGS_PRIVILEGED, MODIFY_AUDIO_SETTINGS_PRIVILEGED, android.Manifest.permission.MODIFY_AUDIO_ROUTING }) public int getVolumeGroupMaxVolumeIndex(int groupId) { Loading @@ -3949,7 +3950,7 @@ public class AudioService extends IAudioService.Stub /** @see AudioManager#getVolumeGroupMinVolumeIndex(int) */ @android.annotation.EnforcePermission(anyOf = { android.Manifest.permission.MODIFY_AUDIO_SETTINGS_PRIVILEGED, MODIFY_AUDIO_SETTINGS_PRIVILEGED, android.Manifest.permission.MODIFY_AUDIO_ROUTING }) public int getVolumeGroupMinVolumeIndex(int groupId) { Loading Loading @@ -5075,7 +5076,7 @@ public class AudioService extends IAudioService.Stub * @see AudioManager#addOnStreamAliasingChangedListener(Executor, Runnable) * @see AudioManager#removeOnStreamAliasingChangedListener(Runnable) */ @android.annotation.EnforcePermission(android.Manifest.permission.MODIFY_AUDIO_SETTINGS_PRIVILEGED) @android.annotation.EnforcePermission(MODIFY_AUDIO_SETTINGS_PRIVILEGED) public void registerStreamAliasingDispatcher(IStreamAliasingDispatcher isad, boolean register) { super.registerStreamAliasingDispatcher_enforcePermission(); Objects.requireNonNull(isad); Loading Loading @@ -5103,7 +5104,7 @@ public class AudioService extends IAudioService.Stub * @see AudioManager#getIndependentStreamTypes() * @return the list of non-aliased stream types */ @android.annotation.EnforcePermission(android.Manifest.permission.MODIFY_AUDIO_SETTINGS_PRIVILEGED) @android.annotation.EnforcePermission(MODIFY_AUDIO_SETTINGS_PRIVILEGED) public ArrayList<Integer> getIndependentStreamTypes() { super.getIndependentStreamTypes_enforcePermission(); Loading @@ -5125,7 +5126,7 @@ public class AudioService extends IAudioService.Stub * @param sourceStreamType the stream type for which the alias is queried * @return the stream alias */ @android.annotation.EnforcePermission(android.Manifest.permission.MODIFY_AUDIO_SETTINGS_PRIVILEGED) @android.annotation.EnforcePermission(MODIFY_AUDIO_SETTINGS_PRIVILEGED) public @AudioManager.PublicStreamTypes int getStreamTypeAlias(@AudioManager.PublicStreamTypes int sourceStreamType) { super.getStreamTypeAlias_enforcePermission(); Loading @@ -5140,7 +5141,7 @@ public class AudioService extends IAudioService.Stub * @return true when volume control is performed through volume groups, false if it uses * stream types. */ @android.annotation.EnforcePermission(android.Manifest.permission.MODIFY_AUDIO_SETTINGS_PRIVILEGED) @android.annotation.EnforcePermission(MODIFY_AUDIO_SETTINGS_PRIVILEGED) public boolean isVolumeControlUsingVolumeGroups() { super.isVolumeControlUsingVolumeGroups_enforcePermission(); Loading Loading @@ -10528,49 +10529,53 @@ public class AudioService extends IAudioService.Stub } @Override @android.annotation.EnforcePermission(android.Manifest.permission.MODIFY_AUDIO_SETTINGS_PRIVILEGED) @android.annotation.EnforcePermission(MODIFY_AUDIO_SETTINGS_PRIVILEGED) public float getOutputRs2UpperBound() { super.getOutputRs2UpperBound_enforcePermission(); return mSoundDoseHelper.getOutputRs2UpperBound(); } @Override @android.annotation.EnforcePermission(android.Manifest.permission.MODIFY_AUDIO_SETTINGS_PRIVILEGED) @android.annotation.EnforcePermission(MODIFY_AUDIO_SETTINGS_PRIVILEGED) public void setOutputRs2UpperBound(float rs2Value) { super.setOutputRs2UpperBound_enforcePermission(); mSoundDoseHelper.setOutputRs2UpperBound(rs2Value); } @Override @android.annotation.EnforcePermission(android.Manifest.permission.MODIFY_AUDIO_SETTINGS_PRIVILEGED) @android.annotation.EnforcePermission(MODIFY_AUDIO_SETTINGS_PRIVILEGED) public float getCsd() { super.getCsd_enforcePermission(); return mSoundDoseHelper.getCsd(); } @Override @android.annotation.EnforcePermission(android.Manifest.permission.MODIFY_AUDIO_SETTINGS_PRIVILEGED) @android.annotation.EnforcePermission(MODIFY_AUDIO_SETTINGS_PRIVILEGED) public void setCsd(float csd) { super.setCsd_enforcePermission(); if (csd < 0.0f) { mSoundDoseHelper.resetCsdTimeouts(); } else { mSoundDoseHelper.setCsd(csd); } } @Override @android.annotation.EnforcePermission(android.Manifest.permission.MODIFY_AUDIO_SETTINGS_PRIVILEGED) @android.annotation.EnforcePermission(MODIFY_AUDIO_SETTINGS_PRIVILEGED) public void forceUseFrameworkMel(boolean useFrameworkMel) { super.forceUseFrameworkMel_enforcePermission(); mSoundDoseHelper.forceUseFrameworkMel(useFrameworkMel); } @Override @android.annotation.EnforcePermission(android.Manifest.permission.MODIFY_AUDIO_SETTINGS_PRIVILEGED) @android.annotation.EnforcePermission(MODIFY_AUDIO_SETTINGS_PRIVILEGED) public void forceComputeCsdOnAllDevices(boolean computeCsdOnAllDevices) { super.forceComputeCsdOnAllDevices_enforcePermission(); mSoundDoseHelper.forceComputeCsdOnAllDevices(computeCsdOnAllDevices); } @Override @android.annotation.EnforcePermission(android.Manifest.permission.MODIFY_AUDIO_SETTINGS_PRIVILEGED) @android.annotation.EnforcePermission(MODIFY_AUDIO_SETTINGS_PRIVILEGED) public boolean isCsdEnabled() { super.isCsdEnabled_enforcePermission(); return mSoundDoseHelper.isCsdEnabled(); Loading
services/core/java/com/android/server/audio/SoundDoseHelper.java +44 −3 Original line number Diff line number Diff line Loading @@ -21,6 +21,8 @@ import static com.android.server.audio.AudioService.MIN_STREAM_VOLUME; import static com.android.server.audio.AudioService.MSG_SET_DEVICE_VOLUME; import static com.android.server.audio.AudioService.SAFE_MEDIA_VOLUME_MSG_START; import static java.lang.Math.floor; import android.annotation.NonNull; import android.app.AlarmManager; import android.app.PendingIntent; Loading Loading @@ -94,6 +96,8 @@ public class SoundDoseHelper { private static final int MOMENTARY_EXPOSURE_TIMEOUT_MS = (20 * 3600 * 1000); // 20 hours private static final int MOMENTARY_EXPOSURE_TIMEOUT_UNINITIALIZED = -1; // 30s after boot completed private static final int SAFE_VOLUME_CONFIGURE_TIMEOUT_MS = 30000; Loading Loading @@ -147,6 +151,9 @@ public class SoundDoseHelper { */ private final SparseIntArray mSafeMediaVolumeDevices = new SparseIntArray(); /** Used for testing to enforce safe media on all devices */ private boolean mForceSafeMediaOnAllDevices = false; // mMusicActiveMs is the cumulative time of music activity since safe volume was disabled. // When this time reaches UNSAFE_VOLUME_MUSIC_ACTIVE_MS_MAX, the safe media volume is re-enabled // automatically. mMusicActiveMs is rounded to a multiple of MUSIC_ACTIVE_POLL_PERIOD_MS. Loading @@ -170,7 +177,7 @@ public class SoundDoseHelper { private float mCurrentCsd = 0.f; @GuardedBy("mCsdStateLock") private long mLastMomentaryExposureTimeMs = -1; private long mLastMomentaryExposureTimeMs = MOMENTARY_EXPOSURE_TIMEOUT_UNINITIALIZED; // dose at which the next dose reached warning occurs @GuardedBy("mCsdStateLock") Loading Loading @@ -364,6 +371,7 @@ public class SoundDoseHelper { SoundDoseRecord[] doseRecordsArray; synchronized (mCsdStateLock) { mCurrentCsd = csd; mNextCsdWarning = (float) floor(csd + 1.0); mDoseRecords.clear(); Loading @@ -389,6 +397,22 @@ public class SoundDoseHelper { } } void resetCsdTimeouts() { if (!mEnableCsd) { return; } synchronized (mSafeMediaVolumeStateLock) { mSafeMediaVolumeState = SAFE_MEDIA_VOLUME_ACTIVE; mMusicActiveMs = 0; saveMusicActiveMs(); } synchronized (mCsdStateLock) { mLastMomentaryExposureTimeMs = MOMENTARY_EXPOSURE_TIMEOUT_UNINITIALIZED; } } void forceUseFrameworkMel(boolean useFrameworkMel) { if (!mEnableCsd) { return; Loading Loading @@ -423,10 +447,27 @@ public class SoundDoseHelper { } catch (RemoteException e) { Log.e(TAG, "Exception while forcing CSD computation on all devices", e); } mForceSafeMediaOnAllDevices = computeCsdOnAllDevices; } boolean isCsdEnabled() { return mEnableCsd; if (!mEnableCsd) { return false; } final ISoundDose soundDose = mSoundDose.get(); if (soundDose == null) { Log.w(TAG, "Sound dose interface not initialized"); return false; } try { return soundDose.isSoundDoseHalSupported(); } catch (RemoteException e) { Log.e(TAG, "Exception while forcing CSD computation on all devices", e); } return false; } /*package*/ int safeMediaVolumeIndex(int device) { Loading Loading @@ -490,7 +531,7 @@ public class SoundDoseHelper { private boolean checkSafeMediaVolume_l(int streamType, int index, int device) { return (mSafeMediaVolumeState == SAFE_MEDIA_VOLUME_ACTIVE) && (AudioService.mStreamVolumeAlias[streamType] == AudioSystem.STREAM_MUSIC) && safeDevicesContains(device) && (safeDevicesContains(device) || mForceSafeMediaOnAllDevices) && (index > safeMediaVolumeIndex(device)); } Loading