From bc491a649c565e22f106edae7604b2d79a07db84 Mon Sep 17 00:00:00 2001 From: Lais Andrade Date: Mon, 28 Mar 2022 17:30:28 +0100 Subject: [PATCH] Fix VibratorManager cmd for on-off waveforms The VibrationEffect.WaveformBuilder.addSustain does not accept zero duration sustain periods, so adding an extra check to the VibratorManager ShellCommand implementation to handle on-off patterns with zero entries. Bug: 224930189 Test: manual Change-Id: Ie1b8f15a0e7b029ebf78a2affce1c12455f08418 --- .../android/server/vibrator/VibratorManagerService.java | 9 +++++++-- 1 file changed, 7 insertions(+), 2 deletions(-) diff --git a/services/core/java/com/android/server/vibrator/VibratorManagerService.java b/services/core/java/com/android/server/vibrator/VibratorManagerService.java index f749773d14a04..3ffca96600985 100644 --- a/services/core/java/com/android/server/vibrator/VibratorManagerService.java +++ b/services/core/java/com/android/server/vibrator/VibratorManagerService.java @@ -1852,6 +1852,9 @@ public class VibratorManagerService extends IVibratorManagerService.Stub { Duration transitionDuration = isContinuous ? Duration.ofMillis(durations.get(i)) : Duration.ZERO; + Duration sustainDuration = isContinuous + ? Duration.ZERO + : Duration.ofMillis(durations.get(i)); if (hasFrequencies) { waveform.addTransition(transitionDuration, targetAmplitude(amplitudes.get(i)), @@ -1859,8 +1862,10 @@ public class VibratorManagerService extends IVibratorManagerService.Stub { } else { waveform.addTransition(transitionDuration, targetAmplitude(amplitudes.get(i))); } - if (!isContinuous) { - waveform.addSustain(Duration.ofMillis(durations.get(i))); + if (!sustainDuration.isZero()) { + // Add sustain only takes positive durations. Skip this since we already + // did a transition to the desired values (even when duration is zero). + waveform.addSustain(sustainDuration); } if ((i > 0) && (i == repeat)) {