From 512077e347a6d2e0e35f04c02b3426fdc64e5890 Mon Sep 17 00:00:00 2001 From: Beverly Date: Thu, 15 Mar 2018 13:54:43 -0400 Subject: [PATCH] Set audio attrs on volume + home button vibrations System vibrations should not be turned off by dnd. Previously, dnd would stop the vibrations on the ringer volume dialog tri-state toggle and home buttons because they didn't have the correct AudioAttributes. This CL gives these vibrations the correct AudioAttributes so they don't get muted by DND. Test: manual Bug: 74441602 Change-Id: Idbe52f94a35a5333d4c8f80ed374d0384ddb550d --- .../systemui/statusbar/VibratorHelper.java | 9 ++++++++- .../volume/VolumeDialogControllerImpl.java | 16 ++++++++++------ 2 files changed, 18 insertions(+), 7 deletions(-) diff --git a/packages/SystemUI/src/com/android/systemui/statusbar/VibratorHelper.java b/packages/SystemUI/src/com/android/systemui/statusbar/VibratorHelper.java index 5c21fd1167e40..6560f8f9c4204 100644 --- a/packages/SystemUI/src/com/android/systemui/statusbar/VibratorHelper.java +++ b/packages/SystemUI/src/com/android/systemui/statusbar/VibratorHelper.java @@ -18,6 +18,7 @@ package com.android.systemui.statusbar; import android.content.Context; import android.database.ContentObserver; +import android.media.AudioAttributes; import android.os.AsyncTask; import android.os.Handler; import android.os.UserHandle; @@ -30,6 +31,11 @@ public class VibratorHelper { private final Vibrator mVibrator; private final Context mContext; private boolean mHapticFeedbackEnabled; + private static final AudioAttributes STATUS_BAR_VIBRATION_ATTRIBUTES = + new AudioAttributes.Builder() + .setContentType(AudioAttributes.CONTENT_TYPE_SONIFICATION) + .setUsage(AudioAttributes.USAGE_ASSISTANCE_SONIFICATION) + .build(); final private ContentObserver mVibrationObserver = new ContentObserver(Handler.getMain()) { @Override @@ -51,7 +57,8 @@ public class VibratorHelper { public void vibrate(final int effectId) { if (mHapticFeedbackEnabled) { AsyncTask.execute(() -> - mVibrator.vibrate(VibrationEffect.get(effectId, false /* fallback */))); + mVibrator.vibrate(VibrationEffect.get(effectId, false /* fallback */), + STATUS_BAR_VIBRATION_ATTRIBUTES)); } } diff --git a/packages/SystemUI/src/com/android/systemui/volume/VolumeDialogControllerImpl.java b/packages/SystemUI/src/com/android/systemui/volume/VolumeDialogControllerImpl.java index 89e7dd1460457..ee6748eee2f80 100644 --- a/packages/SystemUI/src/com/android/systemui/volume/VolumeDialogControllerImpl.java +++ b/packages/SystemUI/src/com/android/systemui/volume/VolumeDialogControllerImpl.java @@ -26,8 +26,7 @@ import android.content.pm.ApplicationInfo; import android.content.pm.PackageManager; import android.content.pm.PackageManager.NameNotFoundException; import android.database.ContentObserver; -import android.media.AudioDeviceCallback; -import android.media.AudioDeviceInfo; +import android.media.AudioAttributes; import android.media.AudioManager; import android.media.AudioSystem; import android.media.IVolumeController; @@ -40,6 +39,7 @@ import android.os.HandlerThread; import android.os.Looper; import android.os.Message; import android.os.RemoteException; +import android.os.VibrationEffect; import android.os.Vibrator; import android.provider.Settings; import android.service.notification.Condition; @@ -59,9 +59,7 @@ import com.android.systemui.statusbar.phone.StatusBar; import java.io.FileDescriptor; import java.io.PrintWriter; -import java.util.ArrayList; import java.util.HashMap; -import java.util.List; import java.util.Map; import java.util.Objects; @@ -77,6 +75,11 @@ public class VolumeDialogControllerImpl implements VolumeDialogController, Dumpa private static final int DYNAMIC_STREAM_START_INDEX = 100; private static final int VIBRATE_HINT_DURATION = 50; + private static final AudioAttributes SONFICIATION_VIBRATION_ATTRIBUTES = + new AudioAttributes.Builder() + .setContentType(AudioAttributes.CONTENT_TYPE_SONIFICATION) + .setUsage(AudioAttributes.USAGE_ASSISTANCE_SONIFICATION) + .build(); static final ArrayMap STREAMS = new ArrayMap<>(); static { @@ -299,7 +302,8 @@ public class VolumeDialogControllerImpl implements VolumeDialogController, Dumpa public void vibrate() { if (mHasVibrator) { - mVibrator.vibrate(VIBRATE_HINT_DURATION); + mVibrator.vibrate(VibrationEffect.createOneShot(VIBRATE_HINT_DURATION, + VibrationEffect.DEFAULT_AMPLITUDE), SONFICIATION_VIBRATION_ATTRIBUTES); } } @@ -308,7 +312,7 @@ public class VolumeDialogControllerImpl implements VolumeDialogController, Dumpa } private void onNotifyVisibleW(boolean visible) { - if (mDestroyed) return; + if (mDestroyed) return; mAudio.notifyVolumeControllerVisible(mVolumeController, visible); if (!visible) { if (updateActiveStreamW(-1)) {