From 6a40713e3bb92f14e741a5666da65503c4dabdf6 Mon Sep 17 00:00:00 2001 From: Michael Wright Date: Wed, 5 Apr 2017 14:13:19 +0100 Subject: [PATCH] Catch exceptions in Vibrator to maintain compatibility Bug: 36827833 Test: manual Change-Id: I5ff165c4a1d7ee5c175cf4b50d4899f5e2092b5d --- core/java/android/os/Vibrator.java | 24 ++++++++++++++++++------ 1 file changed, 18 insertions(+), 6 deletions(-) diff --git a/core/java/android/os/Vibrator.java b/core/java/android/os/Vibrator.java index b1f64218b7b43..c6bbf484e7024 100644 --- a/core/java/android/os/Vibrator.java +++ b/core/java/android/os/Vibrator.java @@ -19,6 +19,7 @@ package android.os; import android.app.ActivityThread; import android.content.Context; import android.media.AudioAttributes; +import android.util.Log; /** * Class that operates the vibrator on the device. @@ -30,6 +31,7 @@ import android.media.AudioAttributes; * {@link Context#getSystemService} with {@link Context#VIBRATOR_SERVICE} as the argument. */ public abstract class Vibrator { + private static final String TAG = "Vibrator"; private final String mPackageName; @@ -90,9 +92,14 @@ public abstract class Vibrator { */ @Deprecated public void vibrate(long milliseconds, AudioAttributes attributes) { - VibrationEffect effect = - VibrationEffect.createOneShot(milliseconds, VibrationEffect.DEFAULT_AMPLITUDE); - vibrate(effect, attributes); + try { + // This ignores all exceptions to stay compatible with pre-O implementations. + VibrationEffect effect = + VibrationEffect.createOneShot(milliseconds, VibrationEffect.DEFAULT_AMPLITUDE); + vibrate(effect, attributes); + } catch (IllegalArgumentException iae) { + Log.e(TAG, "Failed to create VibrationEffect", iae); + } } /** @@ -150,12 +157,17 @@ public abstract class Vibrator { */ @Deprecated public void vibrate(long[] pattern, int repeat, AudioAttributes attributes) { - // This call needs to continue throwing ArrayIndexOutOfBoundsException for compatibility - // purposes, whereas VibrationEffect throws an IllegalArgumentException. + // This call needs to continue throwing ArrayIndexOutOfBoundsException but ignore all other + // exceptions for compatibility purposes if (repeat < -1 || repeat >= pattern.length) { throw new ArrayIndexOutOfBoundsException(); } - vibrate(VibrationEffect.createWaveform(pattern, repeat), attributes); + + try { + vibrate(VibrationEffect.createWaveform(pattern, repeat), attributes); + } catch (IllegalArgumentException iae) { + Log.e(TAG, "Failed to create VibrationEffect", iae); + } } public void vibrate(VibrationEffect vibe) {