diff --git a/mobile/src/platform/haptics.ts b/mobile/src/platform/haptics.ts index f26a6b841c1..72bf2443a82 100644 --- a/mobile/src/platform/haptics.ts +++ b/mobile/src/platform/haptics.ts @@ -1,7 +1,13 @@ +import { Platform } from 'react-native' import * as Haptics from 'expo-haptics' export function triggerMediumImpact(): void { - void Haptics.impactAsync(Haptics.ImpactFeedbackStyle.Medium).catch(() => { - // Why: Expo haptics can be unavailable on some Android builds/emulators. - }) + if (Platform.OS === 'android') { + // Why: Android's Vibrator API (used by impactAsync) is unreliable for haptic + // feedback. performAndroidHapticsAsync uses the native HapticFeedbackConstants + // API which works without VIBRATE permission and feels more natural. + void Haptics.performAndroidHapticsAsync(Haptics.AndroidHaptics.Long_Press).catch(() => {}) + } else { + void Haptics.impactAsync(Haptics.ImpactFeedbackStyle.Medium).catch(() => {}) + } }