• Home
  • History
  • Annotate
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
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