react-native-acoustic-connect 19.0.11 → 19.0.28
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/CHANGELOG.md +81 -0
- package/README.md +390 -1
- package/android/build.gradle +86 -3
- package/android/config.gradle +123 -13
- package/android/src/main/java/com/acousticconnectrn/HybridAcousticConnectRN.kt +407 -34
- package/app.plugin.js +2 -2
- package/ios/AcousticConnectRNConfig.json +2 -2
- package/ios/ConnectRNParsing.swift +229 -0
- package/ios/HybridAcousticConnectRN.swift +290 -30
- package/lib/commonjs/TLTRN.js +116 -3
- package/lib/commonjs/TLTRN.js.map +1 -1
- package/lib/commonjs/components/Connect.js +145 -27
- package/lib/commonjs/components/Connect.js.map +1 -1
- package/lib/commonjs/index.js +3 -0
- package/lib/commonjs/index.js.map +1 -1
- package/lib/module/TLTRN.js +116 -3
- package/lib/module/TLTRN.js.map +1 -1
- package/lib/module/components/Connect.js +146 -28
- package/lib/module/components/Connect.js.map +1 -1
- package/lib/module/index.js +5 -0
- package/lib/module/index.js.map +1 -1
- package/lib/typescript/src/TLTRN.d.ts +85 -1
- package/lib/typescript/src/TLTRN.d.ts.map +1 -1
- package/lib/typescript/src/components/Connect.d.ts.map +1 -1
- package/lib/typescript/src/index.d.ts +1 -0
- package/lib/typescript/src/index.d.ts.map +1 -1
- package/lib/typescript/src/specs/react-native-acoustic-connect.nitro.d.ts +178 -10
- package/lib/typescript/src/specs/react-native-acoustic-connect.nitro.d.ts.map +1 -1
- package/nitrogen/generated/android/c++/JHybridAcousticConnectRNSpec.cpp +5 -9
- package/nitrogen/generated/android/c++/JHybridAcousticConnectRNSpec.hpp +1 -1
- package/nitrogen/generated/android/kotlin/com/margelo/nitro/acousticconnectrn/HybridAcousticConnectRNSpec.kt +2 -1
- package/nitrogen/generated/ios/AcousticConnectRN-Swift-Cxx-Umbrella.hpp +1 -0
- package/nitrogen/generated/ios/c++/HybridAcousticConnectRNSpecSwift.hpp +2 -1
- package/nitrogen/generated/ios/swift/HybridAcousticConnectRNSpec.swift +1 -1
- package/nitrogen/generated/ios/swift/HybridAcousticConnectRNSpec_cxx.swift +2 -25
- package/nitrogen/generated/shared/c++/HybridAcousticConnectRNSpec.hpp +2 -1
- package/package.json +4 -7
- package/plugin/build/withConnectAndroidConfig.d.ts +2 -2
- package/plugin/build/withConnectAndroidConfig.js +2 -2
- package/plugin/build/withConnectIosSigning.d.ts +1 -1
- package/plugin/build/withConnectIosSigning.js +1 -1
- package/plugin/src/withConnectAndroidConfig.ts +2 -2
- package/plugin/src/withConnectIosSigning.ts +1 -1
- package/scripts/gradleParser.js +1 -1
- package/src/TLTRN.ts +125 -4
- package/src/components/Connect.tsx +150 -27
- package/src/index.ts +5 -0
- package/src/specs/react-native-acoustic-connect.nitro.ts +180 -10
- package/Examples/SampleUI/.bundle/config +0 -2
- package/Examples/SampleUI/.detoxrc.js +0 -83
- package/Examples/SampleUI/.eslintrc.js +0 -4
- package/Examples/SampleUI/.prettierrc.js +0 -7
- package/Examples/SampleUI/.watchmanconfig +0 -1
- package/Examples/SampleUI/App.js +0 -1
- package/Examples/SampleUI/Gemfile +0 -10
- package/Examples/SampleUI/Gemfile.lock +0 -121
- package/Examples/SampleUI/README.md +0 -79
- package/Examples/SampleUI/__tests__/App.test.tsx +0 -17
- package/Examples/SampleUI/android/app/build.gradle +0 -129
- package/Examples/SampleUI/android/app/debug.keystore +0 -0
- package/Examples/SampleUI/android/app/proguard-rules.pro +0 -10
- package/Examples/SampleUI/android/app/src/debug/AndroidManifest.xml +0 -9
- package/Examples/SampleUI/android/app/src/main/AndroidManifest.xml +0 -31
- package/Examples/SampleUI/android/app/src/main/java/com/sampleui/MainActivity.kt +0 -30
- package/Examples/SampleUI/android/app/src/main/java/com/sampleui/MainApplication.kt +0 -53
- package/Examples/SampleUI/android/app/src/main/res/drawable/rn_edit_text_material.xml +0 -37
- package/Examples/SampleUI/android/app/src/main/res/mipmap-hdpi/ic_launcher.png +0 -0
- package/Examples/SampleUI/android/app/src/main/res/mipmap-hdpi/ic_launcher_round.png +0 -0
- package/Examples/SampleUI/android/app/src/main/res/mipmap-mdpi/ic_launcher.png +0 -0
- package/Examples/SampleUI/android/app/src/main/res/mipmap-mdpi/ic_launcher_round.png +0 -0
- package/Examples/SampleUI/android/app/src/main/res/mipmap-xhdpi/ic_launcher.png +0 -0
- package/Examples/SampleUI/android/app/src/main/res/mipmap-xhdpi/ic_launcher_round.png +0 -0
- package/Examples/SampleUI/android/app/src/main/res/mipmap-xxhdpi/ic_launcher.png +0 -0
- package/Examples/SampleUI/android/app/src/main/res/mipmap-xxhdpi/ic_launcher_round.png +0 -0
- package/Examples/SampleUI/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher.png +0 -0
- package/Examples/SampleUI/android/app/src/main/res/mipmap-xxxhdpi/ic_launcher_round.png +0 -0
- package/Examples/SampleUI/android/app/src/main/res/values/strings.xml +0 -3
- package/Examples/SampleUI/android/app/src/main/res/values/styles.xml +0 -9
- package/Examples/SampleUI/android/build.gradle +0 -21
- package/Examples/SampleUI/android/gradle/wrapper/gradle-wrapper.jar +0 -0
- package/Examples/SampleUI/android/gradle/wrapper/gradle-wrapper.properties +0 -7
- package/Examples/SampleUI/android/gradle.properties +0 -39
- package/Examples/SampleUI/android/gradlew +0 -252
- package/Examples/SampleUI/android/gradlew.bat +0 -94
- package/Examples/SampleUI/android/settings.gradle +0 -21
- package/Examples/SampleUI/app.json +0 -51
- package/Examples/SampleUI/assets/fonts/Abel-Regular.ttf +0 -0
- package/Examples/SampleUI/assets/fonts/NotoSans-Regular.ttf +0 -0
- package/Examples/SampleUI/assets/images/android-icon.png +0 -0
- package/Examples/SampleUI/assets/images/artist-1.jpg +0 -0
- package/Examples/SampleUI/assets/images/artist-2.jpg +0 -0
- package/Examples/SampleUI/assets/images/avatar.png +0 -0
- package/Examples/SampleUI/assets/images/beach.jpg +0 -0
- package/Examples/SampleUI/assets/images/bridge.jpg +0 -0
- package/Examples/SampleUI/assets/images/chameleon.jpg +0 -0
- package/Examples/SampleUI/assets/images/city.jpg +0 -0
- package/Examples/SampleUI/assets/images/email-icon.png +0 -0
- package/Examples/SampleUI/assets/images/favorite.png +0 -0
- package/Examples/SampleUI/assets/images/forest.jpg +0 -0
- package/Examples/SampleUI/assets/images/paper-icon.png +0 -0
- package/Examples/SampleUI/assets/images/players-2.jpg +0 -0
- package/Examples/SampleUI/assets/images/players.jpg +0 -0
- package/Examples/SampleUI/assets/images/restaurant-1.jpg +0 -0
- package/Examples/SampleUI/assets/images/restaurant-2.jpg +0 -0
- package/Examples/SampleUI/assets/images/song-1.jpg +0 -0
- package/Examples/SampleUI/assets/images/song-2.jpg +0 -0
- package/Examples/SampleUI/assets/images/splash.png +0 -0
- package/Examples/SampleUI/assets/images/strawberries.jpg +0 -0
- package/Examples/SampleUI/assets/images/wrecked-ship.jpg +0 -0
- package/Examples/SampleUI/assets/styles/fonts.css +0 -47
- package/Examples/SampleUI/babel.config.js +0 -22
- package/Examples/SampleUI/index.js +0 -9
- package/Examples/SampleUI/ios/.xcode.env +0 -11
- package/Examples/SampleUI/ios/Podfile +0 -71
- package/Examples/SampleUI/ios/Podfile.lock +0 -2276
- package/Examples/SampleUI/ios/SampleUI/AppDelegate.h +0 -7
- package/Examples/SampleUI/ios/SampleUI/AppDelegate.mm +0 -31
- package/Examples/SampleUI/ios/SampleUI/Images.xcassets/AppIcon.appiconset/Contents.json +0 -53
- package/Examples/SampleUI/ios/SampleUI/Images.xcassets/Contents.json +0 -6
- package/Examples/SampleUI/ios/SampleUI/Info.plist +0 -52
- package/Examples/SampleUI/ios/SampleUI/LaunchScreen.storyboard +0 -47
- package/Examples/SampleUI/ios/SampleUI/PrivacyInfo.xcprivacy +0 -48
- package/Examples/SampleUI/ios/SampleUI/main.m +0 -10
- package/Examples/SampleUI/ios/SampleUI.xcodeproj/project.pbxproj +0 -785
- package/Examples/SampleUI/ios/SampleUI.xcodeproj/xcshareddata/xcschemes/SampleUI.xcscheme +0 -105
- package/Examples/SampleUI/ios/SampleUI.xcworkspace/contents.xcworkspacedata +0 -10
- package/Examples/SampleUI/ios/SampleUITests/Info.plist +0 -24
- package/Examples/SampleUI/ios/SampleUITests/SampleUITests.m +0 -66
- package/Examples/SampleUI/jest.config.js +0 -3
- package/Examples/SampleUI/metro.config.js +0 -54
- package/Examples/SampleUI/package.json +0 -65
- package/Examples/SampleUI/scripts/integration-test-android.sh +0 -292
- package/Examples/SampleUI/src/DrawerItems.tsx +0 -322
- package/Examples/SampleUI/src/ExampleList.tsx +0 -175
- package/Examples/SampleUI/src/Examples/ActivityIndicatorExample.tsx +0 -73
- package/Examples/SampleUI/src/Examples/AnimatedFABExample/AnimatedFABExample.tsx +0 -220
- package/Examples/SampleUI/src/Examples/AnimatedFABExample/CustomFAB.tsx +0 -70
- package/Examples/SampleUI/src/Examples/AnimatedFABExample/CustomFABControls.tsx +0 -146
- package/Examples/SampleUI/src/Examples/AnimatedFABExample/index.ts +0 -1
- package/Examples/SampleUI/src/Examples/AppbarExample.tsx +0 -263
- package/Examples/SampleUI/src/Examples/AvatarExample.tsx +0 -76
- package/Examples/SampleUI/src/Examples/BadgeExample.tsx +0 -97
- package/Examples/SampleUI/src/Examples/BannerExample.tsx +0 -152
- package/Examples/SampleUI/src/Examples/BottomNavigationBarExample.tsx +0 -94
- package/Examples/SampleUI/src/Examples/BottomNavigationExample.tsx +0 -205
- package/Examples/SampleUI/src/Examples/ButtonExample.tsx +0 -405
- package/Examples/SampleUI/src/Examples/CardExample.tsx +0 -245
- package/Examples/SampleUI/src/Examples/CheckboxExample.tsx +0 -87
- package/Examples/SampleUI/src/Examples/CheckboxItemExample.tsx +0 -72
- package/Examples/SampleUI/src/Examples/ChipExample.tsx +0 -432
- package/Examples/SampleUI/src/Examples/DataTableExample.tsx +0 -128
- package/Examples/SampleUI/src/Examples/DialogExample.tsx +0 -217
- package/Examples/SampleUI/src/Examples/Dialogs/DialogTextComponent.tsx +0 -31
- package/Examples/SampleUI/src/Examples/Dialogs/DialogTrackingTest.tsx +0 -307
- package/Examples/SampleUI/src/Examples/Dialogs/DialogWithCustomColors.tsx +0 -57
- package/Examples/SampleUI/src/Examples/Dialogs/DialogWithDismissableBackButton.tsx +0 -38
- package/Examples/SampleUI/src/Examples/Dialogs/DialogWithIcon.tsx +0 -42
- package/Examples/SampleUI/src/Examples/Dialogs/DialogWithLoadingIndicator.tsx +0 -48
- package/Examples/SampleUI/src/Examples/Dialogs/DialogWithLongText.tsx +0 -81
- package/Examples/SampleUI/src/Examples/Dialogs/DialogWithRadioBtns.tsx +0 -111
- package/Examples/SampleUI/src/Examples/Dialogs/UndismissableDialog.tsx +0 -30
- package/Examples/SampleUI/src/Examples/Dialogs/index.tsx +0 -44
- package/Examples/SampleUI/src/Examples/DividerExample.tsx +0 -30
- package/Examples/SampleUI/src/Examples/FABExample.tsx +0 -226
- package/Examples/SampleUI/src/Examples/IconButtonExample.tsx +0 -230
- package/Examples/SampleUI/src/Examples/IconExample.tsx +0 -50
- package/Examples/SampleUI/src/Examples/ListAccordionExample.tsx +0 -65
- package/Examples/SampleUI/src/Examples/ListAccordionGroupExample.tsx +0 -80
- package/Examples/SampleUI/src/Examples/ListItemExample.tsx +0 -310
- package/Examples/SampleUI/src/Examples/ListSectionExample.tsx +0 -159
- package/Examples/SampleUI/src/Examples/MaterialBottomTabNavigatorExample.tsx +0 -87
- package/Examples/SampleUI/src/Examples/MenuExample.tsx +0 -211
- package/Examples/SampleUI/src/Examples/ProgressBarExample.tsx +0 -142
- package/Examples/SampleUI/src/Examples/RadioButtonExample.tsx +0 -104
- package/Examples/SampleUI/src/Examples/RadioButtonGroupExample.tsx +0 -67
- package/Examples/SampleUI/src/Examples/RadioButtonItemExample.tsx +0 -77
- package/Examples/SampleUI/src/Examples/SearchbarExample.tsx +0 -249
- package/Examples/SampleUI/src/Examples/SegmentedButtons/SegmentedButtonCustomColorCheck.tsx +0 -93
- package/Examples/SampleUI/src/Examples/SegmentedButtons/SegmentedButtonDefault.tsx +0 -49
- package/Examples/SampleUI/src/Examples/SegmentedButtons/SegmentedButtonDisabled.tsx +0 -47
- package/Examples/SampleUI/src/Examples/SegmentedButtons/SegmentedButtonMultiselect.tsx +0 -50
- package/Examples/SampleUI/src/Examples/SegmentedButtons/SegmentedButtonMultiselectIcons.tsx +0 -49
- package/Examples/SampleUI/src/Examples/SegmentedButtons/SegmentedButtonMultiselectRealCase.tsx +0 -114
- package/Examples/SampleUI/src/Examples/SegmentedButtons/SegmentedButtonOnlyIcons.tsx +0 -40
- package/Examples/SampleUI/src/Examples/SegmentedButtons/SegmentedButtonOnlyIconsWithCheck.tsx +0 -43
- package/Examples/SampleUI/src/Examples/SegmentedButtons/SegmentedButtonRealCase.tsx +0 -97
- package/Examples/SampleUI/src/Examples/SegmentedButtons/SegmentedButtonWithDensity.tsx +0 -47
- package/Examples/SampleUI/src/Examples/SegmentedButtons/SegmentedButtonWithSelectedCheck.tsx +0 -52
- package/Examples/SampleUI/src/Examples/SegmentedButtons/index.ts +0 -9
- package/Examples/SampleUI/src/Examples/SegmentedButtonsExample.tsx +0 -57
- package/Examples/SampleUI/src/Examples/SnackbarExample.tsx +0 -141
- package/Examples/SampleUI/src/Examples/SurfaceExample.tsx +0 -130
- package/Examples/SampleUI/src/Examples/SwitchExample.tsx +0 -105
- package/Examples/SampleUI/src/Examples/TeamDetails.tsx +0 -291
- package/Examples/SampleUI/src/Examples/TeamsList.tsx +0 -57
- package/Examples/SampleUI/src/Examples/TextExample.tsx +0 -132
- package/Examples/SampleUI/src/Examples/TextInputExample.tsx +0 -914
- package/Examples/SampleUI/src/Examples/ThemeExample.tsx +0 -41
- package/Examples/SampleUI/src/Examples/ThemingWithReactNavigation.tsx +0 -75
- package/Examples/SampleUI/src/Examples/ToggleButtonExample.tsx +0 -128
- package/Examples/SampleUI/src/Examples/TooltipExample.tsx +0 -191
- package/Examples/SampleUI/src/Examples/TouchableRippleExample.tsx +0 -37
- package/Examples/SampleUI/src/RootNavigator.tsx +0 -95
- package/Examples/SampleUI/src/ScreenWrapper.tsx +0 -67
- package/Examples/SampleUI/src/components/ActivityIndicator.tsx +0 -254
- package/Examples/SampleUI/src/components/Appbar/Appbar.tsx +0 -364
- package/Examples/SampleUI/src/components/Appbar/AppbarAction.tsx +0 -132
- package/Examples/SampleUI/src/components/Appbar/AppbarBackAction.tsx +0 -77
- package/Examples/SampleUI/src/components/Appbar/AppbarBackIcon.tsx +0 -52
- package/Examples/SampleUI/src/components/Appbar/AppbarContent.tsx +0 -249
- package/Examples/SampleUI/src/components/Appbar/AppbarHeader.tsx +0 -174
- package/Examples/SampleUI/src/components/Appbar/index.ts +0 -22
- package/Examples/SampleUI/src/components/Appbar/utils.ts +0 -188
- package/Examples/SampleUI/src/components/Avatar/Avatar.tsx +0 -8
- package/Examples/SampleUI/src/components/Avatar/AvatarIcon.tsx +0 -87
- package/Examples/SampleUI/src/components/Avatar/AvatarImage.tsx +0 -128
- package/Examples/SampleUI/src/components/Avatar/AvatarText.tsx +0 -127
- package/Examples/SampleUI/src/components/Badge.tsx +0 -138
- package/Examples/SampleUI/src/components/Banner.tsx +0 -302
- package/Examples/SampleUI/src/components/BottomNavigation/BottomNavigation.tsx +0 -643
- package/Examples/SampleUI/src/components/BottomNavigation/BottomNavigationBar.tsx +0 -1039
- package/Examples/SampleUI/src/components/BottomNavigation/BottomNavigationRouteScreen.tsx +0 -31
- package/Examples/SampleUI/src/components/BottomNavigation/utils.ts +0 -70
- package/Examples/SampleUI/src/components/Button/Button.tsx +0 -503
- package/Examples/SampleUI/src/components/Button/utils.tsx +0 -272
- package/Examples/SampleUI/src/components/Card/Card.tsx +0 -373
- package/Examples/SampleUI/src/components/Card/CardActions.tsx +0 -74
- package/Examples/SampleUI/src/components/Card/CardContent.tsx +0 -99
- package/Examples/SampleUI/src/components/Card/CardCover.tsx +0 -96
- package/Examples/SampleUI/src/components/Card/CardTitle.tsx +0 -236
- package/Examples/SampleUI/src/components/Card/utils.tsx +0 -110
- package/Examples/SampleUI/src/components/Checkbox/Checkbox.tsx +0 -78
- package/Examples/SampleUI/src/components/Checkbox/CheckboxAndroid.tsx +0 -180
- package/Examples/SampleUI/src/components/Checkbox/CheckboxIOS.tsx +0 -104
- package/Examples/SampleUI/src/components/Checkbox/CheckboxItem.tsx +0 -236
- package/Examples/SampleUI/src/components/Checkbox/index.ts +0 -19
- package/Examples/SampleUI/src/components/Checkbox/utils.ts +0 -183
- package/Examples/SampleUI/src/components/Chip/Chip.tsx +0 -513
- package/Examples/SampleUI/src/components/Chip/helpers.tsx +0 -322
- package/Examples/SampleUI/src/components/CrossFadeIcon.tsx +0 -140
- package/Examples/SampleUI/src/components/DataTable/DataTable.tsx +0 -138
- package/Examples/SampleUI/src/components/DataTable/DataTableCell.tsx +0 -132
- package/Examples/SampleUI/src/components/DataTable/DataTableHeader.tsx +0 -82
- package/Examples/SampleUI/src/components/DataTable/DataTablePagination.tsx +0 -407
- package/Examples/SampleUI/src/components/DataTable/DataTableRow.tsx +0 -107
- package/Examples/SampleUI/src/components/DataTable/DataTableTitle.tsx +0 -208
- package/Examples/SampleUI/src/components/Dialog/Dialog.tsx +0 -191
- package/Examples/SampleUI/src/components/Dialog/DialogActions.tsx +0 -94
- package/Examples/SampleUI/src/components/Dialog/DialogContent.tsx +0 -54
- package/Examples/SampleUI/src/components/Dialog/DialogIcon.tsx +0 -100
- package/Examples/SampleUI/src/components/Dialog/DialogScrollArea.tsx +0 -88
- package/Examples/SampleUI/src/components/Dialog/DialogTitle.tsx +0 -94
- package/Examples/SampleUI/src/components/Divider.tsx +0 -102
- package/Examples/SampleUI/src/components/Drawer/Drawer.tsx +0 -8
- package/Examples/SampleUI/src/components/Drawer/DrawerCollapsedItem.tsx +0 -282
- package/Examples/SampleUI/src/components/Drawer/DrawerItem.tsx +0 -209
- package/Examples/SampleUI/src/components/Drawer/DrawerSection.tsx +0 -138
- package/Examples/SampleUI/src/components/FAB/AnimatedFAB.tsx +0 -619
- package/Examples/SampleUI/src/components/FAB/FAB.tsx +0 -371
- package/Examples/SampleUI/src/components/FAB/FABGroup.tsx +0 -532
- package/Examples/SampleUI/src/components/FAB/index.ts +0 -13
- package/Examples/SampleUI/src/components/FAB/utils.ts +0 -474
- package/Examples/SampleUI/src/components/HelperText/HelperText.tsx +0 -168
- package/Examples/SampleUI/src/components/HelperText/utils.ts +0 -30
- package/Examples/SampleUI/src/components/Icon.tsx +0 -170
- package/Examples/SampleUI/src/components/IconButton/IconButton.tsx +0 -234
- package/Examples/SampleUI/src/components/IconButton/utils.ts +0 -190
- package/Examples/SampleUI/src/components/List/List.tsx +0 -20
- package/Examples/SampleUI/src/components/List/ListAccordion.tsx +0 -391
- package/Examples/SampleUI/src/components/List/ListAccordionGroup.tsx +0 -88
- package/Examples/SampleUI/src/components/List/ListIcon.tsx +0 -79
- package/Examples/SampleUI/src/components/List/ListImage.tsx +0 -89
- package/Examples/SampleUI/src/components/List/ListItem.tsx +0 -313
- package/Examples/SampleUI/src/components/List/ListSection.tsx +0 -87
- package/Examples/SampleUI/src/components/List/ListSubheader.tsx +0 -79
- package/Examples/SampleUI/src/components/List/utils.ts +0 -113
- package/Examples/SampleUI/src/components/MaterialCommunityIcon.tsx +0 -121
- package/Examples/SampleUI/src/components/Menu/Menu.tsx +0 -711
- package/Examples/SampleUI/src/components/Menu/MenuItem.tsx +0 -257
- package/Examples/SampleUI/src/components/Menu/utils.ts +0 -110
- package/Examples/SampleUI/src/components/Modal.tsx +0 -245
- package/Examples/SampleUI/src/components/Portal/Portal.tsx +0 -69
- package/Examples/SampleUI/src/components/Portal/PortalConsumer.tsx +0 -44
- package/Examples/SampleUI/src/components/Portal/PortalHost.tsx +0 -143
- package/Examples/SampleUI/src/components/Portal/PortalManager.tsx +0 -54
- package/Examples/SampleUI/src/components/ProgressBar.tsx +0 -292
- package/Examples/SampleUI/src/components/RadioButton/RadioButton.tsx +0 -86
- package/Examples/SampleUI/src/components/RadioButton/RadioButtonAndroid.tsx +0 -202
- package/Examples/SampleUI/src/components/RadioButton/RadioButtonGroup.tsx +0 -67
- package/Examples/SampleUI/src/components/RadioButton/RadioButtonIOS.tsx +0 -130
- package/Examples/SampleUI/src/components/RadioButton/RadioButtonItem.tsx +0 -268
- package/Examples/SampleUI/src/components/RadioButton/index.ts +0 -22
- package/Examples/SampleUI/src/components/RadioButton/utils.ts +0 -37
- package/Examples/SampleUI/src/components/Searchbar.tsx +0 -459
- package/Examples/SampleUI/src/components/SegmentedButtons/SegmentedButtonItem.tsx +0 -271
- package/Examples/SampleUI/src/components/SegmentedButtons/SegmentedButtons.tsx +0 -197
- package/Examples/SampleUI/src/components/SegmentedButtons/utils.ts +0 -179
- package/Examples/SampleUI/src/components/Snackbar.tsx +0 -430
- package/Examples/SampleUI/src/components/Surface.tsx +0 -376
- package/Examples/SampleUI/src/components/Switch/Switch.tsx +0 -108
- package/Examples/SampleUI/src/components/Switch/utils.ts +0 -113
- package/Examples/SampleUI/src/components/TextInput/Addons/Outline.tsx +0 -64
- package/Examples/SampleUI/src/components/TextInput/Addons/Underline.tsx +0 -78
- package/Examples/SampleUI/src/components/TextInput/Adornment/TextInputAdornment.tsx +0 -208
- package/Examples/SampleUI/src/components/TextInput/Adornment/TextInputAffix.tsx +0 -212
- package/Examples/SampleUI/src/components/TextInput/Adornment/TextInputIcon.tsx +0 -195
- package/Examples/SampleUI/src/components/TextInput/Adornment/enums.tsx +0 -12
- package/Examples/SampleUI/src/components/TextInput/Adornment/types.tsx +0 -11
- package/Examples/SampleUI/src/components/TextInput/Adornment/utils.ts +0 -48
- package/Examples/SampleUI/src/components/TextInput/Label/InputLabel.tsx +0 -217
- package/Examples/SampleUI/src/components/TextInput/Label/LabelBackground.tsx +0 -100
- package/Examples/SampleUI/src/components/TextInput/TextInput.tsx +0 -572
- package/Examples/SampleUI/src/components/TextInput/TextInputFlat.tsx +0 -475
- package/Examples/SampleUI/src/components/TextInput/TextInputOutlined.tsx +0 -450
- package/Examples/SampleUI/src/components/TextInput/constants.tsx +0 -48
- package/Examples/SampleUI/src/components/TextInput/helpers.tsx +0 -612
- package/Examples/SampleUI/src/components/TextInput/types.tsx +0 -155
- package/Examples/SampleUI/src/components/ToggleButton/ToggleButton.tsx +0 -187
- package/Examples/SampleUI/src/components/ToggleButton/ToggleButtonGroup.tsx +0 -72
- package/Examples/SampleUI/src/components/ToggleButton/ToggleButtonRow.tsx +0 -107
- package/Examples/SampleUI/src/components/ToggleButton/index.ts +0 -16
- package/Examples/SampleUI/src/components/ToggleButton/utils.ts +0 -26
- package/Examples/SampleUI/src/components/Tooltip/Tooltip.tsx +0 -249
- package/Examples/SampleUI/src/components/Tooltip/utils.ts +0 -129
- package/Examples/SampleUI/src/components/TouchableRipple/Pressable.tsx +0 -41
- package/Examples/SampleUI/src/components/TouchableRipple/TouchableRipple.native.tsx +0 -145
- package/Examples/SampleUI/src/components/TouchableRipple/TouchableRipple.tsx +0 -317
- package/Examples/SampleUI/src/components/TouchableRipple/utils.ts +0 -66
- package/Examples/SampleUI/src/components/Typography/AnimatedText.tsx +0 -107
- package/Examples/SampleUI/src/components/Typography/Text.tsx +0 -184
- package/Examples/SampleUI/src/components/Typography/types.tsx +0 -5
- package/Examples/SampleUI/src/components/Typography/v2/Caption.tsx +0 -50
- package/Examples/SampleUI/src/components/Typography/v2/Headline.tsx +0 -52
- package/Examples/SampleUI/src/components/Typography/v2/Paragraph.tsx +0 -49
- package/Examples/SampleUI/src/components/Typography/v2/StyledText.tsx +0 -56
- package/Examples/SampleUI/src/components/Typography/v2/Subheading.tsx +0 -50
- package/Examples/SampleUI/src/components/Typography/v2/Text.tsx +0 -62
- package/Examples/SampleUI/src/components/Typography/v2/Title.tsx +0 -49
- package/Examples/SampleUI/src/components/Typography/v2/index.ts +0 -5
- package/Examples/SampleUI/src/core/PaperProvider.tsx +0 -122
- package/Examples/SampleUI/src/core/SafeAreaProviderCompat.tsx +0 -65
- package/Examples/SampleUI/src/core/settings.tsx +0 -23
- package/Examples/SampleUI/src/core/theming.tsx +0 -170
- package/Examples/SampleUI/src/index.native.tsx +0 -285
- package/Examples/SampleUI/src/index.tsx +0 -226
- package/Examples/SampleUI/src/react-navigation/index.tsx +0 -19
- package/Examples/SampleUI/src/react-navigation/navigators/createMaterialBottomTabNavigator.tsx +0 -72
- package/Examples/SampleUI/src/react-navigation/types.tsx +0 -126
- package/Examples/SampleUI/src/react-navigation/views/MaterialBottomTabView.tsx +0 -140
- package/Examples/SampleUI/src/styles/__tests__/fonts.test.js +0 -290
- package/Examples/SampleUI/src/styles/fonts.tsx +0 -143
- package/Examples/SampleUI/src/styles/overlay.tsx +0 -70
- package/Examples/SampleUI/src/styles/shadow.tsx +0 -109
- package/Examples/SampleUI/src/styles/themes/index.ts +0 -4
- package/Examples/SampleUI/src/styles/themes/v2/DarkTheme.tsx +0 -30
- package/Examples/SampleUI/src/styles/themes/v2/LightTheme.tsx +0 -30
- package/Examples/SampleUI/src/styles/themes/v2/colors.tsx +0 -277
- package/Examples/SampleUI/src/styles/themes/v3/DarkTheme.tsx +0 -66
- package/Examples/SampleUI/src/styles/themes/v3/LightTheme.tsx +0 -69
- package/Examples/SampleUI/src/styles/themes/v3/tokens.tsx +0 -230
- package/Examples/SampleUI/src/utils/BackHandler/BackHandler.native.tsx +0 -3
- package/Examples/SampleUI/src/utils/BackHandler/BackHandler.tsx +0 -11
- package/Examples/SampleUI/src/utils/addEventListener.tsx +0 -56
- package/Examples/SampleUI/src/utils/forwardRef.tsx +0 -23
- package/Examples/SampleUI/src/utils/getContrastingColor.tsx +0 -15
- package/Examples/SampleUI/src/utils/hasTouchHandler.tsx +0 -23
- package/Examples/SampleUI/src/utils/roundLayoutSize.ts +0 -2
- package/Examples/SampleUI/src/utils/splitStyles.ts +0 -60
- package/Examples/SampleUI/src/utils/useAnimatedValue.tsx +0 -9
- package/Examples/SampleUI/src/utils/useAnimatedValueArray.tsx +0 -13
- package/Examples/SampleUI/src/utils/useIsKeyboardShown.tsx +0 -55
- package/Examples/SampleUI/src/utils/useLayout.tsx +0 -29
- package/Examples/SampleUI/src/utils/useLazyRef.tsx +0 -11
- package/Examples/SampleUI/tsconfig.json +0 -3
- package/Examples/SampleUI/utils/index.ts +0 -1426
- package/cli/__tests__/doctor.test.mjs +0 -88
package/CHANGELOG.md
CHANGED
|
@@ -1,3 +1,84 @@
|
|
|
1
|
+
## 19.0.28 (2026-09-14)
|
|
2
|
+
|
|
3
|
+
### Reverts
|
|
4
|
+
|
|
5
|
+
* Revert "Beta ReactNativeConnect build: 18.0.36" ([609ad7d](https://github.com/go-acoustic/react-native-acoustic-connect/commit/609ad7d3244ec06f27dced5864d40585c5b3c9cf))
|
|
6
|
+
## 19.0.27 (2026-09-14)
|
|
7
|
+
|
|
8
|
+
### Reverts
|
|
9
|
+
|
|
10
|
+
* Revert "Beta ReactNativeConnect build: 18.0.36" ([609ad7d](https://github.com/go-acoustic/react-native-acoustic-connect/commit/609ad7d3244ec06f27dced5864d40585c5b3c9cf))
|
|
11
|
+
## 19.0.26 (2026-09-11)
|
|
12
|
+
|
|
13
|
+
### Reverts
|
|
14
|
+
|
|
15
|
+
* Revert "Beta ReactNativeConnect build: 18.0.36" ([609ad7d](https://github.com/go-acoustic/react-native-acoustic-connect/commit/609ad7d3244ec06f27dced5864d40585c5b3c9cf))
|
|
16
|
+
## 19.0.25 (2026-09-11)
|
|
17
|
+
|
|
18
|
+
### Reverts
|
|
19
|
+
|
|
20
|
+
* Revert "Beta ReactNativeConnect build: 18.0.36" ([609ad7d](https://github.com/go-acoustic/react-native-acoustic-connect/commit/609ad7d3244ec06f27dced5864d40585c5b3c9cf))
|
|
21
|
+
## 19.0.24 (2026-09-11)
|
|
22
|
+
|
|
23
|
+
### Reverts
|
|
24
|
+
|
|
25
|
+
* Revert "Beta ReactNativeConnect build: 18.0.36" ([609ad7d](https://github.com/go-acoustic/react-native-acoustic-connect/commit/609ad7d3244ec06f27dced5864d40585c5b3c9cf))
|
|
26
|
+
## 19.0.23 (2026-09-10)
|
|
27
|
+
|
|
28
|
+
### Reverts
|
|
29
|
+
|
|
30
|
+
* Revert "Beta ReactNativeConnect build: 18.0.36" ([609ad7d](https://github.com/go-acoustic/react-native-acoustic-connect/commit/609ad7d3244ec06f27dced5864d40585c5b3c9cf))
|
|
31
|
+
## 19.0.22 (2026-09-10)
|
|
32
|
+
|
|
33
|
+
### Reverts
|
|
34
|
+
|
|
35
|
+
* Revert "Beta ReactNativeConnect build: 18.0.36" ([609ad7d](https://github.com/go-acoustic/react-native-acoustic-connect/commit/609ad7d3244ec06f27dced5864d40585c5b3c9cf))
|
|
36
|
+
## 19.0.21 (2026-09-09)
|
|
37
|
+
|
|
38
|
+
### Reverts
|
|
39
|
+
|
|
40
|
+
* Revert "Beta ReactNativeConnect build: 18.0.36" ([609ad7d](https://github.com/go-acoustic/react-native-acoustic-connect/commit/609ad7d3244ec06f27dced5864d40585c5b3c9cf))
|
|
41
|
+
## 19.0.20 (2026-09-09)
|
|
42
|
+
|
|
43
|
+
### Reverts
|
|
44
|
+
|
|
45
|
+
* Revert "Beta ReactNativeConnect build: 18.0.36" ([609ad7d](https://github.com/go-acoustic/react-native-acoustic-connect/commit/609ad7d3244ec06f27dced5864d40585c5b3c9cf))
|
|
46
|
+
## 19.0.19 (2026-09-08)
|
|
47
|
+
|
|
48
|
+
### Reverts
|
|
49
|
+
|
|
50
|
+
* Revert "Beta ReactNativeConnect build: 18.0.36" ([609ad7d](https://github.com/go-acoustic/react-native-acoustic-connect/commit/609ad7d3244ec06f27dced5864d40585c5b3c9cf))
|
|
51
|
+
## 19.0.18 (2026-09-07)
|
|
52
|
+
|
|
53
|
+
### Reverts
|
|
54
|
+
|
|
55
|
+
* Revert "Beta ReactNativeConnect build: 18.0.36" ([609ad7d](https://github.com/go-acoustic/react-native-acoustic-connect/commit/609ad7d3244ec06f27dced5864d40585c5b3c9cf))
|
|
56
|
+
## 19.0.17 (2026-09-02)
|
|
57
|
+
|
|
58
|
+
### Reverts
|
|
59
|
+
|
|
60
|
+
* Revert "Beta ReactNativeConnect build: 18.0.36" ([609ad7d](https://github.com/go-acoustic/react-native-acoustic-connect/commit/609ad7d3244ec06f27dced5864d40585c5b3c9cf))
|
|
61
|
+
## 19.0.16 (2026-08-31)
|
|
62
|
+
|
|
63
|
+
### Reverts
|
|
64
|
+
|
|
65
|
+
* Revert "Beta ReactNativeConnect build: 18.0.36" ([609ad7d](https://github.com/go-acoustic/react-native-acoustic-connect/commit/609ad7d3244ec06f27dced5864d40585c5b3c9cf))
|
|
66
|
+
## [19.0.15](https://github.com/go-acoustic/react-native-acoustic-connect/compare/19.0.14...19.0.15) (2026-08-24)
|
|
67
|
+
## 19.0.14 (2026-07-31)
|
|
68
|
+
|
|
69
|
+
### Reverts
|
|
70
|
+
|
|
71
|
+
* Revert "Beta ReactNativeConnect build: 18.0.36" ([609ad7d](https://github.com/go-acoustic/react-native-acoustic-connect/commit/609ad7d3244ec06f27dced5864d40585c5b3c9cf))
|
|
72
|
+
## 19.0.13 (2026-07-30)
|
|
73
|
+
|
|
74
|
+
### Reverts
|
|
75
|
+
|
|
76
|
+
* Revert "Beta ReactNativeConnect build: 18.0.36" ([609ad7d](https://github.com/go-acoustic/react-native-acoustic-connect/commit/609ad7d3244ec06f27dced5864d40585c5b3c9cf))
|
|
77
|
+
## 19.0.12 (2026-07-09)
|
|
78
|
+
|
|
79
|
+
### Reverts
|
|
80
|
+
|
|
81
|
+
* Revert "Beta ReactNativeConnect build: 18.0.36" ([609ad7d](https://github.com/go-acoustic/react-native-acoustic-connect/commit/609ad7d3244ec06f27dced5864d40585c5b3c9cf))
|
|
1
82
|
## 19.0.11 (2026-07-07)
|
|
2
83
|
|
|
3
84
|
### Reverts
|
package/README.md
CHANGED
|
@@ -13,6 +13,8 @@ For the full product overview see the
|
|
|
13
13
|
- React 19.1.1 or newer (or whatever your RN version pins)
|
|
14
14
|
- `react-native-nitro-modules` at the **exact** version this package pins in `peerDependencies` (currently **`0.35.9`**) — your app must resolve exactly this version; see [Nitro version pin](#nitro-version-pin)
|
|
15
15
|
- Node 20 or newer
|
|
16
|
+
- JDK 17 or newer for Android builds — the same JDK React Native 0.82 itself
|
|
17
|
+
requires. The Android module compiles at Java 17; newer JDKs work.
|
|
16
18
|
- iOS deployment target ≥ 15.1, AcousticConnect / AcousticConnectDebug pod ≥ 2.0.5
|
|
17
19
|
- Android `minSdk` ≥ 26, `compileSdk` ≥ 35, `io.github.go-acoustic:connect` in `[11.0.11, 12.0.0)`
|
|
18
20
|
- **Expo SDK 55+ is supported** via the bundled Expo Config Plugin —
|
|
@@ -363,9 +365,18 @@ screen / touch / keyboard tracking) can skip it entirely.
|
|
|
363
365
|
```ts
|
|
364
366
|
import AcousticConnectRN from 'react-native-acoustic-connect'
|
|
365
367
|
|
|
366
|
-
// Custom application event
|
|
368
|
+
// Custom application event (flat key/value pairs)
|
|
367
369
|
AcousticConnectRN.logCustomEvent('checkout_started', { cartId: 'abc' }, 1)
|
|
368
370
|
|
|
371
|
+
// Signal — accepts arbitrary JSON, including nested objects and arrays
|
|
372
|
+
AcousticConnectRN.logSignal(
|
|
373
|
+
{
|
|
374
|
+
signalContent: { signalType: 'pageview', pageCategory: 'checkout' },
|
|
375
|
+
audience: [{ name: 'Account ID', value: '4815162342' }],
|
|
376
|
+
},
|
|
377
|
+
1
|
|
378
|
+
)
|
|
379
|
+
|
|
369
380
|
// Force a logical screen name (e.g. for non-NavigationContainer screens)
|
|
370
381
|
AcousticConnectRN.setCurrentScreenName('CheckoutScreen')
|
|
371
382
|
|
|
@@ -385,6 +396,26 @@ for details.
|
|
|
385
396
|
|
|
386
397
|
## API reference
|
|
387
398
|
|
|
399
|
+
> **What the logging methods' `boolean` means.** Every `log*` method returns
|
|
400
|
+
> whether the native SDK **accepted the event for delivery** — never whether
|
|
401
|
+
> the collector received it, and never whether the collector kept it. Events
|
|
402
|
+
> are queued on device and posted in batches later, so no return value from
|
|
403
|
+
> these calls can attest to delivery, and a server-side rejection (a signal
|
|
404
|
+
> that fails schema validation, say) happens long after you have already been
|
|
405
|
+
> told `true`. Treat the value as "the SDK took this", and use the collector or
|
|
406
|
+
> the platform log as the source of truth for what shipped.
|
|
407
|
+
>
|
|
408
|
+
> A `false` means the SDK rejected the call outright and nothing was queued.
|
|
409
|
+
> The bridge also writes that to `logcat` (tag `AcousticConnectRN`) and
|
|
410
|
+
> `os_log` (subsystem `com.acoustic.AcousticConnectRN`, category `bridge`), so
|
|
411
|
+
> a rejection is visible without inspecting return values you would otherwise
|
|
412
|
+
> never read.
|
|
413
|
+
>
|
|
414
|
+
> `logScreenLayout` is weaker still: with the configured delay — the normal
|
|
415
|
+
> case — a `true` means only that the capture was **scheduled**. What the
|
|
416
|
+
> capture found when it eventually ran, and whether it produced a layout
|
|
417
|
+
> message at all, is reported in the platform log only.
|
|
418
|
+
|
|
388
419
|
### `AcousticConnectRN.enable(): boolean`
|
|
389
420
|
|
|
390
421
|
Re-enables the SDK after a prior `disable()`. Reads all configuration from
|
|
@@ -401,6 +432,86 @@ already running.
|
|
|
401
432
|
|
|
402
433
|
Stops data capture, flushes pending messages, releases push state. Idempotent.
|
|
403
434
|
|
|
435
|
+
### `AcousticConnectRN.logSignal(values, level): boolean`
|
|
436
|
+
|
|
437
|
+
Logs a signal. `values` accepts **arbitrary JSON** — nested objects and arrays,
|
|
438
|
+
not just scalars — and the payload is carried through without flattening or
|
|
439
|
+
reshaping:
|
|
440
|
+
|
|
441
|
+
```ts
|
|
442
|
+
AcousticConnectRN.logSignal(
|
|
443
|
+
{
|
|
444
|
+
signalContent: {
|
|
445
|
+
signalType: 'pageview',
|
|
446
|
+
url: 'https://app.example.com/dashboard',
|
|
447
|
+
pageCategory: 'dashboard',
|
|
448
|
+
},
|
|
449
|
+
audience: [
|
|
450
|
+
{ name: 'Account Name', value: 'Acme Corp' },
|
|
451
|
+
{ name: 'Account ID', value: '4815162342' },
|
|
452
|
+
],
|
|
453
|
+
},
|
|
454
|
+
1
|
|
455
|
+
)
|
|
456
|
+
```
|
|
457
|
+
|
|
458
|
+
Flat scalar payloads keep working unchanged — the type is a superset of
|
|
459
|
+
`Record<string, string | number | boolean>`.
|
|
460
|
+
|
|
461
|
+
An object literal needs no type import. If you want to *name* a payload — a
|
|
462
|
+
shared constant, a helper parameter — the package exports `SignalValues` for it:
|
|
463
|
+
|
|
464
|
+
```ts
|
|
465
|
+
import AcousticConnectRN, {
|
|
466
|
+
type SignalValues,
|
|
467
|
+
} from 'react-native-acoustic-connect'
|
|
468
|
+
|
|
469
|
+
const pageView: SignalValues = {
|
|
470
|
+
signalContent: { signalType: 'pageview', pageCategory: 'checkout' },
|
|
471
|
+
}
|
|
472
|
+
|
|
473
|
+
AcousticConnectRN.logSignal(pageView, 1)
|
|
474
|
+
```
|
|
475
|
+
|
|
476
|
+
> **Android: top-level numbers need Connect Android 11.0.24-beta or newer.**
|
|
477
|
+
> Android's signal serializer gained a number branch in Connect Android
|
|
478
|
+
> **11.0.24-beta**; from that version a top-level numeric value is carried, the
|
|
479
|
+
> same as on iOS. Earlier versions carried strings, booleans, objects and arrays
|
|
480
|
+
> at the top level but dropped a top-level number. Numbers nested inside an
|
|
481
|
+
> object or array were never affected on either platform.
|
|
482
|
+
>
|
|
483
|
+
> Both versions sit inside the `[11.0.11, 12.0.0)` range this package accepts,
|
|
484
|
+
> and the Android dependency floats to the newest published build unless you pin
|
|
485
|
+
> it, so most integrations get the new behaviour. Nest the number if you pin an
|
|
486
|
+
> older one:
|
|
487
|
+
>
|
|
488
|
+
> ```ts
|
|
489
|
+
> AcousticConnectRN.logSignal({ cart: { items: 3 } }, 1) // any supported version
|
|
490
|
+
> AcousticConnectRN.logSignal({ items: 3 }, 1) // iOS, + Android 11.0.24-beta and newer
|
|
491
|
+
> ```
|
|
492
|
+
|
|
493
|
+
### `AcousticConnectRN.logCustomEvent(eventName, values, level): boolean`
|
|
494
|
+
|
|
495
|
+
Logs a named custom event. Unlike `logSignal`, `values` is **flat** — strings,
|
|
496
|
+
numbers and booleans only. The Android SDK's custom-event path is typed for
|
|
497
|
+
string values end to end, so there is no native route for nested JSON; widening
|
|
498
|
+
it would preserve the nesting on iOS and silently drop it on Android. Use
|
|
499
|
+
`logSignal` when the payload needs structure.
|
|
500
|
+
|
|
501
|
+
TypeScript will reject a nested value, but types are erased at runtime — a
|
|
502
|
+
payload built from an API response or widened through `any` still reaches the
|
|
503
|
+
bridge nested, gets reshaped by the native SDK, and returns `true`. The wrapper
|
|
504
|
+
logs a `console.warn` naming the offending keys when that happens (once per
|
|
505
|
+
call site, in dev and in production; the payload itself is passed through
|
|
506
|
+
unchanged). If you see it, move the payload to `logSignal`.
|
|
507
|
+
|
|
508
|
+
Numbers are rendered the same way on both platforms — a JS `2` arrives as `2`,
|
|
509
|
+
not `2.0`. Note the remaining difference in *type*: because the Android path is
|
|
510
|
+
string-typed, an Android custom-event number lands on the wire as a JSON string
|
|
511
|
+
(`"2"`) where iOS sends a JSON number (`2`). `logSignal` carries native types on
|
|
512
|
+
both platforms; reach for it when a dashboard or Composer rule compares the
|
|
513
|
+
value numerically.
|
|
514
|
+
|
|
404
515
|
### Push configuration (`ConnectConfig.json`)
|
|
405
516
|
|
|
406
517
|
| Field | Type | Default | Semantics |
|
|
@@ -436,6 +547,284 @@ The Android push-forwarding API itself is wired under follow-up work — until
|
|
|
436
547
|
that lands, `PushEnabled: true` on Android only changes which artifact is on
|
|
437
548
|
the classpath; the host-side token forwarding API is not yet exposed.
|
|
438
549
|
|
|
550
|
+
### Screen-capture configuration (`ConnectConfig.json`)
|
|
551
|
+
|
|
552
|
+
Screen layout and screenshot capture are configured per platform, because the
|
|
553
|
+
two native SDKs read their defaults from different places.
|
|
554
|
+
|
|
555
|
+
| Field | Type | Default | Semantics |
|
|
556
|
+
| --- | --- | --- | --- |
|
|
557
|
+
| `layoutConfig` | object \| absent | absent | Shared baseline for both platforms. Supports `AutoLayout` (screen capture rules) and `AppendMapIds`. |
|
|
558
|
+
| `layoutConfigIos` | object \| absent | absent | iOS-specific overrides, deep-merged over `layoutConfig`. |
|
|
559
|
+
| `layoutConfigAndroid` | object \| absent | absent | Android-specific overrides, deep-merged over `layoutConfig`. |
|
|
560
|
+
| `GetImageDataOnScreenLayout` | boolean | SDK default | Cross-platform. When `false`, layout messages carry no screenshot image data. |
|
|
561
|
+
|
|
562
|
+
`AutoLayout` holds a `GlobalScreenSettings` object plus optional per-screen
|
|
563
|
+
overrides keyed by screen name, where a per-screen value wins over the global
|
|
564
|
+
one. To turn screenshot capture off on both platforms:
|
|
565
|
+
|
|
566
|
+
```json
|
|
567
|
+
{
|
|
568
|
+
"Connect": {
|
|
569
|
+
"layoutConfig": {
|
|
570
|
+
"AutoLayout": {
|
|
571
|
+
"GlobalScreenSettings": { "ScreenShot": false }
|
|
572
|
+
}
|
|
573
|
+
}
|
|
574
|
+
}
|
|
575
|
+
}
|
|
576
|
+
```
|
|
577
|
+
|
|
578
|
+
`ScreenShot` is the cross-platform switch — set it in `layoutConfig` (or per
|
|
579
|
+
platform) and both native SDKs honour it. `CaptureScreenshotOn` is a related
|
|
580
|
+
but **iOS-only** key: iOS's native auto-instrumentation reads it, but on
|
|
581
|
+
Android the equivalent reader has no callers, so `CaptureScreenshotOn` is
|
|
582
|
+
accepted wherever you put it and does nothing there. Set it only under
|
|
583
|
+
`layoutConfigIos` if you want it; leaving it out of `layoutConfigAndroid` (or
|
|
584
|
+
the shared `layoutConfig`) costs nothing on Android and avoids implying it
|
|
585
|
+
does something it doesn't.
|
|
586
|
+
|
|
587
|
+
Put anything common in `layoutConfig` and use `layoutConfigIos` /
|
|
588
|
+
`layoutConfigAndroid` only for what differs. The platform block is **deep-merged**
|
|
589
|
+
over the shared one, so it refines the baseline rather than replacing it: an
|
|
590
|
+
iOS block setting just `ScreenShot` keeps the shared `Masking`, per-screen
|
|
591
|
+
rules, and every other shared value. Arrays are replaced outright rather than
|
|
592
|
+
concatenated, so a platform block can shorten or clear a shared list such as
|
|
593
|
+
`MaskIdList`.
|
|
594
|
+
|
|
595
|
+
#### Masking is selection, then redaction — an unmatched pattern leaves data unmasked
|
|
596
|
+
|
|
597
|
+
A screen rule's `Masking` block works in two independent steps: a control is
|
|
598
|
+
first **selected** by a matching `MaskIdList` (control id), `MaskValueList`
|
|
599
|
+
(control value), `MaskAccessibilityIdList` (accessibility id), or
|
|
600
|
+
`MaskAccessibilityLabelList` (accessibility label) pattern, and only a
|
|
601
|
+
*selected* control is redacted — its value, and (Connect iOS 2.1.22+ / Android
|
|
602
|
+
11.0.23-beta+ only — older SDKs serialised the accessibility object verbatim
|
|
603
|
+
regardless of masking) its accessibility label and hint. A control whose value
|
|
604
|
+
never matches any pattern in any of the four lists is not masked in any field.
|
|
605
|
+
That's by design, not a bug — but it means a client whose patterns don't
|
|
606
|
+
happen to match a given value can believe that value is masked when it never
|
|
607
|
+
was.
|
|
608
|
+
|
|
609
|
+
Email addresses are an easy miss: they rarely match a card-number or
|
|
610
|
+
`SECRET-`-style pattern, and free-text fields (bios, support messages,
|
|
611
|
+
usernames) routinely contain one. For any screen that collects email
|
|
612
|
+
addresses, add a pattern to `MaskValueList`:
|
|
613
|
+
|
|
614
|
+
```json
|
|
615
|
+
{ "MaskValueList": ["[A-Za-z0-9._%+-]+@[A-Za-z0-9.-]+\\.[A-Za-z]{2,}"] }
|
|
616
|
+
```
|
|
617
|
+
|
|
618
|
+
(The `bare-workflow` and `expo` sample `ConnectConfig.example.json` already
|
|
619
|
+
ship this pattern on `GlobalScreenSettings`.)
|
|
620
|
+
|
|
621
|
+
When no block applies, each native SDK keeps the defaults from its own bundled
|
|
622
|
+
layout config:
|
|
623
|
+
|
|
624
|
+
- **iOS** — the defaults ship inside the Connect pod's `ConnectResources.bundle`
|
|
625
|
+
and are copied into your `.app`, so `pod install` replaces them on every run.
|
|
626
|
+
There is no app-level override file, which is why `ConnectConfig.json` is the
|
|
627
|
+
only supported route — do not edit anything under `Pods/`.
|
|
628
|
+
- **Android** — the plugin writes your merged block to its own
|
|
629
|
+
`ConnectLayoutConfig.json` asset. If your app ships
|
|
630
|
+
`android/app/src/main/assets/ConnectLayoutConfig.json`, Android asset merging
|
|
631
|
+
gives **your** copy priority and the `ConnectConfig.json` block is ignored;
|
|
632
|
+
the build prints a warning when both exist. Keep one or the other.
|
|
633
|
+
|
|
634
|
+
> Turning screenshots off does not disable behavioural capture: screen views,
|
|
635
|
+
> clicks, and custom events still flow. It only drops the image data, which is
|
|
636
|
+
> what a subscription without session replay has no consumer for.
|
|
637
|
+
|
|
638
|
+
#### `NumberOfWebViews` turns off iOS layout capture — leave it at `0`
|
|
639
|
+
|
|
640
|
+
`AutoLayout` rules accept a `NumberOfWebViews` key. On iOS, any value greater
|
|
641
|
+
than zero marks the screens that rule covers as web-view screens, and the SDK's
|
|
642
|
+
automatic layout capture is skipped for a web-view screen. Its effect is not
|
|
643
|
+
limited to screens that actually host a `WebView`: the value is read as a
|
|
644
|
+
declaration about the rule, not a count that gets verified.
|
|
645
|
+
|
|
646
|
+
The trap is where it is usually set. `GlobalScreenSettings` is the rule that
|
|
647
|
+
applies to **every** screen with no more specific rule of its own, and React
|
|
648
|
+
Native screens are all in that position — they are hosted by the same generic
|
|
649
|
+
container class, so no per-screen native rule matches them. So a single
|
|
650
|
+
`"NumberOfWebViews": 1` under `GlobalScreenSettings` switches off
|
|
651
|
+
auto-instrumented layout capture for the entire app on iOS, including screens
|
|
652
|
+
with no web content at all:
|
|
653
|
+
|
|
654
|
+
```json
|
|
655
|
+
{
|
|
656
|
+
"Connect": {
|
|
657
|
+
"layoutConfigIos": {
|
|
658
|
+
"AutoLayout": {
|
|
659
|
+
"GlobalScreenSettings": { "NumberOfWebViews": 0 }
|
|
660
|
+
}
|
|
661
|
+
}
|
|
662
|
+
}
|
|
663
|
+
}
|
|
664
|
+
```
|
|
665
|
+
|
|
666
|
+
Screen views, clicks, and custom events are unaffected — the symptom is layout
|
|
667
|
+
messages going missing while everything else keeps arriving, which reads like a
|
|
668
|
+
capture failure rather than a setting. Keep `NumberOfWebViews` at `0`, the value
|
|
669
|
+
every shipped template uses. To stand layout capture down deliberately, set
|
|
670
|
+
`CaptureLayoutOn: 0` on the rule instead — it is the key that means that, and it
|
|
671
|
+
leaves `NumberOfWebViews` free to describe the screen.
|
|
672
|
+
|
|
673
|
+
#### WebView capture on Android: prerequisites and two open limitations
|
|
674
|
+
|
|
675
|
+
A screen that hosts a `react-native-webview` `WebView` has capture behaviour
|
|
676
|
+
beyond the config above:
|
|
677
|
+
|
|
678
|
+
- **The WebView must be scrolled on screen.** A capture only records what is
|
|
679
|
+
currently visible — the native tree-walk skips subtrees outside the
|
|
680
|
+
viewport by design. A `WebView` sitting below the fold at the default
|
|
681
|
+
scroll position yields a layout with no WebView nodes at all, which looks
|
|
682
|
+
exactly like WebView capture never engaged. Scroll it fully into view
|
|
683
|
+
before triggering (or waiting on) a capture.
|
|
684
|
+
- **`GoogleWebViewEnabled`** is a top-level `Connect` key (Android only,
|
|
685
|
+
default `true`) that gates whether the SDK instruments WebViews at all:
|
|
686
|
+
|
|
687
|
+
```json
|
|
688
|
+
{ "Connect": { "GoogleWebViewEnabled": false } }
|
|
689
|
+
```
|
|
690
|
+
|
|
691
|
+
Set to `false`, the SDK does not discover or walk into any `WebView` on the
|
|
692
|
+
screen — the rest of that screen still captures normally. It does not gate
|
|
693
|
+
anything else on this list: screen views, clicks, and non-WebView layout
|
|
694
|
+
content are unaffected either way.
|
|
695
|
+
- **A discovered WebView currently drops that screen's whole layout
|
|
696
|
+
message.** Once the SDK finds a `WebView`, it waits for a DOM-capture
|
|
697
|
+
correlation id from the page before it can finish and post the layout — and
|
|
698
|
+
a React Native-hosted `WebView` never supplies one, so the wait never
|
|
699
|
+
resolves and the *entire* screen's layout message is dropped, not just the
|
|
700
|
+
WebView's portion. Confirmed present in Android Connect **11.0.23-beta**, the
|
|
701
|
+
newest published artifact at the time of writing, and in every earlier version
|
|
702
|
+
in the supported range — measured on an emulator, where a capture on a screen
|
|
703
|
+
with a visible `WebView` posted **no messages at all** for that session, since
|
|
704
|
+
the layout's queue placeholder blocks the batch it sits in. There is no
|
|
705
|
+
client-side fix; `GoogleWebViewEnabled: false` (below) avoids it by not
|
|
706
|
+
instrumenting the `WebView` in the first place. A fix exists in the native SDK
|
|
707
|
+
but is not in any published artifact yet — check the Android Connect release
|
|
708
|
+
notes for a version above 11.0.23-beta before assuming this still applies.
|
|
709
|
+
- **Enabling WebView capture replaces the app's `WebViewClient`.** The native
|
|
710
|
+
SDK installs its own `WebViewClient` on that `WebView` to instrument it, in
|
|
711
|
+
place of the one `react-native-webview` had set — so callbacks such as
|
|
712
|
+
`onHttpError` and `onNavigationStateChange` on that `WebView` stop firing
|
|
713
|
+
while capture is active. Same status as the item above: present through Android
|
|
714
|
+
Connect **11.0.23-beta**, fixed in the native SDK but not yet published, and
|
|
715
|
+
the rest of the screen is unaffected either way.
|
|
716
|
+
|
|
717
|
+
Both of the limitations above only occur once the SDK is instrumenting a
|
|
718
|
+
`WebView`, so `GoogleWebViewEnabled: false` avoids both — at the cost of
|
|
719
|
+
getting no WebView capture on that screen at all.
|
|
720
|
+
|
|
721
|
+
#### Capture timing (`CaptureLayoutDelay`)
|
|
722
|
+
|
|
723
|
+
`AutoLayout.GlobalScreenSettings.CaptureLayoutDelay` is how long, in
|
|
724
|
+
milliseconds, the SDK waits before capturing the layout. It matters more in
|
|
725
|
+
React Native than in a native app: the wrapper triggers capture from React
|
|
726
|
+
Navigation's state change, which fires at the *start* of a screen transition,
|
|
727
|
+
whereas a native app captures from the view-controller lifecycle, after it. Too
|
|
728
|
+
short a delay and the capture catches a half-drawn screen.
|
|
729
|
+
|
|
730
|
+
The templates ship `500`, which clears a typical transition animation on both
|
|
731
|
+
platforms. Tune it globally, or per screen for one that is slower than the
|
|
732
|
+
rest:
|
|
733
|
+
|
|
734
|
+
```json
|
|
735
|
+
{
|
|
736
|
+
"Connect": {
|
|
737
|
+
"layoutConfig": {
|
|
738
|
+
"AutoLayout": {
|
|
739
|
+
"GlobalScreenSettings": { "CaptureLayoutDelay": 500 },
|
|
740
|
+
"Checkout": { "CaptureLayoutDelay": 900 }
|
|
741
|
+
}
|
|
742
|
+
}
|
|
743
|
+
}
|
|
744
|
+
}
|
|
745
|
+
```
|
|
746
|
+
|
|
747
|
+
`TLTRN.logScreenLayout(name)` uses the configured value. Pass a second argument
|
|
748
|
+
to override it for one call — `TLTRN.logScreenLayout(name, 0)` captures
|
|
749
|
+
immediately, `TLTRN.logScreenLayout(name, 900)` waits 900 ms.
|
|
750
|
+
|
|
751
|
+
A fixed delay cannot cover a screen whose content arrives asynchronously: if
|
|
752
|
+
data lands after the delay elapses, the capture shows the screen without it.
|
|
753
|
+
Raising the global delay to cover the slowest fetch delays every other screen
|
|
754
|
+
too. Call `TLTRN.logScreenLayout(name)` again when the content is on screen
|
|
755
|
+
instead — each call captures the layout as it stands at that moment.
|
|
756
|
+
|
|
757
|
+
Leaving the block out entirely gives you 500 ms as well. That is the wrapper's
|
|
758
|
+
default, chosen so both platforms behave the same; the native SDKs' own bundled
|
|
759
|
+
defaults differ from each other and are tuned for the lifecycle trigger rather
|
|
760
|
+
than the React Navigation one. Internally, omitting the second argument to
|
|
761
|
+
`TLTRN.logScreenLayout` sends a sentinel (`-1`) that both bridges resolve to
|
|
762
|
+
this configured value; any value the caller passes explicitly (`>= 0`) is used
|
|
763
|
+
as-is instead, bypassing the config lookup for that one call.
|
|
764
|
+
|
|
765
|
+
A near-zero value is not a request for faster captures. On iOS the
|
|
766
|
+
auto-instrumentation capture is triggered off the view-controller lifecycle,
|
|
767
|
+
and a delay close to `0` lets that trigger re-fire against the same screen far
|
|
768
|
+
faster than the app can settle — hundreds of captures within a couple of
|
|
769
|
+
hundred milliseconds while the app just sits idle, rather than one per actual
|
|
770
|
+
transition. The visible symptom is a runaway capture loop: a "Refreshing…"
|
|
771
|
+
indicator that stays up continuously instead of the brief one after a normal
|
|
772
|
+
transition. The SDK enforces no floor on this value, so `1` (millisecond) is
|
|
773
|
+
accepted and is exactly what produces the loop. Keep `CaptureLayoutDelay` at
|
|
774
|
+
`500` or raise it per screen — never lower it toward `0`.
|
|
775
|
+
|
|
776
|
+
#### Where screen-view and layout messages come from, and how to reduce duplicates
|
|
777
|
+
|
|
778
|
+
The two message kinds have different sources, and they differ per platform:
|
|
779
|
+
|
|
780
|
+
**Screen views (one source per platform).** On Android, the `<Connect>` wrapper
|
|
781
|
+
is the *only* source — it emits on React Navigation's `state` event. On iOS,
|
|
782
|
+
the native SDK's auto-instrumentation is the *only* source — it emits when a
|
|
783
|
+
screen's view controller reports its appearance. The wrapper never emits a
|
|
784
|
+
screen view on iOS; its role there is to hand the current *route name* to the
|
|
785
|
+
native SDK (which is what makes messages read `Checkout` rather than a native
|
|
786
|
+
container class) and to drive referrer chaining across transitions.
|
|
787
|
+
|
|
788
|
+
Duplicate screen views observed on iOS are therefore not two sources
|
|
789
|
+
overlapping — they are the single native source firing more than once when the
|
|
790
|
+
same screen's view controller reports several appearances for one transition.
|
|
791
|
+
They inflate event volumes and skew per-screen counts; they do not lose data.
|
|
792
|
+
There is no configuration key that collapses them today; a native-side dedupe
|
|
793
|
+
is under investigation. Do not try to solve it by removing the wrapper: on iOS
|
|
794
|
+
that costs route-based names and referrer chaining, and on Android it removes
|
|
795
|
+
screen views entirely. A same-name filter in the wrapper would not help either
|
|
796
|
+
— the wrapper is not the emitter on iOS, and such a filter would swallow
|
|
797
|
+
legitimate repeats like a stack pushing the same screen name twice.
|
|
798
|
+
|
|
799
|
+
**Layouts (two sources on iOS).** With automatic layout capture enabled in
|
|
800
|
+
config, an iOS transition can produce two layout messages: one from the
|
|
801
|
+
wrapper's `logScreenLayout` call and one from the native auto-instrumentation.
|
|
802
|
+
Control it from config, on the native side that has the duplicate:
|
|
803
|
+
|
|
804
|
+
```json
|
|
805
|
+
{
|
|
806
|
+
"Connect": {
|
|
807
|
+
"layoutConfigIos": {
|
|
808
|
+
"AutoLayout": {
|
|
809
|
+
"GlobalScreenSettings": { "CaptureLayoutOn": 0 }
|
|
810
|
+
}
|
|
811
|
+
}
|
|
812
|
+
}
|
|
813
|
+
}
|
|
814
|
+
```
|
|
815
|
+
|
|
816
|
+
`CaptureLayoutOn: 0` stands the **native** automatic layout capture down and
|
|
817
|
+
leaves the wrapper's route-named captures as the single source. Set it per
|
|
818
|
+
screen rather than globally if only some screens are noisy. Screen views,
|
|
819
|
+
clicks, and custom events are unaffected by this key.
|
|
820
|
+
|
|
821
|
+
If you would rather keep the native captures and have the wrapper stay out of
|
|
822
|
+
the way, omit `navigationRef` and do not rely on `<Connect>` for screen naming
|
|
823
|
+
— but expect native container class names in place of your route names.
|
|
824
|
+
|
|
825
|
+
Measure before changing either default: the volume depends on your navigator
|
|
826
|
+
structure, and both defaults are what every shipped sample uses.
|
|
827
|
+
|
|
439
828
|
### `<Connect>` props
|
|
440
829
|
|
|
441
830
|
| Prop | Type | Required | Description |
|
package/android/build.gradle
CHANGED
|
@@ -129,9 +129,28 @@ android {
|
|
|
129
129
|
}
|
|
130
130
|
}
|
|
131
131
|
|
|
132
|
+
// Java 17 — matched to React Native 0.82's own baseline (its Gradle plugin
|
|
133
|
+
// targets JavaVersion.VERSION_17), so this imposes no requirement a consumer
|
|
134
|
+
// does not already meet building an RN app. This file is compiled inside the
|
|
135
|
+
// consumer's Gradle build, so anything raised here becomes their floor: 21
|
|
136
|
+
// would put us above RN's baseline for no benefit, since the bridge uses no
|
|
137
|
+
// Java 21 language features. Bytecode level only — deliberately NOT a
|
|
138
|
+
// toolchain, so a consumer on JDK 21+ is free to build with it.
|
|
139
|
+
//
|
|
140
|
+
// Note this is independent of the Connect Android SDK shipping Java 21
|
|
141
|
+
// bytecode: D8 dexes major-65 classes happily, and a JDK 17 assembleDebug
|
|
142
|
+
// against that AAR succeeds. Only JVM unit tests that load those classes need
|
|
143
|
+
// a 21 runtime, which is configured in the (unpublished) example build.
|
|
132
144
|
compileOptions {
|
|
133
|
-
sourceCompatibility JavaVersion.
|
|
134
|
-
targetCompatibility JavaVersion.
|
|
145
|
+
sourceCompatibility JavaVersion.VERSION_17
|
|
146
|
+
targetCompatibility JavaVersion.VERSION_17
|
|
147
|
+
}
|
|
148
|
+
|
|
149
|
+
// Kept in lockstep with compileOptions above — AGP fails the build with
|
|
150
|
+
// "Inconsistent JVM-target compatibility" if the Java and Kotlin targets
|
|
151
|
+
// diverge.
|
|
152
|
+
kotlinOptions {
|
|
153
|
+
jvmTarget = '17'
|
|
135
154
|
}
|
|
136
155
|
|
|
137
156
|
sourceSets {
|
|
@@ -179,6 +198,34 @@ def acousticPushEnabled = (acousticConfig.Connect?.PushEnabled ?: false).toStrin
|
|
|
179
198
|
def acousticVersionPin = (acousticConfig.Connect?.AndroidVersion ?: '').trim()
|
|
180
199
|
def acousticVersion = acousticVersionPin.isEmpty() ? '+' : acousticVersionPin
|
|
181
200
|
def acousticArtifact = acousticPushEnabled ? 'connect-push-fcm' : 'connect'
|
|
201
|
+
|
|
202
|
+
// Connect co-versions `eocore` + `tealeaf` with itself only from 11.0.18-beta
|
|
203
|
+
// onward — and from that release their POM scope is `runtime`, which drops them
|
|
204
|
+
// off the compile classpath (see the companion declarations below).
|
|
205
|
+
//
|
|
206
|
+
// Earlier releases in the supported range ship `tealeaf` on its own 10.4.x line
|
|
207
|
+
// (with eocore arriving transitively through it) at COMPILE scope, so there the
|
|
208
|
+
// companions are both unnecessary AND unresolvable: eocore/tealeaf 11.0.16-beta
|
|
209
|
+
// simply do not exist on Maven Central. Guard on the explicit pin so a consumer
|
|
210
|
+
// who pinned an older Connect keeps building. An empty pin means `+`, which
|
|
211
|
+
// always resolves to the newest (co-versioned) release.
|
|
212
|
+
def acousticCompanionsRequired = true
|
|
213
|
+
if (!acousticVersionPin.isEmpty()) {
|
|
214
|
+
// Compare only the numeric core, ignoring any -beta/+build qualifier: a
|
|
215
|
+
// 11.0.18-beta pin must count as >= the 11.0.18 floor. Encoded as one integer
|
|
216
|
+
// because Groovy's <=> does not compare two ArrayLists.
|
|
217
|
+
def core = acousticVersionPin.replaceAll(/[-+].*$/, '').tokenize('.')
|
|
218
|
+
def nums = (0..2).collect { i -> (i < core.size() && core[i].isInteger()) ? core[i].toInteger() : 0 }
|
|
219
|
+
// Upper bound as well as lower, so that a pin outside the supported range
|
|
220
|
+
// fails on the `strictly '[11.0.11, 12.0.0)'` constraint in the
|
|
221
|
+
// `constraints { }` block at the bottom of `dependencies` — which names both
|
|
222
|
+
// the range and the reason — rather than on an unresolvable companion
|
|
223
|
+
// coordinate. Verified: without this bound a 12.0.0 pin reported
|
|
224
|
+
// "Could not find io.github.go-acoustic:eocore:12.0.0", burying the real cause.
|
|
225
|
+
def pinCode = nums[0] * 1000000 + nums[1] * 1000 + nums[2]
|
|
226
|
+
acousticCompanionsRequired = pinCode >= 11_000_018 && pinCode < 12_000_000
|
|
227
|
+
}
|
|
228
|
+
println "AcousticConnectRN: companionCompileDeps=$acousticCompanionsRequired (pin='$acousticVersionPin')"
|
|
182
229
|
println "AcousticConnectRN: PushEnabled=$acousticPushEnabled, artifact=io.github.go-acoustic:$acousticArtifact:$acousticVersion"
|
|
183
230
|
|
|
184
231
|
dependencies {
|
|
@@ -200,6 +247,42 @@ dependencies {
|
|
|
200
247
|
//noinspection GradleDynamicVersion
|
|
201
248
|
implementation "io.github.go-acoustic:$acousticArtifact:$acousticVersion"
|
|
202
249
|
|
|
250
|
+
// Restore the compile classpath for Connect's internal modules. This bridge
|
|
251
|
+
// calls into both directly — `com.ibm.eo.EOCore`,
|
|
252
|
+
// `com.ibm.eo.model.EOMonitoringLevel`, `com.tl.uic.Tealeaf`,
|
|
253
|
+
// `com.tl.uic.model.ScreenviewType`,
|
|
254
|
+
// `com.tl.uic.util.{DialogUtil,LayoutUtil,keyboardview.KeyboardView}` — so
|
|
255
|
+
// with them at `runtime` scope `compileDebugKotlin` fails with ~34
|
|
256
|
+
// "Unresolved reference 'ibm' / 'tl' / 'EOCore'" errors.
|
|
257
|
+
//
|
|
258
|
+
// compileOnly, not implementation: the artifacts still reach the runtime graph
|
|
259
|
+
// through Connect's own transitive, so declaring them there too would risk a
|
|
260
|
+
// second, independently-resolved copy.
|
|
261
|
+
//
|
|
262
|
+
// Both scopes are required — compileOnly does NOT propagate to the unit-test
|
|
263
|
+
// compile classpath, and android/src/test imports com.ibm.eo.* as well, so
|
|
264
|
+
// compileDebugUnitTestKotlin fails without the testCompileOnly pair.
|
|
265
|
+
//
|
|
266
|
+
// Correct for BOTH artifact variants. `connect-push-fcm` does not declare
|
|
267
|
+
// eocore/tealeaf itself — its POM depends on `connect` at compile scope, and
|
|
268
|
+
// eocore/tealeaf reach the graph through that at `runtime` scope, so the
|
|
269
|
+
// compile classpath is short of them exactly as in the analytics-only case.
|
|
270
|
+
// The variants are co-versioned (connect-push-fcm 11.0.18-beta -> connect
|
|
271
|
+
// 11.0.18-beta -> eocore/tealeaf 11.0.18-beta), so `$acousticVersion` is the
|
|
272
|
+
// right coordinate either way. Confirmed on debugCompileClasspath with
|
|
273
|
+
// PushEnabled=true; gating these on `!acousticPushEnabled` would break the
|
|
274
|
+
// push variant rather than protect it.
|
|
275
|
+
if (acousticCompanionsRequired) {
|
|
276
|
+
//noinspection GradleDynamicVersion
|
|
277
|
+
compileOnly "io.github.go-acoustic:eocore:$acousticVersion"
|
|
278
|
+
//noinspection GradleDynamicVersion
|
|
279
|
+
compileOnly "io.github.go-acoustic:tealeaf:$acousticVersion"
|
|
280
|
+
//noinspection GradleDynamicVersion
|
|
281
|
+
testCompileOnly "io.github.go-acoustic:eocore:$acousticVersion"
|
|
282
|
+
//noinspection GradleDynamicVersion
|
|
283
|
+
testCompileOnly "io.github.go-acoustic:tealeaf:$acousticVersion"
|
|
284
|
+
}
|
|
285
|
+
|
|
203
286
|
// Firebase Cloud Messaging — required by the push variant. The
|
|
204
287
|
// `connect-push-fcm` AAR calls `com.google.firebase.messaging.*`
|
|
205
288
|
// (its `FCMPushService` extends `FirebaseMessagingService`) but its
|
|
@@ -211,7 +294,7 @@ dependencies {
|
|
|
211
294
|
// builds pull zero Firebase. The host app still supplies its own
|
|
212
295
|
// `google-services.json` and applies the `com.google.gms.google-services`
|
|
213
296
|
// plugin (the bare-workflow demo does this conditionally). The BoM aligns
|
|
214
|
-
// messaging + its installations/datatransport transitives.
|
|
297
|
+
// messaging + its installations/datatransport transitives.
|
|
215
298
|
if (acousticPushEnabled) {
|
|
216
299
|
implementation platform('com.google.firebase:firebase-bom:33.7.0')
|
|
217
300
|
implementation 'com.google.firebase:firebase-messaging'
|