diff options
| -rw-r--r-- | core/java/android/os/Vibrator.java | 22 | ||||
| -rw-r--r-- | core/tests/vibrator/src/android/os/VibratorTest.java | 12 |
2 files changed, 33 insertions, 1 deletions
diff --git a/core/java/android/os/Vibrator.java b/core/java/android/os/Vibrator.java index 71c83f20741d..99bd67bd96ff 100644 --- a/core/java/android/os/Vibrator.java +++ b/core/java/android/os/Vibrator.java @@ -497,7 +497,27 @@ public abstract class Vibrator { */ @RequiresPermission(android.Manifest.permission.VIBRATE) public void vibrate(@NonNull VibrationEffect vibe, @NonNull VibrationAttributes attributes) { - vibrate(Process.myUid(), mPackageName, vibe, null, attributes); + vibrate(vibe, attributes, null); + } + + /** + * Vibrate with a given effect. + * + * <p>The app should be in the foreground for the vibration to happen. Background apps should + * specify a ringtone, notification or alarm usage in order to vibrate.</p> + * + * @param vibe {@link VibrationEffect} describing the vibration to be performed. + * @param attributes {@link VibrationAttributes} corresponding to the vibration. For example, + * specify {@link VibrationAttributes#USAGE_ALARM} for alarm vibrations or + * {@link VibrationAttributes#USAGE_RINGTONE} for vibrations associated with + * incoming calls. + * @param reason the reason for this vibration, used for debugging purposes. + * @hide + */ + @RequiresPermission(android.Manifest.permission.VIBRATE) + public void vibrate(@NonNull VibrationEffect vibe, + @NonNull VibrationAttributes attributes, @NonNull String reason) { + vibrate(Process.myUid(), mPackageName, vibe, reason, attributes); } /** diff --git a/core/tests/vibrator/src/android/os/VibratorTest.java b/core/tests/vibrator/src/android/os/VibratorTest.java index cfa12bb5b504..6210a00a5940 100644 --- a/core/tests/vibrator/src/android/os/VibratorTest.java +++ b/core/tests/vibrator/src/android/os/VibratorTest.java @@ -222,6 +222,18 @@ public class VibratorTest { } @Test + public void vibrate_withVibrationAttributesAndReason_usesGivenAttributesAndReason() { + VibrationEffect effect = VibrationEffect.get(VibrationEffect.EFFECT_CLICK); + VibrationAttributes attributes = new VibrationAttributes.Builder().setUsage( + VibrationAttributes.USAGE_TOUCH).build(); + String reason = "reason"; + + mVibratorSpy.vibrate(effect, attributes, reason); + + verify(mVibratorSpy).vibrate(anyInt(), anyString(), eq(effect), eq(reason), eq(attributes)); + } + + @Test public void vibrate_withAudioAttributes_createsVibrationAttributesWithSameUsage() { VibrationEffect effect = VibrationEffect.get(VibrationEffect.EFFECT_CLICK); AudioAttributes audioAttributes = new AudioAttributes.Builder().setUsage( |