⎇ b021d6829a602218866114f86e2350d80f0500e2
keyboard/src/main/java/com/rizoma/trazo/ime/Haptics.kt
Historia
crudo
Trazo: pulido v0.4 — háptica, palabra siguiente, emojis y ajustes
1package com.rizoma.trazo.ime
2
3import android.content.Context
4import android.os.Build
5import android.os.VibrationEffect
6import android.os.Vibrator
7import android.os.VibratorManager
8import com.rizoma.trazo.data.HapticLevel
9
10/**
11 * Retorno háptico del teclado. Usa el Vibrator del sistema con control de amplitud
12 * cuando el dispositivo lo soporta; si no, cae a la vibración por defecto. Todo es
13 * best-effort: sin vibrador o con cualquier fallo, simplemente no hace nada.
14 */
15class Haptics(context: Context) {
16
17 private val vibrator: Vibrator? = run {
18 if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.S) {
19 val vm = context.getSystemService(Context.VIBRATOR_MANAGER_SERVICE) as? VibratorManager
20 vm?.defaultVibrator
21 } else {
22 @Suppress("DEPRECATION")
23 context.getSystemService(Context.VIBRATOR_SERVICE) as? Vibrator
24 }
25 }
26
27 fun tap(level: HapticLevel) {
28 val v = vibrator ?: return
29 if (!v.hasVibrator()) return
30 val (ms, amp) = when (level) {
31 HapticLevel.SUAVE -> 8L to 70
32 HapticLevel.MEDIO -> 14L to 130
33 HapticLevel.FUERTE -> 22L to 210
34 }
35 runCatching {
36 val amplitude = if (v.hasAmplitudeControl()) amp else VibrationEffect.DEFAULT_AMPLITUDE
37 v.vibrate(VibrationEffect.createOneShot(ms, amplitude))
38 }
39 }
40}