@iternio/react-native-auto-play 0.6.0 → 0.7.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (265) hide show
  1. package/README.md +59 -10
  2. package/android/src/automotive/AndroidManifest-nonnav.xml +0 -2
  3. package/android/src/automotive/AndroidManifest.xml +0 -2
  4. package/android/src/main/AndroidManifest-nonnav.xml +0 -2
  5. package/android/src/main/AndroidManifest.xml +0 -2
  6. package/android/src/main/java/com/margelo/nitro/swe/iternio/reactnativeautoplay/AndroidAutoService.kt +3 -27
  7. package/android/src/main/java/com/margelo/nitro/swe/iternio/reactnativeautoplay/HybridAutoPlayTiming.kt +122 -0
  8. package/android/src/main/java/com/margelo/nitro/swe/iternio/reactnativeautoplay/template/Parser.kt +49 -14
  9. package/installTimers.ts +3 -0
  10. package/installTimers.web.ts +2 -0
  11. package/ios/hybrid/HybridAutoPlayTiming.swift +123 -0
  12. package/jest.js +2 -0
  13. package/lib/components/SafeAreaView.js +1 -1
  14. package/lib/hybrid/HybridAutoPlayTiming.d.ts +2 -0
  15. package/lib/hybrid/HybridAutoPlayTiming.js +2 -0
  16. package/lib/hybrid/HybridVoice.js +2 -2
  17. package/lib/index.js +0 -2
  18. package/lib/index.web.d.ts +75 -0
  19. package/lib/index.web.js +72 -1
  20. package/lib/installTimers.d.ts +1 -0
  21. package/lib/installTimers.js +8 -0
  22. package/lib/installTimers.web.d.ts +1 -0
  23. package/lib/installTimers.web.js +2 -0
  24. package/lib/scenes/CarPlayDashboardScene.d.ts +3 -3
  25. package/lib/specs/AutoPlayTiming.nitro.d.ts +27 -0
  26. package/lib/specs/AutoPlayTiming.nitro.js +1 -0
  27. package/lib/types/Image.d.ts +6 -1
  28. package/lib/types/Telemetry.d.ts +1 -1
  29. package/lib/utils/AutoPlayTimers.d.ts +21 -0
  30. package/lib/utils/AutoPlayTimers.js +45 -0
  31. package/lib/utils/NitroColor.d.ts +1 -0
  32. package/lib/utils/NitroColor.js +8 -0
  33. package/lib/utils/NitroImage.d.ts +5 -2
  34. package/lib/utils/NitroImage.js +2 -2
  35. package/lib/utils/NitroManeuver.js +1 -3
  36. package/lib-cjs/Constants.js +9 -0
  37. package/lib-cjs/components/MapTemplateContext.js +10 -0
  38. package/lib-cjs/components/SafeAreaInsetsContext.js +21 -0
  39. package/lib-cjs/components/SafeAreaView.js +22 -0
  40. package/lib-cjs/components/WindowInformationWrapper.js +20 -0
  41. package/lib-cjs/hooks/useAndroidAutoTelemetry.js +115 -0
  42. package/lib-cjs/hooks/useFocusedEffect.js +35 -0
  43. package/lib-cjs/hooks/useMapTemplate.js +13 -0
  44. package/lib-cjs/hooks/useSafeAreaInsets.js +9 -0
  45. package/lib-cjs/hooks/useVoiceInput.js +42 -0
  46. package/lib-cjs/hybrid/HybridAndroidAutoTelemetry.js +4 -0
  47. package/lib-cjs/hybrid/HybridAndroidWindowInformation.js +4 -0
  48. package/lib-cjs/hybrid/HybridAutoPlay.js +5 -0
  49. package/lib-cjs/hybrid/HybridVoice.js +61 -0
  50. package/lib-cjs/index.js +71 -0
  51. package/lib-cjs/index.web.js +98 -0
  52. package/lib-cjs/scenes/AutoPlayCluster.js +140 -0
  53. package/lib-cjs/scenes/CarPlayDashboardScene.js +100 -0
  54. package/lib-cjs/specs/AndroidAutoTelemetry.nitro.js +2 -0
  55. package/lib-cjs/specs/AndroidAutomotive.nitro.js +16 -0
  56. package/lib-cjs/specs/AndroidWindowInformation.nitro.js +2 -0
  57. package/lib-cjs/specs/AutoPlay.nitro.js +2 -0
  58. package/lib-cjs/specs/CarPlayDashboard.nitro.js +2 -0
  59. package/lib-cjs/specs/Cluster.nitro.js +2 -0
  60. package/lib-cjs/specs/GridTemplate.nitro.js +2 -0
  61. package/lib-cjs/specs/InformationTemplate.nitro.js +2 -0
  62. package/lib-cjs/specs/ListTemplate.nitro.js +2 -0
  63. package/lib-cjs/specs/MapTemplate.nitro.js +2 -0
  64. package/lib-cjs/specs/MessageTemplate.nitro.js +2 -0
  65. package/lib-cjs/specs/SearchTemplate.nitro.js +2 -0
  66. package/lib-cjs/specs/SignInTemplate.nitro.js +2 -0
  67. package/lib-cjs/specs/Voice.nitro.js +2 -0
  68. package/lib-cjs/templates/GridTemplate.js +41 -0
  69. package/lib-cjs/templates/InformationTemplate.js +49 -0
  70. package/lib-cjs/templates/ListTemplate.js +33 -0
  71. package/lib-cjs/templates/MapTemplate.js +168 -0
  72. package/lib-cjs/templates/MessageTemplate.js +50 -0
  73. package/lib-cjs/templates/SearchTemplate.js +32 -0
  74. package/lib-cjs/templates/SignInTemplate.js +55 -0
  75. package/lib-cjs/templates/Template.js +40 -0
  76. package/lib-cjs/types/Button.js +12 -0
  77. package/lib-cjs/types/Event.js +2 -0
  78. package/lib-cjs/types/Image.js +2 -0
  79. package/lib-cjs/types/Maneuver.js +77 -0
  80. package/lib-cjs/types/RootComponent.js +2 -0
  81. package/lib-cjs/types/SignInMethod.js +22 -0
  82. package/lib-cjs/types/Telemetry.js +24 -0
  83. package/lib-cjs/types/Text.js +8 -0
  84. package/lib-cjs/types/Trip.js +2 -0
  85. package/lib-cjs/types/Voice.js +2 -0
  86. package/lib-cjs/utils/ErrorUtil.js +34 -0
  87. package/lib-cjs/utils/NitroAction.js +129 -0
  88. package/lib-cjs/utils/NitroAlert.js +19 -0
  89. package/lib-cjs/utils/NitroAttributedString.js +14 -0
  90. package/lib-cjs/utils/NitroColor.js +32 -0
  91. package/lib-cjs/utils/NitroGrid.js +12 -0
  92. package/lib-cjs/utils/NitroImage.js +97 -0
  93. package/lib-cjs/utils/NitroManeuver.js +79 -0
  94. package/lib-cjs/utils/NitroMapButton.js +33 -0
  95. package/lib-cjs/utils/NitroOptionsPanel.js +66 -0
  96. package/lib-cjs/utils/NitroSection.js +112 -0
  97. package/nitro.json +10 -0
  98. package/nitrogen/generated/android/ReactNativeAutoPlay+autolinking.cmake +2 -0
  99. package/nitrogen/generated/android/ReactNativeAutoPlayOnLoad.cpp +16 -0
  100. package/nitrogen/generated/android/c++/JActiveCarUxRestrictions.hpp +1 -1
  101. package/nitrogen/generated/android/c++/JAlertActionStyle.hpp +1 -1
  102. package/nitrogen/generated/android/c++/JAlertDismissalReason.hpp +1 -1
  103. package/nitrogen/generated/android/c++/JAppFocusState.hpp +1 -1
  104. package/nitrogen/generated/android/c++/JAssetImage.hpp +18 -18
  105. package/nitrogen/generated/android/c++/JAutoText.hpp +1 -1
  106. package/nitrogen/generated/android/c++/JBooleanTelemetryItem.hpp +1 -1
  107. package/nitrogen/generated/android/c++/JCarUxRestrictions.hpp +1 -1
  108. package/nitrogen/generated/android/c++/JChargingConnector.hpp +1 -1
  109. package/nitrogen/generated/android/c++/JClusterEventName.hpp +1 -1
  110. package/nitrogen/generated/android/c++/JColorScheme.hpp +1 -1
  111. package/nitrogen/generated/android/c++/JDistance.hpp +1 -1
  112. package/nitrogen/generated/android/c++/JDistanceUnits.hpp +1 -1
  113. package/nitrogen/generated/android/c++/JDurationWithTimeZone.hpp +1 -1
  114. package/nitrogen/generated/android/c++/JEventName.hpp +1 -1
  115. package/nitrogen/generated/android/c++/JForkType.hpp +1 -1
  116. package/nitrogen/generated/android/c++/JGlyphImage.hpp +1 -1
  117. package/nitrogen/generated/android/c++/JGoogleSignIn.hpp +1 -1
  118. package/nitrogen/generated/android/c++/JGoogleSignInAccount.hpp +1 -1
  119. package/nitrogen/generated/android/c++/JGridImageSize.hpp +1 -1
  120. package/nitrogen/generated/android/c++/JGridTemplateConfig.hpp +1 -1
  121. package/nitrogen/generated/android/c++/JHybridAutoPlayTimingSpec.cpp +59 -0
  122. package/nitrogen/generated/android/c++/JHybridAutoPlayTimingSpec.hpp +64 -0
  123. package/nitrogen/generated/android/c++/JImageLane.hpp +1 -1
  124. package/nitrogen/generated/android/c++/JInformationTemplateConfig.hpp +1 -1
  125. package/nitrogen/generated/android/c++/JInputSignIn.hpp +1 -1
  126. package/nitrogen/generated/android/c++/JKeepType.hpp +1 -1
  127. package/nitrogen/generated/android/c++/JKeyboardType.hpp +1 -1
  128. package/nitrogen/generated/android/c++/JLaneGuidance.hpp +1 -1
  129. package/nitrogen/generated/android/c++/JListImageType.hpp +1 -1
  130. package/nitrogen/generated/android/c++/JListTemplateConfig.hpp +1 -1
  131. package/nitrogen/generated/android/c++/JLocation.hpp +1 -1
  132. package/nitrogen/generated/android/c++/JManeuverState.hpp +1 -1
  133. package/nitrogen/generated/android/c++/JManeuverType.hpp +1 -1
  134. package/nitrogen/generated/android/c++/JMapTemplateConfig.hpp +1 -1
  135. package/nitrogen/generated/android/c++/JMessageTemplateConfig.hpp +1 -1
  136. package/nitrogen/generated/android/c++/JNavigationAlertAction.hpp +1 -1
  137. package/nitrogen/generated/android/c++/JNitroAction.hpp +1 -1
  138. package/nitrogen/generated/android/c++/JNitroActionType.hpp +1 -1
  139. package/nitrogen/generated/android/c++/JNitroAlignment.hpp +1 -1
  140. package/nitrogen/generated/android/c++/JNitroAttributedString.hpp +1 -1
  141. package/nitrogen/generated/android/c++/JNitroAttributedStringImage.hpp +1 -1
  142. package/nitrogen/generated/android/c++/JNitroBaseMapTemplateConfig.hpp +1 -1
  143. package/nitrogen/generated/android/c++/JNitroButtonStyle.hpp +1 -1
  144. package/nitrogen/generated/android/c++/JNitroChargerLocation.hpp +1 -1
  145. package/nitrogen/generated/android/c++/JNitroChargerOutlet.hpp +1 -1
  146. package/nitrogen/generated/android/c++/JNitroColor.hpp +9 -5
  147. package/nitrogen/generated/android/c++/JNitroGridButton.hpp +1 -1
  148. package/nitrogen/generated/android/c++/JNitroLoadingManeuver.hpp +1 -1
  149. package/nitrogen/generated/android/c++/JNitroMapButton.hpp +1 -1
  150. package/nitrogen/generated/android/c++/JNitroMapButtonType.hpp +1 -1
  151. package/nitrogen/generated/android/c++/JNitroMessageManeuver.hpp +1 -1
  152. package/nitrogen/generated/android/c++/JNitroNavigationAlert.hpp +1 -1
  153. package/nitrogen/generated/android/c++/JNitroOptionsPanelChargerSection.hpp +1 -1
  154. package/nitrogen/generated/android/c++/JNitroOptionsPanelConfig.hpp +1 -1
  155. package/nitrogen/generated/android/c++/JNitroOptionsPanelGridSection.hpp +1 -1
  156. package/nitrogen/generated/android/c++/JNitroRoutingManeuver.hpp +1 -1
  157. package/nitrogen/generated/android/c++/JNitroRow.hpp +1 -1
  158. package/nitrogen/generated/android/c++/JNitroSection.hpp +1 -1
  159. package/nitrogen/generated/android/c++/JNitroSectionType.hpp +1 -1
  160. package/nitrogen/generated/android/c++/JNumericTelemetryItem.hpp +1 -1
  161. package/nitrogen/generated/android/c++/JOffRampType.hpp +1 -1
  162. package/nitrogen/generated/android/c++/JOnRampType.hpp +1 -1
  163. package/nitrogen/generated/android/c++/JPermissionRequestResult.hpp +1 -1
  164. package/nitrogen/generated/android/c++/JPinSignIn.hpp +1 -1
  165. package/nitrogen/generated/android/c++/JPoint.hpp +1 -1
  166. package/nitrogen/generated/android/c++/JPreferredImageLane.hpp +1 -1
  167. package/nitrogen/generated/android/c++/JQrSignIn.hpp +1 -1
  168. package/nitrogen/generated/android/c++/JRemoteImage.hpp +1 -1
  169. package/nitrogen/generated/android/c++/JRouteChoice.hpp +1 -1
  170. package/nitrogen/generated/android/c++/JSafeAreaInsets.hpp +1 -1
  171. package/nitrogen/generated/android/c++/JSearchTemplateConfig.hpp +1 -1
  172. package/nitrogen/generated/android/c++/JSignInMethods.hpp +1 -1
  173. package/nitrogen/generated/android/c++/JSignInTemplateConfig.hpp +1 -1
  174. package/nitrogen/generated/android/c++/JStringTelemetryItem.hpp +1 -1
  175. package/nitrogen/generated/android/c++/JTelemetry.hpp +1 -1
  176. package/nitrogen/generated/android/c++/JTextInputType.hpp +1 -1
  177. package/nitrogen/generated/android/c++/JTrafficSide.hpp +1 -1
  178. package/nitrogen/generated/android/c++/JTravelEstimates.hpp +1 -1
  179. package/nitrogen/generated/android/c++/JTripConfig.hpp +1 -1
  180. package/nitrogen/generated/android/c++/JTripPoint.hpp +1 -1
  181. package/nitrogen/generated/android/c++/JTripPreviewTextConfiguration.hpp +1 -1
  182. package/nitrogen/generated/android/c++/JTripSelectorCallback.hpp +1 -1
  183. package/nitrogen/generated/android/c++/JTripsConfig.hpp +1 -1
  184. package/nitrogen/generated/android/c++/JTurnType.hpp +1 -1
  185. package/nitrogen/generated/android/c++/JVehicleTelemetryItem.hpp +1 -1
  186. package/nitrogen/generated/android/c++/JVisibilityState.hpp +1 -1
  187. package/nitrogen/generated/android/c++/JVisibleTravelEstimate.hpp +1 -1
  188. package/nitrogen/generated/android/c++/JVoiceAudioEncoding.hpp +1 -1
  189. package/nitrogen/generated/android/c++/JVoiceInputChunk.hpp +1 -1
  190. package/nitrogen/generated/android/c++/JVoiceInputResult.hpp +1 -1
  191. package/nitrogen/generated/android/c++/JWaypointCoordinate.hpp +1 -1
  192. package/nitrogen/generated/android/c++/JWindowInformation.hpp +1 -1
  193. package/nitrogen/generated/android/c++/JZoomEvent.hpp +1 -1
  194. package/nitrogen/generated/android/kotlin/com/margelo/nitro/swe/iternio/reactnativeautoplay/AssetImage.kt +15 -15
  195. package/nitrogen/generated/android/kotlin/com/margelo/nitro/swe/iternio/reactnativeautoplay/Func_void.kt +0 -2
  196. package/nitrogen/generated/android/kotlin/com/margelo/nitro/swe/iternio/reactnativeautoplay/Func_void_ActiveCarUxRestrictions.kt +0 -2
  197. package/nitrogen/generated/android/kotlin/com/margelo/nitro/swe/iternio/reactnativeautoplay/Func_void_AlertDismissalReason.kt +0 -2
  198. package/nitrogen/generated/android/kotlin/com/margelo/nitro/swe/iternio/reactnativeautoplay/Func_void_AppFocusState.kt +0 -2
  199. package/nitrogen/generated/android/kotlin/com/margelo/nitro/swe/iternio/reactnativeautoplay/Func_void_ColorScheme.kt +0 -2
  200. package/nitrogen/generated/android/kotlin/com/margelo/nitro/swe/iternio/reactnativeautoplay/Func_void_Point.kt +0 -2
  201. package/nitrogen/generated/android/kotlin/com/margelo/nitro/swe/iternio/reactnativeautoplay/Func_void_Point_double.kt +0 -2
  202. package/nitrogen/generated/android/kotlin/com/margelo/nitro/swe/iternio/reactnativeautoplay/Func_void_Point_std__optional_Point_.kt +0 -2
  203. package/nitrogen/generated/android/kotlin/com/margelo/nitro/swe/iternio/reactnativeautoplay/Func_void_SafeAreaInsets.kt +0 -2
  204. package/nitrogen/generated/android/kotlin/com/margelo/nitro/swe/iternio/reactnativeautoplay/Func_void_VisibilityState.kt +0 -2
  205. package/nitrogen/generated/android/kotlin/com/margelo/nitro/swe/iternio/reactnativeautoplay/Func_void_VoiceInputChunk.kt +0 -2
  206. package/nitrogen/generated/android/kotlin/com/margelo/nitro/swe/iternio/reactnativeautoplay/Func_void_WindowInformation.kt +0 -2
  207. package/nitrogen/generated/android/kotlin/com/margelo/nitro/swe/iternio/reactnativeautoplay/Func_void_bool.kt +0 -2
  208. package/nitrogen/generated/android/kotlin/com/margelo/nitro/swe/iternio/reactnativeautoplay/Func_void_std__optional_Location__std__optional_std__string_.kt +0 -2
  209. package/nitrogen/generated/android/kotlin/com/margelo/nitro/swe/iternio/reactnativeautoplay/Func_void_std__optional_Telemetry_.kt +0 -2
  210. package/nitrogen/generated/android/kotlin/com/margelo/nitro/swe/iternio/reactnativeautoplay/Func_void_std__optional_bool_.kt +0 -2
  211. package/nitrogen/generated/android/kotlin/com/margelo/nitro/swe/iternio/reactnativeautoplay/Func_void_std__optional_std__string__std__optional_GoogleSignInAccount_.kt +0 -2
  212. package/nitrogen/generated/android/kotlin/com/margelo/nitro/swe/iternio/reactnativeautoplay/Func_void_std__string.kt +0 -2
  213. package/nitrogen/generated/android/kotlin/com/margelo/nitro/swe/iternio/reactnativeautoplay/Func_void_std__string_ColorScheme.kt +0 -2
  214. package/nitrogen/generated/android/kotlin/com/margelo/nitro/swe/iternio/reactnativeautoplay/Func_void_std__string_ZoomEvent.kt +0 -2
  215. package/nitrogen/generated/android/kotlin/com/margelo/nitro/swe/iternio/reactnativeautoplay/Func_void_std__string_bool.kt +0 -2
  216. package/nitrogen/generated/android/kotlin/com/margelo/nitro/swe/iternio/reactnativeautoplay/Func_void_std__string_std__string.kt +0 -2
  217. package/nitrogen/generated/android/kotlin/com/margelo/nitro/swe/iternio/reactnativeautoplay/HybridAndroidAutoTelemetrySpec.kt +2 -0
  218. package/nitrogen/generated/android/kotlin/com/margelo/nitro/swe/iternio/reactnativeautoplay/HybridAndroidAutomotiveSpec.kt +2 -0
  219. package/nitrogen/generated/android/kotlin/com/margelo/nitro/swe/iternio/reactnativeautoplay/HybridAndroidWindowInformationSpec.kt +2 -0
  220. package/nitrogen/generated/android/kotlin/com/margelo/nitro/swe/iternio/reactnativeautoplay/HybridAutoPlaySpec.kt +2 -0
  221. package/nitrogen/generated/android/kotlin/com/margelo/nitro/swe/iternio/reactnativeautoplay/HybridAutoPlayTimingSpec.kt +65 -0
  222. package/nitrogen/generated/android/kotlin/com/margelo/nitro/swe/iternio/reactnativeautoplay/HybridClusterSpec.kt +2 -0
  223. package/nitrogen/generated/android/kotlin/com/margelo/nitro/swe/iternio/reactnativeautoplay/HybridGridTemplateSpec.kt +2 -0
  224. package/nitrogen/generated/android/kotlin/com/margelo/nitro/swe/iternio/reactnativeautoplay/HybridInformationTemplateSpec.kt +2 -0
  225. package/nitrogen/generated/android/kotlin/com/margelo/nitro/swe/iternio/reactnativeautoplay/HybridListTemplateSpec.kt +2 -0
  226. package/nitrogen/generated/android/kotlin/com/margelo/nitro/swe/iternio/reactnativeautoplay/HybridMapTemplateSpec.kt +2 -0
  227. package/nitrogen/generated/android/kotlin/com/margelo/nitro/swe/iternio/reactnativeautoplay/HybridMessageTemplateSpec.kt +2 -0
  228. package/nitrogen/generated/android/kotlin/com/margelo/nitro/swe/iternio/reactnativeautoplay/HybridSearchTemplateSpec.kt +2 -0
  229. package/nitrogen/generated/android/kotlin/com/margelo/nitro/swe/iternio/reactnativeautoplay/HybridSignInTemplateSpec.kt +2 -0
  230. package/nitrogen/generated/android/kotlin/com/margelo/nitro/swe/iternio/reactnativeautoplay/HybridVoiceSpec.kt +2 -0
  231. package/nitrogen/generated/android/kotlin/com/margelo/nitro/swe/iternio/reactnativeautoplay/NitroColor.kt +9 -4
  232. package/nitrogen/generated/ios/ReactNativeAutoPlay-Swift-Cxx-Bridge.cpp +17 -0
  233. package/nitrogen/generated/ios/ReactNativeAutoPlay-Swift-Cxx-Bridge.hpp +35 -9
  234. package/nitrogen/generated/ios/ReactNativeAutoPlay-Swift-Cxx-Umbrella.hpp +5 -0
  235. package/nitrogen/generated/ios/ReactNativeAutoPlayAutolinking.mm +8 -0
  236. package/nitrogen/generated/ios/ReactNativeAutoPlayAutolinking.swift +12 -0
  237. package/nitrogen/generated/ios/c++/HybridAutoPlayTimingSpecSwift.cpp +11 -0
  238. package/nitrogen/generated/ios/c++/HybridAutoPlayTimingSpecSwift.hpp +88 -0
  239. package/nitrogen/generated/ios/swift/AssetImage.swift +13 -13
  240. package/nitrogen/generated/ios/swift/HybridAutoPlayTimingSpec.swift +56 -0
  241. package/nitrogen/generated/ios/swift/HybridAutoPlayTimingSpec_cxx.swift +154 -0
  242. package/nitrogen/generated/ios/swift/NitroColor.swift +20 -2
  243. package/nitrogen/generated/shared/c++/AssetImage.hpp +18 -18
  244. package/nitrogen/generated/shared/c++/HybridAutoPlayTimingSpec.cpp +22 -0
  245. package/nitrogen/generated/shared/c++/HybridAutoPlayTimingSpec.hpp +63 -0
  246. package/nitrogen/generated/shared/c++/NitroColor.hpp +7 -3
  247. package/package.json +12 -6
  248. package/src/components/SafeAreaView.tsx +1 -1
  249. package/src/hybrid/HybridAutoPlayTiming.ts +5 -0
  250. package/src/hybrid/HybridVoice.ts +2 -2
  251. package/src/index.ts +0 -3
  252. package/src/index.web.ts +166 -0
  253. package/src/installTimers.ts +9 -0
  254. package/src/installTimers.web.ts +2 -0
  255. package/src/specs/AutoPlayTiming.nitro.ts +25 -0
  256. package/src/types/Image.ts +6 -1
  257. package/src/types/Telemetry.ts +1 -1
  258. package/src/utils/AutoPlayTimers.ts +60 -0
  259. package/src/utils/NitroColor.ts +10 -1
  260. package/src/utils/NitroImage.ts +14 -8
  261. package/src/utils/NitroManeuver.ts +1 -4
  262. package/android/src/main/java/com/margelo/nitro/swe/iternio/reactnativeautoplay/HeadlessTaskService.kt +0 -36
  263. package/lib/AutoPlayHeadlessJsTask.d.ts +0 -5
  264. package/lib/AutoPlayHeadlessJsTask.js +0 -14
  265. package/src/AutoPlayHeadlessJsTask.ts +0 -22
package/src/index.web.ts CHANGED
@@ -0,0 +1,166 @@
1
+ // Web/Jest stub for the native CarPlay/Android Auto surface. Nothing here talks to a real native
2
+ // module — every function call resolves to `undefined` (or an already-resolved promise, which is
3
+ // indistinguishable from `undefined` to an `await`er) rather than throwing. Types are preserved by
4
+ // casting against the real exports, so callers still get full type-checking/autocomplete.
5
+ //
6
+ // Anything below that's already safe as-is (pure types, plain enums, or modules that neither
7
+ // create native objects nor import anything that does) is re-exported directly instead of stubbed.
8
+
9
+ import { createElement } from 'react';
10
+ import { View, type ViewProps } from 'react-native';
11
+ import type { AndroidAutomotive } from './specs/AndroidAutomotive.nitro';
12
+ import type { AutoPlay } from './specs/AutoPlay.nitro';
13
+ import type { Voice } from './specs/Voice.nitro';
14
+ import type { GridTemplate as RealGridTemplate } from './templates/GridTemplate';
15
+ import type { InformationTemplate as RealInformationTemplate } from './templates/InformationTemplate';
16
+ import type { ListTemplate as RealListTemplate } from './templates/ListTemplate';
17
+ import type { MapTemplate as RealMapTemplate } from './templates/MapTemplate';
18
+ import type { MessageTemplate as RealMessageTemplate } from './templates/MessageTemplate';
19
+ import type { SearchTemplate as RealSearchTemplate } from './templates/SearchTemplate';
20
+ import type { SignInTemplate as RealSignInTemplate } from './templates/SignInTemplate';
21
+ import type { Template as RealTemplate } from './templates/Template';
22
+ import type { SafeAreaInsets } from './types/Event';
23
+ import type { Telemetry } from './types/Telemetry';
24
+
25
+ function noop() {
26
+ return undefined;
27
+ }
28
+
29
+ /** Any property access returns a no-op function, so any method call is safe regardless of name. */
30
+ function createNoopObject<T>(): T {
31
+ return new Proxy(
32
+ {},
33
+ {
34
+ get: (_target, prop) => (prop === 'then' || prop === 'toJSON' ? undefined : noop),
35
+ }
36
+ ) as T;
37
+ }
38
+
39
+ function createNoopClass<T>(): new (...args: never[]) => T {
40
+ function NoopInstance() {
41
+ return createNoopObject<T>();
42
+ }
43
+ return NoopInstance as unknown as new (
44
+ ...args: never[]
45
+ ) => T;
46
+ }
47
+
48
+ export * from './Constants';
49
+ export * from './hooks/useMapTemplate';
50
+ export type {
51
+ ActiveCarUxRestrictions,
52
+ AppFocusState,
53
+ } from './specs/AndroidAutomotive.nitro';
54
+ export { CarUxRestrictions } from './specs/AndroidAutomotive.nitro';
55
+ export type { GridImageSize, GridTemplateConfig } from './templates/GridTemplate';
56
+ export type { InformationItems, InformationTemplateConfig } from './templates/InformationTemplate';
57
+ export type {
58
+ DefaultRow,
59
+ ListImageType,
60
+ ListTemplateConfig,
61
+ MultiSection,
62
+ RadioRow,
63
+ Section,
64
+ SingleSection,
65
+ TextRow,
66
+ ToggleRow,
67
+ WaypointCoordinate,
68
+ WaypointRow,
69
+ } from './templates/ListTemplate';
70
+ export type {
71
+ BaseMapTemplateConfig,
72
+ ChargerLocation,
73
+ ChargerOutlet,
74
+ ChargingConnector,
75
+ HeaderActionsAndroidMap,
76
+ MapButtons,
77
+ MapHeaderActions,
78
+ MapTemplateConfig,
79
+ OptionsPanelChargerSection,
80
+ OptionsPanelConfig,
81
+ OptionsPanelGridSection,
82
+ OptionsPanelListSection,
83
+ OptionsPanelSection,
84
+ PanelActionsIos,
85
+ PanelHeaderActions,
86
+ Point,
87
+ TripSelectorCallback,
88
+ VisibleTravelEstimate,
89
+ } from './templates/MapTemplate';
90
+ export type { MessageTemplateConfig } from './templates/MessageTemplate';
91
+ export type { SearchSection, SearchTemplateConfig } from './templates/SearchTemplate';
92
+ export type { SignInTemplateConfig } from './templates/SignInTemplate';
93
+ export type {
94
+ ActionButton,
95
+ HeaderActions,
96
+ HeaderActionsAndroid,
97
+ HeaderActionsIos,
98
+ NitroBaseMapTemplateConfig,
99
+ NitroTemplateConfig,
100
+ TemplateConfig,
101
+ } from './templates/Template';
102
+ export * from './types/Button';
103
+ export * from './types/Event';
104
+ export * from './types/Image';
105
+ export * from './types/Maneuver';
106
+ export * from './types/RootComponent';
107
+ export * from './types/SignInMethod';
108
+ export * from './types/Telemetry';
109
+ export * from './types/Text';
110
+ export * from './types/Trip';
111
+ export type { VoiceInputChunk, VoiceInputOptions, VoiceInputResult } from './types/Voice';
112
+ export * from './utils/ErrorUtil';
113
+ export type {
114
+ AlertPriority,
115
+ NavigationAlert as Alert,
116
+ NavigationAlertAction as AlertAction,
117
+ } from './utils/NitroAlert';
118
+ export type { ThemedColor } from './utils/NitroColor';
119
+ export type { GridButton } from './utils/NitroGrid';
120
+
121
+ export enum AutoPlayModules {
122
+ App = 'main',
123
+ AutoPlayRoot = 'AutoPlayRoot',
124
+ CarPlayDashboard = 'CarPlayDashboard',
125
+ }
126
+
127
+ const NO_INSETS: SafeAreaInsets = { top: 0, bottom: 0, left: 0, right: 0 };
128
+ export const useSafeAreaInsets = () => NO_INSETS;
129
+ export const SafeAreaView = (props: ViewProps) => createElement(View, props);
130
+
131
+ export function setIconFont(_name: string, _glyphMap?: Record<string, number>): void {}
132
+
133
+ export const useFocusedEffect = () => {};
134
+
135
+ export const useVoiceInput = () => ({
136
+ voiceInputResult: undefined,
137
+ resetVoiceInputResult: () => {},
138
+ });
139
+
140
+ export const useAndroidAutoTelemetry = (): {
141
+ permissionsGranted: boolean | null;
142
+ telemetry: Telemetry | undefined;
143
+ error: string | undefined;
144
+ } => ({
145
+ permissionsGranted: null,
146
+ telemetry: undefined,
147
+ error: undefined,
148
+ });
149
+
150
+ export const AutoPlayCluster = createNoopObject<Record<string, unknown>>();
151
+ export const CarPlayDashboard = createNoopObject<Record<string, unknown>>();
152
+
153
+ export const HybridAndroidAutomotive: AndroidAutomotive | null = null;
154
+ export { HybridAndroidAutoTelemetry } from './hybrid/HybridAndroidAutoTelemetry';
155
+ export { HybridAndroidWindowInformation } from './hybrid/HybridAndroidWindowInformation';
156
+ export const HybridAutoPlay = createNoopObject<AutoPlay>();
157
+ export const HybridVoice = createNoopObject<Voice>();
158
+
159
+ export const Template = createNoopClass<InstanceType<typeof RealTemplate>>();
160
+ export const ListTemplate = createNoopClass<RealListTemplate>();
161
+ export const GridTemplate = createNoopClass<RealGridTemplate>();
162
+ export const InformationTemplate = createNoopClass<RealInformationTemplate>();
163
+ export const MessageTemplate = createNoopClass<RealMessageTemplate>();
164
+ export const MapTemplate = createNoopClass<RealMapTemplate>();
165
+ export const SearchTemplate = createNoopClass<RealSearchTemplate>();
166
+ export const SignInTemplate = createNoopClass<RealSignInTemplate>();
@@ -0,0 +1,9 @@
1
+ // Side-effect-only entry point, re-exported at the package root as `installTimers` (see
2
+ // ../installTimers.ts) for `import '@iternio/react-native-auto-play/installTimers';` as the
3
+ // app's first import. installAutoPlayTimers() itself isn't part of the public API -- funneling
4
+ // installation through this one module is what actually guarantees "runs before anything else
5
+ // captures the original globals" (see the README) instead of just documenting it as a rule
6
+ // callers have to get right.
7
+ import { installAutoPlayTimers } from './utils/AutoPlayTimers';
8
+
9
+ installAutoPlayTimers();
@@ -0,0 +1,2 @@
1
+ // Web/Jest stub -- nothing to install there. See installTimers.ts.
2
+ export {};
@@ -0,0 +1,25 @@
1
+ import type { HybridObject } from 'react-native-nitro-modules';
2
+
3
+ /**
4
+ * Backs setTimeout/setInterval with a scheduler that never pauses -- unlike RN's own JS
5
+ * timers, which RN throttles or pauses whenever the app backgrounds, regardless of whether
6
+ * the process is actually still running.
7
+ *
8
+ * iOS: CarPlay keeps this app's process alive and driving the external screen even when the
9
+ * phone's own screen is off, but RN's own RCTTiming still pauses in that state regardless.
10
+ *
11
+ * Android: JavaTimerManager only keeps ticking while the host is resumed *or* a headless JS
12
+ * task is running -- previously satisfied by registering a permanent no-op headless task
13
+ * (see AutoPlayHeadlessJsTask), which this replaces.
14
+ *
15
+ * All due-time bookkeeping lives here natively (mirroring RCTTiming's/JavaTimerManager's own
16
+ * architecture) so JS only crosses the bridge when a timer actually fires, not on every tick.
17
+ */
18
+ export interface AutoPlayTiming extends HybridObject<{ ios: 'swift'; android: 'kotlin' }> {
19
+ /**
20
+ * Schedules `callback` to run after `durationMs`, repeating every `durationMs` if `repeats`
21
+ * is true. Returns an id to pass to `deleteTimer`.
22
+ */
23
+ createTimer(callback: () => void, durationMs: number, repeats: boolean): number;
24
+ deleteTimer(id: number): void;
25
+ }
@@ -24,7 +24,8 @@ export type GlyphMapKey = keyof AutoPlayGlyphMap extends never
24
24
  type GlyphStyleFields = {
25
25
  /**
26
26
  * Sets the icon dark and light mode color or a single color for both.
27
- * Defaults to white for dark mode and black for light mode if not specified.
27
+ * Defaults to `'default'` if not specified, which is white for dark mode and black for light mode.
28
+ * On Android Auto the host tint that follows the template is not applied when `backgroundColor` is not transparent.
28
29
  * Might not get applied everywhere like MapTemplate buttons on Android.
29
30
  */
30
31
  color?: ThemedColor | string;
@@ -61,6 +62,8 @@ export type AutoImage =
61
62
  /**
62
63
  * if specified the image gets tinted, if not it will just use the original image
63
64
  * Might not get applied everywhere like MapTemplate buttons on Android.
65
+ * Use `'default'` for monochrome icons that must stay readable on both dark and light
66
+ * Android Auto templates (17.8+), see README.
64
67
  */
65
68
  color?: ThemedColor | string;
66
69
  type: 'asset';
@@ -70,6 +73,8 @@ export type AutoImage =
70
73
  uri: string;
71
74
  /**
72
75
  * if specified the image gets tinted, if not it will just use the original image
76
+ * Use `'default'` for monochrome icons that must stay readable on both dark and light
77
+ * Android Auto templates (17.8+), see README.
73
78
  */
74
79
  color?: ThemedColor | string;
75
80
  /**
@@ -1,4 +1,4 @@
1
- import type { Permission } from 'react-native/types';
1
+ import type { Permission } from 'react-native';
2
2
 
3
3
  export type AndroidAutoPermissions =
4
4
  | Permission
@@ -0,0 +1,60 @@
1
+ import { HybridAutoPlayTiming } from '../hybrid/HybridAutoPlayTiming';
2
+
3
+ type TimerCallback = (...args: unknown[]) => void;
4
+
5
+ let installed = false;
6
+
7
+ /**
8
+ * Replaces the global `setTimeout`/`setInterval`/`clearTimeout`/`clearInterval` and
9
+ * `requestAnimationFrame`/`cancelAnimationFrame` with implementations backed by the native
10
+ * `AutoPlayTiming` module, so they keep running while the app is actively driving a car
11
+ * surface even though the phone itself is backgrounded or its screen is locked. React
12
+ * Native's own timers throttle or pause in that state regardless of whether the process is
13
+ * actually still alive, which would otherwise stall ETA updates and telemetry polling.
14
+ *
15
+ * `requestIdleCallback`/`cancelIdleCallback` are deliberately not covered: bridgeless RN
16
+ * backs those with a separate native module unrelated to `setTimeout`/`requestAnimationFrame`
17
+ * (and its own callback delivery path is an unimplemented stub on iOS), so there is nothing
18
+ * for this library to intercept there.
19
+ *
20
+ * All due-time bookkeeping happens natively -- this is a thin pass-through, so JS only
21
+ * crosses the bridge when a timer actually fires, not on some fixed interval.
22
+ *
23
+ * Call this **once**, as early as possible in your app -- ideally the first line of your
24
+ * entry file, before any other import -- so nothing else has already captured a reference to
25
+ * the original globals. Safe to call more than once; only the first call has any effect.
26
+ */
27
+ export function installAutoPlayTimers(): void {
28
+ if (installed || HybridAutoPlayTiming == null) {
29
+ return;
30
+ }
31
+ installed = true;
32
+
33
+ const timing = HybridAutoPlayTiming;
34
+
35
+ const schedule =
36
+ (repeats: boolean) =>
37
+ (callback: TimerCallback, delay?: number, ...args: unknown[]): number =>
38
+ timing.createTimer(() => callback(...args), delay ?? 0, repeats);
39
+
40
+ const clear = (id: unknown): void => {
41
+ if (typeof id === 'number') {
42
+ timing.deleteTimer(id);
43
+ }
44
+ };
45
+
46
+ globalThis.setTimeout = schedule(false) as unknown as typeof setTimeout;
47
+ globalThis.setInterval = schedule(true) as unknown as typeof setInterval;
48
+ globalThis.clearTimeout = clear as unknown as typeof clearTimeout;
49
+ globalThis.clearInterval = clear as unknown as typeof clearInterval;
50
+
51
+ // Mirrors bridgeless RN's own implementation: requestAnimationFrame is setTimeout(0) with
52
+ // a performance.now() timestamp handed to the callback, and cancelAnimationFrame deletes
53
+ // the same underlying timer clearTimeout would.
54
+ const now = () =>
55
+ (globalThis as { performance?: { now(): number } }).performance?.now() ?? Date.now();
56
+
57
+ globalThis.requestAnimationFrame = ((callback: (timestamp: number) => void): number =>
58
+ timing.createTimer(() => callback(now()), 0, false)) as unknown as typeof requestAnimationFrame;
59
+ globalThis.cancelAnimationFrame = clear as unknown as typeof cancelAnimationFrame;
60
+ }
@@ -1,8 +1,14 @@
1
1
  import { processColor } from 'react-native';
2
2
 
3
- export type NitroColor = { lightColor: number; darkColor: number };
3
+ export type NitroColor = { lightColor: number; darkColor: number; isDefault?: boolean };
4
4
  export type ThemedColor = { lightColor: string; darkColor: string };
5
5
 
6
+ const DefaultNitroColor = {
7
+ darkColor: convertColor('white'),
8
+ lightColor: convertColor('black'),
9
+ isDefault: true,
10
+ };
11
+
6
12
  function convertColor(color: string): number;
7
13
  function convertColor(color?: string): number | undefined;
8
14
  function convertColor(color?: string): number | undefined {
@@ -18,6 +24,9 @@ function convert(color?: ThemedColor | string): NitroColor | undefined {
18
24
  }
19
25
 
20
26
  if (typeof color === 'string') {
27
+ if (color === 'default') {
28
+ return DefaultNitroColor;
29
+ }
21
30
  const convertedColor = convertColor(color);
22
31
  return { darkColor: convertedColor, lightColor: convertedColor };
23
32
  }
@@ -1,4 +1,4 @@
1
- import { Image, type ImageResolvedAssetSource } from 'react-native';
1
+ import { Image } from 'react-native';
2
2
  import type { AutoImage } from '../types/Image';
3
3
  import { type NitroColor, NitroColorUtil } from './NitroColor';
4
4
 
@@ -64,7 +64,11 @@ function resolveGlyph(image: Extract<AutoImage, { type: 'glyph' }>): number {
64
64
  throw new Error('Glyph image must provide either `name` or `codepoint`.');
65
65
  }
66
66
 
67
- interface AssetImage extends ImageResolvedAssetSource {
67
+ interface AssetImage {
68
+ uri: string;
69
+ width: number;
70
+ height: number;
71
+ scale: number;
68
72
  color?: NitroColor;
69
73
  packager_asset: boolean;
70
74
  }
@@ -96,11 +100,7 @@ function convert(image?: AutoImage): NitroImage | undefined {
96
100
  }
97
101
 
98
102
  if (image.type === 'glyph') {
99
- const {
100
- color = { darkColor: 'white', lightColor: 'black' },
101
- fontScale,
102
- backgroundColor = 'transparent',
103
- } = image;
103
+ const { color = 'default', fontScale, backgroundColor = 'transparent' } = image;
104
104
 
105
105
  return {
106
106
  glyph: resolveGlyph(image),
@@ -123,7 +123,13 @@ function convert(image?: AutoImage): NitroImage | undefined {
123
123
  // so the input allows all optional parameters which are returned as is even though
124
124
  // the return type claims to not have any optional parameters...
125
125
  // we specify some default values to not crash because of proper typing required by nitro-modules
126
- const { height = 0, scale = 0, uri, width = 0, ...rest } = Image.resolveAssetSource(image.image);
126
+ const {
127
+ height = 0,
128
+ scale = 0,
129
+ uri = '',
130
+ width = 0,
131
+ ...rest
132
+ } = Image.resolveAssetSource(image.image) ?? {};
127
133
 
128
134
  const assetImage: AssetImage = {
129
135
  height,
@@ -71,10 +71,7 @@ function convertManeuverImage(image?: ManeuverImage): NitroImage | undefined {
71
71
  }
72
72
 
73
73
  if (image.type === 'glyph') {
74
- const color =
75
- typeof image.color === 'string'
76
- ? image.color
77
- : (image.color ?? { darkColor: 'white', lightColor: 'black' });
74
+ const color = typeof image.color === 'string' ? image.color : (image.color ?? 'default');
78
75
  return NitroImageUtil.convert({
79
76
  ...image,
80
77
  color: color,
@@ -1,36 +0,0 @@
1
- package com.margelo.nitro.swe.iternio.reactnativeautoplay
2
-
3
- import android.content.Intent
4
- import android.os.Binder
5
- import android.os.IBinder
6
- import com.facebook.react.HeadlessJsTaskService
7
- import com.facebook.react.bridge.Arguments
8
- import com.facebook.react.bridge.UiThreadUtil
9
- import com.facebook.react.jstasks.HeadlessJsTaskConfig
10
-
11
- class HeadlessTaskService : HeadlessJsTaskService() {
12
- // we use a bound service so it will never be killed when Android Auto is active
13
- inner class LocalBinder : Binder() {
14
- fun getService() = this@HeadlessTaskService
15
- }
16
-
17
- private val mBinder = LocalBinder()
18
-
19
- override fun getTaskConfig(intent: Intent?): HeadlessJsTaskConfig {
20
- val data = intent?.extras?.let {
21
- Arguments.fromBundle(it)
22
- } ?: Arguments.createMap()
23
-
24
- return HeadlessJsTaskConfig(
25
- taskKey = "AndroidAutoHeadlessJsTask", data = data, isAllowedInForeground = true
26
- )
27
- }
28
-
29
- override fun onBind(intent: Intent): IBinder? {
30
- // Start the headless task when bound
31
- UiThreadUtil.runOnUiThread {
32
- startTask(getTaskConfig(intent))
33
- }
34
- return mBinder
35
- }
36
- }
@@ -1,5 +0,0 @@
1
- import type { AutoPlay as NitroAutoPlay } from './specs/AutoPlay.nitro';
2
- declare const _default: {
3
- registerHeadlessTask: (hybridAutoPlay: NitroAutoPlay) => void;
4
- };
5
- export default _default;
@@ -1,14 +0,0 @@
1
- import { AppRegistry, Platform } from 'react-native';
2
- const createTaskProvider = (hybridAutoPlay) => () => () => new Promise((resolve) => {
3
- const remove = hybridAutoPlay.addListener('didDisconnect', () => {
4
- resolve();
5
- remove();
6
- });
7
- });
8
- const registerHeadlessTask = (hybridAutoPlay) => {
9
- if (Platform.OS !== 'android') {
10
- return;
11
- }
12
- AppRegistry.registerHeadlessTask('AndroidAutoHeadlessJsTask', createTaskProvider(hybridAutoPlay));
13
- };
14
- export default { registerHeadlessTask };
@@ -1,22 +0,0 @@
1
- import { AppRegistry, Platform, type Task, type TaskProvider } from 'react-native';
2
- import type { AutoPlay as NitroAutoPlay } from './specs/AutoPlay.nitro';
3
-
4
- const createTaskProvider =
5
- (hybridAutoPlay: NitroAutoPlay): TaskProvider =>
6
- (): Task =>
7
- () =>
8
- new Promise((resolve) => {
9
- const remove = hybridAutoPlay.addListener('didDisconnect', () => {
10
- resolve();
11
- remove();
12
- });
13
- });
14
-
15
- const registerHeadlessTask = (hybridAutoPlay: NitroAutoPlay) => {
16
- if (Platform.OS !== 'android') {
17
- return;
18
- }
19
- AppRegistry.registerHeadlessTask('AndroidAutoHeadlessJsTask', createTaskProvider(hybridAutoPlay));
20
- };
21
-
22
- export default { registerHeadlessTask };