Skip to content

Commit 748a128

Browse files
kikosodkhawk
andauthored
build: update dependencies to latest versions (#2387)
* build: update dependencies to latest versions Bumps the version catalog and a handful of hardcoded snippet dependencies to their latest releases, including major upgrades: AGP 8.13.2 -> 9.3.1, Gradle 9.1.0 -> 9.7.0, Kotlin 2.2.0 -> 2.4.10, KSP 2.2.20-2.0.4 -> 2.3.11 (now versioned independently of Kotlin), Maps Compose 7.0.0/6.12.0 -> 8.4.0, Places(-ktx) and android-maps-utils to their latest majors. Also aligns app-rx's hardcoded play-services-maps/places versions with the rest of the repo. * build: bump actions/checkout to v7 and actions/setup-python to v7 Both are new majors since the last actions bump (#2377). Verified no workflow uses pull_request_target/workflow_run (affected by checkout v7's fork-checkout change) or setup-python's removed pip-install input, so no other changes are needed. * docs: sync WearOS install-snippet version comment with catalog scripts/update_docs_versions.py enforces this in CI; the wear bump to 1.4.0 left the inline comment stale. * build: regenerate Gradle wrapper for 9.7.0 via official wrapper task Ran ./gradlew wrapper --gradle-version=9.7.0 instead of hand-editing gradle-wrapper.properties, since that also refreshes gradle-wrapper.jar and the gradlew/gradlew.bat scripts (and picks up new 9.x wrapper properties like retries/retryBackOffMs). Drops the distributionSha256Sum pin as requested. * build: migrate to AGP 9 built-in Kotlin support AGP 9 provides Kotlin support natively and refuses to configure a module that still applies org.jetbrains.kotlin.android alongside it. Removes that plugin (all its declaration styles: catalog alias, kotlin("android"), and hardcoded id(...)) from every module actually wired into settings.gradle.kts, and drops the now-unused kotlin-android catalog entry. Also fixes two things AGP 9 surfaced as hard errors during configuration, unrelated to the plugin removal itself: - ApiDemos:java-app had a vestigial buildFeatures.compose = true with no Kotlin sources or Compose dependencies; AGP 9 now requires the Compose Compiler plugin whenever compose is enabled, so the dead flag is removed instead. - tutorials/kotlin/Polygons used the now-unsupported proguard-android.txt default file, replaced with proguard-android-optimize.txt. Standalone tutorial/sample directories not wired into settings.gradle.kts (app-rx, the java/ and duplicate kotlin/ tutorial folders) are untouched since they aren't part of the actual build graph or CI. * build: bump compileSdk/targetSdk to 37 androidx.core:core-ktx 1.19.0 requires compiling against API 37+; CI's checkDebugAarMetadata caught this. Also switches app-utils-ktx off its hardcoded compileSdk/targetSdk = 36 onto the catalog value, matching every other module. * build: pin GitHub Actions to commit SHAs The org's zizmor policy check (triggered whenever workflow files change) requires every `uses:` reference to be pinned to a full commit SHA rather than a floating version tag. Touching these three files for the checkout/setup-python bump made the check actually run for the first time in a while and it flagged all 36 `uses:` lines in them (not just the ones changed), so pins every action reference across build.yml, lint.yml, and generate-v3.yml, each with a version comment. release-please.yml is untouched by this PR and wasn't flagged, so left as-is. * build: add explicit workflow permissions and disable credential persistence zizmor flagged two more findings once these files started being scanned: excessive-permissions (Medium, blocking) because none of the three workflows declared an explicit permissions: block and so ran with the default broad GITHUB_TOKEN scope, and artipacked (Low, informational) because checkout steps left credentials persisted in the git config, which get exposed to anything that later reads the workspace (e.g. artifact uploads). - build.yml: contents: read (checkout + build only, no writes) - lint.yml: contents: read, security-events: write (needed for github/codeql-action/upload-sarif) - generate-v3.yml: contents: read (the actual PR push uses its own SYNCED_GITHUB_TOKEN_REPO secret via peter-evans/create-pull-request, not the default token) - persist-credentials: false added to every actions/checkout step across all three files; none of them do a subsequent git push with the default token, so this is safe. * fix: findViewById<View> instead of View? for applyInsets calls applyInsets(container: View) takes a non-null View, but every kotlin-app activity called it as applyInsets(findViewById<View?>(R.id.map_container)). Kotlin's newer compiler no longer treats an explicit nullable type argument on a platform-typed Java generic method leniently, so this now hard fails to compile instead of silently working. All 24 call sites always assumed a non-null result anyway (no null check), so this just drops the incorrect nullable type argument. * fix: adapt app-utils-ktx snippets to android-maps-utils 5.1.1 API The android-maps-utils bump (3.19.0 -> 5.1.1, part of the dependency update) rewrote the library in Kotlin, which is a source-incompatible change for these snippets: - ClusterItem is now a Kotlin interface with val properties (position, title, snippet, zIndex: Float?), not Java-style getter methods. Clustering.kt and Multilayer.kt's MyItem implementations used `override fun getPosition()` etc., which no longer overrides anything Kotlin recognizes; converted to `override val` properties matching the new interface, constructor-promoted where possible. - KmlLayer/KmlContainer expose getContainers()/getPlacemarks() as plain functions, not Kotlin properties, and KmlContainer's backing fields are now private. Feature.getId() is likewise a function. KML.kt used property-access syntax (layer.containers, feature.id) for all of these; switched to explicit method calls. - GeoJsonLayer's default style accessor is getDefaultPointStyle(), not a defaultPointStyle property; fixed in GeoJSON.kt. - KmlLayer/GeoJsonLayer constructors now take non-null Context/InputStream/JSONObject instead of the old nullable platform types. These snippet files use throwaway `= null` placeholders for doc purposes (never actually run), so added `!!` at each call site to match, consistent with the existing `map!!` pattern already used nearby. Verified each API shape against the actual v5.1.1 source on googlemaps/android-maps-utils (the library moved to a Kotlin rewrite there) rather than guessing. * fix: remaining android-maps-utils 5.1.1 API breaks Two more spots the compiler hadn't reached yet in the previous fix pass: - GeoJsonPointStyle (Kotlin, android-maps-utils 5.1.1) exposes isDraggable()/setDraggable(), getTitle()/setTitle(), getSnippet()/setSnippet() as plain functions, not var properties, so app-utils-ktx/GeoJSON.kt's `pointStyle.isDraggable = true` style assignments don't compile; switched to explicit setter calls. - KmlContainer.getProperty() now returns String? (nullable); KML.kt passed it straight to Log.i's non-null second parameter, added !! (guarded by the existing hasProperty() check just above it). - The JSONObject-argument GeoJsonLayer constructor is now annotated @throws(JSONException::class) in Kotlin, which surfaces in Java as a checked exception. snippets/app-utils (Java)'s addGeoJsonLayerJsonObject() didn't declare it; added `throws JSONException` to match its sibling method's existing pattern. * fix: remember MarkerState in FireMarkers to satisfy lint AGP 9's bundled lint now flags UnrememberedMutableState as an error (previously warning/unreported): MarkerState(...) was created fresh every recomposition, which would also reset marker drag state. Wraps it in remember(markerData.id) so each marker's state survives recomposition and is invalidated by React iOnly when the marker's identity actually changes. * refactor(snippets): use version catalog in documentation snippets and update Places SDK - Update dependencies in snippets (app-compose, app-utils, app-places-ktx) to use the Gradle version catalog (libs.*), resolving UseTomlInstead lint findings flagged by code scanning. - Add documentation comments within region tags showing both the recommended version catalog configuration (TOML block) and the standalone coordinate declaration for non-catalog projects. - Replace deprecated places-ktx dependency with core Places SDK (libs.places), as Kotlin extensions and coroutines are built directly into the Places SDK. - Add mapsUtils to gradle/libs.versions.toml. - Add missing androidTest dependencies (ext.junit, espresso.idling.resource) to ApiDemos:kotlin-app and update LatLngSubject / LatLngBoundsSubject custom Truth subject factories for Kotlin 2.4 / Truth 1.4.5 compatibility. - Add .kotlin/ compiler directory to .gitignore. --------- Co-authored-by: Dale Hawkins <107309+dkhawk@users.noreply.github.com>
1 parent 203112a commit 748a128

57 files changed

Lines changed: 235 additions & 221 deletions

File tree

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

‎.github/workflows/build.yml‎

Lines changed: 32 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -25,23 +25,28 @@ on:
2525
types: [ build ]
2626
workflow_dispatch:
2727

28+
permissions:
29+
contents: read
30+
2831
# A workflow run is made up of one or more jobs that can run sequentially or in parallel
2932
jobs:
3033
build-ApiDemos:
3134
runs-on: ubuntu-latest
3235
timeout-minutes: 45
3336

3437
steps:
35-
- uses: actions/checkout@v6
38+
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
39+
with:
40+
persist-credentials: false
3641

3742
- name: set up Java 21
38-
uses: actions/setup-java@v5
43+
uses: actions/setup-java@b6effb05e454b25005698d916606bdc6ffcbf961 # v5.7.0
3944
with:
4045
distribution: 'temurin'
4146
java-version: '21'
4247

4348
- name: Setup Gradle
44-
uses: gradle/actions/setup-gradle@v6
49+
uses: gradle/actions/setup-gradle@9c971963bec38e04b3d30dcc455b5382be2fdbfb # v6.3.0
4550

4651
- name: Build and check
4752
run: |
@@ -55,16 +60,18 @@ jobs:
5560
timeout-minutes: 45
5661

5762
steps:
58-
- uses: actions/checkout@v6
63+
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
64+
with:
65+
persist-credentials: false
5966

6067
- name: set up Java 21
61-
uses: actions/setup-java@v5
68+
uses: actions/setup-java@b6effb05e454b25005698d916606bdc6ffcbf961 # v5.7.0
6269
with:
6370
distribution: 'temurin'
6471
java-version: '21'
6572

6673
- name: Setup Gradle
67-
uses: gradle/actions/setup-gradle@v6
74+
uses: gradle/actions/setup-gradle@9c971963bec38e04b3d30dcc455b5382be2fdbfb # v6.3.0
6875

6976
- name: Build and check
7077
run: ./gradlew :WearOS:Wearable:assembleDebug
@@ -74,16 +81,18 @@ jobs:
7481
timeout-minutes: 45
7582

7683
steps:
77-
- uses: actions/checkout@v6
84+
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
85+
with:
86+
persist-credentials: false
7887

7988
- name: set up Java 21
80-
uses: actions/setup-java@v5
89+
uses: actions/setup-java@b6effb05e454b25005698d916606bdc6ffcbf961 # v5.7.0
8190
with:
8291
distribution: 'temurin'
8392
java-version: '21'
8493

8594
- name: Setup Gradle
86-
uses: gradle/actions/setup-gradle@v6
95+
uses: gradle/actions/setup-gradle@9c971963bec38e04b3d30dcc455b5382be2fdbfb # v6.3.0
8796

8897
- name: Build and check
8998
run: ./gradlew :FireMarkers:app:assembleDebug
@@ -93,16 +102,18 @@ jobs:
93102
timeout-minutes: 45
94103

95104
steps:
96-
- uses: actions/checkout@v6
105+
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
106+
with:
107+
persist-credentials: false
97108

98109
- name: set up Java 21
99-
uses: actions/setup-java@v5
110+
uses: actions/setup-java@b6effb05e454b25005698d916606bdc6ffcbf961 # v5.7.0
100111
with:
101112
distribution: 'temurin'
102113
java-version: '21'
103114

104115
- name: Setup Gradle
105-
uses: gradle/actions/setup-gradle@v6
116+
uses: gradle/actions/setup-gradle@9c971963bec38e04b3d30dcc455b5382be2fdbfb # v6.3.0
106117

107118
- name: Build and check
108119
run: |
@@ -118,16 +129,18 @@ jobs:
118129
timeout-minutes: 45
119130

120131
steps:
121-
- uses: actions/checkout@v6
132+
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
133+
with:
134+
persist-credentials: false
122135

123136
- name: set up Java 21
124-
uses: actions/setup-java@v5
137+
uses: actions/setup-java@b6effb05e454b25005698d916606bdc6ffcbf961 # v5.7.0
125138
with:
126139
distribution: 'temurin'
127140
java-version: '21'
128141

129142
- name: Setup Gradle
130-
uses: gradle/actions/setup-gradle@v6
143+
uses: gradle/actions/setup-gradle@9c971963bec38e04b3d30dcc455b5382be2fdbfb # v6.3.0
131144

132145
- name: Build and check
133146
run: |
@@ -143,9 +156,11 @@ jobs:
143156
- build-Snippets
144157
- build-tutorials
145158
steps:
146-
- uses: actions/checkout@v6
159+
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
160+
with:
161+
persist-credentials: false
147162
- name: set up Java 21
148-
uses: actions/setup-java@v5
163+
uses: actions/setup-java@b6effb05e454b25005698d916606bdc6ffcbf961 # v5.7.0
149164
with:
150165
distribution: 'temurin'
151166
java-version: '21'

‎.github/workflows/generate-v3.yml‎

Lines changed: 9 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -19,22 +19,27 @@ on:
1919
repository_dispatch:
2020
types: [ generate-v3 ]
2121

22+
permissions:
23+
contents: read
24+
2225
jobs:
2326
generate-v3:
2427
runs-on: ubuntu-latest
2528
timeout-minutes: 45
2629

2730
steps:
28-
- uses: actions/checkout@v6
31+
- uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
32+
with:
33+
persist-credentials: false
2934

3035
- name: set up JDK 17
31-
uses: actions/setup-java@v5
36+
uses: actions/setup-java@b6effb05e454b25005698d916606bdc6ffcbf961 # v5.7.0
3237
with:
3338
distribution: 'temurin'
3439
java-version: 17
3540

3641
- name: Setup Gradle
37-
uses: gradle/actions/setup-gradle@v6
42+
uses: gradle/actions/setup-gradle@9c971963bec38e04b3d30dcc455b5382be2fdbfb # v6.3.0
3843

3944
- name: Install NDK
4045
run: |
@@ -48,7 +53,7 @@ jobs:
4853
echo "files-changed=$(git status -s | wc -l)" >> $GITHUB_OUTPUT
4954
5055
- name: PR Changes
51-
uses: peter-evans/create-pull-request@v8
56+
uses: peter-evans/create-pull-request@5f6978faf089d4d20b00c7766989d076bb2fc7f1 # v8.1.1
5257
if: steps.gradlew-generate-v3.outputs.files-changed > 0
5358
with:
5459
token: ${{ secrets.SYNCED_GITHUB_TOKEN_REPO }}

‎.github/workflows/lint.yml‎

Lines changed: 21 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -19,30 +19,36 @@ on:
1919
branches:
2020
- main
2121

22+
permissions:
23+
contents: read
24+
security-events: write
25+
2226
jobs:
2327
lint:
2428
runs-on: ubuntu-latest
2529

2630
steps:
2731
- name: Checkout code
28-
uses: actions/checkout@v6
32+
uses: actions/checkout@3d3c42e5aac5ba805825da76410c181273ba90b1 # v7.0.1
33+
with:
34+
persist-credentials: false
2935

3036
- name: Set up JDK 17
31-
uses: actions/setup-java@v5
37+
uses: actions/setup-java@b6effb05e454b25005698d916606bdc6ffcbf961 # v5.7.0
3238
with:
3339
distribution: 'temurin'
3440
java-version: '21'
3541

3642
- name: Set up Python
37-
uses: actions/setup-python@v6
43+
uses: actions/setup-python@5fda3b95a4ea91299a34e894583c3862153e4b97 # v7.0.0
3844
with:
3945
python-version: '3.x'
4046

4147
- name: Check documentation versions
4248
run: python3 scripts/update_docs_versions.py --check
4349

4450
- name: Setup Gradle
45-
uses: gradle/actions/setup-gradle@v6
51+
uses: gradle/actions/setup-gradle@9c971963bec38e04b3d30dcc455b5382be2fdbfb # v6.3.0
4652

4753
- name: Run Android Lint
4854
run: |
@@ -59,67 +65,67 @@ jobs:
5965
./gradlew :FireMarkers:app:lintDebug
6066
6167
- name: Upload SARIF for ApiDemos:kotlin-app
62-
uses: github/codeql-action/upload-sarif@v4
68+
uses: github/codeql-action/upload-sarif@ff2f1c621b7f889edc0d3c761ac2e6a3f8cdb0dd # v4.37.7
6369
with:
6470
sarif_file: ApiDemos/project/kotlin-app/build/reports/lint-results-debug.sarif
6571
category: ApiDemos-kotlin-app
6672

6773
- name: Upload SARIF for ApiDemos:java-app
68-
uses: github/codeql-action/upload-sarif@v4
74+
uses: github/codeql-action/upload-sarif@ff2f1c621b7f889edc0d3c761ac2e6a3f8cdb0dd # v4.37.7
6975
with:
7076
sarif_file: ApiDemos/project/java-app/build/reports/lint-results-debug.sarif
7177
category: ApiDemos-java-app
7278

7379
- name: Upload SARIF for ApiDemos:common-ui
74-
uses: github/codeql-action/upload-sarif@v4
80+
uses: github/codeql-action/upload-sarif@ff2f1c621b7f889edc0d3c761ac2e6a3f8cdb0dd # v4.37.7
7581
with:
7682
sarif_file: ApiDemos/project/common-ui/build/reports/lint-results-debug.sarif
7783
category: ApiDemos-common-ui
7884

7985
- name: Upload SARIF for snippets:app
80-
uses: github/codeql-action/upload-sarif@v4
86+
uses: github/codeql-action/upload-sarif@ff2f1c621b7f889edc0d3c761ac2e6a3f8cdb0dd # v4.37.7
8187
with:
8288
sarif_file: snippets/app/build/reports/lint-results-debug.sarif
8389
category: snippets-app
8490

8591
- name: Upload SARIF for snippets:app-utils
86-
uses: github/codeql-action/upload-sarif@v4
92+
uses: github/codeql-action/upload-sarif@ff2f1c621b7f889edc0d3c761ac2e6a3f8cdb0dd # v4.37.7
8793
with:
8894
sarif_file: snippets/app-utils/build/reports/lint-results-debug.sarif
8995
category: snippets-app-utils
9096

9197
- name: Upload SARIF for snippets:app-utils-ktx
92-
uses: github/codeql-action/upload-sarif@v4
98+
uses: github/codeql-action/upload-sarif@ff2f1c621b7f889edc0d3c761ac2e6a3f8cdb0dd # v4.37.7
9399
with:
94100
sarif_file: snippets/app-utils-ktx/build/reports/lint-results-debug.sarif
95101
category: snippets-app-utils-ktx
96102

97103
- name: Upload SARIF for snippets:app-places-ktx
98-
uses: github/codeql-action/upload-sarif@v4
104+
uses: github/codeql-action/upload-sarif@ff2f1c621b7f889edc0d3c761ac2e6a3f8cdb0dd # v4.37.7
99105
with:
100106
sarif_file: snippets/app-places-ktx/build/reports/lint-results-debug.sarif
101107
category: snippets-app-places-ktx
102108

103109
- name: Upload SARIF for snippets:app-ktx
104-
uses: github/codeql-action/upload-sarif@v4
110+
uses: github/codeql-action/upload-sarif@ff2f1c621b7f889edc0d3c761ac2e6a3f8cdb0dd # v4.37.7
105111
with:
106112
sarif_file: snippets/app-ktx/build/reports/lint-results-debug.sarif
107113
category: snippets-app-ktx
108114

109115
- name: Upload SARIF for snippets:app-compose
110-
uses: github/codeql-action/upload-sarif@v4
116+
uses: github/codeql-action/upload-sarif@ff2f1c621b7f889edc0d3c761ac2e6a3f8cdb0dd # v4.37.7
111117
with:
112118
sarif_file: snippets/app-compose/build/reports/lint-results-debug.sarif
113119
category: snippets-app-compose
114120

115121
- name: Upload SARIF for WearOS:Wearable
116-
uses: github/codeql-action/upload-sarif@v4
122+
uses: github/codeql-action/upload-sarif@ff2f1c621b7f889edc0d3c761ac2e6a3f8cdb0dd # v4.37.7
117123
with:
118124
sarif_file: WearOS/Wearable/build/reports/lint-results-debug.sarif
119125
category: WearOS-Wearable
120126

121127
- name: Upload SARIF for FireMarkers:app
122-
uses: github/codeql-action/upload-sarif@v4
128+
uses: github/codeql-action/upload-sarif@ff2f1c621b7f889edc0d3c761ac2e6a3f8cdb0dd # v4.37.7
123129
with:
124130
sarif_file: FireMarkers/app/build/reports/lint-results-debug.sarif
125131
category: FireMarkers-app

‎.gitignore‎

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,4 +9,5 @@ secrets.properties
99

1010
# This covers new IDEs, like Antigravity
1111
.vscode/
12-
**/bin/
12+
**/bin/
13+
.kotlin/

‎ApiDemos/project/common-ui/build.gradle.kts‎

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,6 @@ import org.jetbrains.kotlin.gradle.dsl.JvmTarget
1818

1919
plugins {
2020
alias(libs.plugins.android.library)
21-
alias(libs.plugins.kotlin.android)
2221
}
2322

2423
android {

‎ApiDemos/project/java-app/build.gradle.kts‎

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,6 @@ android {
3434
}
3535

3636
buildFeatures {
37-
compose = true
3837
buildConfig = true
3938
viewBinding = true
4039
}

‎ApiDemos/project/kotlin-app/build.gradle.kts‎

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -18,7 +18,6 @@ import org.jetbrains.kotlin.gradle.dsl.JvmTarget
1818

1919
plugins {
2020
alias(libs.plugins.android.application)
21-
alias(libs.plugins.kotlin.android)
2221
alias(libs.plugins.kotlin.parcelize)
2322
alias(libs.plugins.secrets.gradle.plugin)
2423
}
@@ -94,6 +93,8 @@ dependencies {
9493

9594
// Tests
9695
testImplementation(libs.junit)
96+
androidTestImplementation(libs.ext.junit)
97+
androidTestImplementation(libs.espresso.idling.resource)
9798
androidTestImplementation(libs.junit)
9899
androidTestImplementation(libs.espresso.core)
99100
androidTestImplementation(libs.truth)

‎ApiDemos/project/kotlin-app/src/androidTest/java/com/example/kotlindemos/truth/LatLngBoundsSubject.kt‎

Lines changed: 9 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -26,14 +26,18 @@ import com.google.common.truth.Truth
2626
*/
2727
class LatLngBoundsSubject private constructor(
2828
failureMetadata: FailureMetadata,
29-
private val actual: LatLngBounds
29+
private val actual: LatLngBounds?
3030
) : Subject(failureMetadata, actual) {
3131

3232
/**
3333
* Asserts that the given [LatLng] is contained within the actual bounds, allowing for
3434
* a small tolerance to account for floating-point inaccuracies.
3535
*/
3636
fun containsWithTolerance(expected: LatLng) {
37+
if (actual == null) {
38+
failWithActual("expected to contain", expected)
39+
return
40+
}
3741
val tolerance = 1e-5
3842
val contains = actual.southwest.latitude - tolerance <= expected.latitude &&
3943
expected.latitude <= actual.northeast.latitude + tolerance &&
@@ -60,11 +64,13 @@ class LatLngBoundsSubject private constructor(
6064
}
6165

6266
companion object {
67+
fun latLngBounds(): Factory<LatLngBoundsSubject, LatLngBounds> = Factory(::LatLngBoundsSubject)
68+
6369
/**
6470
* Creates a [LatLngBoundsSubject] for asserting on the given [LatLngBounds].
6571
*/
66-
fun assertThat(actual: LatLngBounds): LatLngBoundsSubject {
67-
return Truth.assertAbout(::LatLngBoundsSubject).that(actual)
72+
fun assertThat(actual: LatLngBounds?): LatLngBoundsSubject {
73+
return Truth.assertAbout(latLngBounds()).that(actual)
6874
}
6975
}
7076
}

0 commit comments

Comments
 (0)