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

Commit 96f114ad authored by Alexey Kuzmin's avatar Alexey Kuzmin
Browse files

Add vibration preview

Test: Open vibration intensity settings, tap on any option. The preview
effect of selected intensity should be played back.

Bug: 74504389
Merged-In: Ie22ecb830752edb7a7515a3a6475587e72274e51
Change-Id: Ie22ecb830752edb7a7515a3a6475587e72274e51
parent bdba093a
Loading
Loading
Loading
Loading
+7 −0
Original line number Diff line number Diff line
@@ -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);
+7 −0
Original line number Diff line number Diff line
@@ -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
+21 −0
Original line number Diff line number Diff line
@@ -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<? extends CandidateInfo> getCandidates() {
        List<VibrationIntensityCandidateInfo> 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();
        }
    }
}