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(); |
} |
} |