@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.
- package/README.md +119 -0
- package/android/.idea/compiler.xml +6 -0
- package/android/.idea/gradle.xml +17 -0
- package/android/.idea/jarRepositories.xml +25 -0
- package/android/.idea/misc.xml +10 -0
- package/android/.idea/vcs.xml +6 -0
- package/android/build.gradle +63 -0
- package/android/gradle/wrapper/gradle-wrapper.jar +0 -0
- package/android/gradle/wrapper/gradle-wrapper.properties +5 -0
- package/android/gradle.properties +20 -0
- package/android/gradlew +234 -0
- package/android/gradlew.bat +89 -0
- package/android/local.properties +8 -0
- package/android/src/main/AndroidManifest.xml +31 -0
- package/android/src/main/AndroidManifestNew.xml +31 -0
- package/android/src/main/java/org/birkir/carplay/CarPlayModule.kt +348 -0
- package/android/src/main/java/org/birkir/carplay/CarPlayPackage.kt +18 -0
- package/android/src/main/java/org/birkir/carplay/CarPlayService.kt +34 -0
- package/android/src/main/java/org/birkir/carplay/CarPlaySession.kt +114 -0
- package/android/src/main/java/org/birkir/carplay/parser/Ext.kt +11 -0
- package/android/src/main/java/org/birkir/carplay/parser/Parser.kt +18 -0
- package/android/src/main/java/org/birkir/carplay/parser/RCTGridTemplate.kt +28 -0
- package/android/src/main/java/org/birkir/carplay/parser/RCTListTemplate.kt +64 -0
- package/android/src/main/java/org/birkir/carplay/parser/RCTMapTemplate.kt +185 -0
- package/android/src/main/java/org/birkir/carplay/parser/RCTMessageTemplate.kt +36 -0
- package/android/src/main/java/org/birkir/carplay/parser/RCTPaneTemplate.kt +24 -0
- package/android/src/main/java/org/birkir/carplay/parser/RCTSearchTemplate.kt +41 -0
- package/android/src/main/java/org/birkir/carplay/parser/RCTTabTemplate.kt +52 -0
- package/android/src/main/java/org/birkir/carplay/parser/RCTTemplate.kt +434 -0
- package/android/src/main/java/org/birkir/carplay/parser/TemplateParser.kt +35 -0
- package/android/src/main/java/org/birkir/carplay/screens/CarScreen.kt +69 -0
- package/android/src/main/java/org/birkir/carplay/screens/CarScreenContext.kt +10 -0
- package/android/src/main/java/org/birkir/carplay/utils/EventEmitter.kt +174 -0
- package/android/src/main/java/org/birkir/carplay/utils/VirtualRenderer.kt +75 -0
- package/ios/RCTConvert+RNCarPlay.h +18 -0
- package/ios/RCTConvert+RNCarPlay.m +96 -0
- package/ios/RNCPStore.h +24 -0
- package/ios/RNCPStore.m +68 -0
- package/ios/RNCarPlay.h +29 -0
- package/ios/RNCarPlay.m +1839 -0
- package/ios/RNCarPlay.xcodeproj/project.pbxproj +300 -0
- package/lib/CarPlay.d.ts +196 -0
- package/lib/CarPlay.d.ts.map +1 -0
- package/lib/CarPlay.js +176 -0
- package/lib/CarPlay.js.map +1 -0
- package/lib/index.d.ts +44 -0
- package/lib/index.d.ts.map +1 -0
- package/lib/index.js +64 -0
- package/lib/index.js.map +1 -0
- package/lib/interfaces/Action.d.ts +13 -0
- package/lib/interfaces/Action.d.ts.map +1 -0
- package/lib/interfaces/Action.js +3 -0
- package/lib/interfaces/Action.js.map +1 -0
- package/lib/interfaces/AlertAction.d.ts +6 -0
- package/lib/interfaces/AlertAction.d.ts.map +1 -0
- package/lib/interfaces/AlertAction.js +3 -0
- package/lib/interfaces/AlertAction.js.map +1 -0
- package/lib/interfaces/BarButton.d.ts +39 -0
- package/lib/interfaces/BarButton.d.ts.map +1 -0
- package/lib/interfaces/BarButton.js +3 -0
- package/lib/interfaces/BarButton.js.map +1 -0
- package/lib/interfaces/CarColor.d.ts +2 -0
- package/lib/interfaces/CarColor.d.ts.map +1 -0
- package/lib/interfaces/CarColor.js +3 -0
- package/lib/interfaces/CarColor.js.map +1 -0
- package/lib/interfaces/GridButton.d.ts +24 -0
- package/lib/interfaces/GridButton.d.ts.map +1 -0
- package/lib/interfaces/GridButton.js +3 -0
- package/lib/interfaces/GridButton.js.map +1 -0
- package/lib/interfaces/Header.d.ts +15 -0
- package/lib/interfaces/Header.d.ts.map +1 -0
- package/lib/interfaces/Header.js +3 -0
- package/lib/interfaces/Header.js.map +1 -0
- package/lib/interfaces/ListItem.d.ts +61 -0
- package/lib/interfaces/ListItem.d.ts.map +1 -0
- package/lib/interfaces/ListItem.js +3 -0
- package/lib/interfaces/ListItem.js.map +1 -0
- package/lib/interfaces/ListItemUpdate.d.ts +15 -0
- package/lib/interfaces/ListItemUpdate.d.ts.map +1 -0
- package/lib/interfaces/ListItemUpdate.js +3 -0
- package/lib/interfaces/ListItemUpdate.js.map +1 -0
- package/lib/interfaces/ListSection.d.ts +21 -0
- package/lib/interfaces/ListSection.d.ts.map +1 -0
- package/lib/interfaces/ListSection.js +3 -0
- package/lib/interfaces/ListSection.js.map +1 -0
- package/lib/interfaces/Maneuver.d.ts +31 -0
- package/lib/interfaces/Maneuver.d.ts.map +1 -0
- package/lib/interfaces/Maneuver.js +3 -0
- package/lib/interfaces/Maneuver.js.map +1 -0
- package/lib/interfaces/MapButton.d.ts +27 -0
- package/lib/interfaces/MapButton.d.ts.map +1 -0
- package/lib/interfaces/MapButton.js +3 -0
- package/lib/interfaces/MapButton.js.map +1 -0
- package/lib/interfaces/NavigationAlert.d.ts +44 -0
- package/lib/interfaces/NavigationAlert.d.ts.map +1 -0
- package/lib/interfaces/NavigationAlert.js +10 -0
- package/lib/interfaces/NavigationAlert.js.map +1 -0
- package/lib/interfaces/NavigationInfo.d.ts +17 -0
- package/lib/interfaces/NavigationInfo.d.ts.map +1 -0
- package/lib/interfaces/NavigationInfo.js +3 -0
- package/lib/interfaces/NavigationInfo.js.map +1 -0
- package/lib/interfaces/NavigationStep.d.ts +17 -0
- package/lib/interfaces/NavigationStep.d.ts.map +1 -0
- package/lib/interfaces/NavigationStep.js +3 -0
- package/lib/interfaces/NavigationStep.js.map +1 -0
- package/lib/interfaces/Pane.d.ts +29 -0
- package/lib/interfaces/Pane.d.ts.map +1 -0
- package/lib/interfaces/Pane.js +3 -0
- package/lib/interfaces/Pane.js.map +1 -0
- package/lib/interfaces/PauseReason.d.ts +8 -0
- package/lib/interfaces/PauseReason.d.ts.map +1 -0
- package/lib/interfaces/PauseReason.js +12 -0
- package/lib/interfaces/PauseReason.js.map +1 -0
- package/lib/interfaces/Place.d.ts +11 -0
- package/lib/interfaces/Place.d.ts.map +1 -0
- package/lib/interfaces/Place.js +3 -0
- package/lib/interfaces/Place.js.map +1 -0
- package/lib/interfaces/TextConfiguration.d.ts +6 -0
- package/lib/interfaces/TextConfiguration.d.ts.map +1 -0
- package/lib/interfaces/TextConfiguration.js +3 -0
- package/lib/interfaces/TextConfiguration.js.map +1 -0
- package/lib/interfaces/TimeRemainingColor.d.ts +2 -0
- package/lib/interfaces/TimeRemainingColor.d.ts.map +1 -0
- package/lib/interfaces/TimeRemainingColor.js +3 -0
- package/lib/interfaces/TimeRemainingColor.js.map +1 -0
- package/lib/interfaces/TravelEstimates.d.ts +37 -0
- package/lib/interfaces/TravelEstimates.d.ts.map +1 -0
- package/lib/interfaces/TravelEstimates.js +3 -0
- package/lib/interfaces/TravelEstimates.js.map +1 -0
- package/lib/interfaces/VoiceControlState.d.ts +8 -0
- package/lib/interfaces/VoiceControlState.d.ts.map +1 -0
- package/lib/interfaces/VoiceControlState.js +3 -0
- package/lib/interfaces/VoiceControlState.js.map +1 -0
- package/lib/navigation/NavigationSession.d.ts +18 -0
- package/lib/navigation/NavigationSession.d.ts.map +1 -0
- package/lib/navigation/NavigationSession.js +51 -0
- package/lib/navigation/NavigationSession.js.map +1 -0
- package/lib/navigation/Trip.d.ts +22 -0
- package/lib/navigation/Trip.d.ts.map +1 -0
- package/lib/navigation/Trip.js +18 -0
- package/lib/navigation/Trip.js.map +1 -0
- package/lib/templates/ActionSheetTemplate.d.ts +18 -0
- package/lib/templates/ActionSheetTemplate.d.ts.map +1 -0
- package/lib/templates/ActionSheetTemplate.js +16 -0
- package/lib/templates/ActionSheetTemplate.js.map +1 -0
- package/lib/templates/AlertTemplate.d.ts +17 -0
- package/lib/templates/AlertTemplate.d.ts.map +1 -0
- package/lib/templates/AlertTemplate.js +16 -0
- package/lib/templates/AlertTemplate.js.map +1 -0
- package/lib/templates/ContactTemplate.d.ts +36 -0
- package/lib/templates/ContactTemplate.d.ts.map +1 -0
- package/lib/templates/ContactTemplate.js +16 -0
- package/lib/templates/ContactTemplate.js.map +1 -0
- package/lib/templates/GridTemplate.d.ts +38 -0
- package/lib/templates/GridTemplate.d.ts.map +1 -0
- package/lib/templates/GridTemplate.js +17 -0
- package/lib/templates/GridTemplate.js.map +1 -0
- package/lib/templates/InformationTemplate.d.ts +28 -0
- package/lib/templates/InformationTemplate.d.ts.map +1 -0
- package/lib/templates/InformationTemplate.js +28 -0
- package/lib/templates/InformationTemplate.js.map +1 -0
- package/lib/templates/ListTemplate.d.ts +112 -0
- package/lib/templates/ListTemplate.d.ts.map +1 -0
- package/lib/templates/ListTemplate.js +57 -0
- package/lib/templates/ListTemplate.js.map +1 -0
- package/lib/templates/MapTemplate.d.ts +171 -0
- package/lib/templates/MapTemplate.d.ts.map +1 -0
- package/lib/templates/MapTemplate.js +115 -0
- package/lib/templates/MapTemplate.js.map +1 -0
- package/lib/templates/NowPlayingTemplate.d.ts +31 -0
- package/lib/templates/NowPlayingTemplate.d.ts.map +1 -0
- package/lib/templates/NowPlayingTemplate.js +18 -0
- package/lib/templates/NowPlayingTemplate.js.map +1 -0
- package/lib/templates/PointOfInterestTemplate.d.ts +38 -0
- package/lib/templates/PointOfInterestTemplate.d.ts.map +1 -0
- package/lib/templates/PointOfInterestTemplate.js +18 -0
- package/lib/templates/PointOfInterestTemplate.js.map +1 -0
- package/lib/templates/SearchTemplate.d.ts +32 -0
- package/lib/templates/SearchTemplate.d.ts.map +1 -0
- package/lib/templates/SearchTemplate.js +41 -0
- package/lib/templates/SearchTemplate.js.map +1 -0
- package/lib/templates/TabBarTemplate.d.ts +27 -0
- package/lib/templates/TabBarTemplate.d.ts.map +1 -0
- package/lib/templates/TabBarTemplate.js +26 -0
- package/lib/templates/TabBarTemplate.js.map +1 -0
- package/lib/templates/Template.d.ts +83 -0
- package/lib/templates/Template.d.ts.map +1 -0
- package/lib/templates/Template.js +71 -0
- package/lib/templates/Template.js.map +1 -0
- package/lib/templates/VoiceControlTemplate.d.ts +18 -0
- package/lib/templates/VoiceControlTemplate.d.ts.map +1 -0
- package/lib/templates/VoiceControlTemplate.js +20 -0
- package/lib/templates/VoiceControlTemplate.js.map +1 -0
- package/lib/templates/android/AndroidNavigationBaseTemplate.d.ts +19 -0
- package/lib/templates/android/AndroidNavigationBaseTemplate.d.ts.map +1 -0
- package/lib/templates/android/AndroidNavigationBaseTemplate.js +29 -0
- package/lib/templates/android/AndroidNavigationBaseTemplate.js.map +1 -0
- package/lib/templates/android/MessageTemplate.d.ts +16 -0
- package/lib/templates/android/MessageTemplate.d.ts.map +1 -0
- package/lib/templates/android/MessageTemplate.js +11 -0
- package/lib/templates/android/MessageTemplate.js.map +1 -0
- package/lib/templates/android/NavigationTemplate.d.ts +44 -0
- package/lib/templates/android/NavigationTemplate.d.ts.map +1 -0
- package/lib/templates/android/NavigationTemplate.js +17 -0
- package/lib/templates/android/NavigationTemplate.js.map +1 -0
- package/lib/templates/android/PaneTemplate.d.ts +20 -0
- package/lib/templates/android/PaneTemplate.d.ts.map +1 -0
- package/lib/templates/android/PaneTemplate.js +17 -0
- package/lib/templates/android/PaneTemplate.js.map +1 -0
- package/lib/templates/android/PlaceListMapTemplate.d.ts +78 -0
- package/lib/templates/android/PlaceListMapTemplate.d.ts.map +1 -0
- package/lib/templates/android/PlaceListMapTemplate.js +25 -0
- package/lib/templates/android/PlaceListMapTemplate.js.map +1 -0
- package/lib/templates/android/PlaceListNavigationTemplate.d.ts +51 -0
- package/lib/templates/android/PlaceListNavigationTemplate.d.ts.map +1 -0
- package/lib/templates/android/PlaceListNavigationTemplate.js +20 -0
- package/lib/templates/android/PlaceListNavigationTemplate.js.map +1 -0
- package/lib/templates/android/RoutePreviewNavigationTemplate.d.ts +60 -0
- package/lib/templates/android/RoutePreviewNavigationTemplate.d.ts.map +1 -0
- package/lib/templates/android/RoutePreviewNavigationTemplate.js +23 -0
- package/lib/templates/android/RoutePreviewNavigationTemplate.js.map +1 -0
- package/lib/tsconfig.tsbuildinfo +1 -0
- package/package.json +49 -0
- package/react-native-carplay.podspec +21 -0
- package/src/CarPlay.ts +320 -0
- package/src/index.ts +50 -0
- package/src/interfaces/Action.ts +15 -0
- package/src/interfaces/AlertAction.ts +5 -0
- package/src/interfaces/BarButton.ts +41 -0
- package/src/interfaces/CarColor.ts +1 -0
- package/src/interfaces/GridButton.ts +25 -0
- package/src/interfaces/Header.ts +16 -0
- package/src/interfaces/ListItem.ts +61 -0
- package/src/interfaces/ListItemUpdate.ts +14 -0
- package/src/interfaces/ListSection.ts +21 -0
- package/src/interfaces/Maneuver.ts +30 -0
- package/src/interfaces/MapButton.ts +27 -0
- package/src/interfaces/NavigationAlert.ts +46 -0
- package/src/interfaces/NavigationInfo.ts +19 -0
- package/src/interfaces/NavigationStep.ts +17 -0
- package/src/interfaces/Pane.ts +29 -0
- package/src/interfaces/PauseReason.ts +7 -0
- package/src/interfaces/Place.ts +12 -0
- package/src/interfaces/TextConfiguration.ts +5 -0
- package/src/interfaces/TimeRemainingColor.ts +1 -0
- package/src/interfaces/TravelEstimates.ts +39 -0
- package/src/interfaces/VoiceControlState.ts +8 -0
- package/src/navigation/NavigationSession.ts +57 -0
- package/src/navigation/Trip.ts +36 -0
- package/src/templates/ActionSheetTemplate.ts +21 -0
- package/src/templates/AlertTemplate.ts +20 -0
- package/src/templates/ContactTemplate.ts +45 -0
- package/src/templates/GridTemplate.ts +45 -0
- package/src/templates/InformationTemplate.ts +42 -0
- package/src/templates/ListTemplate.ts +150 -0
- package/src/templates/MapTemplate.ts +231 -0
- package/src/templates/NowPlayingTemplate.ts +38 -0
- package/src/templates/PointOfInterestTemplate.ts +42 -0
- package/src/templates/SearchTemplate.ts +70 -0
- package/src/templates/TabBarTemplate.ts +56 -0
- package/src/templates/Template.ts +165 -0
- package/src/templates/VoiceControlTemplate.ts +25 -0
- package/src/templates/android/AndroidNavigationBaseTemplate.ts +46 -0
- package/src/templates/android/MessageTemplate.ts +19 -0
- package/src/templates/android/NavigationTemplate.ts +50 -0
- package/src/templates/android/PaneTemplate.ts +26 -0
- package/src/templates/android/PlaceListMapTemplate.ts +94 -0
- package/src/templates/android/PlaceListNavigationTemplate.ts +57 -0
- 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
|
+
}
|