From 62946505c4b3dad3167b8f44809b0c4a829a0761 Mon Sep 17 00:00:00 2001 From: stylianosgakis Date: Thu, 13 Aug 2026 14:15:26 +0200 Subject: [PATCH] Fix NoSuchMethodError WindowMetrics.getDensity() crash on launch MainActivity derived the window size class with material3's calculateWindowSizeClass(activity), which routes through androidx.window's WindowMetricsCalculator and calls WindowMetrics.getDensity(). That method is absent on some Android 14 builds, so the app crashed on launch with NoSuchMethodError before the first frame. Compute the WindowSizeClass from Configuration (screenWidthDp / screenHeightDp) via WindowSizeClass.calculateFromSize, which never touches androidx.window. Verified on the R8-minified staging build: the material3 AndroidWindowSizeClass path is stripped from the shipped dex. The only residual getDensity reference is Compose UI's lazy LocalWindowInfo.containerSize path, which no app code reads. Firebase Crashlytics issue: 6a11e58b371ac16c7a6781fc95171530 Affected version: 14.4.2 (1786360451) --- .../kotlin/com/hedvig/android/app/MainActivity.kt | 14 ++++++++++++-- 1 file changed, 12 insertions(+), 2 deletions(-) diff --git a/app/app/src/main/kotlin/com/hedvig/android/app/MainActivity.kt b/app/app/src/main/kotlin/com/hedvig/android/app/MainActivity.kt index 6214624461..da831d4eab 100644 --- a/app/app/src/main/kotlin/com/hedvig/android/app/MainActivity.kt +++ b/app/app/src/main/kotlin/com/hedvig/android/app/MainActivity.kt @@ -13,10 +13,13 @@ import androidx.activity.enableEdgeToEdge import androidx.appcompat.app.AppCompatActivity import androidx.appcompat.app.AppCompatDelegate import androidx.compose.foundation.ComposeFoundationFlags -import androidx.compose.material3.windowsizeclass.calculateWindowSizeClass +import androidx.compose.material3.windowsizeclass.WindowSizeClass import androidx.compose.runtime.CompositionLocalProvider import androidx.compose.runtime.remember import androidx.compose.runtime.retain.retain +import androidx.compose.ui.platform.LocalConfiguration +import androidx.compose.ui.unit.DpSize +import androidx.compose.ui.unit.dp import androidx.core.content.getSystemService import androidx.core.splashscreen.SplashScreen.Companion.installSplashScreen import androidx.lifecycle.Lifecycle @@ -254,7 +257,14 @@ class MainActivity : AppCompatActivity() { CompositionLocalProvider( LocalMetroViewModelFactory provides navRetainedViewModel.viewModelFactory, ) { - val windowSizeClass = calculateWindowSizeClass(this@MainActivity) + // Compute the window size class from Configuration. Do not switch this to + // calculateWindowSizeClass(activity) or LocalWindowInfo.containerSize: both route through + // androidx.window's WindowMetricsCalculator, which invokes WindowMetrics.getDensity(). That + // method is absent on some Android 14 builds, crashing at launch with NoSuchMethodError. + val configuration = LocalConfiguration.current + val windowSizeClass = WindowSizeClass.calculateFromSize( + DpSize(configuration.screenWidthDp.dp, configuration.screenHeightDp.dp), + ) HedvigApp( backstackController = backstackController, deepLinkReadySignal = sessionReconciler.isReady,