Merge pull request #14718 from JosJuice/android-vibration-length

Android: Make vibration length variable
This commit is contained in:
JMC47
2026-08-27 12:48:49 -04:00
committed by GitHub
3 changed files with 17 additions and 5 deletions

View File

@@ -186,7 +186,7 @@ object ControllerInterface {
private fun vibrate(vibrator: Vibrator) {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.TIRAMISU) {
vibrator.vibrate(
VibrationEffect.createOneShot(100, VibrationEffect.DEFAULT_AMPLITUDE),
VibrationEffect.createOneShot(10000, VibrationEffect.DEFAULT_AMPLITUDE),
VibrationAttributes.Builder().setUsage(VibrationAttributes.USAGE_MEDIA).build()
)
} else {
@@ -194,16 +194,22 @@ object ControllerInterface {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
@Suppress("DEPRECATION")
vibrator.vibrate(
VibrationEffect.createOneShot(100, VibrationEffect.DEFAULT_AMPLITUDE),
VibrationEffect.createOneShot(10000, VibrationEffect.DEFAULT_AMPLITUDE),
attributes
)
} else {
@Suppress("DEPRECATION")
vibrator.vibrate(100, attributes)
vibrator.vibrate(10000, attributes)
}
}
}
@Keep
@JvmStatic
private fun cancelVibration(vibrator: Vibrator) {
vibrator.cancel()
}
private class InputDeviceListener : InputManager.InputDeviceListener {
override external fun onInputDeviceAdded(deviceId: Int)

View File

@@ -252,9 +252,7 @@ bool Init(Core::System& system, std::unique_ptr<BootParameters> boot, const Wind
static void ResetRumble()
{
#if defined(__LIBUSB__)
GCAdapter::ResetRumble();
#endif
if (!Pad::IsInitialized())
return;
for (int i = 0; i < 4; ++i)

View File

@@ -69,6 +69,7 @@ jmethodID s_controller_interface_unregister_input_device_listener;
jmethodID s_controller_interface_get_vibrator_manager;
jmethodID s_controller_interface_get_system_vibrator_manager;
jmethodID s_controller_interface_vibrate;
jmethodID s_controller_interface_cancel_vibration;
jclass s_sensor_event_listener_class;
jmethodID s_sensor_event_listener_constructor;
@@ -602,6 +603,11 @@ public:
IDCache::GetEnvForThread()->CallStaticVoidMethod(s_controller_interface_class,
s_controller_interface_vibrate, m_vibrator);
}
else if (old_state >= 0.5 && state < 0.5)
{
IDCache::GetEnvForThread()->CallStaticVoidMethod(
s_controller_interface_class, s_controller_interface_cancel_vibration, m_vibrator);
}
}
private:
@@ -892,6 +898,8 @@ InputBackend::InputBackend(ControllerInterface* controller_interface)
"()Lorg/dolphinemu/dolphinemu/features/input/model/DolphinVibratorManager;");
s_controller_interface_vibrate =
env->GetStaticMethodID(s_controller_interface_class, "vibrate", "(Landroid/os/Vibrator;)V");
s_controller_interface_cancel_vibration = env->GetStaticMethodID(
s_controller_interface_class, "cancelVibration", "(Landroid/os/Vibrator;)V");
env->DeleteLocalRef(controller_interface_class);
const jclass sensor_event_listener_class =