diff --git a/modules/expo-bluesky-swiss-army/android/src/main/java/expo/modules/blueskyswissarmy/platforminfo/ExpoPlatformInfoModule.kt b/modules/expo-bluesky-swiss-army/android/src/main/java/expo/modules/blueskyswissarmy/platforminfo/ExpoPlatformInfoModule.kt index 189796f817..15d2a150e9 100644 --- a/modules/expo-bluesky-swiss-army/android/src/main/java/expo/modules/blueskyswissarmy/platforminfo/ExpoPlatformInfoModule.kt +++ b/modules/expo-bluesky-swiss-army/android/src/main/java/expo/modules/blueskyswissarmy/platforminfo/ExpoPlatformInfoModule.kt @@ -13,12 +13,7 @@ class ExpoPlatformInfoModule : Module() { Function("getIsReducedMotionEnabled") { val resolver = appContext.reactContext?.contentResolver ?: return@Function false val scale = Settings.Global.getString(resolver, Settings.Global.TRANSITION_ANIMATION_SCALE) ?: return@Function false - - try { - return@Function scale.toFloat() == 0f - } catch (_: Error) { - return@Function false - } + return@Function scale.toFloatOrNull() == 0f } } } diff --git a/modules/expo-bluesky-swiss-army/src/PlatformInfo/index.native.ts b/modules/expo-bluesky-swiss-army/src/PlatformInfo/index.native.ts index 09fa3824d5..7e224ef6f4 100644 --- a/modules/expo-bluesky-swiss-army/src/PlatformInfo/index.native.ts +++ b/modules/expo-bluesky-swiss-army/src/PlatformInfo/index.native.ts @@ -5,8 +5,20 @@ import {type AudioCategory} from './types' const NativeModule = requireNativeModule('ExpoPlatformInfo') +/** + * Whether the user has enabled reduced motion at the OS level. + * + * This is called at module scope during boot via src/state/persisted/schema.ts, + * so a rejected native call would crash the app on startup. We catch any native + * failure and fall back to false to keep boot safe. See Sentry issue APP-T2EW, + * where a malformed TRANSITION_ANIMATION_SCALE setting threw at startup. + */ export function getIsReducedMotionEnabled(): boolean { - return NativeModule.getIsReducedMotionEnabled() + try { + return NativeModule.getIsReducedMotionEnabled() + } catch { + return false + } } export function setAudioActive(active: boolean): void {