@iternio/react-native-auto-play 0.1.18 → 0.2.0-alpha.2

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 (162) hide show
  1. package/README.md +152 -8
  2. package/android/build.gradle +15 -1
  3. package/android/gradle.properties +1 -1
  4. package/android/src/{main/java/com/margelo/nitro/swe/iternio/reactnativeautoplay/AndroidAutoTelemetryObserver.kt → auto/java/com/margelo/nitro/swe/iternio/reactnativeautoplay/AndroidTelemetryObserver.kt} +31 -76
  5. package/android/src/automotive/AndroidManifest.xml +91 -0
  6. package/android/src/automotive/java/com/margelo/nitro/swe/iternio/reactnativeautoplay/AndroidTelemetryObserver.kt +191 -0
  7. package/android/src/main/AndroidManifest.xml +0 -10
  8. package/android/src/main/java/com/margelo/nitro/swe/iternio/reactnativeautoplay/AndroidAutoScreen.kt +3 -0
  9. package/android/src/main/java/com/margelo/nitro/swe/iternio/reactnativeautoplay/AndroidAutoTelemetryHolder.kt +97 -19
  10. package/android/src/main/java/com/margelo/nitro/swe/iternio/reactnativeautoplay/HybridAndroidAutoTelemetry.kt +39 -3
  11. package/android/src/main/java/com/margelo/nitro/swe/iternio/reactnativeautoplay/HybridSignInTemplate.kt +22 -0
  12. package/android/src/main/java/com/margelo/nitro/swe/iternio/reactnativeautoplay/TelemetryObserver.kt +56 -0
  13. package/android/src/main/java/com/margelo/nitro/swe/iternio/reactnativeautoplay/VirtualRenderer.kt +15 -10
  14. package/android/src/main/java/com/margelo/nitro/swe/iternio/reactnativeautoplay/template/AutomotivePermissionRequestTemplate.kt +103 -0
  15. package/android/src/main/java/com/margelo/nitro/swe/iternio/reactnativeautoplay/template/GridTemplate.kt +0 -2
  16. package/android/src/main/java/com/margelo/nitro/swe/iternio/reactnativeautoplay/template/Parser.kt +8 -2
  17. package/android/src/main/java/com/margelo/nitro/swe/iternio/reactnativeautoplay/template/SignInTemplate.kt +159 -0
  18. package/ios/extensions/CarPlayExtensions.swift +4 -2
  19. package/ios/extensions/NitroImageExtensions.swift +4 -4
  20. package/ios/hybrid/HybridAutoPlay.swift +31 -42
  21. package/ios/hybrid/HybridCluster.swift +4 -2
  22. package/ios/hybrid/HybridGridTemplate.swift +11 -11
  23. package/ios/hybrid/HybridInformationTemplate.swift +12 -13
  24. package/ios/hybrid/HybridListTemplate.swift +12 -13
  25. package/ios/hybrid/HybridMapTemplate.swift +13 -16
  26. package/ios/hybrid/HybridMessageTemplate.swift +7 -4
  27. package/ios/hybrid/HybridSearchTemplate.swift +12 -13
  28. package/ios/scenes/AutoPlayInterfaceController.swift +41 -13
  29. package/ios/scenes/AutoPlayScene.swift +2 -1
  30. package/ios/scenes/AutoPlaySceneViewController.swift +8 -2
  31. package/ios/scenes/DashboardSceneDelegate.swift +15 -7
  32. package/ios/scenes/HeadUnitSceneDelegate.swift +7 -5
  33. package/ios/scenes/WindowApplicationSceneDelegate.swift +1 -1
  34. package/ios/templates/AutoPlayTemplate.swift +23 -15
  35. package/ios/templates/GridTemplate.swift +23 -16
  36. package/ios/templates/InformationTemplate.swift +12 -11
  37. package/ios/templates/ListTemplate.swift +11 -11
  38. package/ios/templates/MapTemplate.swift +44 -42
  39. package/ios/templates/MessageTemplate.swift +8 -12
  40. package/ios/templates/Parser.swift +2 -1
  41. package/ios/templates/SearchTemplate.swift +19 -17
  42. package/ios/templates/TemplateStore.swift +17 -9
  43. package/ios/utils/RootModule.swift +19 -12
  44. package/ios/utils/SymbolFont.swift +2 -1
  45. package/ios/utils/ViewUtils.swift +2 -2
  46. package/lib/hooks/useAndroidAutoTelemetry.d.ts +22 -4
  47. package/lib/hooks/useAndroidAutoTelemetry.js +52 -24
  48. package/lib/index.d.ts +2 -0
  49. package/lib/index.js +2 -0
  50. package/lib/specs/AndroidAutoTelemetry.nitro.d.ts +14 -1
  51. package/lib/types/Telemetry.d.ts +27 -0
  52. package/lib/types/Telemetry.js +7 -0
  53. package/nitro.json +3 -0
  54. package/nitrogen/generated/android/ReactNativeAutoPlay+autolinking.cmake +3 -0
  55. package/nitrogen/generated/android/ReactNativeAutoPlayOnLoad.cpp +12 -2
  56. package/nitrogen/generated/android/c++/JBooleanTelemetryItem.hpp +61 -0
  57. package/nitrogen/generated/android/c++/JFunc_void_std__optional_Telemetry_.hpp +87 -0
  58. package/nitrogen/generated/android/c++/JFunc_void_std__string.hpp +10 -10
  59. package/nitrogen/generated/android/c++/JHybridAndroidAutoTelemetrySpec.cpp +41 -5
  60. package/nitrogen/generated/android/c++/JHybridAndroidAutoTelemetrySpec.hpp +2 -1
  61. package/nitrogen/generated/android/c++/JHybridSignInTemplateSpec.cpp +133 -0
  62. package/nitrogen/generated/android/c++/JHybridSignInTemplateSpec.hpp +66 -0
  63. package/nitrogen/generated/android/c++/JInputSignIn.hpp +103 -0
  64. package/nitrogen/generated/android/c++/JKeyboardType.hpp +65 -0
  65. package/nitrogen/generated/android/c++/JPermissionRequestResult.hpp +98 -0
  66. package/nitrogen/generated/android/c++/JPinSignIn.hpp +63 -0
  67. package/nitrogen/generated/android/c++/JQrSignIn.hpp +63 -0
  68. package/nitrogen/generated/android/c++/JSignInMethods.hpp +65 -0
  69. package/nitrogen/generated/android/c++/JSignInTemplateConfig.hpp +217 -0
  70. package/nitrogen/generated/android/c++/JTelemetry.hpp +25 -3
  71. package/nitrogen/generated/android/c++/JTextInputType.hpp +59 -0
  72. package/nitrogen/generated/android/c++/JVariant_QrSignIn_PinSignIn_InputSignIn.cpp +30 -0
  73. package/nitrogen/generated/android/c++/JVariant_QrSignIn_PinSignIn_InputSignIn.hpp +99 -0
  74. package/nitrogen/generated/android/kotlin/com/margelo/nitro/swe/iternio/reactnativeautoplay/AssetImage.kt +2 -2
  75. package/nitrogen/generated/android/kotlin/com/margelo/nitro/swe/iternio/reactnativeautoplay/AutoText.kt +3 -3
  76. package/nitrogen/generated/android/kotlin/com/margelo/nitro/swe/iternio/reactnativeautoplay/BooleanTelemetryItem.kt +41 -0
  77. package/nitrogen/generated/android/kotlin/com/margelo/nitro/swe/iternio/reactnativeautoplay/Distance.kt +1 -1
  78. package/nitrogen/generated/android/kotlin/com/margelo/nitro/swe/iternio/reactnativeautoplay/DurationWithTimeZone.kt +1 -1
  79. package/nitrogen/generated/android/kotlin/com/margelo/nitro/swe/iternio/reactnativeautoplay/{Func_void_std__optional_Telemetry__std__optional_std__string_.kt → Func_void_std__optional_Telemetry_.kt} +14 -14
  80. package/nitrogen/generated/android/kotlin/com/margelo/nitro/swe/iternio/reactnativeautoplay/Func_void_std__string.kt +9 -9
  81. package/nitrogen/generated/android/kotlin/com/margelo/nitro/swe/iternio/reactnativeautoplay/GlyphImage.kt +2 -2
  82. package/nitrogen/generated/android/kotlin/com/margelo/nitro/swe/iternio/reactnativeautoplay/GridTemplateConfig.kt +9 -9
  83. package/nitrogen/generated/android/kotlin/com/margelo/nitro/swe/iternio/reactnativeautoplay/HybridAndroidAutoTelemetrySpec.kt +7 -2
  84. package/nitrogen/generated/android/kotlin/com/margelo/nitro/swe/iternio/reactnativeautoplay/HybridSignInTemplateSpec.kt +62 -0
  85. package/nitrogen/generated/android/kotlin/com/margelo/nitro/swe/iternio/reactnativeautoplay/ImageLane.kt +1 -1
  86. package/nitrogen/generated/android/kotlin/com/margelo/nitro/swe/iternio/reactnativeautoplay/InformationTemplateConfig.kt +10 -10
  87. package/nitrogen/generated/android/kotlin/com/margelo/nitro/swe/iternio/reactnativeautoplay/InputSignIn.kt +63 -0
  88. package/nitrogen/generated/android/kotlin/com/margelo/nitro/swe/iternio/reactnativeautoplay/KeyboardType.kt +23 -0
  89. package/nitrogen/generated/android/kotlin/com/margelo/nitro/swe/iternio/reactnativeautoplay/LaneGuidance.kt +1 -1
  90. package/nitrogen/generated/android/kotlin/com/margelo/nitro/swe/iternio/reactnativeautoplay/ListTemplateConfig.kt +10 -10
  91. package/nitrogen/generated/android/kotlin/com/margelo/nitro/swe/iternio/reactnativeautoplay/Location.kt +1 -1
  92. package/nitrogen/generated/android/kotlin/com/margelo/nitro/swe/iternio/reactnativeautoplay/MapTemplateConfig.kt +18 -18
  93. package/nitrogen/generated/android/kotlin/com/margelo/nitro/swe/iternio/reactnativeautoplay/MessageTemplateConfig.kt +12 -12
  94. package/nitrogen/generated/android/kotlin/com/margelo/nitro/swe/iternio/reactnativeautoplay/NavigationAlertAction.kt +2 -2
  95. package/nitrogen/generated/android/kotlin/com/margelo/nitro/swe/iternio/reactnativeautoplay/NitroAction.kt +7 -7
  96. package/nitrogen/generated/android/kotlin/com/margelo/nitro/swe/iternio/reactnativeautoplay/NitroAttributedString.kt +2 -2
  97. package/nitrogen/generated/android/kotlin/com/margelo/nitro/swe/iternio/reactnativeautoplay/NitroAttributedStringImage.kt +1 -1
  98. package/nitrogen/generated/android/kotlin/com/margelo/nitro/swe/iternio/reactnativeautoplay/NitroBaseMapTemplateConfig.kt +10 -10
  99. package/nitrogen/generated/android/kotlin/com/margelo/nitro/swe/iternio/reactnativeautoplay/NitroColor.kt +1 -1
  100. package/nitrogen/generated/android/kotlin/com/margelo/nitro/swe/iternio/reactnativeautoplay/NitroGridButton.kt +1 -1
  101. package/nitrogen/generated/android/kotlin/com/margelo/nitro/swe/iternio/reactnativeautoplay/NitroLoadingManeuver.kt +1 -1
  102. package/nitrogen/generated/android/kotlin/com/margelo/nitro/swe/iternio/reactnativeautoplay/NitroMapButton.kt +2 -2
  103. package/nitrogen/generated/android/kotlin/com/margelo/nitro/swe/iternio/reactnativeautoplay/NitroMessageManeuver.kt +3 -3
  104. package/nitrogen/generated/android/kotlin/com/margelo/nitro/swe/iternio/reactnativeautoplay/NitroNavigationAlert.kt +6 -6
  105. package/nitrogen/generated/android/kotlin/com/margelo/nitro/swe/iternio/reactnativeautoplay/NitroRoutingManeuver.kt +13 -13
  106. package/nitrogen/generated/android/kotlin/com/margelo/nitro/swe/iternio/reactnativeautoplay/NitroRow.kt +7 -7
  107. package/nitrogen/generated/android/kotlin/com/margelo/nitro/swe/iternio/reactnativeautoplay/NitroSection.kt +2 -2
  108. package/nitrogen/generated/android/kotlin/com/margelo/nitro/swe/iternio/reactnativeautoplay/NumericTelemetryItem.kt +1 -1
  109. package/nitrogen/generated/android/kotlin/com/margelo/nitro/swe/iternio/reactnativeautoplay/PermissionRequestResult.kt +41 -0
  110. package/nitrogen/generated/android/kotlin/com/margelo/nitro/swe/iternio/reactnativeautoplay/PinSignIn.kt +41 -0
  111. package/nitrogen/generated/android/kotlin/com/margelo/nitro/swe/iternio/reactnativeautoplay/Point.kt +1 -1
  112. package/nitrogen/generated/android/kotlin/com/margelo/nitro/swe/iternio/reactnativeautoplay/PreferredImageLane.kt +1 -1
  113. package/nitrogen/generated/android/kotlin/com/margelo/nitro/swe/iternio/reactnativeautoplay/QrSignIn.kt +41 -0
  114. package/nitrogen/generated/android/kotlin/com/margelo/nitro/swe/iternio/reactnativeautoplay/RouteChoice.kt +1 -1
  115. package/nitrogen/generated/android/kotlin/com/margelo/nitro/swe/iternio/reactnativeautoplay/SafeAreaInsets.kt +2 -2
  116. package/nitrogen/generated/android/kotlin/com/margelo/nitro/swe/iternio/reactnativeautoplay/SearchTemplateConfig.kt +10 -10
  117. package/nitrogen/generated/android/kotlin/com/margelo/nitro/swe/iternio/reactnativeautoplay/SignInMethods.kt +23 -0
  118. package/nitrogen/generated/android/kotlin/com/margelo/nitro/swe/iternio/reactnativeautoplay/SignInTemplateConfig.kt +78 -0
  119. package/nitrogen/generated/android/kotlin/com/margelo/nitro/swe/iternio/reactnativeautoplay/StringTelemetryItem.kt +1 -1
  120. package/nitrogen/generated/android/kotlin/com/margelo/nitro/swe/iternio/reactnativeautoplay/Telemetry.kt +24 -9
  121. package/nitrogen/generated/android/kotlin/com/margelo/nitro/swe/iternio/reactnativeautoplay/TextInputType.kt +21 -0
  122. package/nitrogen/generated/android/kotlin/com/margelo/nitro/swe/iternio/reactnativeautoplay/TravelEstimates.kt +2 -2
  123. package/nitrogen/generated/android/kotlin/com/margelo/nitro/swe/iternio/reactnativeautoplay/TripConfig.kt +1 -1
  124. package/nitrogen/generated/android/kotlin/com/margelo/nitro/swe/iternio/reactnativeautoplay/TripPoint.kt +1 -1
  125. package/nitrogen/generated/android/kotlin/com/margelo/nitro/swe/iternio/reactnativeautoplay/TripPreviewTextConfiguration.kt +1 -1
  126. package/nitrogen/generated/android/kotlin/com/margelo/nitro/swe/iternio/reactnativeautoplay/TripSelectorCallback.kt +1 -1
  127. package/nitrogen/generated/android/kotlin/com/margelo/nitro/swe/iternio/reactnativeautoplay/TripsConfig.kt +1 -1
  128. package/nitrogen/generated/android/kotlin/com/margelo/nitro/swe/iternio/reactnativeautoplay/Variant_QrSignIn_PinSignIn_InputSignIn.kt +72 -0
  129. package/nitrogen/generated/android/kotlin/com/margelo/nitro/swe/iternio/reactnativeautoplay/VehicleTelemetryItem.kt +4 -4
  130. package/nitrogen/generated/shared/c++/BooleanTelemetryItem.hpp +79 -0
  131. package/nitrogen/generated/shared/c++/HybridAndroidAutoTelemetrySpec.cpp +1 -0
  132. package/nitrogen/generated/shared/c++/HybridAndroidAutoTelemetrySpec.hpp +7 -1
  133. package/nitrogen/generated/shared/c++/HybridSignInTemplateSpec.cpp +22 -0
  134. package/nitrogen/generated/shared/c++/HybridSignInTemplateSpec.hpp +66 -0
  135. package/nitrogen/generated/shared/c++/InputSignIn.hpp +113 -0
  136. package/nitrogen/generated/shared/c++/KeyboardType.hpp +64 -0
  137. package/nitrogen/generated/shared/c++/PermissionRequestResult.hpp +80 -0
  138. package/nitrogen/generated/shared/c++/PinSignIn.hpp +81 -0
  139. package/nitrogen/generated/shared/c++/QrSignIn.hpp +81 -0
  140. package/nitrogen/generated/shared/c++/SignInMethods.hpp +64 -0
  141. package/nitrogen/generated/shared/c++/SignInTemplateConfig.hpp +138 -0
  142. package/nitrogen/generated/shared/c++/Telemetry.hpp +25 -2
  143. package/nitrogen/generated/shared/c++/TextInputType.hpp +62 -0
  144. package/package.json +3 -2
  145. package/src/hooks/useAndroidAutoTelemetry.ts +80 -27
  146. package/src/index.ts +2 -0
  147. package/src/specs/AndroidAutoTelemetry.nitro.ts +19 -1
  148. package/src/specs/SignInTemplate.nitro.ts +10 -0
  149. package/src/templates/SignInTemplate.ts +117 -0
  150. package/src/types/SignInMethod.ts +41 -0
  151. package/src/types/Telemetry.ts +29 -0
  152. package/lib/hooks/useIsAutoPlayFocused.d.ts +0 -7
  153. package/lib/hooks/useIsAutoPlayFocused.js +0 -20
  154. package/lib/hybrid.d.ts +0 -2
  155. package/lib/hybrid.js +0 -2
  156. package/lib/specs/AutomotivePermissionRequestTemplate.d.ts +0 -11
  157. package/lib/specs/AutomotivePermissionRequestTemplate.js +0 -1
  158. package/lib/specs/AutomotivePermissionRequestTemplate.nitro.d.ts +0 -11
  159. package/lib/specs/AutomotivePermissionRequestTemplate.nitro.js +0 -1
  160. package/lib/templates/AutomotivePermissionRequestTemplate.d.ts +0 -23
  161. package/lib/templates/AutomotivePermissionRequestTemplate.js +0 -18
  162. package/nitrogen/generated/android/c++/JFunc_void_std__optional_Telemetry__std__optional_std__string_.hpp +0 -85
@@ -8,8 +8,8 @@ import { HybridAndroidAutoTelemetry, HybridAutoPlay } from '..';
8
8
  * @param requestTelemetryPermissions If true, the telemetry permissions will be requested from the user. Can be set to false initially, in case other permissions need to be requested first, so the permission request dialogs do not overlap.
9
9
  * @param requiredPermissions The permissions to check.
10
10
  */
11
- export const useAndroidAutoTelemetry = ({ requestTelemetryPermissions = true, requiredPermissions, }) => {
12
- const [permissionsGranted, setPermissionsGranted] = useState(false);
11
+ export const useAndroidAutoTelemetry = ({ requestTelemetryPermissions = true, requiredPermissions, automotivePermissionRequest, }) => {
12
+ const [permissionsGranted, setPermissionsGranted] = useState(null);
13
13
  const [telemetry, setTelemetry] = useState(undefined);
14
14
  const [error, setError] = useState(undefined);
15
15
  const [isConnected, setIsConnected] = useState(false);
@@ -27,43 +27,71 @@ export const useAndroidAutoTelemetry = ({ requestTelemetryPermissions = true, re
27
27
  const state = await Promise.all(requiredPermissions.map((permission) => PermissionsAndroid.check(permission).catch(() => false)));
28
28
  setPermissionsGranted(state.every((granted) => granted));
29
29
  };
30
- checkPermissions();
30
+ void checkPermissions();
31
31
  }, [requiredPermissions]);
32
32
  useEffect(() => {
33
33
  if (!isConnected || !permissionsGranted) {
34
34
  return;
35
35
  }
36
- const remove = HybridAndroidAutoTelemetry?.registerTelemetryListener((tlm, errorMessage) => {
37
- setError(errorMessage);
38
- setTelemetry(tlm);
39
- });
40
- return () => {
41
- remove?.();
42
- };
36
+ try {
37
+ const remove = HybridAndroidAutoTelemetry?.registerTelemetryListener(setTelemetry);
38
+ return () => remove?.();
39
+ }
40
+ catch (e) {
41
+ if (e instanceof Error) {
42
+ setError(`${e.name}: ${e.message}\n${e.stack ?? ''}`.trim());
43
+ }
44
+ else {
45
+ setError(String(e));
46
+ }
47
+ }
48
+ return;
43
49
  }, [isConnected, permissionsGranted]);
44
50
  useEffect(() => {
45
- if (requestTelemetryPermissions && requiredPermissions.length > 0) {
46
- // PermissionsAndroid is not aware of automotive permissions
47
- PermissionsAndroid.requestMultiple(requiredPermissions)
48
- .then((value) => {
49
- const isGranted = requiredPermissions.every((permission) => value[permission] === 'granted');
51
+ if (!requestTelemetryPermissions || requiredPermissions.length === 0) {
52
+ return;
53
+ }
54
+ if (permissionsGranted !== false) {
55
+ // either wait for permission request to finish or do nothing in case permissions are granted already
56
+ return;
57
+ }
58
+ if (automotivePermissionRequest?.message != null) {
59
+ HybridAndroidAutoTelemetry?.requestAutomotivePermissions(requiredPermissions, automotivePermissionRequest.message, automotivePermissionRequest.grantButtonText, automotivePermissionRequest.cancelButtonText).then(({ granted, denied }) => {
60
+ const isGranted = granted.length === requiredPermissions.length;
61
+ setPermissionsGranted(isGranted);
50
62
  if (!isGranted) {
51
- console.warn('*** Android Auto telemetry permissions not granted');
52
- return;
63
+ setError(`Android Automotive permissions denied: [${denied.join(',')}]`);
53
64
  }
54
- setPermissionsGranted(true);
55
- })
56
- .catch((e) => console.error('*** Android Auto telemetry permissions error', e));
65
+ });
66
+ return;
57
67
  }
58
- return;
59
- }, [requestTelemetryPermissions, requiredPermissions]);
68
+ // PermissionsAndroid is not aware of Android Auto related permissions
69
+ PermissionsAndroid.requestMultiple(requiredPermissions)
70
+ .then((result) => {
71
+ const isGranted = requiredPermissions.every((permission) => result[permission] === 'granted');
72
+ if (!isGranted) {
73
+ console.warn('Android Auto telemetry permissions not granted');
74
+ return;
75
+ }
76
+ setPermissionsGranted(true);
77
+ })
78
+ .catch((e) => console.error('Android Auto telemetry permissions error', e));
79
+ }, [
80
+ requestTelemetryPermissions,
81
+ requiredPermissions,
82
+ permissionsGranted,
83
+ automotivePermissionRequest?.cancelButtonText,
84
+ automotivePermissionRequest?.grantButtonText,
85
+ automotivePermissionRequest?.message,
86
+ ]);
60
87
  return {
61
88
  /**
62
- * True if the telemetry permissions are granted, false otherwise.
89
+ * null on pending permission check, True if the telemetry permissions are granted, false otherwise.
63
90
  */
64
91
  permissionsGranted,
65
92
  /**
66
- * The telemetry data.
93
+ * The telemetry data, might be a partial update not containing all properties of the regular timed updates.
94
+ * For example gear changes are emitted immediately without all the other telemetry data.
67
95
  */
68
96
  telemetry,
69
97
  /**
package/lib/index.d.ts CHANGED
@@ -25,12 +25,14 @@ export * from './templates/ListTemplate';
25
25
  export * from './templates/MapTemplate';
26
26
  export * from './templates/MessageTemplate';
27
27
  export * from './templates/SearchTemplate';
28
+ export * from './templates/SignInTemplate';
28
29
  export * from './templates/Template';
29
30
  export * from './types/Button';
30
31
  export * from './types/Event';
31
32
  export * from './types/Image';
32
33
  export * from './types/Maneuver';
33
34
  export * from './types/RootComponent';
35
+ export * from './types/SignInMethod';
34
36
  export * from './types/Telemetry';
35
37
  export * from './types/Text';
36
38
  export * from './types/Trip';
package/lib/index.js CHANGED
@@ -30,12 +30,14 @@ export * from './templates/ListTemplate';
30
30
  export * from './templates/MapTemplate';
31
31
  export * from './templates/MessageTemplate';
32
32
  export * from './templates/SearchTemplate';
33
+ export * from './templates/SignInTemplate';
33
34
  export * from './templates/Template';
34
35
  export * from './types/Button';
35
36
  export * from './types/Event';
36
37
  export * from './types/Image';
37
38
  export * from './types/Maneuver';
38
39
  export * from './types/RootComponent';
40
+ export * from './types/SignInMethod';
39
41
  export * from './types/Telemetry';
40
42
  export * from './types/Text';
41
43
  export * from './types/Trip';
@@ -1,6 +1,10 @@
1
1
  import type { HybridObject } from 'react-native-nitro-modules';
2
2
  import type { CleanupCallback } from '../types/Event';
3
3
  import type { Telemetry } from '../types/Telemetry';
4
+ type PermissionRequestResult = {
5
+ granted: Array<string>;
6
+ denied: Array<string>;
7
+ };
4
8
  export interface AndroidAutoTelemetry extends HybridObject<{
5
9
  android: 'kotlin';
6
10
  }> {
@@ -11,5 +15,14 @@ export interface AndroidAutoTelemetry extends HybridObject<{
11
15
  * @returns callback to remove the listener
12
16
  * @namespace Android
13
17
  */
14
- registerTelemetryListener(callback: (tlm?: Telemetry, error?: string) => void): CleanupCallback;
18
+ registerTelemetryListener(callback: (tlm?: Telemetry) => void): CleanupCallback;
19
+ /**
20
+ * Brings up a template to request specified permissions from the user
21
+ * @param permissions some of `AndroidAutoPermissions`
22
+ * @param message text shown on the template
23
+ * @param grantButtonText primary action button text
24
+ * @param cancelButtonText secondary action button text, if not specified button will not be shown
25
+ */
26
+ requestAutomotivePermissions(permissions: Array<string>, message: string, grantButtonText: string, cancelButtonText?: string): Promise<PermissionRequestResult>;
15
27
  }
28
+ export {};
@@ -30,11 +30,24 @@ type StringTelemetryItem = {
30
30
  timestamp: number;
31
31
  value: string;
32
32
  };
33
+ type BooleanTelemetryItem = {
34
+ /**
35
+ * timestamp in seconds when the value was received on native side
36
+ */
37
+ timestamp: number;
38
+ value: boolean;
39
+ };
33
40
  type VehicleTelemetryItem = {
34
41
  name?: StringTelemetryItem;
35
42
  year?: NumericTelemetryItem;
36
43
  manufacturer?: StringTelemetryItem;
37
44
  };
45
+ export declare enum VehicleGear {
46
+ Neutral = 1,
47
+ Reverse = 2,
48
+ Park = 4,
49
+ Drive = 8
50
+ }
38
51
  export type Telemetry = {
39
52
  /**
40
53
  * Speed in km/h
@@ -60,5 +73,19 @@ export type Telemetry = {
60
73
  * Vehicle information
61
74
  */
62
75
  vehicle?: VehicleTelemetryItem;
76
+ /**
77
+ * one of VehicleGear enum
78
+ */
79
+ selectedGear?: NumericTelemetryItem;
80
+ /**
81
+ * Outside temperature in celsius.
82
+ */
83
+ envOutsideTemperature?: NumericTelemetryItem;
84
+ evChargePortConnected?: BooleanTelemetryItem;
85
+ /**
86
+ * EV instantaneous charge rate in kW.
87
+ */
88
+ evBatteryInstantaneousChargeRate?: NumericTelemetryItem;
89
+ parkingBrakeOn?: BooleanTelemetryItem;
63
90
  };
64
91
  export {};
@@ -12,3 +12,10 @@ export var AndroidAutomotiveTelemetryPermissions;
12
12
  AndroidAutomotiveTelemetryPermissions["ExteriorEnvironment"] = "android.car.permission.CAR_EXTERIOR_ENVIRONMENT";
13
13
  AndroidAutomotiveTelemetryPermissions["EnergyPorts"] = "android.car.permission.CAR_ENERGY_PORTS";
14
14
  })(AndroidAutomotiveTelemetryPermissions || (AndroidAutomotiveTelemetryPermissions = {}));
15
+ export var VehicleGear;
16
+ (function (VehicleGear) {
17
+ VehicleGear[VehicleGear["Neutral"] = 1] = "Neutral";
18
+ VehicleGear[VehicleGear["Reverse"] = 2] = "Reverse";
19
+ VehicleGear[VehicleGear["Park"] = 4] = "Park";
20
+ VehicleGear[VehicleGear["Drive"] = 8] = "Drive";
21
+ })(VehicleGear || (VehicleGear = {}));
package/nitro.json CHANGED
@@ -16,6 +16,9 @@
16
16
  "AndroidAutoTelemetry": {
17
17
  "kotlin": "HybridAndroidAutoTelemetry"
18
18
  },
19
+ "SignInTemplate": {
20
+ "kotlin": "HybridSignInTemplate"
21
+ },
19
22
  "ListTemplate": {
20
23
  "kotlin": "HybridListTemplate",
21
24
  "swift": "HybridListTemplate"
@@ -43,6 +43,7 @@ target_sources(
43
43
  ../nitrogen/generated/shared/c++/HybridMapTemplateSpec.cpp
44
44
  ../nitrogen/generated/shared/c++/HybridMessageTemplateSpec.cpp
45
45
  ../nitrogen/generated/shared/c++/HybridSearchTemplateSpec.cpp
46
+ ../nitrogen/generated/shared/c++/HybridSignInTemplateSpec.cpp
46
47
  # Android-specific Nitrogen C++ sources
47
48
  ../nitrogen/generated/android/c++/JHybridAndroidAutoTelemetrySpec.cpp
48
49
  ../nitrogen/generated/android/c++/JHybridAutoPlaySpec.cpp
@@ -57,6 +58,8 @@ target_sources(
57
58
  ../nitrogen/generated/android/c++/JVariant_PreferredImageLane_ImageLane.cpp
58
59
  ../nitrogen/generated/android/c++/JHybridMessageTemplateSpec.cpp
59
60
  ../nitrogen/generated/android/c++/JHybridSearchTemplateSpec.cpp
61
+ ../nitrogen/generated/android/c++/JHybridSignInTemplateSpec.cpp
62
+ ../nitrogen/generated/android/c++/JVariant_QrSignIn_PinSignIn_InputSignIn.cpp
60
63
  )
61
64
 
62
65
  # From node_modules/react-native/ReactAndroid/cmake-utils/folly-flags.cmake
@@ -17,7 +17,7 @@
17
17
 
18
18
  #include "JHybridAndroidAutoTelemetrySpec.hpp"
19
19
  #include "JFunc_void.hpp"
20
- #include "JFunc_void_std__optional_Telemetry__std__optional_std__string_.hpp"
20
+ #include "JFunc_void_std__optional_Telemetry_.hpp"
21
21
  #include "JHybridAutoPlaySpec.hpp"
22
22
  #include "JFunc_void_VisibilityState.hpp"
23
23
  #include "JFunc_void_std__optional_Location__std__optional_std__string_.hpp"
@@ -41,6 +41,7 @@
41
41
  #include "JFunc_void_std__string_std__string.hpp"
42
42
  #include "JHybridMessageTemplateSpec.hpp"
43
43
  #include "JHybridSearchTemplateSpec.hpp"
44
+ #include "JHybridSignInTemplateSpec.hpp"
44
45
  #include <NitroModules/DefaultConstructableObject.hpp>
45
46
 
46
47
  namespace margelo::nitro::swe::iternio::reactnativeautoplay {
@@ -54,7 +55,7 @@ int initialize(JavaVM* vm) {
54
55
  // Register native JNI methods
55
56
  margelo::nitro::swe::iternio::reactnativeautoplay::JHybridAndroidAutoTelemetrySpec::registerNatives();
56
57
  margelo::nitro::swe::iternio::reactnativeautoplay::JFunc_void_cxx::registerNatives();
57
- margelo::nitro::swe::iternio::reactnativeautoplay::JFunc_void_std__optional_Telemetry__std__optional_std__string__cxx::registerNatives();
58
+ margelo::nitro::swe::iternio::reactnativeautoplay::JFunc_void_std__optional_Telemetry__cxx::registerNatives();
58
59
  margelo::nitro::swe::iternio::reactnativeautoplay::JHybridAutoPlaySpec::registerNatives();
59
60
  margelo::nitro::swe::iternio::reactnativeautoplay::JFunc_void_VisibilityState_cxx::registerNatives();
60
61
  margelo::nitro::swe::iternio::reactnativeautoplay::JFunc_void_std__optional_Location__std__optional_std__string__cxx::registerNatives();
@@ -78,6 +79,7 @@ int initialize(JavaVM* vm) {
78
79
  margelo::nitro::swe::iternio::reactnativeautoplay::JFunc_void_std__string_std__string_cxx::registerNatives();
79
80
  margelo::nitro::swe::iternio::reactnativeautoplay::JHybridMessageTemplateSpec::registerNatives();
80
81
  margelo::nitro::swe::iternio::reactnativeautoplay::JHybridSearchTemplateSpec::registerNatives();
82
+ margelo::nitro::swe::iternio::reactnativeautoplay::JHybridSignInTemplateSpec::registerNatives();
81
83
 
82
84
  // Register Nitro Hybrid Objects
83
85
  HybridObjectRegistry::registerHybridObjectConstructor(
@@ -96,6 +98,14 @@ int initialize(JavaVM* vm) {
96
98
  return instance->cthis()->shared();
97
99
  }
98
100
  );
101
+ HybridObjectRegistry::registerHybridObjectConstructor(
102
+ "SignInTemplate",
103
+ []() -> std::shared_ptr<HybridObject> {
104
+ static DefaultConstructableObject<JHybridSignInTemplateSpec::javaobject> object("com/margelo/nitro/swe/iternio/reactnativeautoplay/HybridSignInTemplate");
105
+ auto instance = object.create();
106
+ return instance->cthis()->shared();
107
+ }
108
+ );
99
109
  HybridObjectRegistry::registerHybridObjectConstructor(
100
110
  "ListTemplate",
101
111
  []() -> std::shared_ptr<HybridObject> {
@@ -0,0 +1,61 @@
1
+ ///
2
+ /// JBooleanTelemetryItem.hpp
3
+ /// This file was generated by nitrogen. DO NOT MODIFY THIS FILE.
4
+ /// https://github.com/mrousavy/nitro
5
+ /// Copyright © 2025 Marc Rousavy @ Margelo
6
+ ///
7
+
8
+ #pragma once
9
+
10
+ #include <fbjni/fbjni.h>
11
+ #include "BooleanTelemetryItem.hpp"
12
+
13
+
14
+
15
+ namespace margelo::nitro::swe::iternio::reactnativeautoplay {
16
+
17
+ using namespace facebook;
18
+
19
+ /**
20
+ * The C++ JNI bridge between the C++ struct "BooleanTelemetryItem" and the the Kotlin data class "BooleanTelemetryItem".
21
+ */
22
+ struct JBooleanTelemetryItem final: public jni::JavaClass<JBooleanTelemetryItem> {
23
+ public:
24
+ static auto constexpr kJavaDescriptor = "Lcom/margelo/nitro/swe/iternio/reactnativeautoplay/BooleanTelemetryItem;";
25
+
26
+ public:
27
+ /**
28
+ * Convert this Java/Kotlin-based struct to the C++ struct BooleanTelemetryItem by copying all values to C++.
29
+ */
30
+ [[maybe_unused]]
31
+ [[nodiscard]]
32
+ BooleanTelemetryItem toCpp() const {
33
+ static const auto clazz = javaClassStatic();
34
+ static const auto fieldTimestamp = clazz->getField<double>("timestamp");
35
+ double timestamp = this->getFieldValue(fieldTimestamp);
36
+ static const auto fieldValue = clazz->getField<jboolean>("value");
37
+ jboolean value = this->getFieldValue(fieldValue);
38
+ return BooleanTelemetryItem(
39
+ timestamp,
40
+ static_cast<bool>(value)
41
+ );
42
+ }
43
+
44
+ public:
45
+ /**
46
+ * Create a Java/Kotlin-based struct by copying all values from the given C++ struct to Java.
47
+ */
48
+ [[maybe_unused]]
49
+ static jni::local_ref<JBooleanTelemetryItem::javaobject> fromCpp(const BooleanTelemetryItem& value) {
50
+ using JSignature = JBooleanTelemetryItem(double, jboolean);
51
+ static const auto clazz = javaClassStatic();
52
+ static const auto create = clazz->getStaticMethod<JSignature>("fromCpp");
53
+ return create(
54
+ clazz,
55
+ value.timestamp,
56
+ value.value
57
+ );
58
+ }
59
+ };
60
+
61
+ } // namespace margelo::nitro::swe::iternio::reactnativeautoplay
@@ -0,0 +1,87 @@
1
+ ///
2
+ /// JFunc_void_std__optional_Telemetry_.hpp
3
+ /// This file was generated by nitrogen. DO NOT MODIFY THIS FILE.
4
+ /// https://github.com/mrousavy/nitro
5
+ /// Copyright © 2025 Marc Rousavy @ Margelo
6
+ ///
7
+
8
+ #pragma once
9
+
10
+ #include <fbjni/fbjni.h>
11
+ #include <functional>
12
+
13
+ #include "Telemetry.hpp"
14
+ #include <optional>
15
+ #include <functional>
16
+ #include <NitroModules/JNICallable.hpp>
17
+ #include "JTelemetry.hpp"
18
+ #include "NumericTelemetryItem.hpp"
19
+ #include "JNumericTelemetryItem.hpp"
20
+ #include "VehicleTelemetryItem.hpp"
21
+ #include "JVehicleTelemetryItem.hpp"
22
+ #include "StringTelemetryItem.hpp"
23
+ #include "JStringTelemetryItem.hpp"
24
+ #include <string>
25
+ #include "BooleanTelemetryItem.hpp"
26
+ #include "JBooleanTelemetryItem.hpp"
27
+
28
+ namespace margelo::nitro::swe::iternio::reactnativeautoplay {
29
+
30
+ using namespace facebook;
31
+
32
+ /**
33
+ * Represents the Java/Kotlin callback `(tlm: Telemetry?) -> Unit`.
34
+ * This can be passed around between C++ and Java/Kotlin.
35
+ */
36
+ struct JFunc_void_std__optional_Telemetry_: public jni::JavaClass<JFunc_void_std__optional_Telemetry_> {
37
+ public:
38
+ static auto constexpr kJavaDescriptor = "Lcom/margelo/nitro/swe/iternio/reactnativeautoplay/Func_void_std__optional_Telemetry_;";
39
+
40
+ public:
41
+ /**
42
+ * Invokes the function this `JFunc_void_std__optional_Telemetry_` instance holds through JNI.
43
+ */
44
+ void invoke(const std::optional<Telemetry>& tlm) const {
45
+ static const auto method = javaClassStatic()->getMethod<void(jni::alias_ref<JTelemetry> /* tlm */)>("invoke");
46
+ method(self(), tlm.has_value() ? JTelemetry::fromCpp(tlm.value()) : nullptr);
47
+ }
48
+ };
49
+
50
+ /**
51
+ * An implementation of Func_void_std__optional_Telemetry_ that is backed by a C++ implementation (using `std::function<...>`)
52
+ */
53
+ class JFunc_void_std__optional_Telemetry__cxx final: public jni::HybridClass<JFunc_void_std__optional_Telemetry__cxx, JFunc_void_std__optional_Telemetry_> {
54
+ public:
55
+ static jni::local_ref<JFunc_void_std__optional_Telemetry_::javaobject> fromCpp(const std::function<void(const std::optional<Telemetry>& /* tlm */)>& func) {
56
+ return JFunc_void_std__optional_Telemetry__cxx::newObjectCxxArgs(func);
57
+ }
58
+
59
+ public:
60
+ /**
61
+ * Invokes the C++ `std::function<...>` this `JFunc_void_std__optional_Telemetry__cxx` instance holds.
62
+ */
63
+ void invoke_cxx(jni::alias_ref<JTelemetry> tlm) {
64
+ _func(tlm != nullptr ? std::make_optional(tlm->toCpp()) : std::nullopt);
65
+ }
66
+
67
+ public:
68
+ [[nodiscard]]
69
+ inline const std::function<void(const std::optional<Telemetry>& /* tlm */)>& getFunction() const {
70
+ return _func;
71
+ }
72
+
73
+ public:
74
+ static auto constexpr kJavaDescriptor = "Lcom/margelo/nitro/swe/iternio/reactnativeautoplay/Func_void_std__optional_Telemetry__cxx;";
75
+ static void registerNatives() {
76
+ registerHybrid({makeNativeMethod("invoke_cxx", JFunc_void_std__optional_Telemetry__cxx::invoke_cxx)});
77
+ }
78
+
79
+ private:
80
+ explicit JFunc_void_std__optional_Telemetry__cxx(const std::function<void(const std::optional<Telemetry>& /* tlm */)>& func): _func(func) { }
81
+
82
+ private:
83
+ friend HybridBase;
84
+ std::function<void(const std::optional<Telemetry>& /* tlm */)> _func;
85
+ };
86
+
87
+ } // namespace margelo::nitro::swe::iternio::reactnativeautoplay
@@ -19,7 +19,7 @@ namespace margelo::nitro::swe::iternio::reactnativeautoplay {
19
19
  using namespace facebook;
20
20
 
21
21
  /**
22
- * Represents the Java/Kotlin callback `(searchText: String) -> Unit`.
22
+ * Represents the Java/Kotlin callback `(text: String) -> Unit`.
23
23
  * This can be passed around between C++ and Java/Kotlin.
24
24
  */
25
25
  struct JFunc_void_std__string: public jni::JavaClass<JFunc_void_std__string> {
@@ -30,9 +30,9 @@ namespace margelo::nitro::swe::iternio::reactnativeautoplay {
30
30
  /**
31
31
  * Invokes the function this `JFunc_void_std__string` instance holds through JNI.
32
32
  */
33
- void invoke(const std::string& searchText) const {
34
- static const auto method = javaClassStatic()->getMethod<void(jni::alias_ref<jni::JString> /* searchText */)>("invoke");
35
- method(self(), jni::make_jstring(searchText));
33
+ void invoke(const std::string& text) const {
34
+ static const auto method = javaClassStatic()->getMethod<void(jni::alias_ref<jni::JString> /* text */)>("invoke");
35
+ method(self(), jni::make_jstring(text));
36
36
  }
37
37
  };
38
38
 
@@ -41,7 +41,7 @@ namespace margelo::nitro::swe::iternio::reactnativeautoplay {
41
41
  */
42
42
  class JFunc_void_std__string_cxx final: public jni::HybridClass<JFunc_void_std__string_cxx, JFunc_void_std__string> {
43
43
  public:
44
- static jni::local_ref<JFunc_void_std__string::javaobject> fromCpp(const std::function<void(const std::string& /* searchText */)>& func) {
44
+ static jni::local_ref<JFunc_void_std__string::javaobject> fromCpp(const std::function<void(const std::string& /* text */)>& func) {
45
45
  return JFunc_void_std__string_cxx::newObjectCxxArgs(func);
46
46
  }
47
47
 
@@ -49,13 +49,13 @@ namespace margelo::nitro::swe::iternio::reactnativeautoplay {
49
49
  /**
50
50
  * Invokes the C++ `std::function<...>` this `JFunc_void_std__string_cxx` instance holds.
51
51
  */
52
- void invoke_cxx(jni::alias_ref<jni::JString> searchText) {
53
- _func(searchText->toStdString());
52
+ void invoke_cxx(jni::alias_ref<jni::JString> text) {
53
+ _func(text->toStdString());
54
54
  }
55
55
 
56
56
  public:
57
57
  [[nodiscard]]
58
- inline const std::function<void(const std::string& /* searchText */)>& getFunction() const {
58
+ inline const std::function<void(const std::string& /* text */)>& getFunction() const {
59
59
  return _func;
60
60
  }
61
61
 
@@ -66,11 +66,11 @@ namespace margelo::nitro::swe::iternio::reactnativeautoplay {
66
66
  }
67
67
 
68
68
  private:
69
- explicit JFunc_void_std__string_cxx(const std::function<void(const std::string& /* searchText */)>& func): _func(func) { }
69
+ explicit JFunc_void_std__string_cxx(const std::function<void(const std::string& /* text */)>& func): _func(func) { }
70
70
 
71
71
  private:
72
72
  friend HybridBase;
73
- std::function<void(const std::string& /* searchText */)> _func;
73
+ std::function<void(const std::string& /* text */)> _func;
74
74
  };
75
75
 
76
76
  } // namespace margelo::nitro::swe::iternio::reactnativeautoplay
@@ -7,6 +7,8 @@
7
7
 
8
8
  #include "JHybridAndroidAutoTelemetrySpec.hpp"
9
9
 
10
+ // Forward declaration of `PermissionRequestResult` to properly resolve imports.
11
+ namespace margelo::nitro::swe::iternio::reactnativeautoplay { struct PermissionRequestResult; }
10
12
  // Forward declaration of `Telemetry` to properly resolve imports.
11
13
  namespace margelo::nitro::swe::iternio::reactnativeautoplay { struct Telemetry; }
12
14
  // Forward declaration of `NumericTelemetryItem` to properly resolve imports.
@@ -15,14 +17,21 @@ namespace margelo::nitro::swe::iternio::reactnativeautoplay { struct NumericTele
15
17
  namespace margelo::nitro::swe::iternio::reactnativeautoplay { struct VehicleTelemetryItem; }
16
18
  // Forward declaration of `StringTelemetryItem` to properly resolve imports.
17
19
  namespace margelo::nitro::swe::iternio::reactnativeautoplay { struct StringTelemetryItem; }
20
+ // Forward declaration of `BooleanTelemetryItem` to properly resolve imports.
21
+ namespace margelo::nitro::swe::iternio::reactnativeautoplay { struct BooleanTelemetryItem; }
18
22
 
19
23
  #include <functional>
20
24
  #include "JFunc_void.hpp"
21
25
  #include <NitroModules/JNICallable.hpp>
26
+ #include "PermissionRequestResult.hpp"
27
+ #include <NitroModules/Promise.hpp>
28
+ #include <NitroModules/JPromise.hpp>
29
+ #include "JPermissionRequestResult.hpp"
30
+ #include <string>
31
+ #include <vector>
22
32
  #include "Telemetry.hpp"
23
33
  #include <optional>
24
- #include <string>
25
- #include "JFunc_void_std__optional_Telemetry__std__optional_std__string_.hpp"
34
+ #include "JFunc_void_std__optional_Telemetry_.hpp"
26
35
  #include "JTelemetry.hpp"
27
36
  #include "NumericTelemetryItem.hpp"
28
37
  #include "JNumericTelemetryItem.hpp"
@@ -30,6 +39,8 @@ namespace margelo::nitro::swe::iternio::reactnativeautoplay { struct StringTelem
30
39
  #include "JVehicleTelemetryItem.hpp"
31
40
  #include "StringTelemetryItem.hpp"
32
41
  #include "JStringTelemetryItem.hpp"
42
+ #include "BooleanTelemetryItem.hpp"
43
+ #include "JBooleanTelemetryItem.hpp"
33
44
 
34
45
  namespace margelo::nitro::swe::iternio::reactnativeautoplay {
35
46
 
@@ -63,9 +74,9 @@ namespace margelo::nitro::swe::iternio::reactnativeautoplay {
63
74
 
64
75
 
65
76
  // Methods
66
- std::function<void()> JHybridAndroidAutoTelemetrySpec::registerTelemetryListener(const std::function<void(const std::optional<Telemetry>& /* tlm */, const std::optional<std::string>& /* error */)>& callback) {
67
- static const auto method = javaClassStatic()->getMethod<jni::local_ref<JFunc_void::javaobject>(jni::alias_ref<JFunc_void_std__optional_Telemetry__std__optional_std__string_::javaobject> /* callback */)>("registerTelemetryListener_cxx");
68
- auto __result = method(_javaPart, JFunc_void_std__optional_Telemetry__std__optional_std__string__cxx::fromCpp(callback));
77
+ std::function<void()> JHybridAndroidAutoTelemetrySpec::registerTelemetryListener(const std::function<void(const std::optional<Telemetry>& /* tlm */)>& callback) {
78
+ static const auto method = javaClassStatic()->getMethod<jni::local_ref<JFunc_void::javaobject>(jni::alias_ref<JFunc_void_std__optional_Telemetry_::javaobject> /* callback */)>("registerTelemetryListener_cxx");
79
+ auto __result = method(_javaPart, JFunc_void_std__optional_Telemetry__cxx::fromCpp(callback));
69
80
  return [&]() -> std::function<void()> {
70
81
  if (__result->isInstanceOf(JFunc_void_cxx::javaClassStatic())) [[likely]] {
71
82
  auto downcast = jni::static_ref_cast<JFunc_void_cxx::javaobject>(__result);
@@ -76,5 +87,30 @@ namespace margelo::nitro::swe::iternio::reactnativeautoplay {
76
87
  }
77
88
  }();
78
89
  }
90
+ std::shared_ptr<Promise<PermissionRequestResult>> JHybridAndroidAutoTelemetrySpec::requestAutomotivePermissions(const std::vector<std::string>& permissions, const std::string& message, const std::string& grantButtonText, const std::optional<std::string>& cancelButtonText) {
91
+ static const auto method = javaClassStatic()->getMethod<jni::local_ref<JPromise::javaobject>(jni::alias_ref<jni::JArrayClass<jni::JString>> /* permissions */, jni::alias_ref<jni::JString> /* message */, jni::alias_ref<jni::JString> /* grantButtonText */, jni::alias_ref<jni::JString> /* cancelButtonText */)>("requestAutomotivePermissions");
92
+ auto __result = method(_javaPart, [&]() {
93
+ size_t __size = permissions.size();
94
+ jni::local_ref<jni::JArrayClass<jni::JString>> __array = jni::JArrayClass<jni::JString>::newArray(__size);
95
+ for (size_t __i = 0; __i < __size; __i++) {
96
+ const auto& __element = permissions[__i];
97
+ auto __elementJni = jni::make_jstring(__element);
98
+ __array->setElement(__i, *__elementJni);
99
+ }
100
+ return __array;
101
+ }(), jni::make_jstring(message), jni::make_jstring(grantButtonText), cancelButtonText.has_value() ? jni::make_jstring(cancelButtonText.value()) : nullptr);
102
+ return [&]() {
103
+ auto __promise = Promise<PermissionRequestResult>::create();
104
+ __result->cthis()->addOnResolvedListener([=](const jni::alias_ref<jni::JObject>& __boxedResult) {
105
+ auto __result = jni::static_ref_cast<JPermissionRequestResult>(__boxedResult);
106
+ __promise->resolve(__result->toCpp());
107
+ });
108
+ __result->cthis()->addOnRejectedListener([=](const jni::alias_ref<jni::JThrowable>& __throwable) {
109
+ jni::JniException __jniError(__throwable);
110
+ __promise->reject(std::make_exception_ptr(__jniError));
111
+ });
112
+ return __promise;
113
+ }();
114
+ }
79
115
 
80
116
  } // namespace margelo::nitro::swe::iternio::reactnativeautoplay
@@ -54,7 +54,8 @@ namespace margelo::nitro::swe::iternio::reactnativeautoplay {
54
54
 
55
55
  public:
56
56
  // Methods
57
- std::function<void()> registerTelemetryListener(const std::function<void(const std::optional<Telemetry>& /* tlm */, const std::optional<std::string>& /* error */)>& callback) override;
57
+ std::function<void()> registerTelemetryListener(const std::function<void(const std::optional<Telemetry>& /* tlm */)>& callback) override;
58
+ std::shared_ptr<Promise<PermissionRequestResult>> requestAutomotivePermissions(const std::vector<std::string>& permissions, const std::string& message, const std::string& grantButtonText, const std::optional<std::string>& cancelButtonText) override;
58
59
 
59
60
  private:
60
61
  friend HybridBase;