package expo.modules.hapticsMods import android.content.Context import android.os.Build import android.os.VibrationEffect import android.os.Vibrator import expo.modules.hapticsMods.arguments.HapticsImpactType import expo.modules.hapticsMods.arguments.HapticsNotificationType import expo.modules.hapticsMods.arguments.HapticsSelectionType import expo.modules.hapticsMods.arguments.HapticsVibrationType import expo.modules.kotlin.exception.Exceptions import expo.modules.kotlin.modules.Module import expo.modules.kotlin.modules.ModuleDefinition import android.view.HapticFeedbackConstants class HapticsModule : Module() { private val context: Context get() = appContext.reactContext ?: throw Exceptions.ReactContextLost() private val vibrator get() = context.getSystemService(Context.VIBRATOR_SERVICE) as Vibrator override fun definition() = ModuleDefinition { Name("ExpoHapticsMods") AsyncFunction("notificationAsync") { type: String -> Vibrator.vibrate(4) //vibrate(HapticsNotificationType.fromString(type)) } AsyncFunction("selectionAsync") { vibrate(HapticsSelectionType) } AsyncFunction("impactAsync") { style: String -> vibrate(HapticsImpactType.fromString(style)) } AsyncFunction("androidHapticsEngine") { type: Int -> Vibrator.vibrate(type) } } private fun vibrate(type: HapticsVibrationType) { if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) { vibrator.vibrate(VibrationEffect.createWaveform(type.timings, type.amplitudes, -1)) } else { vibrator.vibrate(type.oldSDKPattern, -1) } } }