Skip to content

Commit a413055

Browse files
authored
feat!: upgrade to latest sdks (#459)
- Updates Kotlin version from 2.0.0 to 2.1.21. - Updates Android Navigation SDK from 6.1.0 to 6.3.1. (Release notes) - Updates iOS Navigation SDK from 9.3.0 to 10.1.0. (Release notes) - Adds ability to toggle report incident button visibility. - Adds ability to listen prompt visibility events. - Increases minimum iOS version from 15 to 16 - Android Navigation SDK version 6.3.0 uses gradle project configuration validation and requires desugaring library enabled
1 parent 5d4556d commit a413055

33 files changed

+197
-70
lines changed

CARPLAY.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@ This guide explains how to enable and integrate Apple CarPlay with the React Nat
44

55
## Requirements
66

7-
- iOS device or iOS simulator (iOS 15.0+)
7+
- iOS device or iOS simulator (iOS 16.0+)
88
- CarPlay Simulator
99
- CarPlay entitlement for your application (provided by Apple)
1010

README.md

Lines changed: 15 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@ This repository contains a React Native plugin that provides a [Google Navigatio
1515

1616
| | Android | iOS |
1717
| ------------------------------- | ------- | --------- |
18-
| **Minimum mobile OS supported** | SDK 23+ | iOS 15.0+ |
18+
| **Minimum mobile OS supported** | SDK 23+ | iOS 16.0+ |
1919

2020
* A React Native project
2121
* A Google Cloud project
@@ -62,20 +62,12 @@ To ensure compatibility with AndroidX, enable Jetifier in your `android/gradle.p
6262
android.enableJetifier=true
6363
```
6464

65-
#### Minimum SDK Requirements for Android
65+
#### Enable Core Library Desugaring
6666

67-
The `minSdkVersion` for your Android project must be set to 23 or higher in `android/app/build.gradle`:
67+
Core library desugaring **must be enabled** for your Android project, regardless of your minSdkVersion.
6868

69-
```groovy
70-
android {
71-
defaultConfig {
72-
minSdkVersion 23
73-
}
74-
}
75-
```
69+
To enable desugaring, update your `android/app/build.gradle` file:
7670

77-
If `minSdkVersion` is set to less than 34 (API 34), you need to configure desugaring for your Android app.
78-
To enable desugaring, add the following configurations to `android/app/build.gradle` file:
7971
```groovy
8072
android {
8173
...
@@ -90,7 +82,17 @@ dependencies {
9082
}
9183
```
9284

93-
You may also need to upgrade to Gradle 8.4 and the Android Gradle plugin version 8.3.0
85+
#### Minimum SDK Requirements for Android
86+
87+
The `minSdkVersion` for your Android project must be set to 23 or higher in `android/app/build.gradle`:
88+
89+
```groovy
90+
android {
91+
defaultConfig {
92+
minSdkVersion 23
93+
}
94+
}
95+
```
9496

9597
#### Set Google Maps API Key
9698

android/build.gradle

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,7 @@
1515
import groovy.json.JsonSlurper
1616

1717
buildscript {
18-
ext.kotlin_version = '2.0.0'
18+
ext.kotlin_version = '2.1.21'
1919
repositories {
2020
google()
2121
mavenCentral()
@@ -39,7 +39,7 @@ if (isNewArchitectureEnabled()) {
3939

4040
android {
4141
namespace "com.google.android.react.navsdk"
42-
compileSdkVersion 34
42+
compileSdkVersion 35
4343

4444
compileOptions {
4545
sourceCompatibility JavaVersion.VERSION_1_8
@@ -76,6 +76,6 @@ dependencies {
7676
implementation "androidx.car.app:app-projected:1.4.0"
7777
implementation 'com.facebook.react:react-native:+'
7878
implementation 'androidx.constraintlayout:constraintlayout:2.1.4'
79-
implementation "com.google.android.libraries.navigation:navigation:6.1.0"
79+
implementation "com.google.android.libraries.navigation:navigation:6.3.1"
8080
api 'com.google.guava:guava:31.0.1-android'
8181
}

android/src/main/java/com/google/android/react/navsdk/Command.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -55,7 +55,8 @@ public enum Command {
5555
REMOVE_GROUND_OVERLAY(36, "removeGroundOverlay"),
5656
SET_ZOOM_CONTROLS_ENABLED(37, "setZoomControlsEnabled"),
5757
SET_RECENTER_BUTTON_ENABLED(38, "setRecenterButtonEnabled"),
58-
SET_PADDING(39, "setPadding");
58+
SET_PADDING(39, "setPadding"),
59+
SET_REPORT_INCIDENT_BUTTON_ENABLED(40, "setReportIncidentButtonEnabled");
5960

6061
private final int value;
6162
private final String name;

android/src/main/java/com/google/android/react/navsdk/INavViewFragment.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -33,4 +33,6 @@ public interface INavViewFragment extends IMapViewFragment {
3333
void showRouteOverview();
3434

3535
void setNightModeOption(int jsValue);
36+
37+
void setReportIncidentButtonEnabled(boolean enabled);
3638
}

android/src/main/java/com/google/android/react/navsdk/INavigationViewCallback.java

Lines changed: 0 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -23,8 +23,6 @@
2323
public interface INavigationViewCallback {
2424
void onMapReady();
2525

26-
void onRecenterButtonClick();
27-
2826
void onMarkerClick(Marker marker);
2927

3028
void onPolylineClick(Polyline polyline);

android/src/main/java/com/google/android/react/navsdk/MapViewFragment.java

Lines changed: 0 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -91,11 +91,6 @@ public void onMapReady() {
9191
emitEvent("onMapReady", null);
9292
}
9393

94-
@Override
95-
public void onRecenterButtonClick() {
96-
emitEvent("onRecenterButtonClick", null);
97-
}
98-
9994
@Override
10095
public void onMarkerClick(Marker marker) {
10196
emitEvent("onMarkerClick", ObjectTranslationUtil.getMapFromMarker(marker));

android/src/main/java/com/google/android/react/navsdk/NavViewFragment.java

Lines changed: 14 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -33,6 +33,7 @@
3333
import com.google.android.gms.maps.model.Polygon;
3434
import com.google.android.gms.maps.model.Polyline;
3535
import com.google.android.libraries.navigation.NavigationView;
36+
import com.google.android.libraries.navigation.PromptVisibilityChangedListener;
3637
import com.google.android.libraries.navigation.StylingOptions;
3738
import com.google.android.libraries.navigation.SupportNavigationFragment;
3839

@@ -55,14 +56,24 @@ public NavViewFragment(ReactApplicationContext reactContext, int viewTag) {
5556
this.viewTag = viewTag;
5657
}
5758

58-
private NavigationView.OnRecenterButtonClickedListener onRecenterButtonClickedListener =
59+
private final NavigationView.OnRecenterButtonClickedListener onRecenterButtonClickedListener =
5960
new NavigationView.OnRecenterButtonClickedListener() {
6061
@Override
6162
public void onRecenterButtonClick() {
6263
emitEvent("onRecenterButtonClick", null);
6364
}
6465
};
6566

67+
private final PromptVisibilityChangedListener onPromptVisibilityChangedListener =
68+
new PromptVisibilityChangedListener() {
69+
@Override
70+
public void onVisibilityChanged(boolean isVisible) {
71+
WritableMap map = Arguments.createMap();
72+
map.putBoolean("visible", isVisible);
73+
emitEvent("onPromptVisibilityChanged", map);
74+
}
75+
};
76+
6677
private String style = "";
6778

6879
@SuppressLint("MissingPermission")
@@ -87,6 +98,7 @@ public void onMapReady(GoogleMap googleMap) {
8798

8899
setNavigationUiEnabled(NavModule.getInstance().getNavigator() != null);
89100
addOnRecenterButtonClickedListener(onRecenterButtonClickedListener);
101+
addPromptVisibilityChangedListener(onPromptVisibilityChangedListener);
90102
}
91103
});
92104
}
@@ -118,11 +130,6 @@ public void onMapReady() {
118130
emitEvent("onMapReady", null);
119131
}
120132

121-
@Override
122-
public void onRecenterButtonClick() {
123-
emitEvent("onRecenterButtonClick", null);
124-
}
125-
126133
@Override
127134
public void onMarkerClick(Marker marker) {
128135
emitEvent("onMarkerClick", ObjectTranslationUtil.getMapFromMarker(marker));
@@ -176,6 +183,7 @@ public GoogleMap getGoogleMap() {
176183

177184
private void cleanup() {
178185
removeOnRecenterButtonClickedListener(onRecenterButtonClickedListener);
186+
removePromptVisibilityChangedListener(onPromptVisibilityChangedListener);
179187
}
180188

181189
private void emitEvent(String eventName, @Nullable WritableMap data) {

android/src/main/java/com/google/android/react/navsdk/NavViewManager.java

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -303,6 +303,10 @@ public void receiveCommand(
303303
getFragmentForRoot(root)
304304
.getMapController()
305305
.setPadding(args.getInt(0), args.getInt(1), args.getInt(2), args.getInt(3));
306+
break;
307+
case SET_REPORT_INCIDENT_BUTTON_ENABLED:
308+
getNavFragmentForRoot(root).setReportIncidentButtonEnabled(args.getBoolean(0));
309+
break;
306310
}
307311
}
308312

@@ -318,6 +322,9 @@ public Map<String, Object> getExportedCustomDirectEventTypeConstants() {
318322
.put(
319323
"onRecenterButtonClick",
320324
MapBuilder.of("registrationName", "onRecenterButtonClick"))
325+
.put(
326+
"onPromptVisibilityChanged",
327+
MapBuilder.of("registrationName", "onPromptVisibilityChanged"))
321328
.put("onMapReady", MapBuilder.of("registrationName", "onMapReady"))
322329
.put("onMapClick", MapBuilder.of("registrationName", "onMapClick"))
323330
.put("onMarkerClick", MapBuilder.of("registrationName", "onMarkerClick"))

example/.detoxrc.js

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -59,6 +59,7 @@ module.exports = {
5959
type: 'ios.simulator',
6060
device: {
6161
type: 'iPhone 16 Pro',
62+
os: 'iOS 18.5',
6263
},
6364
},
6465
attached: {
@@ -70,7 +71,7 @@ module.exports = {
7071
emulator: {
7172
type: 'android.emulator',
7273
device: {
73-
avdName: 'Pixel_8_API_35',
74+
avdName: 'Pixel_9_Pro_API_35',
7475
},
7576
},
7677
},

0 commit comments

Comments
 (0)