blob: c989197f4409f24b77220db3fbf44ff773a36ffc [file] [log] [blame]
Jeff Brownc2346132012-04-13 01:55:38 -07001/*
2 * Copyright (C) 2012 The Android Open Source Project
3 *
4 * Licensed under the Apache License, Version 2.0 (the "License");
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
7 *
8 * http://www.apache.org/licenses/LICENSE-2.0
9 *
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an "AS IS" BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
15 */
16
17package android.os;
18
Dianne Hackborna06de0f2012-12-11 16:34:47 -080019import android.content.Context;
John Spurlock7b414672014-07-18 13:02:39 -040020import android.media.AudioAttributes;
Jeff Brownc2346132012-04-13 01:55:38 -070021import android.util.Log;
22
23/**
24 * Vibrator implementation that controls the main system vibrator.
25 *
26 * @hide
27 */
28public class SystemVibrator extends Vibrator {
29 private static final String TAG = "Vibrator";
30
31 private final IVibratorService mService;
32 private final Binder mToken = new Binder();
33
34 public SystemVibrator() {
Michael Wright71216972017-01-31 18:33:54 +000035 mService = IVibratorService.Stub.asInterface(ServiceManager.getService("vibrator"));
Dianne Hackborna06de0f2012-12-11 16:34:47 -080036 }
37
38 public SystemVibrator(Context context) {
John Spurlock1af30c72014-03-10 08:33:35 -040039 super(context);
Michael Wright71216972017-01-31 18:33:54 +000040 mService = IVibratorService.Stub.asInterface(ServiceManager.getService("vibrator"));
Jeff Brownc2346132012-04-13 01:55:38 -070041 }
42
43 @Override
44 public boolean hasVibrator() {
45 if (mService == null) {
46 Log.w(TAG, "Failed to vibrate; no vibrator service.");
47 return false;
48 }
49 try {
50 return mService.hasVibrator();
51 } catch (RemoteException e) {
52 }
53 return false;
54 }
55
Dianne Hackbornf265ea92013-01-31 15:00:51 -080056 @Override
Michael Wright71216972017-01-31 18:33:54 +000057 public boolean hasAmplitudeControl() {
58 if (mService == null) {
59 Log.w(TAG, "Failed to check amplitude control; no vibrator service.");
60 return false;
61 }
62 try {
63 return mService.hasAmplitudeControl();
64 } catch (RemoteException e) {
65 }
66 return false;
67 }
68
69 @Override
Alexey Kuzmine1f06b82018-06-20 17:48:43 +010070 public void vibrate(int uid, String opPkg, VibrationEffect effect,
71 String reason, AudioAttributes attributes) {
Jeff Brownc2346132012-04-13 01:55:38 -070072 if (mService == null) {
73 Log.w(TAG, "Failed to vibrate; no vibrator service.");
74 return;
75 }
76 try {
Alexey Kuzmine1f06b82018-06-20 17:48:43 +010077 mService.vibrate(uid, opPkg, effect, usageForAttributes(attributes), reason, mToken);
Jeff Brownc2346132012-04-13 01:55:38 -070078 } catch (RemoteException e) {
79 Log.w(TAG, "Failed to vibrate.", e);
80 }
81 }
82
John Spurlock7b414672014-07-18 13:02:39 -040083 private static int usageForAttributes(AudioAttributes attributes) {
84 return attributes != null ? attributes.getUsage() : AudioAttributes.USAGE_UNKNOWN;
85 }
86
Jeff Brownc2346132012-04-13 01:55:38 -070087 @Override
88 public void cancel() {
89 if (mService == null) {
90 return;
91 }
92 try {
93 mService.cancelVibrate(mToken);
94 } catch (RemoteException e) {
95 Log.w(TAG, "Failed to cancel vibration.", e);
96 }
97 }
98}