Index: device/vibration/android/java/src/org/chromium/device/vibration/VibrationManagerImpl.java |
diff --git a/device/vibration/android/java/src/org/chromium/device/vibration/VibrationProvider.java b/device/vibration/android/java/src/org/chromium/device/vibration/VibrationManagerImpl.java |
similarity index 41% |
rename from device/vibration/android/java/src/org/chromium/device/vibration/VibrationProvider.java |
rename to device/vibration/android/java/src/org/chromium/device/vibration/VibrationManagerImpl.java |
index 0f12d7c2e67cbbd83ca2dc12628b72df6f77fb13..dd8d2755c8a5df286dc21bf4d9dd33518aaf8c69 100644 |
--- a/device/vibration/android/java/src/org/chromium/device/vibration/VibrationProvider.java |
+++ b/device/vibration/android/java/src/org/chromium/device/vibration/VibrationManagerImpl.java |
@@ -1,4 +1,4 @@ |
-// Copyright 2013 The Chromium Authors. All rights reserved. |
+// Copyright 2015 The Chromium Authors. All rights reserved. |
// Use of this source code is governed by a BSD-style license that can be |
// found in the LICENSE file. |
@@ -10,45 +10,55 @@ import android.media.AudioManager; |
import android.os.Vibrator; |
import android.util.Log; |
-import org.chromium.base.annotations.CalledByNative; |
-import org.chromium.base.annotations.JNINamespace; |
+import org.chromium.mojo.system.MojoException; |
+import org.chromium.mojom.device.VibrationManager; |
/** |
- * This is the implementation of the C++ counterpart VibrationProvider. |
+ * Android implementation of the vibration manager service defined in |
+ * device/vibration/vibration_manager.mojom. |
*/ |
-@JNINamespace("device") |
-class VibrationProvider { |
- private static final String TAG = "VibrationProvider"; |
+public class VibrationManagerImpl implements VibrationManager { |
+ private static final String TAG = "VibrationManagerImpl"; |
+ |
+ private static final long MINIMUM_VIBRATION_DURATION_MS = 1; // 1 millisecond |
+ private static final long MAXIMUM_VIBRATION_DURATION_MS = 10000; // 10 seconds |
private final AudioManager mAudioManager; |
private final Vibrator mVibrator; |
private final boolean mHasVibratePermission; |
- @CalledByNative |
- private static VibrationProvider create(Context context) { |
- return new VibrationProvider(context); |
+ public VibrationManagerImpl(Context context) { |
+ mAudioManager = (AudioManager) context.getSystemService(Context.AUDIO_SERVICE); |
+ mVibrator = (Vibrator) context.getSystemService(Context.VIBRATOR_SERVICE); |
+ mHasVibratePermission = |
+ context.checkCallingOrSelfPermission(android.Manifest.permission.VIBRATE) |
+ == PackageManager.PERMISSION_GRANTED; |
+ if (!mHasVibratePermission) { |
+ Log.w(TAG, "Failed to use vibrate API, requires VIBRATE permission."); |
+ } |
} |
- @CalledByNative |
- private void vibrate(long milliseconds) { |
+ @Override |
+ public void close() {} |
+ |
+ @Override |
+ public void onConnectionError(MojoException e) {} |
+ |
+ @Override |
+ public void vibrate(long milliseconds) { |
+ // Though the Blink implementation already sanitizes vibration times, don't |
+ // trust any values passed from the client. |
+ long sanitizedMilliseconds = Math.max(MINIMUM_VIBRATION_DURATION_MS, |
+ Math.min(milliseconds, MAXIMUM_VIBRATION_DURATION_MS)); |
+ |
if (mAudioManager.getRingerMode() != AudioManager.RINGER_MODE_SILENT |
&& mHasVibratePermission) { |
- mVibrator.vibrate(milliseconds); |
+ mVibrator.vibrate(sanitizedMilliseconds); |
} |
} |
- @CalledByNative |
- private void cancelVibration() { |
+ @Override |
+ public void cancel() { |
if (mHasVibratePermission) mVibrator.cancel(); |
} |
- |
- private VibrationProvider(Context context) { |
- mAudioManager = (AudioManager) context.getSystemService(Context.AUDIO_SERVICE); |
- mVibrator = (Vibrator) context.getSystemService(Context.VIBRATOR_SERVICE); |
- mHasVibratePermission = context.checkCallingOrSelfPermission( |
- android.Manifest.permission.VIBRATE) == PackageManager.PERMISSION_GRANTED; |
- if (!mHasVibratePermission) { |
- Log.w(TAG, "Failed to use vibrate API, requires VIBRATE permission."); |
- } |
- } |
} |