1 // Copyright 2013 The Chromium Authors. All rights reserved. 2 // Use of this source code is governed by a BSD-style license that can be 3 // found in the LICENSE file. 4 5 package org.chromium.content.browser; 6 7 import android.content.Context; 8 import android.content.pm.PackageManager; 9 import android.media.AudioManager; 10 import android.os.Vibrator; 11 import android.util.Log; 12 13 import org.chromium.base.CalledByNative; 14 import org.chromium.base.JNINamespace; 15 16 /** 17 * This is the implementation of the C++ counterpart VibrationProvider. 18 */ 19 @JNINamespace("content") 20 class VibrationProvider { 21 private static final String TAG = "VibrationProvider"; 22 23 private final AudioManager mAudioManager; 24 private final Vibrator mVibrator; 25 private final boolean mHasVibratePermission; 26 27 @CalledByNative create(Context context)28 private static VibrationProvider create(Context context) { 29 return new VibrationProvider(context); 30 } 31 32 @CalledByNative vibrate(long milliseconds)33 private void vibrate(long milliseconds) { 34 if (mAudioManager.getRingerMode() != AudioManager.RINGER_MODE_SILENT && 35 mHasVibratePermission) { 36 mVibrator.vibrate(milliseconds); 37 } 38 } 39 40 @CalledByNative cancelVibration()41 private void cancelVibration() { 42 if (mHasVibratePermission) mVibrator.cancel(); 43 } 44 VibrationProvider(Context context)45 private VibrationProvider(Context context) { 46 mAudioManager = (AudioManager) context.getSystemService(Context.AUDIO_SERVICE); 47 mVibrator = (Vibrator) context.getSystemService(Context.VIBRATOR_SERVICE); 48 mHasVibratePermission = context.checkCallingOrSelfPermission( 49 android.Manifest.permission.VIBRATE) == PackageManager.PERMISSION_GRANTED; 50 if (!mHasVibratePermission) { 51 Log.w(TAG, "Failed to use vibrate API, requires VIBRATE permission."); 52 } 53 } 54 } 55