From 458b233e16761d90af3e2e194a1f55e9ff011c6f Mon Sep 17 00:00:00 2001 From: scribam Date: Tue, 17 Jan 2023 22:36:11 +0100 Subject: [PATCH] android: add vibrate compatibility with newer versions --- .../emulator/emu/VirtualJoystickDelegate.java | 11 +++++++++-- .../emulator/periph/InputDeviceManager.java | 15 +++++++++++---- 2 files changed, 20 insertions(+), 6 deletions(-) diff --git a/shell/android-studio/flycast/src/main/java/com/reicast/emulator/emu/VirtualJoystickDelegate.java b/shell/android-studio/flycast/src/main/java/com/reicast/emulator/emu/VirtualJoystickDelegate.java index 1e9dce529..489b52831 100644 --- a/shell/android-studio/flycast/src/main/java/com/reicast/emulator/emu/VirtualJoystickDelegate.java +++ b/shell/android-studio/flycast/src/main/java/com/reicast/emulator/emu/VirtualJoystickDelegate.java @@ -2,7 +2,9 @@ package com.reicast.emulator.emu; import android.content.Context; import android.content.res.Configuration; +import android.os.Build; import android.os.Handler; +import android.os.VibrationEffect; import android.os.Vibrator; import android.view.InputDevice; import android.view.MotionEvent; @@ -430,8 +432,13 @@ public class VirtualJoystickDelegate { vibrate = false; } } - if (doVibrate) - vibrator.vibrate(Emulator.vibrationDuration); + if (doVibrate) { + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) { + vibrator.vibrate(VibrationEffect.createOneShot(Emulator.vibrationDuration, VibrationEffect.DEFAULT_AMPLITUDE)); + } else { + vibrator.vibrate(Emulator.vibrationDuration); + } + } } } diff --git a/shell/android-studio/flycast/src/main/java/com/reicast/emulator/periph/InputDeviceManager.java b/shell/android-studio/flycast/src/main/java/com/reicast/emulator/periph/InputDeviceManager.java index 1afe85249..ce58ddbd8 100644 --- a/shell/android-studio/flycast/src/main/java/com/reicast/emulator/periph/InputDeviceManager.java +++ b/shell/android-studio/flycast/src/main/java/com/reicast/emulator/periph/InputDeviceManager.java @@ -2,6 +2,8 @@ package com.reicast.emulator.periph; import android.content.Context; import android.hardware.input.InputManager; +import android.os.Build; +import android.os.VibrationEffect; import android.os.Vibrator; import android.view.InputDevice; @@ -92,11 +94,16 @@ public final class InputDeviceManager implements InputManager.InputDeviceListene if (!vibrator.hasVibrator()) return false; } - // TODO API >= 26 (Android 8.0) - if (power == 0) + + if (power == 0) { vibrator.cancel(); - else - vibrator.vibrate(duration_ms); + } else { + if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) { + vibrator.vibrate(VibrationEffect.createOneShot(duration_ms, VibrationEffect.DEFAULT_AMPLITUDE)); + } else { + vibrator.vibrate(duration_ms); + } + } return true; }