diff --git a/src/com/android/settings/accessibility/NotificationVibrationPreferenceFragment.java b/src/com/android/settings/accessibility/NotificationVibrationPreferenceFragment.java index 6340bb1417e..5f43c2d346f 100644 --- a/src/com/android/settings/accessibility/NotificationVibrationPreferenceFragment.java +++ b/src/com/android/settings/accessibility/NotificationVibrationPreferenceFragment.java @@ -15,7 +15,9 @@ */ package com.android.settings.accessibility; +import android.media.AudioAttributes; import android.os.Vibrator; +import android.os.VibrationEffect; import android.provider.Settings; import com.android.internal.logging.nano.MetricsProto.MetricsEvent; @@ -43,6 +45,11 @@ public class NotificationVibrationPreferenceFragment extends VibrationPreference return Settings.System.NOTIFICATION_VIBRATION_INTENSITY; } + @Override + protected int getPreviewVibrationAudioAttributesUsage() { + return AudioAttributes.USAGE_NOTIFICATION; + } + @Override protected int getDefaultVibrationIntensity() { Vibrator vibrator = getContext().getSystemService(Vibrator.class); diff --git a/src/com/android/settings/accessibility/TouchVibrationPreferenceFragment.java b/src/com/android/settings/accessibility/TouchVibrationPreferenceFragment.java index ea36833db54..1d2012452a6 100644 --- a/src/com/android/settings/accessibility/TouchVibrationPreferenceFragment.java +++ b/src/com/android/settings/accessibility/TouchVibrationPreferenceFragment.java @@ -16,7 +16,9 @@ package com.android.settings.accessibility; import android.graphics.drawable.Drawable; +import android.media.AudioAttributes; import android.os.Vibrator; +import android.os.VibrationEffect; import android.provider.Settings; import com.android.internal.logging.nano.MetricsProto.MetricsEvent; @@ -50,6 +52,11 @@ public class TouchVibrationPreferenceFragment extends VibrationPreferenceFragmen return vibrator.getDefaultHapticFeedbackIntensity(); } + @Override + protected int getPreviewVibrationAudioAttributesUsage() { + return AudioAttributes.USAGE_ASSISTANCE_SONIFICATION; + } + @Override public void onVibrationIntensitySelected(int intensity) { // We want to keep HAPTIC_FEEDBACK_ENABLED consistent with this setting since some diff --git a/src/com/android/settings/accessibility/VibrationPreferenceFragment.java b/src/com/android/settings/accessibility/VibrationPreferenceFragment.java index 3a82cdee4ba..20290690736 100644 --- a/src/com/android/settings/accessibility/VibrationPreferenceFragment.java +++ b/src/com/android/settings/accessibility/VibrationPreferenceFragment.java @@ -21,8 +21,10 @@ import androidx.annotation.VisibleForTesting; import android.content.Context; import android.database.ContentObserver; import android.graphics.drawable.Drawable; +import android.media.AudioAttributes; import android.net.Uri; import android.os.Handler; +import android.os.VibrationEffect; import android.os.Vibrator; import android.provider.Settings; import android.util.ArrayMap; @@ -105,6 +107,24 @@ public abstract class VibrationPreferenceFragment extends RadioButtonPickerFragm */ protected void onVibrationIntensitySelected(int intensity) { } + /** + * Play a vibration effect with intensity just selected by user + */ + protected void playVibrationPreview() { + Vibrator vibrator = getContext().getSystemService(Vibrator.class); + VibrationEffect effect = VibrationEffect.get(VibrationEffect.EFFECT_CLICK); + AudioAttributes.Builder builder = new AudioAttributes.Builder(); + builder.setUsage(getPreviewVibrationAudioAttributesUsage()); + vibrator.vibrate(effect, builder.build()); + } + + /** + * Get the AudioAttributes usage for vibration preview. + */ + protected int getPreviewVibrationAudioAttributesUsage() { + return AudioAttributes.USAGE_UNKNOWN; + } + @Override protected List getCandidates() { List candidates = new ArrayList<>(mCandidates.values()); @@ -189,6 +209,7 @@ public abstract class VibrationPreferenceFragment extends RadioButtonPickerFragm @Override public void onChange(boolean selfChange, Uri uri) { updateCandidates(); + playVibrationPreview(); } } }