diff options
| -rw-r--r-- | services/core/java/com/android/server/audio/SoundDoseHelper.java | 33 |
1 files changed, 28 insertions, 5 deletions
diff --git a/services/core/java/com/android/server/audio/SoundDoseHelper.java b/services/core/java/com/android/server/audio/SoundDoseHelper.java index 4984f125b00f..aece17e7a6e6 100644 --- a/services/core/java/com/android/server/audio/SoundDoseHelper.java +++ b/services/core/java/com/android/server/audio/SoundDoseHelper.java @@ -34,11 +34,13 @@ import android.media.ISoundDose; import android.media.ISoundDoseCallback; import android.media.SoundDoseRecord; import android.os.Binder; +import android.os.HandlerExecutor; import android.os.Message; import android.os.RemoteException; import android.os.SystemClock; import android.os.SystemProperties; import android.os.UserHandle; +import android.provider.DeviceConfig; import android.provider.Settings; import android.text.TextUtils; import android.util.Log; @@ -120,6 +122,8 @@ public class SoundDoseHelper { private static final int SAFE_MEDIA_VOLUME_UNINITIALIZED = -1; + private static final String FEATURE_FLAG_ENABLE_CSD = "enable_csd"; + private final EventLogger mLogger = new EventLogger(AudioService.LOG_NB_EVENTS_SOUND_DOSE, "CSD updates"); @@ -290,6 +294,10 @@ public class SoundDoseHelper { mAlarmManager = (AlarmManager) mContext.getSystemService( Context.ALARM_SERVICE); + + DeviceConfig.addOnPropertiesChangedListener(DeviceConfig.NAMESPACE_MEDIA, + new HandlerExecutor(mAudioHandler), + p -> updateCsdEnabled("onPropertiesChanged")); } void initSafeVolumes() { @@ -864,15 +872,30 @@ public class SoundDoseHelper { mAudioHandler.obtainMessage(MSG_PERSIST_SAFE_VOLUME_STATE, persistedState, /*arg2=*/0, /*obj=*/null), /*delay=*/0); + } + + updateCsdEnabled(caller); + } + } - boolean newEnableCsd = SystemProperties.getBoolean("audio.safemedia.force", false) - || mContext.getResources().getBoolean( + private void updateCsdEnabled(String caller) { + boolean newEnableCsd = SystemProperties.getBoolean("audio.safemedia.force", false); + if (!newEnableCsd) { + final String featureFlagEnableCsdValue = DeviceConfig.getProperty( + DeviceConfig.NAMESPACE_MEDIA, + FEATURE_FLAG_ENABLE_CSD); + if (featureFlagEnableCsdValue != null) { + newEnableCsd = Boolean.parseBoolean(featureFlagEnableCsdValue); + } else { + newEnableCsd = mContext.getResources().getBoolean( R.bool.config_safe_sound_dosage_enabled); - if (mEnableCsd.compareAndSet(!newEnableCsd, newEnableCsd)) { - initCsd(); - } } } + + if (mEnableCsd.compareAndSet(!newEnableCsd, newEnableCsd)) { + Log.i(TAG, caller + ": enable CSD " + newEnableCsd); + initCsd(); + } } private int getTimeoutMsForWarning(@AudioManager.CsdWarning int csdWarning) { |