summaryrefslogtreecommitdiffstats
path: root/src/android/app/src/main/java/org/yuzu/yuzu_emu/features/input/YuzuInputDevice.kt
diff options
context:
space:
mode:
Diffstat (limited to 'src/android/app/src/main/java/org/yuzu/yuzu_emu/features/input/YuzuInputDevice.kt')
-rw-r--r--src/android/app/src/main/java/org/yuzu/yuzu_emu/features/input/YuzuInputDevice.kt93
1 files changed, 93 insertions, 0 deletions
diff --git a/src/android/app/src/main/java/org/yuzu/yuzu_emu/features/input/YuzuInputDevice.kt b/src/android/app/src/main/java/org/yuzu/yuzu_emu/features/input/YuzuInputDevice.kt
new file mode 100644
index 000000000..15cc38c7f
--- /dev/null
+++ b/src/android/app/src/main/java/org/yuzu/yuzu_emu/features/input/YuzuInputDevice.kt
@@ -0,0 +1,93 @@
+// SPDX-FileCopyrightText: 2024 yuzu Emulator Project
+// SPDX-License-Identifier: GPL-2.0-or-later
+
+package org.yuzu.yuzu_emu.features.input
+
+import android.view.InputDevice
+import androidx.annotation.Keep
+import org.yuzu.yuzu_emu.YuzuApplication
+import org.yuzu.yuzu_emu.R
+import org.yuzu.yuzu_emu.utils.InputHandler.getGUID
+
+@Keep
+interface YuzuInputDevice {
+ fun getName(): String
+
+ fun getGUID(): String
+
+ fun getPort(): Int
+
+ fun getSupportsVibration(): Boolean
+
+ fun vibrate(intensity: Float)
+
+ fun getAxes(): Array<Int> = arrayOf()
+ fun hasKeys(keys: IntArray): BooleanArray = BooleanArray(0)
+}
+
+class YuzuPhysicalDevice(
+ private val device: InputDevice,
+ private val port: Int,
+ useSystemVibrator: Boolean
+) : YuzuInputDevice {
+ private val vibrator = if (useSystemVibrator) {
+ YuzuVibrator.getSystemVibrator()
+ } else {
+ YuzuVibrator.getControllerVibrator(device)
+ }
+
+ override fun getName(): String {
+ return device.name
+ }
+
+ override fun getGUID(): String {
+ return device.getGUID()
+ }
+
+ override fun getPort(): Int {
+ return port
+ }
+
+ override fun getSupportsVibration(): Boolean {
+ return vibrator.supportsVibration()
+ }
+
+ override fun vibrate(intensity: Float) {
+ vibrator.vibrate(intensity)
+ }
+
+ override fun getAxes(): Array<Int> = device.motionRanges.map { it.axis }.toTypedArray()
+ override fun hasKeys(keys: IntArray): BooleanArray = device.hasKeys(*keys)
+}
+
+class YuzuInputOverlayDevice(
+ private val vibration: Boolean,
+ private val port: Int
+) : YuzuInputDevice {
+ private val vibrator = YuzuVibrator.getSystemVibrator()
+
+ override fun getName(): String {
+ return YuzuApplication.appContext.getString(R.string.input_overlay)
+ }
+
+ override fun getGUID(): String {
+ return "00000000000000000000000000000000"
+ }
+
+ override fun getPort(): Int {
+ return port
+ }
+
+ override fun getSupportsVibration(): Boolean {
+ if (vibration) {
+ return vibrator.supportsVibration()
+ }
+ return false
+ }
+
+ override fun vibrate(intensity: Float) {
+ if (vibration) {
+ vibrator.vibrate(intensity)
+ }
+ }
+}