Loading core/java/android/os/CombinedVibration.java +4 −0 Original line number Diff line number Diff line Loading @@ -43,6 +43,7 @@ import java.util.function.Function; public abstract class CombinedVibration implements Parcelable { private static final int PARCEL_TOKEN_MONO = 1; private static final int PARCEL_TOKEN_STEREO = 2; // TODO(b/421857859): remove this once flag remove_sequential_combination is removed private static final int PARCEL_TOKEN_SEQUENTIAL = 3; /** Prevent subclassing from outside of the framework. */ Loading Loading @@ -88,6 +89,7 @@ public abstract class CombinedVibration implements Parcelable { * @hide * @see CombinedVibration.SequentialCombination */ // TODO(b/421857859): remove this once flag remove_sequential_combination is removed @TestApi @NonNull public static SequentialCombination startSequential() { Loading Loading @@ -252,6 +254,7 @@ public abstract class CombinedVibration implements Parcelable { * @hide * @see CombinedVibration#startSequential() */ // TODO(b/421857859): remove this class once flag remove_sequential_combination is removed @TestApi public static final class SequentialCombination { Loading Loading @@ -766,6 +769,7 @@ public abstract class CombinedVibration implements Parcelable { * * @hide */ // TODO(b/421857859): remove this class once flag remove_sequential_combination is removed @TestApi public static final class Sequential extends CombinedVibration { // If a vibration is playing more than 3 effects, it's probably not haptic feedback Loading core/java/android/os/vibrator/flags.aconfig +10 −0 Original line number Diff line number Diff line Loading @@ -149,3 +149,13 @@ flag { purpose: PURPOSE_BUGFIX } } flag { namespace: "haptics" name: "remove_sequential_combination" description: "Remove CombinedVibration.SequentialCombination and related types" bug: "421857859" metadata { purpose: PURPOSE_BUGFIX } } services/core/java/com/android/server/vibrator/FinishCombinedVibrationStep.java 0 → 100644 +66 −0 Original line number Diff line number Diff line /* * Copyright (C) 2025 The Android Open Source Project * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package com.android.server.vibrator; import android.annotation.NonNull; import android.os.Trace; import java.util.List; /** * Finish a synced vibration started by a {@link StartCombinedVibrationStep}. * * <p>This only plays after all active vibrators steps have finished. */ final class FinishCombinedVibrationStep extends Step { FinishCombinedVibrationStep(VibrationStepConductor conductor) { // No predefined startTime, just wait for all steps in the queue. super(conductor, Long.MAX_VALUE); } @Override public boolean isCleanUp() { // This step only notes that all the vibrators has been turned off. return true; } @NonNull @Override public List<Step> play() { Trace.traceBegin(Trace.TRACE_TAG_VIBRATOR, "FinishCombinedVibrationStep"); try { conductor.vibratorManagerHooks.noteVibratorOff( conductor.getVibration().callerInfo.uid); return VibrationStepConductor.EMPTY_STEP_LIST; } finally { Trace.traceEnd(Trace.TRACE_TAG_VIBRATOR); } } @NonNull @Override public List<Step> cancel() { cancelImmediately(); return VibrationStepConductor.EMPTY_STEP_LIST; } @Override public void cancelImmediately() { conductor.vibratorManagerHooks.noteVibratorOff(conductor.getVibration().callerInfo.uid); } } services/core/java/com/android/server/vibrator/FinishSequentialEffectStep.java +1 −0 Original line number Diff line number Diff line Loading @@ -29,6 +29,7 @@ import java.util.List; * <p>This only plays after all active vibrators steps have finished, and adds a {@link * StartSequentialEffectStep} to the queue if the sequential effect isn't finished yet. */ // TODO(b/421857859): remove this class once flag remove_sequential_combination is removed final class FinishSequentialEffectStep extends Step { public final StartSequentialEffectStep startedStep; Loading services/core/java/com/android/server/vibrator/HalVibration.java +1 −0 Original line number Diff line number Diff line Loading @@ -195,6 +195,7 @@ final class HalVibration extends Vibration { for (int i = 0; i < effects.size(); i++) { fillFallbacksForEffect(effects.valueAt(i), fallbackProvider); } // TODO(b/421857859): remove this once flag remove_sequential_combination is removed } else if (effect instanceof CombinedVibration.Sequential) { List<CombinedVibration> effects = ((CombinedVibration.Sequential) effect).getEffects(); Loading Loading
core/java/android/os/CombinedVibration.java +4 −0 Original line number Diff line number Diff line Loading @@ -43,6 +43,7 @@ import java.util.function.Function; public abstract class CombinedVibration implements Parcelable { private static final int PARCEL_TOKEN_MONO = 1; private static final int PARCEL_TOKEN_STEREO = 2; // TODO(b/421857859): remove this once flag remove_sequential_combination is removed private static final int PARCEL_TOKEN_SEQUENTIAL = 3; /** Prevent subclassing from outside of the framework. */ Loading Loading @@ -88,6 +89,7 @@ public abstract class CombinedVibration implements Parcelable { * @hide * @see CombinedVibration.SequentialCombination */ // TODO(b/421857859): remove this once flag remove_sequential_combination is removed @TestApi @NonNull public static SequentialCombination startSequential() { Loading Loading @@ -252,6 +254,7 @@ public abstract class CombinedVibration implements Parcelable { * @hide * @see CombinedVibration#startSequential() */ // TODO(b/421857859): remove this class once flag remove_sequential_combination is removed @TestApi public static final class SequentialCombination { Loading Loading @@ -766,6 +769,7 @@ public abstract class CombinedVibration implements Parcelable { * * @hide */ // TODO(b/421857859): remove this class once flag remove_sequential_combination is removed @TestApi public static final class Sequential extends CombinedVibration { // If a vibration is playing more than 3 effects, it's probably not haptic feedback Loading
core/java/android/os/vibrator/flags.aconfig +10 −0 Original line number Diff line number Diff line Loading @@ -149,3 +149,13 @@ flag { purpose: PURPOSE_BUGFIX } } flag { namespace: "haptics" name: "remove_sequential_combination" description: "Remove CombinedVibration.SequentialCombination and related types" bug: "421857859" metadata { purpose: PURPOSE_BUGFIX } }
services/core/java/com/android/server/vibrator/FinishCombinedVibrationStep.java 0 → 100644 +66 −0 Original line number Diff line number Diff line /* * Copyright (C) 2025 The Android Open Source Project * * Licensed under the Apache License, Version 2.0 (the "License"); * you may not use this file except in compliance with the License. * You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, software * distributed under the License is distributed on an "AS IS" BASIS, * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. * See the License for the specific language governing permissions and * limitations under the License. */ package com.android.server.vibrator; import android.annotation.NonNull; import android.os.Trace; import java.util.List; /** * Finish a synced vibration started by a {@link StartCombinedVibrationStep}. * * <p>This only plays after all active vibrators steps have finished. */ final class FinishCombinedVibrationStep extends Step { FinishCombinedVibrationStep(VibrationStepConductor conductor) { // No predefined startTime, just wait for all steps in the queue. super(conductor, Long.MAX_VALUE); } @Override public boolean isCleanUp() { // This step only notes that all the vibrators has been turned off. return true; } @NonNull @Override public List<Step> play() { Trace.traceBegin(Trace.TRACE_TAG_VIBRATOR, "FinishCombinedVibrationStep"); try { conductor.vibratorManagerHooks.noteVibratorOff( conductor.getVibration().callerInfo.uid); return VibrationStepConductor.EMPTY_STEP_LIST; } finally { Trace.traceEnd(Trace.TRACE_TAG_VIBRATOR); } } @NonNull @Override public List<Step> cancel() { cancelImmediately(); return VibrationStepConductor.EMPTY_STEP_LIST; } @Override public void cancelImmediately() { conductor.vibratorManagerHooks.noteVibratorOff(conductor.getVibration().callerInfo.uid); } }
services/core/java/com/android/server/vibrator/FinishSequentialEffectStep.java +1 −0 Original line number Diff line number Diff line Loading @@ -29,6 +29,7 @@ import java.util.List; * <p>This only plays after all active vibrators steps have finished, and adds a {@link * StartSequentialEffectStep} to the queue if the sequential effect isn't finished yet. */ // TODO(b/421857859): remove this class once flag remove_sequential_combination is removed final class FinishSequentialEffectStep extends Step { public final StartSequentialEffectStep startedStep; Loading
services/core/java/com/android/server/vibrator/HalVibration.java +1 −0 Original line number Diff line number Diff line Loading @@ -195,6 +195,7 @@ final class HalVibration extends Vibration { for (int i = 0; i < effects.size(); i++) { fillFallbacksForEffect(effects.valueAt(i), fallbackProvider); } // TODO(b/421857859): remove this once flag remove_sequential_combination is removed } else if (effect instanceof CombinedVibration.Sequential) { List<CombinedVibration> effects = ((CombinedVibration.Sequential) effect).getEffects(); Loading