@santoshpk/react-native-carplay 1.0.3

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 (269) hide show
  1. package/README.md +119 -0
  2. package/android/.idea/compiler.xml +6 -0
  3. package/android/.idea/gradle.xml +17 -0
  4. package/android/.idea/jarRepositories.xml +25 -0
  5. package/android/.idea/misc.xml +10 -0
  6. package/android/.idea/vcs.xml +6 -0
  7. package/android/build.gradle +63 -0
  8. package/android/gradle/wrapper/gradle-wrapper.jar +0 -0
  9. package/android/gradle/wrapper/gradle-wrapper.properties +5 -0
  10. package/android/gradle.properties +20 -0
  11. package/android/gradlew +234 -0
  12. package/android/gradlew.bat +89 -0
  13. package/android/local.properties +8 -0
  14. package/android/src/main/AndroidManifest.xml +31 -0
  15. package/android/src/main/AndroidManifestNew.xml +31 -0
  16. package/android/src/main/java/org/birkir/carplay/CarPlayModule.kt +348 -0
  17. package/android/src/main/java/org/birkir/carplay/CarPlayPackage.kt +18 -0
  18. package/android/src/main/java/org/birkir/carplay/CarPlayService.kt +34 -0
  19. package/android/src/main/java/org/birkir/carplay/CarPlaySession.kt +114 -0
  20. package/android/src/main/java/org/birkir/carplay/parser/Ext.kt +11 -0
  21. package/android/src/main/java/org/birkir/carplay/parser/Parser.kt +18 -0
  22. package/android/src/main/java/org/birkir/carplay/parser/RCTGridTemplate.kt +28 -0
  23. package/android/src/main/java/org/birkir/carplay/parser/RCTListTemplate.kt +64 -0
  24. package/android/src/main/java/org/birkir/carplay/parser/RCTMapTemplate.kt +185 -0
  25. package/android/src/main/java/org/birkir/carplay/parser/RCTMessageTemplate.kt +36 -0
  26. package/android/src/main/java/org/birkir/carplay/parser/RCTPaneTemplate.kt +24 -0
  27. package/android/src/main/java/org/birkir/carplay/parser/RCTSearchTemplate.kt +41 -0
  28. package/android/src/main/java/org/birkir/carplay/parser/RCTTabTemplate.kt +52 -0
  29. package/android/src/main/java/org/birkir/carplay/parser/RCTTemplate.kt +434 -0
  30. package/android/src/main/java/org/birkir/carplay/parser/TemplateParser.kt +35 -0
  31. package/android/src/main/java/org/birkir/carplay/screens/CarScreen.kt +69 -0
  32. package/android/src/main/java/org/birkir/carplay/screens/CarScreenContext.kt +10 -0
  33. package/android/src/main/java/org/birkir/carplay/utils/EventEmitter.kt +174 -0
  34. package/android/src/main/java/org/birkir/carplay/utils/VirtualRenderer.kt +75 -0
  35. package/ios/RCTConvert+RNCarPlay.h +18 -0
  36. package/ios/RCTConvert+RNCarPlay.m +96 -0
  37. package/ios/RNCPStore.h +24 -0
  38. package/ios/RNCPStore.m +68 -0
  39. package/ios/RNCarPlay.h +29 -0
  40. package/ios/RNCarPlay.m +1839 -0
  41. package/ios/RNCarPlay.xcodeproj/project.pbxproj +300 -0
  42. package/lib/CarPlay.d.ts +196 -0
  43. package/lib/CarPlay.d.ts.map +1 -0
  44. package/lib/CarPlay.js +176 -0
  45. package/lib/CarPlay.js.map +1 -0
  46. package/lib/index.d.ts +44 -0
  47. package/lib/index.d.ts.map +1 -0
  48. package/lib/index.js +64 -0
  49. package/lib/index.js.map +1 -0
  50. package/lib/interfaces/Action.d.ts +13 -0
  51. package/lib/interfaces/Action.d.ts.map +1 -0
  52. package/lib/interfaces/Action.js +3 -0
  53. package/lib/interfaces/Action.js.map +1 -0
  54. package/lib/interfaces/AlertAction.d.ts +6 -0
  55. package/lib/interfaces/AlertAction.d.ts.map +1 -0
  56. package/lib/interfaces/AlertAction.js +3 -0
  57. package/lib/interfaces/AlertAction.js.map +1 -0
  58. package/lib/interfaces/BarButton.d.ts +39 -0
  59. package/lib/interfaces/BarButton.d.ts.map +1 -0
  60. package/lib/interfaces/BarButton.js +3 -0
  61. package/lib/interfaces/BarButton.js.map +1 -0
  62. package/lib/interfaces/CarColor.d.ts +2 -0
  63. package/lib/interfaces/CarColor.d.ts.map +1 -0
  64. package/lib/interfaces/CarColor.js +3 -0
  65. package/lib/interfaces/CarColor.js.map +1 -0
  66. package/lib/interfaces/GridButton.d.ts +24 -0
  67. package/lib/interfaces/GridButton.d.ts.map +1 -0
  68. package/lib/interfaces/GridButton.js +3 -0
  69. package/lib/interfaces/GridButton.js.map +1 -0
  70. package/lib/interfaces/Header.d.ts +15 -0
  71. package/lib/interfaces/Header.d.ts.map +1 -0
  72. package/lib/interfaces/Header.js +3 -0
  73. package/lib/interfaces/Header.js.map +1 -0
  74. package/lib/interfaces/ListItem.d.ts +61 -0
  75. package/lib/interfaces/ListItem.d.ts.map +1 -0
  76. package/lib/interfaces/ListItem.js +3 -0
  77. package/lib/interfaces/ListItem.js.map +1 -0
  78. package/lib/interfaces/ListItemUpdate.d.ts +15 -0
  79. package/lib/interfaces/ListItemUpdate.d.ts.map +1 -0
  80. package/lib/interfaces/ListItemUpdate.js +3 -0
  81. package/lib/interfaces/ListItemUpdate.js.map +1 -0
  82. package/lib/interfaces/ListSection.d.ts +21 -0
  83. package/lib/interfaces/ListSection.d.ts.map +1 -0
  84. package/lib/interfaces/ListSection.js +3 -0
  85. package/lib/interfaces/ListSection.js.map +1 -0
  86. package/lib/interfaces/Maneuver.d.ts +31 -0
  87. package/lib/interfaces/Maneuver.d.ts.map +1 -0
  88. package/lib/interfaces/Maneuver.js +3 -0
  89. package/lib/interfaces/Maneuver.js.map +1 -0
  90. package/lib/interfaces/MapButton.d.ts +27 -0
  91. package/lib/interfaces/MapButton.d.ts.map +1 -0
  92. package/lib/interfaces/MapButton.js +3 -0
  93. package/lib/interfaces/MapButton.js.map +1 -0
  94. package/lib/interfaces/NavigationAlert.d.ts +44 -0
  95. package/lib/interfaces/NavigationAlert.d.ts.map +1 -0
  96. package/lib/interfaces/NavigationAlert.js +10 -0
  97. package/lib/interfaces/NavigationAlert.js.map +1 -0
  98. package/lib/interfaces/NavigationInfo.d.ts +17 -0
  99. package/lib/interfaces/NavigationInfo.d.ts.map +1 -0
  100. package/lib/interfaces/NavigationInfo.js +3 -0
  101. package/lib/interfaces/NavigationInfo.js.map +1 -0
  102. package/lib/interfaces/NavigationStep.d.ts +17 -0
  103. package/lib/interfaces/NavigationStep.d.ts.map +1 -0
  104. package/lib/interfaces/NavigationStep.js +3 -0
  105. package/lib/interfaces/NavigationStep.js.map +1 -0
  106. package/lib/interfaces/Pane.d.ts +29 -0
  107. package/lib/interfaces/Pane.d.ts.map +1 -0
  108. package/lib/interfaces/Pane.js +3 -0
  109. package/lib/interfaces/Pane.js.map +1 -0
  110. package/lib/interfaces/PauseReason.d.ts +8 -0
  111. package/lib/interfaces/PauseReason.d.ts.map +1 -0
  112. package/lib/interfaces/PauseReason.js +12 -0
  113. package/lib/interfaces/PauseReason.js.map +1 -0
  114. package/lib/interfaces/Place.d.ts +11 -0
  115. package/lib/interfaces/Place.d.ts.map +1 -0
  116. package/lib/interfaces/Place.js +3 -0
  117. package/lib/interfaces/Place.js.map +1 -0
  118. package/lib/interfaces/TextConfiguration.d.ts +6 -0
  119. package/lib/interfaces/TextConfiguration.d.ts.map +1 -0
  120. package/lib/interfaces/TextConfiguration.js +3 -0
  121. package/lib/interfaces/TextConfiguration.js.map +1 -0
  122. package/lib/interfaces/TimeRemainingColor.d.ts +2 -0
  123. package/lib/interfaces/TimeRemainingColor.d.ts.map +1 -0
  124. package/lib/interfaces/TimeRemainingColor.js +3 -0
  125. package/lib/interfaces/TimeRemainingColor.js.map +1 -0
  126. package/lib/interfaces/TravelEstimates.d.ts +37 -0
  127. package/lib/interfaces/TravelEstimates.d.ts.map +1 -0
  128. package/lib/interfaces/TravelEstimates.js +3 -0
  129. package/lib/interfaces/TravelEstimates.js.map +1 -0
  130. package/lib/interfaces/VoiceControlState.d.ts +8 -0
  131. package/lib/interfaces/VoiceControlState.d.ts.map +1 -0
  132. package/lib/interfaces/VoiceControlState.js +3 -0
  133. package/lib/interfaces/VoiceControlState.js.map +1 -0
  134. package/lib/navigation/NavigationSession.d.ts +18 -0
  135. package/lib/navigation/NavigationSession.d.ts.map +1 -0
  136. package/lib/navigation/NavigationSession.js +51 -0
  137. package/lib/navigation/NavigationSession.js.map +1 -0
  138. package/lib/navigation/Trip.d.ts +22 -0
  139. package/lib/navigation/Trip.d.ts.map +1 -0
  140. package/lib/navigation/Trip.js +18 -0
  141. package/lib/navigation/Trip.js.map +1 -0
  142. package/lib/templates/ActionSheetTemplate.d.ts +18 -0
  143. package/lib/templates/ActionSheetTemplate.d.ts.map +1 -0
  144. package/lib/templates/ActionSheetTemplate.js +16 -0
  145. package/lib/templates/ActionSheetTemplate.js.map +1 -0
  146. package/lib/templates/AlertTemplate.d.ts +17 -0
  147. package/lib/templates/AlertTemplate.d.ts.map +1 -0
  148. package/lib/templates/AlertTemplate.js +16 -0
  149. package/lib/templates/AlertTemplate.js.map +1 -0
  150. package/lib/templates/ContactTemplate.d.ts +36 -0
  151. package/lib/templates/ContactTemplate.d.ts.map +1 -0
  152. package/lib/templates/ContactTemplate.js +16 -0
  153. package/lib/templates/ContactTemplate.js.map +1 -0
  154. package/lib/templates/GridTemplate.d.ts +38 -0
  155. package/lib/templates/GridTemplate.d.ts.map +1 -0
  156. package/lib/templates/GridTemplate.js +17 -0
  157. package/lib/templates/GridTemplate.js.map +1 -0
  158. package/lib/templates/InformationTemplate.d.ts +28 -0
  159. package/lib/templates/InformationTemplate.d.ts.map +1 -0
  160. package/lib/templates/InformationTemplate.js +28 -0
  161. package/lib/templates/InformationTemplate.js.map +1 -0
  162. package/lib/templates/ListTemplate.d.ts +112 -0
  163. package/lib/templates/ListTemplate.d.ts.map +1 -0
  164. package/lib/templates/ListTemplate.js +57 -0
  165. package/lib/templates/ListTemplate.js.map +1 -0
  166. package/lib/templates/MapTemplate.d.ts +171 -0
  167. package/lib/templates/MapTemplate.d.ts.map +1 -0
  168. package/lib/templates/MapTemplate.js +115 -0
  169. package/lib/templates/MapTemplate.js.map +1 -0
  170. package/lib/templates/NowPlayingTemplate.d.ts +31 -0
  171. package/lib/templates/NowPlayingTemplate.d.ts.map +1 -0
  172. package/lib/templates/NowPlayingTemplate.js +18 -0
  173. package/lib/templates/NowPlayingTemplate.js.map +1 -0
  174. package/lib/templates/PointOfInterestTemplate.d.ts +38 -0
  175. package/lib/templates/PointOfInterestTemplate.d.ts.map +1 -0
  176. package/lib/templates/PointOfInterestTemplate.js +18 -0
  177. package/lib/templates/PointOfInterestTemplate.js.map +1 -0
  178. package/lib/templates/SearchTemplate.d.ts +32 -0
  179. package/lib/templates/SearchTemplate.d.ts.map +1 -0
  180. package/lib/templates/SearchTemplate.js +41 -0
  181. package/lib/templates/SearchTemplate.js.map +1 -0
  182. package/lib/templates/TabBarTemplate.d.ts +27 -0
  183. package/lib/templates/TabBarTemplate.d.ts.map +1 -0
  184. package/lib/templates/TabBarTemplate.js +26 -0
  185. package/lib/templates/TabBarTemplate.js.map +1 -0
  186. package/lib/templates/Template.d.ts +83 -0
  187. package/lib/templates/Template.d.ts.map +1 -0
  188. package/lib/templates/Template.js +71 -0
  189. package/lib/templates/Template.js.map +1 -0
  190. package/lib/templates/VoiceControlTemplate.d.ts +18 -0
  191. package/lib/templates/VoiceControlTemplate.d.ts.map +1 -0
  192. package/lib/templates/VoiceControlTemplate.js +20 -0
  193. package/lib/templates/VoiceControlTemplate.js.map +1 -0
  194. package/lib/templates/android/AndroidNavigationBaseTemplate.d.ts +19 -0
  195. package/lib/templates/android/AndroidNavigationBaseTemplate.d.ts.map +1 -0
  196. package/lib/templates/android/AndroidNavigationBaseTemplate.js +29 -0
  197. package/lib/templates/android/AndroidNavigationBaseTemplate.js.map +1 -0
  198. package/lib/templates/android/MessageTemplate.d.ts +16 -0
  199. package/lib/templates/android/MessageTemplate.d.ts.map +1 -0
  200. package/lib/templates/android/MessageTemplate.js +11 -0
  201. package/lib/templates/android/MessageTemplate.js.map +1 -0
  202. package/lib/templates/android/NavigationTemplate.d.ts +44 -0
  203. package/lib/templates/android/NavigationTemplate.d.ts.map +1 -0
  204. package/lib/templates/android/NavigationTemplate.js +17 -0
  205. package/lib/templates/android/NavigationTemplate.js.map +1 -0
  206. package/lib/templates/android/PaneTemplate.d.ts +20 -0
  207. package/lib/templates/android/PaneTemplate.d.ts.map +1 -0
  208. package/lib/templates/android/PaneTemplate.js +17 -0
  209. package/lib/templates/android/PaneTemplate.js.map +1 -0
  210. package/lib/templates/android/PlaceListMapTemplate.d.ts +78 -0
  211. package/lib/templates/android/PlaceListMapTemplate.d.ts.map +1 -0
  212. package/lib/templates/android/PlaceListMapTemplate.js +25 -0
  213. package/lib/templates/android/PlaceListMapTemplate.js.map +1 -0
  214. package/lib/templates/android/PlaceListNavigationTemplate.d.ts +51 -0
  215. package/lib/templates/android/PlaceListNavigationTemplate.d.ts.map +1 -0
  216. package/lib/templates/android/PlaceListNavigationTemplate.js +20 -0
  217. package/lib/templates/android/PlaceListNavigationTemplate.js.map +1 -0
  218. package/lib/templates/android/RoutePreviewNavigationTemplate.d.ts +60 -0
  219. package/lib/templates/android/RoutePreviewNavigationTemplate.d.ts.map +1 -0
  220. package/lib/templates/android/RoutePreviewNavigationTemplate.js +23 -0
  221. package/lib/templates/android/RoutePreviewNavigationTemplate.js.map +1 -0
  222. package/lib/tsconfig.tsbuildinfo +1 -0
  223. package/package.json +49 -0
  224. package/react-native-carplay.podspec +21 -0
  225. package/src/CarPlay.ts +320 -0
  226. package/src/index.ts +50 -0
  227. package/src/interfaces/Action.ts +15 -0
  228. package/src/interfaces/AlertAction.ts +5 -0
  229. package/src/interfaces/BarButton.ts +41 -0
  230. package/src/interfaces/CarColor.ts +1 -0
  231. package/src/interfaces/GridButton.ts +25 -0
  232. package/src/interfaces/Header.ts +16 -0
  233. package/src/interfaces/ListItem.ts +61 -0
  234. package/src/interfaces/ListItemUpdate.ts +14 -0
  235. package/src/interfaces/ListSection.ts +21 -0
  236. package/src/interfaces/Maneuver.ts +30 -0
  237. package/src/interfaces/MapButton.ts +27 -0
  238. package/src/interfaces/NavigationAlert.ts +46 -0
  239. package/src/interfaces/NavigationInfo.ts +19 -0
  240. package/src/interfaces/NavigationStep.ts +17 -0
  241. package/src/interfaces/Pane.ts +29 -0
  242. package/src/interfaces/PauseReason.ts +7 -0
  243. package/src/interfaces/Place.ts +12 -0
  244. package/src/interfaces/TextConfiguration.ts +5 -0
  245. package/src/interfaces/TimeRemainingColor.ts +1 -0
  246. package/src/interfaces/TravelEstimates.ts +39 -0
  247. package/src/interfaces/VoiceControlState.ts +8 -0
  248. package/src/navigation/NavigationSession.ts +57 -0
  249. package/src/navigation/Trip.ts +36 -0
  250. package/src/templates/ActionSheetTemplate.ts +21 -0
  251. package/src/templates/AlertTemplate.ts +20 -0
  252. package/src/templates/ContactTemplate.ts +45 -0
  253. package/src/templates/GridTemplate.ts +45 -0
  254. package/src/templates/InformationTemplate.ts +42 -0
  255. package/src/templates/ListTemplate.ts +150 -0
  256. package/src/templates/MapTemplate.ts +231 -0
  257. package/src/templates/NowPlayingTemplate.ts +38 -0
  258. package/src/templates/PointOfInterestTemplate.ts +42 -0
  259. package/src/templates/SearchTemplate.ts +70 -0
  260. package/src/templates/TabBarTemplate.ts +56 -0
  261. package/src/templates/Template.ts +165 -0
  262. package/src/templates/VoiceControlTemplate.ts +25 -0
  263. package/src/templates/android/AndroidNavigationBaseTemplate.ts +46 -0
  264. package/src/templates/android/MessageTemplate.ts +19 -0
  265. package/src/templates/android/NavigationTemplate.ts +50 -0
  266. package/src/templates/android/PaneTemplate.ts +26 -0
  267. package/src/templates/android/PlaceListMapTemplate.ts +94 -0
  268. package/src/templates/android/PlaceListNavigationTemplate.ts +57 -0
  269. package/src/templates/android/RoutePreviewNavigationTemplate.ts +66 -0
@@ -0,0 +1,185 @@
1
+ package org.birkir.carplay.parser
2
+
3
+ import android.text.Spannable
4
+ import android.text.SpannableString
5
+ import android.util.Log
6
+ import androidx.car.app.CarContext
7
+ import androidx.car.app.model.*
8
+
9
+ import androidx.car.app.navigation.model.MapController
10
+ import androidx.car.app.navigation.model.MapTemplate
11
+ //import androidx.car.app.navigation.model.NavigationTemplate
12
+ import androidx.car.app.navigation.model.PanModeListener
13
+ //import androidx.car.app.navigation.model.PlaceListNavigationTemplate
14
+ //import androidx.car.app.navigation.model.RoutePreviewNavigationTemplate
15
+ import com.facebook.react.bridge.ReadableMap
16
+ import org.birkir.carplay.screens.CarScreenContext
17
+ data class PointOfInterest(
18
+ val name: String,
19
+ val description: String,
20
+ val latitude: Double,
21
+ val longitude: Double
22
+ )
23
+ class RCTMapTemplate(
24
+ context: CarContext,
25
+ carScreenContext: CarScreenContext
26
+ ) : RCTTemplate(context, carScreenContext) {
27
+
28
+ override fun parse(props: ReadableMap): Template {
29
+ val type = props.getString("type")
30
+ val actionStrip = props.getArray("actions")?.let {
31
+ parseActionStrip(it)
32
+ }
33
+ val header = props.getMap("header")?.let {
34
+ parseHeader(it)
35
+ }
36
+ val headerAction = props.getMap("headerAction")?.let {
37
+ parseAction(it)
38
+ }
39
+ val itemList = props.getArray("items")?.let {
40
+ parsePlaceItemList(it)
41
+ }
42
+ val pane = props.getMap("pane")?.let {
43
+ parsePane(it)
44
+ }
45
+ val mapActionStrip = props.getArray("mapButtons")?.let {
46
+ parseActionStrip(it)
47
+ }
48
+
49
+
50
+
51
+
52
+ // val panModeListener = PanModeListener { isInPanMode ->
53
+ // if (isInPanMode) {
54
+ // eventEmitter.didShowPanningInterface()
55
+ // } else {
56
+ // eventEmitter.didDismissPanningInterface()
57
+ // }
58
+ // }
59
+ // val mapController = MapController.Builder().apply {
60
+ // mapActionStrip?.let { setMapActionStrip(it); }
61
+ // setPanModeListener(panModeListener)
62
+ // }.build()
63
+ // when (type) {
64
+ // "navigation" -> {
65
+ // return NavigationTemplate.Builder().apply {
66
+ // actionStrip?.let { setActionStrip(it) }
67
+ // props.getString("backgroundColor")?.let {
68
+ // setBackgroundColor(parseColor(it))
69
+ // }
70
+ // props.getMap("travelEstimate")?.let {
71
+ // setDestinationTravelEstimate(parseTravelEstimate(it))
72
+ // }
73
+ // props.getMap("navigationInfo")?.let {
74
+ // setNavigationInfo(parseNavigationInfo(it))
75
+ // }
76
+ // mapActionStrip?.let { setMapActionStrip(it) }
77
+ // setPanModeListener(panModeListener)
78
+ // }.build()
79
+ // }
80
+
81
+ // "place-list-map" -> {
82
+ //val poiList = getPOIList()
83
+ // val itemListBuilder = ItemList.Builder()
84
+ // .setNoItemsMessage("No items to show")
85
+
86
+
87
+
88
+ // poiList.forEach {
89
+ // itemListBuilder.addItem(
90
+ // Row.Builder()
91
+ // .setTitle(it.name)
92
+ // // Each item in the list *must* have a DistanceSpan applied to either the title
93
+ // // or one of the its lines of text (to help drivers make decisions)
94
+ // .addText(SpannableString(" ").apply {
95
+ // setSpan(
96
+ // DistanceSpan.create(
97
+ // Distance.create(Math.random() * 100, Distance.UNIT_KILOMETERS)
98
+ // ), 0, 1, Spannable.SPAN_INCLUSIVE_INCLUSIVE
99
+ // )
100
+ // })
101
+ // .setOnClickListener { onPOISelected(it) }
102
+ // // Setting Metadata is optional, but is required to automatically show the
103
+ // // item's location on the provided map
104
+ // .setMetadata(
105
+ // Metadata.Builder()
106
+ // .setPlace(Place.Builder(CarLocation.create(it.latitude, it.longitude))
107
+ // // Using the default PlaceMarker indicates that the host should
108
+ // // decide how to style the pins it shows on the map/in the list
109
+ // .setMarker(PlaceMarker.Builder().setColor(
110
+ // CarColor.createCustom(
111
+ // 0xFF543a20.toInt(), 0xFF543a20.toInt()
112
+ // )
113
+ // ).build())
114
+ // .build())
115
+ // .build()
116
+ // ).build()
117
+ // )
118
+ // }
119
+
120
+ return PlaceListMapTemplate.Builder()
121
+ .apply {
122
+ actionStrip?.let { setActionStrip(it) }
123
+ props.getMap("anchor")?.let { setAnchor(parsePlace(it)) }
124
+ if (props.hasKey("currentLocationEnabled")) {
125
+ setCurrentLocationEnabled(props.getBoolean("currentLocationEnabled"))
126
+ }
127
+ headerAction?.let { setHeaderAction(it) }
128
+ itemList?.let { setItemList(it) }
129
+ setLoading(props.isLoading())
130
+ setOnContentRefreshListener {
131
+ // @todo eventEmitter?.contentDidRefresh
132
+ }
133
+ props.getString("title")?.let { setTitle(it) }
134
+ }.build()
135
+ // }
136
+
137
+ // "place-list-navigation" -> {
138
+ // return PlaceListNavigationTemplate.Builder().apply {
139
+ // actionStrip?.let { setActionStrip(it) }
140
+ // header?.let { setHeader(it) }
141
+ // itemList?.let { setItemList(it) }
142
+ // setLoading(props.isLoading())
143
+ // mapActionStrip?.let { setActionStrip(it) }
144
+ // setOnContentRefreshListener {
145
+ // // @todo eventEmitter?.contentDidRefresh
146
+ // }
147
+ // setPanModeListener(panModeListener)
148
+ // }.build()
149
+ // }
150
+ //
151
+ // "route-preview" -> {
152
+ // return RoutePreviewNavigationTemplate.Builder().apply {
153
+ // actionStrip?.let { setActionStrip(it) }
154
+ // header?.let { setHeader(it) }
155
+ // headerAction?.let { setHeaderAction(headerAction) }
156
+ // itemList?.let { setItemList(it) }
157
+ // setLoading(props.isLoading())
158
+ // mapActionStrip?.let { setMapActionStrip(it); }
159
+ // props.getMap("navigateAction")?.let { setNavigateAction(parseAction(it)) }
160
+ // setPanModeListener(panModeListener)
161
+ // }.build()
162
+ // }
163
+
164
+ // else -> {
165
+ // Log.d(TAG, "Map rendering")
166
+ // return MapTemplate.Builder().apply {
167
+ // header?.let { setHeader(it) }
168
+ // itemList?.let { setItemList(it) }
169
+ // actionStrip?.let { setActionStrip(it) }
170
+ // setMapController(mapController)
171
+ // pane?.let { setPane(it) }
172
+ // }.build()
173
+ // }
174
+ // }
175
+
176
+ }
177
+
178
+ private fun onPOISelected(poi: PointOfInterest) {
179
+
180
+ }
181
+
182
+ companion object {
183
+ const val TAG = "RCTMapTemplate"
184
+ }
185
+ }
@@ -0,0 +1,36 @@
1
+ package org.birkir.carplay.parser
2
+
3
+ import androidx.car.app.CarContext
4
+ import androidx.car.app.model.MessageTemplate
5
+ import com.facebook.react.bridge.ReadableMap
6
+ import org.birkir.carplay.screens.CarScreenContext
7
+
8
+ class RCTMessageTemplate(
9
+ context: CarContext,
10
+ carScreenContext: CarScreenContext
11
+ ) : RCTTemplate(context, carScreenContext) {
12
+ override fun parse(props: ReadableMap): MessageTemplate {
13
+ val message = props.getString("message") ?: "No message"
14
+ val messageText = parseCarText(message, props)
15
+ return MessageTemplate.Builder(messageText).apply {
16
+ props.getArray("actions")?.let {
17
+
18
+ for (i in 0 until it.size()) {
19
+ val actionMap = it.getMap(i)
20
+ val action = parseAction(actionMap)
21
+ addAction(action)
22
+ }
23
+
24
+ }
25
+ props.getMap("headerAction")?.let { setHeaderAction(parseAction(it)) }
26
+ props.getMap("icon")?.let { setIcon(parseCarIcon(it)) }
27
+ props.getString("title")?.let { setTitle(it) }
28
+ props.getString("debugMessage")?.let { setDebugMessage(it) }
29
+ setLoading(props.isLoading())
30
+ }.build()
31
+ }
32
+
33
+ companion object {
34
+ const val TAG = "RCTMessageTemplate"
35
+ }
36
+ }
@@ -0,0 +1,24 @@
1
+ package org.birkir.carplay.parser
2
+
3
+ import androidx.car.app.CarContext
4
+ import androidx.car.app.model.PaneTemplate
5
+ import com.facebook.react.bridge.ReadableMap
6
+ import org.birkir.carplay.screens.CarScreenContext
7
+
8
+ class RCTPaneTemplate(
9
+ context: CarContext,
10
+ carScreenContext: CarScreenContext
11
+ ) : RCTTemplate(context, carScreenContext) {
12
+ override fun parse(props: ReadableMap): PaneTemplate {
13
+ val pane = parsePane(props.getMap("pane")!!)
14
+ return PaneTemplate.Builder(pane).apply {
15
+ props.getArray("actions")?.let { setActionStrip(parseActionStrip(it)) }
16
+ props.getMap("headerAction")?.let { setHeaderAction(parseAction(it)) }
17
+ props.getString("title")?.let { setTitle(it) }
18
+ }.build()
19
+ }
20
+
21
+ companion object {
22
+ const val TAG = "RCTPaneTemplate"
23
+ }
24
+ }
@@ -0,0 +1,41 @@
1
+ package org.birkir.carplay.parser
2
+
3
+ import androidx.car.app.CarContext
4
+ import androidx.car.app.model.SearchTemplate
5
+ import androidx.car.app.model.SearchTemplate.SearchCallback
6
+ import com.facebook.react.bridge.ReadableMap
7
+ import org.birkir.carplay.screens.CarScreenContext
8
+
9
+
10
+ class RCTSearchTemplate(
11
+ context: CarContext,
12
+ carScreenContext: CarScreenContext
13
+ ) : RCTTemplate(context, carScreenContext) {
14
+ override fun parse(props: ReadableMap): SearchTemplate {
15
+ return SearchTemplate.Builder(object : SearchCallback {
16
+ override fun onSearchTextChanged(searchText: String) {
17
+ eventEmitter.updatedSearchText(searchText)
18
+ }
19
+
20
+ override fun onSearchSubmitted(searchText: String) {
21
+ eventEmitter.searchButtonPressed(searchText)
22
+ }
23
+ }).apply {
24
+ props.getArray("actions")?.let { setActionStrip(parseActionStrip(it)) }
25
+ props.getMap("headerAction")?.let { setHeaderAction(parseAction(it)) }
26
+ props.getString("initialSearchText")?.let {
27
+ setInitialSearchText(it)
28
+ }
29
+ props.getArray("items")?.let { setItemList(parseItemList(it, "row")) }
30
+ setLoading(props.isLoading())
31
+ props.getString("searchHint")?.let { setSearchHint(it) }
32
+ if (props.hasKey("showKeyboardByDefault")) {
33
+ setShowKeyboardByDefault(props.getBoolean("showKeyboardByDefault"))
34
+ }
35
+ }.build()
36
+ }
37
+
38
+ companion object {
39
+ const val TAG = "RCTSearchTemplate"
40
+ }
41
+ }
@@ -0,0 +1,52 @@
1
+ package org.birkir.carplay.parser
2
+
3
+ import androidx.car.app.CarContext
4
+ import androidx.car.app.model.Tab
5
+ import androidx.car.app.model.TabContents
6
+ import androidx.car.app.model.TabTemplate
7
+ import androidx.car.app.model.TabTemplate.TabCallback
8
+ import com.facebook.react.bridge.ReadableMap
9
+ import org.birkir.carplay.screens.CarScreenContext
10
+
11
+ class RCTTabTemplate(
12
+ context: CarContext,
13
+ carScreenContext: CarScreenContext
14
+ ) : RCTTemplate(context, carScreenContext) {
15
+ override fun parse(props: ReadableMap): TabTemplate {
16
+ return TabTemplate.Builder(object : TabCallback {
17
+ override fun onTabSelected(tabContentId: String) {
18
+ eventEmitter.didSelectTemplate(tabContentId)
19
+ }
20
+ }).apply {
21
+ setLoading(props.isLoading())
22
+ props.getArray("templates")?.let {
23
+ for (i in 0 until it.size()) {
24
+ addTab(parseTab(it!!.getMap(i)!!))
25
+ }
26
+ // Apply and select first tab
27
+ it.getMap(0)?.getString("id")?.let { it1 ->
28
+ setTabContents(parseTabContents(it1))
29
+ setActiveTabContentId(it1)
30
+ }
31
+ }
32
+ props.getMap("headerAction")?.let { setHeaderAction(parseAction(it)) }
33
+ }.build()
34
+ }
35
+
36
+ private fun parseTab(props: ReadableMap): Tab {
37
+ return Tab.Builder().apply {
38
+ props.getString("id")?.let { setContentId(it) }
39
+ props.getString("title")?.let { setTitle(it) }
40
+ props.getMap("icon")?.let { setIcon(parseCarIcon(it)) }
41
+ }.build()
42
+ }
43
+
44
+ private fun parseTabContents(templateId: String): TabContents {
45
+ val screen = carScreenContext.screens[templateId]!!
46
+ return TabContents.Builder(screen.template!!).build()
47
+ }
48
+
49
+ companion object {
50
+ const val TAG = "RCTTabTemplate"
51
+ }
52
+ }