| Index: device/vibration/android/java/src/org/chromium/device/vibration/VibrationManagerImpl.java
|
| diff --git a/device/vibration/android/java/src/org/chromium/device/vibration/VibrationManagerImpl.java b/device/vibration/android/java/src/org/chromium/device/vibration/VibrationManagerImpl.java
|
| index dd8d2755c8a5df286dc21bf4d9dd33518aaf8c69..f0ddbc98eb79d04233e31f7e53688964638018ef 100644
|
| --- a/device/vibration/android/java/src/org/chromium/device/vibration/VibrationManagerImpl.java
|
| +++ b/device/vibration/android/java/src/org/chromium/device/vibration/VibrationManagerImpl.java
|
| @@ -10,6 +10,7 @@ import android.media.AudioManager;
|
| import android.os.Vibrator;
|
| import android.util.Log;
|
|
|
| +import org.chromium.base.VisibleForTesting;
|
| import org.chromium.mojo.system.MojoException;
|
| import org.chromium.mojom.device.VibrationManager;
|
|
|
| @@ -24,12 +25,41 @@ public class VibrationManagerImpl implements VibrationManager {
|
| private static final long MAXIMUM_VIBRATION_DURATION_MS = 10000; // 10 seconds
|
|
|
| private final AudioManager mAudioManager;
|
| - private final Vibrator mVibrator;
|
| private final boolean mHasVibratePermission;
|
|
|
| + private static AndroidVibratorWrapper sVibratorWrapper;
|
| +
|
| + /**
|
| + * Android Vibrator wrapper class provided to test code to extend.
|
| + */
|
| + @VisibleForTesting
|
| + public static class AndroidVibratorWrapper {
|
| + private final Vibrator mAndroidVibrator;
|
| +
|
| + protected AndroidVibratorWrapper(Vibrator vibrator) {
|
| + mAndroidVibrator = vibrator;
|
| + }
|
| +
|
| + public void vibrate(long milliseconds) {
|
| + mAndroidVibrator.vibrate(milliseconds);
|
| + }
|
| +
|
| + public void cancel() {
|
| + mAndroidVibrator.cancel();
|
| + }
|
| + }
|
| +
|
| + // Test code can use this function to inject other wrapper for testing.
|
| + public static void setVibratorWrapperForTesting(AndroidVibratorWrapper wrapper) {
|
| + sVibratorWrapper = wrapper;
|
| + }
|
| +
|
| public VibrationManagerImpl(Context context) {
|
| mAudioManager = (AudioManager) context.getSystemService(Context.AUDIO_SERVICE);
|
| - mVibrator = (Vibrator) context.getSystemService(Context.VIBRATOR_SERVICE);
|
| + if (sVibratorWrapper == null) {
|
| + sVibratorWrapper = new AndroidVibratorWrapper(
|
| + (Vibrator) context.getSystemService(Context.VIBRATOR_SERVICE));
|
| + }
|
| mHasVibratePermission =
|
| context.checkCallingOrSelfPermission(android.Manifest.permission.VIBRATE)
|
| == PackageManager.PERMISSION_GRANTED;
|
| @@ -53,12 +83,12 @@ public class VibrationManagerImpl implements VibrationManager {
|
|
|
| if (mAudioManager.getRingerMode() != AudioManager.RINGER_MODE_SILENT
|
| && mHasVibratePermission) {
|
| - mVibrator.vibrate(sanitizedMilliseconds);
|
| + sVibratorWrapper.vibrate(sanitizedMilliseconds);
|
| }
|
| }
|
|
|
| @Override
|
| public void cancel() {
|
| - if (mHasVibratePermission) mVibrator.cancel();
|
| + if (mHasVibratePermission) sVibratorWrapper.cancel();
|
| }
|
| }
|
|
|