diff options
| -rw-r--r-- | Android.bp | 1 | ||||
| -rw-r--r-- | services/core/java/com/android/server/VibratorService.java | 2 | ||||
| -rw-r--r-- | services/core/jni/Android.bp | 1 | ||||
| -rw-r--r-- | services/core/jni/com_android_server_VibratorService.cpp | 19 |
4 files changed, 22 insertions, 1 deletions
diff --git a/Android.bp b/Android.bp index f6d49e9f7fc7..15befaef84ae 100644 --- a/Android.bp +++ b/Android.bp @@ -739,6 +739,7 @@ java_defaults { "android.hardware.vibrator-V1.0-java", "android.hardware.vibrator-V1.1-java", "android.hardware.vibrator-V1.2-java", + "android.hardware.vibrator-V1.3-java", "android.hardware.wifi-V1.0-java-constants", "android.hardware.radio-V1.0-java", "android.hardware.radio-V1.3-java", diff --git a/services/core/java/com/android/server/VibratorService.java b/services/core/java/com/android/server/VibratorService.java index 9f353a80a5be..5d4c5c359a2b 100644 --- a/services/core/java/com/android/server/VibratorService.java +++ b/services/core/java/com/android/server/VibratorService.java @@ -149,6 +149,8 @@ public class VibratorService extends IVibratorService.Stub native static boolean vibratorSupportsAmplitudeControl(); native static void vibratorSetAmplitude(int amplitude); native static long vibratorPerformEffect(long effect, long strength); + static native boolean vibratorSupportsExternalControl(); + static native void vibratorSetExternalControl(boolean enabled); private final IUidObserver mUidObserver = new IUidObserver.Stub() { @Override public void onUidStateChanged(int uid, int procState, long procStateSeq) { diff --git a/services/core/jni/Android.bp b/services/core/jni/Android.bp index b4fe83704ff2..9ecafb3c70d6 100644 --- a/services/core/jni/Android.bp +++ b/services/core/jni/Android.bp @@ -119,6 +119,7 @@ cc_defaults { "android.hardware.vibrator@1.0", "android.hardware.vibrator@1.1", "android.hardware.vibrator@1.2", + "android.hardware.vibrator@1.3", "android.hardware.vr@1.0", "android.frameworks.schedulerservice@1.0", "android.frameworks.sensorservice@1.0", diff --git a/services/core/jni/com_android_server_VibratorService.cpp b/services/core/jni/com_android_server_VibratorService.cpp index defcfd9a3370..63dca62104a1 100644 --- a/services/core/jni/com_android_server_VibratorService.cpp +++ b/services/core/jni/com_android_server_VibratorService.cpp @@ -22,6 +22,7 @@ #include <android/hardware/vibrator/1.1/types.h> #include <android/hardware/vibrator/1.2/IVibrator.h> #include <android/hardware/vibrator/1.2/types.h> +#include <android/hardware/vibrator/1.3/IVibrator.h> #include "jni.h" #include <nativehelper/JNIHelp.h> @@ -42,6 +43,7 @@ using android::hardware::vibrator::V1_1::Effect_1_1; namespace V1_0 = android::hardware::vibrator::V1_0; namespace V1_1 = android::hardware::vibrator::V1_1; namespace V1_2 = android::hardware::vibrator::V1_2; +namespace V1_3 = android::hardware::vibrator::V1_3; namespace android { @@ -136,6 +138,19 @@ static void vibratorSetAmplitude(JNIEnv*, jobject, jint amplitude) { } } +static jboolean vibratorSupportsExternalControl(JNIEnv*, jobject) { + return halCall(&V1_3::IVibrator::supportsExternalControl).withDefault(false); +} + +static void vibratorSetExternalControl(JNIEnv*, jobject, jboolean enabled) { + Status status = halCall(&V1_3::IVibrator::setExternalControl, static_cast<uint32_t>(enabled)) + .withDefault(Status::UNKNOWN_ERROR); + if (status != Status::OK) { + ALOGE("Failed to set vibrator external control (%" PRIu32 ").", + static_cast<uint32_t>(status)); + } +} + static jlong vibratorPerformEffect(JNIEnv*, jobject, jlong effect, jint strength) { Status status; uint32_t lengthMs; @@ -187,7 +202,9 @@ static const JNINativeMethod method_table[] = { { "vibratorOff", "()V", (void*)vibratorOff }, { "vibratorSupportsAmplitudeControl", "()Z", (void*)vibratorSupportsAmplitudeControl}, { "vibratorSetAmplitude", "(I)V", (void*)vibratorSetAmplitude}, - { "vibratorPerformEffect", "(JJ)J", (void*)vibratorPerformEffect} + { "vibratorPerformEffect", "(JJ)J", (void*)vibratorPerformEffect}, + { "vibratorSupportsExternalControl", "()Z", (void*)vibratorSupportsExternalControl}, + { "vibratorSetExternalControl", "(Z)V", (void*)vibratorSetExternalControl}, }; int register_android_server_VibratorService(JNIEnv *env) |