From de483500f435e94099bb59db979c820d299713a3 Mon Sep 17 00:00:00 2001 From: Ahmad Khalil Date: Thu, 13 Jul 2023 10:24:04 +0000 Subject: [PATCH] Fix vibration patterns with zero duration steps. SetAmplitudeVibratorStep is skipping the zero duration steps, so getVibratorOnDuration should also skip those steps to avoid breaking down the vibration pattern. Bug: 287549459 Merged-In: I49874c64e8fe0f0a31adca023fe7273e32149a9b Change-Id: I49874c64e8fe0f0a31adca023fe7273e32149a9b --- .../com/android/server/vibrator/SetAmplitudeVibratorStep.java | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/services/core/java/com/android/server/vibrator/SetAmplitudeVibratorStep.java b/services/core/java/com/android/server/vibrator/SetAmplitudeVibratorStep.java index 6fb9111793ea1..959b94b012d6c 100644 --- a/services/core/java/com/android/server/vibrator/SetAmplitudeVibratorStep.java +++ b/services/core/java/com/android/server/vibrator/SetAmplitudeVibratorStep.java @@ -167,7 +167,9 @@ final class SetAmplitudeVibratorStep extends AbstractVibratorStep { while (i < segmentCount) { VibrationEffectSegment segment = segments.get(i); if (!(segment instanceof StepSegment) - || ((StepSegment) segment).getAmplitude() == 0) { + // play() will ignore segments with zero duration, so it's important that + // zero-duration segments don't affect this method. + || (segment.getDuration() > 0 && ((StepSegment) segment).getAmplitude() == 0)) { break; } timing += segment.getDuration();